Ejemplo n.º 1
0
        public void AddChild_ChildNodeHasReferenceToParent()
        {
            var parent = new ProgramTreeNode("test", 1);
            var child  = new ProgramTreeNode("child", 1);

            parent.AddChild(child);

            Assert.AreEqual(parent, child.Parent);
        }
Ejemplo n.º 2
0
        public void AddChild_ChildNodeAddedToChildrenCollection()
        {
            var parent = new ProgramTreeNode("test", 1);
            var child  = new ProgramTreeNode("child", 1);

            parent.AddChild(child);

            Assert.Contains(child, parent.Children.ToList());
        }
Ejemplo n.º 3
0
        public void CreateNode_GivenNameAndWeight_PropertiesCorrect()
        {
            var name   = "test";
            var weight = 123;
            var node   = new ProgramTreeNode(name, weight);

            Assert.AreEqual(name, node.Name);
            Assert.AreEqual(weight, node.Weight);
        }
        public void GetSubtreeWeight_CalculatesWeightCorrectly()
        {
            var root = new ProgramTreeNode("test", 7);

            root.AddChild(new ProgramTreeNode("test", 2));
            root.AddChild(new ProgramTreeNode("test", 3));
            root.AddChild(new ProgramTreeNode("test", 2));

            Assert.AreEqual(14, _systemUnderTest.GetSubTreeWeight(root));
        }
        public void IsBalanced_FalseIfChildrenNotAllSameWeight()
        {
            var root = new ProgramTreeNode("test", 7);

            root.AddChild(new ProgramTreeNode("test", 2));
            root.AddChild(new ProgramTreeNode("test", 3));
            root.AddChild(new ProgramTreeNode("test", 2));

            Assert.IsFalse(_systemUnderTest.IsBalanced(root));
        }
        public void IsBalanced_TrueIfChildrenAllSameWeight()
        {
            var root = new ProgramTreeNode("test", 6);

            root.AddChild(new ProgramTreeNode("test", 2));
            root.AddChild(new ProgramTreeNode("test", 2));
            root.AddChild(new ProgramTreeNode("test", 2));

            Assert.IsTrue(_systemUnderTest.IsBalanced(root));
        }
Ejemplo n.º 7
0
            public int FindUnbalancedWeight()
            {
                var totalWeights = new FlexibleListDictionary <int, ProgramTreeNode>();

                foreach (var current in programTree.TraverseBottomLevelOrderNodes())
                {
                    foreach (var c in current.Children)
                    {
                        totalWeights[c.TotalWeight].Add(c);
                    }

                    if (totalWeights.Count > 1)
                    {
                        var keys = totalWeights.Keys;

                        int             correctWeight          = 0;
                        int             wrongWeight            = 0;
                        ProgramTreeNode wronglyWeightedProgram = null;

                        foreach (int weight in keys)
                        {
                            if (totalWeights[weight].Count == 1)
                            {
                                wronglyWeightedProgram = totalWeights[weight].First();
                                wrongWeight            = weight;
                            }
                            else
                            {
                                correctWeight = weight;
                            }
                        }

                        return(wronglyWeightedProgram.Value.Weight + (correctWeight - wrongWeight));
                    }

                    totalWeights.Clear();
                }

                return(-1);
            }