📄 test_sets.py
字号:
self.assertEqual(self.set, Set(self.values)) def test_update_unit_tuple_overlap(self): self.set.union_update(("a",)) self.assertEqual(self.set, Set(self.values)) def test_update_unit_tuple_non_overlap(self): self.set.union_update(("a", "z")) self.assertEqual(self.set, Set(self.values + ["z"]))#==============================================================================class TestSubsets(unittest.TestCase): case2method = {"<=": "issubset", ">=": "issuperset", } reverse = {"==": "==", "!=": "!=", "<": ">", ">": "<", "<=": ">=", ">=": "<=", } def test_issubset(self): x = self.left y = self.right for case in "!=", "==", "<", "<=", ">", ">=": expected = case in self.cases # Test the binary infix spelling. result = eval("x" + case + "y", locals()) self.assertEqual(result, expected) # Test the "friendly" method-name spelling, if one exists. if case in TestSubsets.case2method: method = getattr(x, TestSubsets.case2method[case]) result = method(y) self.assertEqual(result, expected) # Now do the same for the operands reversed. rcase = TestSubsets.reverse[case] result = eval("y" + rcase + "x", locals()) self.assertEqual(result, expected) if rcase in TestSubsets.case2method: method = getattr(y, TestSubsets.case2method[rcase]) result = method(x) self.assertEqual(result, expected)#------------------------------------------------------------------------------class TestSubsetEqualEmpty(TestSubsets): left = Set() right = Set() name = "both empty" cases = "==", "<=", ">="#------------------------------------------------------------------------------class TestSubsetEqualNonEmpty(TestSubsets): left = Set([1, 2]) right = Set([1, 2]) name = "equal pair" cases = "==", "<=", ">="#------------------------------------------------------------------------------class TestSubsetEmptyNonEmpty(TestSubsets): left = Set() right = Set([1, 2]) name = "one empty, one non-empty" cases = "!=", "<", "<="#------------------------------------------------------------------------------class TestSubsetPartial(TestSubsets): left = Set([1]) right = Set([1, 2]) name = "one a non-empty proper subset of other" cases = "!=", "<", "<="#------------------------------------------------------------------------------class TestSubsetNonOverlap(TestSubsets): left = Set([1]) right = Set([2]) name = "neither empty, neither contains" cases = "!="#==============================================================================class TestOnlySetsInBinaryOps(unittest.TestCase): def test_eq_ne(self): # Unlike the others, this is testing that == and != *are* allowed. self.assertEqual(self.other == self.set, False) self.assertEqual(self.set == self.other, False) self.assertEqual(self.other != self.set, True) self.assertEqual(self.set != self.other, True) def test_ge_gt_le_lt(self): self.assertRaises(TypeError, lambda: self.set < self.other) self.assertRaises(TypeError, lambda: self.set <= self.other) self.assertRaises(TypeError, lambda: self.set > self.other) self.assertRaises(TypeError, lambda: self.set >= self.other) self.assertRaises(TypeError, lambda: self.other < self.set) self.assertRaises(TypeError, lambda: self.other <= self.set) self.assertRaises(TypeError, lambda: self.other > self.set) self.assertRaises(TypeError, lambda: self.other >= self.set) def test_union_update_operator(self): try: self.set |= self.other except TypeError: pass else: self.fail("expected TypeError") def test_union_update(self): if self.otherIsIterable: self.set.union_update(self.other) else: self.assertRaises(TypeError, self.set.union_update, self.other) def test_union(self): self.assertRaises(TypeError, lambda: self.set | self.other) self.assertRaises(TypeError, lambda: self.other | self.set) if self.otherIsIterable: self.set.union(self.other) else: self.assertRaises(TypeError, self.set.union, self.other) def test_intersection_update_operator(self): try: self.set &= self.other except TypeError: pass else: self.fail("expected TypeError") def test_intersection_update(self): if self.otherIsIterable: self.set.intersection_update(self.other) else: self.assertRaises(TypeError, self.set.intersection_update, self.other) def test_intersection(self): self.assertRaises(TypeError, lambda: self.set & self.other) self.assertRaises(TypeError, lambda: self.other & self.set) if self.otherIsIterable: self.set.intersection(self.other) else: self.assertRaises(TypeError, self.set.intersection, self.other) def test_sym_difference_update_operator(self): try: self.set ^= self.other except TypeError: pass else: self.fail("expected TypeError") def test_sym_difference_update(self): if self.otherIsIterable: self.set.symmetric_difference_update(self.other) else: self.assertRaises(TypeError, self.set.symmetric_difference_update, self.other) def test_sym_difference(self): self.assertRaises(TypeError, lambda: self.set ^ self.other) self.assertRaises(TypeError, lambda: self.other ^ self.set) if self.otherIsIterable: self.set.symmetric_difference(self.other) else: self.assertRaises(TypeError, self.set.symmetric_difference, self.other) def test_difference_update_operator(self): try: self.set -= self.other except TypeError: pass else: self.fail("expected TypeError") def test_difference_update(self): if self.otherIsIterable: self.set.difference_update(self.other) else: self.assertRaises(TypeError, self.set.difference_update, self.other) def test_difference(self): self.assertRaises(TypeError, lambda: self.set - self.other) self.assertRaises(TypeError, lambda: self.other - self.set) if self.otherIsIterable: self.set.difference(self.other) else: self.assertRaises(TypeError, self.set.difference, self.other)#------------------------------------------------------------------------------class TestOnlySetsNumeric(TestOnlySetsInBinaryOps): def setUp(self): self.set = Set((1, 2, 3)) self.other = 19 self.otherIsIterable = False#------------------------------------------------------------------------------class TestOnlySetsDict(TestOnlySetsInBinaryOps): def setUp(self): self.set = Set((1, 2, 3)) self.other = {1:2, 3:4} self.otherIsIterable = True#------------------------------------------------------------------------------class TestOnlySetsOperator(TestOnlySetsInBinaryOps): def setUp(self): self.set = Set((1, 2, 3)) self.other = operator.add self.otherIsIterable = False#------------------------------------------------------------------------------class TestOnlySetsTuple(TestOnlySetsInBinaryOps): def setUp(self): self.set = Set((1, 2, 3)) self.other = (2, 4, 6) self.otherIsIterable = True#------------------------------------------------------------------------------class TestOnlySetsString(TestOnlySetsInBinaryOps): def setUp(self): self.set = Set((1, 2, 3)) self.other = 'abc' self.otherIsIterable = True#------------------------------------------------------------------------------class TestOnlySetsGenerator(TestOnlySetsInBinaryOps): def setUp(self): def gen(): for i in xrange(0, 10, 2): yield i self.set = Set((1, 2, 3)) self.other = gen() self.otherIsIterable = True#==============================================================================class TestCopying(unittest.TestCase): def test_copy(self): dup = self.set.copy() dup_list = list(dup); dup_list.sort() set_list = list(self.set); set_list.sort() self.assertEqual(len(dup_list), len(set_list)) for i in range(len(dup_list)): self.failUnless(dup_list[i] is set_list[i]) def test_deep_copy(self): dup = copy.deepcopy(self.set) ##print type(dup), `dup` dup_list = list(dup); dup_list.sort() set_list = list(self.set); set_list.sort() self.assertEqual(len(dup_list), len(set_list)) for i in range(len(dup_list)): self.assertEqual(dup_list[i], set_list[i])#------------------------------------------------------------------------------class TestCopyingEmpty(TestCopying): def setUp(self): self.set = Set()#------------------------------------------------------------------------------class TestCopyingSingleton(TestCopying): def setUp(self): self.set = Set(["hello"])#------------------------------------------------------------------------------class TestCopyingTriple(TestCopying): def setUp(self): self.set = Set(["zero", 0, None])#------------------------------------------------------------------------------class TestCopyingTuple(TestCopying): def setUp(self): self.set = Set([(1, 2)])#------------------------------------------------------------------------------class TestCopyingNested(TestCopying): def setUp(self): self.set = Set([((1, 2), (3, 4))])#==============================================================================class TestIdentities(unittest.TestCase): def setUp(self): self.a = Set('abracadabra') self.b = Set('alacazam') def test_binopsVsSubsets(self): a, b = self.a, self.b self.assert_(a - b < a) self.assert_(b - a < b) self.assert_(a & b < a) self.assert_(a & b < b) self.assert_(a | b > a) self.assert_(a | b > b) self.assert_(a ^ b < a | b) def test_commutativity(self): a, b = self.a, self.b self.assertEqual(a&b, b&a) self.assertEqual(a|b, b|a) self.assertEqual(a^b, b^a) if a != b: self.assertNotEqual(a-b, b-a) def test_summations(self): # check that sums of parts equal the whole a, b = self.a, self.b self.assertEqual((a-b)|(a&b)|(b-a), a|b) self.assertEqual((a&b)|(a^b), a|b) self.assertEqual(a|(b-a), a|b) self.assertEqual((a-b)|b, a|b) self.assertEqual((a-b)|(a&b), a) self.assertEqual((b-a)|(a&b), b) self.assertEqual((a-b)|(b-a), a^b) def test_exclusion(self): # check that inverse operations show non-overlap a, b, zero = self.a, self.b, Set() self.assertEqual((a-b)&b, zero) self.assertEqual((b-a)&a, zero) self.assertEqual((a&b)&(a^b), zero)#==============================================================================def test_main(verbose=False): test_suite = unittest.TestSuite() test_loader = unittest.TestLoader() def suite_add(case): test_suite.addTest(test_loader.loadTestsFromTestCase(case)) for t in [ TestSetOfSets, TestExceptionPropagation, TestBasicOpsEmpty, TestBasicOpsSingleton, TestBasicOpsTuple, TestBasicOpsTriple, TestBinaryOps, TestUpdateOps, TestMutate, TestSubsetEqualEmpty, TestSubsetEqualNonEmpty, TestSubsetEmptyNonEmpty, TestSubsetPartial, TestSubsetNonOverlap, TestOnlySetsNumeric, TestOnlySetsDict, TestOnlySetsOperator, TestOnlySetsTuple, TestOnlySetsString, TestOnlySetsGenerator, TestCopyingEmpty, TestCopyingSingleton, TestCopyingTriple, TestCopyingTuple, TestCopyingNested, TestIdentities, ]: suite_add(t) _verbose = test_support.verbose try: test_support.verbose = False test_support.run_suite(test_suite) finally: test_support.verbose = _verboseif __name__ == "__main__": test_main(verbose=False)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -