def test_create_with_iterable(self):
		import copy
		for trial in xrange(self.trials):
			test_suite = random.sample(self.bag, self.samples)
			tree = threadedtree.ThreadedTree(test_suite)
			another_tree = threadedtree.ThreadedTree(tree)
			test_suite.sort()
			assert test_suite == list(tree)
			assert test_suite == list(another_tree)
		try:
			tree = threadedtree.ThreadedTree(1) #Try to initialize with non-iterable
		except TypeError:
			pass
	def test_add(self):
		for trial in xrange(5):
			test_suite_1 = random.sample(self.bag, self.small_samples)
			test_suite_2 = random.sample(self.bag, self.small_samples)
			test_suite_3 = test_suite_1 + test_suite_2
			tree1 = threadedtree.ThreadedTree(test_suite_1)
			tree2 = threadedtree.ThreadedTree(test_suite_2)
			tree3 = threadedtree.ThreadedTree(test_suite_3)
			assert tree1 + tree2 == tree3
			assert tree1 + test_suite_2 == tree3
		try:
			tree1 + {} #have to test the "NotImplemented" branch, so add tree to anything other than tree or list
		except TypeError:
			pass
	def test_delete(self):
		import copy
		for trial in xrange(self.trials):
			test_suite = random.sample(self.bag, self.samples)
			tree = threadedtree.ThreadedTree(test_suite)
			test_suite.sort()
			vals_to_delete = copy.deepcopy(test_suite)
			random.shuffle(vals_to_delete)
			for val_to_delete in vals_to_delete:
				test_suite.remove(val_to_delete)
				tree.remove(val_to_delete)
				assert test_suite == list(tree)
		# Have to explicitly test the case where the value being deleted is not in the tree and is greater than
		# the leftmost child of the right subtree.
		tree = threadedtree.ThreadedTree([12,25,30,22])
		assert tree.remove(23) == False
		# try removing an item that doesn't implement comparisons
		tree.remove(lambda x: x)
	def test_insert_with_duplicates(self):
		for trial in xrange(self.trials):
			test_suite = random.sample(self.bag, self.samples)
			test_suite.extend(random.sample(test_suite, random.randint(1, len(test_suite)))) #add some duplicates
			tree = threadedtree.ThreadedTree()
			for sample in test_suite:
				tree.insert(sample)
			test_suite.sort()
			assert test_suite != list(tree)
	def test_comparisons(self):
		for trial in xrange(self.trials):
			test_suite = random.sample(self.bag, self.small_samples)
			tree1 = threadedtree.ThreadedTree(test_suite)
			random.shuffle(test_suite)
			tree2 = threadedtree.ThreadedTree(test_suite)
			tree3 = threadedtree.ThreadedTree(test_suite[1:])
			assert tree1 == tree2
			assert tree1 != tree3
			assert tree2 != tree3
			test_suite.sort()
			assert tree1 == test_suite
			assert (tree1 == {}) == False
			# We are not responsible for the following comparisons so we just call them for coverage purposes
			tree1 < tree1
			tree1 <= tree1
			tree1 > tree1
			tree1 >= tree1
	def test_reverse(self):
		for trial in xrange(self.trials):
			test_suite = random.sample(self.bag, self.small_samples)
			tree = threadedtree.ThreadedTree(test_suite)
			test_suite.sort()
			idx = len(test_suite)-1
			for val in tree.reverse():
				assert test_suite[idx] == val
				idx -= 1
	def test_insert(self):
		for trial in xrange(self.trials):
			test_suite = random.sample(self.bag, self.samples)
			tree = threadedtree.ThreadedTree()
			for sample in test_suite:
				tree.insert(sample)
			test_suite.sort()
			assert test_suite == list(tree)
		# Try inserting an item that doesn't implement comparisons
		tree.insert(lambda x: x)
	def test_len(self):
		for trial in xrange(self.trials):
			test_suite = random.sample(self.bag, self.small_samples)
			tree = threadedtree.ThreadedTree(test_suite)
			assert len(tree) == len(test_suite)
			vals_to_delete = random.sample(test_suite,random.randint(1,len(test_suite)))
			for val in vals_to_delete:
				tree.remove(val)
				test_suite.remove(val)
				assert len(tree) == len(test_suite)
	def test_sub(self):
		for trial in xrange(5):
			test_suite_1 = random.sample(self.bag, self.samples)
			test_suite_2 = random.sample(self.bag, self.small_samples)
			test_suite_3 = list(test_suite_1)
			for val in test_suite_2:
				try:
					test_suite_3.remove(val)
				except ValueError:
					continue
			tree1 = threadedtree.ThreadedTree(test_suite_1)
			tree2 = threadedtree.ThreadedTree(test_suite_2)
			tree3 = threadedtree.ThreadedTree(test_suite_3)
			assert tree1 - tree2 == tree3
			assert tree1 - test_suite_2 == tree3
		try:
			tree1 - {} #have to test the "NotImplemented" branch, so add tree to anything other than tree or list
		except TypeError:
			pass
Beispiel #10
0
 def test_next_hasnext(self):
     tree = threadedtree.ThreadedTree([])
     x = tree.bi_iter()
     assert x.next() == None
     assert x.prev() == None
     for trial in xrange(self.trials):
         test_suite = random.sample(self.bag, self.samples)
         tree = threadedtree.ThreadedTree(test_suite)
         known = list(tree)
         x = tree.bi_iter()
         assert x.has_next() == True
         for val in known:
             assert x.peek() == val
             assert str(x) == str(val)  # TEST __repr__ WHILE IM AT IT
             x.next()
         assert x.has_next() == False
         assert x.next() == None
         assert x.next() == None
         if len(x) > 0:
             assert x.prev() != None
	def test_head_and_tail(self):
		import copy
		for trial in xrange(self.trials):
			test_suite = random.sample(self.bag, self.samples)
			vals_to_delete = copy.deepcopy(test_suite)
			random.shuffle(vals_to_delete)
			tree = threadedtree.ThreadedTree(test_suite)
			for val in vals_to_delete:
				vals_to_delete.remove(val)
				tree.remove(val)
				assert tree.head.val == min(vals_to_delete)
				assert tree.tail.val == max(vals_to_delete)
	def test_find(self):
		for trial in xrange(self.trials):
			test_suite = random.sample(self.bag, self.samples)
			not_included = random.sample(test_suite, self.small_samples)
			for val in not_included:
				test_suite.remove(val)
			tree = threadedtree.ThreadedTree(test_suite)
			for sample in test_suite:
				assert (sample in tree) == True
			for sample in not_included:
				print test_suite, sample
				assert (sample in tree) == False
Beispiel #13
0
 def test_prev_hasprev(self):
     for trial in xrange(self.trials):
         test_suite = random.sample(self.bag, self.samples)
         tree = threadedtree.ThreadedTree(test_suite)
         known = list(tree)
         x = tree.bi_iter()
         x.tail()
         assert x.has_prev() == True
         for val in known[::-1]:
             assert x.peek() == val
             x.prev()
         assert x.has_prev() == False
         assert x.prev() == None
         assert x.prev() == None
         if len(x) > 0:
             assert x.next() != None
	def test_hash(self):
		for trial in xrange(self.trials):
			test_suite = random.sample(self.bag, self.small_samples)
			tree = threadedtree.ThreadedTree(test_suite)
			d = {}
			d[tree] = None
	def test_repr(self):
		for trial in xrange(self.trials):
			test_suite = random.sample(self.bag, self.small_samples)
			tree = threadedtree.ThreadedTree(test_suite)
			test_suite.sort()
			assert str(test_suite) == str(tree)
Beispiel #16
0
 def test_special_methods(self):
     for trial in xrange(self.trials):
         test_suite = random.sample(self.bag, self.samples)
         tree = threadedtree.ThreadedTree(test_suite)
         x = tree.bi_iter()
         assert len(x) == len(tree)
	def test_bad_root(self):
		try:
			tree = threadedtree.ThreadedTree(root=1)
		except TypeError:
			pass