Home | History | Annotate | Download | only in test
      1 # Python test set -- built-in functions
      2 
      3 import platform
      4 import unittest
      5 from test.test_support import fcmp, have_unicode, TESTFN, unlink, \
      6                               run_unittest, check_py3k_warnings
      7 import warnings
      8 from operator import neg
      9 
     10 import sys, cStringIO, random, UserDict
     11 
     12 # count the number of test runs.
     13 # used to skip running test_execfile() multiple times
     14 # and to create unique strings to intern in test_intern()
     15 numruns = 0
     16 
     17 class Squares:
     18 
     19     def __init__(self, max):
     20         self.max = max
     21         self.sofar = []
     22 
     23     def __len__(self): return len(self.sofar)
     24 
     25     def __getitem__(self, i):
     26         if not 0 <= i < self.max: raise IndexError
     27         n = len(self.sofar)
     28         while n <= i:
     29             self.sofar.append(n*n)
     30             n += 1
     31         return self.sofar[i]
     32 
     33 class StrSquares:
     34 
     35     def __init__(self, max):
     36         self.max = max
     37         self.sofar = []
     38 
     39     def __len__(self):
     40         return len(self.sofar)
     41 
     42     def __getitem__(self, i):
     43         if not 0 <= i < self.max:
     44             raise IndexError
     45         n = len(self.sofar)
     46         while n <= i:
     47             self.sofar.append(str(n*n))
     48             n += 1
     49         return self.sofar[i]
     50 
     51 class BitBucket:
     52     def write(self, line):
     53         pass
     54 
     55 
     56 class TestFailingBool:
     57     def __nonzero__(self):
     58         raise RuntimeError
     59 
     60 class TestFailingIter:
     61     def __iter__(self):
     62         raise RuntimeError
     63 
     64 class BuiltinTest(unittest.TestCase):
     65 
     66     def test_import(self):
     67         __import__('sys')
     68         __import__('time')
     69         __import__('string')
     70         __import__(name='sys')
     71         __import__(name='time', level=0)
     72         self.assertRaises(ImportError, __import__, 'spamspam')
     73         self.assertRaises(TypeError, __import__, 1, 2, 3, 4)
     74         self.assertRaises(ValueError, __import__, '')
     75         self.assertRaises(TypeError, __import__, 'sys', name='sys')
     76 
     77     def test_abs(self):
     78         # int
     79         self.assertEqual(abs(0), 0)
     80         self.assertEqual(abs(1234), 1234)
     81         self.assertEqual(abs(-1234), 1234)
     82         self.assertTrue(abs(-sys.maxint-1) > 0)
     83         # float
     84         self.assertEqual(abs(0.0), 0.0)
     85         self.assertEqual(abs(3.14), 3.14)
     86         self.assertEqual(abs(-3.14), 3.14)
     87         # long
     88         self.assertEqual(abs(0L), 0L)
     89         self.assertEqual(abs(1234L), 1234L)
     90         self.assertEqual(abs(-1234L), 1234L)
     91         # str
     92         self.assertRaises(TypeError, abs, 'a')
     93         # bool
     94         self.assertEqual(abs(True), 1)
     95         self.assertEqual(abs(False), 0)
     96         # other
     97         self.assertRaises(TypeError, abs)
     98         self.assertRaises(TypeError, abs, None)
     99         class AbsClass(object):
    100             def __abs__(self):
    101                 return -5
    102         self.assertEqual(abs(AbsClass()), -5)
    103 
    104     def test_all(self):
    105         self.assertEqual(all([2, 4, 6]), True)
    106         self.assertEqual(all([2, None, 6]), False)
    107         self.assertRaises(RuntimeError, all, [2, TestFailingBool(), 6])
    108         self.assertRaises(RuntimeError, all, TestFailingIter())
    109         self.assertRaises(TypeError, all, 10)               # Non-iterable
    110         self.assertRaises(TypeError, all)                   # No args
    111         self.assertRaises(TypeError, all, [2, 4, 6], [])    # Too many args
    112         self.assertEqual(all([]), True)                     # Empty iterator
    113         self.assertEqual(all([0, TestFailingBool()]), False)# Short-circuit
    114         S = [50, 60]
    115         self.assertEqual(all(x > 42 for x in S), True)
    116         S = [50, 40, 60]
    117         self.assertEqual(all(x > 42 for x in S), False)
    118 
    119     def test_any(self):
    120         self.assertEqual(any([None, None, None]), False)
    121         self.assertEqual(any([None, 4, None]), True)
    122         self.assertRaises(RuntimeError, any, [None, TestFailingBool(), 6])
    123         self.assertRaises(RuntimeError, any, TestFailingIter())
    124         self.assertRaises(TypeError, any, 10)               # Non-iterable
    125         self.assertRaises(TypeError, any)                   # No args
    126         self.assertRaises(TypeError, any, [2, 4, 6], [])    # Too many args
    127         self.assertEqual(any([]), False)                    # Empty iterator
    128         self.assertEqual(any([1, TestFailingBool()]), True) # Short-circuit
    129         S = [40, 60, 30]
    130         self.assertEqual(any(x > 42 for x in S), True)
    131         S = [10, 20, 30]
    132         self.assertEqual(any(x > 42 for x in S), False)
    133 
    134     def test_neg(self):
    135         x = -sys.maxint-1
    136         self.assertTrue(isinstance(x, int))
    137         self.assertEqual(-x, sys.maxint+1)
    138 
    139     def test_apply(self):
    140         def f0(*args):
    141             self.assertEqual(args, ())
    142         def f1(a1):
    143             self.assertEqual(a1, 1)
    144         def f2(a1, a2):
    145             self.assertEqual(a1, 1)
    146             self.assertEqual(a2, 2)
    147         def f3(a1, a2, a3):
    148             self.assertEqual(a1, 1)
    149             self.assertEqual(a2, 2)
    150             self.assertEqual(a3, 3)
    151         apply(f0, ())
    152         apply(f1, (1,))
    153         apply(f2, (1, 2))
    154         apply(f3, (1, 2, 3))
    155 
    156         # A PyCFunction that takes only positional parameters should allow an
    157         # empty keyword dictionary to pass without a complaint, but raise a
    158         # TypeError if the dictionary is non-empty.
    159         apply(id, (1,), {})
    160         self.assertRaises(TypeError, apply, id, (1,), {"foo": 1})
    161         self.assertRaises(TypeError, apply)
    162         self.assertRaises(TypeError, apply, id, 42)
    163         self.assertRaises(TypeError, apply, id, (42,), 42)
    164 
    165     def test_callable(self):
    166         self.assertTrue(callable(len))
    167         self.assertFalse(callable("a"))
    168         self.assertTrue(callable(callable))
    169         self.assertTrue(callable(lambda x, y: x + y))
    170         self.assertFalse(callable(__builtins__))
    171         def f(): pass
    172         self.assertTrue(callable(f))
    173 
    174         class Classic:
    175             def meth(self): pass
    176         self.assertTrue(callable(Classic))
    177         c = Classic()
    178         self.assertTrue(callable(c.meth))
    179         self.assertFalse(callable(c))
    180 
    181         class NewStyle(object):
    182             def meth(self): pass
    183         self.assertTrue(callable(NewStyle))
    184         n = NewStyle()
    185         self.assertTrue(callable(n.meth))
    186         self.assertFalse(callable(n))
    187 
    188         # Classic and new-style classes evaluate __call__() differently
    189         c.__call__ = None
    190         self.assertTrue(callable(c))
    191         del c.__call__
    192         self.assertFalse(callable(c))
    193         n.__call__ = None
    194         self.assertFalse(callable(n))
    195         del n.__call__
    196         self.assertFalse(callable(n))
    197 
    198         class N2(object):
    199             def __call__(self): pass
    200         n2 = N2()
    201         self.assertTrue(callable(n2))
    202         class N3(N2): pass
    203         n3 = N3()
    204         self.assertTrue(callable(n3))
    205 
    206     def test_chr(self):
    207         self.assertEqual(chr(32), ' ')
    208         self.assertEqual(chr(65), 'A')
    209         self.assertEqual(chr(97), 'a')
    210         self.assertEqual(chr(0xff), '\xff')
    211         self.assertRaises(ValueError, chr, 256)
    212         self.assertRaises(TypeError, chr)
    213 
    214     def test_cmp(self):
    215         self.assertEqual(cmp(-1, 1), -1)
    216         self.assertEqual(cmp(1, -1), 1)
    217         self.assertEqual(cmp(1, 1), 0)
    218         # verify that circular objects are not handled
    219         a = []; a.append(a)
    220         b = []; b.append(b)
    221         from UserList import UserList
    222         c = UserList(); c.append(c)
    223         self.assertRaises(RuntimeError, cmp, a, b)
    224         self.assertRaises(RuntimeError, cmp, b, c)
    225         self.assertRaises(RuntimeError, cmp, c, a)
    226         self.assertRaises(RuntimeError, cmp, a, c)
    227        # okay, now break the cycles
    228         a.pop(); b.pop(); c.pop()
    229         self.assertRaises(TypeError, cmp)
    230 
    231     def test_coerce(self):
    232         self.assertTrue(not fcmp(coerce(1, 1.1), (1.0, 1.1)))
    233         self.assertEqual(coerce(1, 1L), (1L, 1L))
    234         self.assertTrue(not fcmp(coerce(1L, 1.1), (1.0, 1.1)))
    235         self.assertRaises(TypeError, coerce)
    236         class BadNumber:
    237             def __coerce__(self, other):
    238                 raise ValueError
    239         self.assertRaises(ValueError, coerce, 42, BadNumber())
    240         self.assertRaises(OverflowError, coerce, 0.5, int("12345" * 1000))
    241 
    242     def test_compile(self):
    243         compile('print 1\n', '', 'exec')
    244         bom = '\xef\xbb\xbf'
    245         compile(bom + 'print 1\n', '', 'exec')
    246         compile(source='pass', filename='?', mode='exec')
    247         compile(dont_inherit=0, filename='tmp', source='0', mode='eval')
    248         compile('pass', '?', dont_inherit=1, mode='exec')
    249         self.assertRaises(TypeError, compile)
    250         self.assertRaises(ValueError, compile, 'print 42\n', '<string>', 'badmode')
    251         self.assertRaises(ValueError, compile, 'print 42\n', '<string>', 'single', 0xff)
    252         self.assertRaises(TypeError, compile, chr(0), 'f', 'exec')
    253         self.assertRaises(TypeError, compile, 'pass', '?', 'exec',
    254                           mode='eval', source='0', filename='tmp')
    255         if have_unicode:
    256             compile(unicode('print u"\xc3\xa5"\n', 'utf8'), '', 'exec')
    257             self.assertRaises(TypeError, compile, unichr(0), 'f', 'exec')
    258             self.assertRaises(ValueError, compile, unicode('a = 1'), 'f', 'bad')
    259 
    260 
    261     def test_delattr(self):
    262         import sys
    263         sys.spam = 1
    264         delattr(sys, 'spam')
    265         self.assertRaises(TypeError, delattr)
    266 
    267     def test_dir(self):
    268         # dir(wrong number of arguments)
    269         self.assertRaises(TypeError, dir, 42, 42)
    270 
    271         # dir() - local scope
    272         local_var = 1
    273         self.assertIn('local_var', dir())
    274 
    275         # dir(module)
    276         import sys
    277         self.assertIn('exit', dir(sys))
    278 
    279         # dir(module_with_invalid__dict__)
    280         import types
    281         class Foo(types.ModuleType):
    282             __dict__ = 8
    283         f = Foo("foo")
    284         self.assertRaises(TypeError, dir, f)
    285 
    286         # dir(type)
    287         self.assertIn("strip", dir(str))
    288         self.assertNotIn("__mro__", dir(str))
    289 
    290         # dir(obj)
    291         class Foo(object):
    292             def __init__(self):
    293                 self.x = 7
    294                 self.y = 8
    295                 self.z = 9
    296         f = Foo()
    297         self.assertIn("y", dir(f))
    298 
    299         # dir(obj_no__dict__)
    300         class Foo(object):
    301             __slots__ = []
    302         f = Foo()
    303         self.assertIn("__repr__", dir(f))
    304 
    305         # dir(obj_no__class__with__dict__)
    306         # (an ugly trick to cause getattr(f, "__class__") to fail)
    307         class Foo(object):
    308             __slots__ = ["__class__", "__dict__"]
    309             def __init__(self):
    310                 self.bar = "wow"
    311         f = Foo()
    312         self.assertNotIn("__repr__", dir(f))
    313         self.assertIn("bar", dir(f))
    314 
    315         # dir(obj_using __dir__)
    316         class Foo(object):
    317             def __dir__(self):
    318                 return ["kan", "ga", "roo"]
    319         f = Foo()
    320         self.assertTrue(dir(f) == ["ga", "kan", "roo"])
    321 
    322         # dir(obj__dir__not_list)
    323         class Foo(object):
    324             def __dir__(self):
    325                 return 7
    326         f = Foo()
    327         self.assertRaises(TypeError, dir, f)
    328 
    329     def test_divmod(self):
    330         self.assertEqual(divmod(12, 7), (1, 5))
    331         self.assertEqual(divmod(-12, 7), (-2, 2))
    332         self.assertEqual(divmod(12, -7), (-2, -2))
    333         self.assertEqual(divmod(-12, -7), (1, -5))
    334 
    335         self.assertEqual(divmod(12L, 7L), (1L, 5L))
    336         self.assertEqual(divmod(-12L, 7L), (-2L, 2L))
    337         self.assertEqual(divmod(12L, -7L), (-2L, -2L))
    338         self.assertEqual(divmod(-12L, -7L), (1L, -5L))
    339 
    340         self.assertEqual(divmod(12, 7L), (1, 5L))
    341         self.assertEqual(divmod(-12, 7L), (-2, 2L))
    342         self.assertEqual(divmod(12L, -7), (-2L, -2))
    343         self.assertEqual(divmod(-12L, -7), (1L, -5))
    344 
    345         self.assertEqual(divmod(-sys.maxint-1, -1),
    346                          (sys.maxint+1, 0))
    347 
    348         self.assertTrue(not fcmp(divmod(3.25, 1.0), (3.0, 0.25)))
    349         self.assertTrue(not fcmp(divmod(-3.25, 1.0), (-4.0, 0.75)))
    350         self.assertTrue(not fcmp(divmod(3.25, -1.0), (-4.0, -0.75)))
    351         self.assertTrue(not fcmp(divmod(-3.25, -1.0), (3.0, -0.25)))
    352 
    353         self.assertRaises(TypeError, divmod)
    354 
    355     def test_eval(self):
    356         self.assertEqual(eval('1+1'), 2)
    357         self.assertEqual(eval(' 1+1\n'), 2)
    358         globals = {'a': 1, 'b': 2}
    359         locals = {'b': 200, 'c': 300}
    360         self.assertEqual(eval('a', globals) , 1)
    361         self.assertEqual(eval('a', globals, locals), 1)
    362         self.assertEqual(eval('b', globals, locals), 200)
    363         self.assertEqual(eval('c', globals, locals), 300)
    364         if have_unicode:
    365             self.assertEqual(eval(unicode('1+1')), 2)
    366             self.assertEqual(eval(unicode(' 1+1\n')), 2)
    367         globals = {'a': 1, 'b': 2}
    368         locals = {'b': 200, 'c': 300}
    369         if have_unicode:
    370             self.assertEqual(eval(unicode('a'), globals), 1)
    371             self.assertEqual(eval(unicode('a'), globals, locals), 1)
    372             self.assertEqual(eval(unicode('b'), globals, locals), 200)
    373             self.assertEqual(eval(unicode('c'), globals, locals), 300)
    374             bom = '\xef\xbb\xbf'
    375             self.assertEqual(eval(bom + 'a', globals, locals), 1)
    376             self.assertEqual(eval(unicode('u"\xc3\xa5"', 'utf8'), globals),
    377                              unicode('\xc3\xa5', 'utf8'))
    378         self.assertRaises(TypeError, eval)
    379         self.assertRaises(TypeError, eval, ())
    380 
    381     def test_general_eval(self):
    382         # Tests that general mappings can be used for the locals argument
    383 
    384         class M:
    385             "Test mapping interface versus possible calls from eval()."
    386             def __getitem__(self, key):
    387                 if key == 'a':
    388                     return 12
    389                 raise KeyError
    390             def keys(self):
    391                 return list('xyz')
    392 
    393         m = M()
    394         g = globals()
    395         self.assertEqual(eval('a', g, m), 12)
    396         self.assertRaises(NameError, eval, 'b', g, m)
    397         self.assertEqual(eval('dir()', g, m), list('xyz'))
    398         self.assertEqual(eval('globals()', g, m), g)
    399         self.assertEqual(eval('locals()', g, m), m)
    400         self.assertRaises(TypeError, eval, 'a', m)
    401         class A:
    402             "Non-mapping"
    403             pass
    404         m = A()
    405         self.assertRaises(TypeError, eval, 'a', g, m)
    406 
    407         # Verify that dict subclasses work as well
    408         class D(dict):
    409             def __getitem__(self, key):
    410                 if key == 'a':
    411                     return 12
    412                 return dict.__getitem__(self, key)
    413             def keys(self):
    414                 return list('xyz')
    415 
    416         d = D()
    417         self.assertEqual(eval('a', g, d), 12)
    418         self.assertRaises(NameError, eval, 'b', g, d)
    419         self.assertEqual(eval('dir()', g, d), list('xyz'))
    420         self.assertEqual(eval('globals()', g, d), g)
    421         self.assertEqual(eval('locals()', g, d), d)
    422 
    423         # Verify locals stores (used by list comps)
    424         eval('[locals() for i in (2,3)]', g, d)
    425         eval('[locals() for i in (2,3)]', g, UserDict.UserDict())
    426 
    427         class SpreadSheet:
    428             "Sample application showing nested, calculated lookups."
    429             _cells = {}
    430             def __setitem__(self, key, formula):
    431                 self._cells[key] = formula
    432             def __getitem__(self, key):
    433                 return eval(self._cells[key], globals(), self)
    434 
    435         ss = SpreadSheet()
    436         ss['a1'] = '5'
    437         ss['a2'] = 'a1*6'
    438         ss['a3'] = 'a2*7'
    439         self.assertEqual(ss['a3'], 210)
    440 
    441         # Verify that dir() catches a non-list returned by eval
    442         # SF bug #1004669
    443         class C:
    444             def __getitem__(self, item):
    445                 raise KeyError(item)
    446             def keys(self):
    447                 return 'a'
    448         self.assertRaises(TypeError, eval, 'dir()', globals(), C())
    449 
    450     # Done outside of the method test_z to get the correct scope
    451     z = 0
    452     f = open(TESTFN, 'w')
    453     f.write('z = z+1\n')
    454     f.write('z = z*2\n')
    455     f.close()
    456     with check_py3k_warnings(("execfile.. not supported in 3.x",
    457                               DeprecationWarning)):
    458         execfile(TESTFN)
    459 
    460     def test_execfile(self):
    461         global numruns
    462         if numruns:
    463             return
    464         numruns += 1
    465 
    466         globals = {'a': 1, 'b': 2}
    467         locals = {'b': 200, 'c': 300}
    468 
    469         self.assertEqual(self.__class__.z, 2)
    470         globals['z'] = 0
    471         execfile(TESTFN, globals)
    472         self.assertEqual(globals['z'], 2)
    473         locals['z'] = 0
    474         execfile(TESTFN, globals, locals)
    475         self.assertEqual(locals['z'], 2)
    476 
    477         class M:
    478             "Test mapping interface versus possible calls from execfile()."
    479             def __init__(self):
    480                 self.z = 10
    481             def __getitem__(self, key):
    482                 if key == 'z':
    483                     return self.z
    484                 raise KeyError
    485             def __setitem__(self, key, value):
    486                 if key == 'z':
    487                     self.z = value
    488                     return
    489                 raise KeyError
    490 
    491         locals = M()
    492         locals['z'] = 0
    493         execfile(TESTFN, globals, locals)
    494         self.assertEqual(locals['z'], 2)
    495 
    496         unlink(TESTFN)
    497         self.assertRaises(TypeError, execfile)
    498         self.assertRaises(TypeError, execfile, TESTFN, {}, ())
    499         import os
    500         self.assertRaises(IOError, execfile, os.curdir)
    501         self.assertRaises(IOError, execfile, "I_dont_exist")
    502 
    503     def test_filter(self):
    504         self.assertEqual(filter(lambda c: 'a' <= c <= 'z', 'Hello World'), 'elloorld')
    505         self.assertEqual(filter(None, [1, 'hello', [], [3], '', None, 9, 0]), [1, 'hello', [3], 9])
    506         self.assertEqual(filter(lambda x: x > 0, [1, -3, 9, 0, 2]), [1, 9, 2])
    507         self.assertEqual(filter(None, Squares(10)), [1, 4, 9, 16, 25, 36, 49, 64, 81])
    508         self.assertEqual(filter(lambda x: x%2, Squares(10)), [1, 9, 25, 49, 81])
    509         def identity(item):
    510             return 1
    511         filter(identity, Squares(5))
    512         self.assertRaises(TypeError, filter)
    513         class BadSeq(object):
    514             def __getitem__(self, index):
    515                 if index<4:
    516                     return 42
    517                 raise ValueError
    518         self.assertRaises(ValueError, filter, lambda x: x, BadSeq())
    519         def badfunc():
    520             pass
    521         self.assertRaises(TypeError, filter, badfunc, range(5))
    522 
    523         # test bltinmodule.c::filtertuple()
    524         self.assertEqual(filter(None, (1, 2)), (1, 2))
    525         self.assertEqual(filter(lambda x: x>=3, (1, 2, 3, 4)), (3, 4))
    526         self.assertRaises(TypeError, filter, 42, (1, 2))
    527 
    528         # test bltinmodule.c::filterstring()
    529         self.assertEqual(filter(None, "12"), "12")
    530         self.assertEqual(filter(lambda x: x>="3", "1234"), "34")
    531         self.assertRaises(TypeError, filter, 42, "12")
    532         class badstr(str):
    533             def __getitem__(self, index):
    534                 raise ValueError
    535         self.assertRaises(ValueError, filter, lambda x: x >="3", badstr("1234"))
    536 
    537         class badstr2(str):
    538             def __getitem__(self, index):
    539                 return 42
    540         self.assertRaises(TypeError, filter, lambda x: x >=42, badstr2("1234"))
    541 
    542         class weirdstr(str):
    543             def __getitem__(self, index):
    544                 return weirdstr(2*str.__getitem__(self, index))
    545         self.assertEqual(filter(lambda x: x>="33", weirdstr("1234")), "3344")
    546 
    547         class shiftstr(str):
    548             def __getitem__(self, index):
    549                 return chr(ord(str.__getitem__(self, index))+1)
    550         self.assertEqual(filter(lambda x: x>="3", shiftstr("1234")), "345")
    551 
    552         if have_unicode:
    553             # test bltinmodule.c::filterunicode()
    554             self.assertEqual(filter(None, unicode("12")), unicode("12"))
    555             self.assertEqual(filter(lambda x: x>="3", unicode("1234")), unicode("34"))
    556             self.assertRaises(TypeError, filter, 42, unicode("12"))
    557             self.assertRaises(ValueError, filter, lambda x: x >="3", badstr(unicode("1234")))
    558 
    559             class badunicode(unicode):
    560                 def __getitem__(self, index):
    561                     return 42
    562             self.assertRaises(TypeError, filter, lambda x: x >=42, badunicode("1234"))
    563 
    564             class weirdunicode(unicode):
    565                 def __getitem__(self, index):
    566                     return weirdunicode(2*unicode.__getitem__(self, index))
    567             self.assertEqual(
    568                 filter(lambda x: x>=unicode("33"), weirdunicode("1234")), unicode("3344"))
    569 
    570             class shiftunicode(unicode):
    571                 def __getitem__(self, index):
    572                     return unichr(ord(unicode.__getitem__(self, index))+1)
    573             self.assertEqual(
    574                 filter(lambda x: x>=unicode("3"), shiftunicode("1234")),
    575                 unicode("345")
    576             )
    577 
    578     def test_filter_subclasses(self):
    579         # test that filter() never returns tuple, str or unicode subclasses
    580         # and that the result always goes through __getitem__
    581         funcs = (None, bool, lambda x: True)
    582         class tuple2(tuple):
    583             def __getitem__(self, index):
    584                 return 2*tuple.__getitem__(self, index)
    585         class str2(str):
    586             def __getitem__(self, index):
    587                 return 2*str.__getitem__(self, index)
    588         inputs = {
    589             tuple2: {(): (), (1, 2, 3): (2, 4, 6)},
    590             str2:   {"": "", "123": "112233"}
    591         }
    592         if have_unicode:
    593             class unicode2(unicode):
    594                 def __getitem__(self, index):
    595                     return 2*unicode.__getitem__(self, index)
    596             inputs[unicode2] = {
    597                 unicode(): unicode(),
    598                 unicode("123"): unicode("112233")
    599             }
    600 
    601         for (cls, inps) in inputs.iteritems():
    602             for (inp, exp) in inps.iteritems():
    603                 # make sure the output goes through __getitem__
    604                 # even if func is None
    605                 self.assertEqual(
    606                     filter(funcs[0], cls(inp)),
    607                     filter(funcs[1], cls(inp))
    608                 )
    609                 for func in funcs:
    610                     outp = filter(func, cls(inp))
    611                     self.assertEqual(outp, exp)
    612                     self.assertTrue(not isinstance(outp, cls))
    613 
    614     def test_getattr(self):
    615         import sys
    616         self.assertTrue(getattr(sys, 'stdout') is sys.stdout)
    617         self.assertRaises(TypeError, getattr, sys, 1)
    618         self.assertRaises(TypeError, getattr, sys, 1, "foo")
    619         self.assertRaises(TypeError, getattr)
    620         if have_unicode:
    621             self.assertRaises(UnicodeError, getattr, sys, unichr(sys.maxunicode))
    622 
    623     def test_hasattr(self):
    624         import sys
    625         self.assertTrue(hasattr(sys, 'stdout'))
    626         self.assertRaises(TypeError, hasattr, sys, 1)
    627         self.assertRaises(TypeError, hasattr)
    628         if have_unicode:
    629             self.assertRaises(UnicodeError, hasattr, sys, unichr(sys.maxunicode))
    630 
    631         # Check that hasattr allows SystemExit and KeyboardInterrupts by
    632         class A:
    633             def __getattr__(self, what):
    634                 raise KeyboardInterrupt
    635         self.assertRaises(KeyboardInterrupt, hasattr, A(), "b")
    636         class B:
    637             def __getattr__(self, what):
    638                 raise SystemExit
    639         self.assertRaises(SystemExit, hasattr, B(), "b")
    640 
    641     def test_hash(self):
    642         hash(None)
    643         self.assertEqual(hash(1), hash(1L))
    644         self.assertEqual(hash(1), hash(1.0))
    645         hash('spam')
    646         if have_unicode:
    647             self.assertEqual(hash('spam'), hash(unicode('spam')))
    648         hash((0,1,2,3))
    649         def f(): pass
    650         self.assertRaises(TypeError, hash, [])
    651         self.assertRaises(TypeError, hash, {})
    652         # Bug 1536021: Allow hash to return long objects
    653         class X:
    654             def __hash__(self):
    655                 return 2**100
    656         self.assertEqual(type(hash(X())), int)
    657         class Y(object):
    658             def __hash__(self):
    659                 return 2**100
    660         self.assertEqual(type(hash(Y())), int)
    661         class Z(long):
    662             def __hash__(self):
    663                 return self
    664         self.assertEqual(hash(Z(42)), hash(42L))
    665 
    666     def test_hex(self):
    667         self.assertEqual(hex(16), '0x10')
    668         self.assertEqual(hex(16L), '0x10L')
    669         self.assertEqual(hex(-16), '-0x10')
    670         self.assertEqual(hex(-16L), '-0x10L')
    671         self.assertRaises(TypeError, hex, {})
    672 
    673     def test_id(self):
    674         id(None)
    675         id(1)
    676         id(1L)
    677         id(1.0)
    678         id('spam')
    679         id((0,1,2,3))
    680         id([0,1,2,3])
    681         id({'spam': 1, 'eggs': 2, 'ham': 3})
    682 
    683     # Test input() later, together with raw_input
    684 
    685     # test_int(): see test_int.py for int() tests.
    686 
    687     def test_intern(self):
    688         self.assertRaises(TypeError, intern)
    689         # This fails if the test is run twice with a constant string,
    690         # therefore append the run counter
    691         s = "never interned before " + str(numruns)
    692         self.assertTrue(intern(s) is s)
    693         s2 = s.swapcase().swapcase()
    694         self.assertTrue(intern(s2) is s)
    695 
    696         # Subclasses of string can't be interned, because they
    697         # provide too much opportunity for insane things to happen.
    698         # We don't want them in the interned dict and if they aren't
    699         # actually interned, we don't want to create the appearance
    700         # that they are by allowing intern() to succeed.
    701         class S(str):
    702             def __hash__(self):
    703                 return 123
    704 
    705         self.assertRaises(TypeError, intern, S("abc"))
    706 
    707         # It's still safe to pass these strings to routines that
    708         # call intern internally, e.g. PyObject_SetAttr().
    709         s = S("abc")
    710         setattr(s, s, s)
    711         self.assertEqual(getattr(s, s), s)
    712 
    713     def test_iter(self):
    714         self.assertRaises(TypeError, iter)
    715         self.assertRaises(TypeError, iter, 42, 42)
    716         lists = [("1", "2"), ["1", "2"], "12"]
    717         if have_unicode:
    718             lists.append(unicode("12"))
    719         for l in lists:
    720             i = iter(l)
    721             self.assertEqual(i.next(), '1')
    722             self.assertEqual(i.next(), '2')
    723             self.assertRaises(StopIteration, i.next)
    724 
    725     def test_isinstance(self):
    726         class C:
    727             pass
    728         class D(C):
    729             pass
    730         class E:
    731             pass
    732         c = C()
    733         d = D()
    734         e = E()
    735         self.assertTrue(isinstance(c, C))
    736         self.assertTrue(isinstance(d, C))
    737         self.assertTrue(not isinstance(e, C))
    738         self.assertTrue(not isinstance(c, D))
    739         self.assertTrue(not isinstance('foo', E))
    740         self.assertRaises(TypeError, isinstance, E, 'foo')
    741         self.assertRaises(TypeError, isinstance)
    742 
    743     def test_issubclass(self):
    744         class C:
    745             pass
    746         class D(C):
    747             pass
    748         class E:
    749             pass
    750         c = C()
    751         d = D()
    752         e = E()
    753         self.assertTrue(issubclass(D, C))
    754         self.assertTrue(issubclass(C, C))
    755         self.assertTrue(not issubclass(C, D))
    756         self.assertRaises(TypeError, issubclass, 'foo', E)
    757         self.assertRaises(TypeError, issubclass, E, 'foo')
    758         self.assertRaises(TypeError, issubclass)
    759 
    760     def test_len(self):
    761         self.assertEqual(len('123'), 3)
    762         self.assertEqual(len(()), 0)
    763         self.assertEqual(len((1, 2, 3, 4)), 4)
    764         self.assertEqual(len([1, 2, 3, 4]), 4)
    765         self.assertEqual(len({}), 0)
    766         self.assertEqual(len({'a':1, 'b': 2}), 2)
    767         class BadSeq:
    768             def __len__(self):
    769                 raise ValueError
    770         self.assertRaises(ValueError, len, BadSeq())
    771         self.assertRaises(TypeError, len, 2)
    772         class ClassicStyle: pass
    773         class NewStyle(object): pass
    774         self.assertRaises(AttributeError, len, ClassicStyle())
    775         self.assertRaises(TypeError, len, NewStyle())
    776 
    777     def test_map(self):
    778         self.assertEqual(
    779             map(None, 'hello world'),
    780             ['h','e','l','l','o',' ','w','o','r','l','d']
    781         )
    782         self.assertEqual(
    783             map(None, 'abcd', 'efg'),
    784             [('a', 'e'), ('b', 'f'), ('c', 'g'), ('d', None)]
    785         )
    786         self.assertEqual(
    787             map(None, range(10)),
    788             [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    789         )
    790         self.assertEqual(
    791             map(lambda x: x*x, range(1,4)),
    792             [1, 4, 9]
    793         )
    794         try:
    795             from math import sqrt
    796         except ImportError:
    797             def sqrt(x):
    798                 return pow(x, 0.5)
    799         self.assertEqual(
    800             map(lambda x: map(sqrt,x), [[16, 4], [81, 9]]),
    801             [[4.0, 2.0], [9.0, 3.0]]
    802         )
    803         self.assertEqual(
    804             map(lambda x, y: x+y, [1,3,2], [9,1,4]),
    805             [10, 4, 6]
    806         )
    807 
    808         def plus(*v):
    809             accu = 0
    810             for i in v: accu = accu + i
    811             return accu
    812         self.assertEqual(
    813             map(plus, [1, 3, 7]),
    814             [1, 3, 7]
    815         )
    816         self.assertEqual(
    817             map(plus, [1, 3, 7], [4, 9, 2]),
    818             [1+4, 3+9, 7+2]
    819         )
    820         self.assertEqual(
    821             map(plus, [1, 3, 7], [4, 9, 2], [1, 1, 0]),
    822             [1+4+1, 3+9+1, 7+2+0]
    823         )
    824         self.assertEqual(
    825             map(None, Squares(10)),
    826             [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
    827         )
    828         self.assertEqual(
    829             map(int, Squares(10)),
    830             [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
    831         )
    832         self.assertEqual(
    833             map(None, Squares(3), Squares(2)),
    834             [(0,0), (1,1), (4,None)]
    835         )
    836         self.assertEqual(
    837             map(max, Squares(3), Squares(2)),
    838             [0, 1, 4]
    839         )
    840         self.assertRaises(TypeError, map)
    841         self.assertRaises(TypeError, map, lambda x: x, 42)
    842         self.assertEqual(map(None, [42]), [42])
    843         class BadSeq:
    844             def __getitem__(self, index):
    845                 raise ValueError
    846         self.assertRaises(ValueError, map, lambda x: x, BadSeq())
    847         def badfunc(x):
    848             raise RuntimeError
    849         self.assertRaises(RuntimeError, map, badfunc, range(5))
    850 
    851     def test_max(self):
    852         self.assertEqual(max('123123'), '3')
    853         self.assertEqual(max(1, 2, 3), 3)
    854         self.assertEqual(max((1, 2, 3, 1, 2, 3)), 3)
    855         self.assertEqual(max([1, 2, 3, 1, 2, 3]), 3)
    856 
    857         self.assertEqual(max(1, 2L, 3.0), 3.0)
    858         self.assertEqual(max(1L, 2.0, 3), 3)
    859         self.assertEqual(max(1.0, 2, 3L), 3L)
    860 
    861         for stmt in (
    862             "max(key=int)",                 # no args
    863             "max(1, key=int)",              # single arg not iterable
    864             "max(1, 2, keystone=int)",      # wrong keyword
    865             "max(1, 2, key=int, abc=int)",  # two many keywords
    866             "max(1, 2, key=1)",             # keyfunc is not callable
    867             ):
    868             try:
    869                 exec(stmt) in globals()
    870             except TypeError:
    871                 pass
    872             else:
    873                 self.fail(stmt)
    874 
    875         self.assertEqual(max((1,), key=neg), 1)     # one elem iterable
    876         self.assertEqual(max((1,2), key=neg), 1)    # two elem iterable
    877         self.assertEqual(max(1, 2, key=neg), 1)     # two elems
    878 
    879         data = [random.randrange(200) for i in range(100)]
    880         keys = dict((elem, random.randrange(50)) for elem in data)
    881         f = keys.__getitem__
    882         self.assertEqual(max(data, key=f),
    883                          sorted(reversed(data), key=f)[-1])
    884 
    885     def test_min(self):
    886         self.assertEqual(min('123123'), '1')
    887         self.assertEqual(min(1, 2, 3), 1)
    888         self.assertEqual(min((1, 2, 3, 1, 2, 3)), 1)
    889         self.assertEqual(min([1, 2, 3, 1, 2, 3]), 1)
    890 
    891         self.assertEqual(min(1, 2L, 3.0), 1)
    892         self.assertEqual(min(1L, 2.0, 3), 1L)
    893         self.assertEqual(min(1.0, 2, 3L), 1.0)
    894 
    895         self.assertRaises(TypeError, min)
    896         self.assertRaises(TypeError, min, 42)
    897         self.assertRaises(ValueError, min, ())
    898         class BadSeq:
    899             def __getitem__(self, index):
    900                 raise ValueError
    901         self.assertRaises(ValueError, min, BadSeq())
    902         class BadNumber:
    903             def __cmp__(self, other):
    904                 raise ValueError
    905         self.assertRaises(ValueError, min, (42, BadNumber()))
    906 
    907         for stmt in (
    908             "min(key=int)",                 # no args
    909             "min(1, key=int)",              # single arg not iterable
    910             "min(1, 2, keystone=int)",      # wrong keyword
    911             "min(1, 2, key=int, abc=int)",  # two many keywords
    912             "min(1, 2, key=1)",             # keyfunc is not callable
    913             ):
    914             try:
    915                 exec(stmt) in globals()
    916             except TypeError:
    917                 pass
    918             else:
    919                 self.fail(stmt)
    920 
    921         self.assertEqual(min((1,), key=neg), 1)     # one elem iterable
    922         self.assertEqual(min((1,2), key=neg), 2)    # two elem iterable
    923         self.assertEqual(min(1, 2, key=neg), 2)     # two elems
    924 
    925         data = [random.randrange(200) for i in range(100)]
    926         keys = dict((elem, random.randrange(50)) for elem in data)
    927         f = keys.__getitem__
    928         self.assertEqual(min(data, key=f),
    929                          sorted(data, key=f)[0])
    930 
    931     def test_next(self):
    932         it = iter(range(2))
    933         self.assertEqual(next(it), 0)
    934         self.assertEqual(next(it), 1)
    935         self.assertRaises(StopIteration, next, it)
    936         self.assertRaises(StopIteration, next, it)
    937         self.assertEqual(next(it, 42), 42)
    938 
    939         class Iter(object):
    940             def __iter__(self):
    941                 return self
    942             def next(self):
    943                 raise StopIteration
    944 
    945         it = iter(Iter())
    946         self.assertEqual(next(it, 42), 42)
    947         self.assertRaises(StopIteration, next, it)
    948 
    949         def gen():
    950             yield 1
    951             return
    952 
    953         it = gen()
    954         self.assertEqual(next(it), 1)
    955         self.assertRaises(StopIteration, next, it)
    956         self.assertEqual(next(it, 42), 42)
    957 
    958     def test_oct(self):
    959         self.assertEqual(oct(100), '0144')
    960         self.assertEqual(oct(100L), '0144L')
    961         self.assertEqual(oct(-100), '-0144')
    962         self.assertEqual(oct(-100L), '-0144L')
    963         self.assertRaises(TypeError, oct, ())
    964 
    965     def write_testfile(self):
    966         # NB the first 4 lines are also used to test input and raw_input, below
    967         fp = open(TESTFN, 'w')
    968         try:
    969             fp.write('1+1\n')
    970             fp.write('1+1\n')
    971             fp.write('The quick brown fox jumps over the lazy dog')
    972             fp.write('.\n')
    973             fp.write('Dear John\n')
    974             fp.write('XXX'*100)
    975             fp.write('YYY'*100)
    976         finally:
    977             fp.close()
    978 
    979     def test_open(self):
    980         self.write_testfile()
    981         fp = open(TESTFN, 'r')
    982         try:
    983             self.assertEqual(fp.readline(4), '1+1\n')
    984             self.assertEqual(fp.readline(4), '1+1\n')
    985             self.assertEqual(fp.readline(), 'The quick brown fox jumps over the lazy dog.\n')
    986             self.assertEqual(fp.readline(4), 'Dear')
    987             self.assertEqual(fp.readline(100), ' John\n')
    988             self.assertEqual(fp.read(300), 'XXX'*100)
    989             self.assertEqual(fp.read(1000), 'YYY'*100)
    990         finally:
    991             fp.close()
    992         unlink(TESTFN)
    993 
    994     def test_ord(self):
    995         self.assertEqual(ord(' '), 32)
    996         self.assertEqual(ord('A'), 65)
    997         self.assertEqual(ord('a'), 97)
    998         if have_unicode:
    999             self.assertEqual(ord(unichr(sys.maxunicode)), sys.maxunicode)
   1000         self.assertRaises(TypeError, ord, 42)
   1001         if have_unicode:
   1002             self.assertRaises(TypeError, ord, unicode("12"))
   1003 
   1004     def test_pow(self):
   1005         self.assertEqual(pow(0,0), 1)
   1006         self.assertEqual(pow(0,1), 0)
   1007         self.assertEqual(pow(1,0), 1)
   1008         self.assertEqual(pow(1,1), 1)
   1009 
   1010         self.assertEqual(pow(2,0), 1)
   1011         self.assertEqual(pow(2,10), 1024)
   1012         self.assertEqual(pow(2,20), 1024*1024)
   1013         self.assertEqual(pow(2,30), 1024*1024*1024)
   1014 
   1015         self.assertEqual(pow(-2,0), 1)
   1016         self.assertEqual(pow(-2,1), -2)
   1017         self.assertEqual(pow(-2,2), 4)
   1018         self.assertEqual(pow(-2,3), -8)
   1019 
   1020         self.assertEqual(pow(0L,0), 1)
   1021         self.assertEqual(pow(0L,1), 0)
   1022         self.assertEqual(pow(1L,0), 1)
   1023         self.assertEqual(pow(1L,1), 1)
   1024 
   1025         self.assertEqual(pow(2L,0), 1)
   1026         self.assertEqual(pow(2L,10), 1024)
   1027         self.assertEqual(pow(2L,20), 1024*1024)
   1028         self.assertEqual(pow(2L,30), 1024*1024*1024)
   1029 
   1030         self.assertEqual(pow(-2L,0), 1)
   1031         self.assertEqual(pow(-2L,1), -2)
   1032         self.assertEqual(pow(-2L,2), 4)
   1033         self.assertEqual(pow(-2L,3), -8)
   1034 
   1035         self.assertAlmostEqual(pow(0.,0), 1.)
   1036         self.assertAlmostEqual(pow(0.,1), 0.)
   1037         self.assertAlmostEqual(pow(1.,0), 1.)
   1038         self.assertAlmostEqual(pow(1.,1), 1.)
   1039 
   1040         self.assertAlmostEqual(pow(2.,0), 1.)
   1041         self.assertAlmostEqual(pow(2.,10), 1024.)
   1042         self.assertAlmostEqual(pow(2.,20), 1024.*1024.)
   1043         self.assertAlmostEqual(pow(2.,30), 1024.*1024.*1024.)
   1044 
   1045         self.assertAlmostEqual(pow(-2.,0), 1.)
   1046         self.assertAlmostEqual(pow(-2.,1), -2.)
   1047         self.assertAlmostEqual(pow(-2.,2), 4.)
   1048         self.assertAlmostEqual(pow(-2.,3), -8.)
   1049 
   1050         for x in 2, 2L, 2.0:
   1051             for y in 10, 10L, 10.0:
   1052                 for z in 1000, 1000L, 1000.0:
   1053                     if isinstance(x, float) or \
   1054                        isinstance(y, float) or \
   1055                        isinstance(z, float):
   1056                         self.assertRaises(TypeError, pow, x, y, z)
   1057                     else:
   1058                         self.assertAlmostEqual(pow(x, y, z), 24.0)
   1059 
   1060         self.assertRaises(TypeError, pow, -1, -2, 3)
   1061         self.assertRaises(ValueError, pow, 1, 2, 0)
   1062         self.assertRaises(TypeError, pow, -1L, -2L, 3L)
   1063         self.assertRaises(ValueError, pow, 1L, 2L, 0L)
   1064         # Will return complex in 3.0:
   1065         self.assertRaises(ValueError, pow, -342.43, 0.234)
   1066 
   1067         self.assertRaises(TypeError, pow)
   1068 
   1069     def test_range(self):
   1070         self.assertEqual(range(3), [0, 1, 2])
   1071         self.assertEqual(range(1, 5), [1, 2, 3, 4])
   1072         self.assertEqual(range(0), [])
   1073         self.assertEqual(range(-3), [])
   1074         self.assertEqual(range(1, 10, 3), [1, 4, 7])
   1075         self.assertEqual(range(5, -5, -3), [5, 2, -1, -4])
   1076 
   1077         # Now test range() with longs
   1078         self.assertEqual(range(-2**100), [])
   1079         self.assertEqual(range(0, -2**100), [])
   1080         self.assertEqual(range(0, 2**100, -1), [])
   1081         self.assertEqual(range(0, 2**100, -1), [])
   1082 
   1083         a = long(10 * sys.maxint)
   1084         b = long(100 * sys.maxint)
   1085         c = long(50 * sys.maxint)
   1086 
   1087         self.assertEqual(range(a, a+2), [a, a+1])
   1088         self.assertEqual(range(a+2, a, -1L), [a+2, a+1])
   1089         self.assertEqual(range(a+4, a, -2), [a+4, a+2])
   1090 
   1091         seq = range(a, b, c)
   1092         self.assertIn(a, seq)
   1093         self.assertNotIn(b, seq)
   1094         self.assertEqual(len(seq), 2)
   1095 
   1096         seq = range(b, a, -c)
   1097         self.assertIn(b, seq)
   1098         self.assertNotIn(a, seq)
   1099         self.assertEqual(len(seq), 2)
   1100 
   1101         seq = range(-a, -b, -c)
   1102         self.assertIn(-a, seq)
   1103         self.assertNotIn(-b, seq)
   1104         self.assertEqual(len(seq), 2)
   1105 
   1106         self.assertRaises(TypeError, range)
   1107         self.assertRaises(TypeError, range, 1, 2, 3, 4)
   1108         self.assertRaises(ValueError, range, 1, 2, 0)
   1109         self.assertRaises(ValueError, range, a, a + 1, long(0))
   1110 
   1111         class badzero(int):
   1112             def __cmp__(self, other):
   1113                 raise RuntimeError
   1114             __hash__ = None # Invalid cmp makes this unhashable
   1115         self.assertRaises(RuntimeError, range, a, a + 1, badzero(1))
   1116 
   1117         # Reject floats.
   1118         self.assertRaises(TypeError, range, 1., 1., 1.)
   1119         self.assertRaises(TypeError, range, 1e100, 1e101, 1e101)
   1120 
   1121         self.assertRaises(TypeError, range, 0, "spam")
   1122         self.assertRaises(TypeError, range, 0, 42, "spam")
   1123 
   1124         self.assertRaises(OverflowError, range, -sys.maxint, sys.maxint)
   1125         self.assertRaises(OverflowError, range, 0, 2*sys.maxint)
   1126 
   1127         bignum = 2*sys.maxint
   1128         smallnum = 42
   1129         # Old-style user-defined class with __int__ method
   1130         class I0:
   1131             def __init__(self, n):
   1132                 self.n = int(n)
   1133             def __int__(self):
   1134                 return self.n
   1135         self.assertEqual(range(I0(bignum), I0(bignum + 1)), [bignum])
   1136         self.assertEqual(range(I0(smallnum), I0(smallnum + 1)), [smallnum])
   1137 
   1138         # New-style user-defined class with __int__ method
   1139         class I1(object):
   1140             def __init__(self, n):
   1141                 self.n = int(n)
   1142             def __int__(self):
   1143                 return self.n
   1144         self.assertEqual(range(I1(bignum), I1(bignum + 1)), [bignum])
   1145         self.assertEqual(range(I1(smallnum), I1(smallnum + 1)), [smallnum])
   1146 
   1147         # New-style user-defined class with failing __int__ method
   1148         class IX(object):
   1149             def __int__(self):
   1150                 raise RuntimeError
   1151         self.assertRaises(RuntimeError, range, IX())
   1152 
   1153         # New-style user-defined class with invalid __int__ method
   1154         class IN(object):
   1155             def __int__(self):
   1156                 return "not a number"
   1157         self.assertRaises(TypeError, range, IN())
   1158 
   1159         # Exercise various combinations of bad arguments, to check
   1160         # refcounting logic
   1161         self.assertRaises(TypeError, range, 0.0)
   1162 
   1163         self.assertRaises(TypeError, range, 0, 0.0)
   1164         self.assertRaises(TypeError, range, 0.0, 0)
   1165         self.assertRaises(TypeError, range, 0.0, 0.0)
   1166 
   1167         self.assertRaises(TypeError, range, 0, 0, 1.0)
   1168         self.assertRaises(TypeError, range, 0, 0.0, 1)
   1169         self.assertRaises(TypeError, range, 0, 0.0, 1.0)
   1170         self.assertRaises(TypeError, range, 0.0, 0, 1)
   1171         self.assertRaises(TypeError, range, 0.0, 0, 1.0)
   1172         self.assertRaises(TypeError, range, 0.0, 0.0, 1)
   1173         self.assertRaises(TypeError, range, 0.0, 0.0, 1.0)
   1174 
   1175 
   1176 
   1177     def test_input_and_raw_input(self):
   1178         self.write_testfile()
   1179         fp = open(TESTFN, 'r')
   1180         savestdin = sys.stdin
   1181         savestdout = sys.stdout # Eats the echo
   1182         try:
   1183             sys.stdin = fp
   1184             sys.stdout = BitBucket()
   1185             self.assertEqual(input(), 2)
   1186             self.assertEqual(input('testing\n'), 2)
   1187             self.assertEqual(raw_input(), 'The quick brown fox jumps over the lazy dog.')
   1188             self.assertEqual(raw_input('testing\n'), 'Dear John')
   1189 
   1190             # SF 1535165: don't segfault on closed stdin
   1191             # sys.stdout must be a regular file for triggering
   1192             sys.stdout = savestdout
   1193             sys.stdin.close()
   1194             self.assertRaises(ValueError, input)
   1195 
   1196             sys.stdout = BitBucket()
   1197             sys.stdin = cStringIO.StringIO("NULL\0")
   1198             self.assertRaises(TypeError, input, 42, 42)
   1199             sys.stdin = cStringIO.StringIO("    'whitespace'")
   1200             self.assertEqual(input(), 'whitespace')
   1201             sys.stdin = cStringIO.StringIO()
   1202             self.assertRaises(EOFError, input)
   1203 
   1204             # SF 876178: make sure input() respect future options.
   1205             sys.stdin = cStringIO.StringIO('1/2')
   1206             sys.stdout = cStringIO.StringIO()
   1207             exec compile('print input()', 'test_builtin_tmp', 'exec')
   1208             sys.stdin.seek(0, 0)
   1209             exec compile('from __future__ import division;print input()',
   1210                          'test_builtin_tmp', 'exec')
   1211             sys.stdin.seek(0, 0)
   1212             exec compile('print input()', 'test_builtin_tmp', 'exec')
   1213             # The result we expect depends on whether new division semantics
   1214             # are already in effect.
   1215             if 1/2 == 0:
   1216                 # This test was compiled with old semantics.
   1217                 expected = ['0', '0.5', '0']
   1218             else:
   1219                 # This test was compiled with new semantics (e.g., -Qnew
   1220                 # was given on the command line.
   1221                 expected = ['0.5', '0.5', '0.5']
   1222             self.assertEqual(sys.stdout.getvalue().splitlines(), expected)
   1223 
   1224             del sys.stdout
   1225             self.assertRaises(RuntimeError, input, 'prompt')
   1226             del sys.stdin
   1227             self.assertRaises(RuntimeError, input, 'prompt')
   1228         finally:
   1229             sys.stdin = savestdin
   1230             sys.stdout = savestdout
   1231             fp.close()
   1232             unlink(TESTFN)
   1233 
   1234     def test_reduce(self):
   1235         add = lambda x, y: x+y
   1236         self.assertEqual(reduce(add, ['a', 'b', 'c'], ''), 'abc')
   1237         self.assertEqual(
   1238             reduce(add, [['a', 'c'], [], ['d', 'w']], []),
   1239             ['a','c','d','w']
   1240         )
   1241         self.assertEqual(reduce(lambda x, y: x*y, range(2,8), 1), 5040)
   1242         self.assertEqual(
   1243             reduce(lambda x, y: x*y, range(2,21), 1L),
   1244             2432902008176640000L
   1245         )
   1246         self.assertEqual(reduce(add, Squares(10)), 285)
   1247         self.assertEqual(reduce(add, Squares(10), 0), 285)
   1248         self.assertEqual(reduce(add, Squares(0), 0), 0)
   1249         self.assertRaises(TypeError, reduce)
   1250         self.assertRaises(TypeError, reduce, 42)
   1251         self.assertRaises(TypeError, reduce, 42, 42)
   1252         self.assertRaises(TypeError, reduce, 42, 42, 42)
   1253         self.assertRaises(TypeError, reduce, None, range(5))
   1254         self.assertRaises(TypeError, reduce, add, 42)
   1255         self.assertEqual(reduce(42, "1"), "1") # func is never called with one item
   1256         self.assertEqual(reduce(42, "", "1"), "1") # func is never called with one item
   1257         self.assertRaises(TypeError, reduce, 42, (42, 42))
   1258         self.assertRaises(TypeError, reduce, add, []) # arg 2 must not be empty sequence with no initial value
   1259         self.assertRaises(TypeError, reduce, add, "")
   1260         self.assertRaises(TypeError, reduce, add, ())
   1261         self.assertEqual(reduce(add, [], None), None)
   1262         self.assertEqual(reduce(add, [], 42), 42)
   1263 
   1264         class BadSeq:
   1265             def __getitem__(self, index):
   1266                 raise ValueError
   1267         self.assertRaises(ValueError, reduce, 42, BadSeq())
   1268 
   1269     def test_reload(self):
   1270         import marshal
   1271         reload(marshal)
   1272         import string
   1273         reload(string)
   1274         ## import sys
   1275         ## self.assertRaises(ImportError, reload, sys)
   1276 
   1277     def test_repr(self):
   1278         self.assertEqual(repr(''), '\'\'')
   1279         self.assertEqual(repr(0), '0')
   1280         self.assertEqual(repr(0L), '0L')
   1281         self.assertEqual(repr(()), '()')
   1282         self.assertEqual(repr([]), '[]')
   1283         self.assertEqual(repr({}), '{}')
   1284         a = []
   1285         a.append(a)
   1286         self.assertEqual(repr(a), '[[...]]')
   1287         a = {}
   1288         a[0] = a
   1289         self.assertEqual(repr(a), '{0: {...}}')
   1290 
   1291     def test_round(self):
   1292         self.assertEqual(round(0.0), 0.0)
   1293         self.assertEqual(type(round(0.0)), float)  # Will be int in 3.0.
   1294         self.assertEqual(round(1.0), 1.0)
   1295         self.assertEqual(round(10.0), 10.0)
   1296         self.assertEqual(round(1000000000.0), 1000000000.0)
   1297         self.assertEqual(round(1e20), 1e20)
   1298 
   1299         self.assertEqual(round(-1.0), -1.0)
   1300         self.assertEqual(round(-10.0), -10.0)
   1301         self.assertEqual(round(-1000000000.0), -1000000000.0)
   1302         self.assertEqual(round(-1e20), -1e20)
   1303 
   1304         self.assertEqual(round(0.1), 0.0)
   1305         self.assertEqual(round(1.1), 1.0)
   1306         self.assertEqual(round(10.1), 10.0)
   1307         self.assertEqual(round(1000000000.1), 1000000000.0)
   1308 
   1309         self.assertEqual(round(-1.1), -1.0)
   1310         self.assertEqual(round(-10.1), -10.0)
   1311         self.assertEqual(round(-1000000000.1), -1000000000.0)
   1312 
   1313         self.assertEqual(round(0.9), 1.0)
   1314         self.assertEqual(round(9.9), 10.0)
   1315         self.assertEqual(round(999999999.9), 1000000000.0)
   1316 
   1317         self.assertEqual(round(-0.9), -1.0)
   1318         self.assertEqual(round(-9.9), -10.0)
   1319         self.assertEqual(round(-999999999.9), -1000000000.0)
   1320 
   1321         self.assertEqual(round(-8.0, -1), -10.0)
   1322         self.assertEqual(type(round(-8.0, -1)), float)
   1323 
   1324         self.assertEqual(type(round(-8.0, 0)), float)
   1325         self.assertEqual(type(round(-8.0, 1)), float)
   1326 
   1327         # Check half rounding behaviour.
   1328         self.assertEqual(round(5.5), 6)
   1329         self.assertEqual(round(6.5), 7)
   1330         self.assertEqual(round(-5.5), -6)
   1331         self.assertEqual(round(-6.5), -7)
   1332 
   1333         # Check behavior on ints
   1334         self.assertEqual(round(0), 0)
   1335         self.assertEqual(round(8), 8)
   1336         self.assertEqual(round(-8), -8)
   1337         self.assertEqual(type(round(0)), float)  # Will be int in 3.0.
   1338         self.assertEqual(type(round(-8, -1)), float)
   1339         self.assertEqual(type(round(-8, 0)), float)
   1340         self.assertEqual(type(round(-8, 1)), float)
   1341 
   1342         # test new kwargs
   1343         self.assertEqual(round(number=-8.0, ndigits=-1), -10.0)
   1344 
   1345         self.assertRaises(TypeError, round)
   1346 
   1347         # test generic rounding delegation for reals
   1348         class TestRound(object):
   1349             def __float__(self):
   1350                 return 23.0
   1351 
   1352         class TestNoRound(object):
   1353             pass
   1354 
   1355         self.assertEqual(round(TestRound()), 23)
   1356 
   1357         self.assertRaises(TypeError, round, 1, 2, 3)
   1358         self.assertRaises(TypeError, round, TestNoRound())
   1359 
   1360         t = TestNoRound()
   1361         t.__float__ = lambda *args: args
   1362         self.assertRaises(TypeError, round, t)
   1363         self.assertRaises(TypeError, round, t, 0)
   1364 
   1365     # Some versions of glibc for alpha have a bug that affects
   1366     # float -> integer rounding (floor, ceil, rint, round) for
   1367     # values in the range [2**52, 2**53).  See:
   1368     #
   1369     #   http://sources.redhat.com/bugzilla/show_bug.cgi?id=5350
   1370     #
   1371     # We skip this test on Linux/alpha if it would fail.
   1372     linux_alpha = (platform.system().startswith('Linux') and
   1373                    platform.machine().startswith('alpha'))
   1374     system_round_bug = round(5e15+1) != 5e15+1
   1375     @unittest.skipIf(linux_alpha and system_round_bug,
   1376                      "test will fail;  failure is probably due to a "
   1377                      "buggy system round function")
   1378     def test_round_large(self):
   1379         # Issue #1869: integral floats should remain unchanged
   1380         self.assertEqual(round(5e15-1), 5e15-1)
   1381         self.assertEqual(round(5e15), 5e15)
   1382         self.assertEqual(round(5e15+1), 5e15+1)
   1383         self.assertEqual(round(5e15+2), 5e15+2)
   1384         self.assertEqual(round(5e15+3), 5e15+3)
   1385 
   1386     def test_setattr(self):
   1387         setattr(sys, 'spam', 1)
   1388         self.assertEqual(sys.spam, 1)
   1389         self.assertRaises(TypeError, setattr, sys, 1, 'spam')
   1390         self.assertRaises(TypeError, setattr)
   1391 
   1392     def test_sum(self):
   1393         self.assertEqual(sum([]), 0)
   1394         self.assertEqual(sum(range(2,8)), 27)
   1395         self.assertEqual(sum(iter(range(2,8))), 27)
   1396         self.assertEqual(sum(Squares(10)), 285)
   1397         self.assertEqual(sum(iter(Squares(10))), 285)
   1398         self.assertEqual(sum([[1], [2], [3]], []), [1, 2, 3])
   1399 
   1400         self.assertRaises(TypeError, sum)
   1401         self.assertRaises(TypeError, sum, 42)
   1402         self.assertRaises(TypeError, sum, ['a', 'b', 'c'])
   1403         self.assertRaises(TypeError, sum, ['a', 'b', 'c'], '')
   1404         self.assertRaises(TypeError, sum, [[1], [2], [3]])
   1405         self.assertRaises(TypeError, sum, [{2:3}])
   1406         self.assertRaises(TypeError, sum, [{2:3}]*2, {2:3})
   1407 
   1408         class BadSeq:
   1409             def __getitem__(self, index):
   1410                 raise ValueError
   1411         self.assertRaises(ValueError, sum, BadSeq())
   1412 
   1413         empty = []
   1414         sum(([x] for x in range(10)), empty)
   1415         self.assertEqual(empty, [])
   1416 
   1417     def test_type(self):
   1418         self.assertEqual(type(''),  type('123'))
   1419         self.assertNotEqual(type(''), type(()))
   1420 
   1421     def test_unichr(self):
   1422         if have_unicode:
   1423             self.assertEqual(unichr(32), unicode(' '))
   1424             self.assertEqual(unichr(65), unicode('A'))
   1425             self.assertEqual(unichr(97), unicode('a'))
   1426             self.assertEqual(
   1427                 unichr(sys.maxunicode),
   1428                 unicode('\\U%08x' % (sys.maxunicode), 'unicode-escape')
   1429             )
   1430             self.assertRaises(ValueError, unichr, sys.maxunicode+1)
   1431             self.assertRaises(TypeError, unichr)
   1432             self.assertRaises((OverflowError, ValueError), unichr, 2**32)
   1433 
   1434     # We don't want self in vars(), so these are static methods
   1435 
   1436     @staticmethod
   1437     def get_vars_f0():
   1438         return vars()
   1439 
   1440     @staticmethod
   1441     def get_vars_f2():
   1442         BuiltinTest.get_vars_f0()
   1443         a = 1
   1444         b = 2
   1445         return vars()
   1446 
   1447     class C_get_vars(object):
   1448         def getDict(self):
   1449             return {'a':2}
   1450         __dict__ = property(fget=getDict)
   1451 
   1452     def test_vars(self):
   1453         self.assertEqual(set(vars()), set(dir()))
   1454         import sys
   1455         self.assertEqual(set(vars(sys)), set(dir(sys)))
   1456         self.assertEqual(self.get_vars_f0(), {})
   1457         self.assertEqual(self.get_vars_f2(), {'a': 1, 'b': 2})
   1458         self.assertRaises(TypeError, vars, 42, 42)
   1459         self.assertRaises(TypeError, vars, 42)
   1460         self.assertEqual(vars(self.C_get_vars()), {'a':2})
   1461 
   1462     def test_zip(self):
   1463         a = (1, 2, 3)
   1464         b = (4, 5, 6)
   1465         t = [(1, 4), (2, 5), (3, 6)]
   1466         self.assertEqual(zip(a, b), t)
   1467         b = [4, 5, 6]
   1468         self.assertEqual(zip(a, b), t)
   1469         b = (4, 5, 6, 7)
   1470         self.assertEqual(zip(a, b), t)
   1471         class I:
   1472             def __getitem__(self, i):
   1473                 if i < 0 or i > 2: raise IndexError
   1474                 return i + 4
   1475         self.assertEqual(zip(a, I()), t)
   1476         self.assertEqual(zip(), [])
   1477         self.assertEqual(zip(*[]), [])
   1478         self.assertRaises(TypeError, zip, None)
   1479         class G:
   1480             pass
   1481         self.assertRaises(TypeError, zip, a, G())
   1482 
   1483         # Make sure zip doesn't try to allocate a billion elements for the
   1484         # result list when one of its arguments doesn't say how long it is.
   1485         # A MemoryError is the most likely failure mode.
   1486         class SequenceWithoutALength:
   1487             def __getitem__(self, i):
   1488                 if i == 5:
   1489                     raise IndexError
   1490                 else:
   1491                     return i
   1492         self.assertEqual(
   1493             zip(SequenceWithoutALength(), xrange(2**30)),
   1494             list(enumerate(range(5)))
   1495         )
   1496 
   1497         class BadSeq:
   1498             def __getitem__(self, i):
   1499                 if i == 5:
   1500                     raise ValueError
   1501                 else:
   1502                     return i
   1503         self.assertRaises(ValueError, zip, BadSeq(), BadSeq())
   1504 
   1505     def test_format(self):
   1506         # Test the basic machinery of the format() builtin.  Don't test
   1507         #  the specifics of the various formatters
   1508         self.assertEqual(format(3, ''), '3')
   1509 
   1510         # Returns some classes to use for various tests.  There's
   1511         #  an old-style version, and a new-style version
   1512         def classes_new():
   1513             class A(object):
   1514                 def __init__(self, x):
   1515                     self.x = x
   1516                 def __format__(self, format_spec):
   1517                     return str(self.x) + format_spec
   1518             class DerivedFromA(A):
   1519                 pass
   1520 
   1521             class Simple(object): pass
   1522             class DerivedFromSimple(Simple):
   1523                 def __init__(self, x):
   1524                     self.x = x
   1525                 def __format__(self, format_spec):
   1526                     return str(self.x) + format_spec
   1527             class DerivedFromSimple2(DerivedFromSimple): pass
   1528             return A, DerivedFromA, DerivedFromSimple, DerivedFromSimple2
   1529 
   1530         # In 3.0, classes_classic has the same meaning as classes_new
   1531         def classes_classic():
   1532             class A:
   1533                 def __init__(self, x):
   1534                     self.x = x
   1535                 def __format__(self, format_spec):
   1536                     return str(self.x) + format_spec
   1537             class DerivedFromA(A):
   1538                 pass
   1539 
   1540             class Simple: pass
   1541             class DerivedFromSimple(Simple):
   1542                 def __init__(self, x):
   1543                     self.x = x
   1544                 def __format__(self, format_spec):
   1545                     return str(self.x) + format_spec
   1546             class DerivedFromSimple2(DerivedFromSimple): pass
   1547             return A, DerivedFromA, DerivedFromSimple, DerivedFromSimple2
   1548 
   1549         def class_test(A, DerivedFromA, DerivedFromSimple, DerivedFromSimple2):
   1550             self.assertEqual(format(A(3), 'spec'), '3spec')
   1551             self.assertEqual(format(DerivedFromA(4), 'spec'), '4spec')
   1552             self.assertEqual(format(DerivedFromSimple(5), 'abc'), '5abc')
   1553             self.assertEqual(format(DerivedFromSimple2(10), 'abcdef'),
   1554                              '10abcdef')
   1555 
   1556         class_test(*classes_new())
   1557         class_test(*classes_classic())
   1558 
   1559         def empty_format_spec(value):
   1560             # test that:
   1561             #  format(x, '') == str(x)
   1562             #  format(x) == str(x)
   1563             self.assertEqual(format(value, ""), str(value))
   1564             self.assertEqual(format(value), str(value))
   1565 
   1566         # for builtin types, format(x, "") == str(x)
   1567         empty_format_spec(17**13)
   1568         empty_format_spec(1.0)
   1569         empty_format_spec(3.1415e104)
   1570         empty_format_spec(-3.1415e104)
   1571         empty_format_spec(3.1415e-104)
   1572         empty_format_spec(-3.1415e-104)
   1573         empty_format_spec(object)
   1574         empty_format_spec(None)
   1575 
   1576         # TypeError because self.__format__ returns the wrong type
   1577         class BadFormatResult:
   1578             def __format__(self, format_spec):
   1579                 return 1.0
   1580         self.assertRaises(TypeError, format, BadFormatResult(), "")
   1581 
   1582         # TypeError because format_spec is not unicode or str
   1583         self.assertRaises(TypeError, format, object(), 4)
   1584         self.assertRaises(TypeError, format, object(), object())
   1585 
   1586         # tests for object.__format__ really belong elsewhere, but
   1587         #  there's no good place to put them
   1588         x = object().__format__('')
   1589         self.assertTrue(x.startswith('<object object at'))
   1590 
   1591         # first argument to object.__format__ must be string
   1592         self.assertRaises(TypeError, object().__format__, 3)
   1593         self.assertRaises(TypeError, object().__format__, object())
   1594         self.assertRaises(TypeError, object().__format__, None)
   1595 
   1596         # --------------------------------------------------------------------
   1597         # Issue #7994: object.__format__ with a non-empty format string is
   1598         #  pending deprecated
   1599         def test_deprecated_format_string(obj, fmt_str, should_raise_warning):
   1600             with warnings.catch_warnings(record=True) as w:
   1601                 warnings.simplefilter("always", PendingDeprecationWarning)
   1602                 format(obj, fmt_str)
   1603             if should_raise_warning:
   1604                 self.assertEqual(len(w), 1)
   1605                 self.assertIsInstance(w[0].message, PendingDeprecationWarning)
   1606                 self.assertIn('object.__format__ with a non-empty format '
   1607                               'string', str(w[0].message))
   1608             else:
   1609                 self.assertEqual(len(w), 0)
   1610 
   1611         fmt_strs = ['', 's', u'', u's']
   1612 
   1613         class A:
   1614             def __format__(self, fmt_str):
   1615                 return format('', fmt_str)
   1616 
   1617         for fmt_str in fmt_strs:
   1618             test_deprecated_format_string(A(), fmt_str, False)
   1619 
   1620         class B:
   1621             pass
   1622 
   1623         class C(object):
   1624             pass
   1625 
   1626         for cls in [object, B, C]:
   1627             for fmt_str in fmt_strs:
   1628                 test_deprecated_format_string(cls(), fmt_str, len(fmt_str) != 0)
   1629         # --------------------------------------------------------------------
   1630 
   1631         # make sure we can take a subclass of str as a format spec
   1632         class DerivedFromStr(str): pass
   1633         self.assertEqual(format(0, DerivedFromStr('10')), '         0')
   1634 
   1635     def test_bin(self):
   1636         self.assertEqual(bin(0), '0b0')
   1637         self.assertEqual(bin(1), '0b1')
   1638         self.assertEqual(bin(-1), '-0b1')
   1639         self.assertEqual(bin(2**65), '0b1' + '0' * 65)
   1640         self.assertEqual(bin(2**65-1), '0b' + '1' * 65)
   1641         self.assertEqual(bin(-(2**65)), '-0b1' + '0' * 65)
   1642         self.assertEqual(bin(-(2**65-1)), '-0b' + '1' * 65)
   1643 
   1644     def test_bytearray_translate(self):
   1645         x = bytearray("abc")
   1646         self.assertRaises(ValueError, x.translate, "1", 1)
   1647         self.assertRaises(TypeError, x.translate, "1"*256, 1)
   1648 
   1649 class TestSorted(unittest.TestCase):
   1650 
   1651     def test_basic(self):
   1652         data = range(100)
   1653         copy = data[:]
   1654         random.shuffle(copy)
   1655         self.assertEqual(data, sorted(copy))
   1656         self.assertNotEqual(data, copy)
   1657 
   1658         data.reverse()
   1659         random.shuffle(copy)
   1660         self.assertEqual(data, sorted(copy, cmp=lambda x, y: cmp(y,x)))
   1661         self.assertNotEqual(data, copy)
   1662         random.shuffle(copy)
   1663         self.assertEqual(data, sorted(copy, key=lambda x: -x))
   1664         self.assertNotEqual(data, copy)
   1665         random.shuffle(copy)
   1666         self.assertEqual(data, sorted(copy, reverse=1))
   1667         self.assertNotEqual(data, copy)
   1668 
   1669     def test_inputtypes(self):
   1670         s = 'abracadabra'
   1671         types = [list, tuple]
   1672         if have_unicode:
   1673             types.insert(0, unicode)
   1674         for T in types:
   1675             self.assertEqual(sorted(s), sorted(T(s)))
   1676 
   1677         s = ''.join(dict.fromkeys(s).keys())  # unique letters only
   1678         types = [set, frozenset, list, tuple, dict.fromkeys]
   1679         if have_unicode:
   1680             types.insert(0, unicode)
   1681         for T in types:
   1682             self.assertEqual(sorted(s), sorted(T(s)))
   1683 
   1684     def test_baddecorator(self):
   1685         data = 'The quick Brown fox Jumped over The lazy Dog'.split()
   1686         self.assertRaises(TypeError, sorted, data, None, lambda x,y: 0)
   1687 
   1688 def _run_unittest(*args):
   1689     with check_py3k_warnings(
   1690             (".+ not supported in 3.x", DeprecationWarning),
   1691             (".+ is renamed to imp.reload", DeprecationWarning),
   1692             ("classic int division", DeprecationWarning)):
   1693         run_unittest(*args)
   1694 
   1695 def test_main(verbose=None):
   1696     test_classes = (BuiltinTest, TestSorted)
   1697 
   1698     _run_unittest(*test_classes)
   1699 
   1700     # verify reference counting
   1701     if verbose and hasattr(sys, "gettotalrefcount"):
   1702         import gc
   1703         counts = [None] * 5
   1704         for i in xrange(len(counts)):
   1705             _run_unittest(*test_classes)
   1706             gc.collect()
   1707             counts[i] = sys.gettotalrefcount()
   1708         print counts
   1709 
   1710 
   1711 if __name__ == "__main__":
   1712     test_main(verbose=True)
   1713