From b4a87ca2c30b617d8686d9e7b5d30b8ec2714f43 Mon Sep 17 00:00:00 2001 From: Dennis Wobbe <dennis.wobbe@rwth-aachen.de> Date: Thu, 23 Jun 2022 12:35:28 +0200 Subject: [PATCH] Adding Convert Test --- .../Library/Convert/DotWriterTests.cs | 78 ++++++++++++++++ .../Library/Convert/MatrixMarketReaderTest.cs | 91 +++++++++++++++++++ .../Library/Convert/MatrixMarketWriterTest.cs | 90 ++++++++++++++++++ .../SparseTransform.Tests.csproj | 4 + 4 files changed, 263 insertions(+) create mode 100644 src/SparseTransform.Tests/Library/Convert/DotWriterTests.cs create mode 100644 src/SparseTransform.Tests/Library/Convert/MatrixMarketReaderTest.cs create mode 100644 src/SparseTransform.Tests/Library/Convert/MatrixMarketWriterTest.cs diff --git a/src/SparseTransform.Tests/Library/Convert/DotWriterTests.cs b/src/SparseTransform.Tests/Library/Convert/DotWriterTests.cs new file mode 100644 index 0000000..b13f0ff --- /dev/null +++ b/src/SparseTransform.Tests/Library/Convert/DotWriterTests.cs @@ -0,0 +1,78 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Antlr4.Runtime; +using System.Xml.Linq; +using NUnit.Framework; +using SparseTransform.DataStructures; +using SparseTransform.Convert; + + +namespace SparseTransform.Tests.Library.Convert +{ + public class DotWriterTests + { + + + + [Test] + public void writerTestBipartite() + { + DotWriter writer = new DotWriter(); + + BipartiteGraph graph = new BipartiteGraph(); + graph.AddEdge(1, 1); + graph.AddEdge(1, 2); + graph.AddEdge(1, 5); + graph.AddEdge(2, 3); + graph.AddEdge(3, 2); + graph.AddEdge(3, 3); + graph.AddEdge(3, 4); + graph.AddEdge(4, 1); + graph.AddEdge(5, 4); + graph.AddEdge(5, 5); + + string[] lines = writer.Write(graph).Split( + new string[] { "\r\n", "\r", "\n" }, + StringSplitOptions.None + ); + + Assert.That(lines[2], Is.EqualTo("\tc_1 [shape=circle, style=filled]")); + Assert.That(lines[4], Is.EqualTo("\tc_3 [shape=circle, style=filled]")); + Assert.That(lines[5], Is.EqualTo("\tc_4 [shape=circle, style=filled]")); + Assert.That(lines[13], Is.EqualTo("\tc_2 -- {r_3};")); + Assert.That(lines[15], Is.EqualTo("\tc_4 -- {r_1};")); + } + + + + [Test] + public void writerTestAdjacency() + { + DotWriter writer = new DotWriter(); + + AdjacencyGraph graph = new AdjacencyGraph(); + graph.AddEdge(1, 2); + graph.AddEdge(1, 5); + graph.AddEdge(3, 2); + graph.AddEdge(3, 4); + graph.AddEdge(4, 1); + graph.AddEdge(5, 4); + + string[] lines = writer.Write(graph).Split( + new string[] { "\r\n", "\r", "\n" }, + StringSplitOptions.None + ); + + Assert.That(lines[2], Is.EqualTo("\tc_2 [shape=circle, style=filled]")); + Assert.That(lines[4], Is.EqualTo("\tc_4 [shape=circle, style=filled]")); + Assert.That(lines[5], Is.EqualTo("\tc_5 [shape=circle, style=filled]")); + Assert.That(lines[7], Is.EqualTo("\tc_3 -- {c_2};")); + Assert.That(lines[9], Is.EqualTo("\tc_5 -- {c_1 c_4};")); + } + + + } +} diff --git a/src/SparseTransform.Tests/Library/Convert/MatrixMarketReaderTest.cs b/src/SparseTransform.Tests/Library/Convert/MatrixMarketReaderTest.cs new file mode 100644 index 0000000..74ad09f --- /dev/null +++ b/src/SparseTransform.Tests/Library/Convert/MatrixMarketReaderTest.cs @@ -0,0 +1,91 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Antlr4.Runtime; +using System.Xml.Linq; +using NUnit.Framework; +using SparseTransform.DataStructures; +using SparseTransform.Convert; + +namespace SparseTransform.Tests.Library.Convert +{ + public class MatrixMarketReaderTest + { + private String bipartiteGraph = "%%MatrixMarket matrix coordinate real general\n" + + "% -------------------------------------------------------------------------------\n" + + "% UF Sparse Matrix Collection, Tim Davis\n" + + "%-------------------------------------------------------------------------------\n" + + "5 5 4\n" + + "1 4 34\n" + + "2 3 65\n" + + "5 1 8\n" + + "4 2 6\n" + + "4 3 0\n" + + "1 3 12\n" + + "5 3 24"; + + + private String adjacencyGraph = "%%MatrixMarket matrix coordinate real symmetric\n" + + "% -------------------------------------------------------------------------------\n" + + "% UF Sparse Matrix Collection, Tim Davis\n" + + "%-------------------------------------------------------------------------------\n" + + "5 5 4\n" + + "1 4 34\n" + + "2 3 65\n" + + "5 1 8\n" + + "4 2 6\n" + + "4 3 0\n" + + "1 3 12\n" + + "5 3 24"; + + + + [Test] + public void ReadGraphTestAdjacency() + { + MatrixMarketReader reader = new MatrixMarketReader(); + AdjacencyGraph graph = (AdjacencyGraph)reader.ReadGraph(adjacencyGraph); + + Assert.IsNotNull(graph); + + GraphNode[] nodes = Enumerable.ToArray(graph.GetNodes()); + + Assert.AreEqual(5, nodes.Length); + Assert.That(nodes[0].Index, Is.EqualTo(1)); + Assert.That(nodes[1].Index, Is.EqualTo(2)); + Assert.That(nodes[2].Index, Is.EqualTo(3)); + Assert.That(nodes[3].Index, Is.EqualTo(4)); + Assert.That(nodes[4].Index, Is.EqualTo(5)); + + Assert.That(nodes[0].Neighbors.First().Index, Is.EqualTo(4)); + Assert.That(nodes[1].Neighbors.First().Index, Is.EqualTo(3)); + Assert.That(nodes[2].Neighbors.First().Index, Is.EqualTo(2)); + Assert.That(nodes[3].Neighbors.First().Index, Is.EqualTo(1)); + Assert.That(nodes[4].Neighbors.Last().Index, Is.EqualTo(3)); + } + + + [Test] + public void ReadGraphTestBipartite() + { + MatrixMarketReader reader = new MatrixMarketReader(); + BipartiteGraph graph = (BipartiteGraph)reader.ReadGraph(bipartiteGraph); + + Assert.IsNotNull(graph); + + GraphNode[] rightNodes = Enumerable.ToArray(graph.GetRightNodes()); + + Assert.That(rightNodes.Length, Is.EqualTo(4)); + + Assert.That(rightNodes[0].Index, Is.EqualTo(1)); + Assert.That(rightNodes[3].Index, Is.EqualTo(4)); + + Assert.That(rightNodes[0].Neighbors.First().Index, Is.EqualTo(5)); + Assert.That(rightNodes[1].Neighbors.First().Index, Is.EqualTo(4)); + Assert.That(rightNodes[2].Neighbors.First().Index, Is.EqualTo(2)); + Assert.That(rightNodes[3].Neighbors.First().Index, Is.EqualTo(1)); + } + } +} diff --git a/src/SparseTransform.Tests/Library/Convert/MatrixMarketWriterTest.cs b/src/SparseTransform.Tests/Library/Convert/MatrixMarketWriterTest.cs new file mode 100644 index 0000000..20e937f --- /dev/null +++ b/src/SparseTransform.Tests/Library/Convert/MatrixMarketWriterTest.cs @@ -0,0 +1,90 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Antlr4.Runtime; +using System.Xml.Linq; +using NUnit.Framework; +using SparseTransform.DataStructures; +using SparseTransform.Convert; + + +namespace SparseTransform.Tests.Library.Convert +{ + public class MatrixMarketWriterTest + { + + private String bipartiteGraph = "%%MatrixMarket matrix coordinate real general\n" + + "% -------------------------------------------------------------------------------\n" + + "% UF Sparse Matrix Collection, Tim Davis\n" + + "%-------------------------------------------------------------------------------\n" + + "5 5 4\n" + + "1 4 34\n" + + "2 3 65\n" + + "5 1 8\n" + + "4 2 6\n" + + "4 3 0\n" + + "1 3 12\n" + + "5 3 24"; + + + private String adjacencyGraph = "%%MatrixMarket matrix coordinate real symmetric\n" + + "% -------------------------------------------------------------------------------\n" + + "% UF Sparse Matrix Collection, Tim Davis\n" + + "%-------------------------------------------------------------------------------\n" + + "5 5 4\n" + + "1 4 34\n" + + "2 3 65\n" + + "5 1 8\n" + + "4 2 6\n" + + "4 3 0\n" + + "1 3 12\n" + + "5 3 24"; + + + [Test] + public void WriteTestBipartite() + { + MatrixMarketReader reader = new MatrixMarketReader(); + IGraph graph = reader.ReadGraph(bipartiteGraph); + Colorer color = new Colorer(); + color.PartialD2Color((BipartiteGraph)graph); + DoubleMatrix inputMatrix = reader.ReadMatrix(bipartiteGraph); + MatrixMarketWriter writer = new MatrixMarketWriter(false, inputMatrix); + + string[] lines = writer.Write(graph).Split( + new string[] { "\r\n", "\r", "\n" }, + StringSplitOptions.None + ); + + Assert.That(lines[0], Is.EqualTo("%%MatrixMarket matrix coordinate real general")); + Assert.That(lines[2], Is.EqualTo("0 0 34")); + Assert.That(lines[5], Is.EqualTo("3 0 6")); + Assert.That(lines[6], Is.EqualTo("4 0 8")); + } + + + [Test] + public void WriteTestAdjacency() + { + MatrixMarketReader reader = new MatrixMarketReader(); + IGraph graph = reader.ReadGraph(adjacencyGraph); + Colorer color = new Colorer(); + color.StarColor1((AdjacencyGraph)graph); + DoubleMatrix inputMatrix = reader.ReadMatrix(adjacencyGraph); + MatrixMarketWriter writer = new MatrixMarketWriter(false, inputMatrix); + + string[] lines = writer.Write(graph).Split( + new string[] { "\r\n", "\r", "\n" }, + StringSplitOptions.None + ); + + Assert.That(lines[0], Is.EqualTo("%%MatrixMarket matrix coordinate real general")); + Assert.That(lines[2], Is.EqualTo("0 2 12")); + Assert.That(lines[5], Is.EqualTo("3 1 6")); + Assert.That(lines[6], Is.EqualTo("4 0 8")); + } + + } +} diff --git a/src/SparseTransform.Tests/SparseTransform.Tests.csproj b/src/SparseTransform.Tests/SparseTransform.Tests.csproj index 0bd1118..b1fa8ff 100644 --- a/src/SparseTransform.Tests/SparseTransform.Tests.csproj +++ b/src/SparseTransform.Tests/SparseTransform.Tests.csproj @@ -18,4 +18,8 @@ <ProjectReference Include="..\SparseTransform\SparseTransform.csproj" /> </ItemGroup> + <ItemGroup> + <Folder Include="Library\Convert\" /> + </ItemGroup> + </Project> -- GitLab