class Test_Bag(unittest.TestCase): def setUp(self): self.alist = ['d', 'a', 'b', 'd', 'c', 'b', 'd'] self.bag = Bag(self.alist) def test_len(self): initialv = 7 while initialv >= 0: self.assertEqual(self.bag.__len__(), initialv, 'unexpected len') random.shuffle(self.alist) if initialv > 0: toremove = self.alist[0] self.bag.remove(toremove) self.alist.remove(toremove) initialv -= 1 def test_unique(self): initialv = 4 while initialv >= 0: uniquevals = list(self.bag.counts) random.shuffle(uniquevals) self.assertEqual(self.bag.unique(), initialv, 'unexpected unique val') self.assertEqual(self.bag.unique(), len(self.bag.counts), 'unexpected unique val') if initialv > 0: toremove = uniquevals[0] del self.bag.counts[toremove] initialv -= 1 def test_contains(self): for value in ['a', 'b', 'c', 'd']: self.assertTrue(self.bag.__contains__(value), 'unexpected contains') self.assertFalse(self.bag.__contains__('x'), 'bag contains x') def test_count(self): masterdict = {'a': 1, 'b': 2, 'c': 1, 'd': 3, 'x': 0} totcount = 7 for value in masterdict: self.assertEqual(self.bag.count(value), masterdict[value], 'unexpected count') masterdict = { 'a': 1, 'b': 2, 'c': 1, 'd': 3, } while totcount >= 0: totalvalue = 0 for value in self.bag.counts: totalvalue += self.bag.counts[value] self.assertEqual(totalvalue, totcount) listkeys = list(masterdict) random.shuffle(listkeys) if totcount > 0: toremove = listkeys[0] self.bag.remove(toremove) masterdict[toremove] -= 1 if masterdict[toremove] == 0: del masterdict[toremove] totcount -= 1 def test_equals(self): listone = [] listtwo = [] for x in range(1000): c = random.randint(1, 10) listone.append(c) listtwo.append(c) random.shuffle(listone) b1 = Bag(listone) b2 = Bag(listtwo) self.assertTrue(b1 == b2) def test_add(self): listone = [] listtwo = [] for x in range(1000): c = random.randint(1, 10) listone.append(c) listtwo.append(c) random.shuffle(listone) b1 = Bag(listone) b2 = Bag() for item in listtwo: b2.add(item) self.assertTrue(b1 == b2) def test_remove(self): listone = [] listtwo = [] for x in range(1000): c = random.randint(1, 10) listone.append(c) listtwo.append(c) random.shuffle(listtwo) b1 = Bag(listone) b2 = Bag(listone) self.assertRaises(ValueError, b1.remove, 53) for item in listtwo: b2.add(item) for item in listtwo: b2.remove(item) self.assertTrue(b1 == b2)
class Test_Bag(unittest.TestCase): def setup(self): self.alist = ['d', 'a', 'b', 'd', 'c', 'b', 'd'] self.bag = Bag(self.alist) def test_len(self): self.setup() self.assertEqual(self.bag.__len__(), 7) #Initial Bag should have 7 items count = 7 random.shuffle(self.alist) #Shuffle alist for x in self.alist: self.bag.remove(x) #Remove random item in bag count -= 1 self.assertEqual(self.bag.__len__(), count) #Check if item count went down def test_unique(self): self.setup() self.assertEqual(self.bag.unique(), 4) random.shuffle(self.alist) #Shuffle alist for x in self.alist: self.bag.remove(x) #Remove random item in bag self.assertEqual(self.bag.unique(), len(self.bag.counts)) def test_contains(self): self.setup() self.assertTrue(self.bag.__contains__('a')) and self.assertTrue( self.bag.__contains__('b')) and self.assertTrue( self.bag.__contains__('c')) self.assertFalse(self.bag.__contains__('x')) def test_count(self): self.setup() self.assertEqual(self.bag.counts['a'], 1) self.assertEqual(self.bag.counts['b'], 2) self.assertEqual(self.bag.counts['c'], 1) self.assertEqual(self.bag.counts['d'], 3) self.assertEqual(self.bag.counts['x'], 0) count = sum(self.bag.counts.values()) random.shuffle(self.alist) #Shuffle alist for x in self.alist: self.bag.remove(x) count -= 1 self.assertEqual(sum(self.bag.counts.values()), count) def test_equals(self): rand_list = [random.randint(1, 10) for i in range(0, 1000)] #Make 1000-value random list bag1 = Bag(rand_list) #Create bag from random list random.shuffle(rand_list) #Shuffle random list bag2 = Bag(rand_list) #Create another bag from shuffled random list self.assertTrue(bag1.__eq__(bag2)) #They should be equal bag1.remove(rand_list[0]) #Remove 1 value from one bag self.assertFalse(bag1.__eq__(bag2)) #They should NOT be equal def test_add(self): rand_list = [random.randint(1, 10) for i in range(0, 1000)] #Make 1000-value random list bag1 = Bag(rand_list) #Create bag from random list bag2 = Bag() #Create another bag from shuffled random list random.shuffle(rand_list) #Shuffle random list for x in rand_list: bag2.add(x) self.assertEqual(bag1, bag2) def test_remove(self): rand_list = [random.randint(1, 10) for i in range(0, 1000)] #Make 1000-value random list bag1 = Bag(rand_list) #Create bag from random list with self.assertRaises(ValueError): bag1.remove(43) bag2 = Bag(rand_list) random.shuffle(rand_list) #Shuffle random list for x in rand_list: bag2.add(x) for x in rand_list: bag2.remove(x) self.assertEqual(bag1, bag2)