1 import unittest 2 from test import test_support 3 4 class DictSetTest(unittest.TestCase): 5 6 def test_constructors_not_callable(self): 7 kt = type({}.viewkeys()) 8 self.assertRaises(TypeError, kt, {}) 9 self.assertRaises(TypeError, kt) 10 it = type({}.viewitems()) 11 self.assertRaises(TypeError, it, {}) 12 self.assertRaises(TypeError, it) 13 vt = type({}.viewvalues()) 14 self.assertRaises(TypeError, vt, {}) 15 self.assertRaises(TypeError, vt) 16 17 def test_dict_keys(self): 18 d = {1: 10, "a": "ABC"} 19 keys = d.viewkeys() 20 self.assertEqual(len(keys), 2) 21 self.assertEqual(set(keys), set([1, "a"])) 22 self.assertEqual(keys, set([1, "a"])) 23 self.assertNotEqual(keys, set([1, "a", "b"])) 24 self.assertNotEqual(keys, set([1, "b"])) 25 self.assertNotEqual(keys, set([1])) 26 self.assertNotEqual(keys, 42) 27 self.assertIn(1, keys) 28 self.assertIn("a", keys) 29 self.assertNotIn(10, keys) 30 self.assertNotIn("Z", keys) 31 self.assertEqual(d.viewkeys(), d.viewkeys()) 32 e = {1: 11, "a": "def"} 33 self.assertEqual(d.viewkeys(), e.viewkeys()) 34 del e["a"] 35 self.assertNotEqual(d.viewkeys(), e.viewkeys()) 36 37 def test_dict_items(self): 38 d = {1: 10, "a": "ABC"} 39 items = d.viewitems() 40 self.assertEqual(len(items), 2) 41 self.assertEqual(set(items), set([(1, 10), ("a", "ABC")])) 42 self.assertEqual(items, set([(1, 10), ("a", "ABC")])) 43 self.assertNotEqual(items, set([(1, 10), ("a", "ABC"), "junk"])) 44 self.assertNotEqual(items, set([(1, 10), ("a", "def")])) 45 self.assertNotEqual(items, set([(1, 10)])) 46 self.assertNotEqual(items, 42) 47 self.assertIn((1, 10), items) 48 self.assertIn(("a", "ABC"), items) 49 self.assertNotIn((1, 11), items) 50 self.assertNotIn(1, items) 51 self.assertNotIn((), items) 52 self.assertNotIn((1,), items) 53 self.assertNotIn((1, 2, 3), items) 54 self.assertEqual(d.viewitems(), d.viewitems()) 55 e = d.copy() 56 self.assertEqual(d.viewitems(), e.viewitems()) 57 e["a"] = "def" 58 self.assertNotEqual(d.viewitems(), e.viewitems()) 59 60 def test_dict_mixed_keys_items(self): 61 d = {(1, 1): 11, (2, 2): 22} 62 e = {1: 1, 2: 2} 63 self.assertEqual(d.viewkeys(), e.viewitems()) 64 self.assertNotEqual(d.viewitems(), e.viewkeys()) 65 66 def test_dict_values(self): 67 d = {1: 10, "a": "ABC"} 68 values = d.viewvalues() 69 self.assertEqual(set(values), set([10, "ABC"])) 70 self.assertEqual(len(values), 2) 71 72 def test_dict_repr(self): 73 d = {1: 10, "a": "ABC"} 74 self.assertIsInstance(repr(d), str) 75 r = repr(d.viewitems()) 76 self.assertIsInstance(r, str) 77 self.assertTrue(r == "dict_items([('a', 'ABC'), (1, 10)])" or 78 r == "dict_items([(1, 10), ('a', 'ABC')])") 79 r = repr(d.viewkeys()) 80 self.assertIsInstance(r, str) 81 self.assertTrue(r == "dict_keys(['a', 1])" or 82 r == "dict_keys([1, 'a'])") 83 r = repr(d.viewvalues()) 84 self.assertIsInstance(r, str) 85 self.assertTrue(r == "dict_values(['ABC', 10])" or 86 r == "dict_values([10, 'ABC'])") 87 88 def test_keys_set_operations(self): 89 d1 = {'a': 1, 'b': 2} 90 d2 = {'b': 3, 'c': 2} 91 d3 = {'d': 4, 'e': 5} 92 self.assertEqual(d1.viewkeys() & d1.viewkeys(), {'a', 'b'}) 93 self.assertEqual(d1.viewkeys() & d2.viewkeys(), {'b'}) 94 self.assertEqual(d1.viewkeys() & d3.viewkeys(), set()) 95 self.assertEqual(d1.viewkeys() & set(d1.viewkeys()), {'a', 'b'}) 96 self.assertEqual(d1.viewkeys() & set(d2.viewkeys()), {'b'}) 97 self.assertEqual(d1.viewkeys() & set(d3.viewkeys()), set()) 98 99 self.assertEqual(d1.viewkeys() | d1.viewkeys(), {'a', 'b'}) 100 self.assertEqual(d1.viewkeys() | d2.viewkeys(), {'a', 'b', 'c'}) 101 self.assertEqual(d1.viewkeys() | d3.viewkeys(), {'a', 'b', 'd', 'e'}) 102 self.assertEqual(d1.viewkeys() | set(d1.viewkeys()), {'a', 'b'}) 103 self.assertEqual(d1.viewkeys() | set(d2.viewkeys()), {'a', 'b', 'c'}) 104 self.assertEqual(d1.viewkeys() | set(d3.viewkeys()), 105 {'a', 'b', 'd', 'e'}) 106 107 self.assertEqual(d1.viewkeys() ^ d1.viewkeys(), set()) 108 self.assertEqual(d1.viewkeys() ^ d2.viewkeys(), {'a', 'c'}) 109 self.assertEqual(d1.viewkeys() ^ d3.viewkeys(), {'a', 'b', 'd', 'e'}) 110 self.assertEqual(d1.viewkeys() ^ set(d1.viewkeys()), set()) 111 self.assertEqual(d1.viewkeys() ^ set(d2.viewkeys()), {'a', 'c'}) 112 self.assertEqual(d1.viewkeys() ^ set(d3.viewkeys()), 113 {'a', 'b', 'd', 'e'}) 114 115 def test_items_set_operations(self): 116 d1 = {'a': 1, 'b': 2} 117 d2 = {'a': 2, 'b': 2} 118 d3 = {'d': 4, 'e': 5} 119 self.assertEqual( 120 d1.viewitems() & d1.viewitems(), {('a', 1), ('b', 2)}) 121 self.assertEqual(d1.viewitems() & d2.viewitems(), {('b', 2)}) 122 self.assertEqual(d1.viewitems() & d3.viewitems(), set()) 123 self.assertEqual(d1.viewitems() & set(d1.viewitems()), 124 {('a', 1), ('b', 2)}) 125 self.assertEqual(d1.viewitems() & set(d2.viewitems()), {('b', 2)}) 126 self.assertEqual(d1.viewitems() & set(d3.viewitems()), set()) 127 128 self.assertEqual(d1.viewitems() | d1.viewitems(), 129 {('a', 1), ('b', 2)}) 130 self.assertEqual(d1.viewitems() | d2.viewitems(), 131 {('a', 1), ('a', 2), ('b', 2)}) 132 self.assertEqual(d1.viewitems() | d3.viewitems(), 133 {('a', 1), ('b', 2), ('d', 4), ('e', 5)}) 134 self.assertEqual(d1.viewitems() | set(d1.viewitems()), 135 {('a', 1), ('b', 2)}) 136 self.assertEqual(d1.viewitems() | set(d2.viewitems()), 137 {('a', 1), ('a', 2), ('b', 2)}) 138 self.assertEqual(d1.viewitems() | set(d3.viewitems()), 139 {('a', 1), ('b', 2), ('d', 4), ('e', 5)}) 140 141 self.assertEqual(d1.viewitems() ^ d1.viewitems(), set()) 142 self.assertEqual(d1.viewitems() ^ d2.viewitems(), 143 {('a', 1), ('a', 2)}) 144 self.assertEqual(d1.viewitems() ^ d3.viewitems(), 145 {('a', 1), ('b', 2), ('d', 4), ('e', 5)}) 146 147 148 149 150 def test_main(): 151 test_support.run_unittest(DictSetTest) 152 153 if __name__ == "__main__": 154 test_main() 155