4 from test
import test_support
7 def __init__(self
, lst
):
11 def __getitem__(self
, i
):
13 def __add__(self
, other
):
14 return self
.lst
+ other
.lst
15 def __mul__(self
, other
):
16 return self
.lst
* other
17 def __rmul__(self
, other
):
18 return other
* self
.lst
21 def __init__(self
, lst
):
25 def __getitem__(self
, i
):
27 def __add__(self
, other
):
28 return self
.lst
+ other
.lst
29 def __mul__(self
, other
):
30 return self
.lst
* other
31 def __rmul__(self
, other
):
32 return other
* self
.lst
35 class OperatorTestCase(unittest
.TestCase
):
37 self
.assertRaises(TypeError, operator
.lt
)
38 self
.assertRaises(TypeError, operator
.lt
, 1j
, 2j
)
39 self
.assertFalse(operator
.lt(1, 0))
40 self
.assertFalse(operator
.lt(1, 0.0))
41 self
.assertFalse(operator
.lt(1, 1))
42 self
.assertFalse(operator
.lt(1, 1.0))
43 self
.assertTrue(operator
.lt(1, 2))
44 self
.assertTrue(operator
.lt(1, 2.0))
47 self
.assertRaises(TypeError, operator
.le
)
48 self
.assertRaises(TypeError, operator
.le
, 1j
, 2j
)
49 self
.assertFalse(operator
.le(1, 0))
50 self
.assertFalse(operator
.le(1, 0.0))
51 self
.assertTrue(operator
.le(1, 1))
52 self
.assertTrue(operator
.le(1, 1.0))
53 self
.assertTrue(operator
.le(1, 2))
54 self
.assertTrue(operator
.le(1, 2.0))
58 def __eq__(self
, other
):
60 __hash__
= None # Silence Py3k warning
61 self
.assertRaises(TypeError, operator
.eq
)
62 self
.assertRaises(SyntaxError, operator
.eq
, C(), C())
63 self
.assertFalse(operator
.eq(1, 0))
64 self
.assertFalse(operator
.eq(1, 0.0))
65 self
.assertTrue(operator
.eq(1, 1))
66 self
.assertTrue(operator
.eq(1, 1.0))
67 self
.assertFalse(operator
.eq(1, 2))
68 self
.assertFalse(operator
.eq(1, 2.0))
72 def __ne__(self
, other
):
74 self
.assertRaises(TypeError, operator
.ne
)
75 self
.assertRaises(SyntaxError, operator
.ne
, C(), C())
76 self
.assertTrue(operator
.ne(1, 0))
77 self
.assertTrue(operator
.ne(1, 0.0))
78 self
.assertFalse(operator
.ne(1, 1))
79 self
.assertFalse(operator
.ne(1, 1.0))
80 self
.assertTrue(operator
.ne(1, 2))
81 self
.assertTrue(operator
.ne(1, 2.0))
84 self
.assertRaises(TypeError, operator
.ge
)
85 self
.assertRaises(TypeError, operator
.ge
, 1j
, 2j
)
86 self
.assertTrue(operator
.ge(1, 0))
87 self
.assertTrue(operator
.ge(1, 0.0))
88 self
.assertTrue(operator
.ge(1, 1))
89 self
.assertTrue(operator
.ge(1, 1.0))
90 self
.assertFalse(operator
.ge(1, 2))
91 self
.assertFalse(operator
.ge(1, 2.0))
94 self
.assertRaises(TypeError, operator
.gt
)
95 self
.assertRaises(TypeError, operator
.gt
, 1j
, 2j
)
96 self
.assertTrue(operator
.gt(1, 0))
97 self
.assertTrue(operator
.gt(1, 0.0))
98 self
.assertFalse(operator
.gt(1, 1))
99 self
.assertFalse(operator
.gt(1, 1.0))
100 self
.assertFalse(operator
.gt(1, 2))
101 self
.assertFalse(operator
.gt(1, 2.0))
104 self
.assertRaises(TypeError, operator
.abs)
105 self
.assertRaises(TypeError, operator
.abs, None)
106 self
.assertTrue(operator
.abs(-1) == 1)
107 self
.assertTrue(operator
.abs(1) == 1)
110 self
.assertRaises(TypeError, operator
.add
)
111 self
.assertRaises(TypeError, operator
.add
, None, None)
112 self
.assertTrue(operator
.add(3, 4) == 7)
114 def test_bitwise_and(self
):
115 self
.assertRaises(TypeError, operator
.and_
)
116 self
.assertRaises(TypeError, operator
.and_
, None, None)
117 self
.assertTrue(operator
.and_(0xf, 0xa) == 0xa)
119 def test_concat(self
):
120 self
.assertRaises(TypeError, operator
.concat
)
121 self
.assertRaises(TypeError, operator
.concat
, None, None)
122 self
.assertTrue(operator
.concat('py', 'thon') == 'python')
123 self
.assertTrue(operator
.concat([1, 2], [3, 4]) == [1, 2, 3, 4])
124 self
.assertTrue(operator
.concat(Seq1([5, 6]), Seq1([7])) == [5, 6, 7])
125 self
.assertTrue(operator
.concat(Seq2([5, 6]), Seq2([7])) == [5, 6, 7])
126 self
.assertRaises(TypeError, operator
.concat
, 13, 29)
128 def test_countOf(self
):
129 self
.assertRaises(TypeError, operator
.countOf
)
130 self
.assertRaises(TypeError, operator
.countOf
, None, None)
131 self
.assertTrue(operator
.countOf([1, 2, 1, 3, 1, 4], 3) == 1)
132 self
.assertTrue(operator
.countOf([1, 2, 1, 3, 1, 4], 5) == 0)
134 def test_delitem(self
):
136 self
.assertRaises(TypeError, operator
.delitem
, a
)
137 self
.assertRaises(TypeError, operator
.delitem
, a
, None)
138 self
.assertTrue(operator
.delitem(a
, 1) is None)
139 self
.assertTrue(a
== [4, 2, 1])
141 def test_delslice(self
):
143 self
.assertRaises(TypeError, operator
.delslice
, a
)
144 self
.assertRaises(TypeError, operator
.delslice
, a
, None, None)
145 self
.assertTrue(operator
.delslice(a
, 2, 8) is None)
146 self
.assertTrue(a
== [0, 1, 8, 9])
147 operator
.delslice(a
, 0, test_support
.MAX_Py_ssize_t
)
148 self
.assertTrue(a
== [])
151 self
.assertRaises(TypeError, operator
.div
, 5)
152 self
.assertRaises(TypeError, operator
.div
, None, None)
153 self
.assertTrue(operator
.floordiv(5, 2) == 2)
155 def test_floordiv(self
):
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 self
.assertRaises(TypeError, operator
.truediv
, 5)
162 self
.assertRaises(TypeError, operator
.truediv
, None, None)
163 self
.assertTrue(operator
.truediv(5, 2) == 2.5)
165 def test_getitem(self
):
167 self
.assertRaises(TypeError, operator
.getitem
)
168 self
.assertRaises(TypeError, operator
.getitem
, a
, None)
169 self
.assertTrue(operator
.getitem(a
, 2) == 2)
171 def test_getslice(self
):
173 self
.assertRaises(TypeError, operator
.getslice
)
174 self
.assertRaises(TypeError, operator
.getslice
, a
, None, None)
175 self
.assertTrue(operator
.getslice(a
, 4, 6) == [4, 5])
176 b
= operator
.getslice(a
, 0, test_support
.MAX_Py_ssize_t
)
177 self
.assertTrue(b
== a
)
179 def test_indexOf(self
):
180 self
.assertRaises(TypeError, operator
.indexOf
)
181 self
.assertRaises(TypeError, operator
.indexOf
, None, None)
182 self
.assertTrue(operator
.indexOf([4, 3, 2, 1], 3) == 1)
183 self
.assertRaises(ValueError, operator
.indexOf
, [4, 3, 2, 1], 0)
185 def test_invert(self
):
186 self
.assertRaises(TypeError, operator
.invert
)
187 self
.assertRaises(TypeError, operator
.invert
, None)
188 self
.assertTrue(operator
.inv(4) == -5)
190 def test_isCallable(self
):
191 self
.assertRaises(TypeError, operator
.isCallable
)
194 def check(self
, o
, v
):
195 self
.assertTrue(operator
.isCallable(o
) == callable(o
) == v
)
197 check(self
, operator
.isCallable
, 1)
201 def test_isMappingType(self
):
202 self
.assertRaises(TypeError, operator
.isMappingType
)
203 self
.assertFalse(operator
.isMappingType(1))
204 self
.assertFalse(operator
.isMappingType(operator
.isMappingType
))
205 self
.assertTrue(operator
.isMappingType(operator
.__dict
__))
206 self
.assertTrue(operator
.isMappingType({}))
208 def test_isNumberType(self
):
209 self
.assertRaises(TypeError, operator
.isNumberType
)
210 self
.assertTrue(operator
.isNumberType(8))
211 self
.assertTrue(operator
.isNumberType(8j
))
212 self
.assertTrue(operator
.isNumberType(8L))
213 self
.assertTrue(operator
.isNumberType(8.3))
214 self
.assertFalse(operator
.isNumberType(dir()))
216 def test_isSequenceType(self
):
217 self
.assertRaises(TypeError, operator
.isSequenceType
)
218 self
.assertTrue(operator
.isSequenceType(dir()))
219 self
.assertTrue(operator
.isSequenceType(()))
220 self
.assertTrue(operator
.isSequenceType(xrange(10)))
221 self
.assertTrue(operator
.isSequenceType('yeahbuddy'))
222 self
.assertFalse(operator
.isSequenceType(3))
223 class Dict(dict): pass
224 self
.assertFalse(operator
.isSequenceType(Dict()))
226 def test_lshift(self
):
227 self
.assertRaises(TypeError, operator
.lshift
)
228 self
.assertRaises(TypeError, operator
.lshift
, None, 42)
229 self
.assertTrue(operator
.lshift(5, 1) == 10)
230 self
.assertTrue(operator
.lshift(5, 0) == 5)
231 self
.assertRaises(ValueError, operator
.lshift
, 2, -1)
234 self
.assertRaises(TypeError, operator
.mod
)
235 self
.assertRaises(TypeError, operator
.mod
, None, 42)
236 self
.assertTrue(operator
.mod(5, 2) == 1)
239 self
.assertRaises(TypeError, operator
.mul
)
240 self
.assertRaises(TypeError, operator
.mul
, None, None)
241 self
.assertTrue(operator
.mul(5, 2) == 10)
244 self
.assertRaises(TypeError, operator
.neg
)
245 self
.assertRaises(TypeError, operator
.neg
, None)
246 self
.assertTrue(operator
.neg(5) == -5)
247 self
.assertTrue(operator
.neg(-5) == 5)
248 self
.assertTrue(operator
.neg(0) == 0)
249 self
.assertTrue(operator
.neg(-0) == 0)
251 def test_bitwise_or(self
):
252 self
.assertRaises(TypeError, operator
.or_
)
253 self
.assertRaises(TypeError, operator
.or_
, None, None)
254 self
.assertTrue(operator
.or_(0xa, 0x5) == 0xf)
257 self
.assertRaises(TypeError, operator
.pos
)
258 self
.assertRaises(TypeError, operator
.pos
, None)
259 self
.assertTrue(operator
.pos(5) == 5)
260 self
.assertTrue(operator
.pos(-5) == -5)
261 self
.assertTrue(operator
.pos(0) == 0)
262 self
.assertTrue(operator
.pos(-0) == 0)
265 self
.assertRaises(TypeError, operator
.pow)
266 self
.assertRaises(TypeError, operator
.pow, None, None)
267 self
.assertTrue(operator
.pow(3,5) == 3**5)
268 self
.assertTrue(operator
.__pow
__(3,5) == 3**5)
269 self
.assertRaises(TypeError, operator
.pow, 1)
270 self
.assertRaises(TypeError, operator
.pow, 1, 2, 3)
272 def test_repeat(self
):
274 self
.assertRaises(TypeError, operator
.repeat
)
275 self
.assertRaises(TypeError, operator
.repeat
, a
, None)
276 self
.assertTrue(operator
.repeat(a
, 2) == a
+a
)
277 self
.assertTrue(operator
.repeat(a
, 1) == a
)
278 self
.assertTrue(operator
.repeat(a
, 0) == [])
280 self
.assertTrue(operator
.repeat(a
, 2) == a
+a
)
281 self
.assertTrue(operator
.repeat(a
, 1) == a
)
282 self
.assertTrue(operator
.repeat(a
, 0) == ())
284 self
.assertTrue(operator
.repeat(a
, 2) == a
+a
)
285 self
.assertTrue(operator
.repeat(a
, 1) == a
)
286 self
.assertTrue(operator
.repeat(a
, 0) == '')
288 self
.assertTrue(operator
.repeat(a
, 2) == [4, 5, 6, 4, 5, 6])
289 self
.assertTrue(operator
.repeat(a
, 1) == [4, 5, 6])
290 self
.assertTrue(operator
.repeat(a
, 0) == [])
292 self
.assertTrue(operator
.repeat(a
, 2) == [4, 5, 6, 4, 5, 6])
293 self
.assertTrue(operator
.repeat(a
, 1) == [4, 5, 6])
294 self
.assertTrue(operator
.repeat(a
, 0) == [])
295 self
.assertRaises(TypeError, operator
.repeat
, 6, 7)
297 def test_rshift(self
):
298 self
.assertRaises(TypeError, operator
.rshift
)
299 self
.assertRaises(TypeError, operator
.rshift
, None, 42)
300 self
.assertTrue(operator
.rshift(5, 1) == 2)
301 self
.assertTrue(operator
.rshift(5, 0) == 5)
302 self
.assertRaises(ValueError, operator
.rshift
, 2, -1)
304 def test_contains(self
):
305 self
.assertRaises(TypeError, operator
.contains
)
306 self
.assertRaises(TypeError, operator
.contains
, None, None)
307 self
.assertTrue(operator
.contains(range(4), 2))
308 self
.assertFalse(operator
.contains(range(4), 5))
309 self
.assertTrue(operator
.sequenceIncludes(range(4), 2))
310 self
.assertFalse(operator
.sequenceIncludes(range(4), 5))
312 def test_setitem(self
):
314 self
.assertRaises(TypeError, operator
.setitem
, a
)
315 self
.assertRaises(TypeError, operator
.setitem
, a
, None, None)
316 self
.assertTrue(operator
.setitem(a
, 0, 2) is None)
317 self
.assertTrue(a
== [2, 1, 2])
318 self
.assertRaises(IndexError, operator
.setitem
, a
, 4, 2)
320 def test_setslice(self
):
322 self
.assertRaises(TypeError, operator
.setslice
, a
)
323 self
.assertRaises(TypeError, operator
.setslice
, a
, None, None, None)
324 self
.assertTrue(operator
.setslice(a
, 1, 3, [2, 1]) is None)
325 self
.assertTrue(a
== [0, 2, 1, 3])
326 operator
.setslice(a
, 0, test_support
.MAX_Py_ssize_t
, [])
327 self
.assertTrue(a
== [])
330 self
.assertRaises(TypeError, operator
.sub
)
331 self
.assertRaises(TypeError, operator
.sub
, None, None)
332 self
.assertTrue(operator
.sub(5, 2) == 3)
334 def test_truth(self
):
336 def __nonzero__(self
):
338 self
.assertRaises(TypeError, operator
.truth
)
339 self
.assertRaises(SyntaxError, operator
.truth
, C())
340 self
.assertTrue(operator
.truth(5))
341 self
.assertTrue(operator
.truth([0]))
342 self
.assertFalse(operator
.truth(0))
343 self
.assertFalse(operator
.truth([]))
345 def test_bitwise_xor(self
):
346 self
.assertRaises(TypeError, operator
.xor
)
347 self
.assertRaises(TypeError, operator
.xor
, None, None)
348 self
.assertTrue(operator
.xor(0xb, 0xc) == 0x7)
353 self
.assertRaises(TypeError, operator
.is_
)
354 self
.assertTrue(operator
.is_(a
, b
))
355 self
.assertFalse(operator
.is_(a
,c
))
357 def test_is_not(self
):
360 self
.assertRaises(TypeError, operator
.is_not
)
361 self
.assertFalse(operator
.is_not(a
, b
))
362 self
.assertTrue(operator
.is_not(a
,c
))
364 def test_attrgetter(self
):
369 f
= operator
.attrgetter('name')
370 self
.assertEqual(f(a
), 'arthur')
371 f
= operator
.attrgetter('rank')
372 self
.assertRaises(AttributeError, f
, a
)
373 f
= operator
.attrgetter(2)
374 self
.assertRaises(TypeError, f
, a
)
375 self
.assertRaises(TypeError, operator
.attrgetter
)
382 self
.assertEqual(operator
.attrgetter('x','z','y')(record
), ('X', 'Z', 'Y'))
383 self
.assertRaises(TypeError, operator
.attrgetter('x', (), 'y'), record
)
386 def __getattr__(self
, name
):
388 self
.assertRaises(SyntaxError, operator
.attrgetter('foo'), C())
394 a
.child
.name
= 'thomas'
395 f
= operator
.attrgetter('child.name')
396 self
.assertEqual(f(a
), 'thomas')
397 self
.assertRaises(AttributeError, f
, a
.child
)
398 f
= operator
.attrgetter('name', 'child.name')
399 self
.assertEqual(f(a
), ('arthur', 'thomas'))
400 f
= operator
.attrgetter('name', 'child.name', 'child.child.name')
401 self
.assertRaises(AttributeError, f
, a
)
404 a
.child
.child
.name
= 'johnson'
405 f
= operator
.attrgetter('child.child.name')
406 self
.assertEqual(f(a
), 'johnson')
407 f
= operator
.attrgetter('name', 'child.name', 'child.child.name')
408 self
.assertEqual(f(a
), ('arthur', 'thomas', 'johnson'))
410 def test_itemgetter(self
):
412 f
= operator
.itemgetter(2)
413 self
.assertEqual(f(a
), 'C')
414 f
= operator
.itemgetter(10)
415 self
.assertRaises(IndexError, f
, a
)
418 def __getitem__(self
, name
):
420 self
.assertRaises(SyntaxError, operator
.itemgetter(42), C())
422 f
= operator
.itemgetter('name')
423 self
.assertRaises(TypeError, f
, a
)
424 self
.assertRaises(TypeError, operator
.itemgetter
)
427 f
= operator
.itemgetter('key')
428 self
.assertEqual(f(d
), 'val')
429 f
= operator
.itemgetter('nonkey')
430 self
.assertRaises(KeyError, f
, d
)
432 # example used in the docs
433 inventory
= [('apple', 3), ('banana', 2), ('pear', 5), ('orange', 1)]
434 getcount
= operator
.itemgetter(1)
435 self
.assertEqual(map(getcount
, inventory
), [3, 2, 5, 1])
436 self
.assertEqual(sorted(inventory
, key
=getcount
),
437 [('orange', 1), ('banana', 2), ('apple', 3), ('pear', 5)])
440 data
= map(str, range(20))
441 self
.assertEqual(operator
.itemgetter(2,10,5)(data
), ('2', '10', '5'))
442 self
.assertRaises(TypeError, operator
.itemgetter(2, 'x', 5), data
)
444 def test_methodcaller(self
):
445 self
.assertRaises(TypeError, operator
.methodcaller
)
447 def foo(self
, *args
, **kwds
):
448 return args
[0] + args
[1]
452 f
= operator
.methodcaller('foo')
453 self
.assertRaises(IndexError, f
, a
)
454 f
= operator
.methodcaller('foo', 1, 2)
455 self
.assertEquals(f(a
), 3)
456 f
= operator
.methodcaller('bar')
457 self
.assertEquals(f(a
), 42)
458 self
.assertRaises(TypeError, f
, a
, a
)
459 f
= operator
.methodcaller('bar', f
=5)
460 self
.assertEquals(f(a
), 5)
462 def test_inplace(self
):
464 def __iadd__ (self
, other
): return "iadd"
465 def __iand__ (self
, other
): return "iand"
466 def __idiv__ (self
, other
): return "idiv"
467 def __ifloordiv__(self
, other
): return "ifloordiv"
468 def __ilshift__ (self
, other
): return "ilshift"
469 def __imod__ (self
, other
): return "imod"
470 def __imul__ (self
, other
): return "imul"
471 def __ior__ (self
, other
): return "ior"
472 def __ipow__ (self
, other
): return "ipow"
473 def __irshift__ (self
, other
): return "irshift"
474 def __isub__ (self
, other
): return "isub"
475 def __itruediv__ (self
, other
): return "itruediv"
476 def __ixor__ (self
, other
): return "ixor"
477 def __getitem__(self
, other
): return 5 # so that C is a sequence
479 self
.assertEqual(operator
.iadd (c
, 5), "iadd")
480 self
.assertEqual(operator
.iand (c
, 5), "iand")
481 self
.assertEqual(operator
.idiv (c
, 5), "idiv")
482 self
.assertEqual(operator
.ifloordiv(c
, 5), "ifloordiv")
483 self
.assertEqual(operator
.ilshift (c
, 5), "ilshift")
484 self
.assertEqual(operator
.imod (c
, 5), "imod")
485 self
.assertEqual(operator
.imul (c
, 5), "imul")
486 self
.assertEqual(operator
.ior (c
, 5), "ior")
487 self
.assertEqual(operator
.ipow (c
, 5), "ipow")
488 self
.assertEqual(operator
.irshift (c
, 5), "irshift")
489 self
.assertEqual(operator
.isub (c
, 5), "isub")
490 self
.assertEqual(operator
.itruediv (c
, 5), "itruediv")
491 self
.assertEqual(operator
.ixor (c
, 5), "ixor")
492 self
.assertEqual(operator
.iconcat (c
, c
), "iadd")
493 self
.assertEqual(operator
.irepeat (c
, 5), "imul")
494 self
.assertEqual(operator
.__iadd
__ (c
, 5), "iadd")
495 self
.assertEqual(operator
.__iand
__ (c
, 5), "iand")
496 self
.assertEqual(operator
.__idiv
__ (c
, 5), "idiv")
497 self
.assertEqual(operator
.__ifloordiv
__(c
, 5), "ifloordiv")
498 self
.assertEqual(operator
.__ilshift
__ (c
, 5), "ilshift")
499 self
.assertEqual(operator
.__imod
__ (c
, 5), "imod")
500 self
.assertEqual(operator
.__imul
__ (c
, 5), "imul")
501 self
.assertEqual(operator
.__ior
__ (c
, 5), "ior")
502 self
.assertEqual(operator
.__ipow
__ (c
, 5), "ipow")
503 self
.assertEqual(operator
.__irshift
__ (c
, 5), "irshift")
504 self
.assertEqual(operator
.__isub
__ (c
, 5), "isub")
505 self
.assertEqual(operator
.__itruediv
__ (c
, 5), "itruediv")
506 self
.assertEqual(operator
.__ixor
__ (c
, 5), "ixor")
507 self
.assertEqual(operator
.__iconcat
__ (c
, c
), "iadd")
508 self
.assertEqual(operator
.__irepeat
__ (c
, 5), "imul")
510 def test_main(verbose
=None):
516 test_support
.run_unittest(*test_classes
)
518 # verify reference counting
519 if verbose
and hasattr(sys
, "gettotalrefcount"):
522 for i
in xrange(len(counts
)):
523 test_support
.run_unittest(*test_classes
)
525 counts
[i
] = sys
.gettotalrefcount()
528 if __name__
== "__main__":
529 test_main(verbose
=True)