1cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drakeimport unittest
235ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchakaimport pickle
335ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchakaimport sys
4cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake
5ee8712cda46338d223509cc5751fd36509ad3860Benjamin Petersonfrom test import support
6cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake
7a85017fbe3be978a6f138662c6cd21052355ef91Antoine Pitroupy_operator = support.import_fresh_module('operator', blocked=['_operator'])
8a85017fbe3be978a6f138662c6cd21052355ef91Antoine Pitrouc_operator = support.import_fresh_module('operator', fresh=['_operator'])
9a85017fbe3be978a6f138662c6cd21052355ef91Antoine Pitrou
10fd163f92cee2aa8189879bd43670782f4cfd2cf8Armin Rigoclass Seq1:
11fd163f92cee2aa8189879bd43670782f4cfd2cf8Armin Rigo    def __init__(self, lst):
12fd163f92cee2aa8189879bd43670782f4cfd2cf8Armin Rigo        self.lst = lst
13fd163f92cee2aa8189879bd43670782f4cfd2cf8Armin Rigo    def __len__(self):
14fd163f92cee2aa8189879bd43670782f4cfd2cf8Armin Rigo        return len(self.lst)
15fd163f92cee2aa8189879bd43670782f4cfd2cf8Armin Rigo    def __getitem__(self, i):
16fd163f92cee2aa8189879bd43670782f4cfd2cf8Armin Rigo        return self.lst[i]
17fd163f92cee2aa8189879bd43670782f4cfd2cf8Armin Rigo    def __add__(self, other):
18fd163f92cee2aa8189879bd43670782f4cfd2cf8Armin Rigo        return self.lst + other.lst
19fd163f92cee2aa8189879bd43670782f4cfd2cf8Armin Rigo    def __mul__(self, other):
20fd163f92cee2aa8189879bd43670782f4cfd2cf8Armin Rigo        return self.lst * other
21fd163f92cee2aa8189879bd43670782f4cfd2cf8Armin Rigo    def __rmul__(self, other):
22fd163f92cee2aa8189879bd43670782f4cfd2cf8Armin Rigo        return other * self.lst
23fd163f92cee2aa8189879bd43670782f4cfd2cf8Armin Rigo
24fd163f92cee2aa8189879bd43670782f4cfd2cf8Armin Rigoclass Seq2(object):
25fd163f92cee2aa8189879bd43670782f4cfd2cf8Armin Rigo    def __init__(self, lst):
26fd163f92cee2aa8189879bd43670782f4cfd2cf8Armin Rigo        self.lst = lst
27fd163f92cee2aa8189879bd43670782f4cfd2cf8Armin Rigo    def __len__(self):
28fd163f92cee2aa8189879bd43670782f4cfd2cf8Armin Rigo        return len(self.lst)
29fd163f92cee2aa8189879bd43670782f4cfd2cf8Armin Rigo    def __getitem__(self, i):
30fd163f92cee2aa8189879bd43670782f4cfd2cf8Armin Rigo        return self.lst[i]
31fd163f92cee2aa8189879bd43670782f4cfd2cf8Armin Rigo    def __add__(self, other):
32fd163f92cee2aa8189879bd43670782f4cfd2cf8Armin Rigo        return self.lst + other.lst
33fd163f92cee2aa8189879bd43670782f4cfd2cf8Armin Rigo    def __mul__(self, other):
34fd163f92cee2aa8189879bd43670782f4cfd2cf8Armin Rigo        return self.lst * other
35fd163f92cee2aa8189879bd43670782f4cfd2cf8Armin Rigo    def __rmul__(self, other):
36fd163f92cee2aa8189879bd43670782f4cfd2cf8Armin Rigo        return other * self.lst
37fd163f92cee2aa8189879bd43670782f4cfd2cf8Armin Rigo
38cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake
39a85017fbe3be978a6f138662c6cd21052355ef91Antoine Pitrouclass OperatorTestCase:
40cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake    def test_lt(self):
41a85017fbe3be978a6f138662c6cd21052355ef91Antoine Pitrou        operator = self.module
42c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson        self.assertRaises(TypeError, operator.lt)
43c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson        self.assertRaises(TypeError, operator.lt, 1j, 2j)
44c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson        self.assertFalse(operator.lt(1, 0))
45c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson        self.assertFalse(operator.lt(1, 0.0))
46c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson        self.assertFalse(operator.lt(1, 1))
47c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson        self.assertFalse(operator.lt(1, 1.0))
48c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson        self.assertTrue(operator.lt(1, 2))
49c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson        self.assertTrue(operator.lt(1, 2.0))
50cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake
51cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake    def test_le(self):
52a85017fbe3be978a6f138662c6cd21052355ef91Antoine Pitrou        operator = self.module
53c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson        self.assertRaises(TypeError, operator.le)
54c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson        self.assertRaises(TypeError, operator.le, 1j, 2j)
55c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson        self.assertFalse(operator.le(1, 0))
56c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson        self.assertFalse(operator.le(1, 0.0))
57c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson        self.assertTrue(operator.le(1, 1))
58c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson        self.assertTrue(operator.le(1, 1.0))
59c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson        self.assertTrue(operator.le(1, 2))
60c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson        self.assertTrue(operator.le(1, 2.0))
61cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake
62cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake    def test_eq(self):
63a85017fbe3be978a6f138662c6cd21052355ef91Antoine Pitrou        operator = self.module
64bb9c739806b9f0251fa4a564986e2cb5e92e766eWalter Dörwald        class C(object):
65bb9c739806b9f0251fa4a564986e2cb5e92e766eWalter Dörwald            def __eq__(self, other):
66bb9c739806b9f0251fa4a564986e2cb5e92e766eWalter Dörwald                raise SyntaxError
67c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson        self.assertRaises(TypeError, operator.eq)
68c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson        self.assertRaises(SyntaxError, operator.eq, C(), C())
69c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson        self.assertFalse(operator.eq(1, 0))
70c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson        self.assertFalse(operator.eq(1, 0.0))
71c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson        self.assertTrue(operator.eq(1, 1))
72c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson        self.assertTrue(operator.eq(1, 1.0))
73c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson        self.assertFalse(operator.eq(1, 2))
74c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson        self.assertFalse(operator.eq(1, 2.0))
75cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake
76cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake    def test_ne(self):
77a85017fbe3be978a6f138662c6cd21052355ef91Antoine Pitrou        operator = self.module
78bb9c739806b9f0251fa4a564986e2cb5e92e766eWalter Dörwald        class C(object):
79bb9c739806b9f0251fa4a564986e2cb5e92e766eWalter Dörwald            def __ne__(self, other):
80bb9c739806b9f0251fa4a564986e2cb5e92e766eWalter Dörwald                raise SyntaxError
81c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson        self.assertRaises(TypeError, operator.ne)
82c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson        self.assertRaises(SyntaxError, operator.ne, C(), C())
83c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson        self.assertTrue(operator.ne(1, 0))
84c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson        self.assertTrue(operator.ne(1, 0.0))
85c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson        self.assertFalse(operator.ne(1, 1))
86c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson        self.assertFalse(operator.ne(1, 1.0))
87c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson        self.assertTrue(operator.ne(1, 2))
88c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson        self.assertTrue(operator.ne(1, 2.0))
89cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake
90cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake    def test_ge(self):
91a85017fbe3be978a6f138662c6cd21052355ef91Antoine Pitrou        operator = self.module
92c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson        self.assertRaises(TypeError, operator.ge)
93c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson        self.assertRaises(TypeError, operator.ge, 1j, 2j)
94c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson        self.assertTrue(operator.ge(1, 0))
95c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson        self.assertTrue(operator.ge(1, 0.0))
96c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson        self.assertTrue(operator.ge(1, 1))
97c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson        self.assertTrue(operator.ge(1, 1.0))
98c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson        self.assertFalse(operator.ge(1, 2))
99c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson        self.assertFalse(operator.ge(1, 2.0))
100cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake
101cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake    def test_gt(self):
102a85017fbe3be978a6f138662c6cd21052355ef91Antoine Pitrou        operator = self.module
103c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson        self.assertRaises(TypeError, operator.gt)
104c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson        self.assertRaises(TypeError, operator.gt, 1j, 2j)
105c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson        self.assertTrue(operator.gt(1, 0))
106c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson        self.assertTrue(operator.gt(1, 0.0))
107c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson        self.assertFalse(operator.gt(1, 1))
108c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson        self.assertFalse(operator.gt(1, 1.0))
109c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson        self.assertFalse(operator.gt(1, 2))
110c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson        self.assertFalse(operator.gt(1, 2.0))
111cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake
112cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake    def test_abs(self):
113a85017fbe3be978a6f138662c6cd21052355ef91Antoine Pitrou        operator = self.module
114c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson        self.assertRaises(TypeError, operator.abs)
115c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson        self.assertRaises(TypeError, operator.abs, None)
116e61fd5b5ed9d677da2f3349078d7f66f707199deGuido van Rossum        self.assertEqual(operator.abs(-1), 1)
117e61fd5b5ed9d677da2f3349078d7f66f707199deGuido van Rossum        self.assertEqual(operator.abs(1), 1)
118cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake
119cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake    def test_add(self):
120a85017fbe3be978a6f138662c6cd21052355ef91Antoine Pitrou        operator = self.module
121c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson        self.assertRaises(TypeError, operator.add)
122c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson        self.assertRaises(TypeError, operator.add, None, None)
123870db9025f79ea47b1f93260b8714bc25fa7cc47Antoine Pitrou        self.assertEqual(operator.add(3, 4), 7)
124cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake
125cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake    def test_bitwise_and(self):
126a85017fbe3be978a6f138662c6cd21052355ef91Antoine Pitrou        operator = self.module
127c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson        self.assertRaises(TypeError, operator.and_)
128c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson        self.assertRaises(TypeError, operator.and_, None, None)
129870db9025f79ea47b1f93260b8714bc25fa7cc47Antoine Pitrou        self.assertEqual(operator.and_(0xf, 0xa), 0xa)
130cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake
131cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake    def test_concat(self):
132a85017fbe3be978a6f138662c6cd21052355ef91Antoine Pitrou        operator = self.module
133c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson        self.assertRaises(TypeError, operator.concat)
134c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson        self.assertRaises(TypeError, operator.concat, None, None)
135870db9025f79ea47b1f93260b8714bc25fa7cc47Antoine Pitrou        self.assertEqual(operator.concat('py', 'thon'), 'python')
136870db9025f79ea47b1f93260b8714bc25fa7cc47Antoine Pitrou        self.assertEqual(operator.concat([1, 2], [3, 4]), [1, 2, 3, 4])
137870db9025f79ea47b1f93260b8714bc25fa7cc47Antoine Pitrou        self.assertEqual(operator.concat(Seq1([5, 6]), Seq1([7])), [5, 6, 7])
138870db9025f79ea47b1f93260b8714bc25fa7cc47Antoine Pitrou        self.assertEqual(operator.concat(Seq2([5, 6]), Seq2([7])), [5, 6, 7])
139c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson        self.assertRaises(TypeError, operator.concat, 13, 29)
140cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake
141cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake    def test_countOf(self):
142a85017fbe3be978a6f138662c6cd21052355ef91Antoine Pitrou        operator = self.module
143c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson        self.assertRaises(TypeError, operator.countOf)
144c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson        self.assertRaises(TypeError, operator.countOf, None, None)
145870db9025f79ea47b1f93260b8714bc25fa7cc47Antoine Pitrou        self.assertEqual(operator.countOf([1, 2, 1, 3, 1, 4], 3), 1)
146870db9025f79ea47b1f93260b8714bc25fa7cc47Antoine Pitrou        self.assertEqual(operator.countOf([1, 2, 1, 3, 1, 4], 5), 0)
147cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake
148cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake    def test_delitem(self):
149a85017fbe3be978a6f138662c6cd21052355ef91Antoine Pitrou        operator = self.module
150cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake        a = [4, 3, 2, 1]
151c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson        self.assertRaises(TypeError, operator.delitem, a)
152c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson        self.assertRaises(TypeError, operator.delitem, a, None)
153870db9025f79ea47b1f93260b8714bc25fa7cc47Antoine Pitrou        self.assertIsNone(operator.delitem(a, 1))
154870db9025f79ea47b1f93260b8714bc25fa7cc47Antoine Pitrou        self.assertEqual(a, [4, 2, 1])
155cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake
156cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake    def test_floordiv(self):
157a85017fbe3be978a6f138662c6cd21052355ef91Antoine Pitrou        operator = self.module
158c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson        self.assertRaises(TypeError, operator.floordiv, 5)
159c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson        self.assertRaises(TypeError, operator.floordiv, None, None)
160870db9025f79ea47b1f93260b8714bc25fa7cc47Antoine Pitrou        self.assertEqual(operator.floordiv(5, 2), 2)
161cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake
162cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake    def test_truediv(self):
163a85017fbe3be978a6f138662c6cd21052355ef91Antoine Pitrou        operator = self.module
164c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson        self.assertRaises(TypeError, operator.truediv, 5)
165c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson        self.assertRaises(TypeError, operator.truediv, None, None)
166870db9025f79ea47b1f93260b8714bc25fa7cc47Antoine Pitrou        self.assertEqual(operator.truediv(5, 2), 2.5)
167cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake
168cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake    def test_getitem(self):
169a85017fbe3be978a6f138662c6cd21052355ef91Antoine Pitrou        operator = self.module
170cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake        a = range(10)
171c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson        self.assertRaises(TypeError, operator.getitem)
172c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson        self.assertRaises(TypeError, operator.getitem, a, None)
173870db9025f79ea47b1f93260b8714bc25fa7cc47Antoine Pitrou        self.assertEqual(operator.getitem(a, 2), 2)
174cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake
175cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake    def test_indexOf(self):
176a85017fbe3be978a6f138662c6cd21052355ef91Antoine Pitrou        operator = self.module
177c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson        self.assertRaises(TypeError, operator.indexOf)
178c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson        self.assertRaises(TypeError, operator.indexOf, None, None)
179870db9025f79ea47b1f93260b8714bc25fa7cc47Antoine Pitrou        self.assertEqual(operator.indexOf([4, 3, 2, 1], 3), 1)
180cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake        self.assertRaises(ValueError, operator.indexOf, [4, 3, 2, 1], 0)
181cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake
182cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake    def test_invert(self):
183a85017fbe3be978a6f138662c6cd21052355ef91Antoine Pitrou        operator = self.module
184c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson        self.assertRaises(TypeError, operator.invert)
185c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson        self.assertRaises(TypeError, operator.invert, None)
186e61fd5b5ed9d677da2f3349078d7f66f707199deGuido van Rossum        self.assertEqual(operator.inv(4), -5)
187cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake
188cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake    def test_lshift(self):
189a85017fbe3be978a6f138662c6cd21052355ef91Antoine Pitrou        operator = self.module
190c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson        self.assertRaises(TypeError, operator.lshift)
191c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson        self.assertRaises(TypeError, operator.lshift, None, 42)
192870db9025f79ea47b1f93260b8714bc25fa7cc47Antoine Pitrou        self.assertEqual(operator.lshift(5, 1), 10)
193870db9025f79ea47b1f93260b8714bc25fa7cc47Antoine Pitrou        self.assertEqual(operator.lshift(5, 0), 5)
194cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake        self.assertRaises(ValueError, operator.lshift, 2, -1)
195cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake
196cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake    def test_mod(self):
197a85017fbe3be978a6f138662c6cd21052355ef91Antoine Pitrou        operator = self.module
198c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson        self.assertRaises(TypeError, operator.mod)
199c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson        self.assertRaises(TypeError, operator.mod, None, 42)
200870db9025f79ea47b1f93260b8714bc25fa7cc47Antoine Pitrou        self.assertEqual(operator.mod(5, 2), 1)
201cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake
202cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake    def test_mul(self):
203a85017fbe3be978a6f138662c6cd21052355ef91Antoine Pitrou        operator = self.module
204c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson        self.assertRaises(TypeError, operator.mul)
205c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson        self.assertRaises(TypeError, operator.mul, None, None)
206870db9025f79ea47b1f93260b8714bc25fa7cc47Antoine Pitrou        self.assertEqual(operator.mul(5, 2), 10)
207cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake
208d51374ed78a3e3145911a16cdf3b9b84b3ba7d15Benjamin Peterson    def test_matmul(self):
209d51374ed78a3e3145911a16cdf3b9b84b3ba7d15Benjamin Peterson        operator = self.module
210d51374ed78a3e3145911a16cdf3b9b84b3ba7d15Benjamin Peterson        self.assertRaises(TypeError, operator.matmul)
211d51374ed78a3e3145911a16cdf3b9b84b3ba7d15Benjamin Peterson        self.assertRaises(TypeError, operator.matmul, 42, 42)
212d51374ed78a3e3145911a16cdf3b9b84b3ba7d15Benjamin Peterson        class M:
213d51374ed78a3e3145911a16cdf3b9b84b3ba7d15Benjamin Peterson            def __matmul__(self, other):
214d51374ed78a3e3145911a16cdf3b9b84b3ba7d15Benjamin Peterson                return other - 1
215d51374ed78a3e3145911a16cdf3b9b84b3ba7d15Benjamin Peterson        self.assertEqual(M() @ 42, 41)
216d51374ed78a3e3145911a16cdf3b9b84b3ba7d15Benjamin Peterson
217cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake    def test_neg(self):
218a85017fbe3be978a6f138662c6cd21052355ef91Antoine Pitrou        operator = self.module
219c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson        self.assertRaises(TypeError, operator.neg)
220c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson        self.assertRaises(TypeError, operator.neg, None)
221e61fd5b5ed9d677da2f3349078d7f66f707199deGuido van Rossum        self.assertEqual(operator.neg(5), -5)
222e61fd5b5ed9d677da2f3349078d7f66f707199deGuido van Rossum        self.assertEqual(operator.neg(-5), 5)
223e61fd5b5ed9d677da2f3349078d7f66f707199deGuido van Rossum        self.assertEqual(operator.neg(0), 0)
224e61fd5b5ed9d677da2f3349078d7f66f707199deGuido van Rossum        self.assertEqual(operator.neg(-0), 0)
225cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake
226cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake    def test_bitwise_or(self):
227a85017fbe3be978a6f138662c6cd21052355ef91Antoine Pitrou        operator = self.module
228c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson        self.assertRaises(TypeError, operator.or_)
229c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson        self.assertRaises(TypeError, operator.or_, None, None)
230870db9025f79ea47b1f93260b8714bc25fa7cc47Antoine Pitrou        self.assertEqual(operator.or_(0xa, 0x5), 0xf)
231cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake
232cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake    def test_pos(self):
233a85017fbe3be978a6f138662c6cd21052355ef91Antoine Pitrou        operator = self.module
234c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson        self.assertRaises(TypeError, operator.pos)
235c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson        self.assertRaises(TypeError, operator.pos, None)
236e61fd5b5ed9d677da2f3349078d7f66f707199deGuido van Rossum        self.assertEqual(operator.pos(5), 5)
237e61fd5b5ed9d677da2f3349078d7f66f707199deGuido van Rossum        self.assertEqual(operator.pos(-5), -5)
238e61fd5b5ed9d677da2f3349078d7f66f707199deGuido van Rossum        self.assertEqual(operator.pos(0), 0)
239e61fd5b5ed9d677da2f3349078d7f66f707199deGuido van Rossum        self.assertEqual(operator.pos(-0), 0)
240cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake
2415959c559df777eb61b10d986e45ed4bbf269b36dRaymond Hettinger    def test_pow(self):
242a85017fbe3be978a6f138662c6cd21052355ef91Antoine Pitrou        operator = self.module
243c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson        self.assertRaises(TypeError, operator.pow)
244c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson        self.assertRaises(TypeError, operator.pow, None, None)
245e61fd5b5ed9d677da2f3349078d7f66f707199deGuido van Rossum        self.assertEqual(operator.pow(3,5), 3**5)
2465959c559df777eb61b10d986e45ed4bbf269b36dRaymond Hettinger        self.assertRaises(TypeError, operator.pow, 1)
2475959c559df777eb61b10d986e45ed4bbf269b36dRaymond Hettinger        self.assertRaises(TypeError, operator.pow, 1, 2, 3)
2485959c559df777eb61b10d986e45ed4bbf269b36dRaymond Hettinger
249cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake    def test_rshift(self):
250a85017fbe3be978a6f138662c6cd21052355ef91Antoine Pitrou        operator = self.module
251c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson        self.assertRaises(TypeError, operator.rshift)
252c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson        self.assertRaises(TypeError, operator.rshift, None, 42)
253870db9025f79ea47b1f93260b8714bc25fa7cc47Antoine Pitrou        self.assertEqual(operator.rshift(5, 1), 2)
254870db9025f79ea47b1f93260b8714bc25fa7cc47Antoine Pitrou        self.assertEqual(operator.rshift(5, 0), 5)
255cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake        self.assertRaises(ValueError, operator.rshift, 2, -1)
256cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake
257cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake    def test_contains(self):
258a85017fbe3be978a6f138662c6cd21052355ef91Antoine Pitrou        operator = self.module
259c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson        self.assertRaises(TypeError, operator.contains)
260c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson        self.assertRaises(TypeError, operator.contains, None, None)
261c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson        self.assertTrue(operator.contains(range(4), 2))
262c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson        self.assertFalse(operator.contains(range(4), 5))
263cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake
264cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake    def test_setitem(self):
265a85017fbe3be978a6f138662c6cd21052355ef91Antoine Pitrou        operator = self.module
266805365ee39298f93e433e19ae0dd87c6f782145bGuido van Rossum        a = list(range(3))
267c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson        self.assertRaises(TypeError, operator.setitem, a)
268c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson        self.assertRaises(TypeError, operator.setitem, a, None, None)
269870db9025f79ea47b1f93260b8714bc25fa7cc47Antoine Pitrou        self.assertIsNone(operator.setitem(a, 0, 2))
270870db9025f79ea47b1f93260b8714bc25fa7cc47Antoine Pitrou        self.assertEqual(a, [2, 1, 2])
271cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake        self.assertRaises(IndexError, operator.setitem, a, 4, 2)
272cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake
273cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake    def test_sub(self):
274a85017fbe3be978a6f138662c6cd21052355ef91Antoine Pitrou        operator = self.module
275c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson        self.assertRaises(TypeError, operator.sub)
276c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson        self.assertRaises(TypeError, operator.sub, None, None)
277870db9025f79ea47b1f93260b8714bc25fa7cc47Antoine Pitrou        self.assertEqual(operator.sub(5, 2), 3)
278cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake
279cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake    def test_truth(self):
280a85017fbe3be978a6f138662c6cd21052355ef91Antoine Pitrou        operator = self.module
281bb9c739806b9f0251fa4a564986e2cb5e92e766eWalter Dörwald        class C(object):
2824dafcc4ece09c2a60473bb109513de4e7d2c2b11Jack Diederich            def __bool__(self):
283bb9c739806b9f0251fa4a564986e2cb5e92e766eWalter Dörwald                raise SyntaxError
284c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson        self.assertRaises(TypeError, operator.truth)
285c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson        self.assertRaises(SyntaxError, operator.truth, C())
286c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson        self.assertTrue(operator.truth(5))
287c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson        self.assertTrue(operator.truth([0]))
288c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson        self.assertFalse(operator.truth(0))
289c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson        self.assertFalse(operator.truth([]))
290cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake
291cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake    def test_bitwise_xor(self):
292a85017fbe3be978a6f138662c6cd21052355ef91Antoine Pitrou        operator = self.module
293c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson        self.assertRaises(TypeError, operator.xor)
294c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson        self.assertRaises(TypeError, operator.xor, None, None)
295870db9025f79ea47b1f93260b8714bc25fa7cc47Antoine Pitrou        self.assertEqual(operator.xor(0xb, 0xc), 0x7)
296cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake
2979543b340066e85bb920a0655edf33e11050d7b08Raymond Hettinger    def test_is(self):
298a85017fbe3be978a6f138662c6cd21052355ef91Antoine Pitrou        operator = self.module
2999543b340066e85bb920a0655edf33e11050d7b08Raymond Hettinger        a = b = 'xyzpdq'
3009543b340066e85bb920a0655edf33e11050d7b08Raymond Hettinger        c = a[:3] + b[3:]
301c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson        self.assertRaises(TypeError, operator.is_)
302c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson        self.assertTrue(operator.is_(a, b))
303c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson        self.assertFalse(operator.is_(a,c))
3049543b340066e85bb920a0655edf33e11050d7b08Raymond Hettinger
3059543b340066e85bb920a0655edf33e11050d7b08Raymond Hettinger    def test_is_not(self):
306a85017fbe3be978a6f138662c6cd21052355ef91Antoine Pitrou        operator = self.module
3079543b340066e85bb920a0655edf33e11050d7b08Raymond Hettinger        a = b = 'xyzpdq'
3089543b340066e85bb920a0655edf33e11050d7b08Raymond Hettinger        c = a[:3] + b[3:]
309c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson        self.assertRaises(TypeError, operator.is_not)
310c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson        self.assertFalse(operator.is_not(a, b))
311c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson        self.assertTrue(operator.is_not(a,c))
312cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake
313166958b5df50fca05cb24be0152737edf575dbb9Raymond Hettinger    def test_attrgetter(self):
314a85017fbe3be978a6f138662c6cd21052355ef91Antoine Pitrou        operator = self.module
315166958b5df50fca05cb24be0152737edf575dbb9Raymond Hettinger        class A:
316166958b5df50fca05cb24be0152737edf575dbb9Raymond Hettinger            pass
317166958b5df50fca05cb24be0152737edf575dbb9Raymond Hettinger        a = A()
318166958b5df50fca05cb24be0152737edf575dbb9Raymond Hettinger        a.name = 'arthur'
319166958b5df50fca05cb24be0152737edf575dbb9Raymond Hettinger        f = operator.attrgetter('name')
320166958b5df50fca05cb24be0152737edf575dbb9Raymond Hettinger        self.assertEqual(f(a), 'arthur')
321c2a2a751cf02f603c979817b0927b238ec0f141fSerhiy Storchaka        self.assertRaises(TypeError, f)
322c2a2a751cf02f603c979817b0927b238ec0f141fSerhiy Storchaka        self.assertRaises(TypeError, f, a, 'dent')
323c2a2a751cf02f603c979817b0927b238ec0f141fSerhiy Storchaka        self.assertRaises(TypeError, f, a, surname='dent')
324166958b5df50fca05cb24be0152737edf575dbb9Raymond Hettinger        f = operator.attrgetter('rank')
325166958b5df50fca05cb24be0152737edf575dbb9Raymond Hettinger        self.assertRaises(AttributeError, f, a)
326e974571d36009e327a97bb83389cf05c2b858288Antoine Pitrou        self.assertRaises(TypeError, operator.attrgetter, 2)
327166958b5df50fca05cb24be0152737edf575dbb9Raymond Hettinger        self.assertRaises(TypeError, operator.attrgetter)
328984f9bb7140683fa9b950b42a035477108aba88fRaymond Hettinger
329984f9bb7140683fa9b950b42a035477108aba88fRaymond Hettinger        # multiple gets
330984f9bb7140683fa9b950b42a035477108aba88fRaymond Hettinger        record = A()
331984f9bb7140683fa9b950b42a035477108aba88fRaymond Hettinger        record.x = 'X'
332984f9bb7140683fa9b950b42a035477108aba88fRaymond Hettinger        record.y = 'Y'
333984f9bb7140683fa9b950b42a035477108aba88fRaymond Hettinger        record.z = 'Z'
334984f9bb7140683fa9b950b42a035477108aba88fRaymond Hettinger        self.assertEqual(operator.attrgetter('x','z','y')(record), ('X', 'Z', 'Y'))
335e974571d36009e327a97bb83389cf05c2b858288Antoine Pitrou        self.assertRaises(TypeError, operator.attrgetter, ('x', (), 'y'))
336166958b5df50fca05cb24be0152737edf575dbb9Raymond Hettinger
337bb9c739806b9f0251fa4a564986e2cb5e92e766eWalter Dörwald        class C(object):
3389bd667ad030913ead3a789f45e73c26f9f28fb46Christian Heimes            def __getattr__(self, name):
339bb9c739806b9f0251fa4a564986e2cb5e92e766eWalter Dörwald                raise SyntaxError
340c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson        self.assertRaises(SyntaxError, operator.attrgetter('foo'), C())
341bb9c739806b9f0251fa4a564986e2cb5e92e766eWalter Dörwald
342d3eb5a1581b78987621781e674ae514b3c5c68ebChristian Heimes        # recursive gets
343d3eb5a1581b78987621781e674ae514b3c5c68ebChristian Heimes        a = A()
344d3eb5a1581b78987621781e674ae514b3c5c68ebChristian Heimes        a.name = 'arthur'
345d3eb5a1581b78987621781e674ae514b3c5c68ebChristian Heimes        a.child = A()
346d3eb5a1581b78987621781e674ae514b3c5c68ebChristian Heimes        a.child.name = 'thomas'
347d3eb5a1581b78987621781e674ae514b3c5c68ebChristian Heimes        f = operator.attrgetter('child.name')
348d3eb5a1581b78987621781e674ae514b3c5c68ebChristian Heimes        self.assertEqual(f(a), 'thomas')
349d3eb5a1581b78987621781e674ae514b3c5c68ebChristian Heimes        self.assertRaises(AttributeError, f, a.child)
350d3eb5a1581b78987621781e674ae514b3c5c68ebChristian Heimes        f = operator.attrgetter('name', 'child.name')
351d3eb5a1581b78987621781e674ae514b3c5c68ebChristian Heimes        self.assertEqual(f(a), ('arthur', 'thomas'))
352d3eb5a1581b78987621781e674ae514b3c5c68ebChristian Heimes        f = operator.attrgetter('name', 'child.name', 'child.child.name')
353d3eb5a1581b78987621781e674ae514b3c5c68ebChristian Heimes        self.assertRaises(AttributeError, f, a)
354e974571d36009e327a97bb83389cf05c2b858288Antoine Pitrou        f = operator.attrgetter('child.')
355e974571d36009e327a97bb83389cf05c2b858288Antoine Pitrou        self.assertRaises(AttributeError, f, a)
356e974571d36009e327a97bb83389cf05c2b858288Antoine Pitrou        f = operator.attrgetter('.child')
357e974571d36009e327a97bb83389cf05c2b858288Antoine Pitrou        self.assertRaises(AttributeError, f, a)
358d3eb5a1581b78987621781e674ae514b3c5c68ebChristian Heimes
359d3eb5a1581b78987621781e674ae514b3c5c68ebChristian Heimes        a.child.child = A()
360d3eb5a1581b78987621781e674ae514b3c5c68ebChristian Heimes        a.child.child.name = 'johnson'
361d3eb5a1581b78987621781e674ae514b3c5c68ebChristian Heimes        f = operator.attrgetter('child.child.name')
362d3eb5a1581b78987621781e674ae514b3c5c68ebChristian Heimes        self.assertEqual(f(a), 'johnson')
363d3eb5a1581b78987621781e674ae514b3c5c68ebChristian Heimes        f = operator.attrgetter('name', 'child.name', 'child.child.name')
364d3eb5a1581b78987621781e674ae514b3c5c68ebChristian Heimes        self.assertEqual(f(a), ('arthur', 'thomas', 'johnson'))
365d3eb5a1581b78987621781e674ae514b3c5c68ebChristian Heimes
366166958b5df50fca05cb24be0152737edf575dbb9Raymond Hettinger    def test_itemgetter(self):
367a85017fbe3be978a6f138662c6cd21052355ef91Antoine Pitrou        operator = self.module
368166958b5df50fca05cb24be0152737edf575dbb9Raymond Hettinger        a = 'ABCDE'
369166958b5df50fca05cb24be0152737edf575dbb9Raymond Hettinger        f = operator.itemgetter(2)
370166958b5df50fca05cb24be0152737edf575dbb9Raymond Hettinger        self.assertEqual(f(a), 'C')
371c2a2a751cf02f603c979817b0927b238ec0f141fSerhiy Storchaka        self.assertRaises(TypeError, f)
372c2a2a751cf02f603c979817b0927b238ec0f141fSerhiy Storchaka        self.assertRaises(TypeError, f, a, 3)
373c2a2a751cf02f603c979817b0927b238ec0f141fSerhiy Storchaka        self.assertRaises(TypeError, f, a, size=3)
374166958b5df50fca05cb24be0152737edf575dbb9Raymond Hettinger        f = operator.itemgetter(10)
375166958b5df50fca05cb24be0152737edf575dbb9Raymond Hettinger        self.assertRaises(IndexError, f, a)
376166958b5df50fca05cb24be0152737edf575dbb9Raymond Hettinger
377bb9c739806b9f0251fa4a564986e2cb5e92e766eWalter Dörwald        class C(object):
3789bd667ad030913ead3a789f45e73c26f9f28fb46Christian Heimes            def __getitem__(self, name):
379bb9c739806b9f0251fa4a564986e2cb5e92e766eWalter Dörwald                raise SyntaxError
380c9c0f201fed21efcf669dbbf5f923eaf0eeb1db9Benjamin Peterson        self.assertRaises(SyntaxError, operator.itemgetter(42), C())
381bb9c739806b9f0251fa4a564986e2cb5e92e766eWalter Dörwald
382166958b5df50fca05cb24be0152737edf575dbb9Raymond Hettinger        f = operator.itemgetter('name')
383166958b5df50fca05cb24be0152737edf575dbb9Raymond Hettinger        self.assertRaises(TypeError, f, a)
384166958b5df50fca05cb24be0152737edf575dbb9Raymond Hettinger        self.assertRaises(TypeError, operator.itemgetter)
385166958b5df50fca05cb24be0152737edf575dbb9Raymond Hettinger
386166958b5df50fca05cb24be0152737edf575dbb9Raymond Hettinger        d = dict(key='val')
387166958b5df50fca05cb24be0152737edf575dbb9Raymond Hettinger        f = operator.itemgetter('key')
388166958b5df50fca05cb24be0152737edf575dbb9Raymond Hettinger        self.assertEqual(f(d), 'val')
389166958b5df50fca05cb24be0152737edf575dbb9Raymond Hettinger        f = operator.itemgetter('nonkey')
390166958b5df50fca05cb24be0152737edf575dbb9Raymond Hettinger        self.assertRaises(KeyError, f, d)
391166958b5df50fca05cb24be0152737edf575dbb9Raymond Hettinger
392166958b5df50fca05cb24be0152737edf575dbb9Raymond Hettinger        # example used in the docs
393166958b5df50fca05cb24be0152737edf575dbb9Raymond Hettinger        inventory = [('apple', 3), ('banana', 2), ('pear', 5), ('orange', 1)]
394166958b5df50fca05cb24be0152737edf575dbb9Raymond Hettinger        getcount = operator.itemgetter(1)
395c1f779cb015272412e4da2e5cb61b4e8cdcbf191Guido van Rossum        self.assertEqual(list(map(getcount, inventory)), [3, 2, 5, 1])
39664958a15d7c03efdc3d2eddf247666e18d1fd910Raymond Hettinger        self.assertEqual(sorted(inventory, key=getcount),
397166958b5df50fca05cb24be0152737edf575dbb9Raymond Hettinger            [('orange', 1), ('banana', 2), ('apple', 3), ('pear', 5)])
398166958b5df50fca05cb24be0152737edf575dbb9Raymond Hettinger
399984f9bb7140683fa9b950b42a035477108aba88fRaymond Hettinger        # multiple gets
400c1f779cb015272412e4da2e5cb61b4e8cdcbf191Guido van Rossum        data = list(map(str, range(20)))
401984f9bb7140683fa9b950b42a035477108aba88fRaymond Hettinger        self.assertEqual(operator.itemgetter(2,10,5)(data), ('2', '10', '5'))
402984f9bb7140683fa9b950b42a035477108aba88fRaymond Hettinger        self.assertRaises(TypeError, operator.itemgetter(2, 'x', 5), data)
403984f9bb7140683fa9b950b42a035477108aba88fRaymond Hettinger
404d3eb5a1581b78987621781e674ae514b3c5c68ebChristian Heimes    def test_methodcaller(self):
405a85017fbe3be978a6f138662c6cd21052355ef91Antoine Pitrou        operator = self.module
406d3eb5a1581b78987621781e674ae514b3c5c68ebChristian Heimes        self.assertRaises(TypeError, operator.methodcaller)
40735ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka        self.assertRaises(TypeError, operator.methodcaller, 12)
408d3eb5a1581b78987621781e674ae514b3c5c68ebChristian Heimes        class A:
409d3eb5a1581b78987621781e674ae514b3c5c68ebChristian Heimes            def foo(self, *args, **kwds):
410d3eb5a1581b78987621781e674ae514b3c5c68ebChristian Heimes                return args[0] + args[1]
411d3eb5a1581b78987621781e674ae514b3c5c68ebChristian Heimes            def bar(self, f=42):
412d3eb5a1581b78987621781e674ae514b3c5c68ebChristian Heimes                return f
413a85017fbe3be978a6f138662c6cd21052355ef91Antoine Pitrou            def baz(*args, **kwds):
414a85017fbe3be978a6f138662c6cd21052355ef91Antoine Pitrou                return kwds['name'], kwds['self']
415d3eb5a1581b78987621781e674ae514b3c5c68ebChristian Heimes        a = A()
416d3eb5a1581b78987621781e674ae514b3c5c68ebChristian Heimes        f = operator.methodcaller('foo')
417d3eb5a1581b78987621781e674ae514b3c5c68ebChristian Heimes        self.assertRaises(IndexError, f, a)
418d3eb5a1581b78987621781e674ae514b3c5c68ebChristian Heimes        f = operator.methodcaller('foo', 1, 2)
419b3aedd48621ed9d33b5f42f946b256bce4a50673Ezio Melotti        self.assertEqual(f(a), 3)
420c2a2a751cf02f603c979817b0927b238ec0f141fSerhiy Storchaka        self.assertRaises(TypeError, f)
421c2a2a751cf02f603c979817b0927b238ec0f141fSerhiy Storchaka        self.assertRaises(TypeError, f, a, 3)
422c2a2a751cf02f603c979817b0927b238ec0f141fSerhiy Storchaka        self.assertRaises(TypeError, f, a, spam=3)
423d3eb5a1581b78987621781e674ae514b3c5c68ebChristian Heimes        f = operator.methodcaller('bar')
424b3aedd48621ed9d33b5f42f946b256bce4a50673Ezio Melotti        self.assertEqual(f(a), 42)
425d3eb5a1581b78987621781e674ae514b3c5c68ebChristian Heimes        self.assertRaises(TypeError, f, a, a)
426d3eb5a1581b78987621781e674ae514b3c5c68ebChristian Heimes        f = operator.methodcaller('bar', f=5)
427b3aedd48621ed9d33b5f42f946b256bce4a50673Ezio Melotti        self.assertEqual(f(a), 5)
428a85017fbe3be978a6f138662c6cd21052355ef91Antoine Pitrou        f = operator.methodcaller('baz', name='spam', self='eggs')
429a85017fbe3be978a6f138662c6cd21052355ef91Antoine Pitrou        self.assertEqual(f(a), ('spam', 'eggs'))
430d3eb5a1581b78987621781e674ae514b3c5c68ebChristian Heimes
431f5bd3b442dd378563036f51595a7d6b2a239f4d5Armin Rigo    def test_inplace(self):
432a85017fbe3be978a6f138662c6cd21052355ef91Antoine Pitrou        operator = self.module
433f5bd3b442dd378563036f51595a7d6b2a239f4d5Armin Rigo        class C(object):
434f5bd3b442dd378563036f51595a7d6b2a239f4d5Armin Rigo            def __iadd__     (self, other): return "iadd"
435f5bd3b442dd378563036f51595a7d6b2a239f4d5Armin Rigo            def __iand__     (self, other): return "iand"
436f5bd3b442dd378563036f51595a7d6b2a239f4d5Armin Rigo            def __ifloordiv__(self, other): return "ifloordiv"
437f5bd3b442dd378563036f51595a7d6b2a239f4d5Armin Rigo            def __ilshift__  (self, other): return "ilshift"
438f5bd3b442dd378563036f51595a7d6b2a239f4d5Armin Rigo            def __imod__     (self, other): return "imod"
439f5bd3b442dd378563036f51595a7d6b2a239f4d5Armin Rigo            def __imul__     (self, other): return "imul"
440d51374ed78a3e3145911a16cdf3b9b84b3ba7d15Benjamin Peterson            def __imatmul__  (self, other): return "imatmul"
441f5bd3b442dd378563036f51595a7d6b2a239f4d5Armin Rigo            def __ior__      (self, other): return "ior"
442f5bd3b442dd378563036f51595a7d6b2a239f4d5Armin Rigo            def __ipow__     (self, other): return "ipow"
443f5bd3b442dd378563036f51595a7d6b2a239f4d5Armin Rigo            def __irshift__  (self, other): return "irshift"
444f5bd3b442dd378563036f51595a7d6b2a239f4d5Armin Rigo            def __isub__     (self, other): return "isub"
445f5bd3b442dd378563036f51595a7d6b2a239f4d5Armin Rigo            def __itruediv__ (self, other): return "itruediv"
446f5bd3b442dd378563036f51595a7d6b2a239f4d5Armin Rigo            def __ixor__     (self, other): return "ixor"
447f5bd3b442dd378563036f51595a7d6b2a239f4d5Armin Rigo            def __getitem__(self, other): return 5  # so that C is a sequence
448f5bd3b442dd378563036f51595a7d6b2a239f4d5Armin Rigo        c = C()
449f5bd3b442dd378563036f51595a7d6b2a239f4d5Armin Rigo        self.assertEqual(operator.iadd     (c, 5), "iadd")
450f5bd3b442dd378563036f51595a7d6b2a239f4d5Armin Rigo        self.assertEqual(operator.iand     (c, 5), "iand")
451f5bd3b442dd378563036f51595a7d6b2a239f4d5Armin Rigo        self.assertEqual(operator.ifloordiv(c, 5), "ifloordiv")
452f5bd3b442dd378563036f51595a7d6b2a239f4d5Armin Rigo        self.assertEqual(operator.ilshift  (c, 5), "ilshift")
453f5bd3b442dd378563036f51595a7d6b2a239f4d5Armin Rigo        self.assertEqual(operator.imod     (c, 5), "imod")
454f5bd3b442dd378563036f51595a7d6b2a239f4d5Armin Rigo        self.assertEqual(operator.imul     (c, 5), "imul")
455d51374ed78a3e3145911a16cdf3b9b84b3ba7d15Benjamin Peterson        self.assertEqual(operator.imatmul  (c, 5), "imatmul")
456f5bd3b442dd378563036f51595a7d6b2a239f4d5Armin Rigo        self.assertEqual(operator.ior      (c, 5), "ior")
457f5bd3b442dd378563036f51595a7d6b2a239f4d5Armin Rigo        self.assertEqual(operator.ipow     (c, 5), "ipow")
458f5bd3b442dd378563036f51595a7d6b2a239f4d5Armin Rigo        self.assertEqual(operator.irshift  (c, 5), "irshift")
459f5bd3b442dd378563036f51595a7d6b2a239f4d5Armin Rigo        self.assertEqual(operator.isub     (c, 5), "isub")
460f5bd3b442dd378563036f51595a7d6b2a239f4d5Armin Rigo        self.assertEqual(operator.itruediv (c, 5), "itruediv")
461f5bd3b442dd378563036f51595a7d6b2a239f4d5Armin Rigo        self.assertEqual(operator.ixor     (c, 5), "ixor")
462f5bd3b442dd378563036f51595a7d6b2a239f4d5Armin Rigo        self.assertEqual(operator.iconcat  (c, c), "iadd")
463984f9bb7140683fa9b950b42a035477108aba88fRaymond Hettinger
464aa9a79d27958ae5afb6c8769a2b342d98677c091Armin Ronacher    def test_length_hint(self):
465a85017fbe3be978a6f138662c6cd21052355ef91Antoine Pitrou        operator = self.module
466aa9a79d27958ae5afb6c8769a2b342d98677c091Armin Ronacher        class X(object):
467aa9a79d27958ae5afb6c8769a2b342d98677c091Armin Ronacher            def __init__(self, value):
468aa9a79d27958ae5afb6c8769a2b342d98677c091Armin Ronacher                self.value = value
469aa9a79d27958ae5afb6c8769a2b342d98677c091Armin Ronacher
470aa9a79d27958ae5afb6c8769a2b342d98677c091Armin Ronacher            def __length_hint__(self):
471aa9a79d27958ae5afb6c8769a2b342d98677c091Armin Ronacher                if type(self.value) is type:
472aa9a79d27958ae5afb6c8769a2b342d98677c091Armin Ronacher                    raise self.value
473aa9a79d27958ae5afb6c8769a2b342d98677c091Armin Ronacher                else:
474aa9a79d27958ae5afb6c8769a2b342d98677c091Armin Ronacher                    return self.value
475aa9a79d27958ae5afb6c8769a2b342d98677c091Armin Ronacher
476aa9a79d27958ae5afb6c8769a2b342d98677c091Armin Ronacher        self.assertEqual(operator.length_hint([], 2), 0)
477aa9a79d27958ae5afb6c8769a2b342d98677c091Armin Ronacher        self.assertEqual(operator.length_hint(iter([1, 2, 3])), 3)
478aa9a79d27958ae5afb6c8769a2b342d98677c091Armin Ronacher
479aa9a79d27958ae5afb6c8769a2b342d98677c091Armin Ronacher        self.assertEqual(operator.length_hint(X(2)), 2)
480aa9a79d27958ae5afb6c8769a2b342d98677c091Armin Ronacher        self.assertEqual(operator.length_hint(X(NotImplemented), 4), 4)
481aa9a79d27958ae5afb6c8769a2b342d98677c091Armin Ronacher        self.assertEqual(operator.length_hint(X(TypeError), 12), 12)
482aa9a79d27958ae5afb6c8769a2b342d98677c091Armin Ronacher        with self.assertRaises(TypeError):
483aa9a79d27958ae5afb6c8769a2b342d98677c091Armin Ronacher            operator.length_hint(X("abc"))
484aa9a79d27958ae5afb6c8769a2b342d98677c091Armin Ronacher        with self.assertRaises(ValueError):
485aa9a79d27958ae5afb6c8769a2b342d98677c091Armin Ronacher            operator.length_hint(X(-2))
486aa9a79d27958ae5afb6c8769a2b342d98677c091Armin Ronacher        with self.assertRaises(LookupError):
487aa9a79d27958ae5afb6c8769a2b342d98677c091Armin Ronacher            operator.length_hint(X(LookupError))
488aa9a79d27958ae5afb6c8769a2b342d98677c091Armin Ronacher
489a85017fbe3be978a6f138662c6cd21052355ef91Antoine Pitrou    def test_dunder_is_original(self):
490a85017fbe3be978a6f138662c6cd21052355ef91Antoine Pitrou        operator = self.module
491aa9a79d27958ae5afb6c8769a2b342d98677c091Armin Ronacher
492a85017fbe3be978a6f138662c6cd21052355ef91Antoine Pitrou        names = [name for name in dir(operator) if not name.startswith('_')]
493a85017fbe3be978a6f138662c6cd21052355ef91Antoine Pitrou        for name in names:
494a85017fbe3be978a6f138662c6cd21052355ef91Antoine Pitrou            orig = getattr(operator, name)
495a85017fbe3be978a6f138662c6cd21052355ef91Antoine Pitrou            dunder = getattr(operator, '__' + name.strip('_') + '__', None)
496a85017fbe3be978a6f138662c6cd21052355ef91Antoine Pitrou            if dunder:
497a85017fbe3be978a6f138662c6cd21052355ef91Antoine Pitrou                self.assertIs(dunder, orig)
498984f9bb7140683fa9b950b42a035477108aba88fRaymond Hettinger
499a85017fbe3be978a6f138662c6cd21052355ef91Antoine Pitrouclass PyOperatorTestCase(OperatorTestCase, unittest.TestCase):
500a85017fbe3be978a6f138662c6cd21052355ef91Antoine Pitrou    module = py_operator
5012e2be3760ccdfd4bdde4afdd66f4078022ba3b61Fred Drake
502a85017fbe3be978a6f138662c6cd21052355ef91Antoine Pitrou@unittest.skipUnless(c_operator, 'requires _operator')
503a85017fbe3be978a6f138662c6cd21052355ef91Antoine Pitrouclass COperatorTestCase(OperatorTestCase, unittest.TestCase):
504a85017fbe3be978a6f138662c6cd21052355ef91Antoine Pitrou    module = c_operator
5052e2be3760ccdfd4bdde4afdd66f4078022ba3b61Fred Drake
50635ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka
50735ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchakaclass OperatorPickleTestCase:
50835ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka    def copy(self, obj, proto):
50935ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka        with support.swap_item(sys.modules, 'operator', self.module):
51035ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka            pickled = pickle.dumps(obj, proto)
51135ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka        with support.swap_item(sys.modules, 'operator', self.module2):
51235ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka            return pickle.loads(pickled)
51335ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka
51435ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka    def test_attrgetter(self):
51535ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka        attrgetter = self.module.attrgetter
51635ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka        class A:
51735ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka            pass
51835ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka        a = A()
51935ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka        a.x = 'X'
52035ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka        a.y = 'Y'
52135ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka        a.z = 'Z'
52235ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka        a.t = A()
52335ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka        a.t.u = A()
52435ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka        a.t.u.v = 'V'
52535ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka        for proto in range(pickle.HIGHEST_PROTOCOL + 1):
52635ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka            with self.subTest(proto=proto):
52735ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka                f = attrgetter('x')
52835ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka                f2 = self.copy(f, proto)
52935ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka                self.assertEqual(repr(f2), repr(f))
53035ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka                self.assertEqual(f2(a), f(a))
53135ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka                # multiple gets
53235ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka                f = attrgetter('x', 'y', 'z')
53335ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka                f2 = self.copy(f, proto)
53435ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka                self.assertEqual(repr(f2), repr(f))
53535ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka                self.assertEqual(f2(a), f(a))
53635ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka                # recursive gets
53735ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka                f = attrgetter('t.u.v')
53835ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka                f2 = self.copy(f, proto)
53935ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka                self.assertEqual(repr(f2), repr(f))
54035ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka                self.assertEqual(f2(a), f(a))
54135ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka
54235ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka    def test_itemgetter(self):
54335ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka        itemgetter = self.module.itemgetter
54435ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka        a = 'ABCDE'
54535ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka        for proto in range(pickle.HIGHEST_PROTOCOL + 1):
54635ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka            with self.subTest(proto=proto):
54735ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka                f = itemgetter(2)
54835ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka                f2 = self.copy(f, proto)
54935ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka                self.assertEqual(repr(f2), repr(f))
55035ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka                self.assertEqual(f2(a), f(a))
55135ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka                # multiple gets
55235ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka                f = itemgetter(2, 0, 4)
55335ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka                f2 = self.copy(f, proto)
55435ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka                self.assertEqual(repr(f2), repr(f))
55535ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka                self.assertEqual(f2(a), f(a))
55635ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka
55735ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka    def test_methodcaller(self):
55835ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka        methodcaller = self.module.methodcaller
55935ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka        class A:
56035ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka            def foo(self, *args, **kwds):
56135ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka                return args[0] + args[1]
56235ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka            def bar(self, f=42):
56335ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka                return f
56435ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka            def baz(*args, **kwds):
56535ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka                return kwds['name'], kwds['self']
56635ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka        a = A()
56735ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka        for proto in range(pickle.HIGHEST_PROTOCOL + 1):
56835ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka            with self.subTest(proto=proto):
56935ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka                f = methodcaller('bar')
57035ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka                f2 = self.copy(f, proto)
57135ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka                self.assertEqual(repr(f2), repr(f))
57235ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka                self.assertEqual(f2(a), f(a))
57335ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka                # positional args
57435ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka                f = methodcaller('foo', 1, 2)
57535ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka                f2 = self.copy(f, proto)
57635ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka                self.assertEqual(repr(f2), repr(f))
57735ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka                self.assertEqual(f2(a), f(a))
57835ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka                # keyword args
57935ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka                f = methodcaller('bar', f=5)
58035ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka                f2 = self.copy(f, proto)
58135ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka                self.assertEqual(repr(f2), repr(f))
58235ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka                self.assertEqual(f2(a), f(a))
58335ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka                f = methodcaller('baz', self='eggs', name='spam')
58435ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka                f2 = self.copy(f, proto)
58535ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka                # Can't test repr consistently with multiple keyword args
58635ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka                self.assertEqual(f2(a), f(a))
58735ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka
58835ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchakaclass PyPyOperatorPickleTestCase(OperatorPickleTestCase, unittest.TestCase):
58935ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka    module = py_operator
59035ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka    module2 = py_operator
59135ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka
59235ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka@unittest.skipUnless(c_operator, 'requires _operator')
59335ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchakaclass PyCOperatorPickleTestCase(OperatorPickleTestCase, unittest.TestCase):
59435ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka    module = py_operator
59535ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka    module2 = c_operator
59635ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka
59735ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka@unittest.skipUnless(c_operator, 'requires _operator')
59835ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchakaclass CPyOperatorPickleTestCase(OperatorPickleTestCase, unittest.TestCase):
59935ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka    module = c_operator
60035ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka    module2 = py_operator
60135ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka
60235ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka@unittest.skipUnless(c_operator, 'requires _operator')
60335ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchakaclass CCOperatorPickleTestCase(OperatorPickleTestCase, unittest.TestCase):
60435ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka    module = c_operator
60535ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka    module2 = c_operator
60635ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka
60735ac5f82804829eec51d5553f080c5697453b5bbSerhiy Storchaka
6082e2be3760ccdfd4bdde4afdd66f4078022ba3b61Fred Drakeif __name__ == "__main__":
609a85017fbe3be978a6f138662c6cd21052355ef91Antoine Pitrou    unittest.main()
610