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_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_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_difference2(self): set1 = PersistentBalancedSet(5, iterator='preorder').insert(6).insert(7) set2 = PersistentBalancedSet(5, iterator='preorder').insert(6) balancedSet = set1.difference(set2) self.assertEqual(set1, [6, 5, 7]) self.assertEqual(set2, [5, 6]) self.assertEqual(balancedSet, [7])
def test_add(self): set1 = PersistentBalancedSet(5, iterator='preorder').insert(6).insert(7) set2 = PersistentBalancedSet(3).insert(2).insert(1) balancedSet = set1 + set2 self.assertEqual(set1, [6, 5, 7]) self.assertEqual(set2, [1, 2, 3]) self.assertEqual(balancedSet, [3, 2, 1, 6, 5, 7])
def test_substract2(self): set1 = PersistentBalancedSet(5, iterator='preorder').insert(6).insert(7) set2 = PersistentBalancedSet(5, iterator='preorder').insert(6) balancedSet = set1 - set2 self.assertEqual(set1, [6, 5, 7]) self.assertEqual(set2, [5, 6]) self.assertEqual(balancedSet, [7])
def test_union1(self): set1 = PersistentBalancedSet(5, iterator='preorder').insert(6).insert(7) set2 = None balancedSet = set1.union(set2) self.assertEqual(set1, [6, 5, 7]) self.assertEqual(set2, None) self.assertEqual(balancedSet, [6, 5, 7])
def test_add2(self): set1 = PersistentBalancedSet(5, iterator='preorder').insert(6).insert( 7).insert(4).insert(2).insert(1) set2 = PersistentBalancedSet(57, iterator='preorder').insert( 36).insert(67).insert(24).insert(72).insert(4) balancedSet = set1 - set2 self.assertEqual(set1, [4, 2, 1, 6, 5, 7]) self.assertEqual(set2, [57, 24, 4, 36, 67, 72]) self.assertEqual(balancedSet, [2, 1, 6, 5, 7])
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_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_substracts3(self): set1 = PersistentBalancedSet(5, iterator='inorder').insert(6).insert( 7).insert(4).insert(2).insert(1) set2 = PersistentBalancedSet(57, iterator='preorder').insert( 36).insert(67).insert(24).insert(72).insert(4) balancedSet = set1 - set2 self.assertEqual(set1, [1, 2, 4, 5, 6, 7]) self.assertEqual(set2, [57, 24, 4, 36, 67, 72]) self.assertEqual(balancedSet, [1, 2, 5, 6, 7])
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_substract(self): set1 = PersistentBalancedSet(5, iterator='preorder').insert(6).insert(7) set2 = PersistentBalancedSet(3).insert(2).insert(1) set3 = PersistentBalancedSet(5) balancedSet = set1 - set2 balancedSet1 = set1 - set3 self.assertEqual(set1, [6, 5, 7]) self.assertEqual(set2, [1, 2, 3]) self.assertEqual(balancedSet, [6, 5, 7]) self.assertEqual(balancedSet1, [6, 7])
def test_calculate_balance_factor_all_right_nodes_one_left(self): set = PersistentBalancedSet(55).insert(56).insert(57).insert( 58).insert(59).insert(51) balanceFactors = [] for node in set._PersistentBalancedSet__root: balanceFactors.append(height(node)) self.assertEqual(balanceFactors, [1, 2, 1, 3, 2, 1])
def test_calculate_balance_2(self): set = PersistentBalancedSet(55).insert(56).insert(57).insert( 58).insert(59).insert(51).insert(50).insert(49) height1 = [] for node in set._PersistentBalancedSet__root: height1.append(height(node)) self.assertEqual(height1, [1, 2, 1, 3, 1, 4, 2, 1])
def test3_preorder_iteration_and_height(self): set = PersistentBalancedSet(30, iterator='preorder').insert(10).insert(20) self.assertEqual(set, [20, 10, 30]) height1 = [] for node in set._PersistentBalancedSet__root: height1.append(height(node)) self.assertEqual(height1, [2, 1, 1])
def test_calculate_balance_factor_all_left_node_one_right(self): set = PersistentBalancedSet(55).insert(54).insert(53).insert( 52).insert(51).insert(59) balanceFactors = [] node_values = [] for node in set._PersistentBalancedSet__root: node_values.append(node.value) balanceFactors.append(height(node)) self.assertEqual(balanceFactors, [1, 2, 1, 3, 2, 1]) self.assertEqual(node_values, [51, 52, 53, 54, 55, 59])
def test_balanced_delete3(self): unbalancedSet = PersistentBalancedSet(5, iterator='preorder').insert( 4).insert(3).insert(3.5).insert(3.6).insert(6) balancedSet = unbalancedSet.delete(3.6) self.assertEqual(unbalancedSet, [4, 3.5, 3, 3.6, 5, 6]) self.assertEqual(balancedSet, [4, 3.5, 3, 5, 6]) balancedSet1 = balancedSet.delete(6) self.assertEqual(unbalancedSet, [4, 3.5, 3, 3.6, 5, 6]) self.assertEqual(balancedSet, [4, 3.5, 3, 5, 6]) self.assertEqual(balancedSet1, [4, 3.5, 3, 5]) balancedSet2 = balancedSet1.delete(3.5) self.assertEqual(unbalancedSet, [4, 3.5, 3, 3.6, 5, 6]) self.assertEqual(balancedSet, [4, 3.5, 3, 5, 6]) self.assertEqual(balancedSet1, [4, 3.5, 3, 5]) self.assertEqual(balancedSet2, [4, 3, 5]) balancedSet3 = balancedSet2.delete(4) self.assertEqual(unbalancedSet, [4, 3.5, 3, 3.6, 5, 6]) self.assertEqual(balancedSet, [4, 3.5, 3, 5, 6]) self.assertEqual(balancedSet1, [4, 3.5, 3, 5]) self.assertEqual(balancedSet2, [4, 3, 5]) self.assertEqual(balancedSet3, [3, 5]) balancedSet4 = balancedSet3.delete(3) self.assertEqual(unbalancedSet, [4, 3.5, 3, 3.6, 5, 6]) self.assertEqual(balancedSet, [4, 3.5, 3, 5, 6]) self.assertEqual(balancedSet1, [4, 3.5, 3, 5]) self.assertEqual(balancedSet2, [4, 3, 5]) self.assertEqual(balancedSet3, [3, 5]) self.assertEqual(balancedSet4, [5]) balancedSet5 = balancedSet4.delete(5) self.assertEqual(unbalancedSet, [4, 3.5, 3, 3.6, 5, 6]) self.assertEqual(balancedSet, [4, 3.5, 3, 5, 6]) self.assertEqual(balancedSet1, [4, 3.5, 3, 5]) self.assertEqual(balancedSet2, [4, 3, 5]) self.assertEqual(balancedSet3, [3, 5]) self.assertEqual(balancedSet4, [5]) self.assertEqual(balancedSet5, [])
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_difference(self): set1 = PersistentBalancedSet(5, iterator='preorder').insert(6).insert(7) set2 = PersistentBalancedSet(3).insert(2).insert(1) set3 = PersistentBalancedSet(5) balancedSet = set1.difference(set2) balancedSet1 = set1.difference(set3) self.assertEqual(set1, [6, 5, 7]) self.assertEqual(set2, [1, 2, 3]) self.assertEqual(balancedSet, [6, 5, 7]) self.assertEqual(balancedSet1, [6, 7])
def test_balancer_right_rotation(self): balancedSet = PersistentBalancedSet( 5, iterator='preorder').insert(4).insert(3) self.assertEqual(balancedSet, [4, 3, 5])
def test_existing_member(self): set = PersistentBalancedSet(1).insert(1) self.assertEqual(set, [1])
def test_balancer_left_rotation(self): set = PersistentBalancedSet(5, iterator='preorder').insert(6).insert(7) balancedSet = set.balancer() self.assertEqual(set, [6, 5, 7]) self.assertEqual(balancedSet, [6, 5, 7])
def test_balancer_left_right_rotation(self): balancedSet = PersistentBalancedSet(5, iterator='preorder').insert( 4).insert(3).insert(3.5).insert(3.6).insert(6) self.assertEqual(balancedSet, [4, 3.5, 3, 3.6, 5, 6])
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 test_balancer_left_right_rotation3(self): balancedSet = PersistentBalancedSet(55, iterator='preorder').insert( 54).insert(53).insert(56).insert(57).insert(58) self.assertEqual(balancedSet, [55, 54, 53, 57, 56, 58])
def test_self_balancing_delete(self): set = PersistentBalancedSet( 11, iterator='preorder').insert(8).insert(13).insert(9).insert(4) self.assertEqual(set.delete(8), [11, 9, 4, 13])
def test_isMember(self): set = PersistentBalancedSet().insert(5).insert(4).insert(8).insert( 3).insert(6) self.assertTrue(set.isMember(3)) self.assertFalse(set.isMember(10))
def test_balanced_delete4(self): unbalancedSet = PersistentBalancedSet(5, iterator='inorder').insert( 4).insert(3).insert(3.5).insert(3.6).insert(6) balancedSet = unbalancedSet.delete(3.6) self.assertEqual(unbalancedSet, [3, 3.5, 3.6, 4, 5, 6]) self.assertEqual(balancedSet, [3, 3.5, 4, 5, 6])