def positive_find_test(): ok = True t = duptreap.duptreap() for i in xrange(0, n, 2): t[i] = i for i in xrange(0, n, 2): myut.assertEqual(t[i], i)
def create(self, sequence): self.treap = duptreap.duptreap() for i in sequence: self.treap[i] = i self.content = list(self.treap)
def repeat_length_test(): t = duptreap.duptreap() for i in xrange(n): t[i] = i for i in xrange(n): t[i] = i myut.assertEqual(len(t), n*2)
def negative_find_test(): ok = True t = duptreap.duptreap() for i in xrange(0, n, 2): t[i] = i for i in xrange(1, n, 2): myut.require_exceptions(functools.partial(t.find, i), ( exceptions.LookupError, ))
def iterator_test(): lst = range(n) random_lst = random_swaps(lst[:]) t = duptreap.duptreap() for x in random_lst: t[x] = x lst2 = list(t.iterator()) myut.assertTrue(lst == lst2)
def max_test(): lst = range(n) random_lst = random_swaps(lst[:]) t = duptreap.duptreap() for x in random_lst: t[x] = x least = t.find_max() myut.assertEqual(least, n-1)
def duplication_behavior_unique(): #t = duptreap.duptreap(allow_duplicates=False) t = duptreap.duptreap() t[1] = 1 t[2] = 2 t[2] = 2 t[3] = 3 myut.assertTrue(list(t) == [1, 2, 2, 3])
def min_max_length_test(): t = duptreap.duptreap() for i in xrange(n): t[i] = 0 myut.assertEqual(len(t), n) t.remove_min() myut.assertEqual(len(t), n-1) t.remove_max() myut.assertEqual(len(t), n-2)
def __init__(self, n, dups=False): self.n = n if dups: import duptreap self.treap = duptreap.duptreap() else: import treap self.treap = treap.treap() self.__iter__ = self.treap.reverse_iterator self.have_evicted = False
def remove_max_test(): # O(n^2) test! lst = range(n) t = duptreap.duptreap() for i in lst: t[i] = 0 # taking advantage of the fact that the keys are the same as our lst indices for i in lst: t.remove_max() myut.assertTrue(list(t) == lst[:-(i+1)])
def depth_test(): # O(n^2), so we don't use n - we use something small. # We assume very little about the resulting depths - in particular, even though this datastructure should very nearly always be log2(n) deep, we assume that # worst case behavior is possible - IE that depth can be as high as n. We also don't make any effort to show that an empty treap has a depth of 0 my_n = min(n, 100) for i in xrange(my_n): t = duptreap.duptreap() for j in xrange(i): t[j] = j myut.assertTrue(0 <= t.depth() <= i)
def del_insert_del_insert(): t = duptreap.duptreap() for i in xrange(n): t[i] = 0 for i in xrange(n): t.remove_min() for i in xrange(n): t[i] = 0 for i in xrange(n): t.remove_min()
def reremoval_test(): t = duptreap.duptreap() # fill the treap with 0..n for i in xrange(n): t[i] = i # remove all the odd values for i in xrange(1,n,2): del t[i] # check that we have nothing but even values left ordered_values = list(t.iterator()) for i in [ 1, 3, 7 ]: myut.require_exceptions(functools.partial(t.remove, i), ( exceptions.LookupError, ))
def removal_test(): t = duptreap.duptreap() # fill the treap with 0..n for i in xrange(n): t[i] = i # remove all the odd values for i in xrange(1,n,2): del t[i] # check that we have nothing but even values left ordered_values = list(t.iterator()) result = ordered_values == range(0, n, 2) myut.assertEqual(result, True)
def remove_min_test(): # O(n^2) test! lst = range(n) t = duptreap.duptreap() for i in lst: t[i] = 0 # taking advantage of the fact that the keys are the same as our lst indices for i in lst: if i % (n / 5) == 0: myut.assertTrue(t.check_heap_invariant()) myut.assertTrue(t.check_tree_invariant()) t.remove_min() myut.assertTrue(list(t) == lst[i+1:])
def string_test(): def random_char(): return chr(97 + int(random.random() * 32)) t = duptreap.duptreap() dict = {} for i in xrange(n): strng = '%s%s' % (random_char(), random_char()) t[strng] = None dict[strng] = None lst = dict.keys() lst.sort() myut.assertTrue(list(t) == lst)
def remove_sequence_test(reverse): t = duptreap.duptreap() lst = range(n) for item in lst: t[item] = 0 if reverse: lst.reverse() pop = t.remove_max else: pop = t.remove_min for i in xrange(len(lst)): value_from_treap = pop() myut.assertEqual((lst[i], 0), value_from_treap) myut.assertTrue(not bool(t))
def failed_removal_from_one_test(): t = duptreap.duptreap() t[5] = 5 myut.require_exceptions(functools.partial(t.remove, 10), ( exceptions.LookupError, ))
def empty_max_test(): t = duptreap.duptreap() myut.require_exceptions(t.find_max, (exceptions.LookupError, ))
def simple_length_test(): t = duptreap.duptreap() for i in xrange(n): myut.assertEqual(len(t), i) t[i] = i myut.assertEqual(len(t), n)
def empty_0_test(): t = duptreap.duptreap() myut.assertEqual(t.depth(), 0)
def removal_from_empty_test(): t = duptreap.duptreap() for i in [ 1, 3, 7 ]: myut.require_exceptions(functools.partial(t.remove, i), ( exceptions.LookupError, ))
def nonempty_test(): t = duptreap.duptreap() t[1] = 1 myut.assertTrue(bool(t) == True)
def empty_test(): t = duptreap.duptreap() myut.assertTrue(not (bool(t) == True))
def successful_removal_from_one_test(): t = duptreap.duptreap() t[5] = 5 del t[5]
def print_test(n): t = duptreap.duptreap() for i in xrange(n): t[i] = i dummy = str(t)
def value_test(): t = duptreap.duptreap() for i in xrange(n): t[i] = i*3 for i in xrange(n): myut.assertEqual(t[i], i*3)