예제 #1
0
 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")])
예제 #2
0
    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)
예제 #3
0
    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"))
예제 #4
0
 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")
     ])
예제 #5
0
파일: d06.py 프로젝트: LAHumphreys/AOC
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
예제 #6
0
 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"))
예제 #7
0
파일: d06.py 프로젝트: LAHumphreys/AOC
 def __init__(self):
     self.tree = KeyedTree()
예제 #8
0
 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"), [])
예제 #9
0
 def test_GetPath_SameNode(self):
     tree = KeyedTree()
     tree.add_pair("parent", "child")
     self.assertRaises(DuplicateNode,
                       lambda: tree.get_path("parent", "parent"))
예제 #10
0
 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"))
예제 #11
0
    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)
예제 #12
0
 def test_ForEach_Empty(self):
     nodes = []
     tree = KeyedTree()
     tree.for_each_node(lambda n: nodes.append(n))
     self.assertListEqual(nodes, [])
예제 #13
0
 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"))