def test_equal_if_same_contents(self): t = vEBTree.of_size(self.t.universe_size) self.assertEqual(t, self.t) self.t.add(2) self.assertNotEqual(t, self.t) t.add(2) self.assertEqual(t, self.t) t.update([3, 5, 7]) self.assertNotEqual(t, self.t) self.t.update([3, 5, 7]) self.assertEqual(t, self.t)
def test_grow(self): t = vEBTree.of_size(2) self.assertEqual(t.universe_size, 2) t.add(2) self.assertEqual(t.universe_size, 4) self.assertIn(2, t) self.assertNotIn(3, t) t.add(7) self.assertEqual(t.universe_size, 8) self.assertIn(2, t) self.assertNotIn(3, t) self.assertIn(7, t) self.assertNotIn(6, t) t.add(195) self.assertEqual(t.universe_size, 256)
def testRandom(self): n = 1 << 16 totalOperations = 1 << 16 operations = totalOperations q = vEBTree.of_size(n) lame = LameQueue() while operations > 0: # Do some searches numSearches = random.randint(0, 10) operations -= numSearches for i in range(numSearches): search = random.randint(0, n-1) r1 = search in lame r2 = search in q self.assertEqual(r1, r2) r1 = lame.predecessor(search) r2 = q.predecessor(search) self.assertEqual(r1, r2) # Change the queue state operations -= 1 value = random.randint(0, n-1) stateChange = random.randint(0, 1) if stateChange == 0: q.add(value) lame.add(value) # print "add", value else: q.discard(value) lame.discard(value) # print "remove", value # Check the max/min variables assert lame.max() == q.max assert lame.min() == q.min
def random_tree(size): tree = vEBTree.of_size(size) for _ in range(randint(0, tree.universe_size - 1)): tree.add(randint(0, tree.universe_size - 1)) return tree
def setUp(self): self.t = vEBTree.of_size(4)
def test_size_0_makes_empty_tree(self): t = vEBTree.of_size(0) self.assertEqual(t.universe_size, 0)
def test_of_size(self): t = vEBTree.of_size(16) self.assertEqual(t.universe_size, 16)