test_operator.py revision 9bd667ad030913ead3a789f45e73c26f9f28fb46
1a09ec19a332de34de493b2c4da2b89b46fadc370Barry Warsawimport operator
2cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drakeimport unittest
3cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake
404f357cffef6d764f2f0ff2671dabde75ec250d1Barry Warsawfrom test import test_support
5cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake
6fd163f92cee2aa8189879bd43670782f4cfd2cf8Armin Rigoclass Seq1:
7fd163f92cee2aa8189879bd43670782f4cfd2cf8Armin Rigo    def __init__(self, lst):
8fd163f92cee2aa8189879bd43670782f4cfd2cf8Armin Rigo        self.lst = lst
9fd163f92cee2aa8189879bd43670782f4cfd2cf8Armin Rigo    def __len__(self):
10fd163f92cee2aa8189879bd43670782f4cfd2cf8Armin Rigo        return len(self.lst)
11fd163f92cee2aa8189879bd43670782f4cfd2cf8Armin Rigo    def __getitem__(self, i):
12fd163f92cee2aa8189879bd43670782f4cfd2cf8Armin Rigo        return self.lst[i]
13fd163f92cee2aa8189879bd43670782f4cfd2cf8Armin Rigo    def __add__(self, other):
14fd163f92cee2aa8189879bd43670782f4cfd2cf8Armin Rigo        return self.lst + other.lst
15fd163f92cee2aa8189879bd43670782f4cfd2cf8Armin Rigo    def __mul__(self, other):
16fd163f92cee2aa8189879bd43670782f4cfd2cf8Armin Rigo        return self.lst * other
17fd163f92cee2aa8189879bd43670782f4cfd2cf8Armin Rigo    def __rmul__(self, other):
18fd163f92cee2aa8189879bd43670782f4cfd2cf8Armin Rigo        return other * self.lst
19fd163f92cee2aa8189879bd43670782f4cfd2cf8Armin Rigo
20fd163f92cee2aa8189879bd43670782f4cfd2cf8Armin Rigoclass Seq2(object):
21fd163f92cee2aa8189879bd43670782f4cfd2cf8Armin Rigo    def __init__(self, lst):
22fd163f92cee2aa8189879bd43670782f4cfd2cf8Armin Rigo        self.lst = lst
23fd163f92cee2aa8189879bd43670782f4cfd2cf8Armin Rigo    def __len__(self):
24fd163f92cee2aa8189879bd43670782f4cfd2cf8Armin Rigo        return len(self.lst)
25fd163f92cee2aa8189879bd43670782f4cfd2cf8Armin Rigo    def __getitem__(self, i):
26fd163f92cee2aa8189879bd43670782f4cfd2cf8Armin Rigo        return self.lst[i]
27fd163f92cee2aa8189879bd43670782f4cfd2cf8Armin Rigo    def __add__(self, other):
28fd163f92cee2aa8189879bd43670782f4cfd2cf8Armin Rigo        return self.lst + other.lst
29fd163f92cee2aa8189879bd43670782f4cfd2cf8Armin Rigo    def __mul__(self, other):
30fd163f92cee2aa8189879bd43670782f4cfd2cf8Armin Rigo        return self.lst * other
31fd163f92cee2aa8189879bd43670782f4cfd2cf8Armin Rigo    def __rmul__(self, other):
32fd163f92cee2aa8189879bd43670782f4cfd2cf8Armin Rigo        return other * self.lst
33fd163f92cee2aa8189879bd43670782f4cfd2cf8Armin Rigo
34cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake
35cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drakeclass OperatorTestCase(unittest.TestCase):
36cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake    def test_lt(self):
37bb9c739806b9f0251fa4a564986e2cb5e92e766eWalter Dörwald        self.failUnlessRaises(TypeError, operator.lt)
38bb9c739806b9f0251fa4a564986e2cb5e92e766eWalter Dörwald        self.failUnlessRaises(TypeError, operator.lt, 1j, 2j)
39cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake        self.failIf(operator.lt(1, 0))
40cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake        self.failIf(operator.lt(1, 0.0))
41cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake        self.failIf(operator.lt(1, 1))
42cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake        self.failIf(operator.lt(1, 1.0))
43cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake        self.failUnless(operator.lt(1, 2))
44cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake        self.failUnless(operator.lt(1, 2.0))
45cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake
46cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake    def test_le(self):
47bb9c739806b9f0251fa4a564986e2cb5e92e766eWalter Dörwald        self.failUnlessRaises(TypeError, operator.le)
48bb9c739806b9f0251fa4a564986e2cb5e92e766eWalter Dörwald        self.failUnlessRaises(TypeError, operator.le, 1j, 2j)
49cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake        self.failIf(operator.le(1, 0))
50cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake        self.failIf(operator.le(1, 0.0))
51cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake        self.failUnless(operator.le(1, 1))
52cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake        self.failUnless(operator.le(1, 1.0))
53cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake        self.failUnless(operator.le(1, 2))
54cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake        self.failUnless(operator.le(1, 2.0))
55cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake
56cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake    def test_eq(self):
57bb9c739806b9f0251fa4a564986e2cb5e92e766eWalter Dörwald        class C(object):
58bb9c739806b9f0251fa4a564986e2cb5e92e766eWalter Dörwald            def __eq__(self, other):
59bb9c739806b9f0251fa4a564986e2cb5e92e766eWalter Dörwald                raise SyntaxError
60bb9c739806b9f0251fa4a564986e2cb5e92e766eWalter Dörwald        self.failUnlessRaises(TypeError, operator.eq)
61bb9c739806b9f0251fa4a564986e2cb5e92e766eWalter Dörwald        self.failUnlessRaises(SyntaxError, operator.eq, C(), C())
62cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake        self.failIf(operator.eq(1, 0))
63cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake        self.failIf(operator.eq(1, 0.0))
64cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake        self.failUnless(operator.eq(1, 1))
65cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake        self.failUnless(operator.eq(1, 1.0))
66cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake        self.failIf(operator.eq(1, 2))
67cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake        self.failIf(operator.eq(1, 2.0))
68cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake
69cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake    def test_ne(self):
70bb9c739806b9f0251fa4a564986e2cb5e92e766eWalter Dörwald        class C(object):
71bb9c739806b9f0251fa4a564986e2cb5e92e766eWalter Dörwald            def __ne__(self, other):
72bb9c739806b9f0251fa4a564986e2cb5e92e766eWalter Dörwald                raise SyntaxError
73bb9c739806b9f0251fa4a564986e2cb5e92e766eWalter Dörwald        self.failUnlessRaises(TypeError, operator.ne)
74bb9c739806b9f0251fa4a564986e2cb5e92e766eWalter Dörwald        self.failUnlessRaises(SyntaxError, operator.ne, C(), C())
75cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake        self.failUnless(operator.ne(1, 0))
76cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake        self.failUnless(operator.ne(1, 0.0))
77cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake        self.failIf(operator.ne(1, 1))
78cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake        self.failIf(operator.ne(1, 1.0))
79cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake        self.failUnless(operator.ne(1, 2))
80cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake        self.failUnless(operator.ne(1, 2.0))
81cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake
82cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake    def test_ge(self):
83bb9c739806b9f0251fa4a564986e2cb5e92e766eWalter Dörwald        self.failUnlessRaises(TypeError, operator.ge)
84bb9c739806b9f0251fa4a564986e2cb5e92e766eWalter Dörwald        self.failUnlessRaises(TypeError, operator.ge, 1j, 2j)
85cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake        self.failUnless(operator.ge(1, 0))
86cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake        self.failUnless(operator.ge(1, 0.0))
87cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake        self.failUnless(operator.ge(1, 1))
88cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake        self.failUnless(operator.ge(1, 1.0))
89cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake        self.failIf(operator.ge(1, 2))
90cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake        self.failIf(operator.ge(1, 2.0))
91cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake
92cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake    def test_gt(self):
93bb9c739806b9f0251fa4a564986e2cb5e92e766eWalter Dörwald        self.failUnlessRaises(TypeError, operator.gt)
94bb9c739806b9f0251fa4a564986e2cb5e92e766eWalter Dörwald        self.failUnlessRaises(TypeError, operator.gt, 1j, 2j)
95cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake        self.failUnless(operator.gt(1, 0))
96cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake        self.failUnless(operator.gt(1, 0.0))
97cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake        self.failIf(operator.gt(1, 1))
98cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake        self.failIf(operator.gt(1, 1.0))
99cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake        self.failIf(operator.gt(1, 2))
100cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake        self.failIf(operator.gt(1, 2.0))
101cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake
102cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake    def test_abs(self):
103bb9c739806b9f0251fa4a564986e2cb5e92e766eWalter Dörwald        self.failUnlessRaises(TypeError, operator.abs)
104bb9c739806b9f0251fa4a564986e2cb5e92e766eWalter Dörwald        self.failUnlessRaises(TypeError, operator.abs, None)
105e61fd5b5ed9d677da2f3349078d7f66f707199deGuido van Rossum        self.assertEqual(operator.abs(-1), 1)
106e61fd5b5ed9d677da2f3349078d7f66f707199deGuido van Rossum        self.assertEqual(operator.abs(1), 1)
107cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake
108cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake    def test_add(self):
109bb9c739806b9f0251fa4a564986e2cb5e92e766eWalter Dörwald        self.failUnlessRaises(TypeError, operator.add)
110bb9c739806b9f0251fa4a564986e2cb5e92e766eWalter Dörwald        self.failUnlessRaises(TypeError, operator.add, None, None)
111cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake        self.failUnless(operator.add(3, 4) == 7)
112cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake
113cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake    def test_bitwise_and(self):
114bb9c739806b9f0251fa4a564986e2cb5e92e766eWalter Dörwald        self.failUnlessRaises(TypeError, operator.and_)
115bb9c739806b9f0251fa4a564986e2cb5e92e766eWalter Dörwald        self.failUnlessRaises(TypeError, operator.and_, None, None)
116cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake        self.failUnless(operator.and_(0xf, 0xa) == 0xa)
117cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake
118cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake    def test_concat(self):
119bb9c739806b9f0251fa4a564986e2cb5e92e766eWalter Dörwald        self.failUnlessRaises(TypeError, operator.concat)
120bb9c739806b9f0251fa4a564986e2cb5e92e766eWalter Dörwald        self.failUnlessRaises(TypeError, operator.concat, None, None)
121cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake        self.failUnless(operator.concat('py', 'thon') == 'python')
122cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake        self.failUnless(operator.concat([1, 2], [3, 4]) == [1, 2, 3, 4])
123fd163f92cee2aa8189879bd43670782f4cfd2cf8Armin Rigo        self.failUnless(operator.concat(Seq1([5, 6]), Seq1([7])) == [5, 6, 7])
124fd163f92cee2aa8189879bd43670782f4cfd2cf8Armin Rigo        self.failUnless(operator.concat(Seq2([5, 6]), Seq2([7])) == [5, 6, 7])
125fd163f92cee2aa8189879bd43670782f4cfd2cf8Armin Rigo        self.failUnlessRaises(TypeError, operator.concat, 13, 29)
126cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake
127cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake    def test_countOf(self):
128bb9c739806b9f0251fa4a564986e2cb5e92e766eWalter Dörwald        self.failUnlessRaises(TypeError, operator.countOf)
129bb9c739806b9f0251fa4a564986e2cb5e92e766eWalter Dörwald        self.failUnlessRaises(TypeError, operator.countOf, None, None)
130cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake        self.failUnless(operator.countOf([1, 2, 1, 3, 1, 4], 3) == 1)
131cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake        self.failUnless(operator.countOf([1, 2, 1, 3, 1, 4], 5) == 0)
132cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake
133cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake    def test_delitem(self):
134cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake        a = [4, 3, 2, 1]
135bb9c739806b9f0251fa4a564986e2cb5e92e766eWalter Dörwald        self.failUnlessRaises(TypeError, operator.delitem, a)
136bb9c739806b9f0251fa4a564986e2cb5e92e766eWalter Dörwald        self.failUnlessRaises(TypeError, operator.delitem, a, None)
137cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake        self.failUnless(operator.delitem(a, 1) is None)
138cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake        self.assert_(a == [4, 2, 1])
139cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake
140cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake    def test_delslice(self):
141805365ee39298f93e433e19ae0dd87c6f782145bGuido van Rossum        a = list(range(10))
142bb9c739806b9f0251fa4a564986e2cb5e92e766eWalter Dörwald        self.failUnlessRaises(TypeError, operator.delslice, a)
143bb9c739806b9f0251fa4a564986e2cb5e92e766eWalter Dörwald        self.failUnlessRaises(TypeError, operator.delslice, a, None, None)
144cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake        self.failUnless(operator.delslice(a, 2, 8) is None)
145cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake        self.assert_(a == [0, 1, 8, 9])
146d8faa3654c2887eaa146dcdb553a9f9793bd2e5aGuido van Rossum        operator.delslice(a, 0, test_support.MAX_Py_ssize_t)
147e61fd5b5ed9d677da2f3349078d7f66f707199deGuido van Rossum        self.assertEqual(a, [])
148cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake
149cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake    def test_floordiv(self):
150bb9c739806b9f0251fa4a564986e2cb5e92e766eWalter Dörwald        self.failUnlessRaises(TypeError, operator.floordiv, 5)
151bb9c739806b9f0251fa4a564986e2cb5e92e766eWalter Dörwald        self.failUnlessRaises(TypeError, operator.floordiv, None, None)
152cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake        self.failUnless(operator.floordiv(5, 2) == 2)
153cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake
154cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake    def test_truediv(self):
155bb9c739806b9f0251fa4a564986e2cb5e92e766eWalter Dörwald        self.failUnlessRaises(TypeError, operator.truediv, 5)
156bb9c739806b9f0251fa4a564986e2cb5e92e766eWalter Dörwald        self.failUnlessRaises(TypeError, operator.truediv, None, None)
157cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake        self.failUnless(operator.truediv(5, 2) == 2.5)
158cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake
159cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake    def test_getitem(self):
160cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake        a = range(10)
161bb9c739806b9f0251fa4a564986e2cb5e92e766eWalter Dörwald        self.failUnlessRaises(TypeError, operator.getitem)
162bb9c739806b9f0251fa4a564986e2cb5e92e766eWalter Dörwald        self.failUnlessRaises(TypeError, operator.getitem, a, None)
163cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake        self.failUnless(operator.getitem(a, 2) == 2)
164cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake
165cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake    def test_getslice(self):
166805365ee39298f93e433e19ae0dd87c6f782145bGuido van Rossum        a = list(range(10))
167bb9c739806b9f0251fa4a564986e2cb5e92e766eWalter Dörwald        self.failUnlessRaises(TypeError, operator.getslice)
168bb9c739806b9f0251fa4a564986e2cb5e92e766eWalter Dörwald        self.failUnlessRaises(TypeError, operator.getslice, a, None, None)
169cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake        self.failUnless(operator.getslice(a, 4, 6) == [4, 5])
170d8faa3654c2887eaa146dcdb553a9f9793bd2e5aGuido van Rossum        b = operator.getslice(a, 0, test_support.MAX_Py_ssize_t)
171e61fd5b5ed9d677da2f3349078d7f66f707199deGuido van Rossum        self.assertEqual(b, a)
172cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake
173cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake    def test_indexOf(self):
174bb9c739806b9f0251fa4a564986e2cb5e92e766eWalter Dörwald        self.failUnlessRaises(TypeError, operator.indexOf)
175bb9c739806b9f0251fa4a564986e2cb5e92e766eWalter Dörwald        self.failUnlessRaises(TypeError, operator.indexOf, None, None)
176cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake        self.failUnless(operator.indexOf([4, 3, 2, 1], 3) == 1)
177cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake        self.assertRaises(ValueError, operator.indexOf, [4, 3, 2, 1], 0)
178cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake
179cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake    def test_invert(self):
180bb9c739806b9f0251fa4a564986e2cb5e92e766eWalter Dörwald        self.failUnlessRaises(TypeError, operator.invert)
181bb9c739806b9f0251fa4a564986e2cb5e92e766eWalter Dörwald        self.failUnlessRaises(TypeError, operator.invert, None)
182e61fd5b5ed9d677da2f3349078d7f66f707199deGuido van Rossum        self.assertEqual(operator.inv(4), -5)
183cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake
184cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake    def test_isMappingType(self):
185bb9c739806b9f0251fa4a564986e2cb5e92e766eWalter Dörwald        self.failUnlessRaises(TypeError, operator.isMappingType)
186cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake        self.failIf(operator.isMappingType(1))
187cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake        self.failIf(operator.isMappingType(operator.isMappingType))
188cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake        self.failUnless(operator.isMappingType(operator.__dict__))
189cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake        self.failUnless(operator.isMappingType({}))
190cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake
191cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake    def test_isNumberType(self):
192bb9c739806b9f0251fa4a564986e2cb5e92e766eWalter Dörwald        self.failUnlessRaises(TypeError, operator.isNumberType)
193cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake        self.failUnless(operator.isNumberType(8))
194cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake        self.failUnless(operator.isNumberType(8j))
195e2a383d062434c05b73031f0da57fe82b9da8942Guido van Rossum        self.failUnless(operator.isNumberType(8))
196cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake        self.failUnless(operator.isNumberType(8.3))
197cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake        self.failIf(operator.isNumberType(dir()))
198cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake
199cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake    def test_isSequenceType(self):
200bb9c739806b9f0251fa4a564986e2cb5e92e766eWalter Dörwald        self.failUnlessRaises(TypeError, operator.isSequenceType)
201cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake        self.failUnless(operator.isSequenceType(dir()))
202cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake        self.failUnless(operator.isSequenceType(()))
203805365ee39298f93e433e19ae0dd87c6f782145bGuido van Rossum        self.failUnless(operator.isSequenceType(range(10)))
204cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake        self.failUnless(operator.isSequenceType('yeahbuddy'))
205cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake        self.failIf(operator.isSequenceType(3))
206cf297e46b85257396560774e5492e9d71a40f32eThomas Wouters        class Dict(dict): pass
207cf297e46b85257396560774e5492e9d71a40f32eThomas Wouters        self.failIf(operator.isSequenceType(Dict()))
208cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake
209cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake    def test_lshift(self):
210bb9c739806b9f0251fa4a564986e2cb5e92e766eWalter Dörwald        self.failUnlessRaises(TypeError, operator.lshift)
211bb9c739806b9f0251fa4a564986e2cb5e92e766eWalter Dörwald        self.failUnlessRaises(TypeError, operator.lshift, None, 42)
212cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake        self.failUnless(operator.lshift(5, 1) == 10)
213cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake        self.failUnless(operator.lshift(5, 0) == 5)
214cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake        self.assertRaises(ValueError, operator.lshift, 2, -1)
215cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake
216cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake    def test_mod(self):
217bb9c739806b9f0251fa4a564986e2cb5e92e766eWalter Dörwald        self.failUnlessRaises(TypeError, operator.mod)
218bb9c739806b9f0251fa4a564986e2cb5e92e766eWalter Dörwald        self.failUnlessRaises(TypeError, operator.mod, None, 42)
219cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake        self.failUnless(operator.mod(5, 2) == 1)
220cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake
221cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake    def test_mul(self):
222bb9c739806b9f0251fa4a564986e2cb5e92e766eWalter Dörwald        self.failUnlessRaises(TypeError, operator.mul)
223bb9c739806b9f0251fa4a564986e2cb5e92e766eWalter Dörwald        self.failUnlessRaises(TypeError, operator.mul, None, None)
224cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake        self.failUnless(operator.mul(5, 2) == 10)
225cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake
226cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake    def test_neg(self):
227bb9c739806b9f0251fa4a564986e2cb5e92e766eWalter Dörwald        self.failUnlessRaises(TypeError, operator.neg)
228bb9c739806b9f0251fa4a564986e2cb5e92e766eWalter Dörwald        self.failUnlessRaises(TypeError, operator.neg, None)
229e61fd5b5ed9d677da2f3349078d7f66f707199deGuido van Rossum        self.assertEqual(operator.neg(5), -5)
230e61fd5b5ed9d677da2f3349078d7f66f707199deGuido van Rossum        self.assertEqual(operator.neg(-5), 5)
231e61fd5b5ed9d677da2f3349078d7f66f707199deGuido van Rossum        self.assertEqual(operator.neg(0), 0)
232e61fd5b5ed9d677da2f3349078d7f66f707199deGuido van Rossum        self.assertEqual(operator.neg(-0), 0)
233cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake
234cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake    def test_bitwise_or(self):
235bb9c739806b9f0251fa4a564986e2cb5e92e766eWalter Dörwald        self.failUnlessRaises(TypeError, operator.or_)
236bb9c739806b9f0251fa4a564986e2cb5e92e766eWalter Dörwald        self.failUnlessRaises(TypeError, operator.or_, None, None)
237cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake        self.failUnless(operator.or_(0xa, 0x5) == 0xf)
238cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake
239cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake    def test_pos(self):
240bb9c739806b9f0251fa4a564986e2cb5e92e766eWalter Dörwald        self.failUnlessRaises(TypeError, operator.pos)
241bb9c739806b9f0251fa4a564986e2cb5e92e766eWalter Dörwald        self.failUnlessRaises(TypeError, operator.pos, None)
242e61fd5b5ed9d677da2f3349078d7f66f707199deGuido van Rossum        self.assertEqual(operator.pos(5), 5)
243e61fd5b5ed9d677da2f3349078d7f66f707199deGuido van Rossum        self.assertEqual(operator.pos(-5), -5)
244e61fd5b5ed9d677da2f3349078d7f66f707199deGuido van Rossum        self.assertEqual(operator.pos(0), 0)
245e61fd5b5ed9d677da2f3349078d7f66f707199deGuido van Rossum        self.assertEqual(operator.pos(-0), 0)
246cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake
2475959c559df777eb61b10d986e45ed4bbf269b36dRaymond Hettinger    def test_pow(self):
248bb9c739806b9f0251fa4a564986e2cb5e92e766eWalter Dörwald        self.failUnlessRaises(TypeError, operator.pow)
249bb9c739806b9f0251fa4a564986e2cb5e92e766eWalter Dörwald        self.failUnlessRaises(TypeError, operator.pow, None, None)
250e61fd5b5ed9d677da2f3349078d7f66f707199deGuido van Rossum        self.assertEqual(operator.pow(3,5), 3**5)
251e61fd5b5ed9d677da2f3349078d7f66f707199deGuido van Rossum        self.assertEqual(operator.__pow__(3,5), 3**5)
2525959c559df777eb61b10d986e45ed4bbf269b36dRaymond Hettinger        self.assertRaises(TypeError, operator.pow, 1)
2535959c559df777eb61b10d986e45ed4bbf269b36dRaymond Hettinger        self.assertRaises(TypeError, operator.pow, 1, 2, 3)
2545959c559df777eb61b10d986e45ed4bbf269b36dRaymond Hettinger
255cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake    def test_repeat(self):
256805365ee39298f93e433e19ae0dd87c6f782145bGuido van Rossum        a = list(range(3))
257bb9c739806b9f0251fa4a564986e2cb5e92e766eWalter Dörwald        self.failUnlessRaises(TypeError, operator.repeat)
258bb9c739806b9f0251fa4a564986e2cb5e92e766eWalter Dörwald        self.failUnlessRaises(TypeError, operator.repeat, a, None)
259cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake        self.failUnless(operator.repeat(a, 2) == a+a)
260cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake        self.failUnless(operator.repeat(a, 1) == a)
261cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake        self.failUnless(operator.repeat(a, 0) == [])
262cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake        a = (1, 2, 3)
263cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake        self.failUnless(operator.repeat(a, 2) == a+a)
264cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake        self.failUnless(operator.repeat(a, 1) == a)
265cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake        self.failUnless(operator.repeat(a, 0) == ())
266cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake        a = '123'
267cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake        self.failUnless(operator.repeat(a, 2) == a+a)
268cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake        self.failUnless(operator.repeat(a, 1) == a)
269cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake        self.failUnless(operator.repeat(a, 0) == '')
270fd163f92cee2aa8189879bd43670782f4cfd2cf8Armin Rigo        a = Seq1([4, 5, 6])
271fd163f92cee2aa8189879bd43670782f4cfd2cf8Armin Rigo        self.failUnless(operator.repeat(a, 2) == [4, 5, 6, 4, 5, 6])
272fd163f92cee2aa8189879bd43670782f4cfd2cf8Armin Rigo        self.failUnless(operator.repeat(a, 1) == [4, 5, 6])
273fd163f92cee2aa8189879bd43670782f4cfd2cf8Armin Rigo        self.failUnless(operator.repeat(a, 0) == [])
274fd163f92cee2aa8189879bd43670782f4cfd2cf8Armin Rigo        a = Seq2([4, 5, 6])
275fd163f92cee2aa8189879bd43670782f4cfd2cf8Armin Rigo        self.failUnless(operator.repeat(a, 2) == [4, 5, 6, 4, 5, 6])
276fd163f92cee2aa8189879bd43670782f4cfd2cf8Armin Rigo        self.failUnless(operator.repeat(a, 1) == [4, 5, 6])
277fd163f92cee2aa8189879bd43670782f4cfd2cf8Armin Rigo        self.failUnless(operator.repeat(a, 0) == [])
278fd163f92cee2aa8189879bd43670782f4cfd2cf8Armin Rigo        self.failUnlessRaises(TypeError, operator.repeat, 6, 7)
279cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake
280cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake    def test_rshift(self):
281bb9c739806b9f0251fa4a564986e2cb5e92e766eWalter Dörwald        self.failUnlessRaises(TypeError, operator.rshift)
282bb9c739806b9f0251fa4a564986e2cb5e92e766eWalter Dörwald        self.failUnlessRaises(TypeError, operator.rshift, None, 42)
283cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake        self.failUnless(operator.rshift(5, 1) == 2)
284cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake        self.failUnless(operator.rshift(5, 0) == 5)
285cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake        self.assertRaises(ValueError, operator.rshift, 2, -1)
286cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake
287cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake    def test_contains(self):
288bb9c739806b9f0251fa4a564986e2cb5e92e766eWalter Dörwald        self.failUnlessRaises(TypeError, operator.contains)
289bb9c739806b9f0251fa4a564986e2cb5e92e766eWalter Dörwald        self.failUnlessRaises(TypeError, operator.contains, None, None)
290cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake        self.failUnless(operator.contains(range(4), 2))
291cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake        self.failIf(operator.contains(range(4), 5))
292cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake
293cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake    def test_setitem(self):
294805365ee39298f93e433e19ae0dd87c6f782145bGuido van Rossum        a = list(range(3))
295bb9c739806b9f0251fa4a564986e2cb5e92e766eWalter Dörwald        self.failUnlessRaises(TypeError, operator.setitem, a)
296bb9c739806b9f0251fa4a564986e2cb5e92e766eWalter Dörwald        self.failUnlessRaises(TypeError, operator.setitem, a, None, None)
297cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake        self.failUnless(operator.setitem(a, 0, 2) is None)
298cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake        self.assert_(a == [2, 1, 2])
299cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake        self.assertRaises(IndexError, operator.setitem, a, 4, 2)
300cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake
301cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake    def test_setslice(self):
302805365ee39298f93e433e19ae0dd87c6f782145bGuido van Rossum        a = list(range(4))
303bb9c739806b9f0251fa4a564986e2cb5e92e766eWalter Dörwald        self.failUnlessRaises(TypeError, operator.setslice, a)
304bb9c739806b9f0251fa4a564986e2cb5e92e766eWalter Dörwald        self.failUnlessRaises(TypeError, operator.setslice, a, None, None, None)
305cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake        self.failUnless(operator.setslice(a, 1, 3, [2, 1]) is None)
306cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake        self.assert_(a == [0, 2, 1, 3])
307d8faa3654c2887eaa146dcdb553a9f9793bd2e5aGuido van Rossum        operator.setslice(a, 0, test_support.MAX_Py_ssize_t, [])
308e61fd5b5ed9d677da2f3349078d7f66f707199deGuido van Rossum        self.assertEqual(a, [])
309cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake
310cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake    def test_sub(self):
311bb9c739806b9f0251fa4a564986e2cb5e92e766eWalter Dörwald        self.failUnlessRaises(TypeError, operator.sub)
312bb9c739806b9f0251fa4a564986e2cb5e92e766eWalter Dörwald        self.failUnlessRaises(TypeError, operator.sub, None, None)
313cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake        self.failUnless(operator.sub(5, 2) == 3)
314cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake
315cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake    def test_truth(self):
316bb9c739806b9f0251fa4a564986e2cb5e92e766eWalter Dörwald        class C(object):
3174dafcc4ece09c2a60473bb109513de4e7d2c2b11Jack Diederich            def __bool__(self):
318bb9c739806b9f0251fa4a564986e2cb5e92e766eWalter Dörwald                raise SyntaxError
319bb9c739806b9f0251fa4a564986e2cb5e92e766eWalter Dörwald        self.failUnlessRaises(TypeError, operator.truth)
320bb9c739806b9f0251fa4a564986e2cb5e92e766eWalter Dörwald        self.failUnlessRaises(SyntaxError, operator.truth, C())
321cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake        self.failUnless(operator.truth(5))
322cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake        self.failUnless(operator.truth([0]))
323cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake        self.failIf(operator.truth(0))
324cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake        self.failIf(operator.truth([]))
325cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake
326cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake    def test_bitwise_xor(self):
327bb9c739806b9f0251fa4a564986e2cb5e92e766eWalter Dörwald        self.failUnlessRaises(TypeError, operator.xor)
328bb9c739806b9f0251fa4a564986e2cb5e92e766eWalter Dörwald        self.failUnlessRaises(TypeError, operator.xor, None, None)
329cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake        self.failUnless(operator.xor(0xb, 0xc) == 0x7)
330cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake
3319543b340066e85bb920a0655edf33e11050d7b08Raymond Hettinger    def test_is(self):
3329543b340066e85bb920a0655edf33e11050d7b08Raymond Hettinger        a = b = 'xyzpdq'
3339543b340066e85bb920a0655edf33e11050d7b08Raymond Hettinger        c = a[:3] + b[3:]
334bb9c739806b9f0251fa4a564986e2cb5e92e766eWalter Dörwald        self.failUnlessRaises(TypeError, operator.is_)
3359543b340066e85bb920a0655edf33e11050d7b08Raymond Hettinger        self.failUnless(operator.is_(a, b))
3369543b340066e85bb920a0655edf33e11050d7b08Raymond Hettinger        self.failIf(operator.is_(a,c))
3379543b340066e85bb920a0655edf33e11050d7b08Raymond Hettinger
3389543b340066e85bb920a0655edf33e11050d7b08Raymond Hettinger    def test_is_not(self):
3399543b340066e85bb920a0655edf33e11050d7b08Raymond Hettinger        a = b = 'xyzpdq'
3409543b340066e85bb920a0655edf33e11050d7b08Raymond Hettinger        c = a[:3] + b[3:]
341bb9c739806b9f0251fa4a564986e2cb5e92e766eWalter Dörwald        self.failUnlessRaises(TypeError, operator.is_not)
3429543b340066e85bb920a0655edf33e11050d7b08Raymond Hettinger        self.failIf(operator.is_not(a, b))
3439543b340066e85bb920a0655edf33e11050d7b08Raymond Hettinger        self.failUnless(operator.is_not(a,c))
344cd112f5546256a752f56b3bf6ce0ff19ff30a981Fred Drake
345166958b5df50fca05cb24be0152737edf575dbb9Raymond Hettinger    def test_attrgetter(self):
346166958b5df50fca05cb24be0152737edf575dbb9Raymond Hettinger        class A:
347166958b5df50fca05cb24be0152737edf575dbb9Raymond Hettinger            pass
348166958b5df50fca05cb24be0152737edf575dbb9Raymond Hettinger        a = A()
349166958b5df50fca05cb24be0152737edf575dbb9Raymond Hettinger        a.name = 'arthur'
350166958b5df50fca05cb24be0152737edf575dbb9Raymond Hettinger        f = operator.attrgetter('name')
351166958b5df50fca05cb24be0152737edf575dbb9Raymond Hettinger        self.assertEqual(f(a), 'arthur')
352166958b5df50fca05cb24be0152737edf575dbb9Raymond Hettinger        f = operator.attrgetter('rank')
353166958b5df50fca05cb24be0152737edf575dbb9Raymond Hettinger        self.assertRaises(AttributeError, f, a)
354166958b5df50fca05cb24be0152737edf575dbb9Raymond Hettinger        f = operator.attrgetter(2)
355166958b5df50fca05cb24be0152737edf575dbb9Raymond Hettinger        self.assertRaises(TypeError, f, a)
356166958b5df50fca05cb24be0152737edf575dbb9Raymond Hettinger        self.assertRaises(TypeError, operator.attrgetter)
357984f9bb7140683fa9b950b42a035477108aba88fRaymond Hettinger
358984f9bb7140683fa9b950b42a035477108aba88fRaymond Hettinger        # multiple gets
359984f9bb7140683fa9b950b42a035477108aba88fRaymond Hettinger        record = A()
360984f9bb7140683fa9b950b42a035477108aba88fRaymond Hettinger        record.x = 'X'
361984f9bb7140683fa9b950b42a035477108aba88fRaymond Hettinger        record.y = 'Y'
362984f9bb7140683fa9b950b42a035477108aba88fRaymond Hettinger        record.z = 'Z'
363984f9bb7140683fa9b950b42a035477108aba88fRaymond Hettinger        self.assertEqual(operator.attrgetter('x','z','y')(record), ('X', 'Z', 'Y'))
364984f9bb7140683fa9b950b42a035477108aba88fRaymond Hettinger        self.assertRaises(TypeError, operator.attrgetter('x', (), 'y'), record)
365166958b5df50fca05cb24be0152737edf575dbb9Raymond Hettinger
366bb9c739806b9f0251fa4a564986e2cb5e92e766eWalter Dörwald        class C(object):
3679bd667ad030913ead3a789f45e73c26f9f28fb46Christian Heimes            def __getattr__(self, name):
368bb9c739806b9f0251fa4a564986e2cb5e92e766eWalter Dörwald                raise SyntaxError
3699bd667ad030913ead3a789f45e73c26f9f28fb46Christian Heimes        self.failUnlessRaises(SyntaxError, operator.attrgetter('foo'), C())
370bb9c739806b9f0251fa4a564986e2cb5e92e766eWalter Dörwald
371166958b5df50fca05cb24be0152737edf575dbb9Raymond Hettinger    def test_itemgetter(self):
372166958b5df50fca05cb24be0152737edf575dbb9Raymond Hettinger        a = 'ABCDE'
373166958b5df50fca05cb24be0152737edf575dbb9Raymond Hettinger        f = operator.itemgetter(2)
374166958b5df50fca05cb24be0152737edf575dbb9Raymond Hettinger        self.assertEqual(f(a), 'C')
375166958b5df50fca05cb24be0152737edf575dbb9Raymond Hettinger        f = operator.itemgetter(10)
376166958b5df50fca05cb24be0152737edf575dbb9Raymond Hettinger        self.assertRaises(IndexError, f, a)
377166958b5df50fca05cb24be0152737edf575dbb9Raymond Hettinger
378bb9c739806b9f0251fa4a564986e2cb5e92e766eWalter Dörwald        class C(object):
3799bd667ad030913ead3a789f45e73c26f9f28fb46Christian Heimes            def __getitem__(self, name):
380bb9c739806b9f0251fa4a564986e2cb5e92e766eWalter Dörwald                raise SyntaxError
3819bd667ad030913ead3a789f45e73c26f9f28fb46Christian Heimes        self.failUnlessRaises(SyntaxError, operator.itemgetter(42), C())
382bb9c739806b9f0251fa4a564986e2cb5e92e766eWalter Dörwald
383166958b5df50fca05cb24be0152737edf575dbb9Raymond Hettinger        f = operator.itemgetter('name')
384166958b5df50fca05cb24be0152737edf575dbb9Raymond Hettinger        self.assertRaises(TypeError, f, a)
385166958b5df50fca05cb24be0152737edf575dbb9Raymond Hettinger        self.assertRaises(TypeError, operator.itemgetter)
386166958b5df50fca05cb24be0152737edf575dbb9Raymond Hettinger
387166958b5df50fca05cb24be0152737edf575dbb9Raymond Hettinger        d = dict(key='val')
388166958b5df50fca05cb24be0152737edf575dbb9Raymond Hettinger        f = operator.itemgetter('key')
389166958b5df50fca05cb24be0152737edf575dbb9Raymond Hettinger        self.assertEqual(f(d), 'val')
390166958b5df50fca05cb24be0152737edf575dbb9Raymond Hettinger        f = operator.itemgetter('nonkey')
391166958b5df50fca05cb24be0152737edf575dbb9Raymond Hettinger        self.assertRaises(KeyError, f, d)
392166958b5df50fca05cb24be0152737edf575dbb9Raymond Hettinger
393166958b5df50fca05cb24be0152737edf575dbb9Raymond Hettinger        # example used in the docs
394166958b5df50fca05cb24be0152737edf575dbb9Raymond Hettinger        inventory = [('apple', 3), ('banana', 2), ('pear', 5), ('orange', 1)]
395166958b5df50fca05cb24be0152737edf575dbb9Raymond Hettinger        getcount = operator.itemgetter(1)
396c1f779cb015272412e4da2e5cb61b4e8cdcbf191Guido van Rossum        self.assertEqual(list(map(getcount, inventory)), [3, 2, 5, 1])
39764958a15d7c03efdc3d2eddf247666e18d1fd910Raymond Hettinger        self.assertEqual(sorted(inventory, key=getcount),
398166958b5df50fca05cb24be0152737edf575dbb9Raymond Hettinger            [('orange', 1), ('banana', 2), ('apple', 3), ('pear', 5)])
399166958b5df50fca05cb24be0152737edf575dbb9Raymond Hettinger
400984f9bb7140683fa9b950b42a035477108aba88fRaymond Hettinger        # multiple gets
401c1f779cb015272412e4da2e5cb61b4e8cdcbf191Guido van Rossum        data = list(map(str, range(20)))
402984f9bb7140683fa9b950b42a035477108aba88fRaymond Hettinger        self.assertEqual(operator.itemgetter(2,10,5)(data), ('2', '10', '5'))
403984f9bb7140683fa9b950b42a035477108aba88fRaymond Hettinger        self.assertRaises(TypeError, operator.itemgetter(2, 'x', 5), data)
404984f9bb7140683fa9b950b42a035477108aba88fRaymond Hettinger
405f5bd3b442dd378563036f51595a7d6b2a239f4d5Armin Rigo    def test_inplace(self):
406f5bd3b442dd378563036f51595a7d6b2a239f4d5Armin Rigo        class C(object):
407f5bd3b442dd378563036f51595a7d6b2a239f4d5Armin Rigo            def __iadd__     (self, other): return "iadd"
408f5bd3b442dd378563036f51595a7d6b2a239f4d5Armin Rigo            def __iand__     (self, other): return "iand"
409f5bd3b442dd378563036f51595a7d6b2a239f4d5Armin Rigo            def __ifloordiv__(self, other): return "ifloordiv"
410f5bd3b442dd378563036f51595a7d6b2a239f4d5Armin Rigo            def __ilshift__  (self, other): return "ilshift"
411f5bd3b442dd378563036f51595a7d6b2a239f4d5Armin Rigo            def __imod__     (self, other): return "imod"
412f5bd3b442dd378563036f51595a7d6b2a239f4d5Armin Rigo            def __imul__     (self, other): return "imul"
413f5bd3b442dd378563036f51595a7d6b2a239f4d5Armin Rigo            def __ior__      (self, other): return "ior"
414f5bd3b442dd378563036f51595a7d6b2a239f4d5Armin Rigo            def __ipow__     (self, other): return "ipow"
415f5bd3b442dd378563036f51595a7d6b2a239f4d5Armin Rigo            def __irshift__  (self, other): return "irshift"
416f5bd3b442dd378563036f51595a7d6b2a239f4d5Armin Rigo            def __isub__     (self, other): return "isub"
417f5bd3b442dd378563036f51595a7d6b2a239f4d5Armin Rigo            def __itruediv__ (self, other): return "itruediv"
418f5bd3b442dd378563036f51595a7d6b2a239f4d5Armin Rigo            def __ixor__     (self, other): return "ixor"
419f5bd3b442dd378563036f51595a7d6b2a239f4d5Armin Rigo            def __getitem__(self, other): return 5  # so that C is a sequence
420f5bd3b442dd378563036f51595a7d6b2a239f4d5Armin Rigo        c = C()
421f5bd3b442dd378563036f51595a7d6b2a239f4d5Armin Rigo        self.assertEqual(operator.iadd     (c, 5), "iadd")
422f5bd3b442dd378563036f51595a7d6b2a239f4d5Armin Rigo        self.assertEqual(operator.iand     (c, 5), "iand")
423f5bd3b442dd378563036f51595a7d6b2a239f4d5Armin Rigo        self.assertEqual(operator.ifloordiv(c, 5), "ifloordiv")
424f5bd3b442dd378563036f51595a7d6b2a239f4d5Armin Rigo        self.assertEqual(operator.ilshift  (c, 5), "ilshift")
425f5bd3b442dd378563036f51595a7d6b2a239f4d5Armin Rigo        self.assertEqual(operator.imod     (c, 5), "imod")
426f5bd3b442dd378563036f51595a7d6b2a239f4d5Armin Rigo        self.assertEqual(operator.imul     (c, 5), "imul")
427f5bd3b442dd378563036f51595a7d6b2a239f4d5Armin Rigo        self.assertEqual(operator.ior      (c, 5), "ior")
428f5bd3b442dd378563036f51595a7d6b2a239f4d5Armin Rigo        self.assertEqual(operator.ipow     (c, 5), "ipow")
429f5bd3b442dd378563036f51595a7d6b2a239f4d5Armin Rigo        self.assertEqual(operator.irshift  (c, 5), "irshift")
430f5bd3b442dd378563036f51595a7d6b2a239f4d5Armin Rigo        self.assertEqual(operator.isub     (c, 5), "isub")
431f5bd3b442dd378563036f51595a7d6b2a239f4d5Armin Rigo        self.assertEqual(operator.itruediv (c, 5), "itruediv")
432f5bd3b442dd378563036f51595a7d6b2a239f4d5Armin Rigo        self.assertEqual(operator.ixor     (c, 5), "ixor")
433f5bd3b442dd378563036f51595a7d6b2a239f4d5Armin Rigo        self.assertEqual(operator.iconcat  (c, c), "iadd")
434f5bd3b442dd378563036f51595a7d6b2a239f4d5Armin Rigo        self.assertEqual(operator.irepeat  (c, 5), "imul")
435f5bd3b442dd378563036f51595a7d6b2a239f4d5Armin Rigo        self.assertEqual(operator.__iadd__     (c, 5), "iadd")
436f5bd3b442dd378563036f51595a7d6b2a239f4d5Armin Rigo        self.assertEqual(operator.__iand__     (c, 5), "iand")
437f5bd3b442dd378563036f51595a7d6b2a239f4d5Armin Rigo        self.assertEqual(operator.__ifloordiv__(c, 5), "ifloordiv")
438f5bd3b442dd378563036f51595a7d6b2a239f4d5Armin Rigo        self.assertEqual(operator.__ilshift__  (c, 5), "ilshift")
439f5bd3b442dd378563036f51595a7d6b2a239f4d5Armin Rigo        self.assertEqual(operator.__imod__     (c, 5), "imod")
440f5bd3b442dd378563036f51595a7d6b2a239f4d5Armin Rigo        self.assertEqual(operator.__imul__     (c, 5), "imul")
441f5bd3b442dd378563036f51595a7d6b2a239f4d5Armin Rigo        self.assertEqual(operator.__ior__      (c, 5), "ior")
442f5bd3b442dd378563036f51595a7d6b2a239f4d5Armin Rigo        self.assertEqual(operator.__ipow__     (c, 5), "ipow")
443f5bd3b442dd378563036f51595a7d6b2a239f4d5Armin Rigo        self.assertEqual(operator.__irshift__  (c, 5), "irshift")
444f5bd3b442dd378563036f51595a7d6b2a239f4d5Armin Rigo        self.assertEqual(operator.__isub__     (c, 5), "isub")
445f5bd3b442dd378563036f51595a7d6b2a239f4d5Armin Rigo        self.assertEqual(operator.__itruediv__ (c, 5), "itruediv")
446f5bd3b442dd378563036f51595a7d6b2a239f4d5Armin Rigo        self.assertEqual(operator.__ixor__     (c, 5), "ixor")
447f5bd3b442dd378563036f51595a7d6b2a239f4d5Armin Rigo        self.assertEqual(operator.__iconcat__  (c, c), "iadd")
448f5bd3b442dd378563036f51595a7d6b2a239f4d5Armin Rigo        self.assertEqual(operator.__irepeat__  (c, 5), "imul")
449984f9bb7140683fa9b950b42a035477108aba88fRaymond Hettinger
450984f9bb7140683fa9b950b42a035477108aba88fRaymond Hettingerdef test_main(verbose=None):
451984f9bb7140683fa9b950b42a035477108aba88fRaymond Hettinger    import sys
452984f9bb7140683fa9b950b42a035477108aba88fRaymond Hettinger    test_classes = (
453984f9bb7140683fa9b950b42a035477108aba88fRaymond Hettinger        OperatorTestCase,
454984f9bb7140683fa9b950b42a035477108aba88fRaymond Hettinger    )
455984f9bb7140683fa9b950b42a035477108aba88fRaymond Hettinger
456984f9bb7140683fa9b950b42a035477108aba88fRaymond Hettinger    test_support.run_unittest(*test_classes)
4572e2be3760ccdfd4bdde4afdd66f4078022ba3b61Fred Drake
458984f9bb7140683fa9b950b42a035477108aba88fRaymond Hettinger    # verify reference counting
459984f9bb7140683fa9b950b42a035477108aba88fRaymond Hettinger    if verbose and hasattr(sys, "gettotalrefcount"):
460984f9bb7140683fa9b950b42a035477108aba88fRaymond Hettinger        import gc
461984f9bb7140683fa9b950b42a035477108aba88fRaymond Hettinger        counts = [None] * 5
462805365ee39298f93e433e19ae0dd87c6f782145bGuido van Rossum        for i in range(len(counts)):
463984f9bb7140683fa9b950b42a035477108aba88fRaymond Hettinger            test_support.run_unittest(*test_classes)
464984f9bb7140683fa9b950b42a035477108aba88fRaymond Hettinger            gc.collect()
465984f9bb7140683fa9b950b42a035477108aba88fRaymond Hettinger            counts[i] = sys.gettotalrefcount()
466be19ed77ddb047e02fe94d142181062af6d99dccGuido van Rossum        print(counts)
4672e2be3760ccdfd4bdde4afdd66f4078022ba3b61Fred Drake
4682e2be3760ccdfd4bdde4afdd66f4078022ba3b61Fred Drakeif __name__ == "__main__":
469984f9bb7140683fa9b950b42a035477108aba88fRaymond Hettinger    test_main(verbose=True)
470