コード例 #1
0
ファイル: Node.cs プロジェクト: whoisjake/TopologicalSort
        /// <summary>
        /// Adds the child node.
        /// </summary>
        /// <param name="childNode">The child node.</param>
        public void AddChildNode(Node childNode)
        {
            if (!this.Children.Contains(childNode))
            {
                this.Children.Add(childNode);
            }

            childNode.Parent = this;
        }
コード例 #2
0
ファイル: NodeTest.cs プロジェクト: whoisjake/TopologicalSort
        public void TestTopologicalSorter()
        {
            List<Node> nodes = new List<Node>();

            Node seven = new Node(7);
            nodes.Add(seven);

            Node five = new Node(5);
            nodes.Add(five);

            Node three = new Node(3);
            nodes.Add(three);

            Node eleven = new Node(11);
            nodes.Add(eleven);

            Node eight = new Node(8);
            nodes.Add(eight);

            Node two = new Node(2);
            nodes.Add(two);

            Node nine = new Node(9);
            nodes.Add(nine);

            Node ten = new Node(10);
            nodes.Add(ten);

            three.Parent = two;
            eleven.Parent = seven;
            seven.Parent = eight;
            five.Parent = nine;
            ten.Parent = eleven;
            nine.Parent = eleven;

            TopologicalSorter<Node> sorter = new TopologicalSorter<Node>();

            IList<Node> sorted = sorter.Sort(nodes);

            StringBuilder sb = new StringBuilder();

            foreach (Node node in sorted)
            {
                sb.Append(node.ID + " ");
            }

            Assert.IsTrue(sorted.IndexOf(two) < sorted.IndexOf(three), "The order: " + sb.ToString());
            Assert.IsTrue(sorted.IndexOf(eight) < sorted.IndexOf(seven), "The order: " + sb.ToString());
            Assert.IsTrue(sorted.IndexOf(seven) < sorted.IndexOf(eleven), "The order: " + sb.ToString());
            Assert.IsTrue(sorted.IndexOf(eleven) < sorted.IndexOf(nine), "The order: " + sb.ToString());
            Assert.IsTrue(sorted.IndexOf(eleven) < sorted.IndexOf(ten), "The order: " + sb.ToString());
            Assert.IsTrue(sorted.IndexOf(nine) < sorted.IndexOf(five), "The order: " + sb.ToString());

            Random rand = new Random((int)DateTime.Now.Ticks);

            for (int i = 0; i < 10000; i++)
            {
                List<Node> newList = this.RandomizeList(sorted, rand);

                sorted = sorter.Sort(newList);

                sb = new StringBuilder();

                foreach (Node node in sorted)
                {
                    sb.Append(node.ID + " ");
                }

                Assert.IsTrue(sorted.IndexOf(two) < sorted.IndexOf(three), "The order: " + sb.ToString());
                Assert.IsTrue(sorted.IndexOf(eight) < sorted.IndexOf(seven), "The order: " + sb.ToString());
                Assert.IsTrue(sorted.IndexOf(seven) < sorted.IndexOf(eleven), "The order: " + sb.ToString());
                Assert.IsTrue(sorted.IndexOf(eleven) < sorted.IndexOf(nine), "The order: " + sb.ToString());
                Assert.IsTrue(sorted.IndexOf(eleven) < sorted.IndexOf(ten), "The order: " + sb.ToString());
                Assert.IsTrue(sorted.IndexOf(nine) < sorted.IndexOf(five), "The order: " + sb.ToString());
            }
        }
コード例 #3
0
ファイル: Node.cs プロジェクト: whoisjake/TopologicalSort
        /// <summary>
        /// Removes the child node.
        /// </summary>
        /// <param name="childNode">The child node.</param>
        public void RemoveChildNode(Node childNode)
        {
            if (this.Children.Contains(childNode))
            {
                this.Children.Remove(childNode);
            }

            childNode.Parent = null;
        }
コード例 #4
0
ファイル: NodeTest.cs プロジェクト: whoisjake/TopologicalSort
        public void TestTopologicalSorterWithCircularGraph()
        {
            List<Node> nodes = new List<Node>();

            Node seven = new Node(7);
            nodes.Add(seven);

            Node five = new Node(5);
            nodes.Add(five);

            five.Parent = seven;
            seven.Parent = five;

            TopologicalSorter<Node> sorter = new TopologicalSorter<Node>();

            IList<Node> sorted = sorter.Sort(nodes);
        }