Exemplo n.º 1
0
 def test_pop_right_min_returns_min(self):
     a = AVLTree()
     a[5] = 'a'
     a[1] = 'a'
     a[9] = 'a'
     a[8] = 'a'
     self.assertEqual(a._pop_right_min(a.root).key, 8)
Exemplo n.º 2
0
 def test_len_on_clear(self):
     a = AVLTree()
     a[1] = 'a'
     a[2] = 'a'
     a[3] = 'a'
     a.clear()
     self.assertEqual(len(a), 0)
Exemplo n.º 3
0
 def test_get_min_is_left_of_root2(self):
     a = AVLTree()
     a[5] = 'a'
     a[1] = 'a'
     a[4] = 'a'
     a[3] = 'a'
     a[2] = 'a'
     self.assertEqual(a._get_min(a.root).key, 1)
Exemplo n.º 4
0
 def test_get_min(self):
     import random
     a = AVLTree()
     m = None
     for _ in range(100):
         r = random.randint(-9999, 9999)
         m = min(r, m or r)
         a[r] = 'a'
     self.assertEqual(a._get_min(a.root).key, m)
Exemplo n.º 5
0
 def test_pop_right_min_removes_min(self):
     a = AVLTree()
     a[5] = 'a'
     a[1] = 'a'
     a[9] = 'a'
     a[8] = 'a'
     self.assertIsNotNone(a.root.right.left)
     a._pop_right_min(a.root)
     self.assertIsNone(a.root.right.left)
Exemplo n.º 6
0
 def test_pop_right_min_removes_min_and_keeps_children(self):
     a = AVLTree()
     a[5] = 'a'
     a[1] = 'a'
     a[8] = 'a'
     a[9] = 'a'
     self.assertEqual(a.root.right.key, 8)
     a._pop_right_min(a.root)
     self.assertEqual(a.root.right.key, 9)
Exemplo n.º 7
0
 def test_item_iterator(self):
     a = AVLTree()
     values = [
         (1, 'a'),
         (2, 'b'),
         (3, 'c'),
     ]
     for k, v in values:
         a[k] = v
     self.assert_list(a.items(), values)
Exemplo n.º 8
0
    def test_value_iterator(self):
        a = AVLTree()
        values = [
            (1, 'a'),
            (2, 'b'),
            (3, 'c'),
        ]
        for k, v in values:
            a[k] = v

        self.assert_list(a.values(), [v for _, v in values])
Exemplo n.º 9
0
    def test_key_iterator(self):
        a = AVLTree()
        values = [
            (1, 'a'),
            (2, 'b'),
            (3, 'c'),
        ]
        for k, v in values:
            a[k] = v

        self.assert_list(a.keys(), [k for k, _ in values])
Exemplo n.º 10
0
 def test_clear_is_empty(self):
     a = AVLTree()
     a[1] = 'a'
     a[2] = 'a'
     a[3] = 'a'
     a.clear()
     with self.assertRaises(KeyError):
         _ = a[1]
     with self.assertRaises(KeyError):
         _ = a[2]
     with self.assertRaises(KeyError):
         _ = a[3]
Exemplo n.º 11
0
    def test_copy_doesn_not_reuse_nodes(self):
        a = AVLTree(a=1, b=2, c=3, d=4, e=5, f=6)
        b = a.copy()

        travel_a = InOrderTraversal(a.root, lambda x: x)
        travel_b = InOrderTraversal(b.root, lambda x: x)

        while True:
            _a = next(travel_a, None)
            _b = next(travel_b, None)
            if _a is None and _b is None:
                break
            self.assertIsNot(_a, _b)
Exemplo n.º 12
0
 def test_not_contains(self):
     a = AVLTree()
     a[1] = 'a'
     a[2] = 'a'
     a[3] = 'a'
     self.assertFalse(0 in a)
     self.assertFalse(4 in a)
Exemplo n.º 13
0
 def test_iterable_create_by_kwargs(self):
     a = AVLTree(
         a='a',
         b='b',
         c='c',
     )
     self.assertEqual(len(a), 3)
Exemplo n.º 14
0
 def test_delete_empty_node_updates_len(self):
     a = AVLTree()
     a[5] = 'a'
     a[3] = 'a'
     a[7] = 'a'
     del a[7]
     self.assertEqual(2, len(a))
Exemplo n.º 15
0
 def test_contains(self):
     a = AVLTree()
     a[1] = 'a'
     a[2] = 'a'
     a[3] = 'a'
     self.assertTrue(1 in a)
     self.assertTrue(2 in a)
     self.assertTrue(3 in a)
Exemplo n.º 16
0
 def test_delete_node_with_right_updates_len(self):
     a = AVLTree()
     a[5] = 'a'
     a[3] = 'a'
     a[7] = 'a'
     a[9] = 'a'
     del a[7]
     self.assertEqual(3, len(a))
Exemplo n.º 17
0
 def test_delete_node_with_both_case(self):
     a = AVLTree()
     a[5] = 'a'
     a[4] = 'a'
     a[6] = 'a'
     expected = a.root.right
     del a[5]
     self.assertEqual(a.root, expected)
Exemplo n.º 18
0
    def test_delete_node_with_left_case(self):
        a = AVLTree()

        a[5] = 'a'
        a[1] = 'b'
        expected = a.root.left

        del a[5]
        self.assertEqual(a.root, expected)
Exemplo n.º 19
0
 def test_update_in_place(self):
     a = AVLTree()
     a[1] = 'a'
     a[2] = 'b'
     a[3] = 'a'
     self.assertEqual(a[2], "b")
     a[2] = 'c'
     self.assertEqual(a[2], "c")
     self.assertEqual(len(a), 3)
Exemplo n.º 20
0
 def test_depth_7_nodes(self):
     a = AVLTree()
     a[1] = "a"
     a[2] = "a"
     a[3] = "a"
     a[4] = "a"
     a[5] = "a"
     a[6] = "a"
     a[7] = "a"
     self.assertEqual(a.root.height, 2)
Exemplo n.º 21
0
    def test_longer_item(self):
        a = AVLTree([
            # Order of insert is important because
            # repr should do a breadth first traversal.
            ("a", 1), ("b", 2),
            ("c", 3), ("d", 4),
            ("e", 5), ("f", 6),
            ("g", 7), ("g", 7),
        ])

        self.assertEqual(str(a), "<AVL {d: 4, b: 2, f: 6, a: 1, c: 3, e: 5, g: 7}>")
Exemplo n.º 22
0
    def test_delete_keeps_avl_property(self):
        a = AVLTree()
        a[5] = 'a'
        a[3] = 'a'
        a[7] = 'a'
        a[1] = 'a'
        a[4] = 'a'
        a[8] = 'a'
        a[2] = 'a'

        # Because this is complex (to me), i am asserting the expected
        # structure just to make sure i didn't messup the setup.

        #     5
        #    / \
        #   3   7
        #  / \   \
        # 1   4   8
        #  \
        #   2

        r = a.root
        self.assertEqual(r.key, 5)
        self.assertEqual(r.left.key, 3)
        self.assertEqual(r.left.left.key, 1)
        self.assertEqual(r.left.left.right.key, 2)
        self.assertEqual(r.left.right.key, 4)
        self.assertEqual(r.right.key, 7)
        self.assertEqual(r.right.right.key, 8)

        # Delete key 7 should cause a rebalance that looks like this

        #      3
        #     / \
        #    /   \
        #   1     5
        #    \   / \
        #     2 4   8

        del a[7]

        r = a.root
        self.assertEqual(r.key, 3)
        self.assertEqual(r.left.key, 1)
        self.assertEqual(r.left.right.key, 2)
        self.assertEqual(r.right.key, 5)
        self.assertEqual(r.right.left.key, 4)
        self.assertEqual(r.right.right.key, 8)
Exemplo n.º 23
0
 def test_creats_new_tree(self):
     a = AVLTree.fromkeys([], None)
     self.assertIsInstance(a, AVLTree)
Exemplo n.º 24
0
 def test_from_array(self):
     a = AVLTree.fromkeys([1, 2, 3], None)
     self.assertListEqual(list(a.items()), [(1, None), (2, None), (3, None)])
Exemplo n.º 25
0
 def test_copy_empty(self):
     a = AVLTree()
     b = a.copy()
     self.assertIsNot(a, b)
Exemplo n.º 26
0
 def test_copy_contains_same_items(self):
     a = AVLTree(a=1, b=2, c=3, d=4, e=5, f=6)
     b = a.copy()
     self.assertListEqual(list(a), list(b))
Exemplo n.º 27
0
 def test_copy_contains_same_count(self):
     a = AVLTree(a=1, b=2, c=3)
     b = a.copy()
     self.assertEqual(len(b), 3)
Exemplo n.º 28
0
 def test_iterable_create(self):
     a = AVLTree([(1, 'a'), (2, 'b'), (3, 'c')])
     self.assertEqual(len(a), 3)
Exemplo n.º 29
0
 def test_empty_create(self):
     a = AVLTree()
     self.assertEqual(len(a), 0)
Exemplo n.º 30
0
 def test_iterable_create_by_both(self):
     a = AVLTree([('a', 'a'), ('b', 'b')], c='c')
     self.assertEqual(len(a), 3)