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