private static void SerializeAndRead <TVertex, TEdge, TGraph>(
            [NotNull] XmlSerializableGraph <TVertex, TEdge, TGraph> graph,
            [NotNull, InstantHandle] Action <string> checkSerializedContent)
            where TEdge : IEdge <TVertex>
            where TGraph : IMutableVertexAndEdgeListGraph <TVertex, TEdge>, new()
        {
            using (var memory = new MemoryStream())
            {
                var writer = new StreamWriter(memory);
                try
                {
                    var serializer = new XmlSerializer(graph.GetType());
                    serializer.Serialize(writer, graph);

                    memory.Position = 0;

                    using (var reader = new StreamReader(memory))
                    {
                        checkSerializedContent(reader.ReadToEnd());
                    }
                }
                finally
                {
                    writer.Dispose();
                }
            }
        }
        public void XmlEdgeList_Add_Throws()
        {
            var graph    = new AdjacencyGraph <int, Edge <int> >();
            var edgeList = new XmlSerializableGraph <int, Edge <int>, AdjacencyGraph <int, Edge <int> > > .XmlEdgeList(graph);

            // ReSharper disable once AssignNullToNotNullAttribute
            Assert.Throws <ArgumentNullException>(() => edgeList.Add(null));
        }
        public void SerializeToXml_Empty()
        {
            var emptyGraph = new XmlSerializableGraph <Person, XmlSerializableEdge <Person>, AdjacencyGraph <Person, XmlSerializableEdge <Person> > >();

            SerializeAndRead(
                emptyGraph,
                content =>
            {
                var regex = new Regex($@"{Regex.Escape(XmlHeader)}\s*<graph\s*.*?\s*>\s*<vertices\s*\/>\s*<edges\s*\/>\s*<\/graph>");
                Assert.IsTrue(regex.Match(content).Success);
            });
        }
Exemple #4
0
        public void XmlSerializableGraph()
        {
            var wrappedGraph = new AdjacencyGraph <int, Edge <int> >();
            var graph        = new XmlSerializableGraph <int, Edge <int>, AdjacencyGraph <int, Edge <int> > >(wrappedGraph);

            CollectionAssert.IsEmpty(graph.Vertices);
            CollectionAssert.IsEmpty(graph.Edges);

            var vertices = new XmlSerializableGraph <
                int,
                Edge <int>,
                AdjacencyGraph <int, Edge <int> >
                > .XmlVertexList(
                wrappedGraph
                )
            {
                1, 2
            };

            graph.Vertices = vertices;

            CollectionAssert.AreEqual(
                new[] { 1, 2 },
                graph.Vertices);
            CollectionAssert.IsEmpty(graph.Edges);

            var edge12 = new Edge <int>(1, 2);
            var edge22 = new Edge <int>(2, 2);
            var edges  = new XmlSerializableGraph <
                int,
                Edge <int>,
                AdjacencyGraph <int, Edge <int> >
                > .XmlEdgeList(
                wrappedGraph
                )
            {
                edge12, edge22
            };

            graph.Edges = edges;

            CollectionAssert.AreEqual(
                new[] { 1, 2 },
                graph.Vertices);
            CollectionAssert.AreEqual(
                new[] { edge12, edge22 },
                graph.Edges);
        }
        public void SerializeToXml()
        {
            var wrappedGraph = new AdjacencyGraph <int, XmlSerializableEdge <int> >();

            wrappedGraph.AddVerticesAndEdgeRange(new[]
            {
                new XmlSerializableEdge <int> {
                    Source = 1, Target = 2
                },
                new XmlSerializableEdge <int> {
                    Source = 1, Target = 3
                },
                new XmlSerializableEdge <int> {
                    Source = 2, Target = 2
                },
            });
            wrappedGraph.AddVertex(4);

            var graph = new XmlSerializableGraph <int, XmlSerializableEdge <int>, AdjacencyGraph <int, XmlSerializableEdge <int> > >(wrappedGraph);

            SerializeAndRead(
                graph,
                content =>
            {
                var graphContent = new StringBuilder();

                graphContent.Append(@"<vertices>\s*");
                foreach (int vertex in graph.Vertices)
                {
                    graphContent.Append(
                        $@"<vertex>{vertex}<\/vertex>\s*");
                }
                graphContent.Append(@"<\/vertices>\s*");

                graphContent.Append(@"<edges>\s*");
                foreach (XmlSerializableEdge <int> edge in graph.Edges)
                {
                    graphContent.Append(
                        $@"<edge>\s*<Source>{edge.Source}<\/Source>\s*<Target>{edge.Target}<\/Target>\s*<\/edge>\s*");
                }
                graphContent.Append(@"<\/edges>");

                var regex = new Regex(
                    $@"{Regex.Escape(XmlHeader)}\s*<graph\s*.*?\s*>\s*{graphContent}\s*<\/graph>");
                Assert.IsTrue(regex.Match(content).Success);
            });
        }
        public void XmlVertexList_Add()
        {
            var graph      = new AdjacencyGraph <int, Edge <int> >();
            var vertexList = new XmlSerializableGraph <int, Edge <int>, AdjacencyGraph <int, Edge <int> > > .XmlVertexList(graph);

            CollectionAssert.IsEmpty(vertexList);

            vertexList.Add(1);

            CollectionAssert.AreEqual(
                new[] { 1 },
                vertexList);

            vertexList.Add(2);

            CollectionAssert.AreEqual(
                new[] { 1, 2 },
                vertexList);
        }
        public void XmlEdgeList_Add()
        {
            var graph    = new AdjacencyGraph <int, Edge <int> >();
            var edgeList = new XmlSerializableGraph <int, Edge <int>, AdjacencyGraph <int, Edge <int> > > .XmlEdgeList(graph);

            CollectionAssert.IsEmpty(edgeList);

            var edge12 = new Edge <int>(1, 2);

            edgeList.Add(edge12);

            CollectionAssert.AreEqual(
                new[] { edge12 },
                edgeList);

            var edge22 = new Edge <int>(2, 2);

            edgeList.Add(edge22);

            CollectionAssert.AreEqual(
                new[] { edge12, edge22 },
                edgeList);
        }
        public void XmlVertexList()
        {
            var graph      = new AdjacencyGraph <int, Edge <int> >();
            var vertexList = new XmlSerializableGraph <int, Edge <int>, AdjacencyGraph <int, Edge <int> > > .XmlVertexList(graph);

            CollectionAssert.IsEmpty(vertexList);

            var edge12 = new Edge <int>(1, 2);
            var edge22 = new Edge <int>(2, 2);

            graph.AddVerticesAndEdgeRange(new[] { edge12, edge22 });

            CollectionAssert.AreEqual(
                new[] { 1, 2 },
                vertexList);

            graph = new AdjacencyGraph <int, Edge <int> >();
            graph.AddVerticesAndEdgeRange(new[] { edge12, edge22 });
            vertexList = new XmlSerializableGraph <int, Edge <int>, AdjacencyGraph <int, Edge <int> > > .XmlVertexList(graph);

            CollectionAssert.AreEqual(
                new[] { 1, 2 },
                vertexList);
        }