public void AddChild_ChildNodeHasReferenceToParent() { var parent = new ProgramTreeNode("test", 1); var child = new ProgramTreeNode("child", 1); parent.AddChild(child); Assert.AreEqual(parent, child.Parent); }
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()); }
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)); }
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); }