10c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiimport operator
20c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiimport unittest
30c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi
40c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yifrom test import test_support
50c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi
60c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass Seq1:
70c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi    def __init__(self, lst):
80c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.lst = lst
90c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi    def __len__(self):
100c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        return len(self.lst)
110c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi    def __getitem__(self, i):
120c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        return self.lst[i]
130c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi    def __add__(self, other):
140c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        return self.lst + other.lst
150c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi    def __mul__(self, other):
160c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        return self.lst * other
170c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi    def __rmul__(self, other):
180c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        return other * self.lst
190c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi
200c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass Seq2(object):
210c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi    def __init__(self, lst):
220c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.lst = lst
230c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi    def __len__(self):
240c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        return len(self.lst)
250c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi    def __getitem__(self, i):
260c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        return self.lst[i]
270c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi    def __add__(self, other):
280c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        return self.lst + other.lst
290c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi    def __mul__(self, other):
300c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        return self.lst * other
310c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi    def __rmul__(self, other):
320c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        return other * self.lst
330c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi
340c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi
350c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass OperatorTestCase(unittest.TestCase):
360c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi    def test_lt(self):
370c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertRaises(TypeError, operator.lt)
380c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertRaises(TypeError, operator.lt, 1j, 2j)
390c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertFalse(operator.lt(1, 0))
400c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertFalse(operator.lt(1, 0.0))
410c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertFalse(operator.lt(1, 1))
420c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertFalse(operator.lt(1, 1.0))
430c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertTrue(operator.lt(1, 2))
440c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertTrue(operator.lt(1, 2.0))
450c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi
460c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi    def test_le(self):
470c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertRaises(TypeError, operator.le)
480c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertRaises(TypeError, operator.le, 1j, 2j)
490c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertFalse(operator.le(1, 0))
500c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertFalse(operator.le(1, 0.0))
510c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertTrue(operator.le(1, 1))
520c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertTrue(operator.le(1, 1.0))
530c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertTrue(operator.le(1, 2))
540c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertTrue(operator.le(1, 2.0))
550c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi
560c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi    def test_eq(self):
570c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        class C(object):
580c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi            def __eq__(self, other):
590c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi                raise SyntaxError
600c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi            __hash__ = None # Silence Py3k warning
610c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertRaises(TypeError, operator.eq)
620c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertRaises(SyntaxError, operator.eq, C(), C())
630c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertFalse(operator.eq(1, 0))
640c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertFalse(operator.eq(1, 0.0))
650c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertTrue(operator.eq(1, 1))
660c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertTrue(operator.eq(1, 1.0))
670c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertFalse(operator.eq(1, 2))
680c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertFalse(operator.eq(1, 2.0))
690c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi
700c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi    def test_ne(self):
710c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        class C(object):
720c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi            def __ne__(self, other):
730c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi                raise SyntaxError
740c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertRaises(TypeError, operator.ne)
750c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertRaises(SyntaxError, operator.ne, C(), C())
760c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertTrue(operator.ne(1, 0))
770c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertTrue(operator.ne(1, 0.0))
780c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertFalse(operator.ne(1, 1))
790c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertFalse(operator.ne(1, 1.0))
800c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertTrue(operator.ne(1, 2))
810c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertTrue(operator.ne(1, 2.0))
820c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi
830c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi    def test_ge(self):
840c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertRaises(TypeError, operator.ge)
850c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertRaises(TypeError, operator.ge, 1j, 2j)
860c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertTrue(operator.ge(1, 0))
870c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertTrue(operator.ge(1, 0.0))
880c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertTrue(operator.ge(1, 1))
890c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertTrue(operator.ge(1, 1.0))
900c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertFalse(operator.ge(1, 2))
910c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertFalse(operator.ge(1, 2.0))
920c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi
930c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi    def test_gt(self):
940c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertRaises(TypeError, operator.gt)
950c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertRaises(TypeError, operator.gt, 1j, 2j)
960c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertTrue(operator.gt(1, 0))
970c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertTrue(operator.gt(1, 0.0))
980c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertFalse(operator.gt(1, 1))
990c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertFalse(operator.gt(1, 1.0))
1000c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertFalse(operator.gt(1, 2))
1010c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertFalse(operator.gt(1, 2.0))
1020c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi
1030c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi    def test_abs(self):
1040c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertRaises(TypeError, operator.abs)
1050c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertRaises(TypeError, operator.abs, None)
1060c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertTrue(operator.abs(-1) == 1)
1070c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertTrue(operator.abs(1) == 1)
1080c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi
1090c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi    def test_add(self):
1100c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertRaises(TypeError, operator.add)
1110c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertRaises(TypeError, operator.add, None, None)
1120c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertTrue(operator.add(3, 4) == 7)
1130c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi
1140c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi    def test_bitwise_and(self):
1150c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertRaises(TypeError, operator.and_)
1160c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertRaises(TypeError, operator.and_, None, None)
1170c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertTrue(operator.and_(0xf, 0xa) == 0xa)
1180c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi
1190c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi    def test_concat(self):
1200c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertRaises(TypeError, operator.concat)
1210c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertRaises(TypeError, operator.concat, None, None)
1220c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertTrue(operator.concat('py', 'thon') == 'python')
1230c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertTrue(operator.concat([1, 2], [3, 4]) == [1, 2, 3, 4])
1240c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertTrue(operator.concat(Seq1([5, 6]), Seq1([7])) == [5, 6, 7])
1250c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertTrue(operator.concat(Seq2([5, 6]), Seq2([7])) == [5, 6, 7])
1260c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertRaises(TypeError, operator.concat, 13, 29)
1270c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi
1280c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi    def test_countOf(self):
1290c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertRaises(TypeError, operator.countOf)
1300c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertRaises(TypeError, operator.countOf, None, None)
1310c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertTrue(operator.countOf([1, 2, 1, 3, 1, 4], 3) == 1)
1320c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertTrue(operator.countOf([1, 2, 1, 3, 1, 4], 5) == 0)
1330c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi
1340c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi    def test_delitem(self):
1350c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        a = [4, 3, 2, 1]
1360c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertRaises(TypeError, operator.delitem, a)
1370c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertRaises(TypeError, operator.delitem, a, None)
1380c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertTrue(operator.delitem(a, 1) is None)
1390c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertTrue(a == [4, 2, 1])
1400c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi
1410c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi    def test_delslice(self):
1420c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        a = range(10)
1430c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertRaises(TypeError, operator.delslice, a)
1440c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertRaises(TypeError, operator.delslice, a, None, None)
1450c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertTrue(operator.delslice(a, 2, 8) is None)
1460c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertTrue(a == [0, 1, 8, 9])
1470c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        operator.delslice(a, 0, test_support.MAX_Py_ssize_t)
1480c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertTrue(a == [])
1490c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi
1500c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi    def test_div(self):
1510c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertRaises(TypeError, operator.div, 5)
1520c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertRaises(TypeError, operator.div, None, None)
1530c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertTrue(operator.floordiv(5, 2) == 2)
1540c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi
1550c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi    def test_floordiv(self):
1560c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertRaises(TypeError, operator.floordiv, 5)
1570c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertRaises(TypeError, operator.floordiv, None, None)
1580c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertTrue(operator.floordiv(5, 2) == 2)
1590c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi
1600c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi    def test_truediv(self):
1610c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertRaises(TypeError, operator.truediv, 5)
1620c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertRaises(TypeError, operator.truediv, None, None)
1630c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertTrue(operator.truediv(5, 2) == 2.5)
1640c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi
1650c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi    def test_getitem(self):
1660c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        a = range(10)
1670c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertRaises(TypeError, operator.getitem)
1680c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertRaises(TypeError, operator.getitem, a, None)
1690c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertTrue(operator.getitem(a, 2) == 2)
1700c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi
1710c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi    def test_getslice(self):
1720c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        a = range(10)
1730c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertRaises(TypeError, operator.getslice)
1740c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertRaises(TypeError, operator.getslice, a, None, None)
1750c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertTrue(operator.getslice(a, 4, 6) == [4, 5])
1760c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        b = operator.getslice(a, 0, test_support.MAX_Py_ssize_t)
1770c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertTrue(b == a)
1780c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi
1790c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi    def test_indexOf(self):
1800c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertRaises(TypeError, operator.indexOf)
1810c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertRaises(TypeError, operator.indexOf, None, None)
1820c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertTrue(operator.indexOf([4, 3, 2, 1], 3) == 1)
1830c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertRaises(ValueError, operator.indexOf, [4, 3, 2, 1], 0)
1840c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi
1850c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi    def test_invert(self):
1860c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertRaises(TypeError, operator.invert)
1870c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertRaises(TypeError, operator.invert, None)
1880c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertTrue(operator.inv(4) == -5)
1890c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi
1900c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi    def test_isCallable(self):
1910c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertRaises(TypeError, operator.isCallable)
1920c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        class C:
1930c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi            pass
1940c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        def check(self, o, v):
1950c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi            with test_support.check_py3k_warnings():
1960c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi                self.assertEqual(operator.isCallable(o), v)
1970c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi                self.assertEqual(callable(o), v)
1980c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        check(self, 4, 0)
1990c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        check(self, operator.isCallable, 1)
2000c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        check(self, C, 1)
2010c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        check(self, C(), 0)
2020c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi
2030c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi    def test_isMappingType(self):
2040c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertRaises(TypeError, operator.isMappingType)
2050c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertFalse(operator.isMappingType(1))
2060c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertFalse(operator.isMappingType(operator.isMappingType))
2070c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertTrue(operator.isMappingType(operator.__dict__))
2080c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertTrue(operator.isMappingType({}))
2090c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi
2100c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi    def test_isNumberType(self):
2110c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertRaises(TypeError, operator.isNumberType)
2120c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertTrue(operator.isNumberType(8))
2130c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertTrue(operator.isNumberType(8j))
2140c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertTrue(operator.isNumberType(8L))
2150c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertTrue(operator.isNumberType(8.3))
2160c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertFalse(operator.isNumberType(dir()))
2170c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi
2180c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi    def test_isSequenceType(self):
2190c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertRaises(TypeError, operator.isSequenceType)
2200c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertTrue(operator.isSequenceType(dir()))
2210c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertTrue(operator.isSequenceType(()))
2220c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertTrue(operator.isSequenceType(xrange(10)))
2230c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertTrue(operator.isSequenceType('yeahbuddy'))
2240c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertFalse(operator.isSequenceType(3))
2250c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        class Dict(dict): pass
2260c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertFalse(operator.isSequenceType(Dict()))
2270c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi
2280c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi    def test_lshift(self):
2290c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertRaises(TypeError, operator.lshift)
2300c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertRaises(TypeError, operator.lshift, None, 42)
2310c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertTrue(operator.lshift(5, 1) == 10)
2320c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertTrue(operator.lshift(5, 0) == 5)
2330c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertRaises(ValueError, operator.lshift, 2, -1)
2340c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi
2350c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi    def test_mod(self):
2360c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertRaises(TypeError, operator.mod)
2370c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertRaises(TypeError, operator.mod, None, 42)
2380c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertTrue(operator.mod(5, 2) == 1)
2390c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi
2400c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi    def test_mul(self):
2410c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertRaises(TypeError, operator.mul)
2420c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertRaises(TypeError, operator.mul, None, None)
2430c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertTrue(operator.mul(5, 2) == 10)
2440c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi
2450c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi    def test_neg(self):
2460c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertRaises(TypeError, operator.neg)
2470c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertRaises(TypeError, operator.neg, None)
2480c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertTrue(operator.neg(5) == -5)
2490c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertTrue(operator.neg(-5) == 5)
2500c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertTrue(operator.neg(0) == 0)
2510c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertTrue(operator.neg(-0) == 0)
2520c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi
2530c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi    def test_bitwise_or(self):
2540c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertRaises(TypeError, operator.or_)
2550c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertRaises(TypeError, operator.or_, None, None)
2560c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertTrue(operator.or_(0xa, 0x5) == 0xf)
2570c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi
2580c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi    def test_pos(self):
2590c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertRaises(TypeError, operator.pos)
2600c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertRaises(TypeError, operator.pos, None)
2610c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertTrue(operator.pos(5) == 5)
2620c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertTrue(operator.pos(-5) == -5)
2630c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertTrue(operator.pos(0) == 0)
2640c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertTrue(operator.pos(-0) == 0)
2650c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi
2660c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi    def test_pow(self):
2670c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertRaises(TypeError, operator.pow)
2680c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertRaises(TypeError, operator.pow, None, None)
2690c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertTrue(operator.pow(3,5) == 3**5)
2700c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertTrue(operator.__pow__(3,5) == 3**5)
2710c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertRaises(TypeError, operator.pow, 1)
2720c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertRaises(TypeError, operator.pow, 1, 2, 3)
2730c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi
2740c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi    def test_repeat(self):
2750c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        a = range(3)
2760c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertRaises(TypeError, operator.repeat)
2770c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertRaises(TypeError, operator.repeat, a, None)
2780c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertTrue(operator.repeat(a, 2) == a+a)
2790c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertTrue(operator.repeat(a, 1) == a)
2800c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertTrue(operator.repeat(a, 0) == [])
2810c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        a = (1, 2, 3)
2820c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertTrue(operator.repeat(a, 2) == a+a)
2830c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertTrue(operator.repeat(a, 1) == a)
2840c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertTrue(operator.repeat(a, 0) == ())
2850c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        a = '123'
2860c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertTrue(operator.repeat(a, 2) == a+a)
2870c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertTrue(operator.repeat(a, 1) == a)
2880c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertTrue(operator.repeat(a, 0) == '')
2890c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        a = Seq1([4, 5, 6])
2900c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertTrue(operator.repeat(a, 2) == [4, 5, 6, 4, 5, 6])
2910c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertTrue(operator.repeat(a, 1) == [4, 5, 6])
2920c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertTrue(operator.repeat(a, 0) == [])
2930c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        a = Seq2([4, 5, 6])
2940c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertTrue(operator.repeat(a, 2) == [4, 5, 6, 4, 5, 6])
2950c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertTrue(operator.repeat(a, 1) == [4, 5, 6])
2960c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertTrue(operator.repeat(a, 0) == [])
2970c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertRaises(TypeError, operator.repeat, 6, 7)
2980c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi
2990c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi    def test_rshift(self):
3000c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertRaises(TypeError, operator.rshift)
3010c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertRaises(TypeError, operator.rshift, None, 42)
3020c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertTrue(operator.rshift(5, 1) == 2)
3030c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertTrue(operator.rshift(5, 0) == 5)
3040c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertRaises(ValueError, operator.rshift, 2, -1)
3050c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi
3060c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi    def test_contains(self):
3070c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertRaises(TypeError, operator.contains)
3080c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertRaises(TypeError, operator.contains, None, None)
3090c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertTrue(operator.contains(range(4), 2))
3100c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertFalse(operator.contains(range(4), 5))
3110c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        with test_support.check_py3k_warnings():
3120c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi            self.assertTrue(operator.sequenceIncludes(range(4), 2))
3130c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi            self.assertFalse(operator.sequenceIncludes(range(4), 5))
3140c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi
3150c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi    def test_setitem(self):
3160c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        a = range(3)
3170c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertRaises(TypeError, operator.setitem, a)
3180c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertRaises(TypeError, operator.setitem, a, None, None)
3190c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertTrue(operator.setitem(a, 0, 2) is None)
3200c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertTrue(a == [2, 1, 2])
3210c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertRaises(IndexError, operator.setitem, a, 4, 2)
3220c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi
3230c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi    def test_setslice(self):
3240c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        a = range(4)
3250c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertRaises(TypeError, operator.setslice, a)
3260c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertRaises(TypeError, operator.setslice, a, None, None, None)
3270c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertTrue(operator.setslice(a, 1, 3, [2, 1]) is None)
3280c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertTrue(a == [0, 2, 1, 3])
3290c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        operator.setslice(a, 0, test_support.MAX_Py_ssize_t, [])
3300c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertTrue(a == [])
3310c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi
3320c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi    def test_sub(self):
3330c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertRaises(TypeError, operator.sub)
3340c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertRaises(TypeError, operator.sub, None, None)
3350c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertTrue(operator.sub(5, 2) == 3)
3360c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi
3370c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi    def test_truth(self):
3380c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        class C(object):
3390c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi            def __nonzero__(self):
3400c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi                raise SyntaxError
3410c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertRaises(TypeError, operator.truth)
3420c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertRaises(SyntaxError, operator.truth, C())
3430c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertTrue(operator.truth(5))
3440c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertTrue(operator.truth([0]))
3450c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertFalse(operator.truth(0))
3460c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertFalse(operator.truth([]))
3470c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi
3480c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi    def test_bitwise_xor(self):
3490c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertRaises(TypeError, operator.xor)
3500c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertRaises(TypeError, operator.xor, None, None)
3510c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertTrue(operator.xor(0xb, 0xc) == 0x7)
3520c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi
3530c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi    def test_is(self):
3540c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        a = b = 'xyzpdq'
3550c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        c = a[:3] + b[3:]
3560c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertRaises(TypeError, operator.is_)
3570c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertTrue(operator.is_(a, b))
3580c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertFalse(operator.is_(a,c))
3590c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi
3600c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi    def test_is_not(self):
3610c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        a = b = 'xyzpdq'
3620c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        c = a[:3] + b[3:]
3630c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertRaises(TypeError, operator.is_not)
3640c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertFalse(operator.is_not(a, b))
3650c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertTrue(operator.is_not(a,c))
3660c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi
3670c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi    def test_attrgetter(self):
3680c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        class A:
3690c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi            pass
3700c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        a = A()
3710c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        a.name = 'arthur'
3720c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        f = operator.attrgetter('name')
3730c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertEqual(f(a), 'arthur')
3740c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        f = operator.attrgetter('rank')
3750c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertRaises(AttributeError, f, a)
3760c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        f = operator.attrgetter(2)
3770c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertRaises(TypeError, f, a)
3780c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertRaises(TypeError, operator.attrgetter)
3790c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi
3800c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        # multiple gets
3810c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        record = A()
3820c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        record.x = 'X'
3830c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        record.y = 'Y'
3840c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        record.z = 'Z'
3850c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertEqual(operator.attrgetter('x','z','y')(record), ('X', 'Z', 'Y'))
3860c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertRaises(TypeError, operator.attrgetter('x', (), 'y'), record)
3870c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi
3880c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        class C(object):
3890c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi            def __getattr__(self, name):
3900c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi                raise SyntaxError
3910c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertRaises(SyntaxError, operator.attrgetter('foo'), C())
3920c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi
3930c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        # recursive gets
3940c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        a = A()
3950c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        a.name = 'arthur'
3960c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        a.child = A()
3970c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        a.child.name = 'thomas'
3980c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        f = operator.attrgetter('child.name')
3990c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertEqual(f(a), 'thomas')
4000c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertRaises(AttributeError, f, a.child)
4010c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        f = operator.attrgetter('name', 'child.name')
4020c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertEqual(f(a), ('arthur', 'thomas'))
4030c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        f = operator.attrgetter('name', 'child.name', 'child.child.name')
4040c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertRaises(AttributeError, f, a)
4050c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi
4060c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        a.child.child = A()
4070c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        a.child.child.name = 'johnson'
4080c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        f = operator.attrgetter('child.child.name')
4090c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertEqual(f(a), 'johnson')
4100c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        f = operator.attrgetter('name', 'child.name', 'child.child.name')
4110c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertEqual(f(a), ('arthur', 'thomas', 'johnson'))
4120c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi
4130c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi    def test_itemgetter(self):
4140c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        a = 'ABCDE'
4150c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        f = operator.itemgetter(2)
4160c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertEqual(f(a), 'C')
4170c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        f = operator.itemgetter(10)
4180c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertRaises(IndexError, f, a)
4190c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi
4200c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        class C(object):
4210c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi            def __getitem__(self, name):
4220c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi                raise SyntaxError
4230c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertRaises(SyntaxError, operator.itemgetter(42), C())
4240c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi
4250c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        f = operator.itemgetter('name')
4260c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertRaises(TypeError, f, a)
4270c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertRaises(TypeError, operator.itemgetter)
4280c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi
4290c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        d = dict(key='val')
4300c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        f = operator.itemgetter('key')
4310c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertEqual(f(d), 'val')
4320c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        f = operator.itemgetter('nonkey')
4330c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertRaises(KeyError, f, d)
4340c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi
4350c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        # example used in the docs
4360c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        inventory = [('apple', 3), ('banana', 2), ('pear', 5), ('orange', 1)]
4370c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        getcount = operator.itemgetter(1)
4380c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertEqual(map(getcount, inventory), [3, 2, 5, 1])
4390c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertEqual(sorted(inventory, key=getcount),
4400c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi            [('orange', 1), ('banana', 2), ('apple', 3), ('pear', 5)])
4410c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi
4420c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        # multiple gets
4430c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        data = map(str, range(20))
4440c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertEqual(operator.itemgetter(2,10,5)(data), ('2', '10', '5'))
4450c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertRaises(TypeError, operator.itemgetter(2, 'x', 5), data)
4460c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi
4470c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi    def test_methodcaller(self):
4480c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertRaises(TypeError, operator.methodcaller)
4490c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        class A:
4500c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi            def foo(self, *args, **kwds):
4510c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi                return args[0] + args[1]
4520c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi            def bar(self, f=42):
4530c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi                return f
4540c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        a = A()
4550c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        f = operator.methodcaller('foo')
4560c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertRaises(IndexError, f, a)
4570c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        f = operator.methodcaller('foo', 1, 2)
4580c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertEqual(f(a), 3)
4590c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        f = operator.methodcaller('bar')
4600c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertEqual(f(a), 42)
4610c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertRaises(TypeError, f, a, a)
4620c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        f = operator.methodcaller('bar', f=5)
4630c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertEqual(f(a), 5)
4640c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi
4650c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi    def test_inplace(self):
4660c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        class C(object):
4670c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi            def __iadd__     (self, other): return "iadd"
4680c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi            def __iand__     (self, other): return "iand"
4690c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi            def __idiv__     (self, other): return "idiv"
4700c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi            def __ifloordiv__(self, other): return "ifloordiv"
4710c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi            def __ilshift__  (self, other): return "ilshift"
4720c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi            def __imod__     (self, other): return "imod"
4730c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi            def __imul__     (self, other): return "imul"
4740c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi            def __ior__      (self, other): return "ior"
4750c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi            def __ipow__     (self, other): return "ipow"
4760c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi            def __irshift__  (self, other): return "irshift"
4770c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi            def __isub__     (self, other): return "isub"
4780c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi            def __itruediv__ (self, other): return "itruediv"
4790c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi            def __ixor__     (self, other): return "ixor"
4800c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi            def __getitem__(self, other): return 5  # so that C is a sequence
4810c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        c = C()
4820c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertEqual(operator.iadd     (c, 5), "iadd")
4830c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertEqual(operator.iand     (c, 5), "iand")
4840c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertEqual(operator.idiv     (c, 5), "idiv")
4850c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertEqual(operator.ifloordiv(c, 5), "ifloordiv")
4860c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertEqual(operator.ilshift  (c, 5), "ilshift")
4870c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertEqual(operator.imod     (c, 5), "imod")
4880c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertEqual(operator.imul     (c, 5), "imul")
4890c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertEqual(operator.ior      (c, 5), "ior")
4900c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertEqual(operator.ipow     (c, 5), "ipow")
4910c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertEqual(operator.irshift  (c, 5), "irshift")
4920c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertEqual(operator.isub     (c, 5), "isub")
4930c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertEqual(operator.itruediv (c, 5), "itruediv")
4940c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertEqual(operator.ixor     (c, 5), "ixor")
4950c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertEqual(operator.iconcat  (c, c), "iadd")
4960c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertEqual(operator.irepeat  (c, 5), "imul")
4970c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertEqual(operator.__iadd__     (c, 5), "iadd")
4980c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertEqual(operator.__iand__     (c, 5), "iand")
4990c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertEqual(operator.__idiv__     (c, 5), "idiv")
5000c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertEqual(operator.__ifloordiv__(c, 5), "ifloordiv")
5010c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertEqual(operator.__ilshift__  (c, 5), "ilshift")
5020c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertEqual(operator.__imod__     (c, 5), "imod")
5030c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertEqual(operator.__imul__     (c, 5), "imul")
5040c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertEqual(operator.__ior__      (c, 5), "ior")
5050c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertEqual(operator.__ipow__     (c, 5), "ipow")
5060c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertEqual(operator.__irshift__  (c, 5), "irshift")
5070c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertEqual(operator.__isub__     (c, 5), "isub")
5080c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertEqual(operator.__itruediv__ (c, 5), "itruediv")
5090c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertEqual(operator.__ixor__     (c, 5), "ixor")
5100c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertEqual(operator.__iconcat__  (c, c), "iadd")
5110c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertEqual(operator.__irepeat__  (c, 5), "imul")
5120c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi
5130c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yidef test_main(verbose=None):
5140c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi    import sys
5150c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi    test_classes = (
5160c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        OperatorTestCase,
5170c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi    )
5180c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi
5190c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi    test_support.run_unittest(*test_classes)
5200c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi
5210c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi    # verify reference counting
5220c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi    if verbose and hasattr(sys, "gettotalrefcount"):
5230c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        import gc
5240c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        counts = [None] * 5
5250c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        for i in xrange(len(counts)):
5260c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi            test_support.run_unittest(*test_classes)
5270c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi            gc.collect()
5280c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi            counts[i] = sys.gettotalrefcount()
5290c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        print counts
5300c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi
5310c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiif __name__ == "__main__":
5320c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi    test_main(verbose=True)
533