def test_self_balancing_insert_left_right_rotation1(self):
     set = PersistentBalancedSet(
         11, iterator='preorder').insert(8).insert(13).insert(9).insert(4)
     self.assertEqual(set, [11, 8, 4, 9, 13])
     set = set.insert(1)
     self.assertEqual(set, [8, 4, 1, 11, 9, 13])
     set = set.insert(2)
     set = set.insert(3).insert(12).insert(14)
     self.assertEqual(set, [8, 2, 1, 4, 3, 11, 9, 13, 12, 14])
    def test__insert(self):
        set = PersistentBalancedSet()
        set.insert(5)
        self.assertEqual(set, [5])

        set = set.insert(4)
        self.assertEqual(set, [4, 5])

        set = set.insert(8)
        self.assertEqual(set, [4, 5, 8])

        set = set.insert(3)
        set = set.insert(6)
        self.assertEqual(set, [3, 4, 5, 6, 8])
 def test_calculate_balance_factor(self):
     set = PersistentBalancedSet(9).insert(5).insert(1).insert(6).insert(10)
     set = set.insert(11).insert(13)
     balanceFactor = []
     for node in set._PersistentBalancedSet__root:
         balanceFactor.append(height(node))
     self.assertEqual(balanceFactor, [3, 2, 1, 1, 2, 1, 1])
 def test_self_balancing_insert_left_right_rotation(self):
     set1 = PersistentBalancedSet(55, iterator='preorder')
     set2 = set1.insert(56)
     set3 = set2.insert(57).insert(54).insert(58).insert(59).insert(53)
     self.assertEqual(set1, [55])
     self.assertEqual(set2, [55, 56])
     self.assertEqual(set3, [56, 54, 53, 55, 58, 57, 59])
 def test_self_balancing_insert_right_rotation(self):
     set1 = PersistentBalancedSet(55, iterator='preorder')
     set2 = set1.insert(54)
     set3 = set2.insert(53)
     self.assertEqual(set1, [55])
     self.assertEqual(set2, [55, 54])
     self.assertEqual(set3, [54, 53, 55])
    def test_insert_for_sharing(self):
        set = PersistentBalancedSet('d').insert('b').insert('g').insert(
            'h').insert('f').insert('a').insert('c')
        self.assertEqual(set, ['a', 'b', 'c', 'd', 'f', 'g', 'h'])

        set1 = set.insert('e')
        self.assertEqual(set, ['a', 'b', 'c', 'd', 'f', 'g', 'h'])

        self.assertEqual(set1, ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'])
    def test_insert_for_immutability(self):
        set = PersistentBalancedSet(10)
        set1 = set.insert(2)
        set2 = set.insert(8)
        set3 = set2.insert(2)

        self.assertEqual(set, [10])
        self.assertEqual(set1, [2, 10])
        self.assertEqual(set2, [8, 10])
        self.assertEqual(set3, [2, 8, 10])
 def test_self_balancing_delete2(self):
     set1 = PersistentBalancedSet(55)
     set2 = set1.insert(56)
     set3 = set2.insert(57).insert(54).insert(58).insert(59).insert(53)
     set4 = set2.delete(56)
     set5 = set3.delete(53)
     self.assertEqual(set1, [55])
     self.assertEqual(set2, [55, 56])
     self.assertEqual(set3, [53, 54, 55, 56, 57, 58, 59])
     self.assertEqual(set4, [55])
     self.assertEqual(set5, [54, 55, 56, 57, 58, 59])
 def test_balancer_left_right_rotation1(self):
     balancedSet = PersistentBalancedSet(11, iterator='preorder').insert(
         8).insert(13).insert(9).insert(4).insert(1).insert(2)
     balancedSet = balancedSet.insert(3).insert(12).insert(14)
     self.assertEqual(balancedSet, [8, 2, 1, 4, 3, 11, 9, 13, 12, 14])
 def test2_preorder_iteration(self):
     set = PersistentBalancedSet(45, iterator='preorder').insert(44).insert(
         46).insert(48).insert(47).insert(41).insert(50)
     set = set.insert(49)
     self.assertEqual(set, [46, 44, 41, 45, 48, 47, 50, 49])
 def test_preorder_iteration(self):
     set = PersistentBalancedSet(55, iterator='preorder').insert(56).insert(
         57).insert(58).insert(59).insert(51).insert(50)
     set = set.insert(49)
     self.assertEqual(set, [57, 55, 50, 49, 51, 56, 58, 59])