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