blob: d96832e57630e07e3938112a0d07f1e3547bc162 [file] [log] [blame]
Raymond Hettingerc074e9d2015-05-26 01:47:58 -07001import collections
Guido van Rossumb90c8482007-02-10 01:11:45 +00002import unittest
Guido van Rossumb90c8482007-02-10 01:11:45 +00003
4class DictSetTest(unittest.TestCase):
5
Guido van Rossum3ac67412007-02-10 18:55:06 +00006 def test_constructors_not_callable(self):
Guido van Rossumcc2b0162007-02-11 06:12:03 +00007 kt = type({}.keys())
Guido van Rossum3ac67412007-02-10 18:55:06 +00008 self.assertRaises(TypeError, kt, {})
9 self.assertRaises(TypeError, kt)
Guido van Rossumcc2b0162007-02-11 06:12:03 +000010 it = type({}.items())
Guido van Rossum3ac67412007-02-10 18:55:06 +000011 self.assertRaises(TypeError, it, {})
12 self.assertRaises(TypeError, it)
Guido van Rossumcc2b0162007-02-11 06:12:03 +000013 vt = type({}.values())
Guido van Rossum3ac67412007-02-10 18:55:06 +000014 self.assertRaises(TypeError, vt, {})
15 self.assertRaises(TypeError, vt)
16
Guido van Rossumb90c8482007-02-10 01:11:45 +000017 def test_dict_keys(self):
18 d = {1: 10, "a": "ABC"}
Guido van Rossumcc2b0162007-02-11 06:12:03 +000019 keys = d.keys()
Guido van Rossum83825ac2007-02-10 04:54:19 +000020 self.assertEqual(len(keys), 2)
Guido van Rossumd9214d12007-02-12 02:23:40 +000021 self.assertEqual(set(keys), {1, "a"})
22 self.assertEqual(keys, {1, "a"})
23 self.assertNotEqual(keys, {1, "a", "b"})
24 self.assertNotEqual(keys, {1, "b"})
25 self.assertNotEqual(keys, {1})
26 self.assertNotEqual(keys, 42)
Benjamin Peterson577473f2010-01-19 00:09:57 +000027 self.assertIn(1, keys)
28 self.assertIn("a", keys)
29 self.assertNotIn(10, keys)
30 self.assertNotIn("Z", keys)
Guido van Rossumd9214d12007-02-12 02:23:40 +000031 self.assertEqual(d.keys(), d.keys())
32 e = {1: 11, "a": "def"}
33 self.assertEqual(d.keys(), e.keys())
34 del e["a"]
35 self.assertNotEqual(d.keys(), e.keys())
Guido van Rossumb90c8482007-02-10 01:11:45 +000036
37 def test_dict_items(self):
38 d = {1: 10, "a": "ABC"}
Guido van Rossumcc2b0162007-02-11 06:12:03 +000039 items = d.items()
Guido van Rossum83825ac2007-02-10 04:54:19 +000040 self.assertEqual(len(items), 2)
Guido van Rossumd9214d12007-02-12 02:23:40 +000041 self.assertEqual(set(items), {(1, 10), ("a", "ABC")})
42 self.assertEqual(items, {(1, 10), ("a", "ABC")})
43 self.assertNotEqual(items, {(1, 10), ("a", "ABC"), "junk"})
44 self.assertNotEqual(items, {(1, 10), ("a", "def")})
45 self.assertNotEqual(items, {(1, 10)})
46 self.assertNotEqual(items, 42)
Benjamin Peterson577473f2010-01-19 00:09:57 +000047 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)
Guido van Rossumd9214d12007-02-12 02:23:40 +000054 self.assertEqual(d.items(), d.items())
55 e = d.copy()
56 self.assertEqual(d.items(), e.items())
57 e["a"] = "def"
58 self.assertNotEqual(d.items(), e.items())
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.keys(), e.items())
64 self.assertNotEqual(d.items(), e.keys())
Guido van Rossumb90c8482007-02-10 01:11:45 +000065
66 def test_dict_values(self):
67 d = {1: 10, "a": "ABC"}
Guido van Rossumcc2b0162007-02-11 06:12:03 +000068 values = d.values()
Guido van Rossumb90c8482007-02-10 01:11:45 +000069 self.assertEqual(set(values), {10, "ABC"})
Guido van Rossum83825ac2007-02-10 04:54:19 +000070 self.assertEqual(len(values), 2)
Guido van Rossumb90c8482007-02-10 01:11:45 +000071
Alexandre Vassalottia7142572010-05-04 03:41:49 +000072 def test_dict_repr(self):
73 d = {1: 10, "a": "ABC"}
74 self.assertIsInstance(repr(d), str)
75 r = repr(d.items())
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.keys())
80 self.assertIsInstance(r, str)
81 self.assertTrue(r == "dict_keys(['a', 1])" or
82 r == "dict_keys([1, 'a'])")
83 r = repr(d.values())
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.keys() & d1.keys(), {'a', 'b'})
93 self.assertEqual(d1.keys() & d2.keys(), {'b'})
94 self.assertEqual(d1.keys() & d3.keys(), set())
95 self.assertEqual(d1.keys() & set(d1.keys()), {'a', 'b'})
96 self.assertEqual(d1.keys() & set(d2.keys()), {'b'})
97 self.assertEqual(d1.keys() & set(d3.keys()), set())
98
99 self.assertEqual(d1.keys() | d1.keys(), {'a', 'b'})
100 self.assertEqual(d1.keys() | d2.keys(), {'a', 'b', 'c'})
101 self.assertEqual(d1.keys() | d3.keys(), {'a', 'b', 'd', 'e'})
102 self.assertEqual(d1.keys() | set(d1.keys()), {'a', 'b'})
103 self.assertEqual(d1.keys() | set(d2.keys()), {'a', 'b', 'c'})
104 self.assertEqual(d1.keys() | set(d3.keys()),
105 {'a', 'b', 'd', 'e'})
106
107 self.assertEqual(d1.keys() ^ d1.keys(), set())
108 self.assertEqual(d1.keys() ^ d2.keys(), {'a', 'c'})
109 self.assertEqual(d1.keys() ^ d3.keys(), {'a', 'b', 'd', 'e'})
110 self.assertEqual(d1.keys() ^ set(d1.keys()), set())
111 self.assertEqual(d1.keys() ^ set(d2.keys()), {'a', 'c'})
112 self.assertEqual(d1.keys() ^ set(d3.keys()),
113 {'a', 'b', 'd', 'e'})
114
Ezio Melotti25326352013-08-08 20:12:28 +0300115 self.assertEqual(d1.keys() - d1.keys(), set())
116 self.assertEqual(d1.keys() - d2.keys(), {'a'})
117 self.assertEqual(d1.keys() - d3.keys(), {'a', 'b'})
118 self.assertEqual(d1.keys() - set(d1.keys()), set())
119 self.assertEqual(d1.keys() - set(d2.keys()), {'a'})
120 self.assertEqual(d1.keys() - set(d3.keys()), {'a', 'b'})
121
Daniel Stutzbach045b3ba2010-09-02 15:06:06 +0000122 self.assertFalse(d1.keys().isdisjoint(d1.keys()))
123 self.assertFalse(d1.keys().isdisjoint(d2.keys()))
124 self.assertFalse(d1.keys().isdisjoint(list(d2.keys())))
125 self.assertFalse(d1.keys().isdisjoint(set(d2.keys())))
126 self.assertTrue(d1.keys().isdisjoint({'x', 'y', 'z'}))
127 self.assertTrue(d1.keys().isdisjoint(['x', 'y', 'z']))
128 self.assertTrue(d1.keys().isdisjoint(set(['x', 'y', 'z'])))
129 self.assertTrue(d1.keys().isdisjoint(set(['x', 'y'])))
130 self.assertTrue(d1.keys().isdisjoint(['x', 'y']))
131 self.assertTrue(d1.keys().isdisjoint({}))
132 self.assertTrue(d1.keys().isdisjoint(d3.keys()))
133
134 de = {}
135 self.assertTrue(de.keys().isdisjoint(set()))
136 self.assertTrue(de.keys().isdisjoint([]))
137 self.assertTrue(de.keys().isdisjoint(de.keys()))
138 self.assertTrue(de.keys().isdisjoint([1]))
139
Alexandre Vassalottia7142572010-05-04 03:41:49 +0000140 def test_items_set_operations(self):
141 d1 = {'a': 1, 'b': 2}
142 d2 = {'a': 2, 'b': 2}
143 d3 = {'d': 4, 'e': 5}
144 self.assertEqual(
145 d1.items() & d1.items(), {('a', 1), ('b', 2)})
146 self.assertEqual(d1.items() & d2.items(), {('b', 2)})
147 self.assertEqual(d1.items() & d3.items(), set())
148 self.assertEqual(d1.items() & set(d1.items()),
149 {('a', 1), ('b', 2)})
150 self.assertEqual(d1.items() & set(d2.items()), {('b', 2)})
151 self.assertEqual(d1.items() & set(d3.items()), set())
152
153 self.assertEqual(d1.items() | d1.items(),
154 {('a', 1), ('b', 2)})
155 self.assertEqual(d1.items() | d2.items(),
156 {('a', 1), ('a', 2), ('b', 2)})
157 self.assertEqual(d1.items() | d3.items(),
158 {('a', 1), ('b', 2), ('d', 4), ('e', 5)})
159 self.assertEqual(d1.items() | set(d1.items()),
160 {('a', 1), ('b', 2)})
161 self.assertEqual(d1.items() | set(d2.items()),
162 {('a', 1), ('a', 2), ('b', 2)})
163 self.assertEqual(d1.items() | set(d3.items()),
164 {('a', 1), ('b', 2), ('d', 4), ('e', 5)})
165
166 self.assertEqual(d1.items() ^ d1.items(), set())
167 self.assertEqual(d1.items() ^ d2.items(),
168 {('a', 1), ('a', 2)})
169 self.assertEqual(d1.items() ^ d3.items(),
170 {('a', 1), ('b', 2), ('d', 4), ('e', 5)})
171
Ezio Melotti25326352013-08-08 20:12:28 +0300172 self.assertEqual(d1.items() - d1.items(), set())
173 self.assertEqual(d1.items() - d2.items(), {('a', 1)})
174 self.assertEqual(d1.items() - d3.items(), {('a', 1), ('b', 2)})
175 self.assertEqual(d1.items() - set(d1.items()), set())
176 self.assertEqual(d1.items() - set(d2.items()), {('a', 1)})
177 self.assertEqual(d1.items() - set(d3.items()), {('a', 1), ('b', 2)})
178
Daniel Stutzbach045b3ba2010-09-02 15:06:06 +0000179 self.assertFalse(d1.items().isdisjoint(d1.items()))
180 self.assertFalse(d1.items().isdisjoint(d2.items()))
181 self.assertFalse(d1.items().isdisjoint(list(d2.items())))
182 self.assertFalse(d1.items().isdisjoint(set(d2.items())))
183 self.assertTrue(d1.items().isdisjoint({'x', 'y', 'z'}))
184 self.assertTrue(d1.items().isdisjoint(['x', 'y', 'z']))
185 self.assertTrue(d1.items().isdisjoint(set(['x', 'y', 'z'])))
186 self.assertTrue(d1.items().isdisjoint(set(['x', 'y'])))
187 self.assertTrue(d1.items().isdisjoint({}))
188 self.assertTrue(d1.items().isdisjoint(d3.items()))
189
190 de = {}
191 self.assertTrue(de.items().isdisjoint(set()))
192 self.assertTrue(de.items().isdisjoint([]))
193 self.assertTrue(de.items().isdisjoint(de.items()))
194 self.assertTrue(de.items().isdisjoint([1]))
195
Benjamin Peterson611d9012013-05-19 19:39:38 -0700196 def test_recursive_repr(self):
197 d = {}
198 d[42] = d.values()
199 self.assertRaises(RuntimeError, repr, d)
200
Raymond Hettingerc074e9d2015-05-26 01:47:58 -0700201 def test_abc_registry(self):
202 d = dict(a=1)
203
204 self.assertIsInstance(d.keys(), collections.KeysView)
205 self.assertIsInstance(d.keys(), collections.MappingView)
206 self.assertIsInstance(d.keys(), collections.Set)
207 self.assertIsInstance(d.keys(), collections.Sized)
208 self.assertIsInstance(d.keys(), collections.Iterable)
209 self.assertIsInstance(d.keys(), collections.Container)
210
211 self.assertIsInstance(d.values(), collections.ValuesView)
212 self.assertIsInstance(d.values(), collections.MappingView)
213 self.assertIsInstance(d.values(), collections.Sized)
214
215 self.assertIsInstance(d.items(), collections.ItemsView)
216 self.assertIsInstance(d.items(), collections.MappingView)
217 self.assertIsInstance(d.items(), collections.Set)
218 self.assertIsInstance(d.items(), collections.Sized)
219 self.assertIsInstance(d.items(), collections.Iterable)
220 self.assertIsInstance(d.items(), collections.Container)
221
Alexandre Vassalottia7142572010-05-04 03:41:49 +0000222
Guido van Rossumb90c8482007-02-10 01:11:45 +0000223if __name__ == "__main__":
Zachary Ware38c707e2015-04-13 15:00:43 -0500224 unittest.main()