예제 #1
0
        public void RandomTree_DoChildrenAndParentCorrespond_CoherenceBetweenParentAndChildren()
        {
            mtg t = new mtg();

            int lastVertex = algorithm.RandomTree(t, t.root, 5000, 100);

            foreach (int childId in t.parent.Keys)
            {
                if (childId != 0)
                {
                    int?parentId = t.Parent(childId);
                    Assert.IsNotNull(parentId);

                    CollectionAssert.Contains(t.Children((int)parentId), childId);
                }
            }

            foreach (int parentId in t.children.Keys)
            {
                foreach (int childId in t.Children(parentId))
                {
                    Assert.AreEqual(t.Parent(childId), parentId);
                }
            }
        }
예제 #2
0
        public void RecursivePostOrderTest()
        {
            mtg tree = new mtg();

            int lastVertex = a.RandomTree(tree, tree.root, 7000);
            IEnumerable <int> iterativeList = t.RecursivePostOrder(tree, 0);
        }
예제 #3
0
        public void Components()
        {
            mtg tree = new mtg();
            int root = tree.root;

            // Scale 1

            int root1   = tree.AddComponent(root);
            int vertex1 = tree.AddChild(root1);
            int vertex2 = tree.AddChild(root1);
            int vertex3 = tree.AddChild(root1);
            int vertex4 = tree.AddChild(vertex1);
            int vertex5 = tree.AddChild(vertex1);

            // Verifications

            Assert.AreEqual(6, tree.NbComponents(root));

            List <int> expectedListOfComponents = new List <int>()
            {
                root1, vertex1, vertex4, vertex5, vertex2, vertex3
            };

            CollectionAssert.AreEqual(expectedListOfComponents, tree.Components(root));

            Assert.AreEqual(tree.NbComponents(root1), 0);
            Assert.AreEqual(tree.NbComponents(vertex1), 0);
            Assert.AreEqual(tree.NbComponents(vertex2), 0);
        }
예제 #4
0
        public void SimpleTree()
        {
            mtg tree = new mtg();

            tree = algorithm.SimpleTree(tree, tree.root);

            IEnumerable <int> s1 = t.IterativePreOrder(tree, tree.root);
            IEnumerable <int> s2 = t.IterativePostOrder(tree, tree.root);

            Func <IEnumerable <int>, int> Counter = new Func <IEnumerable <int>, int>(source =>
            {
                int res = 0;

                foreach (var item in source)
                {
                    res++;
                }

                return(res);
            });

            Assert.AreEqual(21, tree.NbVertices());
            Assert.AreEqual(Counter(s1), Counter(s2));
            Assert.AreEqual(21, Counter(s1));
        }
예제 #5
0
        public void IterativePreOrderTest()
        {
            mtg tree = new mtg();

            int lastVertex = a.RandomTree(tree, tree.root, 2000);
            IEnumerable <int> iterativeList = t.IterativePreOrder(tree, 0);
        }
예제 #6
0
        public void PostOrderResultsAreTheSame()
        {
            mtg tree = new mtg();

            int lastVertex = a.RandomTree(tree, tree.root, 2000);

            Assert.IsTrue(Enumerable.SequenceEqual <int>(t.IterativePostOrder(tree, 0), t.RecursivePostOrder(tree, 0)));
        }
예제 #7
0
        public void HasVertex_VertexDoesntExist_ReturnsFalse()
        {
            mtg tree = new mtg();

            tree.scale.Add(1, 12);

            Assert.IsFalse(tree.HasVertex(2));
        }
예제 #8
0
        public void Vertices_EmptyMtg_ReturnsEmptyList()
        {
            mtg tree = new mtg();

            CollectionAssert.AreEqual(tree.Vertices(1), new List <int>()
            {
            });
        }
예제 #9
0
        public void Scales_EmptyMtg_OneScale()
        {
            mtg tree = new mtg();

            CollectionAssert.AreEqual(tree.Scales(), new List <int> ()
            {
                0
            });
        }
예제 #10
0
        public void HasVertex_VertexExists_ReturnsTrue()
        {
            mtg tree = new mtg();

            tree.scale.Add(1, 12);

            Assert.IsTrue(tree.HasVertex(1));
            Assert.IsTrue(tree.HasVertex(0));
        }
예제 #11
0
        public void MtgTest()
        {
            mtg tree = new mtg();

            int root = tree.root;

            Assert.AreEqual(0, root);

            // Scale 1

            int root1 = tree.AddComponent(root, new Dictionary <string, dynamic>()
            {
            });
            int vertex1 = tree.AddChild(root1);
            int vertex2 = tree.AddChild(root1);
            int vertex3 = tree.AddChild(root1);

            int vertex4 = tree.AddChild(vertex1);
            int vertex5 = tree.AddChild(vertex1);

            // Verify complex

            Assert.AreEqual(root, tree.Complex(root1));
            Assert.AreEqual(root, tree.Complex(vertex1));
            Assert.AreEqual(root, tree.Complex(vertex2));
            Assert.AreEqual(root, tree.Complex(vertex3));
            Assert.AreEqual(root, tree.Complex(vertex4));
            Assert.AreEqual(root, tree.Complex(vertex5));

            // Verify parents

            Assert.AreEqual(vertex1, tree.Parent(vertex5));
            Assert.AreEqual(vertex1, tree.Parent(vertex4));
            Assert.AreEqual(root1, tree.Parent(vertex3));
            Assert.AreEqual(root1, tree.Parent(vertex2));
            Assert.AreEqual(root1, tree.Parent(vertex1));

            // Verify children

            CollectionAssert.AreEqual(new List <int>()
            {
                vertex1, vertex2, vertex3
            }, tree.Children(root1));
            CollectionAssert.AreEqual(new List <int>()
            {
                vertex4, vertex5
            }, tree.Children(vertex1));
            Assert.IsFalse(tree.children.ContainsKey(vertex2));
            Assert.IsFalse(tree.children.ContainsKey(vertex3));
            Assert.IsFalse(tree.children.ContainsKey(vertex4));
            Assert.IsFalse(tree.children.ContainsKey(vertex5));

            // Verify length of the mtg

            Assert.AreEqual(7, tree.NbVertices());
        }
예제 #12
0
        public void RandomTree_NumberOfVerticesCreated_SameAsParameter()
        {
            mtg t = new mtg();

            int numberOfExpectedVertices = 5000;

            int lastVertex = algorithm.RandomTree(t, t.root, numberOfExpectedVertices);

            Assert.AreEqual(numberOfExpectedVertices + 1, ((Tree)t).NbVertices());
        }
예제 #13
0
        public void MaxScale_NormalMtg_ReturnsMaximum()
        {
            mtg tree = new mtg();

            tree.scale.Add(1, 1);
            tree.scale.Add(2, 1);
            tree.scale.Add(3, 3);
            tree.scale.Add(4, 5);

            Assert.AreEqual(tree.MaxScale(), 5);
        }
예제 #14
0
        public void NbScales_NormalMtg_ReturnsNumberOfScales()
        {
            mtg tree = new mtg();

            tree.scale.Add(1, 1);
            tree.scale.Add(2, 1);
            tree.scale.Add(3, 2);
            tree.scale.Add(4, 2);

            Assert.AreEqual(tree.NbScales(), 3);
        }
예제 #15
0
        public void RandomTree_NumberOfChildrenRespected_LessOrEqualToTheParameter()
        {
            mtg t = new mtg();

            int maximumNbChildren = 9;

            int lastVertex = algorithm.RandomTree(t, t.root, 5000, maximumNbChildren);

            foreach (int keyId in t.children.Keys)
            {
                Assert.IsTrue(t.NbChildren(keyId) <= maximumNbChildren);
            }
        }
예제 #16
0
        public void Mtg_NewMtg_AttributesInitializedPropertiesAdded()
        {
            mtg tree = new mtg();

            Assert.AreEqual(tree.scale[0], 0);

            List <string> realList     = tree.PropertyNames();
            List <string> expectedList = new List <string>()
            {
                "Edge_Type", "label"
            };

            CollectionAssert.AreEqual(realList, expectedList);
        }
예제 #17
0
        public void Scale_NormalCase_ReturnsScale()
        {
            mtg tree = new mtg();

            tree.scale.Add(1, 1);
            tree.scale.Add(2, 1);
            tree.scale.Add(3, 2);
            tree.scale.Add(4, 2);

            // Verify that the mapping is correct.
            Assert.AreEqual(tree.Scale(0), 0);
            Assert.AreEqual(tree.Scale(1), 1);
            Assert.AreEqual(tree.Scale(2), 1);
            Assert.AreEqual(tree.Scale(3), 2);
            Assert.AreEqual(tree.Scale(4), 2);
        }
예제 #18
0
        public void Clear()
        {
            mtg tree = new mtg();

            Assert.AreEqual(1, tree.NbVertices());

            int vertex1 = tree.AddComponent(tree.root);

            Assert.AreEqual(2, tree.NbVertices());

            tree.Clear();
            Assert.AreEqual(1, tree.NbVertices());

            int vertex2 = tree.AddComponent(tree.root);

            Assert.AreEqual(vertex1, vertex2);
        }
예제 #19
0
        public void Edges_NormalTree_ListOfKeyValues()
        {
            mtg tree = new mtg();

            // Add 4 children. Parents/children are : (0 => 1), (1 => 2,3) , (3 => 4).
            int firstChild  = tree.AddChild(0);
            int secondChild = tree.AddChild(firstChild);
            int thirdChild  = tree.AddChild(firstChild);
            int fourthChild = tree.AddChild(thirdChild);

            // Assign a scale to each vertex.
            tree.scale[firstChild]  = 1;
            tree.scale[secondChild] = 1;
            tree.scale[thirdChild]  = 2;
            tree.scale[fourthChild] = 2;

            // Without specifying the scale
            List <KeyValuePair <int, int> > expectedResult = new List <KeyValuePair <int, int> >();

            expectedResult.Add(new KeyValuePair <int, int>(0, 1));
            expectedResult.Add(new KeyValuePair <int, int>(1, 2));
            expectedResult.Add(new KeyValuePair <int, int>(1, 3));
            expectedResult.Add(new KeyValuePair <int, int>(3, 4));

            CollectionAssert.AreEqual(expectedResult, tree.Edges());

            // Scale 0
            List <KeyValuePair <int, int> > expectedResult2 = new List <KeyValuePair <int, int> >();

            expectedResult2.Add(new KeyValuePair <int, int>(0, 1));
            CollectionAssert.AreEqual(expectedResult2, tree.Edges(0));

            // Scale 1
            List <KeyValuePair <int, int> > expectedResult3 = new List <KeyValuePair <int, int> >();

            expectedResult3.Add(new KeyValuePair <int, int>(1, 2));
            expectedResult3.Add(new KeyValuePair <int, int>(1, 3));
            CollectionAssert.AreEqual(expectedResult3, tree.Edges(1));

            // Scale 2
            List <KeyValuePair <int, int> > expectedResult4 = new List <KeyValuePair <int, int> >();

            expectedResult4.Add(new KeyValuePair <int, int>(3, 4));
            CollectionAssert.AreEqual(expectedResult4, tree.Edges(2));
        }
예제 #20
0
        public void Vertices_NormalMtg_ReturnsListOfVertices()
        {
            mtg tree = new mtg();

            tree.scale.Add(1, 1);
            tree.scale.Add(2, 1);
            tree.scale.Add(3, 3);
            tree.scale.Add(4, 5);

            CollectionAssert.AreEqual(tree.Vertices(1), new List <int>()
            {
                1, 2
            });
            CollectionAssert.AreEqual(tree.Vertices(3), new List <int>()
            {
                3
            });
        }
예제 #21
0
        public void AddChildAndComplex()
        {
            mtg tree = new mtg();
            int root = tree.root;

            int root1 = tree.AddComponent(root);
            int root2 = tree.AddComponent(root1);

            int vertex12 = tree.AddChild(root2);
            int vertex22 = tree.AddChild(vertex12);

            List <int> vertexAndComplex32 = tree.AddChildAndComplex(vertex22);

            int vertex32        = vertexAndComplex32[0];
            int vertex32complex = vertexAndComplex32[1];

            Assert.AreEqual(7, tree.NbVertices());
            CollectionAssert.Contains(tree.Children(vertex22), vertex32);
            CollectionAssert.Contains(tree.Children(root1), vertex32complex);
        }
예제 #22
0
        public void RemoveVertex()
        {
            mtg tree = new mtg();
            int root = tree.root;

            // Scale 1

            int root1   = tree.AddComponent(root);
            int vertex1 = tree.AddChild(root1);
            int vertex2 = tree.AddChild(root1);
            int vertex3 = tree.AddChild(root1);
            int vertex4 = tree.AddChild(vertex1);
            int vertex5 = tree.AddChild(vertex1);

            int numberVertices = tree.NbVertices();

            tree.RemoveVertex(vertex5);
            tree.RemoveVertex(vertex1, true);

            Assert.AreEqual(numberVertices - 2, tree.NbVertices());
        }
예제 #23
0
        public void Properties()
        {
            Algorithm a = new Algorithm();

            mtg tree = new mtg();
            int root = tree.root;

            int root1 = tree.AddComponent(root);
            int vid   = a.RandomTree(tree, root1, 18);

            List <int> childAndComplex = tree.AddChildAndComplex(vid);

            vid = a.RandomTree(tree, childAndComplex[0], 18);

            List <int> childAndComplex2 = tree.AddChildAndComplex(vid);

            vid = a.RandomTree(tree, childAndComplex2[0], 18);

            Assert.IsTrue(tree.PropertyNames().Contains("Edge_Type"));
            Assert.AreEqual(18 * 3, tree.Property("Edge_Type").Count);
        }
예제 #24
0
        public void Scales_NormalMtg_CorrectList()
        {
            mtg tree = new mtg();

            // Add 4 vertices in two different scales.
            tree.scale.Add(1, 1);
            tree.scale.Add(2, 1);
            tree.scale.Add(3, 2);
            tree.scale.Add(4, 2);

            List <int> realList     = tree.Scales();
            List <int> expectedList = new List <int>()
            {
                0, 1, 2
            };

            // Expected number is 3 because the root is at scale 0.
            Assert.AreEqual(realList.Count, 3);

            CollectionAssert.AreEqual(realList, expectedList);
        }
예제 #25
0
        public void Complex_NormalMtg_ComplexReturned()
        {
            mtg tree = new mtg();

            // Add 4 children. Parents/children are : (0 => 1), (1 => 2,3) , (3 => 4).
            int firstChild  = tree.AddChild(0);
            int secondChild = tree.AddChild(firstChild);
            int thirdChild  = tree.AddChild(firstChild);
            int fourthChild = tree.AddChild(thirdChild);
            int fifthChild  = tree.AddChild(0);

            // Assign a complex to the firstChild
            tree.complex.Add(firstChild, 0);

            Assert.AreEqual(tree.Complex(firstChild), 0);
            Assert.AreEqual(tree.Complex(secondChild), 0);
            Assert.AreEqual(tree.Complex(thirdChild), 0);
            Assert.AreEqual(tree.Complex(fourthChild), 0);

            Assert.IsNull(tree.Complex(fifthChild));
        }
예제 #26
0
        public void NbVertices_NormalMtg_CorrectNumberForEachScale()
        {
            mtg tree = new mtg();

            tree.scale.Add(1, 1);
            tree.scale.Add(2, 1);
            tree.scale.Add(3, 3);
            tree.scale.Add(4, 5);

            // Counts all vertices since scale isn't specified.
            Assert.AreEqual(tree.NbVertices(), 5);

            // Gives the right count for vertices by scale.
            Assert.AreEqual(tree.NbVertices(0), 1);
            Assert.AreEqual(tree.NbVertices(1), 2);
            Assert.AreEqual(tree.NbVertices(3), 1);
            Assert.AreEqual(tree.NbVertices(5), 1);

            // Gives answer zero for a scale which doesn't exist.
            Assert.AreEqual(tree.NbVertices(2), 0);
        }
예제 #27
0
        public void RandomTree()
        {
            Algorithm a = new Algorithm();

            mtg tree = new mtg();
            int root = tree.root;

            int root1 = tree.AddComponent(root);

            root1 = tree.AddComponent(root1);
            int vid = a.RandomTree(tree, root1, 18);

            List <int> childAndComplex = tree.AddChildAndComplex(vid);

            vid = a.RandomTree(tree, childAndComplex[0], 18);

            List <int> childAndComplex2 = tree.AddChildAndComplex(vid);

            vid = a.RandomTree(tree, childAndComplex2[0], 18);

            Assert.AreEqual(61, tree.NbVertices());
        }
예제 #28
0
        public void NbScales_EmptyMtg_ReturnsOne()
        {
            mtg tree = new mtg();

            Assert.AreEqual(tree.NbScales(), 1);
        }
예제 #29
0
        public void Scale_VertexDoesntExist_ReturnsNull()
        {
            mtg tree = new mtg();

            Assert.IsNull(tree.Scale(1));
        }
예제 #30
0
        public void MaxScale_EmptyMtg_ReturnsZero()
        {
            mtg tree = new mtg();

            Assert.AreEqual(tree.MaxScale(), 0);
        }