Exemple #1
0
 def test_can_reroot_complex_tree_with_cousins(self):
     tree = Tree('grandparent', [
         Tree('parent', [
             Tree('x', [
                 Tree('kid-0'),
                 Tree('kid-1')
             ]),
             Tree('sibling-0'),
             Tree('sibling-1')
         ]),
         Tree('uncle', [
             Tree('cousin-0'),
             Tree('cousin-1')
         ])
     ])
     expected = Tree('x', [
         Tree('kid-0'),
         Tree('kid-1'),
         Tree('parent', [
             Tree('sibling-0'),
             Tree('sibling-1'),
             Tree('grandparent', [
                 Tree('uncle', [
                     Tree('cousin-0'),
                     Tree('cousin-1')
                 ])
             ])
         ])
     ])
     self.assertTreeEquals(tree.from_pov('x'), expected)
Exemple #2
0
 def test_find_path_between_two_nodes(self):
     tree = Tree('parent', [
         Tree('x'),
         Tree('sibling')
     ])
     expected = ['x', 'parent']
     self.assertEqual(tree.pathTo('x', 'parent'), expected)
Exemple #3
0
 def test_find_path_between_two_nodes(self):
     tree = Tree('parent', [
         Tree('x'),
         Tree('sibling')
     ])
     expected = ['x', 'parent']
     self.assertEqual(tree.path_to('x', 'parent'), expected)
Exemple #4
0
 def test_can_find_path_to_sibling(self):
     tree = Tree('parent', [
         Tree('a'),
         Tree('x'),
         Tree('b'),
         Tree('c')
     ])
     expected = ['x', 'parent', 'b']
     self.assertEqual(tree.path_to('x', 'b'), expected)
Exemple #5
0
 def test_can_find_path_from_nodes_other_than_x(self):
     tree = Tree('parent', [
         Tree('a'),
         Tree('x'),
         Tree('b'),
         Tree('c')
     ])
     expected = ['a', 'parent', 'c']
     self.assertEqual(tree.path_to('a', 'c'), expected)
Exemple #6
0
 def test_can_find_path_not_involving_root(self):
     tree = Tree('grandparent', [
         Tree('parent', [
             Tree('x'),
             Tree('sibling-0'),
             Tree('sibling-1')
         ])
     ])
     expected = ['x', 'parent', 'sibling-1']
     self.assertEqual(tree.path_to('x', 'sibling-1'), expected)
Exemple #7
0
 def test_errors_if_target_does_not_exist_in_large_tree(self):
     tree = Tree('parent', [
         Tree('x', [
             Tree('kid-0'),
             Tree('kid-1')
         ]),
         Tree('sibling-0'),
         Tree('sibling-1')
     ])
     with self.assertRaisesWithMessage(ValueError):
         tree.from_pov('nonexistent')
Exemple #8
0
 def test_can_reroot_tree_with_parent_and_one_sibling(self):
     tree = Tree('parent', [
         Tree('x'),
         Tree('sibling')
     ])
     expected = Tree('x', [
         Tree('parent', [
             Tree('sibling')
         ])
     ])
     self.assertTreeEquals(tree.from_pov('x'), expected)
Exemple #9
0
 def test_errors_if_source_does_not_exist(self):
     tree = Tree('parent', [
         Tree('x', [
             Tree('kid-0'),
             Tree('kid-1')
         ]),
         Tree('sibling-0'),
         Tree('sibling-1')
     ])
     with self.assertRaisesWithMessage(ValueError):
         tree.path_to('nonexistent', 'x')
Exemple #10
0
 def test_errors_if_target_does_not_exist_in_large_tree(self):
     tree = Tree('parent', [
         Tree('x', [Tree('kid-0'), Tree('kid-1')]),
         Tree('sibling-0'),
         Tree('sibling-1')
     ])
     with self.assertRaisesWithMessage(ValueError):
         tree.fromPov('nonexistent')
Exemple #11
0
 def test_errors_if_source_does_not_exist(self):
     tree = Tree('parent', [
         Tree('x', [Tree('kid-0'), Tree('kid-1')]),
         Tree('sibling-0'),
         Tree('sibling-1')
     ])
     with self.assertRaisesWithMessage(ValueError):
         tree.pathTo('nonexistent', 'x')
Exemple #12
0
 def test_moves_children_of_new_root_to_same_level_as_former_parent(self):
     tree = Tree('parent', [
         Tree('x', [
             Tree('kid-0'),
             Tree('kid-1')
         ])
     ])
     expected = Tree('x', [
         Tree('parent'),
         Tree('kid-0'),
         Tree('kid-1')
     ])
     self.assertTreeEquals(tree.fromPov('x'), expected)
Exemple #13
0
 def test_moves_children_of_new_root_to_same_level_as_former_parent(self):
     tree = Tree('parent', [
         Tree('x', [
             Tree('kid-0'),
             Tree('kid-1')
         ])
     ])
     expected = Tree('x', [
         Tree('parent'),
         Tree('kid-0'),
         Tree('kid-1')
     ])
     self.assertTreeEquals(tree.from_pov('x'), expected)
Exemple #14
0
 def test_errors_if_destination_does_not_exist(self):
     tree = Tree('parent', [
         Tree('x', [
             Tree('kid-0'),
             Tree('kid-1')
         ]),
         Tree('sibling-0'),
         Tree('sibling-1')
     ])
     with self.assertRaises(ValueError):
         tree.pathTo('x', 'nonexistent')
 def test_errors_if_target_does_not_exist_in_a_large_tree(self):
     tree = Tree(
         "parent",
         [
             Tree("x", [Tree("kid-0"), Tree("kid-1")]),
             Tree("sibling-0"),
             Tree("sibling-1"),
         ],
     )
     with self.assertRaisesWithMessage(ValueError):
         tree.from_pov("nonexistent")
 def test_errors_if_source_does_not_exist(self):
     tree = Tree(
         "parent",
         [
             Tree("x", [Tree("kid-0"), Tree("kid-1")]),
             Tree("sibling-0"),
             Tree("sibling-1"),
         ],
     )
     with self.assertRaisesWithMessage(ValueError):
         tree.path_to("nonexistent", "x")
 def test_errors_if_target_does_not_exist_in_a_large_tree(self):
     tree = Tree(
         "parent",
         [
             Tree("x", [Tree("kid-0"), Tree("kid-1")]),
             Tree("sibling-0"),
             Tree("sibling-1"),
         ],
     )
     with self.assertRaises(ValueError) as err:
         tree.from_pov("nonexistent")
     self.assertEqual(type(err.exception), ValueError)
     self.assertEqual(err.exception.args[0], "Tree could not be reoriented")
Exemple #18
0
 def test_can_find_path_to_cousin(self):
     tree = Tree('grandparent', [
         Tree('parent', [
             Tree('x', [
                 Tree('kid-0'),
                 Tree('kid-1')
             ]),
             Tree('sibling-0'),
             Tree('sibling-1')
         ]),
         Tree('uncle', [
             Tree('cousin-0'),
             Tree('cousin-1')
         ])
     ])
     expected = ['x', 'parent', 'grandparent', 'uncle', 'cousin-1']
     self.assertEqual(tree.path_to('x', 'cousin-1'), expected)
    def test_errors_if_destination_does_not_exist(self):
        tree = Tree(
            "parent",
            [
                Tree("x", [Tree("kid-0"), Tree("kid-1")]),
                Tree("sibling-0"),
                Tree("sibling-1"),
            ],
        )
        with self.assertRaises(ValueError) as err:
            tree.path_to("x", "nonexistent")
        self.assertEqual(type(err.exception), ValueError)

        self.assertEqual(err.exception.args[0], "No path found")
 def test_can_find_path_not_involving_root(self):
     tree = Tree(
         "grandparent",
         [Tree("parent", [Tree("x"), Tree("sibling-0"), Tree("sibling-1")])],
     )
     expected = ["x", "parent", "sibling-1"]
     self.assertEqual(tree.path_to("x", "sibling-1"), expected)
    def test_errors_if_source_does_not_exist(self):
        tree = Tree(
            "parent",
            [
                Tree("x", [Tree("kid-0"), Tree("kid-1")]),
                Tree("sibling-0"),
                Tree("sibling-1"),
            ],
        )
        with self.assertRaises(ValueError) as err:
            tree.path_to("nonexistent", "x")
        self.assertEqual(type(err.exception), ValueError)

        self.assertEqual(err.exception.args[0], "Tree could not be reoriented")
Exemple #22
0
 def test_can_reroot_tree_with_parent_and_one_sibling(self):
     tree = Tree('parent', [
         Tree('x'),
         Tree('sibling')
     ])
     expected = Tree('x', [
         Tree('parent', [
             Tree('sibling')
         ])
     ])
     self.assertTreeEquals(tree.fromPov('x'), expected)
Exemple #23
0
 def test_can_find_path_not_involving_root(self):
     tree = Tree('grandparent', [
         Tree('parent',
              [Tree('x'), Tree('sibling-0'),
               Tree('sibling-1')])
     ])
     expected = ['x', 'parent', 'sibling-1']
     self.assertEqual(tree.path_to('x', 'sibling-1'), expected)
Exemple #24
0
 def test_can_find_path_to_sibling(self):
     tree = Tree('parent', [
         Tree('a'),
         Tree('x'),
         Tree('b'),
         Tree('c')
     ])
     expected = ['x', 'parent', 'b']
     self.assertEqual(tree.pathTo('x', 'b'), expected)
Exemple #25
0
 def test_can_find_path_from_nodes_other_than_x(self):
     tree = Tree('parent', [
         Tree('a'),
         Tree('x'),
         Tree('b'),
         Tree('c')
     ])
     expected = ['a', 'parent', 'c']
     self.assertEqual(tree.pathTo('a', 'c'), expected)
Exemple #26
0
 def test_can_reroot_a_tree_with_new_root_deeply_nested(self):
     tree = Tree('level-0', [
         Tree('level-1', [
             Tree('level-2', [
                 Tree('level-3', [
                     Tree('x')
                 ])
             ])
         ])
     ])
     expected = Tree('x', [
         Tree('level-3', [
             Tree('level-2', [
                 Tree('level-1', [
                     Tree('level-0')
                 ])
             ])
         ])
     ])
     self.assertTreeEquals(tree.from_pov('x'), expected)
Exemple #27
0
 def test_errors_if_target_does_not_exist_in_singleton_tree(self):
     tree = Tree('x')
     with self.assertRaisesWithMessage(ValueError):
         tree.from_pov('nonexistent')
Exemple #28
0
 def test_singleton_returns_same_tree(self):
     tree = Tree('x')
     self.assertTreeEquals(tree.fromPov('x'), tree)
Exemple #29
0
 def test_can_reroot_tree_with_parent_and_many_siblings(self):
     tree = Tree('parent', [Tree('a'), Tree('x'), Tree('b'), Tree('c')])
     expected = Tree(
         'x', [Tree('parent',
                    [Tree('a'), Tree('b'), Tree('c')])])
     self.assertTreeEquals(tree.from_pov('x'), expected)
Exemple #30
0
 def test_can_reroot_complex_tree_with_cousins(self):
     tree = Tree('grandparent', [
         Tree('parent', [
             Tree('x', [Tree('kid-0'), Tree('kid-1')]),
             Tree('sibling-0'),
             Tree('sibling-1')
         ]),
         Tree('uncle',
              [Tree('cousin-0'), Tree('cousin-1')])
     ])
     expected = Tree('x', [
         Tree('kid-0'),
         Tree('kid-1'),
         Tree('parent', [
             Tree('sibling-0'),
             Tree('sibling-1'),
             Tree('grandparent',
                  [Tree('uncle', [Tree('cousin-0'),
                                  Tree('cousin-1')])])
         ])
     ])
     self.assertTreeEquals(tree.fromPov('x'), expected)
 def test_can_reroot_a_tree_with_new_root_deeply_nested_in_tree(self):
     tree = Tree(
         "level-0",
         [
             Tree("level-1",
                  [Tree("level-2", [Tree("level-3", [Tree("x")])])])
         ],
     )
     expected = Tree(
         "x",
         [
             Tree("level-3",
                  [Tree("level-2", [Tree("level-1", [Tree("level-0")])])])
         ],
     )
     self.assertTreeEquals(tree.from_pov("x"), expected)
 def test_can_reroot_a_tree_with_a_parent_and_many_siblings(self):
     tree = Tree("parent", [Tree("a"), Tree("x"), Tree("b"), Tree("c")])
     expected = Tree(
         "x", [Tree("parent",
                    [Tree("a"), Tree("b"), Tree("c")])])
     self.assertTreeEquals(tree.from_pov("x"), expected)
Exemple #33
0
 def test_can_find_path_to_cousin(self):
     tree = Tree('grandparent', [
         Tree('parent', [
             Tree('x', [Tree('kid-0'), Tree('kid-1')]),
             Tree('sibling-0'),
             Tree('sibling-1')
         ]),
         Tree('uncle',
              [Tree('cousin-0'), Tree('cousin-1')])
     ])
     expected = ['x', 'parent', 'grandparent', 'uncle', 'cousin-1']
     self.assertEqual(tree.pathTo('x', 'cousin-1'), expected)
Exemple #34
0
 def test_errors_if_target_does_not_exist_in_singleton_tree(self):
     tree = Tree('x')
     with self.assertRaisesWithMessage(ValueError):
         tree.fromPov('nonexistent')
 def test_errors_if_target_does_not_exist_in_a_singleton_tree(self):
     tree = Tree("x")
     with self.assertRaisesWithMessage(ValueError):
         tree.from_pov("nonexistent")
 def test_moves_children_of_the_new_root_to_same_level_as_former_parent(
         self):
     tree = Tree("parent", [Tree("x", [Tree("kid-0"), Tree("kid-1")])])
     expected = Tree("x", [Tree("kid-0"), Tree("kid-1"), Tree("parent")])
     self.assertTreeEquals(tree.from_pov("x"), expected)
 def test_can_find_path_to_sibling(self):
     tree = Tree("parent", [Tree("a"), Tree("x"), Tree("b"), Tree("c")])
     expected = ["x", "parent", "b"]
     self.assertEqual(tree.path_to("x", "b"), expected)
 def test_can_reroot_a_complex_tree_with_cousins(self):
     tree = Tree(
         "grandparent",
         [
             Tree(
                 "parent",
                 [
                     Tree("x", [Tree("kid-0"), Tree("kid-1")]),
                     Tree("sibling-0"),
                     Tree("sibling-1"),
                 ],
             ),
             Tree("uncle",
                  [Tree("cousin-0"), Tree("cousin-1")]),
         ],
     )
     expected = Tree(
         "x",
         [
             Tree("kid-1"),
             Tree("kid-0"),
             Tree(
                 "parent",
                 [
                     Tree("sibling-0"),
                     Tree("sibling-1"),
                     Tree(
                         "grandparent",
                         [
                             Tree("uncle",
                                  [Tree("cousin-0"),
                                   Tree("cousin-1")])
                         ],
                     ),
                 ],
             ),
         ],
     )
     self.assertTreeEquals(tree.from_pov("x"), expected)
 def test_results_in_the_same_tree_if_the_input_tree_is_a_singleton(self):
     tree = Tree("x")
     expected = Tree("x")
     self.assertTreeEquals(tree.from_pov("x"), expected)
 def test_can_find_path_to_cousin(self):
     tree = Tree(
         "grandparent",
         [
             Tree(
                 "parent",
                 [
                     Tree("x", [Tree("kid-0"), Tree("kid-1")]),
                     Tree("sibling-0"),
                     Tree("sibling-1"),
                 ],
             ),
             Tree("uncle",
                  [Tree("cousin-0"), Tree("cousin-1")]),
         ],
     )
     expected = ["x", "parent", "grandparent", "uncle", "cousin-1"]
     self.assertEqual(tree.path_to("x", "cousin-1"), expected)
Exemple #41
0
 def test_can_reroot_a_tree_with_new_root_deeply_nested(self):
     tree = Tree('level-0', [
         Tree('level-1', [Tree('level-2', [Tree('level-3', [Tree('x')])])])
     ])
     expected = Tree('x', [
         Tree('level-3',
              [Tree('level-2', [Tree('level-1', [Tree('level-0')])])])
     ])
     self.assertTreeEquals(tree.fromPov('x'), expected)
Exemple #42
0
 def test_singleton_returns_same_tree(self):
     tree = Tree('x')
     self.assertTreeEquals(tree.from_pov('x'), tree)
 def test_can_find_path_from_nodes_other_than_x(self):
     tree = Tree("parent", [Tree("a"), Tree("x"), Tree("b"), Tree("c")])
     expected = ["a", "parent", "c"]
     self.assertEqual(tree.path_to("a", "c"), expected)