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