blob: c5d391793a21e2413db0515f046784617bffc158 [file] [log] [blame]
Alexandre Vassalotti69eb5162010-01-11 23:17:10 +00001import unittest
Raymond Hettinger1a7c3572015-05-26 01:35:54 -07002import collections
Alexandre Vassalotti69eb5162010-01-11 23:17:10 +00003from test import test_support
4
5class DictSetTest(unittest.TestCase):
6
7 def test_constructors_not_callable(self):
8 kt = type({}.viewkeys())
9 self.assertRaises(TypeError, kt, {})
10 self.assertRaises(TypeError, kt)
11 it = type({}.viewitems())
12 self.assertRaises(TypeError, it, {})
13 self.assertRaises(TypeError, it)
14 vt = type({}.viewvalues())
15 self.assertRaises(TypeError, vt, {})
16 self.assertRaises(TypeError, vt)
17
18 def test_dict_keys(self):
19 d = {1: 10, "a": "ABC"}
20 keys = d.viewkeys()
21 self.assertEqual(len(keys), 2)
22 self.assertEqual(set(keys), set([1, "a"]))
23 self.assertEqual(keys, set([1, "a"]))
24 self.assertNotEqual(keys, set([1, "a", "b"]))
25 self.assertNotEqual(keys, set([1, "b"]))
26 self.assertNotEqual(keys, set([1]))
27 self.assertNotEqual(keys, 42)
Ezio Melottiaa980582010-01-23 23:04:36 +000028 self.assertIn(1, keys)
29 self.assertIn("a", keys)
30 self.assertNotIn(10, keys)
31 self.assertNotIn("Z", keys)
Alexandre Vassalotti69eb5162010-01-11 23:17:10 +000032 self.assertEqual(d.viewkeys(), d.viewkeys())
33 e = {1: 11, "a": "def"}
34 self.assertEqual(d.viewkeys(), e.viewkeys())
35 del e["a"]
36 self.assertNotEqual(d.viewkeys(), e.viewkeys())
37
38 def test_dict_items(self):
39 d = {1: 10, "a": "ABC"}
40 items = d.viewitems()
41 self.assertEqual(len(items), 2)
42 self.assertEqual(set(items), set([(1, 10), ("a", "ABC")]))
43 self.assertEqual(items, set([(1, 10), ("a", "ABC")]))
44 self.assertNotEqual(items, set([(1, 10), ("a", "ABC"), "junk"]))
45 self.assertNotEqual(items, set([(1, 10), ("a", "def")]))
46 self.assertNotEqual(items, set([(1, 10)]))
47 self.assertNotEqual(items, 42)
Ezio Melottiaa980582010-01-23 23:04:36 +000048 self.assertIn((1, 10), items)
49 self.assertIn(("a", "ABC"), items)
50 self.assertNotIn((1, 11), items)
51 self.assertNotIn(1, items)
52 self.assertNotIn((), items)
53 self.assertNotIn((1,), items)
54 self.assertNotIn((1, 2, 3), items)
Alexandre Vassalotti69eb5162010-01-11 23:17:10 +000055 self.assertEqual(d.viewitems(), d.viewitems())
56 e = d.copy()
57 self.assertEqual(d.viewitems(), e.viewitems())
58 e["a"] = "def"
59 self.assertNotEqual(d.viewitems(), e.viewitems())
60
61 def test_dict_mixed_keys_items(self):
62 d = {(1, 1): 11, (2, 2): 22}
63 e = {1: 1, 2: 2}
64 self.assertEqual(d.viewkeys(), e.viewitems())
65 self.assertNotEqual(d.viewitems(), e.viewkeys())
66
67 def test_dict_values(self):
68 d = {1: 10, "a": "ABC"}
69 values = d.viewvalues()
70 self.assertEqual(set(values), set([10, "ABC"]))
71 self.assertEqual(len(values), 2)
72
73 def test_dict_repr(self):
74 d = {1: 10, "a": "ABC"}
Ezio Melottib0f5adc2010-01-24 16:58:36 +000075 self.assertIsInstance(repr(d), str)
Alexandre Vassalotti58a96ef2010-01-12 01:34:43 +000076 r = repr(d.viewitems())
Ezio Melottib0f5adc2010-01-24 16:58:36 +000077 self.assertIsInstance(r, str)
Alexandre Vassalotti58a96ef2010-01-12 01:34:43 +000078 self.assertTrue(r == "dict_items([('a', 'ABC'), (1, 10)])" or
79 r == "dict_items([(1, 10), ('a', 'ABC')])")
80 r = repr(d.viewkeys())
Ezio Melottib0f5adc2010-01-24 16:58:36 +000081 self.assertIsInstance(r, str)
Alexandre Vassalotti58a96ef2010-01-12 01:34:43 +000082 self.assertTrue(r == "dict_keys(['a', 1])" or
83 r == "dict_keys([1, 'a'])")
84 r = repr(d.viewvalues())
Ezio Melottib0f5adc2010-01-24 16:58:36 +000085 self.assertIsInstance(r, str)
Alexandre Vassalotti58a96ef2010-01-12 01:34:43 +000086 self.assertTrue(r == "dict_values(['ABC', 10])" or
87 r == "dict_values([10, 'ABC'])")
Alexandre Vassalotti69eb5162010-01-11 23:17:10 +000088
Alexandre Vassalotti268e4872010-05-04 03:21:51 +000089 def test_keys_set_operations(self):
90 d1 = {'a': 1, 'b': 2}
91 d2 = {'b': 3, 'c': 2}
92 d3 = {'d': 4, 'e': 5}
93 self.assertEqual(d1.viewkeys() & d1.viewkeys(), {'a', 'b'})
94 self.assertEqual(d1.viewkeys() & d2.viewkeys(), {'b'})
95 self.assertEqual(d1.viewkeys() & d3.viewkeys(), set())
96 self.assertEqual(d1.viewkeys() & set(d1.viewkeys()), {'a', 'b'})
97 self.assertEqual(d1.viewkeys() & set(d2.viewkeys()), {'b'})
98 self.assertEqual(d1.viewkeys() & set(d3.viewkeys()), set())
99
100 self.assertEqual(d1.viewkeys() | d1.viewkeys(), {'a', 'b'})
101 self.assertEqual(d1.viewkeys() | d2.viewkeys(), {'a', 'b', 'c'})
102 self.assertEqual(d1.viewkeys() | d3.viewkeys(), {'a', 'b', 'd', 'e'})
103 self.assertEqual(d1.viewkeys() | set(d1.viewkeys()), {'a', 'b'})
104 self.assertEqual(d1.viewkeys() | set(d2.viewkeys()), {'a', 'b', 'c'})
105 self.assertEqual(d1.viewkeys() | set(d3.viewkeys()),
106 {'a', 'b', 'd', 'e'})
107
108 self.assertEqual(d1.viewkeys() ^ d1.viewkeys(), set())
109 self.assertEqual(d1.viewkeys() ^ d2.viewkeys(), {'a', 'c'})
110 self.assertEqual(d1.viewkeys() ^ d3.viewkeys(), {'a', 'b', 'd', 'e'})
111 self.assertEqual(d1.viewkeys() ^ set(d1.viewkeys()), set())
112 self.assertEqual(d1.viewkeys() ^ set(d2.viewkeys()), {'a', 'c'})
113 self.assertEqual(d1.viewkeys() ^ set(d3.viewkeys()),
114 {'a', 'b', 'd', 'e'})
115
Ezio Melotti7921b302013-08-08 20:09:19 +0300116 self.assertEqual(d1.viewkeys() - d1.viewkeys(), set())
117 self.assertEqual(d1.viewkeys() - d2.viewkeys(), {'a'})
118 self.assertEqual(d1.viewkeys() - d3.viewkeys(), {'a', 'b'})
119 self.assertEqual(d1.viewkeys() - set(d1.viewkeys()), set())
120 self.assertEqual(d1.viewkeys() - set(d2.viewkeys()), {'a'})
121 self.assertEqual(d1.viewkeys() - set(d3.viewkeys()), {'a', 'b'})
122
Alexandre Vassalotti268e4872010-05-04 03:21:51 +0000123 def test_items_set_operations(self):
124 d1 = {'a': 1, 'b': 2}
125 d2 = {'a': 2, 'b': 2}
126 d3 = {'d': 4, 'e': 5}
127 self.assertEqual(
128 d1.viewitems() & d1.viewitems(), {('a', 1), ('b', 2)})
129 self.assertEqual(d1.viewitems() & d2.viewitems(), {('b', 2)})
130 self.assertEqual(d1.viewitems() & d3.viewitems(), set())
131 self.assertEqual(d1.viewitems() & set(d1.viewitems()),
132 {('a', 1), ('b', 2)})
133 self.assertEqual(d1.viewitems() & set(d2.viewitems()), {('b', 2)})
134 self.assertEqual(d1.viewitems() & set(d3.viewitems()), set())
135
136 self.assertEqual(d1.viewitems() | d1.viewitems(),
137 {('a', 1), ('b', 2)})
138 self.assertEqual(d1.viewitems() | d2.viewitems(),
139 {('a', 1), ('a', 2), ('b', 2)})
140 self.assertEqual(d1.viewitems() | d3.viewitems(),
141 {('a', 1), ('b', 2), ('d', 4), ('e', 5)})
142 self.assertEqual(d1.viewitems() | set(d1.viewitems()),
143 {('a', 1), ('b', 2)})
144 self.assertEqual(d1.viewitems() | set(d2.viewitems()),
145 {('a', 1), ('a', 2), ('b', 2)})
146 self.assertEqual(d1.viewitems() | set(d3.viewitems()),
147 {('a', 1), ('b', 2), ('d', 4), ('e', 5)})
148
149 self.assertEqual(d1.viewitems() ^ d1.viewitems(), set())
150 self.assertEqual(d1.viewitems() ^ d2.viewitems(),
151 {('a', 1), ('a', 2)})
152 self.assertEqual(d1.viewitems() ^ d3.viewitems(),
153 {('a', 1), ('b', 2), ('d', 4), ('e', 5)})
154
Ezio Melotti7921b302013-08-08 20:09:19 +0300155 self.assertEqual(d1.viewitems() - d1.viewitems(), set())
156 self.assertEqual(d1.viewitems() - d2.viewitems(), {('a', 1)})
157 self.assertEqual(d1.viewitems() - d3.viewitems(), {('a', 1), ('b', 2)})
158 self.assertEqual(d1.viewitems() - set(d1.viewitems()), set())
159 self.assertEqual(d1.viewitems() - set(d2.viewitems()), {('a', 1)})
160 self.assertEqual(d1.viewitems() - set(d3.viewitems()),
161 {('a', 1), ('b', 2)})
162
Benjamin Petersonb91ef002013-05-19 19:38:12 -0700163 def test_recursive_repr(self):
164 d = {}
165 d[42] = d.viewvalues()
166 self.assertRaises(RuntimeError, repr, d)
167
Raymond Hettinger1a7c3572015-05-26 01:35:54 -0700168 def test_abc_registry(self):
169 d = dict(a=1)
Alexandre Vassalotti268e4872010-05-04 03:21:51 +0000170
Raymond Hettinger1a7c3572015-05-26 01:35:54 -0700171 self.assertIsInstance(d.viewkeys(), collections.KeysView)
172 self.assertIsInstance(d.viewkeys(), collections.MappingView)
173 self.assertIsInstance(d.viewkeys(), collections.Set)
174 self.assertIsInstance(d.viewkeys(), collections.Sized)
175 self.assertIsInstance(d.viewkeys(), collections.Iterable)
176 self.assertIsInstance(d.viewkeys(), collections.Container)
177
178 self.assertIsInstance(d.viewvalues(), collections.ValuesView)
179 self.assertIsInstance(d.viewvalues(), collections.MappingView)
180 self.assertIsInstance(d.viewvalues(), collections.Sized)
181
182 self.assertIsInstance(d.viewitems(), collections.ItemsView)
183 self.assertIsInstance(d.viewitems(), collections.MappingView)
184 self.assertIsInstance(d.viewitems(), collections.Set)
185 self.assertIsInstance(d.viewitems(), collections.Sized)
186 self.assertIsInstance(d.viewitems(), collections.Iterable)
187 self.assertIsInstance(d.viewitems(), collections.Container)
Alexandre Vassalotti268e4872010-05-04 03:21:51 +0000188
Alexandre Vassalotti69eb5162010-01-11 23:17:10 +0000189
190def test_main():
191 test_support.run_unittest(DictSetTest)
192
193if __name__ == "__main__":
194 test_main()