3
from test import support
5
py_operator = support.import_fresh_module('operator', blocked=['_operator'])
6
c_operator = support.import_fresh_module('operator', fresh=['_operator'])
9
def __init__(self, lst):
13
def __getitem__(self, i):
15
def __add__(self, other):
16
return self.lst + other.lst
17
def __mul__(self, other):
18
return self.lst * other
19
def __rmul__(self, other):
20
return other * self.lst
23
def __init__(self, lst):
27
def __getitem__(self, i):
29
def __add__(self, other):
30
return self.lst + other.lst
31
def __mul__(self, other):
32
return self.lst * other
33
def __rmul__(self, other):
34
return other * self.lst
37
class OperatorTestCase:
39
operator = self.module
40
self.assertRaises(TypeError, operator.lt)
41
self.assertRaises(TypeError, operator.lt, 1j, 2j)
42
self.assertFalse(operator.lt(1, 0))
43
self.assertFalse(operator.lt(1, 0.0))
44
self.assertFalse(operator.lt(1, 1))
45
self.assertFalse(operator.lt(1, 1.0))
46
self.assertTrue(operator.lt(1, 2))
47
self.assertTrue(operator.lt(1, 2.0))
50
operator = self.module
51
self.assertRaises(TypeError, operator.le)
52
self.assertRaises(TypeError, operator.le, 1j, 2j)
53
self.assertFalse(operator.le(1, 0))
54
self.assertFalse(operator.le(1, 0.0))
55
self.assertTrue(operator.le(1, 1))
56
self.assertTrue(operator.le(1, 1.0))
57
self.assertTrue(operator.le(1, 2))
58
self.assertTrue(operator.le(1, 2.0))
61
operator = self.module
63
def __eq__(self, other):
65
self.assertRaises(TypeError, operator.eq)
66
self.assertRaises(SyntaxError, operator.eq, C(), C())
67
self.assertFalse(operator.eq(1, 0))
68
self.assertFalse(operator.eq(1, 0.0))
69
self.assertTrue(operator.eq(1, 1))
70
self.assertTrue(operator.eq(1, 1.0))
71
self.assertFalse(operator.eq(1, 2))
72
self.assertFalse(operator.eq(1, 2.0))
75
operator = self.module
77
def __ne__(self, other):
79
self.assertRaises(TypeError, operator.ne)
80
self.assertRaises(SyntaxError, operator.ne, C(), C())
81
self.assertTrue(operator.ne(1, 0))
82
self.assertTrue(operator.ne(1, 0.0))
83
self.assertFalse(operator.ne(1, 1))
84
self.assertFalse(operator.ne(1, 1.0))
85
self.assertTrue(operator.ne(1, 2))
86
self.assertTrue(operator.ne(1, 2.0))
89
operator = self.module
90
self.assertRaises(TypeError, operator.ge)
91
self.assertRaises(TypeError, operator.ge, 1j, 2j)
92
self.assertTrue(operator.ge(1, 0))
93
self.assertTrue(operator.ge(1, 0.0))
94
self.assertTrue(operator.ge(1, 1))
95
self.assertTrue(operator.ge(1, 1.0))
96
self.assertFalse(operator.ge(1, 2))
97
self.assertFalse(operator.ge(1, 2.0))
100
operator = self.module
101
self.assertRaises(TypeError, operator.gt)
102
self.assertRaises(TypeError, operator.gt, 1j, 2j)
103
self.assertTrue(operator.gt(1, 0))
104
self.assertTrue(operator.gt(1, 0.0))
105
self.assertFalse(operator.gt(1, 1))
106
self.assertFalse(operator.gt(1, 1.0))
107
self.assertFalse(operator.gt(1, 2))
108
self.assertFalse(operator.gt(1, 2.0))
111
operator = self.module
112
self.assertRaises(TypeError, operator.abs)
113
self.assertRaises(TypeError, operator.abs, None)
114
self.assertEqual(operator.abs(-1), 1)
115
self.assertEqual(operator.abs(1), 1)
118
operator = self.module
119
self.assertRaises(TypeError, operator.add)
120
self.assertRaises(TypeError, operator.add, None, None)
121
self.assertTrue(operator.add(3, 4) == 7)
123
def test_bitwise_and(self):
124
operator = self.module
125
self.assertRaises(TypeError, operator.and_)
126
self.assertRaises(TypeError, operator.and_, None, None)
127
self.assertTrue(operator.and_(0xf, 0xa) == 0xa)
129
def test_concat(self):
130
operator = self.module
131
self.assertRaises(TypeError, operator.concat)
132
self.assertRaises(TypeError, operator.concat, None, None)
133
self.assertTrue(operator.concat('py', 'thon') == 'python')
134
self.assertTrue(operator.concat([1, 2], [3, 4]) == [1, 2, 3, 4])
135
self.assertTrue(operator.concat(Seq1([5, 6]), Seq1([7])) == [5, 6, 7])
136
self.assertTrue(operator.concat(Seq2([5, 6]), Seq2([7])) == [5, 6, 7])
137
self.assertRaises(TypeError, operator.concat, 13, 29)
139
def test_countOf(self):
140
operator = self.module
141
self.assertRaises(TypeError, operator.countOf)
142
self.assertRaises(TypeError, operator.countOf, None, None)
143
self.assertTrue(operator.countOf([1, 2, 1, 3, 1, 4], 3) == 1)
144
self.assertTrue(operator.countOf([1, 2, 1, 3, 1, 4], 5) == 0)
146
def test_delitem(self):
147
operator = self.module
149
self.assertRaises(TypeError, operator.delitem, a)
150
self.assertRaises(TypeError, operator.delitem, a, None)
151
self.assertTrue(operator.delitem(a, 1) is None)
152
self.assertTrue(a == [4, 2, 1])
154
def test_floordiv(self):
155
operator = self.module
156
self.assertRaises(TypeError, operator.floordiv, 5)
157
self.assertRaises(TypeError, operator.floordiv, None, None)
158
self.assertTrue(operator.floordiv(5, 2) == 2)
160
def test_truediv(self):
161
operator = self.module
162
self.assertRaises(TypeError, operator.truediv, 5)
163
self.assertRaises(TypeError, operator.truediv, None, None)
164
self.assertTrue(operator.truediv(5, 2) == 2.5)
166
def test_getitem(self):
167
operator = self.module
169
self.assertRaises(TypeError, operator.getitem)
170
self.assertRaises(TypeError, operator.getitem, a, None)
171
self.assertTrue(operator.getitem(a, 2) == 2)
173
def test_indexOf(self):
174
operator = self.module
175
self.assertRaises(TypeError, operator.indexOf)
176
self.assertRaises(TypeError, operator.indexOf, None, None)
177
self.assertTrue(operator.indexOf([4, 3, 2, 1], 3) == 1)
178
self.assertRaises(ValueError, operator.indexOf, [4, 3, 2, 1], 0)
180
def test_invert(self):
181
operator = self.module
182
self.assertRaises(TypeError, operator.invert)
183
self.assertRaises(TypeError, operator.invert, None)
184
self.assertEqual(operator.inv(4), -5)
186
def test_lshift(self):
187
operator = self.module
188
self.assertRaises(TypeError, operator.lshift)
189
self.assertRaises(TypeError, operator.lshift, None, 42)
190
self.assertTrue(operator.lshift(5, 1) == 10)
191
self.assertTrue(operator.lshift(5, 0) == 5)
192
self.assertRaises(ValueError, operator.lshift, 2, -1)
195
operator = self.module
196
self.assertRaises(TypeError, operator.mod)
197
self.assertRaises(TypeError, operator.mod, None, 42)
198
self.assertTrue(operator.mod(5, 2) == 1)
201
operator = self.module
202
self.assertRaises(TypeError, operator.mul)
203
self.assertRaises(TypeError, operator.mul, None, None)
204
self.assertTrue(operator.mul(5, 2) == 10)
207
operator = self.module
208
self.assertRaises(TypeError, operator.neg)
209
self.assertRaises(TypeError, operator.neg, None)
210
self.assertEqual(operator.neg(5), -5)
211
self.assertEqual(operator.neg(-5), 5)
212
self.assertEqual(operator.neg(0), 0)
213
self.assertEqual(operator.neg(-0), 0)
215
def test_bitwise_or(self):
216
operator = self.module
217
self.assertRaises(TypeError, operator.or_)
218
self.assertRaises(TypeError, operator.or_, None, None)
219
self.assertTrue(operator.or_(0xa, 0x5) == 0xf)
222
operator = self.module
223
self.assertRaises(TypeError, operator.pos)
224
self.assertRaises(TypeError, operator.pos, None)
225
self.assertEqual(operator.pos(5), 5)
226
self.assertEqual(operator.pos(-5), -5)
227
self.assertEqual(operator.pos(0), 0)
228
self.assertEqual(operator.pos(-0), 0)
231
operator = self.module
232
self.assertRaises(TypeError, operator.pow)
233
self.assertRaises(TypeError, operator.pow, None, None)
234
self.assertEqual(operator.pow(3,5), 3**5)
235
self.assertRaises(TypeError, operator.pow, 1)
236
self.assertRaises(TypeError, operator.pow, 1, 2, 3)
238
def test_rshift(self):
239
operator = self.module
240
self.assertRaises(TypeError, operator.rshift)
241
self.assertRaises(TypeError, operator.rshift, None, 42)
242
self.assertTrue(operator.rshift(5, 1) == 2)
243
self.assertTrue(operator.rshift(5, 0) == 5)
244
self.assertRaises(ValueError, operator.rshift, 2, -1)
246
def test_contains(self):
247
operator = self.module
248
self.assertRaises(TypeError, operator.contains)
249
self.assertRaises(TypeError, operator.contains, None, None)
250
self.assertTrue(operator.contains(range(4), 2))
251
self.assertFalse(operator.contains(range(4), 5))
253
def test_setitem(self):
254
operator = self.module
256
self.assertRaises(TypeError, operator.setitem, a)
257
self.assertRaises(TypeError, operator.setitem, a, None, None)
258
self.assertTrue(operator.setitem(a, 0, 2) is None)
259
self.assertTrue(a == [2, 1, 2])
260
self.assertRaises(IndexError, operator.setitem, a, 4, 2)
263
operator = self.module
264
self.assertRaises(TypeError, operator.sub)
265
self.assertRaises(TypeError, operator.sub, None, None)
266
self.assertTrue(operator.sub(5, 2) == 3)
268
def test_truth(self):
269
operator = self.module
273
self.assertRaises(TypeError, operator.truth)
274
self.assertRaises(SyntaxError, operator.truth, C())
275
self.assertTrue(operator.truth(5))
276
self.assertTrue(operator.truth([0]))
277
self.assertFalse(operator.truth(0))
278
self.assertFalse(operator.truth([]))
280
def test_bitwise_xor(self):
281
operator = self.module
282
self.assertRaises(TypeError, operator.xor)
283
self.assertRaises(TypeError, operator.xor, None, None)
284
self.assertTrue(operator.xor(0xb, 0xc) == 0x7)
287
operator = self.module
290
self.assertRaises(TypeError, operator.is_)
291
self.assertTrue(operator.is_(a, b))
292
self.assertFalse(operator.is_(a,c))
294
def test_is_not(self):
295
operator = self.module
298
self.assertRaises(TypeError, operator.is_not)
299
self.assertFalse(operator.is_not(a, b))
300
self.assertTrue(operator.is_not(a,c))
302
def test_attrgetter(self):
303
operator = self.module
308
f = operator.attrgetter('name')
309
self.assertEqual(f(a), 'arthur')
310
f = operator.attrgetter('rank')
311
self.assertRaises(AttributeError, f, a)
312
self.assertRaises(TypeError, operator.attrgetter, 2)
313
self.assertRaises(TypeError, operator.attrgetter)
320
self.assertEqual(operator.attrgetter('x','z','y')(record), ('X', 'Z', 'Y'))
321
self.assertRaises(TypeError, operator.attrgetter, ('x', (), 'y'))
324
def __getattr__(self, name):
326
self.assertRaises(SyntaxError, operator.attrgetter('foo'), C())
332
a.child.name = 'thomas'
333
f = operator.attrgetter('child.name')
334
self.assertEqual(f(a), 'thomas')
335
self.assertRaises(AttributeError, f, a.child)
336
f = operator.attrgetter('name', 'child.name')
337
self.assertEqual(f(a), ('arthur', 'thomas'))
338
f = operator.attrgetter('name', 'child.name', 'child.child.name')
339
self.assertRaises(AttributeError, f, a)
340
f = operator.attrgetter('child.')
341
self.assertRaises(AttributeError, f, a)
342
f = operator.attrgetter('.child')
343
self.assertRaises(AttributeError, f, a)
346
a.child.child.name = 'johnson'
347
f = operator.attrgetter('child.child.name')
348
self.assertEqual(f(a), 'johnson')
349
f = operator.attrgetter('name', 'child.name', 'child.child.name')
350
self.assertEqual(f(a), ('arthur', 'thomas', 'johnson'))
352
def test_itemgetter(self):
353
operator = self.module
355
f = operator.itemgetter(2)
356
self.assertEqual(f(a), 'C')
357
f = operator.itemgetter(10)
358
self.assertRaises(IndexError, f, a)
361
def __getitem__(self, name):
363
self.assertRaises(SyntaxError, operator.itemgetter(42), C())
365
f = operator.itemgetter('name')
366
self.assertRaises(TypeError, f, a)
367
self.assertRaises(TypeError, operator.itemgetter)
370
f = operator.itemgetter('key')
371
self.assertEqual(f(d), 'val')
372
f = operator.itemgetter('nonkey')
373
self.assertRaises(KeyError, f, d)
375
# example used in the docs
376
inventory = [('apple', 3), ('banana', 2), ('pear', 5), ('orange', 1)]
377
getcount = operator.itemgetter(1)
378
self.assertEqual(list(map(getcount, inventory)), [3, 2, 5, 1])
379
self.assertEqual(sorted(inventory, key=getcount),
380
[('orange', 1), ('banana', 2), ('apple', 3), ('pear', 5)])
383
data = list(map(str, range(20)))
384
self.assertEqual(operator.itemgetter(2,10,5)(data), ('2', '10', '5'))
385
self.assertRaises(TypeError, operator.itemgetter(2, 'x', 5), data)
387
def test_methodcaller(self):
388
operator = self.module
389
self.assertRaises(TypeError, operator.methodcaller)
391
def foo(self, *args, **kwds):
392
return args[0] + args[1]
395
def baz(*args, **kwds):
396
return kwds['name'], kwds['self']
398
f = operator.methodcaller('foo')
399
self.assertRaises(IndexError, f, a)
400
f = operator.methodcaller('foo', 1, 2)
401
self.assertEqual(f(a), 3)
402
f = operator.methodcaller('bar')
403
self.assertEqual(f(a), 42)
404
self.assertRaises(TypeError, f, a, a)
405
f = operator.methodcaller('bar', f=5)
406
self.assertEqual(f(a), 5)
407
f = operator.methodcaller('baz', name='spam', self='eggs')
408
self.assertEqual(f(a), ('spam', 'eggs'))
410
def test_inplace(self):
411
operator = self.module
413
def __iadd__ (self, other): return "iadd"
414
def __iand__ (self, other): return "iand"
415
def __ifloordiv__(self, other): return "ifloordiv"
416
def __ilshift__ (self, other): return "ilshift"
417
def __imod__ (self, other): return "imod"
418
def __imul__ (self, other): return "imul"
419
def __ior__ (self, other): return "ior"
420
def __ipow__ (self, other): return "ipow"
421
def __irshift__ (self, other): return "irshift"
422
def __isub__ (self, other): return "isub"
423
def __itruediv__ (self, other): return "itruediv"
424
def __ixor__ (self, other): return "ixor"
425
def __getitem__(self, other): return 5 # so that C is a sequence
427
self.assertEqual(operator.iadd (c, 5), "iadd")
428
self.assertEqual(operator.iand (c, 5), "iand")
429
self.assertEqual(operator.ifloordiv(c, 5), "ifloordiv")
430
self.assertEqual(operator.ilshift (c, 5), "ilshift")
431
self.assertEqual(operator.imod (c, 5), "imod")
432
self.assertEqual(operator.imul (c, 5), "imul")
433
self.assertEqual(operator.ior (c, 5), "ior")
434
self.assertEqual(operator.ipow (c, 5), "ipow")
435
self.assertEqual(operator.irshift (c, 5), "irshift")
436
self.assertEqual(operator.isub (c, 5), "isub")
437
self.assertEqual(operator.itruediv (c, 5), "itruediv")
438
self.assertEqual(operator.ixor (c, 5), "ixor")
439
self.assertEqual(operator.iconcat (c, c), "iadd")
441
def test_length_hint(self):
442
operator = self.module
444
def __init__(self, value):
447
def __length_hint__(self):
448
if type(self.value) is type:
453
self.assertEqual(operator.length_hint([], 2), 0)
454
self.assertEqual(operator.length_hint(iter([1, 2, 3])), 3)
456
self.assertEqual(operator.length_hint(X(2)), 2)
457
self.assertEqual(operator.length_hint(X(NotImplemented), 4), 4)
458
self.assertEqual(operator.length_hint(X(TypeError), 12), 12)
459
with self.assertRaises(TypeError):
460
operator.length_hint(X("abc"))
461
with self.assertRaises(ValueError):
462
operator.length_hint(X(-2))
463
with self.assertRaises(LookupError):
464
operator.length_hint(X(LookupError))
466
def test_dunder_is_original(self):
467
operator = self.module
469
names = [name for name in dir(operator) if not name.startswith('_')]
471
orig = getattr(operator, name)
472
dunder = getattr(operator, '__' + name.strip('_') + '__', None)
474
self.assertIs(dunder, orig)
476
class PyOperatorTestCase(OperatorTestCase, unittest.TestCase):
479
@unittest.skipUnless(c_operator, 'requires _operator')
480
class COperatorTestCase(OperatorTestCase, unittest.TestCase):
483
if __name__ == "__main__":