annotate Lib/test/test_operator.py @ 87690:66c1c9f32567 default tip

Add use_weakref option to functools.lru_cache The use_weakref option makes lru_cache create weak references to the function arguments when creating the cache key, which prevents them from staying in the memory forever even after all other references to them are gone. This is a proof of concept for http://bugs.python.org/issue19859
author Radomir Dopieralski <devel@sheep.art.pl>
date Tue, 03 Dec 2013 16:02:48 +0100
parents 97834382c6cc
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
19163
b160fa63f40c Added tests for rich comparison operator functions.
Fred Drake <fdrake@acm.org>
parents: 19112
diff changeset
1 import unittest
4777
50d6dc458aa2 Test of the operator module
Barry Warsaw <barry@python.org>
parents:
diff changeset
2
47201
9c930a32cebb #2621 rename test.test_support to test.support
Benjamin Peterson <benjamin@python.org>
parents: 45810
diff changeset
3 from test import support
4777
50d6dc458aa2 Test of the operator module
Barry Warsaw <barry@python.org>
parents:
diff changeset
4
83465
97834382c6cc Issue #16694: Add a pure Python implementation of the operator module.
Antoine Pitrou <solipsis@pitrou.net>
parents: 79511
diff changeset
5 py_operator = support.import_fresh_module('operator', blocked=['_operator'])
97834382c6cc Issue #16694: Add a pure Python implementation of the operator module.
Antoine Pitrou <solipsis@pitrou.net>
parents: 79511
diff changeset
6 c_operator = support.import_fresh_module('operator', fresh=['_operator'])
97834382c6cc Issue #16694: Add a pure Python implementation of the operator module.
Antoine Pitrou <solipsis@pitrou.net>
parents: 79511
diff changeset
7
36150
2eb78f5d1450 SF patch #1390657:
Armin Rigo <arigo@tunes.org>
parents: 34716
diff changeset
8 class Seq1:
2eb78f5d1450 SF patch #1390657:
Armin Rigo <arigo@tunes.org>
parents: 34716
diff changeset
9 def __init__(self, lst):
2eb78f5d1450 SF patch #1390657:
Armin Rigo <arigo@tunes.org>
parents: 34716
diff changeset
10 self.lst = lst
2eb78f5d1450 SF patch #1390657:
Armin Rigo <arigo@tunes.org>
parents: 34716
diff changeset
11 def __len__(self):
2eb78f5d1450 SF patch #1390657:
Armin Rigo <arigo@tunes.org>
parents: 34716
diff changeset
12 return len(self.lst)
2eb78f5d1450 SF patch #1390657:
Armin Rigo <arigo@tunes.org>
parents: 34716
diff changeset
13 def __getitem__(self, i):
2eb78f5d1450 SF patch #1390657:
Armin Rigo <arigo@tunes.org>
parents: 34716
diff changeset
14 return self.lst[i]
2eb78f5d1450 SF patch #1390657:
Armin Rigo <arigo@tunes.org>
parents: 34716
diff changeset
15 def __add__(self, other):
2eb78f5d1450 SF patch #1390657:
Armin Rigo <arigo@tunes.org>
parents: 34716
diff changeset
16 return self.lst + other.lst
2eb78f5d1450 SF patch #1390657:
Armin Rigo <arigo@tunes.org>
parents: 34716
diff changeset
17 def __mul__(self, other):
2eb78f5d1450 SF patch #1390657:
Armin Rigo <arigo@tunes.org>
parents: 34716
diff changeset
18 return self.lst * other
2eb78f5d1450 SF patch #1390657:
Armin Rigo <arigo@tunes.org>
parents: 34716
diff changeset
19 def __rmul__(self, other):
2eb78f5d1450 SF patch #1390657:
Armin Rigo <arigo@tunes.org>
parents: 34716
diff changeset
20 return other * self.lst
2eb78f5d1450 SF patch #1390657:
Armin Rigo <arigo@tunes.org>
parents: 34716
diff changeset
21
2eb78f5d1450 SF patch #1390657:
Armin Rigo <arigo@tunes.org>
parents: 34716
diff changeset
22 class Seq2(object):
2eb78f5d1450 SF patch #1390657:
Armin Rigo <arigo@tunes.org>
parents: 34716
diff changeset
23 def __init__(self, lst):
2eb78f5d1450 SF patch #1390657:
Armin Rigo <arigo@tunes.org>
parents: 34716
diff changeset
24 self.lst = lst
2eb78f5d1450 SF patch #1390657:
Armin Rigo <arigo@tunes.org>
parents: 34716
diff changeset
25 def __len__(self):
2eb78f5d1450 SF patch #1390657:
Armin Rigo <arigo@tunes.org>
parents: 34716
diff changeset
26 return len(self.lst)
2eb78f5d1450 SF patch #1390657:
Armin Rigo <arigo@tunes.org>
parents: 34716
diff changeset
27 def __getitem__(self, i):
2eb78f5d1450 SF patch #1390657:
Armin Rigo <arigo@tunes.org>
parents: 34716
diff changeset
28 return self.lst[i]
2eb78f5d1450 SF patch #1390657:
Armin Rigo <arigo@tunes.org>
parents: 34716
diff changeset
29 def __add__(self, other):
2eb78f5d1450 SF patch #1390657:
Armin Rigo <arigo@tunes.org>
parents: 34716
diff changeset
30 return self.lst + other.lst
2eb78f5d1450 SF patch #1390657:
Armin Rigo <arigo@tunes.org>
parents: 34716
diff changeset
31 def __mul__(self, other):
2eb78f5d1450 SF patch #1390657:
Armin Rigo <arigo@tunes.org>
parents: 34716
diff changeset
32 return self.lst * other
2eb78f5d1450 SF patch #1390657:
Armin Rigo <arigo@tunes.org>
parents: 34716
diff changeset
33 def __rmul__(self, other):
2eb78f5d1450 SF patch #1390657:
Armin Rigo <arigo@tunes.org>
parents: 34716
diff changeset
34 return other * self.lst
2eb78f5d1450 SF patch #1390657:
Armin Rigo <arigo@tunes.org>
parents: 34716
diff changeset
35
4777
50d6dc458aa2 Test of the operator module
Barry Warsaw <barry@python.org>
parents:
diff changeset
36
83465
97834382c6cc Issue #16694: Add a pure Python implementation of the operator module.
Antoine Pitrou <solipsis@pitrou.net>
parents: 79511
diff changeset
37 class OperatorTestCase:
19163
b160fa63f40c Added tests for rich comparison operator functions.
Fred Drake <fdrake@acm.org>
parents: 19112
diff changeset
38 def test_lt(self):
83465
97834382c6cc Issue #16694: Add a pure Python implementation of the operator module.
Antoine Pitrou <solipsis@pitrou.net>
parents: 79511
diff changeset
39 operator = self.module
55593
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 51064
diff changeset
40 self.assertRaises(TypeError, operator.lt)
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 51064
diff changeset
41 self.assertRaises(TypeError, operator.lt, 1j, 2j)
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 51064
diff changeset
42 self.assertFalse(operator.lt(1, 0))
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 51064
diff changeset
43 self.assertFalse(operator.lt(1, 0.0))
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 51064
diff changeset
44 self.assertFalse(operator.lt(1, 1))
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 51064
diff changeset
45 self.assertFalse(operator.lt(1, 1.0))
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 51064
diff changeset
46 self.assertTrue(operator.lt(1, 2))
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 51064
diff changeset
47 self.assertTrue(operator.lt(1, 2.0))
19163
b160fa63f40c Added tests for rich comparison operator functions.
Fred Drake <fdrake@acm.org>
parents: 19112
diff changeset
48
b160fa63f40c Added tests for rich comparison operator functions.
Fred Drake <fdrake@acm.org>
parents: 19112
diff changeset
49 def test_le(self):
83465
97834382c6cc Issue #16694: Add a pure Python implementation of the operator module.
Antoine Pitrou <solipsis@pitrou.net>
parents: 79511
diff changeset
50 operator = self.module
55593
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 51064
diff changeset
51 self.assertRaises(TypeError, operator.le)
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 51064
diff changeset
52 self.assertRaises(TypeError, operator.le, 1j, 2j)
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 51064
diff changeset
53 self.assertFalse(operator.le(1, 0))
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 51064
diff changeset
54 self.assertFalse(operator.le(1, 0.0))
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 51064
diff changeset
55 self.assertTrue(operator.le(1, 1))
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 51064
diff changeset
56 self.assertTrue(operator.le(1, 1.0))
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 51064
diff changeset
57 self.assertTrue(operator.le(1, 2))
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 51064
diff changeset
58 self.assertTrue(operator.le(1, 2.0))
19163
b160fa63f40c Added tests for rich comparison operator functions.
Fred Drake <fdrake@acm.org>
parents: 19112
diff changeset
59
b160fa63f40c Added tests for rich comparison operator functions.
Fred Drake <fdrake@acm.org>
parents: 19112
diff changeset
60 def test_eq(self):
83465
97834382c6cc Issue #16694: Add a pure Python implementation of the operator module.
Antoine Pitrou <solipsis@pitrou.net>
parents: 79511
diff changeset
61 operator = self.module
33877
a8c979cc4fa6 Add error checks for the bz2, cStringIO and operator modules.
Walter Dörwald <walter@livinglogic.de>
parents: 31210
diff changeset
62 class C(object):
a8c979cc4fa6 Add error checks for the bz2, cStringIO and operator modules.
Walter Dörwald <walter@livinglogic.de>
parents: 31210
diff changeset
63 def __eq__(self, other):
a8c979cc4fa6 Add error checks for the bz2, cStringIO and operator modules.
Walter Dörwald <walter@livinglogic.de>
parents: 31210
diff changeset
64 raise SyntaxError
55593
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 51064
diff changeset
65 self.assertRaises(TypeError, operator.eq)
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 51064
diff changeset
66 self.assertRaises(SyntaxError, operator.eq, C(), C())
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 51064
diff changeset
67 self.assertFalse(operator.eq(1, 0))
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 51064
diff changeset
68 self.assertFalse(operator.eq(1, 0.0))
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 51064
diff changeset
69 self.assertTrue(operator.eq(1, 1))
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 51064
diff changeset
70 self.assertTrue(operator.eq(1, 1.0))
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 51064
diff changeset
71 self.assertFalse(operator.eq(1, 2))
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 51064
diff changeset
72 self.assertFalse(operator.eq(1, 2.0))
19163
b160fa63f40c Added tests for rich comparison operator functions.
Fred Drake <fdrake@acm.org>
parents: 19112
diff changeset
73
b160fa63f40c Added tests for rich comparison operator functions.
Fred Drake <fdrake@acm.org>
parents: 19112
diff changeset
74 def test_ne(self):
83465
97834382c6cc Issue #16694: Add a pure Python implementation of the operator module.
Antoine Pitrou <solipsis@pitrou.net>
parents: 79511
diff changeset
75 operator = self.module
33877
a8c979cc4fa6 Add error checks for the bz2, cStringIO and operator modules.
Walter Dörwald <walter@livinglogic.de>
parents: 31210
diff changeset
76 class C(object):
a8c979cc4fa6 Add error checks for the bz2, cStringIO and operator modules.
Walter Dörwald <walter@livinglogic.de>
parents: 31210
diff changeset
77 def __ne__(self, other):
a8c979cc4fa6 Add error checks for the bz2, cStringIO and operator modules.
Walter Dörwald <walter@livinglogic.de>
parents: 31210
diff changeset
78 raise SyntaxError
55593
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 51064
diff changeset
79 self.assertRaises(TypeError, operator.ne)
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 51064
diff changeset
80 self.assertRaises(SyntaxError, operator.ne, C(), C())
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 51064
diff changeset
81 self.assertTrue(operator.ne(1, 0))
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 51064
diff changeset
82 self.assertTrue(operator.ne(1, 0.0))
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 51064
diff changeset
83 self.assertFalse(operator.ne(1, 1))
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 51064
diff changeset
84 self.assertFalse(operator.ne(1, 1.0))
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 51064
diff changeset
85 self.assertTrue(operator.ne(1, 2))
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 51064
diff changeset
86 self.assertTrue(operator.ne(1, 2.0))
19163
b160fa63f40c Added tests for rich comparison operator functions.
Fred Drake <fdrake@acm.org>
parents: 19112
diff changeset
87
b160fa63f40c Added tests for rich comparison operator functions.
Fred Drake <fdrake@acm.org>
parents: 19112
diff changeset
88 def test_ge(self):
83465
97834382c6cc Issue #16694: Add a pure Python implementation of the operator module.
Antoine Pitrou <solipsis@pitrou.net>
parents: 79511
diff changeset
89 operator = self.module
55593
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 51064
diff changeset
90 self.assertRaises(TypeError, operator.ge)
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 51064
diff changeset
91 self.assertRaises(TypeError, operator.ge, 1j, 2j)
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 51064
diff changeset
92 self.assertTrue(operator.ge(1, 0))
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 51064
diff changeset
93 self.assertTrue(operator.ge(1, 0.0))
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 51064
diff changeset
94 self.assertTrue(operator.ge(1, 1))
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 51064
diff changeset
95 self.assertTrue(operator.ge(1, 1.0))
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 51064
diff changeset
96 self.assertFalse(operator.ge(1, 2))
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 51064
diff changeset
97 self.assertFalse(operator.ge(1, 2.0))
19163
b160fa63f40c Added tests for rich comparison operator functions.
Fred Drake <fdrake@acm.org>
parents: 19112
diff changeset
98
b160fa63f40c Added tests for rich comparison operator functions.
Fred Drake <fdrake@acm.org>
parents: 19112
diff changeset
99 def test_gt(self):
83465
97834382c6cc Issue #16694: Add a pure Python implementation of the operator module.
Antoine Pitrou <solipsis@pitrou.net>
parents: 79511
diff changeset
100 operator = self.module
55593
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 51064
diff changeset
101 self.assertRaises(TypeError, operator.gt)
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 51064
diff changeset
102 self.assertRaises(TypeError, operator.gt, 1j, 2j)
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 51064
diff changeset
103 self.assertTrue(operator.gt(1, 0))
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 51064
diff changeset
104 self.assertTrue(operator.gt(1, 0.0))
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 51064
diff changeset
105 self.assertFalse(operator.gt(1, 1))
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 51064
diff changeset
106 self.assertFalse(operator.gt(1, 1.0))
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 51064
diff changeset
107 self.assertFalse(operator.gt(1, 2))
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 51064
diff changeset
108 self.assertFalse(operator.gt(1, 2.0))
19163
b160fa63f40c Added tests for rich comparison operator functions.
Fred Drake <fdrake@acm.org>
parents: 19112
diff changeset
109
b160fa63f40c Added tests for rich comparison operator functions.
Fred Drake <fdrake@acm.org>
parents: 19112
diff changeset
110 def test_abs(self):
83465
97834382c6cc Issue #16694: Add a pure Python implementation of the operator module.
Antoine Pitrou <solipsis@pitrou.net>
parents: 79511
diff changeset
111 operator = self.module
55593
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 51064
diff changeset
112 self.assertRaises(TypeError, operator.abs)
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 51064
diff changeset
113 self.assertRaises(TypeError, operator.abs, None)
42188
81930eaae715 Patch by Christian Heimes to change self.assert_(x == y) into
Guido van Rossum <guido@python.org>
parents: 42142
diff changeset
114 self.assertEqual(operator.abs(-1), 1)
81930eaae715 Patch by Christian Heimes to change self.assert_(x == y) into
Guido van Rossum <guido@python.org>
parents: 42142
diff changeset
115 self.assertEqual(operator.abs(1), 1)
19163
b160fa63f40c Added tests for rich comparison operator functions.
Fred Drake <fdrake@acm.org>
parents: 19112
diff changeset
116
b160fa63f40c Added tests for rich comparison operator functions.
Fred Drake <fdrake@acm.org>
parents: 19112
diff changeset
117 def test_add(self):
83465
97834382c6cc Issue #16694: Add a pure Python implementation of the operator module.
Antoine Pitrou <solipsis@pitrou.net>
parents: 79511
diff changeset
118 operator = self.module
55593
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 51064
diff changeset
119 self.assertRaises(TypeError, operator.add)
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 51064
diff changeset
120 self.assertRaises(TypeError, operator.add, None, None)
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 51064
diff changeset
121 self.assertTrue(operator.add(3, 4) == 7)
19163
b160fa63f40c Added tests for rich comparison operator functions.
Fred Drake <fdrake@acm.org>
parents: 19112
diff changeset
122
b160fa63f40c Added tests for rich comparison operator functions.
Fred Drake <fdrake@acm.org>
parents: 19112
diff changeset
123 def test_bitwise_and(self):
83465
97834382c6cc Issue #16694: Add a pure Python implementation of the operator module.
Antoine Pitrou <solipsis@pitrou.net>
parents: 79511
diff changeset
124 operator = self.module
55593
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 51064
diff changeset
125 self.assertRaises(TypeError, operator.and_)
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 51064
diff changeset
126 self.assertRaises(TypeError, operator.and_, None, None)
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 51064
diff changeset
127 self.assertTrue(operator.and_(0xf, 0xa) == 0xa)
19163
b160fa63f40c Added tests for rich comparison operator functions.
Fred Drake <fdrake@acm.org>
parents: 19112
diff changeset
128
b160fa63f40c Added tests for rich comparison operator functions.
Fred Drake <fdrake@acm.org>
parents: 19112
diff changeset
129 def test_concat(self):
83465
97834382c6cc Issue #16694: Add a pure Python implementation of the operator module.
Antoine Pitrou <solipsis@pitrou.net>
parents: 79511
diff changeset
130 operator = self.module
55593
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 51064
diff changeset
131 self.assertRaises(TypeError, operator.concat)
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 51064
diff changeset
132 self.assertRaises(TypeError, operator.concat, None, None)
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 51064
diff changeset
133 self.assertTrue(operator.concat('py', 'thon') == 'python')
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 51064
diff changeset
134 self.assertTrue(operator.concat([1, 2], [3, 4]) == [1, 2, 3, 4])
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 51064
diff changeset
135 self.assertTrue(operator.concat(Seq1([5, 6]), Seq1([7])) == [5, 6, 7])
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 51064
diff changeset
136 self.assertTrue(operator.concat(Seq2([5, 6]), Seq2([7])) == [5, 6, 7])
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 51064
diff changeset
137 self.assertRaises(TypeError, operator.concat, 13, 29)
19163
b160fa63f40c Added tests for rich comparison operator functions.
Fred Drake <fdrake@acm.org>
parents: 19112
diff changeset
138
b160fa63f40c Added tests for rich comparison operator functions.
Fred Drake <fdrake@acm.org>
parents: 19112
diff changeset
139 def test_countOf(self):
83465
97834382c6cc Issue #16694: Add a pure Python implementation of the operator module.
Antoine Pitrou <solipsis@pitrou.net>
parents: 79511
diff changeset
140 operator = self.module
55593
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 51064
diff changeset
141 self.assertRaises(TypeError, operator.countOf)
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 51064
diff changeset
142 self.assertRaises(TypeError, operator.countOf, None, None)
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 51064
diff changeset
143 self.assertTrue(operator.countOf([1, 2, 1, 3, 1, 4], 3) == 1)
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 51064
diff changeset
144 self.assertTrue(operator.countOf([1, 2, 1, 3, 1, 4], 5) == 0)
19163
b160fa63f40c Added tests for rich comparison operator functions.
Fred Drake <fdrake@acm.org>
parents: 19112
diff changeset
145
b160fa63f40c Added tests for rich comparison operator functions.
Fred Drake <fdrake@acm.org>
parents: 19112
diff changeset
146 def test_delitem(self):
83465
97834382c6cc Issue #16694: Add a pure Python implementation of the operator module.
Antoine Pitrou <solipsis@pitrou.net>
parents: 79511
diff changeset
147 operator = self.module
19163
b160fa63f40c Added tests for rich comparison operator functions.
Fred Drake <fdrake@acm.org>
parents: 19112
diff changeset
148 a = [4, 3, 2, 1]
55593
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 51064
diff changeset
149 self.assertRaises(TypeError, operator.delitem, a)
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 51064
diff changeset
150 self.assertRaises(TypeError, operator.delitem, a, None)
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 51064
diff changeset
151 self.assertTrue(operator.delitem(a, 1) is None)
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 51064
diff changeset
152 self.assertTrue(a == [4, 2, 1])
19163
b160fa63f40c Added tests for rich comparison operator functions.
Fred Drake <fdrake@acm.org>
parents: 19112
diff changeset
153
b160fa63f40c Added tests for rich comparison operator functions.
Fred Drake <fdrake@acm.org>
parents: 19112
diff changeset
154 def test_floordiv(self):
83465
97834382c6cc Issue #16694: Add a pure Python implementation of the operator module.
Antoine Pitrou <solipsis@pitrou.net>
parents: 79511
diff changeset
155 operator = self.module
55593
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 51064
diff changeset
156 self.assertRaises(TypeError, operator.floordiv, 5)
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 51064
diff changeset
157 self.assertRaises(TypeError, operator.floordiv, None, None)
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 51064
diff changeset
158 self.assertTrue(operator.floordiv(5, 2) == 2)
19163
b160fa63f40c Added tests for rich comparison operator functions.
Fred Drake <fdrake@acm.org>
parents: 19112
diff changeset
159
b160fa63f40c Added tests for rich comparison operator functions.
Fred Drake <fdrake@acm.org>
parents: 19112
diff changeset
160 def test_truediv(self):
83465
97834382c6cc Issue #16694: Add a pure Python implementation of the operator module.
Antoine Pitrou <solipsis@pitrou.net>
parents: 79511
diff changeset
161 operator = self.module
55593
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 51064
diff changeset
162 self.assertRaises(TypeError, operator.truediv, 5)
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 51064
diff changeset
163 self.assertRaises(TypeError, operator.truediv, None, None)
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 51064
diff changeset
164 self.assertTrue(operator.truediv(5, 2) == 2.5)
19163
b160fa63f40c Added tests for rich comparison operator functions.
Fred Drake <fdrake@acm.org>
parents: 19112
diff changeset
165
b160fa63f40c Added tests for rich comparison operator functions.
Fred Drake <fdrake@acm.org>
parents: 19112
diff changeset
166 def test_getitem(self):
83465
97834382c6cc Issue #16694: Add a pure Python implementation of the operator module.
Antoine Pitrou <solipsis@pitrou.net>
parents: 79511
diff changeset
167 operator = self.module
19163
b160fa63f40c Added tests for rich comparison operator functions.
Fred Drake <fdrake@acm.org>
parents: 19112
diff changeset
168 a = range(10)
55593
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 51064
diff changeset
169 self.assertRaises(TypeError, operator.getitem)
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 51064
diff changeset
170 self.assertRaises(TypeError, operator.getitem, a, None)
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 51064
diff changeset
171 self.assertTrue(operator.getitem(a, 2) == 2)
19163
b160fa63f40c Added tests for rich comparison operator functions.
Fred Drake <fdrake@acm.org>
parents: 19112
diff changeset
172
b160fa63f40c Added tests for rich comparison operator functions.
Fred Drake <fdrake@acm.org>
parents: 19112
diff changeset
173 def test_indexOf(self):
83465
97834382c6cc Issue #16694: Add a pure Python implementation of the operator module.
Antoine Pitrou <solipsis@pitrou.net>
parents: 79511
diff changeset
174 operator = self.module
55593
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 51064
diff changeset
175 self.assertRaises(TypeError, operator.indexOf)
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 51064
diff changeset
176 self.assertRaises(TypeError, operator.indexOf, None, None)
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 51064
diff changeset
177 self.assertTrue(operator.indexOf([4, 3, 2, 1], 3) == 1)
19163
b160fa63f40c Added tests for rich comparison operator functions.
Fred Drake <fdrake@acm.org>
parents: 19112
diff changeset
178 self.assertRaises(ValueError, operator.indexOf, [4, 3, 2, 1], 0)
b160fa63f40c Added tests for rich comparison operator functions.
Fred Drake <fdrake@acm.org>
parents: 19112
diff changeset
179
b160fa63f40c Added tests for rich comparison operator functions.
Fred Drake <fdrake@acm.org>
parents: 19112
diff changeset
180 def test_invert(self):
83465
97834382c6cc Issue #16694: Add a pure Python implementation of the operator module.
Antoine Pitrou <solipsis@pitrou.net>
parents: 79511
diff changeset
181 operator = self.module
55593
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 51064
diff changeset
182 self.assertRaises(TypeError, operator.invert)
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 51064
diff changeset
183 self.assertRaises(TypeError, operator.invert, None)
42188
81930eaae715 Patch by Christian Heimes to change self.assert_(x == y) into
Guido van Rossum <guido@python.org>
parents: 42142
diff changeset
184 self.assertEqual(operator.inv(4), -5)
19163
b160fa63f40c Added tests for rich comparison operator functions.
Fred Drake <fdrake@acm.org>
parents: 19112
diff changeset
185
b160fa63f40c Added tests for rich comparison operator functions.
Fred Drake <fdrake@acm.org>
parents: 19112
diff changeset
186 def test_lshift(self):
83465
97834382c6cc Issue #16694: Add a pure Python implementation of the operator module.
Antoine Pitrou <solipsis@pitrou.net>
parents: 79511
diff changeset
187 operator = self.module
55593
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 51064
diff changeset
188 self.assertRaises(TypeError, operator.lshift)
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 51064
diff changeset
189 self.assertRaises(TypeError, operator.lshift, None, 42)
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 51064
diff changeset
190 self.assertTrue(operator.lshift(5, 1) == 10)
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 51064
diff changeset
191 self.assertTrue(operator.lshift(5, 0) == 5)
19163
b160fa63f40c Added tests for rich comparison operator functions.
Fred Drake <fdrake@acm.org>
parents: 19112
diff changeset
192 self.assertRaises(ValueError, operator.lshift, 2, -1)
b160fa63f40c Added tests for rich comparison operator functions.
Fred Drake <fdrake@acm.org>
parents: 19112
diff changeset
193
b160fa63f40c Added tests for rich comparison operator functions.
Fred Drake <fdrake@acm.org>
parents: 19112
diff changeset
194 def test_mod(self):
83465
97834382c6cc Issue #16694: Add a pure Python implementation of the operator module.
Antoine Pitrou <solipsis@pitrou.net>
parents: 79511
diff changeset
195 operator = self.module
55593
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 51064
diff changeset
196 self.assertRaises(TypeError, operator.mod)
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 51064
diff changeset
197 self.assertRaises(TypeError, operator.mod, None, 42)
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 51064
diff changeset
198 self.assertTrue(operator.mod(5, 2) == 1)
19163
b160fa63f40c Added tests for rich comparison operator functions.
Fred Drake <fdrake@acm.org>
parents: 19112
diff changeset
199
b160fa63f40c Added tests for rich comparison operator functions.
Fred Drake <fdrake@acm.org>
parents: 19112
diff changeset
200 def test_mul(self):
83465
97834382c6cc Issue #16694: Add a pure Python implementation of the operator module.
Antoine Pitrou <solipsis@pitrou.net>
parents: 79511
diff changeset
201 operator = self.module
55593
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 51064
diff changeset
202 self.assertRaises(TypeError, operator.mul)
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 51064
diff changeset
203 self.assertRaises(TypeError, operator.mul, None, None)
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 51064
diff changeset
204 self.assertTrue(operator.mul(5, 2) == 10)
19163
b160fa63f40c Added tests for rich comparison operator functions.
Fred Drake <fdrake@acm.org>
parents: 19112
diff changeset
205
b160fa63f40c Added tests for rich comparison operator functions.
Fred Drake <fdrake@acm.org>
parents: 19112
diff changeset
206 def test_neg(self):
83465
97834382c6cc Issue #16694: Add a pure Python implementation of the operator module.
Antoine Pitrou <solipsis@pitrou.net>
parents: 79511
diff changeset
207 operator = self.module
55593
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 51064
diff changeset
208 self.assertRaises(TypeError, operator.neg)
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 51064
diff changeset
209 self.assertRaises(TypeError, operator.neg, None)
42188
81930eaae715 Patch by Christian Heimes to change self.assert_(x == y) into
Guido van Rossum <guido@python.org>
parents: 42142
diff changeset
210 self.assertEqual(operator.neg(5), -5)
81930eaae715 Patch by Christian Heimes to change self.assert_(x == y) into
Guido van Rossum <guido@python.org>
parents: 42142
diff changeset
211 self.assertEqual(operator.neg(-5), 5)
81930eaae715 Patch by Christian Heimes to change self.assert_(x == y) into
Guido van Rossum <guido@python.org>
parents: 42142
diff changeset
212 self.assertEqual(operator.neg(0), 0)
81930eaae715 Patch by Christian Heimes to change self.assert_(x == y) into
Guido van Rossum <guido@python.org>
parents: 42142
diff changeset
213 self.assertEqual(operator.neg(-0), 0)
19163
b160fa63f40c Added tests for rich comparison operator functions.
Fred Drake <fdrake@acm.org>
parents: 19112
diff changeset
214
b160fa63f40c Added tests for rich comparison operator functions.
Fred Drake <fdrake@acm.org>
parents: 19112
diff changeset
215 def test_bitwise_or(self):
83465
97834382c6cc Issue #16694: Add a pure Python implementation of the operator module.
Antoine Pitrou <solipsis@pitrou.net>
parents: 79511
diff changeset
216 operator = self.module
55593
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 51064
diff changeset
217 self.assertRaises(TypeError, operator.or_)
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 51064
diff changeset
218 self.assertRaises(TypeError, operator.or_, None, None)
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 51064
diff changeset
219 self.assertTrue(operator.or_(0xa, 0x5) == 0xf)
19163
b160fa63f40c Added tests for rich comparison operator functions.
Fred Drake <fdrake@acm.org>
parents: 19112
diff changeset
220
b160fa63f40c Added tests for rich comparison operator functions.
Fred Drake <fdrake@acm.org>
parents: 19112
diff changeset
221 def test_pos(self):
83465
97834382c6cc Issue #16694: Add a pure Python implementation of the operator module.
Antoine Pitrou <solipsis@pitrou.net>
parents: 79511
diff changeset
222 operator = self.module
55593
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 51064
diff changeset
223 self.assertRaises(TypeError, operator.pos)
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 51064
diff changeset
224 self.assertRaises(TypeError, operator.pos, None)
42188
81930eaae715 Patch by Christian Heimes to change self.assert_(x == y) into
Guido van Rossum <guido@python.org>
parents: 42142
diff changeset
225 self.assertEqual(operator.pos(5), 5)
81930eaae715 Patch by Christian Heimes to change self.assert_(x == y) into
Guido van Rossum <guido@python.org>
parents: 42142
diff changeset
226 self.assertEqual(operator.pos(-5), -5)
81930eaae715 Patch by Christian Heimes to change self.assert_(x == y) into
Guido van Rossum <guido@python.org>
parents: 42142
diff changeset
227 self.assertEqual(operator.pos(0), 0)
81930eaae715 Patch by Christian Heimes to change self.assert_(x == y) into
Guido van Rossum <guido@python.org>
parents: 42142
diff changeset
228 self.assertEqual(operator.pos(-0), 0)
19163
b160fa63f40c Added tests for rich comparison operator functions.
Fred Drake <fdrake@acm.org>
parents: 19112
diff changeset
229
24887
d797cfa8ca0d Added __pow__(a,b) to the operator module. Completes the pattern of
Raymond Hettinger <python@rcn.com>
parents: 24364
diff changeset
230 def test_pow(self):
83465
97834382c6cc Issue #16694: Add a pure Python implementation of the operator module.
Antoine Pitrou <solipsis@pitrou.net>
parents: 79511
diff changeset
231 operator = self.module
55593
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 51064
diff changeset
232 self.assertRaises(TypeError, operator.pow)
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 51064
diff changeset
233 self.assertRaises(TypeError, operator.pow, None, None)
42188
81930eaae715 Patch by Christian Heimes to change self.assert_(x == y) into
Guido van Rossum <guido@python.org>
parents: 42142
diff changeset
234 self.assertEqual(operator.pow(3,5), 3**5)
24887
d797cfa8ca0d Added __pow__(a,b) to the operator module. Completes the pattern of
Raymond Hettinger <python@rcn.com>
parents: 24364
diff changeset
235 self.assertRaises(TypeError, operator.pow, 1)
d797cfa8ca0d Added __pow__(a,b) to the operator module. Completes the pattern of
Raymond Hettinger <python@rcn.com>
parents: 24364
diff changeset
236 self.assertRaises(TypeError, operator.pow, 1, 2, 3)
d797cfa8ca0d Added __pow__(a,b) to the operator module. Completes the pattern of
Raymond Hettinger <python@rcn.com>
parents: 24364
diff changeset
237
19163
b160fa63f40c Added tests for rich comparison operator functions.
Fred Drake <fdrake@acm.org>
parents: 19112
diff changeset
238 def test_rshift(self):
83465
97834382c6cc Issue #16694: Add a pure Python implementation of the operator module.
Antoine Pitrou <solipsis@pitrou.net>
parents: 79511
diff changeset
239 operator = self.module
55593
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 51064
diff changeset
240 self.assertRaises(TypeError, operator.rshift)
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 51064
diff changeset
241 self.assertRaises(TypeError, operator.rshift, None, 42)
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 51064
diff changeset
242 self.assertTrue(operator.rshift(5, 1) == 2)
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 51064
diff changeset
243 self.assertTrue(operator.rshift(5, 0) == 5)
19163
b160fa63f40c Added tests for rich comparison operator functions.
Fred Drake <fdrake@acm.org>
parents: 19112
diff changeset
244 self.assertRaises(ValueError, operator.rshift, 2, -1)
b160fa63f40c Added tests for rich comparison operator functions.
Fred Drake <fdrake@acm.org>
parents: 19112
diff changeset
245
b160fa63f40c Added tests for rich comparison operator functions.
Fred Drake <fdrake@acm.org>
parents: 19112
diff changeset
246 def test_contains(self):
83465
97834382c6cc Issue #16694: Add a pure Python implementation of the operator module.
Antoine Pitrou <solipsis@pitrou.net>
parents: 79511
diff changeset
247 operator = self.module
55593
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 51064
diff changeset
248 self.assertRaises(TypeError, operator.contains)
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 51064
diff changeset
249 self.assertRaises(TypeError, operator.contains, None, None)
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 51064
diff changeset
250 self.assertTrue(operator.contains(range(4), 2))
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 51064
diff changeset
251 self.assertFalse(operator.contains(range(4), 5))
19163
b160fa63f40c Added tests for rich comparison operator functions.
Fred Drake <fdrake@acm.org>
parents: 19112
diff changeset
252
b160fa63f40c Added tests for rich comparison operator functions.
Fred Drake <fdrake@acm.org>
parents: 19112
diff changeset
253 def test_setitem(self):
83465
97834382c6cc Issue #16694: Add a pure Python implementation of the operator module.
Antoine Pitrou <solipsis@pitrou.net>
parents: 79511
diff changeset
254 operator = self.module
41642
a6eb6acfe04a Merged revisions 55007-55179 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41554
diff changeset
255 a = list(range(3))
55593
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 51064
diff changeset
256 self.assertRaises(TypeError, operator.setitem, a)
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 51064
diff changeset
257 self.assertRaises(TypeError, operator.setitem, a, None, None)
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 51064
diff changeset
258 self.assertTrue(operator.setitem(a, 0, 2) is None)
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 51064
diff changeset
259 self.assertTrue(a == [2, 1, 2])
19163
b160fa63f40c Added tests for rich comparison operator functions.
Fred Drake <fdrake@acm.org>
parents: 19112
diff changeset
260 self.assertRaises(IndexError, operator.setitem, a, 4, 2)
b160fa63f40c Added tests for rich comparison operator functions.
Fred Drake <fdrake@acm.org>
parents: 19112
diff changeset
261
b160fa63f40c Added tests for rich comparison operator functions.
Fred Drake <fdrake@acm.org>
parents: 19112
diff changeset
262 def test_sub(self):
83465
97834382c6cc Issue #16694: Add a pure Python implementation of the operator module.
Antoine Pitrou <solipsis@pitrou.net>
parents: 79511
diff changeset
263 operator = self.module
55593
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 51064
diff changeset
264 self.assertRaises(TypeError, operator.sub)
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 51064
diff changeset
265 self.assertRaises(TypeError, operator.sub, None, None)
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 51064
diff changeset
266 self.assertTrue(operator.sub(5, 2) == 3)
19163
b160fa63f40c Added tests for rich comparison operator functions.
Fred Drake <fdrake@acm.org>
parents: 19112
diff changeset
267
b160fa63f40c Added tests for rich comparison operator functions.
Fred Drake <fdrake@acm.org>
parents: 19112
diff changeset
268 def test_truth(self):
83465
97834382c6cc Issue #16694: Add a pure Python implementation of the operator module.
Antoine Pitrou <solipsis@pitrou.net>
parents: 79511
diff changeset
269 operator = self.module
33877
a8c979cc4fa6 Add error checks for the bz2, cStringIO and operator modules.
Walter Dörwald <walter@livinglogic.de>
parents: 31210
diff changeset
270 class C(object):
40401
88133417dfd0 - patch #1600346 submitted by Tomer Filiba
Jack Diederich <jackdied@gmail.com>
parents: 37191
diff changeset
271 def __bool__(self):
33877
a8c979cc4fa6 Add error checks for the bz2, cStringIO and operator modules.
Walter Dörwald <walter@livinglogic.de>
parents: 31210
diff changeset
272 raise SyntaxError
55593
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 51064
diff changeset
273 self.assertRaises(TypeError, operator.truth)
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 51064
diff changeset
274 self.assertRaises(SyntaxError, operator.truth, C())
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 51064
diff changeset
275 self.assertTrue(operator.truth(5))
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 51064
diff changeset
276 self.assertTrue(operator.truth([0]))
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 51064
diff changeset
277 self.assertFalse(operator.truth(0))
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 51064
diff changeset
278 self.assertFalse(operator.truth([]))
19163
b160fa63f40c Added tests for rich comparison operator functions.
Fred Drake <fdrake@acm.org>
parents: 19112
diff changeset
279
b160fa63f40c Added tests for rich comparison operator functions.
Fred Drake <fdrake@acm.org>
parents: 19112
diff changeset
280 def test_bitwise_xor(self):
83465
97834382c6cc Issue #16694: Add a pure Python implementation of the operator module.
Antoine Pitrou <solipsis@pitrou.net>
parents: 79511
diff changeset
281 operator = self.module
55593
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 51064
diff changeset
282 self.assertRaises(TypeError, operator.xor)
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 51064
diff changeset
283 self.assertRaises(TypeError, operator.xor, None, None)
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 51064
diff changeset
284 self.assertTrue(operator.xor(0xb, 0xc) == 0x7)
19163
b160fa63f40c Added tests for rich comparison operator functions.
Fred Drake <fdrake@acm.org>
parents: 19112
diff changeset
285
27290
e83a42a90df1 SF patch #670423: Add missing identity tests to operator.c
Raymond Hettinger <python@rcn.com>
parents: 24887
diff changeset
286 def test_is(self):
83465
97834382c6cc Issue #16694: Add a pure Python implementation of the operator module.
Antoine Pitrou <solipsis@pitrou.net>
parents: 79511
diff changeset
287 operator = self.module
27290
e83a42a90df1 SF patch #670423: Add missing identity tests to operator.c
Raymond Hettinger <python@rcn.com>
parents: 24887
diff changeset
288 a = b = 'xyzpdq'
e83a42a90df1 SF patch #670423: Add missing identity tests to operator.c
Raymond Hettinger <python@rcn.com>
parents: 24887
diff changeset
289 c = a[:3] + b[3:]
55593
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 51064
diff changeset
290 self.assertRaises(TypeError, operator.is_)
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 51064
diff changeset
291 self.assertTrue(operator.is_(a, b))
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 51064
diff changeset
292 self.assertFalse(operator.is_(a,c))
27290
e83a42a90df1 SF patch #670423: Add missing identity tests to operator.c
Raymond Hettinger <python@rcn.com>
parents: 24887
diff changeset
293
e83a42a90df1 SF patch #670423: Add missing identity tests to operator.c
Raymond Hettinger <python@rcn.com>
parents: 24887
diff changeset
294 def test_is_not(self):
83465
97834382c6cc Issue #16694: Add a pure Python implementation of the operator module.
Antoine Pitrou <solipsis@pitrou.net>
parents: 79511
diff changeset
295 operator = self.module
27290
e83a42a90df1 SF patch #670423: Add missing identity tests to operator.c
Raymond Hettinger <python@rcn.com>
parents: 24887
diff changeset
296 a = b = 'xyzpdq'
e83a42a90df1 SF patch #670423: Add missing identity tests to operator.c
Raymond Hettinger <python@rcn.com>
parents: 24887
diff changeset
297 c = a[:3] + b[3:]
55593
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 51064
diff changeset
298 self.assertRaises(TypeError, operator.is_not)
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 51064
diff changeset
299 self.assertFalse(operator.is_not(a, b))
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 51064
diff changeset
300 self.assertTrue(operator.is_not(a,c))
19163
b160fa63f40c Added tests for rich comparison operator functions.
Fred Drake <fdrake@acm.org>
parents: 19112
diff changeset
301
31052
456e274f8602 As discussed on python-dev, added two extractor functions to the
Raymond Hettinger <python@rcn.com>
parents: 27290
diff changeset
302 def test_attrgetter(self):
83465
97834382c6cc Issue #16694: Add a pure Python implementation of the operator module.
Antoine Pitrou <solipsis@pitrou.net>
parents: 79511
diff changeset
303 operator = self.module
31052
456e274f8602 As discussed on python-dev, added two extractor functions to the
Raymond Hettinger <python@rcn.com>
parents: 27290
diff changeset
304 class A:
456e274f8602 As discussed on python-dev, added two extractor functions to the
Raymond Hettinger <python@rcn.com>
parents: 27290
diff changeset
305 pass
456e274f8602 As discussed on python-dev, added two extractor functions to the
Raymond Hettinger <python@rcn.com>
parents: 27290
diff changeset
306 a = A()
456e274f8602 As discussed on python-dev, added two extractor functions to the
Raymond Hettinger <python@rcn.com>
parents: 27290
diff changeset
307 a.name = 'arthur'
456e274f8602 As discussed on python-dev, added two extractor functions to the
Raymond Hettinger <python@rcn.com>
parents: 27290
diff changeset
308 f = operator.attrgetter('name')
456e274f8602 As discussed on python-dev, added two extractor functions to the
Raymond Hettinger <python@rcn.com>
parents: 27290
diff changeset
309 self.assertEqual(f(a), 'arthur')
456e274f8602 As discussed on python-dev, added two extractor functions to the
Raymond Hettinger <python@rcn.com>
parents: 27290
diff changeset
310 f = operator.attrgetter('rank')
456e274f8602 As discussed on python-dev, added two extractor functions to the
Raymond Hettinger <python@rcn.com>
parents: 27290
diff changeset
311 self.assertRaises(AttributeError, f, a)
65818
4127ab1f6338 Issue #10160: Speed up operator.attrgetter. Patch by Christos Georgiou.
Antoine Pitrou <solipsis@pitrou.net>
parents: 55593
diff changeset
312 self.assertRaises(TypeError, operator.attrgetter, 2)
31052
456e274f8602 As discussed on python-dev, added two extractor functions to the
Raymond Hettinger <python@rcn.com>
parents: 27290
diff changeset
313 self.assertRaises(TypeError, operator.attrgetter)
34716
ddc2276c247e operator.itemgetter() and operator.attrgetter() now support extraction
Raymond Hettinger <python@rcn.com>
parents: 33877
diff changeset
314
ddc2276c247e operator.itemgetter() and operator.attrgetter() now support extraction
Raymond Hettinger <python@rcn.com>
parents: 33877
diff changeset
315 # multiple gets
ddc2276c247e operator.itemgetter() and operator.attrgetter() now support extraction
Raymond Hettinger <python@rcn.com>
parents: 33877
diff changeset
316 record = A()
ddc2276c247e operator.itemgetter() and operator.attrgetter() now support extraction
Raymond Hettinger <python@rcn.com>
parents: 33877
diff changeset
317 record.x = 'X'
ddc2276c247e operator.itemgetter() and operator.attrgetter() now support extraction
Raymond Hettinger <python@rcn.com>
parents: 33877
diff changeset
318 record.y = 'Y'
ddc2276c247e operator.itemgetter() and operator.attrgetter() now support extraction
Raymond Hettinger <python@rcn.com>
parents: 33877
diff changeset
319 record.z = 'Z'
ddc2276c247e operator.itemgetter() and operator.attrgetter() now support extraction
Raymond Hettinger <python@rcn.com>
parents: 33877
diff changeset
320 self.assertEqual(operator.attrgetter('x','z','y')(record), ('X', 'Z', 'Y'))
65818
4127ab1f6338 Issue #10160: Speed up operator.attrgetter. Patch by Christos Georgiou.
Antoine Pitrou <solipsis@pitrou.net>
parents: 55593
diff changeset
321 self.assertRaises(TypeError, operator.attrgetter, ('x', (), 'y'))
31052
456e274f8602 As discussed on python-dev, added two extractor functions to the
Raymond Hettinger <python@rcn.com>
parents: 27290
diff changeset
322
33877
a8c979cc4fa6 Add error checks for the bz2, cStringIO and operator modules.
Walter Dörwald <walter@livinglogic.de>
parents: 31210
diff changeset
323 class C(object):
44828
ef7d72d98485 Merged revisions 60124-60142 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 42188
diff changeset
324 def __getattr__(self, name):
33877
a8c979cc4fa6 Add error checks for the bz2, cStringIO and operator modules.
Walter Dörwald <walter@livinglogic.de>
parents: 31210
diff changeset
325 raise SyntaxError
55593
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 51064
diff changeset
326 self.assertRaises(SyntaxError, operator.attrgetter('foo'), C())
33877
a8c979cc4fa6 Add error checks for the bz2, cStringIO and operator modules.
Walter Dörwald <walter@livinglogic.de>
parents: 31210
diff changeset
327
45495
48488fa50729 Merged revisions 61003-61033 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44828
diff changeset
328 # recursive gets
48488fa50729 Merged revisions 61003-61033 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44828
diff changeset
329 a = A()
48488fa50729 Merged revisions 61003-61033 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44828
diff changeset
330 a.name = 'arthur'
48488fa50729 Merged revisions 61003-61033 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44828
diff changeset
331 a.child = A()
48488fa50729 Merged revisions 61003-61033 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44828
diff changeset
332 a.child.name = 'thomas'
48488fa50729 Merged revisions 61003-61033 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44828
diff changeset
333 f = operator.attrgetter('child.name')
48488fa50729 Merged revisions 61003-61033 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44828
diff changeset
334 self.assertEqual(f(a), 'thomas')
48488fa50729 Merged revisions 61003-61033 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44828
diff changeset
335 self.assertRaises(AttributeError, f, a.child)
48488fa50729 Merged revisions 61003-61033 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44828
diff changeset
336 f = operator.attrgetter('name', 'child.name')
48488fa50729 Merged revisions 61003-61033 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44828
diff changeset
337 self.assertEqual(f(a), ('arthur', 'thomas'))
48488fa50729 Merged revisions 61003-61033 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44828
diff changeset
338 f = operator.attrgetter('name', 'child.name', 'child.child.name')
48488fa50729 Merged revisions 61003-61033 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44828
diff changeset
339 self.assertRaises(AttributeError, f, a)
65818
4127ab1f6338 Issue #10160: Speed up operator.attrgetter. Patch by Christos Georgiou.
Antoine Pitrou <solipsis@pitrou.net>
parents: 55593
diff changeset
340 f = operator.attrgetter('child.')
4127ab1f6338 Issue #10160: Speed up operator.attrgetter. Patch by Christos Georgiou.
Antoine Pitrou <solipsis@pitrou.net>
parents: 55593
diff changeset
341 self.assertRaises(AttributeError, f, a)
4127ab1f6338 Issue #10160: Speed up operator.attrgetter. Patch by Christos Georgiou.
Antoine Pitrou <solipsis@pitrou.net>
parents: 55593
diff changeset
342 f = operator.attrgetter('.child')
4127ab1f6338 Issue #10160: Speed up operator.attrgetter. Patch by Christos Georgiou.
Antoine Pitrou <solipsis@pitrou.net>
parents: 55593
diff changeset
343 self.assertRaises(AttributeError, f, a)
45495
48488fa50729 Merged revisions 61003-61033 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44828
diff changeset
344
48488fa50729 Merged revisions 61003-61033 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44828
diff changeset
345 a.child.child = A()
48488fa50729 Merged revisions 61003-61033 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44828
diff changeset
346 a.child.child.name = 'johnson'
48488fa50729 Merged revisions 61003-61033 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44828
diff changeset
347 f = operator.attrgetter('child.child.name')
48488fa50729 Merged revisions 61003-61033 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44828
diff changeset
348 self.assertEqual(f(a), 'johnson')
48488fa50729 Merged revisions 61003-61033 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44828
diff changeset
349 f = operator.attrgetter('name', 'child.name', 'child.child.name')
48488fa50729 Merged revisions 61003-61033 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44828
diff changeset
350 self.assertEqual(f(a), ('arthur', 'thomas', 'johnson'))
48488fa50729 Merged revisions 61003-61033 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44828
diff changeset
351
31052
456e274f8602 As discussed on python-dev, added two extractor functions to the
Raymond Hettinger <python@rcn.com>
parents: 27290
diff changeset
352 def test_itemgetter(self):
83465
97834382c6cc Issue #16694: Add a pure Python implementation of the operator module.
Antoine Pitrou <solipsis@pitrou.net>
parents: 79511
diff changeset
353 operator = self.module
31052
456e274f8602 As discussed on python-dev, added two extractor functions to the
Raymond Hettinger <python@rcn.com>
parents: 27290
diff changeset
354 a = 'ABCDE'
456e274f8602 As discussed on python-dev, added two extractor functions to the
Raymond Hettinger <python@rcn.com>
parents: 27290
diff changeset
355 f = operator.itemgetter(2)
456e274f8602 As discussed on python-dev, added two extractor functions to the
Raymond Hettinger <python@rcn.com>
parents: 27290
diff changeset
356 self.assertEqual(f(a), 'C')
456e274f8602 As discussed on python-dev, added two extractor functions to the
Raymond Hettinger <python@rcn.com>
parents: 27290
diff changeset
357 f = operator.itemgetter(10)
456e274f8602 As discussed on python-dev, added two extractor functions to the
Raymond Hettinger <python@rcn.com>
parents: 27290
diff changeset
358 self.assertRaises(IndexError, f, a)
456e274f8602 As discussed on python-dev, added two extractor functions to the
Raymond Hettinger <python@rcn.com>
parents: 27290
diff changeset
359
33877
a8c979cc4fa6 Add error checks for the bz2, cStringIO and operator modules.
Walter Dörwald <walter@livinglogic.de>
parents: 31210
diff changeset
360 class C(object):
44828
ef7d72d98485 Merged revisions 60124-60142 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 42188
diff changeset
361 def __getitem__(self, name):
33877
a8c979cc4fa6 Add error checks for the bz2, cStringIO and operator modules.
Walter Dörwald <walter@livinglogic.de>
parents: 31210
diff changeset
362 raise SyntaxError
55593
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 51064
diff changeset
363 self.assertRaises(SyntaxError, operator.itemgetter(42), C())
33877
a8c979cc4fa6 Add error checks for the bz2, cStringIO and operator modules.
Walter Dörwald <walter@livinglogic.de>
parents: 31210
diff changeset
364
31052
456e274f8602 As discussed on python-dev, added two extractor functions to the
Raymond Hettinger <python@rcn.com>
parents: 27290
diff changeset
365 f = operator.itemgetter('name')
456e274f8602 As discussed on python-dev, added two extractor functions to the
Raymond Hettinger <python@rcn.com>
parents: 27290
diff changeset
366 self.assertRaises(TypeError, f, a)
456e274f8602 As discussed on python-dev, added two extractor functions to the
Raymond Hettinger <python@rcn.com>
parents: 27290
diff changeset
367 self.assertRaises(TypeError, operator.itemgetter)
456e274f8602 As discussed on python-dev, added two extractor functions to the
Raymond Hettinger <python@rcn.com>
parents: 27290
diff changeset
368
456e274f8602 As discussed on python-dev, added two extractor functions to the
Raymond Hettinger <python@rcn.com>
parents: 27290
diff changeset
369 d = dict(key='val')
456e274f8602 As discussed on python-dev, added two extractor functions to the
Raymond Hettinger <python@rcn.com>
parents: 27290
diff changeset
370 f = operator.itemgetter('key')
456e274f8602 As discussed on python-dev, added two extractor functions to the
Raymond Hettinger <python@rcn.com>
parents: 27290
diff changeset
371 self.assertEqual(f(d), 'val')
456e274f8602 As discussed on python-dev, added two extractor functions to the
Raymond Hettinger <python@rcn.com>
parents: 27290
diff changeset
372 f = operator.itemgetter('nonkey')
456e274f8602 As discussed on python-dev, added two extractor functions to the
Raymond Hettinger <python@rcn.com>
parents: 27290
diff changeset
373 self.assertRaises(KeyError, f, d)
456e274f8602 As discussed on python-dev, added two extractor functions to the
Raymond Hettinger <python@rcn.com>
parents: 27290
diff changeset
374
456e274f8602 As discussed on python-dev, added two extractor functions to the
Raymond Hettinger <python@rcn.com>
parents: 27290
diff changeset
375 # example used in the docs
456e274f8602 As discussed on python-dev, added two extractor functions to the
Raymond Hettinger <python@rcn.com>
parents: 27290
diff changeset
376 inventory = [('apple', 3), ('banana', 2), ('pear', 5), ('orange', 1)]
456e274f8602 As discussed on python-dev, added two extractor functions to the
Raymond Hettinger <python@rcn.com>
parents: 27290
diff changeset
377 getcount = operator.itemgetter(1)
42142
a53e48be6df9 Merged revisions 56125-56153 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41642
diff changeset
378 self.assertEqual(list(map(getcount, inventory)), [3, 2, 5, 1])
31210
c06b570adf12 Guido grants a Christmas wish:
Raymond Hettinger <python@rcn.com>
parents: 31052
diff changeset
379 self.assertEqual(sorted(inventory, key=getcount),
31052
456e274f8602 As discussed on python-dev, added two extractor functions to the
Raymond Hettinger <python@rcn.com>
parents: 27290
diff changeset
380 [('orange', 1), ('banana', 2), ('apple', 3), ('pear', 5)])
456e274f8602 As discussed on python-dev, added two extractor functions to the
Raymond Hettinger <python@rcn.com>
parents: 27290
diff changeset
381
34716
ddc2276c247e operator.itemgetter() and operator.attrgetter() now support extraction
Raymond Hettinger <python@rcn.com>
parents: 33877
diff changeset
382 # multiple gets
42142
a53e48be6df9 Merged revisions 56125-56153 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41642
diff changeset
383 data = list(map(str, range(20)))
34716
ddc2276c247e operator.itemgetter() and operator.attrgetter() now support extraction
Raymond Hettinger <python@rcn.com>
parents: 33877
diff changeset
384 self.assertEqual(operator.itemgetter(2,10,5)(data), ('2', '10', '5'))
ddc2276c247e operator.itemgetter() and operator.attrgetter() now support extraction
Raymond Hettinger <python@rcn.com>
parents: 33877
diff changeset
385 self.assertRaises(TypeError, operator.itemgetter(2, 'x', 5), data)
20013
e3184e46303b Change the PyUnit-based tests to use the test_main() approach. This
Fred Drake <fdrake@acm.org>
parents: 19694
diff changeset
386
45495
48488fa50729 Merged revisions 61003-61033 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44828
diff changeset
387 def test_methodcaller(self):
83465
97834382c6cc Issue #16694: Add a pure Python implementation of the operator module.
Antoine Pitrou <solipsis@pitrou.net>
parents: 79511
diff changeset
388 operator = self.module
45495
48488fa50729 Merged revisions 61003-61033 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44828
diff changeset
389 self.assertRaises(TypeError, operator.methodcaller)
48488fa50729 Merged revisions 61003-61033 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44828
diff changeset
390 class A:
48488fa50729 Merged revisions 61003-61033 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44828
diff changeset
391 def foo(self, *args, **kwds):
48488fa50729 Merged revisions 61003-61033 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44828
diff changeset
392 return args[0] + args[1]
48488fa50729 Merged revisions 61003-61033 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44828
diff changeset
393 def bar(self, f=42):
48488fa50729 Merged revisions 61003-61033 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44828
diff changeset
394 return f
83465
97834382c6cc Issue #16694: Add a pure Python implementation of the operator module.
Antoine Pitrou <solipsis@pitrou.net>
parents: 79511
diff changeset
395 def baz(*args, **kwds):
97834382c6cc Issue #16694: Add a pure Python implementation of the operator module.
Antoine Pitrou <solipsis@pitrou.net>
parents: 79511
diff changeset
396 return kwds['name'], kwds['self']
45495
48488fa50729 Merged revisions 61003-61033 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44828
diff changeset
397 a = A()
48488fa50729 Merged revisions 61003-61033 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44828
diff changeset
398 f = operator.methodcaller('foo')
48488fa50729 Merged revisions 61003-61033 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44828
diff changeset
399 self.assertRaises(IndexError, f, a)
48488fa50729 Merged revisions 61003-61033 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44828
diff changeset
400 f = operator.methodcaller('foo', 1, 2)
66340
2beb25369289 Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents: 55593
diff changeset
401 self.assertEqual(f(a), 3)
45495
48488fa50729 Merged revisions 61003-61033 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44828
diff changeset
402 f = operator.methodcaller('bar')
66340
2beb25369289 Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents: 55593
diff changeset
403 self.assertEqual(f(a), 42)
45495
48488fa50729 Merged revisions 61003-61033 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44828
diff changeset
404 self.assertRaises(TypeError, f, a, a)
48488fa50729 Merged revisions 61003-61033 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44828
diff changeset
405 f = operator.methodcaller('bar', f=5)
66340
2beb25369289 Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents: 55593
diff changeset
406 self.assertEqual(f(a), 5)
83465
97834382c6cc Issue #16694: Add a pure Python implementation of the operator module.
Antoine Pitrou <solipsis@pitrou.net>
parents: 79511
diff changeset
407 f = operator.methodcaller('baz', name='spam', self='eggs')
97834382c6cc Issue #16694: Add a pure Python implementation of the operator module.
Antoine Pitrou <solipsis@pitrou.net>
parents: 79511
diff changeset
408 self.assertEqual(f(a), ('spam', 'eggs'))
45495
48488fa50729 Merged revisions 61003-61033 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44828
diff changeset
409
36152
f9281283b109 adding in-place operators to the operator module.
Armin Rigo <arigo@tunes.org>
parents: 36150
diff changeset
410 def test_inplace(self):
83465
97834382c6cc Issue #16694: Add a pure Python implementation of the operator module.
Antoine Pitrou <solipsis@pitrou.net>
parents: 79511
diff changeset
411 operator = self.module
36152
f9281283b109 adding in-place operators to the operator module.
Armin Rigo <arigo@tunes.org>
parents: 36150
diff changeset
412 class C(object):
f9281283b109 adding in-place operators to the operator module.
Armin Rigo <arigo@tunes.org>
parents: 36150
diff changeset
413 def __iadd__ (self, other): return "iadd"
f9281283b109 adding in-place operators to the operator module.
Armin Rigo <arigo@tunes.org>
parents: 36150
diff changeset
414 def __iand__ (self, other): return "iand"
f9281283b109 adding in-place operators to the operator module.
Armin Rigo <arigo@tunes.org>
parents: 36150
diff changeset
415 def __ifloordiv__(self, other): return "ifloordiv"
f9281283b109 adding in-place operators to the operator module.
Armin Rigo <arigo@tunes.org>
parents: 36150
diff changeset
416 def __ilshift__ (self, other): return "ilshift"
f9281283b109 adding in-place operators to the operator module.
Armin Rigo <arigo@tunes.org>
parents: 36150
diff changeset
417 def __imod__ (self, other): return "imod"
f9281283b109 adding in-place operators to the operator module.
Armin Rigo <arigo@tunes.org>
parents: 36150
diff changeset
418 def __imul__ (self, other): return "imul"
f9281283b109 adding in-place operators to the operator module.
Armin Rigo <arigo@tunes.org>
parents: 36150
diff changeset
419 def __ior__ (self, other): return "ior"
f9281283b109 adding in-place operators to the operator module.
Armin Rigo <arigo@tunes.org>
parents: 36150
diff changeset
420 def __ipow__ (self, other): return "ipow"
f9281283b109 adding in-place operators to the operator module.
Armin Rigo <arigo@tunes.org>
parents: 36150
diff changeset
421 def __irshift__ (self, other): return "irshift"
f9281283b109 adding in-place operators to the operator module.
Armin Rigo <arigo@tunes.org>
parents: 36150
diff changeset
422 def __isub__ (self, other): return "isub"
f9281283b109 adding in-place operators to the operator module.
Armin Rigo <arigo@tunes.org>
parents: 36150
diff changeset
423 def __itruediv__ (self, other): return "itruediv"
f9281283b109 adding in-place operators to the operator module.
Armin Rigo <arigo@tunes.org>
parents: 36150
diff changeset
424 def __ixor__ (self, other): return "ixor"
f9281283b109 adding in-place operators to the operator module.
Armin Rigo <arigo@tunes.org>
parents: 36150
diff changeset
425 def __getitem__(self, other): return 5 # so that C is a sequence
f9281283b109 adding in-place operators to the operator module.
Armin Rigo <arigo@tunes.org>
parents: 36150
diff changeset
426 c = C()
f9281283b109 adding in-place operators to the operator module.
Armin Rigo <arigo@tunes.org>
parents: 36150
diff changeset
427 self.assertEqual(operator.iadd (c, 5), "iadd")
f9281283b109 adding in-place operators to the operator module.
Armin Rigo <arigo@tunes.org>
parents: 36150
diff changeset
428 self.assertEqual(operator.iand (c, 5), "iand")
f9281283b109 adding in-place operators to the operator module.
Armin Rigo <arigo@tunes.org>
parents: 36150
diff changeset
429 self.assertEqual(operator.ifloordiv(c, 5), "ifloordiv")
f9281283b109 adding in-place operators to the operator module.
Armin Rigo <arigo@tunes.org>
parents: 36150
diff changeset
430 self.assertEqual(operator.ilshift (c, 5), "ilshift")
f9281283b109 adding in-place operators to the operator module.
Armin Rigo <arigo@tunes.org>
parents: 36150
diff changeset
431 self.assertEqual(operator.imod (c, 5), "imod")
f9281283b109 adding in-place operators to the operator module.
Armin Rigo <arigo@tunes.org>
parents: 36150
diff changeset
432 self.assertEqual(operator.imul (c, 5), "imul")
f9281283b109 adding in-place operators to the operator module.
Armin Rigo <arigo@tunes.org>
parents: 36150
diff changeset
433 self.assertEqual(operator.ior (c, 5), "ior")
f9281283b109 adding in-place operators to the operator module.
Armin Rigo <arigo@tunes.org>
parents: 36150
diff changeset
434 self.assertEqual(operator.ipow (c, 5), "ipow")
f9281283b109 adding in-place operators to the operator module.
Armin Rigo <arigo@tunes.org>
parents: 36150
diff changeset
435 self.assertEqual(operator.irshift (c, 5), "irshift")
f9281283b109 adding in-place operators to the operator module.
Armin Rigo <arigo@tunes.org>
parents: 36150
diff changeset
436 self.assertEqual(operator.isub (c, 5), "isub")
f9281283b109 adding in-place operators to the operator module.
Armin Rigo <arigo@tunes.org>
parents: 36150
diff changeset
437 self.assertEqual(operator.itruediv (c, 5), "itruediv")
f9281283b109 adding in-place operators to the operator module.
Armin Rigo <arigo@tunes.org>
parents: 36150
diff changeset
438 self.assertEqual(operator.ixor (c, 5), "ixor")
f9281283b109 adding in-place operators to the operator module.
Armin Rigo <arigo@tunes.org>
parents: 36150
diff changeset
439 self.assertEqual(operator.iconcat (c, c), "iadd")
20013
e3184e46303b Change the PyUnit-based tests to use the test_main() approach. This
Fred Drake <fdrake@acm.org>
parents: 19694
diff changeset
440
79511
a7ec0a1b0f7c Issue #16148: implemented PEP 424
Armin Ronacher <armin.ronacher@active-4.com>
parents: 68257
diff changeset
441 def test_length_hint(self):
83465
97834382c6cc Issue #16694: Add a pure Python implementation of the operator module.
Antoine Pitrou <solipsis@pitrou.net>
parents: 79511
diff changeset
442 operator = self.module
79511
a7ec0a1b0f7c Issue #16148: implemented PEP 424
Armin Ronacher <armin.ronacher@active-4.com>
parents: 68257
diff changeset
443 class X(object):
a7ec0a1b0f7c Issue #16148: implemented PEP 424
Armin Ronacher <armin.ronacher@active-4.com>
parents: 68257
diff changeset
444 def __init__(self, value):
a7ec0a1b0f7c Issue #16148: implemented PEP 424
Armin Ronacher <armin.ronacher@active-4.com>
parents: 68257
diff changeset
445 self.value = value
a7ec0a1b0f7c Issue #16148: implemented PEP 424
Armin Ronacher <armin.ronacher@active-4.com>
parents: 68257
diff changeset
446
a7ec0a1b0f7c Issue #16148: implemented PEP 424
Armin Ronacher <armin.ronacher@active-4.com>
parents: 68257
diff changeset
447 def __length_hint__(self):
a7ec0a1b0f7c Issue #16148: implemented PEP 424
Armin Ronacher <armin.ronacher@active-4.com>
parents: 68257
diff changeset
448 if type(self.value) is type:
a7ec0a1b0f7c Issue #16148: implemented PEP 424
Armin Ronacher <armin.ronacher@active-4.com>
parents: 68257
diff changeset
449 raise self.value
a7ec0a1b0f7c Issue #16148: implemented PEP 424
Armin Ronacher <armin.ronacher@active-4.com>
parents: 68257
diff changeset
450 else:
a7ec0a1b0f7c Issue #16148: implemented PEP 424
Armin Ronacher <armin.ronacher@active-4.com>
parents: 68257
diff changeset
451 return self.value
a7ec0a1b0f7c Issue #16148: implemented PEP 424
Armin Ronacher <armin.ronacher@active-4.com>
parents: 68257
diff changeset
452
a7ec0a1b0f7c Issue #16148: implemented PEP 424
Armin Ronacher <armin.ronacher@active-4.com>
parents: 68257
diff changeset
453 self.assertEqual(operator.length_hint([], 2), 0)
a7ec0a1b0f7c Issue #16148: implemented PEP 424
Armin Ronacher <armin.ronacher@active-4.com>
parents: 68257
diff changeset
454 self.assertEqual(operator.length_hint(iter([1, 2, 3])), 3)
a7ec0a1b0f7c Issue #16148: implemented PEP 424
Armin Ronacher <armin.ronacher@active-4.com>
parents: 68257
diff changeset
455
a7ec0a1b0f7c Issue #16148: implemented PEP 424
Armin Ronacher <armin.ronacher@active-4.com>
parents: 68257
diff changeset
456 self.assertEqual(operator.length_hint(X(2)), 2)
a7ec0a1b0f7c Issue #16148: implemented PEP 424
Armin Ronacher <armin.ronacher@active-4.com>
parents: 68257
diff changeset
457 self.assertEqual(operator.length_hint(X(NotImplemented), 4), 4)
a7ec0a1b0f7c Issue #16148: implemented PEP 424
Armin Ronacher <armin.ronacher@active-4.com>
parents: 68257
diff changeset
458 self.assertEqual(operator.length_hint(X(TypeError), 12), 12)
a7ec0a1b0f7c Issue #16148: implemented PEP 424
Armin Ronacher <armin.ronacher@active-4.com>
parents: 68257
diff changeset
459 with self.assertRaises(TypeError):
a7ec0a1b0f7c Issue #16148: implemented PEP 424
Armin Ronacher <armin.ronacher@active-4.com>
parents: 68257
diff changeset
460 operator.length_hint(X("abc"))
a7ec0a1b0f7c Issue #16148: implemented PEP 424
Armin Ronacher <armin.ronacher@active-4.com>
parents: 68257
diff changeset
461 with self.assertRaises(ValueError):
a7ec0a1b0f7c Issue #16148: implemented PEP 424
Armin Ronacher <armin.ronacher@active-4.com>
parents: 68257
diff changeset
462 operator.length_hint(X(-2))
a7ec0a1b0f7c Issue #16148: implemented PEP 424
Armin Ronacher <armin.ronacher@active-4.com>
parents: 68257
diff changeset
463 with self.assertRaises(LookupError):
a7ec0a1b0f7c Issue #16148: implemented PEP 424
Armin Ronacher <armin.ronacher@active-4.com>
parents: 68257
diff changeset
464 operator.length_hint(X(LookupError))
a7ec0a1b0f7c Issue #16148: implemented PEP 424
Armin Ronacher <armin.ronacher@active-4.com>
parents: 68257
diff changeset
465
83465
97834382c6cc Issue #16694: Add a pure Python implementation of the operator module.
Antoine Pitrou <solipsis@pitrou.net>
parents: 79511
diff changeset
466 def test_dunder_is_original(self):
97834382c6cc Issue #16694: Add a pure Python implementation of the operator module.
Antoine Pitrou <solipsis@pitrou.net>
parents: 79511
diff changeset
467 operator = self.module
34716
ddc2276c247e operator.itemgetter() and operator.attrgetter() now support extraction
Raymond Hettinger <python@rcn.com>
parents: 33877
diff changeset
468
83465
97834382c6cc Issue #16694: Add a pure Python implementation of the operator module.
Antoine Pitrou <solipsis@pitrou.net>
parents: 79511
diff changeset
469 names = [name for name in dir(operator) if not name.startswith('_')]
97834382c6cc Issue #16694: Add a pure Python implementation of the operator module.
Antoine Pitrou <solipsis@pitrou.net>
parents: 79511
diff changeset
470 for name in names:
97834382c6cc Issue #16694: Add a pure Python implementation of the operator module.
Antoine Pitrou <solipsis@pitrou.net>
parents: 79511
diff changeset
471 orig = getattr(operator, name)
97834382c6cc Issue #16694: Add a pure Python implementation of the operator module.
Antoine Pitrou <solipsis@pitrou.net>
parents: 79511
diff changeset
472 dunder = getattr(operator, '__' + name.strip('_') + '__', None)
97834382c6cc Issue #16694: Add a pure Python implementation of the operator module.
Antoine Pitrou <solipsis@pitrou.net>
parents: 79511
diff changeset
473 if dunder:
97834382c6cc Issue #16694: Add a pure Python implementation of the operator module.
Antoine Pitrou <solipsis@pitrou.net>
parents: 79511
diff changeset
474 self.assertIs(dunder, orig)
97834382c6cc Issue #16694: Add a pure Python implementation of the operator module.
Antoine Pitrou <solipsis@pitrou.net>
parents: 79511
diff changeset
475
97834382c6cc Issue #16694: Add a pure Python implementation of the operator module.
Antoine Pitrou <solipsis@pitrou.net>
parents: 79511
diff changeset
476 class PyOperatorTestCase(OperatorTestCase, unittest.TestCase):
97834382c6cc Issue #16694: Add a pure Python implementation of the operator module.
Antoine Pitrou <solipsis@pitrou.net>
parents: 79511
diff changeset
477 module = py_operator
97834382c6cc Issue #16694: Add a pure Python implementation of the operator module.
Antoine Pitrou <solipsis@pitrou.net>
parents: 79511
diff changeset
478
97834382c6cc Issue #16694: Add a pure Python implementation of the operator module.
Antoine Pitrou <solipsis@pitrou.net>
parents: 79511
diff changeset
479 @unittest.skipUnless(c_operator, 'requires _operator')
97834382c6cc Issue #16694: Add a pure Python implementation of the operator module.
Antoine Pitrou <solipsis@pitrou.net>
parents: 79511
diff changeset
480 class COperatorTestCase(OperatorTestCase, unittest.TestCase):
97834382c6cc Issue #16694: Add a pure Python implementation of the operator module.
Antoine Pitrou <solipsis@pitrou.net>
parents: 79511
diff changeset
481 module = c_operator
34716
ddc2276c247e operator.itemgetter() and operator.attrgetter() now support extraction
Raymond Hettinger <python@rcn.com>
parents: 33877
diff changeset
482
20013
e3184e46303b Change the PyUnit-based tests to use the test_main() approach. This
Fred Drake <fdrake@acm.org>
parents: 19694
diff changeset
483 if __name__ == "__main__":
83465
97834382c6cc Issue #16694: Add a pure Python implementation of the operator module.
Antoine Pitrou <solipsis@pitrou.net>
parents: 79511
diff changeset
484 unittest.main()