示例#1
0
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)
示例#2
0
	def create(self, sequence):
		self.treap = duptreap.duptreap()

		for i in sequence:
			self.treap[i] = i

		self.content = list(self.treap)
示例#3
0
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)
示例#4
0
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, ))
示例#5
0
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)
示例#6
0
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)
示例#7
0
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])
示例#8
0
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)
示例#9
0
	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
示例#10
0
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)])
示例#11
0
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)
示例#12
0
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()
示例#13
0
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, ))
示例#14
0
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)
示例#15
0
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:])
示例#16
0
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)
示例#17
0
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))
示例#18
0
def failed_removal_from_one_test():
	t = duptreap.duptreap()
	t[5] = 5
	myut.require_exceptions(functools.partial(t.remove, 10), ( exceptions.LookupError, ))
示例#19
0
def empty_max_test():
	t = duptreap.duptreap()
	myut.require_exceptions(t.find_max, (exceptions.LookupError, ))
示例#20
0
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)
示例#21
0
def empty_0_test():
	t = duptreap.duptreap()
	myut.assertEqual(t.depth(), 0)
示例#22
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, ))
示例#23
0
def nonempty_test():
	t = duptreap.duptreap()
	t[1] = 1
	myut.assertTrue(bool(t) == True)
示例#24
0
def empty_test():
	t = duptreap.duptreap()
	myut.assertTrue(not (bool(t) == True))
示例#25
0
def successful_removal_from_one_test():
	t = duptreap.duptreap()
	t[5] = 5
	del t[5]
示例#26
0
def print_test(n):
	t = duptreap.duptreap()
	for i in xrange(n):
		t[i] = i
	dummy = str(t)
示例#27
0
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)