def test_large_randomly(self): TRIALS = 10 OPERATIONS = 10000 RANGE = 100000 CHECKS = 10 for _ in range(TRIALS): set0 = set() set1 = aatreeset.AaTreeSet() for _ in range(OPERATIONS): # Add/remove a random value val = random.randrange(RANGE) if random.random() < 0.5: set0.add(val) set1.add(val) else: set0.discard(val) set1.discard(val) # Check size and random element membership self.assertEqual(len(set0), len(set1)) for _ in range(CHECKS): val = random.randrange(-50, RANGE + 50) self.assertEqual(val in set0, val in set1) # Occasionally check entire set and iterator if random.random() < 0.001: set1.check_structure() self.assertEqual(sorted(list(set0)), list(set1))
def test_small_randomly(self): TRIALS = 30 OPERATIONS = 100 RANGE = 1000 for _ in range(TRIALS): set0 = set() set1 = aatreeset.AaTreeSet() for _ in range(OPERATIONS): # Add/remove a random value val = random.randrange(RANGE) if random.random() < 0.001: set0.clear() set1.clear() elif random.random() < 0.5: set0.add(val) set1.add(val) else: set0.discard(val) set1.discard(val) set1.check_structure() # Check size and check element membership over entire range self.assertEqual(len(set0), len(set1)) for k in range(-10, RANGE + 10): self.assertEqual(k in set0, k in set1)
def test_remove_all_randomly(self): TRIALS = 10 LIMIT = 1000 RANGE = 100000 CHECKS = 10 for _ in range(TRIALS): # Create sets and add all values set0 = set() set1 = aatreeset.AaTreeSet() for _ in range(LIMIT): val = random.randrange(RANGE) set0.add(val) set1.add(val) set1.check_structure() # Remove each value in random order lst = list(set0) random.shuffle(lst) for val in lst: set0.remove(val) set1.remove(val) if random.random() < max(1 / max(len(set1), 1), 0.001): set1.check_structure() self.assertEqual(len(set0), len(set1)) for _ in range(CHECKS): val = random.randrange(-50, RANGE + 50) self.assertEqual(val in set0, val in set1) self.assertTrue(len(set0) == len(set1) == 0)
def test_iterator(self): SIZE = 1000 set = aatreeset.AaTreeSet() for i in range(SIZE): set.add(i**2) lst = list(set) self.assertEqual(i + 1, len(lst)) expect = [j**2 for j in range(len(lst))] self.assertEqual(expect, lst)
def test_all_insertion_orders(self): LIMIT = 8 for size in range(1, LIMIT + 1): sortedvalues = list(range(size)) values = list(sortedvalues) while True: # This runs factorial(size) iterations set = aatreeset.AaTreeSet(values) set.check_structure() self.assertEqual(sortedvalues, list(set)) if not _next_permutation(values): break
def test_descending_operations(self): SIZE = 30000 CHECKS = 10 set = aatreeset.AaTreeSet() for i in range(SIZE): self.assertEqual(i, len(set)) set.add(-i) for _ in range(CHECKS): val = -random.randrange(-50, i + 50) self.assertEqual(-i <= val <= 0, val in set) for i in range(SIZE): self.assertEqual(SIZE - i, len(set)) set.remove(-i) for _ in range(CHECKS): val = -random.randrange(-50, i + 50) self.assertEqual(-SIZE < val < -i, val in set) self.assertEqual(0, len(set))
def test_insert_randomly(self): TRIALS = 30 OPERATIONS = 3000 RANGE = 100000 CHECKS = 10 for _ in range(TRIALS): set0 = set() set1 = aatreeset.AaTreeSet() for _ in range(OPERATIONS): # Add a random value val = random.randrange(RANGE) set0.add(val) set1.add(val) if random.random() < 0.003: set1.check_structure() # Check size and random element membership self.assertEqual(len(set0), len(set1)) for _ in range(CHECKS): val = random.randrange(-50, RANGE + 50) self.assertEqual(val in set0, val in set1)