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
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
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)
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