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 | self.assertEqual(d1.viewkeys() - d1.viewkeys(), set())
|
---|
116 | self.assertEqual(d1.viewkeys() - d2.viewkeys(), {'a'})
|
---|
117 | self.assertEqual(d1.viewkeys() - d3.viewkeys(), {'a', 'b'})
|
---|
118 | self.assertEqual(d1.viewkeys() - set(d1.viewkeys()), set())
|
---|
119 | self.assertEqual(d1.viewkeys() - set(d2.viewkeys()), {'a'})
|
---|
120 | self.assertEqual(d1.viewkeys() - set(d3.viewkeys()), {'a', 'b'})
|
---|
121 |
|
---|
122 | def test_items_set_operations(self):
|
---|
123 | d1 = {'a': 1, 'b': 2}
|
---|
124 | d2 = {'a': 2, 'b': 2}
|
---|
125 | d3 = {'d': 4, 'e': 5}
|
---|
126 | self.assertEqual(
|
---|
127 | d1.viewitems() & d1.viewitems(), {('a', 1), ('b', 2)})
|
---|
128 | self.assertEqual(d1.viewitems() & d2.viewitems(), {('b', 2)})
|
---|
129 | self.assertEqual(d1.viewitems() & d3.viewitems(), set())
|
---|
130 | self.assertEqual(d1.viewitems() & set(d1.viewitems()),
|
---|
131 | {('a', 1), ('b', 2)})
|
---|
132 | self.assertEqual(d1.viewitems() & set(d2.viewitems()), {('b', 2)})
|
---|
133 | self.assertEqual(d1.viewitems() & set(d3.viewitems()), set())
|
---|
134 |
|
---|
135 | self.assertEqual(d1.viewitems() | d1.viewitems(),
|
---|
136 | {('a', 1), ('b', 2)})
|
---|
137 | self.assertEqual(d1.viewitems() | d2.viewitems(),
|
---|
138 | {('a', 1), ('a', 2), ('b', 2)})
|
---|
139 | self.assertEqual(d1.viewitems() | d3.viewitems(),
|
---|
140 | {('a', 1), ('b', 2), ('d', 4), ('e', 5)})
|
---|
141 | self.assertEqual(d1.viewitems() | set(d1.viewitems()),
|
---|
142 | {('a', 1), ('b', 2)})
|
---|
143 | self.assertEqual(d1.viewitems() | set(d2.viewitems()),
|
---|
144 | {('a', 1), ('a', 2), ('b', 2)})
|
---|
145 | self.assertEqual(d1.viewitems() | set(d3.viewitems()),
|
---|
146 | {('a', 1), ('b', 2), ('d', 4), ('e', 5)})
|
---|
147 |
|
---|
148 | self.assertEqual(d1.viewitems() ^ d1.viewitems(), set())
|
---|
149 | self.assertEqual(d1.viewitems() ^ d2.viewitems(),
|
---|
150 | {('a', 1), ('a', 2)})
|
---|
151 | self.assertEqual(d1.viewitems() ^ d3.viewitems(),
|
---|
152 | {('a', 1), ('b', 2), ('d', 4), ('e', 5)})
|
---|
153 |
|
---|
154 | self.assertEqual(d1.viewitems() - d1.viewitems(), set())
|
---|
155 | self.assertEqual(d1.viewitems() - d2.viewitems(), {('a', 1)})
|
---|
156 | self.assertEqual(d1.viewitems() - d3.viewitems(), {('a', 1), ('b', 2)})
|
---|
157 | self.assertEqual(d1.viewitems() - set(d1.viewitems()), set())
|
---|
158 | self.assertEqual(d1.viewitems() - set(d2.viewitems()), {('a', 1)})
|
---|
159 | self.assertEqual(d1.viewitems() - set(d3.viewitems()),
|
---|
160 | {('a', 1), ('b', 2)})
|
---|
161 |
|
---|
162 | def test_recursive_repr(self):
|
---|
163 | d = {}
|
---|
164 | d[42] = d.viewvalues()
|
---|
165 | self.assertRaises(RuntimeError, repr, d)
|
---|
166 |
|
---|
167 |
|
---|
168 |
|
---|
169 |
|
---|
170 | def test_main():
|
---|
171 | test_support.run_unittest(DictSetTest)
|
---|
172 |
|
---|
173 | if __name__ == "__main__":
|
---|
174 | test_main()
|
---|