def test_ParentIsAlreadyKnown(self): tree = KeyedTree() tree.add_pair("parent", "child") tree.add_pair("parent", "brother") self.assertEqual(tree.get_node("parent"), KeyedNode("parent")) self.assertEqual(tree.get_node("child"), KeyedNode("child")) self.assertEqual(tree.get_node("brother"), KeyedNode("brother")) self.assertListEqual( tree.get_node("parent").get_child_nodes(), [KeyedNode("child"), KeyedNode("brother")])
def test_GetMissingNode(self): tree = KeyedTree() def missingNode(): return tree.get_node("No Such Node") self.assertRaises(NoSuchNode, missingNode) tree.add_pair("parent", "child") self.assertRaises(NoSuchNode, missingNode)
def test_GetAddedNodes(self): tree = KeyedTree() tree.add_pair("parent", "child") self.assertEqual(tree.get_node("parent"), KeyedNode("parent")) self.assertEqual(tree.get_node("child"), KeyedNode("child")) self.assertEqual( tree.get_node("child").get_parent(), tree.get_node("parent"))
def test_GetPath_Cousin(self): tree = KeyedTree() tree.add_pair("grandparent", "uncle") tree.add_pair("grandparent", "parent") tree.add_pair("uncle", "cousin") tree.add_pair("parent", "child") self.assertListEqual(tree.get_path("cousin", "child"), [ KeyedNode("uncle"), KeyedNode("grandparent"), KeyedNode("parent") ]) self.assertListEqual(tree.get_path("child", "cousin"), [ KeyedNode("parent"), KeyedNode("grandparent"), KeyedNode("uncle") ])
class OrbitCounter: def __init__(self): self.tree = KeyedTree() def add(self, orbiting, orbiter): self.tree.add_pair(orbiting, orbiter) def get_orbits(self): count = 0 def counter(node): nonlocal count count += node.get_depth() self.tree.for_each_node(counter) return count def get_hops(self, start_point, santa): return len(self.tree.get_path(start_point, santa)) - 1
def test_GetPath_IsolatedNode(self): tree = KeyedTree() tree.add_pair("uncle", "cousin") tree.add_pair("parent", "child") self.assertRaises(TreeIsSplit, lambda: tree.get_path("uncle", "child")) self.assertRaises(TreeIsSplit, lambda: tree.get_path("child", "uncle")) self.assertRaises(TreeIsSplit, lambda: tree.get_path("uncle", "parent"))
def __init__(self): self.tree = KeyedTree()
def test_GetPath_ParentChild(self): tree = KeyedTree() tree.add_pair("parent", "child") self.assertListEqual(tree.get_path("parent", "child"), []) self.assertListEqual(tree.get_path("child", "parent"), [])
def test_GetPath_SameNode(self): tree = KeyedTree() tree.add_pair("parent", "child") self.assertRaises(DuplicateNode, lambda: tree.get_path("parent", "parent"))
def test_GetPath_NoSuchNode(self): tree = KeyedTree() tree.add_pair("parent", "child") self.assertRaises(NoSuchNode, lambda: tree.get_path("parent", "xxx")) self.assertRaises(NoSuchNode, lambda: tree.get_path("xxx", "child"))
def test_KeyList_Repeats(self): tree = KeyedTree() tree.add_pair("parent", "child") tree.add_pair("parent", "brother") tree.add_pair("parent", "sister") tree.add_pair("grandparent", "parent") expected = [ KeyedNode(n) for n in ["parent", "child", "brother", "sister", "grandparent"] ] nodes = [] tree.for_each_node(lambda n: nodes.append(n)) self.assertListEqual(nodes, expected)
def test_ForEach_Empty(self): nodes = [] tree = KeyedTree() tree.for_each_node(lambda n: nodes.append(n)) self.assertListEqual(nodes, [])
def test_ChildIsAlreadyKnown(self): tree = KeyedTree() tree.add_pair("parent", "child") tree.add_pair("grandparent", "parent") self.assertEqual(tree.get_node("parent"), KeyedNode("parent")) self.assertEqual(tree.get_node("grandparent"), KeyedNode("grandparent")) self.assertEqual(tree.get_node("child"), KeyedNode("child")) self.assertListEqual( tree.get_node("parent").get_child_nodes(), [KeyedNode("child")]) self.assertEqual( tree.get_node("parent").get_parent(), tree.get_node("grandparent"))