14adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# Python test set -- built-in functions
24adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
34adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoimport platform
44adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoimport unittest
54adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaofrom test.test_support import fcmp, have_unicode, TESTFN, unlink, \
64adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                              run_unittest, check_py3k_warnings
74adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoimport warnings
84adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaofrom operator import neg
94adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
104adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoimport sys, cStringIO, random, UserDict
114adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
124adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# count the number of test runs.
134adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# used to skip running test_execfile() multiple times
144adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# and to create unique strings to intern in test_intern()
154adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaonumruns = 0
164adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
174adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass Squares:
184adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
194adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    def __init__(self, max):
204adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.max = max
214adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.sofar = []
224adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
234adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    def __len__(self): return len(self.sofar)
244adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
254adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    def __getitem__(self, i):
264adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        if not 0 <= i < self.max: raise IndexError
274adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        n = len(self.sofar)
284adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        while n <= i:
294adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            self.sofar.append(n*n)
304adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            n += 1
314adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        return self.sofar[i]
324adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
334adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass StrSquares:
344adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
354adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    def __init__(self, max):
364adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.max = max
374adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.sofar = []
384adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
394adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    def __len__(self):
404adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        return len(self.sofar)
414adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
424adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    def __getitem__(self, i):
434adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        if not 0 <= i < self.max:
444adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            raise IndexError
454adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        n = len(self.sofar)
464adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        while n <= i:
474adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            self.sofar.append(str(n*n))
484adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            n += 1
494adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        return self.sofar[i]
504adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
514adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass BitBucket:
524adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    def write(self, line):
534adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        pass
544adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
554adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
564adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestFailingBool:
574adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    def __nonzero__(self):
584adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        raise RuntimeError
594adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
604adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestFailingIter:
614adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    def __iter__(self):
624adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        raise RuntimeError
634adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
644adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass BuiltinTest(unittest.TestCase):
654adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
664adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    def test_import(self):
674adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        __import__('sys')
684adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        __import__('time')
694adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        __import__('string')
704adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        __import__(name='sys')
714adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        __import__(name='time', level=0)
724adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(ImportError, __import__, 'spamspam')
734adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(TypeError, __import__, 1, 2, 3, 4)
744adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(ValueError, __import__, '')
754adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(TypeError, __import__, 'sys', name='sys')
764adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
774adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    def test_abs(self):
784adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        # int
794adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(abs(0), 0)
804adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(abs(1234), 1234)
814adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(abs(-1234), 1234)
824adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertTrue(abs(-sys.maxint-1) > 0)
834adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        # float
844adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(abs(0.0), 0.0)
854adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(abs(3.14), 3.14)
864adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(abs(-3.14), 3.14)
874adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        # long
884adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(abs(0L), 0L)
894adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(abs(1234L), 1234L)
904adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(abs(-1234L), 1234L)
914adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        # str
924adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(TypeError, abs, 'a')
934adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        # bool
944adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(abs(True), 1)
954adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(abs(False), 0)
964adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        # other
974adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(TypeError, abs)
984adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(TypeError, abs, None)
994adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        class AbsClass(object):
1004adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            def __abs__(self):
1014adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                return -5
1024adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(abs(AbsClass()), -5)
1034adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
1044adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    def test_all(self):
1054adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(all([2, 4, 6]), True)
1064adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(all([2, None, 6]), False)
1074adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(RuntimeError, all, [2, TestFailingBool(), 6])
1084adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(RuntimeError, all, TestFailingIter())
1094adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(TypeError, all, 10)               # Non-iterable
1104adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(TypeError, all)                   # No args
1114adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(TypeError, all, [2, 4, 6], [])    # Too many args
1124adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(all([]), True)                     # Empty iterator
1134adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(all([0, TestFailingBool()]), False)# Short-circuit
1144adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        S = [50, 60]
1154adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(all(x > 42 for x in S), True)
1164adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        S = [50, 40, 60]
1174adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(all(x > 42 for x in S), False)
1184adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
1194adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    def test_any(self):
1204adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(any([None, None, None]), False)
1214adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(any([None, 4, None]), True)
1224adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(RuntimeError, any, [None, TestFailingBool(), 6])
1234adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(RuntimeError, any, TestFailingIter())
1244adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(TypeError, any, 10)               # Non-iterable
1254adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(TypeError, any)                   # No args
1264adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(TypeError, any, [2, 4, 6], [])    # Too many args
1274adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(any([]), False)                    # Empty iterator
1284adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(any([1, TestFailingBool()]), True) # Short-circuit
1294adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        S = [40, 60, 30]
1304adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(any(x > 42 for x in S), True)
1314adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        S = [10, 20, 30]
1324adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(any(x > 42 for x in S), False)
1334adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
1344adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    def test_neg(self):
1354adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        x = -sys.maxint-1
1364adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertTrue(isinstance(x, int))
1374adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(-x, sys.maxint+1)
1384adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
1394adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    def test_apply(self):
1404adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        def f0(*args):
1414adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            self.assertEqual(args, ())
1424adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        def f1(a1):
1434adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            self.assertEqual(a1, 1)
1444adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        def f2(a1, a2):
1454adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            self.assertEqual(a1, 1)
1464adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            self.assertEqual(a2, 2)
1474adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        def f3(a1, a2, a3):
1484adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            self.assertEqual(a1, 1)
1494adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            self.assertEqual(a2, 2)
1504adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            self.assertEqual(a3, 3)
1514adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        apply(f0, ())
1524adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        apply(f1, (1,))
1534adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        apply(f2, (1, 2))
1544adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        apply(f3, (1, 2, 3))
1554adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
1564adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        # A PyCFunction that takes only positional parameters should allow an
1574adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        # empty keyword dictionary to pass without a complaint, but raise a
1584adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        # TypeError if the dictionary is non-empty.
1594adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        apply(id, (1,), {})
1604adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(TypeError, apply, id, (1,), {"foo": 1})
1614adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(TypeError, apply)
1624adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(TypeError, apply, id, 42)
1634adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(TypeError, apply, id, (42,), 42)
1644adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
1654adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    def test_callable(self):
1664adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertTrue(callable(len))
1674adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertFalse(callable("a"))
1684adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertTrue(callable(callable))
1694adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertTrue(callable(lambda x, y: x + y))
1704adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertFalse(callable(__builtins__))
1714adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        def f(): pass
1724adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertTrue(callable(f))
1734adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
1744adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        class Classic:
1754adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            def meth(self): pass
1764adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertTrue(callable(Classic))
1774adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        c = Classic()
1784adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertTrue(callable(c.meth))
1794adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertFalse(callable(c))
1804adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
1814adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        class NewStyle(object):
1824adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            def meth(self): pass
1834adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertTrue(callable(NewStyle))
1844adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        n = NewStyle()
1854adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertTrue(callable(n.meth))
1864adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertFalse(callable(n))
1874adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
1884adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        # Classic and new-style classes evaluate __call__() differently
1894adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        c.__call__ = None
1904adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertTrue(callable(c))
1914adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        del c.__call__
1924adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertFalse(callable(c))
1934adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        n.__call__ = None
1944adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertFalse(callable(n))
1954adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        del n.__call__
1964adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertFalse(callable(n))
1974adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
1984adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        class N2(object):
1994adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            def __call__(self): pass
2004adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        n2 = N2()
2014adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertTrue(callable(n2))
2024adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        class N3(N2): pass
2034adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        n3 = N3()
2044adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertTrue(callable(n3))
2054adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
2064adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    def test_chr(self):
2074adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(chr(32), ' ')
2084adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(chr(65), 'A')
2094adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(chr(97), 'a')
2104adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(chr(0xff), '\xff')
2114adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(ValueError, chr, 256)
2124adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(TypeError, chr)
2134adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
2144adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    def test_cmp(self):
2154adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(cmp(-1, 1), -1)
2164adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(cmp(1, -1), 1)
2174adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(cmp(1, 1), 0)
2184adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        # verify that circular objects are not handled
2194adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        a = []; a.append(a)
2204adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        b = []; b.append(b)
2214adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        from UserList import UserList
2224adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        c = UserList(); c.append(c)
2234adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(RuntimeError, cmp, a, b)
2244adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(RuntimeError, cmp, b, c)
2254adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(RuntimeError, cmp, c, a)
2264adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(RuntimeError, cmp, a, c)
2274adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao       # okay, now break the cycles
2284adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        a.pop(); b.pop(); c.pop()
2294adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(TypeError, cmp)
2304adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
2314adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    def test_coerce(self):
2324adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertTrue(not fcmp(coerce(1, 1.1), (1.0, 1.1)))
2334adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(coerce(1, 1L), (1L, 1L))
2344adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertTrue(not fcmp(coerce(1L, 1.1), (1.0, 1.1)))
2354adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(TypeError, coerce)
2364adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        class BadNumber:
2374adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            def __coerce__(self, other):
2384adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                raise ValueError
2394adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(ValueError, coerce, 42, BadNumber())
2404adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(OverflowError, coerce, 0.5, int("12345" * 1000))
2414adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
2424adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    def test_compile(self):
2434adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        compile('print 1\n', '', 'exec')
2444adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        bom = '\xef\xbb\xbf'
2454adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        compile(bom + 'print 1\n', '', 'exec')
2464adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        compile(source='pass', filename='?', mode='exec')
2474adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        compile(dont_inherit=0, filename='tmp', source='0', mode='eval')
2484adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        compile('pass', '?', dont_inherit=1, mode='exec')
2494adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(TypeError, compile)
2504adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(ValueError, compile, 'print 42\n', '<string>', 'badmode')
2514adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(ValueError, compile, 'print 42\n', '<string>', 'single', 0xff)
2524adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(TypeError, compile, chr(0), 'f', 'exec')
2534adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(TypeError, compile, 'pass', '?', 'exec',
2544adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                          mode='eval', source='0', filename='tmp')
2554adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        if have_unicode:
2564adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            compile(unicode('print u"\xc3\xa5"\n', 'utf8'), '', 'exec')
2574adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            self.assertRaises(TypeError, compile, unichr(0), 'f', 'exec')
2584adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            self.assertRaises(ValueError, compile, unicode('a = 1'), 'f', 'bad')
2594adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
2604adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
2614adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    def test_delattr(self):
2624adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        import sys
2634adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        sys.spam = 1
2644adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        delattr(sys, 'spam')
2654adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(TypeError, delattr)
2664adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
2674adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    def test_dir(self):
2684adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        # dir(wrong number of arguments)
2694adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(TypeError, dir, 42, 42)
2704adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
2714adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        # dir() - local scope
2724adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        local_var = 1
2734adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertIn('local_var', dir())
2744adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
2754adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        # dir(module)
2764adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        import sys
2774adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertIn('exit', dir(sys))
2784adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
2794adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        # dir(module_with_invalid__dict__)
2804adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        import types
2814adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        class Foo(types.ModuleType):
2824adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            __dict__ = 8
2834adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        f = Foo("foo")
2844adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(TypeError, dir, f)
2854adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
2864adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        # dir(type)
2874adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertIn("strip", dir(str))
2884adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertNotIn("__mro__", dir(str))
2894adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
2904adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        # dir(obj)
2914adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        class Foo(object):
2924adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            def __init__(self):
2934adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                self.x = 7
2944adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                self.y = 8
2954adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                self.z = 9
2964adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        f = Foo()
2974adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertIn("y", dir(f))
2984adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
2994adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        # dir(obj_no__dict__)
3004adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        class Foo(object):
3014adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            __slots__ = []
3024adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        f = Foo()
3034adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertIn("__repr__", dir(f))
3044adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
3054adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        # dir(obj_no__class__with__dict__)
3064adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        # (an ugly trick to cause getattr(f, "__class__") to fail)
3074adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        class Foo(object):
3084adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            __slots__ = ["__class__", "__dict__"]
3094adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            def __init__(self):
3104adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                self.bar = "wow"
3114adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        f = Foo()
3124adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertNotIn("__repr__", dir(f))
3134adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertIn("bar", dir(f))
3144adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
3154adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        # dir(obj_using __dir__)
3164adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        class Foo(object):
3174adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            def __dir__(self):
3184adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                return ["kan", "ga", "roo"]
3194adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        f = Foo()
3204adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertTrue(dir(f) == ["ga", "kan", "roo"])
3214adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
3224adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        # dir(obj__dir__not_list)
3234adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        class Foo(object):
3244adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            def __dir__(self):
3254adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                return 7
3264adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        f = Foo()
3274adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(TypeError, dir, f)
3284adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
3294adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    def test_divmod(self):
3304adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(divmod(12, 7), (1, 5))
3314adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(divmod(-12, 7), (-2, 2))
3324adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(divmod(12, -7), (-2, -2))
3334adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(divmod(-12, -7), (1, -5))
3344adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
3354adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(divmod(12L, 7L), (1L, 5L))
3364adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(divmod(-12L, 7L), (-2L, 2L))
3374adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(divmod(12L, -7L), (-2L, -2L))
3384adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(divmod(-12L, -7L), (1L, -5L))
3394adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
3404adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(divmod(12, 7L), (1, 5L))
3414adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(divmod(-12, 7L), (-2, 2L))
3424adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(divmod(12L, -7), (-2L, -2))
3434adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(divmod(-12L, -7), (1L, -5))
3444adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
3454adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(divmod(-sys.maxint-1, -1),
3464adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                         (sys.maxint+1, 0))
3474adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
3484adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertTrue(not fcmp(divmod(3.25, 1.0), (3.0, 0.25)))
3494adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertTrue(not fcmp(divmod(-3.25, 1.0), (-4.0, 0.75)))
3504adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertTrue(not fcmp(divmod(3.25, -1.0), (-4.0, -0.75)))
3514adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertTrue(not fcmp(divmod(-3.25, -1.0), (3.0, -0.25)))
3524adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
3534adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(TypeError, divmod)
3544adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
3554adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    def test_eval(self):
3564adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(eval('1+1'), 2)
3574adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(eval(' 1+1\n'), 2)
3584adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        globals = {'a': 1, 'b': 2}
3594adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        locals = {'b': 200, 'c': 300}
3604adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(eval('a', globals) , 1)
3614adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(eval('a', globals, locals), 1)
3624adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(eval('b', globals, locals), 200)
3634adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(eval('c', globals, locals), 300)
3644adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        if have_unicode:
3654adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            self.assertEqual(eval(unicode('1+1')), 2)
3664adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            self.assertEqual(eval(unicode(' 1+1\n')), 2)
3674adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        globals = {'a': 1, 'b': 2}
3684adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        locals = {'b': 200, 'c': 300}
3694adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        if have_unicode:
3704adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            self.assertEqual(eval(unicode('a'), globals), 1)
3714adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            self.assertEqual(eval(unicode('a'), globals, locals), 1)
3724adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            self.assertEqual(eval(unicode('b'), globals, locals), 200)
3734adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            self.assertEqual(eval(unicode('c'), globals, locals), 300)
3744adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            bom = '\xef\xbb\xbf'
3754adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            self.assertEqual(eval(bom + 'a', globals, locals), 1)
3764adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            self.assertEqual(eval(unicode('u"\xc3\xa5"', 'utf8'), globals),
3774adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                             unicode('\xc3\xa5', 'utf8'))
3784adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(TypeError, eval)
3794adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(TypeError, eval, ())
3804adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
3814adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    def test_general_eval(self):
3824adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        # Tests that general mappings can be used for the locals argument
3834adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
3844adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        class M:
3854adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            "Test mapping interface versus possible calls from eval()."
3864adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            def __getitem__(self, key):
3874adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                if key == 'a':
3884adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                    return 12
3894adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                raise KeyError
3904adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            def keys(self):
3914adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                return list('xyz')
3924adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
3934adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        m = M()
3944adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        g = globals()
3954adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(eval('a', g, m), 12)
3964adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(NameError, eval, 'b', g, m)
3974adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(eval('dir()', g, m), list('xyz'))
3984adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(eval('globals()', g, m), g)
3994adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(eval('locals()', g, m), m)
4004adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(TypeError, eval, 'a', m)
4014adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        class A:
4024adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            "Non-mapping"
4034adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            pass
4044adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        m = A()
4054adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(TypeError, eval, 'a', g, m)
4064adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
4074adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        # Verify that dict subclasses work as well
4084adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        class D(dict):
4094adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            def __getitem__(self, key):
4104adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                if key == 'a':
4114adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                    return 12
4124adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                return dict.__getitem__(self, key)
4134adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            def keys(self):
4144adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                return list('xyz')
4154adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
4164adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        d = D()
4174adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(eval('a', g, d), 12)
4184adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(NameError, eval, 'b', g, d)
4194adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(eval('dir()', g, d), list('xyz'))
4204adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(eval('globals()', g, d), g)
4214adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(eval('locals()', g, d), d)
4224adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
4234adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        # Verify locals stores (used by list comps)
4244adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        eval('[locals() for i in (2,3)]', g, d)
4254adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        eval('[locals() for i in (2,3)]', g, UserDict.UserDict())
4264adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
4274adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        class SpreadSheet:
4284adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            "Sample application showing nested, calculated lookups."
4294adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            _cells = {}
4304adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            def __setitem__(self, key, formula):
4314adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                self._cells[key] = formula
4324adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            def __getitem__(self, key):
4334adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                return eval(self._cells[key], globals(), self)
4344adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
4354adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        ss = SpreadSheet()
4364adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        ss['a1'] = '5'
4374adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        ss['a2'] = 'a1*6'
4384adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        ss['a3'] = 'a2*7'
4394adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(ss['a3'], 210)
4404adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
4414adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        # Verify that dir() catches a non-list returned by eval
4424adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        # SF bug #1004669
4434adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        class C:
4444adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            def __getitem__(self, item):
4454adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                raise KeyError(item)
4464adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            def keys(self):
4474adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                return 'a'
4484adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(TypeError, eval, 'dir()', globals(), C())
4494adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
4504adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    # Done outside of the method test_z to get the correct scope
4514adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    z = 0
4524adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    f = open(TESTFN, 'w')
4534adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    f.write('z = z+1\n')
4544adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    f.write('z = z*2\n')
4554adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    f.close()
4564adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    with check_py3k_warnings(("execfile.. not supported in 3.x",
4574adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                              DeprecationWarning)):
4584adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        execfile(TESTFN)
4594adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
4604adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    def test_execfile(self):
4614adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        global numruns
4624adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        if numruns:
4634adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            return
4644adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        numruns += 1
4654adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
4664adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        globals = {'a': 1, 'b': 2}
4674adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        locals = {'b': 200, 'c': 300}
4684adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
4694adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(self.__class__.z, 2)
4704adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        globals['z'] = 0
4714adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        execfile(TESTFN, globals)
4724adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(globals['z'], 2)
4734adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        locals['z'] = 0
4744adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        execfile(TESTFN, globals, locals)
4754adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(locals['z'], 2)
4764adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
4774adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        class M:
4784adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            "Test mapping interface versus possible calls from execfile()."
4794adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            def __init__(self):
4804adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                self.z = 10
4814adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            def __getitem__(self, key):
4824adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                if key == 'z':
4834adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                    return self.z
4844adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                raise KeyError
4854adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            def __setitem__(self, key, value):
4864adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                if key == 'z':
4874adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                    self.z = value
4884adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                    return
4894adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                raise KeyError
4904adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
4914adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        locals = M()
4924adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        locals['z'] = 0
4934adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        execfile(TESTFN, globals, locals)
4944adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(locals['z'], 2)
4954adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
4964adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        unlink(TESTFN)
4974adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(TypeError, execfile)
4984adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(TypeError, execfile, TESTFN, {}, ())
4994adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        import os
5004adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(IOError, execfile, os.curdir)
5014adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(IOError, execfile, "I_dont_exist")
5024adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
5034adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    def test_filter(self):
5044adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(filter(lambda c: 'a' <= c <= 'z', 'Hello World'), 'elloorld')
5054adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(filter(None, [1, 'hello', [], [3], '', None, 9, 0]), [1, 'hello', [3], 9])
5064adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(filter(lambda x: x > 0, [1, -3, 9, 0, 2]), [1, 9, 2])
5074adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(filter(None, Squares(10)), [1, 4, 9, 16, 25, 36, 49, 64, 81])
5084adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(filter(lambda x: x%2, Squares(10)), [1, 9, 25, 49, 81])
5094adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        def identity(item):
5104adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            return 1
5114adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        filter(identity, Squares(5))
5124adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(TypeError, filter)
5134adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        class BadSeq(object):
5144adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            def __getitem__(self, index):
5154adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                if index<4:
5164adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                    return 42
5174adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                raise ValueError
5184adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(ValueError, filter, lambda x: x, BadSeq())
5194adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        def badfunc():
5204adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            pass
5214adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(TypeError, filter, badfunc, range(5))
5224adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
5234adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        # test bltinmodule.c::filtertuple()
5244adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(filter(None, (1, 2)), (1, 2))
5254adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(filter(lambda x: x>=3, (1, 2, 3, 4)), (3, 4))
5264adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(TypeError, filter, 42, (1, 2))
5274adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
5284adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        # test bltinmodule.c::filterstring()
5294adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(filter(None, "12"), "12")
5304adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(filter(lambda x: x>="3", "1234"), "34")
5314adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(TypeError, filter, 42, "12")
5324adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        class badstr(str):
5334adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            def __getitem__(self, index):
5344adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                raise ValueError
5354adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(ValueError, filter, lambda x: x >="3", badstr("1234"))
5364adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
5374adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        class badstr2(str):
5384adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            def __getitem__(self, index):
5394adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                return 42
5404adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(TypeError, filter, lambda x: x >=42, badstr2("1234"))
5414adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
5424adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        class weirdstr(str):
5434adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            def __getitem__(self, index):
5444adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                return weirdstr(2*str.__getitem__(self, index))
5454adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(filter(lambda x: x>="33", weirdstr("1234")), "3344")
5464adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
5474adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        class shiftstr(str):
5484adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            def __getitem__(self, index):
5494adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                return chr(ord(str.__getitem__(self, index))+1)
5504adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(filter(lambda x: x>="3", shiftstr("1234")), "345")
5514adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
5524adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        if have_unicode:
5534adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            # test bltinmodule.c::filterunicode()
5544adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            self.assertEqual(filter(None, unicode("12")), unicode("12"))
5554adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            self.assertEqual(filter(lambda x: x>="3", unicode("1234")), unicode("34"))
5564adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            self.assertRaises(TypeError, filter, 42, unicode("12"))
5574adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            self.assertRaises(ValueError, filter, lambda x: x >="3", badstr(unicode("1234")))
5584adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
5594adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            class badunicode(unicode):
5604adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                def __getitem__(self, index):
5614adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                    return 42
5624adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            self.assertRaises(TypeError, filter, lambda x: x >=42, badunicode("1234"))
5634adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
5644adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            class weirdunicode(unicode):
5654adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                def __getitem__(self, index):
5664adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                    return weirdunicode(2*unicode.__getitem__(self, index))
5674adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            self.assertEqual(
5684adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                filter(lambda x: x>=unicode("33"), weirdunicode("1234")), unicode("3344"))
5694adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
5704adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            class shiftunicode(unicode):
5714adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                def __getitem__(self, index):
5724adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                    return unichr(ord(unicode.__getitem__(self, index))+1)
5734adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            self.assertEqual(
5744adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                filter(lambda x: x>=unicode("3"), shiftunicode("1234")),
5754adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                unicode("345")
5764adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            )
5774adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
5784adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    def test_filter_subclasses(self):
5794adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        # test that filter() never returns tuple, str or unicode subclasses
5804adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        # and that the result always goes through __getitem__
5814adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        funcs = (None, bool, lambda x: True)
5824adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        class tuple2(tuple):
5834adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            def __getitem__(self, index):
5844adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                return 2*tuple.__getitem__(self, index)
5854adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        class str2(str):
5864adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            def __getitem__(self, index):
5874adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                return 2*str.__getitem__(self, index)
5884adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        inputs = {
5894adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            tuple2: {(): (), (1, 2, 3): (2, 4, 6)},
5904adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            str2:   {"": "", "123": "112233"}
5914adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        }
5924adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        if have_unicode:
5934adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            class unicode2(unicode):
5944adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                def __getitem__(self, index):
5954adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                    return 2*unicode.__getitem__(self, index)
5964adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            inputs[unicode2] = {
5974adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                unicode(): unicode(),
5984adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                unicode("123"): unicode("112233")
5994adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            }
6004adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
6014adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        for (cls, inps) in inputs.iteritems():
6024adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            for (inp, exp) in inps.iteritems():
6034adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                # make sure the output goes through __getitem__
6044adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                # even if func is None
6054adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                self.assertEqual(
6064adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                    filter(funcs[0], cls(inp)),
6074adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                    filter(funcs[1], cls(inp))
6084adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                )
6094adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                for func in funcs:
6104adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                    outp = filter(func, cls(inp))
6114adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                    self.assertEqual(outp, exp)
6124adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                    self.assertTrue(not isinstance(outp, cls))
6134adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
6144adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    def test_getattr(self):
6154adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        import sys
6164adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertTrue(getattr(sys, 'stdout') is sys.stdout)
6174adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(TypeError, getattr, sys, 1)
6184adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(TypeError, getattr, sys, 1, "foo")
6194adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(TypeError, getattr)
6204adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        if have_unicode:
6214adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            self.assertRaises(UnicodeError, getattr, sys, unichr(sys.maxunicode))
6224adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
6234adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    def test_hasattr(self):
6244adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        import sys
6254adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertTrue(hasattr(sys, 'stdout'))
6264adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(TypeError, hasattr, sys, 1)
6274adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(TypeError, hasattr)
6284adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        if have_unicode:
6294adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            self.assertRaises(UnicodeError, hasattr, sys, unichr(sys.maxunicode))
6304adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
6314adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        # Check that hasattr allows SystemExit and KeyboardInterrupts by
6324adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        class A:
6334adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            def __getattr__(self, what):
6344adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                raise KeyboardInterrupt
6354adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(KeyboardInterrupt, hasattr, A(), "b")
6364adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        class B:
6374adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            def __getattr__(self, what):
6384adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                raise SystemExit
6394adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(SystemExit, hasattr, B(), "b")
6404adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
6414adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    def test_hash(self):
6424adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        hash(None)
6434adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(hash(1), hash(1L))
6444adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(hash(1), hash(1.0))
6454adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        hash('spam')
6464adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        if have_unicode:
6474adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            self.assertEqual(hash('spam'), hash(unicode('spam')))
6484adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        hash((0,1,2,3))
6494adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        def f(): pass
6504adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(TypeError, hash, [])
6514adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(TypeError, hash, {})
6524adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        # Bug 1536021: Allow hash to return long objects
6534adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        class X:
6544adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            def __hash__(self):
6554adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                return 2**100
6564adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(type(hash(X())), int)
6574adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        class Y(object):
6584adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            def __hash__(self):
6594adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                return 2**100
6604adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(type(hash(Y())), int)
6614adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        class Z(long):
6624adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            def __hash__(self):
6634adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                return self
6644adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(hash(Z(42)), hash(42L))
6654adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
6664adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    def test_hex(self):
6674adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(hex(16), '0x10')
6684adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(hex(16L), '0x10L')
6694adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(hex(-16), '-0x10')
6704adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(hex(-16L), '-0x10L')
6714adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(TypeError, hex, {})
6724adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
6734adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    def test_id(self):
6744adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        id(None)
6754adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        id(1)
6764adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        id(1L)
6774adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        id(1.0)
6784adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        id('spam')
6794adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        id((0,1,2,3))
6804adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        id([0,1,2,3])
6814adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        id({'spam': 1, 'eggs': 2, 'ham': 3})
6824adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
6834adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    # Test input() later, together with raw_input
6844adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
6854adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    # test_int(): see test_int.py for int() tests.
6864adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
6874adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    def test_intern(self):
6884adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(TypeError, intern)
6894adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        # This fails if the test is run twice with a constant string,
6904adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        # therefore append the run counter
6914adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        s = "never interned before " + str(numruns)
6924adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertTrue(intern(s) is s)
6934adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        s2 = s.swapcase().swapcase()
6944adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertTrue(intern(s2) is s)
6954adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
6964adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        # Subclasses of string can't be interned, because they
6974adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        # provide too much opportunity for insane things to happen.
6984adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        # We don't want them in the interned dict and if they aren't
6994adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        # actually interned, we don't want to create the appearance
7004adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        # that they are by allowing intern() to succeed.
7014adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        class S(str):
7024adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            def __hash__(self):
7034adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                return 123
7044adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
7054adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(TypeError, intern, S("abc"))
7064adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
7074adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        # It's still safe to pass these strings to routines that
7084adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        # call intern internally, e.g. PyObject_SetAttr().
7094adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        s = S("abc")
7104adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        setattr(s, s, s)
7114adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(getattr(s, s), s)
7124adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
7134adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    def test_iter(self):
7144adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(TypeError, iter)
7154adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(TypeError, iter, 42, 42)
7164adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        lists = [("1", "2"), ["1", "2"], "12"]
7174adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        if have_unicode:
7184adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            lists.append(unicode("12"))
7194adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        for l in lists:
7204adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            i = iter(l)
7214adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            self.assertEqual(i.next(), '1')
7224adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            self.assertEqual(i.next(), '2')
7234adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            self.assertRaises(StopIteration, i.next)
7244adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
7254adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    def test_isinstance(self):
7264adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        class C:
7274adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            pass
7284adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        class D(C):
7294adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            pass
7304adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        class E:
7314adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            pass
7324adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        c = C()
7334adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        d = D()
7344adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        e = E()
7354adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertTrue(isinstance(c, C))
7364adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertTrue(isinstance(d, C))
7374adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertTrue(not isinstance(e, C))
7384adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertTrue(not isinstance(c, D))
7394adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertTrue(not isinstance('foo', E))
7404adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(TypeError, isinstance, E, 'foo')
7414adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(TypeError, isinstance)
7424adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
7434adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    def test_issubclass(self):
7444adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        class C:
7454adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            pass
7464adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        class D(C):
7474adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            pass
7484adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        class E:
7494adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            pass
7504adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        c = C()
7514adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        d = D()
7524adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        e = E()
7534adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertTrue(issubclass(D, C))
7544adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertTrue(issubclass(C, C))
7554adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertTrue(not issubclass(C, D))
7564adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(TypeError, issubclass, 'foo', E)
7574adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(TypeError, issubclass, E, 'foo')
7584adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(TypeError, issubclass)
7594adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
7604adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    def test_len(self):
7614adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(len('123'), 3)
7624adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(len(()), 0)
7634adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(len((1, 2, 3, 4)), 4)
7644adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(len([1, 2, 3, 4]), 4)
7654adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(len({}), 0)
7664adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(len({'a':1, 'b': 2}), 2)
7674adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        class BadSeq:
7684adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            def __len__(self):
7694adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                raise ValueError
7704adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(ValueError, len, BadSeq())
7714adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(TypeError, len, 2)
7724adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        class ClassicStyle: pass
7734adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        class NewStyle(object): pass
7744adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(AttributeError, len, ClassicStyle())
7754adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(TypeError, len, NewStyle())
7764adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
7774adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    def test_map(self):
7784adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(
7794adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            map(None, 'hello world'),
7804adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            ['h','e','l','l','o',' ','w','o','r','l','d']
7814adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        )
7824adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(
7834adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            map(None, 'abcd', 'efg'),
7844adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            [('a', 'e'), ('b', 'f'), ('c', 'g'), ('d', None)]
7854adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        )
7864adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(
7874adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            map(None, range(10)),
7884adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
7894adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        )
7904adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(
7914adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            map(lambda x: x*x, range(1,4)),
7924adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            [1, 4, 9]
7934adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        )
7944adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        try:
7954adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            from math import sqrt
7964adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        except ImportError:
7974adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            def sqrt(x):
7984adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                return pow(x, 0.5)
7994adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(
8004adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            map(lambda x: map(sqrt,x), [[16, 4], [81, 9]]),
8014adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            [[4.0, 2.0], [9.0, 3.0]]
8024adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        )
8034adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(
8044adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            map(lambda x, y: x+y, [1,3,2], [9,1,4]),
8054adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            [10, 4, 6]
8064adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        )
8074adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
8084adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        def plus(*v):
8094adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            accu = 0
8104adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            for i in v: accu = accu + i
8114adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            return accu
8124adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(
8134adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            map(plus, [1, 3, 7]),
8144adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            [1, 3, 7]
8154adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        )
8164adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(
8174adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            map(plus, [1, 3, 7], [4, 9, 2]),
8184adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            [1+4, 3+9, 7+2]
8194adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        )
8204adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(
8214adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            map(plus, [1, 3, 7], [4, 9, 2], [1, 1, 0]),
8224adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            [1+4+1, 3+9+1, 7+2+0]
8234adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        )
8244adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(
8254adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            map(None, Squares(10)),
8264adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
8274adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        )
8284adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(
8294adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            map(int, Squares(10)),
8304adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
8314adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        )
8324adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(
8334adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            map(None, Squares(3), Squares(2)),
8344adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            [(0,0), (1,1), (4,None)]
8354adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        )
8364adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(
8374adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            map(max, Squares(3), Squares(2)),
8384adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            [0, 1, 4]
8394adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        )
8404adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(TypeError, map)
8414adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(TypeError, map, lambda x: x, 42)
8424adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(map(None, [42]), [42])
8434adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        class BadSeq:
8444adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            def __getitem__(self, index):
8454adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                raise ValueError
8464adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(ValueError, map, lambda x: x, BadSeq())
8474adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        def badfunc(x):
8484adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            raise RuntimeError
8494adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(RuntimeError, map, badfunc, range(5))
8504adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
8514adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    def test_max(self):
8524adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(max('123123'), '3')
8534adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(max(1, 2, 3), 3)
8544adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(max((1, 2, 3, 1, 2, 3)), 3)
8554adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(max([1, 2, 3, 1, 2, 3]), 3)
8564adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
8574adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(max(1, 2L, 3.0), 3.0)
8584adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(max(1L, 2.0, 3), 3)
8594adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(max(1.0, 2, 3L), 3L)
8604adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
8614adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        for stmt in (
8624adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            "max(key=int)",                 # no args
8634adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            "max(1, key=int)",              # single arg not iterable
8644adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            "max(1, 2, keystone=int)",      # wrong keyword
8654adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            "max(1, 2, key=int, abc=int)",  # two many keywords
8664adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            "max(1, 2, key=1)",             # keyfunc is not callable
8674adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            ):
8684adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            try:
8694adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                exec(stmt) in globals()
8704adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            except TypeError:
8714adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                pass
8724adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            else:
8734adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                self.fail(stmt)
8744adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
8754adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(max((1,), key=neg), 1)     # one elem iterable
8764adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(max((1,2), key=neg), 1)    # two elem iterable
8774adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(max(1, 2, key=neg), 1)     # two elems
8784adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
8794adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        data = [random.randrange(200) for i in range(100)]
8804adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        keys = dict((elem, random.randrange(50)) for elem in data)
8814adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        f = keys.__getitem__
8824adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(max(data, key=f),
8834adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                         sorted(reversed(data), key=f)[-1])
8844adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
8854adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    def test_min(self):
8864adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(min('123123'), '1')
8874adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(min(1, 2, 3), 1)
8884adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(min((1, 2, 3, 1, 2, 3)), 1)
8894adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(min([1, 2, 3, 1, 2, 3]), 1)
8904adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
8914adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(min(1, 2L, 3.0), 1)
8924adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(min(1L, 2.0, 3), 1L)
8934adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(min(1.0, 2, 3L), 1.0)
8944adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
8954adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(TypeError, min)
8964adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(TypeError, min, 42)
8974adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(ValueError, min, ())
8984adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        class BadSeq:
8994adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            def __getitem__(self, index):
9004adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                raise ValueError
9014adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(ValueError, min, BadSeq())
9024adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        class BadNumber:
9034adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            def __cmp__(self, other):
9044adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                raise ValueError
9054adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(ValueError, min, (42, BadNumber()))
9064adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
9074adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        for stmt in (
9084adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            "min(key=int)",                 # no args
9094adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            "min(1, key=int)",              # single arg not iterable
9104adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            "min(1, 2, keystone=int)",      # wrong keyword
9114adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            "min(1, 2, key=int, abc=int)",  # two many keywords
9124adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            "min(1, 2, key=1)",             # keyfunc is not callable
9134adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            ):
9144adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            try:
9154adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                exec(stmt) in globals()
9164adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            except TypeError:
9174adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                pass
9184adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            else:
9194adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                self.fail(stmt)
9204adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
9214adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(min((1,), key=neg), 1)     # one elem iterable
9224adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(min((1,2), key=neg), 2)    # two elem iterable
9234adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(min(1, 2, key=neg), 2)     # two elems
9244adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
9254adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        data = [random.randrange(200) for i in range(100)]
9264adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        keys = dict((elem, random.randrange(50)) for elem in data)
9274adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        f = keys.__getitem__
9284adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(min(data, key=f),
9294adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                         sorted(data, key=f)[0])
9304adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
9314adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    def test_next(self):
9324adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        it = iter(range(2))
9334adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(next(it), 0)
9344adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(next(it), 1)
9354adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(StopIteration, next, it)
9364adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(StopIteration, next, it)
9374adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(next(it, 42), 42)
9384adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
9394adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        class Iter(object):
9404adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            def __iter__(self):
9414adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                return self
9424adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            def next(self):
9434adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                raise StopIteration
9444adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
9454adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        it = iter(Iter())
9464adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(next(it, 42), 42)
9474adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(StopIteration, next, it)
9484adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
9494adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        def gen():
9504adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            yield 1
9514adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            return
9524adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
9534adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        it = gen()
9544adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(next(it), 1)
9554adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(StopIteration, next, it)
9564adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(next(it, 42), 42)
9574adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
9584adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    def test_oct(self):
9594adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(oct(100), '0144')
9604adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(oct(100L), '0144L')
9614adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(oct(-100), '-0144')
9624adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(oct(-100L), '-0144L')
9634adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(TypeError, oct, ())
9644adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
9654adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    def write_testfile(self):
9664adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        # NB the first 4 lines are also used to test input and raw_input, below
9674adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        fp = open(TESTFN, 'w')
9684adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        try:
9694adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            fp.write('1+1\n')
9704adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            fp.write('1+1\n')
9714adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            fp.write('The quick brown fox jumps over the lazy dog')
9724adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            fp.write('.\n')
9734adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            fp.write('Dear John\n')
9744adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            fp.write('XXX'*100)
9754adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            fp.write('YYY'*100)
9764adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        finally:
9774adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            fp.close()
9784adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
9794adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    def test_open(self):
9804adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.write_testfile()
9814adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        fp = open(TESTFN, 'r')
9824adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        try:
9834adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            self.assertEqual(fp.readline(4), '1+1\n')
9844adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            self.assertEqual(fp.readline(4), '1+1\n')
9854adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            self.assertEqual(fp.readline(), 'The quick brown fox jumps over the lazy dog.\n')
9864adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            self.assertEqual(fp.readline(4), 'Dear')
9874adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            self.assertEqual(fp.readline(100), ' John\n')
9884adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            self.assertEqual(fp.read(300), 'XXX'*100)
9894adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            self.assertEqual(fp.read(1000), 'YYY'*100)
9904adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        finally:
9914adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            fp.close()
9924adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        unlink(TESTFN)
9934adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
9944adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    def test_ord(self):
9954adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(ord(' '), 32)
9964adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(ord('A'), 65)
9974adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(ord('a'), 97)
9984adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        if have_unicode:
9994adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            self.assertEqual(ord(unichr(sys.maxunicode)), sys.maxunicode)
10004adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(TypeError, ord, 42)
10014adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        if have_unicode:
10024adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            self.assertRaises(TypeError, ord, unicode("12"))
10034adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
10044adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    def test_pow(self):
10054adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(pow(0,0), 1)
10064adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(pow(0,1), 0)
10074adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(pow(1,0), 1)
10084adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(pow(1,1), 1)
10094adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
10104adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(pow(2,0), 1)
10114adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(pow(2,10), 1024)
10124adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(pow(2,20), 1024*1024)
10134adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(pow(2,30), 1024*1024*1024)
10144adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
10154adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(pow(-2,0), 1)
10164adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(pow(-2,1), -2)
10174adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(pow(-2,2), 4)
10184adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(pow(-2,3), -8)
10194adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
10204adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(pow(0L,0), 1)
10214adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(pow(0L,1), 0)
10224adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(pow(1L,0), 1)
10234adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(pow(1L,1), 1)
10244adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
10254adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(pow(2L,0), 1)
10264adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(pow(2L,10), 1024)
10274adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(pow(2L,20), 1024*1024)
10284adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(pow(2L,30), 1024*1024*1024)
10294adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
10304adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(pow(-2L,0), 1)
10314adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(pow(-2L,1), -2)
10324adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(pow(-2L,2), 4)
10334adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(pow(-2L,3), -8)
10344adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
10354adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertAlmostEqual(pow(0.,0), 1.)
10364adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertAlmostEqual(pow(0.,1), 0.)
10374adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertAlmostEqual(pow(1.,0), 1.)
10384adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertAlmostEqual(pow(1.,1), 1.)
10394adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
10404adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertAlmostEqual(pow(2.,0), 1.)
10414adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertAlmostEqual(pow(2.,10), 1024.)
10424adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertAlmostEqual(pow(2.,20), 1024.*1024.)
10434adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertAlmostEqual(pow(2.,30), 1024.*1024.*1024.)
10444adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
10454adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertAlmostEqual(pow(-2.,0), 1.)
10464adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertAlmostEqual(pow(-2.,1), -2.)
10474adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertAlmostEqual(pow(-2.,2), 4.)
10484adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertAlmostEqual(pow(-2.,3), -8.)
10494adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
10504adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        for x in 2, 2L, 2.0:
10514adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            for y in 10, 10L, 10.0:
10524adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                for z in 1000, 1000L, 1000.0:
10534adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                    if isinstance(x, float) or \
10544adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                       isinstance(y, float) or \
10554adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                       isinstance(z, float):
10564adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                        self.assertRaises(TypeError, pow, x, y, z)
10574adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                    else:
10584adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                        self.assertAlmostEqual(pow(x, y, z), 24.0)
10594adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
10604adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(TypeError, pow, -1, -2, 3)
10614adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(ValueError, pow, 1, 2, 0)
10624adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(TypeError, pow, -1L, -2L, 3L)
10634adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(ValueError, pow, 1L, 2L, 0L)
10644adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        # Will return complex in 3.0:
10654adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(ValueError, pow, -342.43, 0.234)
10664adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
10674adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(TypeError, pow)
10684adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
10694adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    def test_range(self):
10704adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(range(3), [0, 1, 2])
10714adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(range(1, 5), [1, 2, 3, 4])
10724adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(range(0), [])
10734adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(range(-3), [])
10744adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(range(1, 10, 3), [1, 4, 7])
10754adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(range(5, -5, -3), [5, 2, -1, -4])
10764adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
10774adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        # Now test range() with longs
10784adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(range(-2**100), [])
10794adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(range(0, -2**100), [])
10804adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(range(0, 2**100, -1), [])
10814adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(range(0, 2**100, -1), [])
10824adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
10834adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        a = long(10 * sys.maxint)
10844adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        b = long(100 * sys.maxint)
10854adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        c = long(50 * sys.maxint)
10864adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
10874adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(range(a, a+2), [a, a+1])
10884adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(range(a+2, a, -1L), [a+2, a+1])
10894adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(range(a+4, a, -2), [a+4, a+2])
10904adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
10914adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        seq = range(a, b, c)
10924adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertIn(a, seq)
10934adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertNotIn(b, seq)
10944adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(len(seq), 2)
10954adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
10964adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        seq = range(b, a, -c)
10974adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertIn(b, seq)
10984adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertNotIn(a, seq)
10994adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(len(seq), 2)
11004adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
11014adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        seq = range(-a, -b, -c)
11024adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertIn(-a, seq)
11034adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertNotIn(-b, seq)
11044adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(len(seq), 2)
11054adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
11064adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(TypeError, range)
11074adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(TypeError, range, 1, 2, 3, 4)
11084adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(ValueError, range, 1, 2, 0)
11094adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(ValueError, range, a, a + 1, long(0))
11104adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
11114adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        class badzero(int):
11124adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            def __cmp__(self, other):
11134adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                raise RuntimeError
11144adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            __hash__ = None # Invalid cmp makes this unhashable
11154adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(RuntimeError, range, a, a + 1, badzero(1))
11164adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
11174adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        # Reject floats.
11184adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(TypeError, range, 1., 1., 1.)
11194adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(TypeError, range, 1e100, 1e101, 1e101)
11204adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
11214adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(TypeError, range, 0, "spam")
11224adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(TypeError, range, 0, 42, "spam")
11234adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
11244adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(OverflowError, range, -sys.maxint, sys.maxint)
11254adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(OverflowError, range, 0, 2*sys.maxint)
11264adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
11274adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        bignum = 2*sys.maxint
11284adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        smallnum = 42
11294adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        # Old-style user-defined class with __int__ method
11304adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        class I0:
11314adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            def __init__(self, n):
11324adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                self.n = int(n)
11334adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            def __int__(self):
11344adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                return self.n
11354adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(range(I0(bignum), I0(bignum + 1)), [bignum])
11364adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(range(I0(smallnum), I0(smallnum + 1)), [smallnum])
11374adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
11384adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        # New-style user-defined class with __int__ method
11394adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        class I1(object):
11404adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            def __init__(self, n):
11414adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                self.n = int(n)
11424adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            def __int__(self):
11434adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                return self.n
11444adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(range(I1(bignum), I1(bignum + 1)), [bignum])
11454adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(range(I1(smallnum), I1(smallnum + 1)), [smallnum])
11464adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
11474adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        # New-style user-defined class with failing __int__ method
11484adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        class IX(object):
11494adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            def __int__(self):
11504adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                raise RuntimeError
11514adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(RuntimeError, range, IX())
11524adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
11534adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        # New-style user-defined class with invalid __int__ method
11544adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        class IN(object):
11554adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            def __int__(self):
11564adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                return "not a number"
11574adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(TypeError, range, IN())
11584adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
11594adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        # Exercise various combinations of bad arguments, to check
11604adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        # refcounting logic
11614adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(TypeError, range, 0.0)
11624adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
11634adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(TypeError, range, 0, 0.0)
11644adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(TypeError, range, 0.0, 0)
11654adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(TypeError, range, 0.0, 0.0)
11664adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
11674adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(TypeError, range, 0, 0, 1.0)
11684adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(TypeError, range, 0, 0.0, 1)
11694adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(TypeError, range, 0, 0.0, 1.0)
11704adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(TypeError, range, 0.0, 0, 1)
11714adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(TypeError, range, 0.0, 0, 1.0)
11724adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(TypeError, range, 0.0, 0.0, 1)
11734adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(TypeError, range, 0.0, 0.0, 1.0)
11744adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
11754adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
11764adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
11774adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    def test_input_and_raw_input(self):
11784adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.write_testfile()
11794adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        fp = open(TESTFN, 'r')
11804adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        savestdin = sys.stdin
11814adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        savestdout = sys.stdout # Eats the echo
11824adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        try:
11834adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            sys.stdin = fp
11844adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            sys.stdout = BitBucket()
11854adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            self.assertEqual(input(), 2)
11864adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            self.assertEqual(input('testing\n'), 2)
11874adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            self.assertEqual(raw_input(), 'The quick brown fox jumps over the lazy dog.')
11884adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            self.assertEqual(raw_input('testing\n'), 'Dear John')
11894adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
11904adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            # SF 1535165: don't segfault on closed stdin
11914adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            # sys.stdout must be a regular file for triggering
11924adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            sys.stdout = savestdout
11934adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            sys.stdin.close()
11944adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            self.assertRaises(ValueError, input)
11954adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
11964adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            sys.stdout = BitBucket()
11974adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            sys.stdin = cStringIO.StringIO("NULL\0")
11984adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            self.assertRaises(TypeError, input, 42, 42)
11994adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            sys.stdin = cStringIO.StringIO("    'whitespace'")
12004adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            self.assertEqual(input(), 'whitespace')
12014adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            sys.stdin = cStringIO.StringIO()
12024adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            self.assertRaises(EOFError, input)
12034adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
12044adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            # SF 876178: make sure input() respect future options.
12054adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            sys.stdin = cStringIO.StringIO('1/2')
12064adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            sys.stdout = cStringIO.StringIO()
12074adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            exec compile('print input()', 'test_builtin_tmp', 'exec')
12084adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            sys.stdin.seek(0, 0)
12094adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            exec compile('from __future__ import division;print input()',
12104adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                         'test_builtin_tmp', 'exec')
12114adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            sys.stdin.seek(0, 0)
12124adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            exec compile('print input()', 'test_builtin_tmp', 'exec')
12134adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            # The result we expect depends on whether new division semantics
12144adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            # are already in effect.
12154adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            if 1/2 == 0:
12164adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                # This test was compiled with old semantics.
12174adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                expected = ['0', '0.5', '0']
12184adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            else:
12194adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                # This test was compiled with new semantics (e.g., -Qnew
12204adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                # was given on the command line.
12214adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                expected = ['0.5', '0.5', '0.5']
12224adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            self.assertEqual(sys.stdout.getvalue().splitlines(), expected)
12234adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
12244adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            del sys.stdout
12254adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            self.assertRaises(RuntimeError, input, 'prompt')
12264adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            del sys.stdin
12274adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            self.assertRaises(RuntimeError, input, 'prompt')
12284adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        finally:
12294adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            sys.stdin = savestdin
12304adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            sys.stdout = savestdout
12314adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            fp.close()
12324adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            unlink(TESTFN)
12334adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
12344adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    def test_reduce(self):
12354adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        add = lambda x, y: x+y
12364adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(reduce(add, ['a', 'b', 'c'], ''), 'abc')
12374adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(
12384adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            reduce(add, [['a', 'c'], [], ['d', 'w']], []),
12394adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            ['a','c','d','w']
12404adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        )
12414adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(reduce(lambda x, y: x*y, range(2,8), 1), 5040)
12424adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(
12434adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            reduce(lambda x, y: x*y, range(2,21), 1L),
12444adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            2432902008176640000L
12454adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        )
12464adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(reduce(add, Squares(10)), 285)
12474adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(reduce(add, Squares(10), 0), 285)
12484adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(reduce(add, Squares(0), 0), 0)
12494adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(TypeError, reduce)
12504adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(TypeError, reduce, 42)
12514adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(TypeError, reduce, 42, 42)
12524adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(TypeError, reduce, 42, 42, 42)
12534adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(TypeError, reduce, None, range(5))
12544adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(TypeError, reduce, add, 42)
12554adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(reduce(42, "1"), "1") # func is never called with one item
12564adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(reduce(42, "", "1"), "1") # func is never called with one item
12574adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(TypeError, reduce, 42, (42, 42))
12584adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(TypeError, reduce, add, []) # arg 2 must not be empty sequence with no initial value
12594adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(TypeError, reduce, add, "")
12604adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(TypeError, reduce, add, ())
12614adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(reduce(add, [], None), None)
12624adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(reduce(add, [], 42), 42)
12634adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
12644adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        class BadSeq:
12654adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            def __getitem__(self, index):
12664adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                raise ValueError
12674adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(ValueError, reduce, 42, BadSeq())
12684adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
12694adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    def test_reload(self):
12704adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        import marshal
12714adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        reload(marshal)
12724adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        import string
12734adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        reload(string)
12744adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        ## import sys
12754adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        ## self.assertRaises(ImportError, reload, sys)
12764adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
12774adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    def test_repr(self):
12784adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(repr(''), '\'\'')
12794adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(repr(0), '0')
12804adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(repr(0L), '0L')
12814adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(repr(()), '()')
12824adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(repr([]), '[]')
12834adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(repr({}), '{}')
12844adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        a = []
12854adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        a.append(a)
12864adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(repr(a), '[[...]]')
12874adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        a = {}
12884adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        a[0] = a
12894adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(repr(a), '{0: {...}}')
12904adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
12914adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    def test_round(self):
12924adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(round(0.0), 0.0)
12934adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(type(round(0.0)), float)  # Will be int in 3.0.
12944adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(round(1.0), 1.0)
12954adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(round(10.0), 10.0)
12964adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(round(1000000000.0), 1000000000.0)
12974adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(round(1e20), 1e20)
12984adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
12994adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(round(-1.0), -1.0)
13004adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(round(-10.0), -10.0)
13014adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(round(-1000000000.0), -1000000000.0)
13024adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(round(-1e20), -1e20)
13034adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
13044adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(round(0.1), 0.0)
13054adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(round(1.1), 1.0)
13064adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(round(10.1), 10.0)
13074adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(round(1000000000.1), 1000000000.0)
13084adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
13094adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(round(-1.1), -1.0)
13104adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(round(-10.1), -10.0)
13114adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(round(-1000000000.1), -1000000000.0)
13124adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
13134adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(round(0.9), 1.0)
13144adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(round(9.9), 10.0)
13154adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(round(999999999.9), 1000000000.0)
13164adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
13174adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(round(-0.9), -1.0)
13184adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(round(-9.9), -10.0)
13194adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(round(-999999999.9), -1000000000.0)
13204adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
13214adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(round(-8.0, -1), -10.0)
13224adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(type(round(-8.0, -1)), float)
13234adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
13244adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(type(round(-8.0, 0)), float)
13254adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(type(round(-8.0, 1)), float)
13264adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
13274adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        # Check half rounding behaviour.
13284adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(round(5.5), 6)
13294adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(round(6.5), 7)
13304adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(round(-5.5), -6)
13314adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(round(-6.5), -7)
13324adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
13334adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        # Check behavior on ints
13344adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(round(0), 0)
13354adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(round(8), 8)
13364adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(round(-8), -8)
13374adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(type(round(0)), float)  # Will be int in 3.0.
13384adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(type(round(-8, -1)), float)
13394adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(type(round(-8, 0)), float)
13404adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(type(round(-8, 1)), float)
13414adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
13424adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        # test new kwargs
13434adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(round(number=-8.0, ndigits=-1), -10.0)
13444adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
13454adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(TypeError, round)
13464adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
13474adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        # test generic rounding delegation for reals
13484adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        class TestRound(object):
13494adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            def __float__(self):
13504adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                return 23.0
13514adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
13524adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        class TestNoRound(object):
13534adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            pass
13544adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
13554adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(round(TestRound()), 23)
13564adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
13574adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(TypeError, round, 1, 2, 3)
13584adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(TypeError, round, TestNoRound())
13594adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
13604adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        t = TestNoRound()
13614adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        t.__float__ = lambda *args: args
13624adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(TypeError, round, t)
13634adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(TypeError, round, t, 0)
13644adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
13654adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    # Some versions of glibc for alpha have a bug that affects
13664adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    # float -> integer rounding (floor, ceil, rint, round) for
13674adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    # values in the range [2**52, 2**53).  See:
13684adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    #
13694adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    #   http://sources.redhat.com/bugzilla/show_bug.cgi?id=5350
13704adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    #
13714adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    # We skip this test on Linux/alpha if it would fail.
13724adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    linux_alpha = (platform.system().startswith('Linux') and
13734adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                   platform.machine().startswith('alpha'))
13744adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    system_round_bug = round(5e15+1) != 5e15+1
13754adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    @unittest.skipIf(linux_alpha and system_round_bug,
13764adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                     "test will fail;  failure is probably due to a "
13774adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                     "buggy system round function")
13784adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    def test_round_large(self):
13794adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        # Issue #1869: integral floats should remain unchanged
13804adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(round(5e15-1), 5e15-1)
13814adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(round(5e15), 5e15)
13824adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(round(5e15+1), 5e15+1)
13834adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(round(5e15+2), 5e15+2)
13844adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(round(5e15+3), 5e15+3)
13854adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
13864adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    def test_setattr(self):
13874adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        setattr(sys, 'spam', 1)
13884adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(sys.spam, 1)
13894adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(TypeError, setattr, sys, 1, 'spam')
13904adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(TypeError, setattr)
13914adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
13924adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    def test_sum(self):
13934adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(sum([]), 0)
13944adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(sum(range(2,8)), 27)
13954adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(sum(iter(range(2,8))), 27)
13964adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(sum(Squares(10)), 285)
13974adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(sum(iter(Squares(10))), 285)
13984adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(sum([[1], [2], [3]], []), [1, 2, 3])
13994adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
14004adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(TypeError, sum)
14014adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(TypeError, sum, 42)
14024adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(TypeError, sum, ['a', 'b', 'c'])
14034adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(TypeError, sum, ['a', 'b', 'c'], '')
14044adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(TypeError, sum, [[1], [2], [3]])
14054adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(TypeError, sum, [{2:3}])
14064adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(TypeError, sum, [{2:3}]*2, {2:3})
14074adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
14084adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        class BadSeq:
14094adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            def __getitem__(self, index):
14104adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                raise ValueError
14114adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(ValueError, sum, BadSeq())
14124adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
14134adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        empty = []
14144adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        sum(([x] for x in range(10)), empty)
14154adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(empty, [])
14164adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
14174adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    def test_type(self):
14184adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(type(''),  type('123'))
14194adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertNotEqual(type(''), type(()))
14204adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
14214adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    def test_unichr(self):
14224adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        if have_unicode:
14234adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            self.assertEqual(unichr(32), unicode(' '))
14244adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            self.assertEqual(unichr(65), unicode('A'))
14254adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            self.assertEqual(unichr(97), unicode('a'))
14264adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            self.assertEqual(
14274adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                unichr(sys.maxunicode),
14284adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                unicode('\\U%08x' % (sys.maxunicode), 'unicode-escape')
14294adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            )
14304adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            self.assertRaises(ValueError, unichr, sys.maxunicode+1)
14314adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            self.assertRaises(TypeError, unichr)
14324adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            self.assertRaises((OverflowError, ValueError), unichr, 2**32)
14334adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
14344adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    # We don't want self in vars(), so these are static methods
14354adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
14364adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    @staticmethod
14374adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    def get_vars_f0():
14384adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        return vars()
14394adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
14404adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    @staticmethod
14414adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    def get_vars_f2():
14424adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        BuiltinTest.get_vars_f0()
14434adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        a = 1
14444adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        b = 2
14454adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        return vars()
14464adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
14474adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    class C_get_vars(object):
14484adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        def getDict(self):
14494adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            return {'a':2}
14504adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        __dict__ = property(fget=getDict)
14514adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
14524adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    def test_vars(self):
14534adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(set(vars()), set(dir()))
14544adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        import sys
14554adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(set(vars(sys)), set(dir(sys)))
14564adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(self.get_vars_f0(), {})
14574adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(self.get_vars_f2(), {'a': 1, 'b': 2})
14584adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(TypeError, vars, 42, 42)
14594adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(TypeError, vars, 42)
14604adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(vars(self.C_get_vars()), {'a':2})
14614adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
14624adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    def test_zip(self):
14634adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        a = (1, 2, 3)
14644adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        b = (4, 5, 6)
14654adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        t = [(1, 4), (2, 5), (3, 6)]
14664adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(zip(a, b), t)
14674adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        b = [4, 5, 6]
14684adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(zip(a, b), t)
14694adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        b = (4, 5, 6, 7)
14704adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(zip(a, b), t)
14714adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        class I:
14724adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            def __getitem__(self, i):
14734adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                if i < 0 or i > 2: raise IndexError
14744adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                return i + 4
14754adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(zip(a, I()), t)
14764adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(zip(), [])
14774adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(zip(*[]), [])
14784adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(TypeError, zip, None)
14794adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        class G:
14804adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            pass
14814adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(TypeError, zip, a, G())
14824adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
14834adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        # Make sure zip doesn't try to allocate a billion elements for the
14844adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        # result list when one of its arguments doesn't say how long it is.
14854adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        # A MemoryError is the most likely failure mode.
14864adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        class SequenceWithoutALength:
14874adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            def __getitem__(self, i):
14884adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                if i == 5:
14894adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                    raise IndexError
14904adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                else:
14914adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                    return i
14924adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(
14934adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            zip(SequenceWithoutALength(), xrange(2**30)),
14944adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            list(enumerate(range(5)))
14954adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        )
14964adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
14974adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        class BadSeq:
14984adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            def __getitem__(self, i):
14994adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                if i == 5:
15004adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                    raise ValueError
15014adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                else:
15024adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                    return i
15034adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(ValueError, zip, BadSeq(), BadSeq())
15044adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
15054adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    def test_format(self):
15064adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        # Test the basic machinery of the format() builtin.  Don't test
15074adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        #  the specifics of the various formatters
15084adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(format(3, ''), '3')
15094adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
15104adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        # Returns some classes to use for various tests.  There's
15114adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        #  an old-style version, and a new-style version
15124adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        def classes_new():
15134adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            class A(object):
15144adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                def __init__(self, x):
15154adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                    self.x = x
15164adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                def __format__(self, format_spec):
15174adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                    return str(self.x) + format_spec
15184adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            class DerivedFromA(A):
15194adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                pass
15204adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
15214adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            class Simple(object): pass
15224adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            class DerivedFromSimple(Simple):
15234adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                def __init__(self, x):
15244adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                    self.x = x
15254adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                def __format__(self, format_spec):
15264adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                    return str(self.x) + format_spec
15274adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            class DerivedFromSimple2(DerivedFromSimple): pass
15284adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            return A, DerivedFromA, DerivedFromSimple, DerivedFromSimple2
15294adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
15304adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        # In 3.0, classes_classic has the same meaning as classes_new
15314adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        def classes_classic():
15324adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            class A:
15334adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                def __init__(self, x):
15344adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                    self.x = x
15354adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                def __format__(self, format_spec):
15364adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                    return str(self.x) + format_spec
15374adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            class DerivedFromA(A):
15384adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                pass
15394adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
15404adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            class Simple: pass
15414adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            class DerivedFromSimple(Simple):
15424adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                def __init__(self, x):
15434adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                    self.x = x
15444adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                def __format__(self, format_spec):
15454adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                    return str(self.x) + format_spec
15464adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            class DerivedFromSimple2(DerivedFromSimple): pass
15474adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            return A, DerivedFromA, DerivedFromSimple, DerivedFromSimple2
15484adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
15494adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        def class_test(A, DerivedFromA, DerivedFromSimple, DerivedFromSimple2):
15504adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            self.assertEqual(format(A(3), 'spec'), '3spec')
15514adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            self.assertEqual(format(DerivedFromA(4), 'spec'), '4spec')
15524adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            self.assertEqual(format(DerivedFromSimple(5), 'abc'), '5abc')
15534adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            self.assertEqual(format(DerivedFromSimple2(10), 'abcdef'),
15544adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                             '10abcdef')
15554adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
15564adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        class_test(*classes_new())
15574adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        class_test(*classes_classic())
15584adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
15594adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        def empty_format_spec(value):
15604adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            # test that:
15614adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            #  format(x, '') == str(x)
15624adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            #  format(x) == str(x)
15634adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            self.assertEqual(format(value, ""), str(value))
15644adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            self.assertEqual(format(value), str(value))
15654adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
15664adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        # for builtin types, format(x, "") == str(x)
15674adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        empty_format_spec(17**13)
15684adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        empty_format_spec(1.0)
15694adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        empty_format_spec(3.1415e104)
15704adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        empty_format_spec(-3.1415e104)
15714adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        empty_format_spec(3.1415e-104)
15724adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        empty_format_spec(-3.1415e-104)
15734adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        empty_format_spec(object)
15744adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        empty_format_spec(None)
15754adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
15764adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        # TypeError because self.__format__ returns the wrong type
15774adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        class BadFormatResult:
15784adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            def __format__(self, format_spec):
15794adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                return 1.0
15804adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(TypeError, format, BadFormatResult(), "")
15814adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
15824adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        # TypeError because format_spec is not unicode or str
15834adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(TypeError, format, object(), 4)
15844adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(TypeError, format, object(), object())
15854adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
15864adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        # tests for object.__format__ really belong elsewhere, but
15874adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        #  there's no good place to put them
15884adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        x = object().__format__('')
15894adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertTrue(x.startswith('<object object at'))
15904adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
15914adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        # first argument to object.__format__ must be string
15924adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(TypeError, object().__format__, 3)
15934adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(TypeError, object().__format__, object())
15944adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(TypeError, object().__format__, None)
15954adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
15964adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        # --------------------------------------------------------------------
15974adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        # Issue #7994: object.__format__ with a non-empty format string is
15984adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        #  pending deprecated
15994adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        def test_deprecated_format_string(obj, fmt_str, should_raise_warning):
16004adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            with warnings.catch_warnings(record=True) as w:
16014adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                warnings.simplefilter("always", PendingDeprecationWarning)
16024adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                format(obj, fmt_str)
16034adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            if should_raise_warning:
16044adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                self.assertEqual(len(w), 1)
16054adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                self.assertIsInstance(w[0].message, PendingDeprecationWarning)
16064adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                self.assertIn('object.__format__ with a non-empty format '
16074adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                              'string', str(w[0].message))
16084adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            else:
16094adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                self.assertEqual(len(w), 0)
16104adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
16114adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        fmt_strs = ['', 's', u'', u's']
16124adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
16134adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        class A:
16144adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            def __format__(self, fmt_str):
16154adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                return format('', fmt_str)
16164adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
16174adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        for fmt_str in fmt_strs:
16184adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            test_deprecated_format_string(A(), fmt_str, False)
16194adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
16204adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        class B:
16214adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            pass
16224adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
16234adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        class C(object):
16244adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            pass
16254adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
16264adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        for cls in [object, B, C]:
16274adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            for fmt_str in fmt_strs:
16284adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                test_deprecated_format_string(cls(), fmt_str, len(fmt_str) != 0)
16294adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        # --------------------------------------------------------------------
16304adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
16314adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        # make sure we can take a subclass of str as a format spec
16324adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        class DerivedFromStr(str): pass
16334adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(format(0, DerivedFromStr('10')), '         0')
16344adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
16354adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    def test_bin(self):
16364adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(bin(0), '0b0')
16374adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(bin(1), '0b1')
16384adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(bin(-1), '-0b1')
16394adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(bin(2**65), '0b1' + '0' * 65)
16404adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(bin(2**65-1), '0b' + '1' * 65)
16414adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(bin(-(2**65)), '-0b1' + '0' * 65)
16424adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(bin(-(2**65-1)), '-0b' + '1' * 65)
16434adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
16444adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    def test_bytearray_translate(self):
16454adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        x = bytearray("abc")
16464adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(ValueError, x.translate, "1", 1)
16474adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(TypeError, x.translate, "1"*256, 1)
16484adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
16494adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestSorted(unittest.TestCase):
16504adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
16514adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    def test_basic(self):
16524adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        data = range(100)
16534adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        copy = data[:]
16544adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        random.shuffle(copy)
16554adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(data, sorted(copy))
16564adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertNotEqual(data, copy)
16574adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
16584adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        data.reverse()
16594adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        random.shuffle(copy)
16604adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(data, sorted(copy, cmp=lambda x, y: cmp(y,x)))
16614adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertNotEqual(data, copy)
16624adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        random.shuffle(copy)
16634adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(data, sorted(copy, key=lambda x: -x))
16644adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertNotEqual(data, copy)
16654adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        random.shuffle(copy)
16664adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(data, sorted(copy, reverse=1))
16674adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertNotEqual(data, copy)
16684adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
16694adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    def test_inputtypes(self):
16704adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        s = 'abracadabra'
16714adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        types = [list, tuple]
16724adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        if have_unicode:
16734adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            types.insert(0, unicode)
16744adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        for T in types:
16754adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            self.assertEqual(sorted(s), sorted(T(s)))
16764adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
16774adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        s = ''.join(dict.fromkeys(s).keys())  # unique letters only
16784adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        types = [set, frozenset, list, tuple, dict.fromkeys]
16794adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        if have_unicode:
16804adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            types.insert(0, unicode)
16814adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        for T in types:
16824adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            self.assertEqual(sorted(s), sorted(T(s)))
16834adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
16844adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    def test_baddecorator(self):
16854adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        data = 'The quick Brown fox Jumped over The lazy Dog'.split()
16864adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(TypeError, sorted, data, None, lambda x,y: 0)
16874adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
16884adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaodef _run_unittest(*args):
16894adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    with check_py3k_warnings(
16904adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            (".+ not supported in 3.x", DeprecationWarning),
16914adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            (".+ is renamed to imp.reload", DeprecationWarning),
16924adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            ("classic int division", DeprecationWarning)):
16934adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        run_unittest(*args)
16944adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
16954adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaodef test_main(verbose=None):
16964adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    test_classes = (BuiltinTest, TestSorted)
16974adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
16984adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    _run_unittest(*test_classes)
16994adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
17004adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    # verify reference counting
17014adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    if verbose and hasattr(sys, "gettotalrefcount"):
17024adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        import gc
17034adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        counts = [None] * 5
17044adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        for i in xrange(len(counts)):
17054adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            _run_unittest(*test_classes)
17064adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            gc.collect()
17074adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            counts[i] = sys.gettotalrefcount()
17084adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        print counts
17094adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
17104adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
17114adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoif __name__ == "__main__":
17124adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    test_main(verbose=True)
1713