Home | History | Annotate | Download | only in test
      1 # Python test set -- built-in functions
      2 
      3 import ast
      4 import builtins
      5 import collections
      6 import decimal
      7 import fractions
      8 import io
      9 import locale
     10 import os
     11 import pickle
     12 import platform
     13 import random
     14 import re
     15 import sys
     16 import traceback
     17 import types
     18 import unittest
     19 import warnings
     20 from operator import neg
     21 from test.support import TESTFN, unlink,  run_unittest, check_warnings
     22 from test.support.script_helper import assert_python_ok
     23 try:
     24     import pty, signal
     25 except ImportError:
     26     pty = signal = None
     27 
     28 
     29 class Squares:
     30 
     31     def __init__(self, max):
     32         self.max = max
     33         self.sofar = []
     34 
     35     def __len__(self): return len(self.sofar)
     36 
     37     def __getitem__(self, i):
     38         if not 0 <= i < self.max: raise IndexError
     39         n = len(self.sofar)
     40         while n <= i:
     41             self.sofar.append(n*n)
     42             n += 1
     43         return self.sofar[i]
     44 
     45 class StrSquares:
     46 
     47     def __init__(self, max):
     48         self.max = max
     49         self.sofar = []
     50 
     51     def __len__(self):
     52         return len(self.sofar)
     53 
     54     def __getitem__(self, i):
     55         if not 0 <= i < self.max:
     56             raise IndexError
     57         n = len(self.sofar)
     58         while n <= i:
     59             self.sofar.append(str(n*n))
     60             n += 1
     61         return self.sofar[i]
     62 
     63 class BitBucket:
     64     def write(self, line):
     65         pass
     66 
     67 test_conv_no_sign = [
     68         ('0', 0),
     69         ('1', 1),
     70         ('9', 9),
     71         ('10', 10),
     72         ('99', 99),
     73         ('100', 100),
     74         ('314', 314),
     75         (' 314', 314),
     76         ('314 ', 314),
     77         ('  \t\t  314  \t\t  ', 314),
     78         (repr(sys.maxsize), sys.maxsize),
     79         ('  1x', ValueError),
     80         ('  1  ', 1),
     81         ('  1\02  ', ValueError),
     82         ('', ValueError),
     83         (' ', ValueError),
     84         ('  \t\t  ', ValueError),
     85         (str(br'\u0663\u0661\u0664 ','raw-unicode-escape'), 314),
     86         (chr(0x200), ValueError),
     87 ]
     88 
     89 test_conv_sign = [
     90         ('0', 0),
     91         ('1', 1),
     92         ('9', 9),
     93         ('10', 10),
     94         ('99', 99),
     95         ('100', 100),
     96         ('314', 314),
     97         (' 314', ValueError),
     98         ('314 ', 314),
     99         ('  \t\t  314  \t\t  ', ValueError),
    100         (repr(sys.maxsize), sys.maxsize),
    101         ('  1x', ValueError),
    102         ('  1  ', ValueError),
    103         ('  1\02  ', ValueError),
    104         ('', ValueError),
    105         (' ', ValueError),
    106         ('  \t\t  ', ValueError),
    107         (str(br'\u0663\u0661\u0664 ','raw-unicode-escape'), 314),
    108         (chr(0x200), ValueError),
    109 ]
    110 
    111 class TestFailingBool:
    112     def __bool__(self):
    113         raise RuntimeError
    114 
    115 class TestFailingIter:
    116     def __iter__(self):
    117         raise RuntimeError
    118 
    119 def filter_char(arg):
    120     return ord(arg) > ord("d")
    121 
    122 def map_char(arg):
    123     return chr(ord(arg)+1)
    124 
    125 class BuiltinTest(unittest.TestCase):
    126     # Helper to check picklability
    127     def check_iter_pickle(self, it, seq, proto):
    128         itorg = it
    129         d = pickle.dumps(it, proto)
    130         it = pickle.loads(d)
    131         self.assertEqual(type(itorg), type(it))
    132         self.assertEqual(list(it), seq)
    133 
    134         #test the iterator after dropping one from it
    135         it = pickle.loads(d)
    136         try:
    137             next(it)
    138         except StopIteration:
    139             return
    140         d = pickle.dumps(it, proto)
    141         it = pickle.loads(d)
    142         self.assertEqual(list(it), seq[1:])
    143 
    144     def test_import(self):
    145         __import__('sys')
    146         __import__('time')
    147         __import__('string')
    148         __import__(name='sys')
    149         __import__(name='time', level=0)
    150         self.assertRaises(ImportError, __import__, 'spamspam')
    151         self.assertRaises(TypeError, __import__, 1, 2, 3, 4)
    152         self.assertRaises(ValueError, __import__, '')
    153         self.assertRaises(TypeError, __import__, 'sys', name='sys')
    154 
    155     def test_abs(self):
    156         # int
    157         self.assertEqual(abs(0), 0)
    158         self.assertEqual(abs(1234), 1234)
    159         self.assertEqual(abs(-1234), 1234)
    160         self.assertTrue(abs(-sys.maxsize-1) > 0)
    161         # float
    162         self.assertEqual(abs(0.0), 0.0)
    163         self.assertEqual(abs(3.14), 3.14)
    164         self.assertEqual(abs(-3.14), 3.14)
    165         # str
    166         self.assertRaises(TypeError, abs, 'a')
    167         # bool
    168         self.assertEqual(abs(True), 1)
    169         self.assertEqual(abs(False), 0)
    170         # other
    171         self.assertRaises(TypeError, abs)
    172         self.assertRaises(TypeError, abs, None)
    173         class AbsClass(object):
    174             def __abs__(self):
    175                 return -5
    176         self.assertEqual(abs(AbsClass()), -5)
    177 
    178     def test_all(self):
    179         self.assertEqual(all([2, 4, 6]), True)
    180         self.assertEqual(all([2, None, 6]), False)
    181         self.assertRaises(RuntimeError, all, [2, TestFailingBool(), 6])
    182         self.assertRaises(RuntimeError, all, TestFailingIter())
    183         self.assertRaises(TypeError, all, 10)               # Non-iterable
    184         self.assertRaises(TypeError, all)                   # No args
    185         self.assertRaises(TypeError, all, [2, 4, 6], [])    # Too many args
    186         self.assertEqual(all([]), True)                     # Empty iterator
    187         self.assertEqual(all([0, TestFailingBool()]), False)# Short-circuit
    188         S = [50, 60]
    189         self.assertEqual(all(x > 42 for x in S), True)
    190         S = [50, 40, 60]
    191         self.assertEqual(all(x > 42 for x in S), False)
    192 
    193     def test_any(self):
    194         self.assertEqual(any([None, None, None]), False)
    195         self.assertEqual(any([None, 4, None]), True)
    196         self.assertRaises(RuntimeError, any, [None, TestFailingBool(), 6])
    197         self.assertRaises(RuntimeError, any, TestFailingIter())
    198         self.assertRaises(TypeError, any, 10)               # Non-iterable
    199         self.assertRaises(TypeError, any)                   # No args
    200         self.assertRaises(TypeError, any, [2, 4, 6], [])    # Too many args
    201         self.assertEqual(any([]), False)                    # Empty iterator
    202         self.assertEqual(any([1, TestFailingBool()]), True) # Short-circuit
    203         S = [40, 60, 30]
    204         self.assertEqual(any(x > 42 for x in S), True)
    205         S = [10, 20, 30]
    206         self.assertEqual(any(x > 42 for x in S), False)
    207 
    208     def test_ascii(self):
    209         self.assertEqual(ascii(''), '\'\'')
    210         self.assertEqual(ascii(0), '0')
    211         self.assertEqual(ascii(()), '()')
    212         self.assertEqual(ascii([]), '[]')
    213         self.assertEqual(ascii({}), '{}')
    214         a = []
    215         a.append(a)
    216         self.assertEqual(ascii(a), '[[...]]')
    217         a = {}
    218         a[0] = a
    219         self.assertEqual(ascii(a), '{0: {...}}')
    220         # Advanced checks for unicode strings
    221         def _check_uni(s):
    222             self.assertEqual(ascii(s), repr(s))
    223         _check_uni("'")
    224         _check_uni('"')
    225         _check_uni('"\'')
    226         _check_uni('\0')
    227         _check_uni('\r\n\t .')
    228         # Unprintable non-ASCII characters
    229         _check_uni('\x85')
    230         _check_uni('\u1fff')
    231         _check_uni('\U00012fff')
    232         # Lone surrogates
    233         _check_uni('\ud800')
    234         _check_uni('\udfff')
    235         # Issue #9804: surrogates should be joined even for printable
    236         # wide characters (UCS-2 builds).
    237         self.assertEqual(ascii('\U0001d121'), "'\\U0001d121'")
    238         # All together
    239         s = "'\0\"\n\r\t abcd\x85\U00012fff\uD800\U0001D121xxx."
    240         self.assertEqual(ascii(s),
    241             r"""'\'\x00"\n\r\t abcd\x85\xe9\U00012fff\ud800\U0001d121xxx.'""")
    242 
    243     def test_neg(self):
    244         x = -sys.maxsize-1
    245         self.assertTrue(isinstance(x, int))
    246         self.assertEqual(-x, sys.maxsize+1)
    247 
    248     def test_callable(self):
    249         self.assertTrue(callable(len))
    250         self.assertFalse(callable("a"))
    251         self.assertTrue(callable(callable))
    252         self.assertTrue(callable(lambda x, y: x + y))
    253         self.assertFalse(callable(__builtins__))
    254         def f(): pass
    255         self.assertTrue(callable(f))
    256 
    257         class C1:
    258             def meth(self): pass
    259         self.assertTrue(callable(C1))
    260         c = C1()
    261         self.assertTrue(callable(c.meth))
    262         self.assertFalse(callable(c))
    263 
    264         # __call__ is looked up on the class, not the instance
    265         c.__call__ = None
    266         self.assertFalse(callable(c))
    267         c.__call__ = lambda self: 0
    268         self.assertFalse(callable(c))
    269         del c.__call__
    270         self.assertFalse(callable(c))
    271 
    272         class C2(object):
    273             def __call__(self): pass
    274         c2 = C2()
    275         self.assertTrue(callable(c2))
    276         c2.__call__ = None
    277         self.assertTrue(callable(c2))
    278         class C3(C2): pass
    279         c3 = C3()
    280         self.assertTrue(callable(c3))
    281 
    282     def test_chr(self):
    283         self.assertEqual(chr(32), ' ')
    284         self.assertEqual(chr(65), 'A')
    285         self.assertEqual(chr(97), 'a')
    286         self.assertEqual(chr(0xff), '\xff')
    287         self.assertRaises(ValueError, chr, 1<<24)
    288         self.assertEqual(chr(sys.maxunicode),
    289                          str('\\U0010ffff'.encode("ascii"), 'unicode-escape'))
    290         self.assertRaises(TypeError, chr)
    291         self.assertEqual(chr(0x0000FFFF), "\U0000FFFF")
    292         self.assertEqual(chr(0x00010000), "\U00010000")
    293         self.assertEqual(chr(0x00010001), "\U00010001")
    294         self.assertEqual(chr(0x000FFFFE), "\U000FFFFE")
    295         self.assertEqual(chr(0x000FFFFF), "\U000FFFFF")
    296         self.assertEqual(chr(0x00100000), "\U00100000")
    297         self.assertEqual(chr(0x00100001), "\U00100001")
    298         self.assertEqual(chr(0x0010FFFE), "\U0010FFFE")
    299         self.assertEqual(chr(0x0010FFFF), "\U0010FFFF")
    300         self.assertRaises(ValueError, chr, -1)
    301         self.assertRaises(ValueError, chr, 0x00110000)
    302         self.assertRaises((OverflowError, ValueError), chr, 2**32)
    303 
    304     def test_cmp(self):
    305         self.assertTrue(not hasattr(builtins, "cmp"))
    306 
    307     def test_compile(self):
    308         compile('print(1)\n', '', 'exec')
    309         bom = b'\xef\xbb\xbf'
    310         compile(bom + b'print(1)\n', '', 'exec')
    311         compile(source='pass', filename='?', mode='exec')
    312         compile(dont_inherit=0, filename='tmp', source='0', mode='eval')
    313         compile('pass', '?', dont_inherit=1, mode='exec')
    314         compile(memoryview(b"text"), "name", "exec")
    315         self.assertRaises(TypeError, compile)
    316         self.assertRaises(ValueError, compile, 'print(42)\n', '<string>', 'badmode')
    317         self.assertRaises(ValueError, compile, 'print(42)\n', '<string>', 'single', 0xff)
    318         self.assertRaises(ValueError, compile, chr(0), 'f', 'exec')
    319         self.assertRaises(TypeError, compile, 'pass', '?', 'exec',
    320                           mode='eval', source='0', filename='tmp')
    321         compile('print("\xe5")\n', '', 'exec')
    322         self.assertRaises(ValueError, compile, chr(0), 'f', 'exec')
    323         self.assertRaises(ValueError, compile, str('a = 1'), 'f', 'bad')
    324 
    325         # test the optimize argument
    326 
    327         codestr = '''def f():
    328         """doc"""
    329         try:
    330             assert False
    331         except AssertionError:
    332             return (True, f.__doc__)
    333         else:
    334             return (False, f.__doc__)
    335         '''
    336         def f(): """doc"""
    337         values = [(-1, __debug__, f.__doc__),
    338                   (0, True, 'doc'),
    339                   (1, False, 'doc'),
    340                   (2, False, None)]
    341         for optval, debugval, docstring in values:
    342             # test both direct compilation and compilation via AST
    343             codeobjs = []
    344             codeobjs.append(compile(codestr, "<test>", "exec", optimize=optval))
    345             tree = ast.parse(codestr)
    346             codeobjs.append(compile(tree, "<test>", "exec", optimize=optval))
    347             for code in codeobjs:
    348                 ns = {}
    349                 exec(code, ns)
    350                 rv = ns['f']()
    351                 self.assertEqual(rv, (debugval, docstring))
    352 
    353     def test_delattr(self):
    354         sys.spam = 1
    355         delattr(sys, 'spam')
    356         self.assertRaises(TypeError, delattr)
    357 
    358     def test_dir(self):
    359         # dir(wrong number of arguments)
    360         self.assertRaises(TypeError, dir, 42, 42)
    361 
    362         # dir() - local scope
    363         local_var = 1
    364         self.assertIn('local_var', dir())
    365 
    366         # dir(module)
    367         self.assertIn('exit', dir(sys))
    368 
    369         # dir(module_with_invalid__dict__)
    370         class Foo(types.ModuleType):
    371             __dict__ = 8
    372         f = Foo("foo")
    373         self.assertRaises(TypeError, dir, f)
    374 
    375         # dir(type)
    376         self.assertIn("strip", dir(str))
    377         self.assertNotIn("__mro__", dir(str))
    378 
    379         # dir(obj)
    380         class Foo(object):
    381             def __init__(self):
    382                 self.x = 7
    383                 self.y = 8
    384                 self.z = 9
    385         f = Foo()
    386         self.assertIn("y", dir(f))
    387 
    388         # dir(obj_no__dict__)
    389         class Foo(object):
    390             __slots__ = []
    391         f = Foo()
    392         self.assertIn("__repr__", dir(f))
    393 
    394         # dir(obj_no__class__with__dict__)
    395         # (an ugly trick to cause getattr(f, "__class__") to fail)
    396         class Foo(object):
    397             __slots__ = ["__class__", "__dict__"]
    398             def __init__(self):
    399                 self.bar = "wow"
    400         f = Foo()
    401         self.assertNotIn("__repr__", dir(f))
    402         self.assertIn("bar", dir(f))
    403 
    404         # dir(obj_using __dir__)
    405         class Foo(object):
    406             def __dir__(self):
    407                 return ["kan", "ga", "roo"]
    408         f = Foo()
    409         self.assertTrue(dir(f) == ["ga", "kan", "roo"])
    410 
    411         # dir(obj__dir__tuple)
    412         class Foo(object):
    413             def __dir__(self):
    414                 return ("b", "c", "a")
    415         res = dir(Foo())
    416         self.assertIsInstance(res, list)
    417         self.assertTrue(res == ["a", "b", "c"])
    418 
    419         # dir(obj__dir__not_sequence)
    420         class Foo(object):
    421             def __dir__(self):
    422                 return 7
    423         f = Foo()
    424         self.assertRaises(TypeError, dir, f)
    425 
    426         # dir(traceback)
    427         try:
    428             raise IndexError
    429         except:
    430             self.assertEqual(len(dir(sys.exc_info()[2])), 4)
    431 
    432         # test that object has a __dir__()
    433         self.assertEqual(sorted([].__dir__()), dir([]))
    434 
    435     def test_divmod(self):
    436         self.assertEqual(divmod(12, 7), (1, 5))
    437         self.assertEqual(divmod(-12, 7), (-2, 2))
    438         self.assertEqual(divmod(12, -7), (-2, -2))
    439         self.assertEqual(divmod(-12, -7), (1, -5))
    440 
    441         self.assertEqual(divmod(-sys.maxsize-1, -1), (sys.maxsize+1, 0))
    442 
    443         for num, denom, exp_result in [ (3.25, 1.0, (3.0, 0.25)),
    444                                         (-3.25, 1.0, (-4.0, 0.75)),
    445                                         (3.25, -1.0, (-4.0, -0.75)),
    446                                         (-3.25, -1.0, (3.0, -0.25))]:
    447             result = divmod(num, denom)
    448             self.assertAlmostEqual(result[0], exp_result[0])
    449             self.assertAlmostEqual(result[1], exp_result[1])
    450 
    451         self.assertRaises(TypeError, divmod)
    452 
    453     def test_eval(self):
    454         self.assertEqual(eval('1+1'), 2)
    455         self.assertEqual(eval(' 1+1\n'), 2)
    456         globals = {'a': 1, 'b': 2}
    457         locals = {'b': 200, 'c': 300}
    458         self.assertEqual(eval('a', globals) , 1)
    459         self.assertEqual(eval('a', globals, locals), 1)
    460         self.assertEqual(eval('b', globals, locals), 200)
    461         self.assertEqual(eval('c', globals, locals), 300)
    462         globals = {'a': 1, 'b': 2}
    463         locals = {'b': 200, 'c': 300}
    464         bom = b'\xef\xbb\xbf'
    465         self.assertEqual(eval(bom + b'a', globals, locals), 1)
    466         self.assertEqual(eval('"\xe5"', globals), "\xe5")
    467         self.assertRaises(TypeError, eval)
    468         self.assertRaises(TypeError, eval, ())
    469         self.assertRaises(SyntaxError, eval, bom[:2] + b'a')
    470 
    471         class X:
    472             def __getitem__(self, key):
    473                 raise ValueError
    474         self.assertRaises(ValueError, eval, "foo", {}, X())
    475 
    476     def test_general_eval(self):
    477         # Tests that general mappings can be used for the locals argument
    478 
    479         class M:
    480             "Test mapping interface versus possible calls from eval()."
    481             def __getitem__(self, key):
    482                 if key == 'a':
    483                     return 12
    484                 raise KeyError
    485             def keys(self):
    486                 return list('xyz')
    487 
    488         m = M()
    489         g = globals()
    490         self.assertEqual(eval('a', g, m), 12)
    491         self.assertRaises(NameError, eval, 'b', g, m)
    492         self.assertEqual(eval('dir()', g, m), list('xyz'))
    493         self.assertEqual(eval('globals()', g, m), g)
    494         self.assertEqual(eval('locals()', g, m), m)
    495         self.assertRaises(TypeError, eval, 'a', m)
    496         class A:
    497             "Non-mapping"
    498             pass
    499         m = A()
    500         self.assertRaises(TypeError, eval, 'a', g, m)
    501 
    502         # Verify that dict subclasses work as well
    503         class D(dict):
    504             def __getitem__(self, key):
    505                 if key == 'a':
    506                     return 12
    507                 return dict.__getitem__(self, key)
    508             def keys(self):
    509                 return list('xyz')
    510 
    511         d = D()
    512         self.assertEqual(eval('a', g, d), 12)
    513         self.assertRaises(NameError, eval, 'b', g, d)
    514         self.assertEqual(eval('dir()', g, d), list('xyz'))
    515         self.assertEqual(eval('globals()', g, d), g)
    516         self.assertEqual(eval('locals()', g, d), d)
    517 
    518         # Verify locals stores (used by list comps)
    519         eval('[locals() for i in (2,3)]', g, d)
    520         eval('[locals() for i in (2,3)]', g, collections.UserDict())
    521 
    522         class SpreadSheet:
    523             "Sample application showing nested, calculated lookups."
    524             _cells = {}
    525             def __setitem__(self, key, formula):
    526                 self._cells[key] = formula
    527             def __getitem__(self, key):
    528                 return eval(self._cells[key], globals(), self)
    529 
    530         ss = SpreadSheet()
    531         ss['a1'] = '5'
    532         ss['a2'] = 'a1*6'
    533         ss['a3'] = 'a2*7'
    534         self.assertEqual(ss['a3'], 210)
    535 
    536         # Verify that dir() catches a non-list returned by eval
    537         # SF bug #1004669
    538         class C:
    539             def __getitem__(self, item):
    540                 raise KeyError(item)
    541             def keys(self):
    542                 return 1 # used to be 'a' but that's no longer an error
    543         self.assertRaises(TypeError, eval, 'dir()', globals(), C())
    544 
    545     def test_exec(self):
    546         g = {}
    547         exec('z = 1', g)
    548         if '__builtins__' in g:
    549             del g['__builtins__']
    550         self.assertEqual(g, {'z': 1})
    551 
    552         exec('z = 1+1', g)
    553         if '__builtins__' in g:
    554             del g['__builtins__']
    555         self.assertEqual(g, {'z': 2})
    556         g = {}
    557         l = {}
    558 
    559         with check_warnings():
    560             warnings.filterwarnings("ignore", "global statement",
    561                     module="<string>")
    562             exec('global a; a = 1; b = 2', g, l)
    563         if '__builtins__' in g:
    564             del g['__builtins__']
    565         if '__builtins__' in l:
    566             del l['__builtins__']
    567         self.assertEqual((g, l), ({'a': 1}, {'b': 2}))
    568 
    569     def test_exec_globals(self):
    570         code = compile("print('Hello World!')", "", "exec")
    571         # no builtin function
    572         self.assertRaisesRegex(NameError, "name 'print' is not defined",
    573                                exec, code, {'__builtins__': {}})
    574         # __builtins__ must be a mapping type
    575         self.assertRaises(TypeError,
    576                           exec, code, {'__builtins__': 123})
    577 
    578         # no __build_class__ function
    579         code = compile("class A: pass", "", "exec")
    580         self.assertRaisesRegex(NameError, "__build_class__ not found",
    581                                exec, code, {'__builtins__': {}})
    582 
    583         class frozendict_error(Exception):
    584             pass
    585 
    586         class frozendict(dict):
    587             def __setitem__(self, key, value):
    588                 raise frozendict_error("frozendict is readonly")
    589 
    590         # read-only builtins
    591         if isinstance(__builtins__, types.ModuleType):
    592             frozen_builtins = frozendict(__builtins__.__dict__)
    593         else:
    594             frozen_builtins = frozendict(__builtins__)
    595         code = compile("__builtins__['superglobal']=2; print(superglobal)", "test", "exec")
    596         self.assertRaises(frozendict_error,
    597                           exec, code, {'__builtins__': frozen_builtins})
    598 
    599         # read-only globals
    600         namespace = frozendict({})
    601         code = compile("x=1", "test", "exec")
    602         self.assertRaises(frozendict_error,
    603                           exec, code, namespace)
    604 
    605     def test_exec_redirected(self):
    606         savestdout = sys.stdout
    607         sys.stdout = None # Whatever that cannot flush()
    608         try:
    609             # Used to raise SystemError('error return without exception set')
    610             exec('a')
    611         except NameError:
    612             pass
    613         finally:
    614             sys.stdout = savestdout
    615 
    616     def test_filter(self):
    617         self.assertEqual(list(filter(lambda c: 'a' <= c <= 'z', 'Hello World')), list('elloorld'))
    618         self.assertEqual(list(filter(None, [1, 'hello', [], [3], '', None, 9, 0])), [1, 'hello', [3], 9])
    619         self.assertEqual(list(filter(lambda x: x > 0, [1, -3, 9, 0, 2])), [1, 9, 2])
    620         self.assertEqual(list(filter(None, Squares(10))), [1, 4, 9, 16, 25, 36, 49, 64, 81])
    621         self.assertEqual(list(filter(lambda x: x%2, Squares(10))), [1, 9, 25, 49, 81])
    622         def identity(item):
    623             return 1
    624         filter(identity, Squares(5))
    625         self.assertRaises(TypeError, filter)
    626         class BadSeq(object):
    627             def __getitem__(self, index):
    628                 if index<4:
    629                     return 42
    630                 raise ValueError
    631         self.assertRaises(ValueError, list, filter(lambda x: x, BadSeq()))
    632         def badfunc():
    633             pass
    634         self.assertRaises(TypeError, list, filter(badfunc, range(5)))
    635 
    636         # test bltinmodule.c::filtertuple()
    637         self.assertEqual(list(filter(None, (1, 2))), [1, 2])
    638         self.assertEqual(list(filter(lambda x: x>=3, (1, 2, 3, 4))), [3, 4])
    639         self.assertRaises(TypeError, list, filter(42, (1, 2)))
    640 
    641     def test_filter_pickle(self):
    642         for proto in range(pickle.HIGHEST_PROTOCOL + 1):
    643             f1 = filter(filter_char, "abcdeabcde")
    644             f2 = filter(filter_char, "abcdeabcde")
    645             self.check_iter_pickle(f1, list(f2), proto)
    646 
    647     def test_getattr(self):
    648         self.assertTrue(getattr(sys, 'stdout') is sys.stdout)
    649         self.assertRaises(TypeError, getattr, sys, 1)
    650         self.assertRaises(TypeError, getattr, sys, 1, "foo")
    651         self.assertRaises(TypeError, getattr)
    652         self.assertRaises(AttributeError, getattr, sys, chr(sys.maxunicode))
    653         # unicode surrogates are not encodable to the default encoding (utf8)
    654         self.assertRaises(AttributeError, getattr, 1, "\uDAD1\uD51E")
    655 
    656     def test_hasattr(self):
    657         self.assertTrue(hasattr(sys, 'stdout'))
    658         self.assertRaises(TypeError, hasattr, sys, 1)
    659         self.assertRaises(TypeError, hasattr)
    660         self.assertEqual(False, hasattr(sys, chr(sys.maxunicode)))
    661 
    662         # Check that hasattr propagates all exceptions outside of
    663         # AttributeError.
    664         class A:
    665             def __getattr__(self, what):
    666                 raise SystemExit
    667         self.assertRaises(SystemExit, hasattr, A(), "b")
    668         class B:
    669             def __getattr__(self, what):
    670                 raise ValueError
    671         self.assertRaises(ValueError, hasattr, B(), "b")
    672 
    673     def test_hash(self):
    674         hash(None)
    675         self.assertEqual(hash(1), hash(1))
    676         self.assertEqual(hash(1), hash(1.0))
    677         hash('spam')
    678         self.assertEqual(hash('spam'), hash(b'spam'))
    679         hash((0,1,2,3))
    680         def f(): pass
    681         self.assertRaises(TypeError, hash, [])
    682         self.assertRaises(TypeError, hash, {})
    683         # Bug 1536021: Allow hash to return long objects
    684         class X:
    685             def __hash__(self):
    686                 return 2**100
    687         self.assertEqual(type(hash(X())), int)
    688         class Z(int):
    689             def __hash__(self):
    690                 return self
    691         self.assertEqual(hash(Z(42)), hash(42))
    692 
    693     def test_hex(self):
    694         self.assertEqual(hex(16), '0x10')
    695         self.assertEqual(hex(-16), '-0x10')
    696         self.assertRaises(TypeError, hex, {})
    697 
    698     def test_id(self):
    699         id(None)
    700         id(1)
    701         id(1.0)
    702         id('spam')
    703         id((0,1,2,3))
    704         id([0,1,2,3])
    705         id({'spam': 1, 'eggs': 2, 'ham': 3})
    706 
    707     # Test input() later, alphabetized as if it were raw_input
    708 
    709     def test_iter(self):
    710         self.assertRaises(TypeError, iter)
    711         self.assertRaises(TypeError, iter, 42, 42)
    712         lists = [("1", "2"), ["1", "2"], "12"]
    713         for l in lists:
    714             i = iter(l)
    715             self.assertEqual(next(i), '1')
    716             self.assertEqual(next(i), '2')
    717             self.assertRaises(StopIteration, next, i)
    718 
    719     def test_isinstance(self):
    720         class C:
    721             pass
    722         class D(C):
    723             pass
    724         class E:
    725             pass
    726         c = C()
    727         d = D()
    728         e = E()
    729         self.assertTrue(isinstance(c, C))
    730         self.assertTrue(isinstance(d, C))
    731         self.assertTrue(not isinstance(e, C))
    732         self.assertTrue(not isinstance(c, D))
    733         self.assertTrue(not isinstance('foo', E))
    734         self.assertRaises(TypeError, isinstance, E, 'foo')
    735         self.assertRaises(TypeError, isinstance)
    736 
    737     def test_issubclass(self):
    738         class C:
    739             pass
    740         class D(C):
    741             pass
    742         class E:
    743             pass
    744         c = C()
    745         d = D()
    746         e = E()
    747         self.assertTrue(issubclass(D, C))
    748         self.assertTrue(issubclass(C, C))
    749         self.assertTrue(not issubclass(C, D))
    750         self.assertRaises(TypeError, issubclass, 'foo', E)
    751         self.assertRaises(TypeError, issubclass, E, 'foo')
    752         self.assertRaises(TypeError, issubclass)
    753 
    754     def test_len(self):
    755         self.assertEqual(len('123'), 3)
    756         self.assertEqual(len(()), 0)
    757         self.assertEqual(len((1, 2, 3, 4)), 4)
    758         self.assertEqual(len([1, 2, 3, 4]), 4)
    759         self.assertEqual(len({}), 0)
    760         self.assertEqual(len({'a':1, 'b': 2}), 2)
    761         class BadSeq:
    762             def __len__(self):
    763                 raise ValueError
    764         self.assertRaises(ValueError, len, BadSeq())
    765         class InvalidLen:
    766             def __len__(self):
    767                 return None
    768         self.assertRaises(TypeError, len, InvalidLen())
    769         class FloatLen:
    770             def __len__(self):
    771                 return 4.5
    772         self.assertRaises(TypeError, len, FloatLen())
    773         class HugeLen:
    774             def __len__(self):
    775                 return sys.maxsize + 1
    776         self.assertRaises(OverflowError, len, HugeLen())
    777         class NoLenMethod(object): pass
    778         self.assertRaises(TypeError, len, NoLenMethod())
    779 
    780     def test_map(self):
    781         self.assertEqual(
    782             list(map(lambda x: x*x, range(1,4))),
    783             [1, 4, 9]
    784         )
    785         try:
    786             from math import sqrt
    787         except ImportError:
    788             def sqrt(x):
    789                 return pow(x, 0.5)
    790         self.assertEqual(
    791             list(map(lambda x: list(map(sqrt, x)), [[16, 4], [81, 9]])),
    792             [[4.0, 2.0], [9.0, 3.0]]
    793         )
    794         self.assertEqual(
    795             list(map(lambda x, y: x+y, [1,3,2], [9,1,4])),
    796             [10, 4, 6]
    797         )
    798 
    799         def plus(*v):
    800             accu = 0
    801             for i in v: accu = accu + i
    802             return accu
    803         self.assertEqual(
    804             list(map(plus, [1, 3, 7])),
    805             [1, 3, 7]
    806         )
    807         self.assertEqual(
    808             list(map(plus, [1, 3, 7], [4, 9, 2])),
    809             [1+4, 3+9, 7+2]
    810         )
    811         self.assertEqual(
    812             list(map(plus, [1, 3, 7], [4, 9, 2], [1, 1, 0])),
    813             [1+4+1, 3+9+1, 7+2+0]
    814         )
    815         self.assertEqual(
    816             list(map(int, Squares(10))),
    817             [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
    818         )
    819         def Max(a, b):
    820             if a is None:
    821                 return b
    822             if b is None:
    823                 return a
    824             return max(a, b)
    825         self.assertEqual(
    826             list(map(Max, Squares(3), Squares(2))),
    827             [0, 1]
    828         )
    829         self.assertRaises(TypeError, map)
    830         self.assertRaises(TypeError, map, lambda x: x, 42)
    831         class BadSeq:
    832             def __iter__(self):
    833                 raise ValueError
    834                 yield None
    835         self.assertRaises(ValueError, list, map(lambda x: x, BadSeq()))
    836         def badfunc(x):
    837             raise RuntimeError
    838         self.assertRaises(RuntimeError, list, map(badfunc, range(5)))
    839 
    840     def test_map_pickle(self):
    841         for proto in range(pickle.HIGHEST_PROTOCOL + 1):
    842             m1 = map(map_char, "Is this the real life?")
    843             m2 = map(map_char, "Is this the real life?")
    844             self.check_iter_pickle(m1, list(m2), proto)
    845 
    846     def test_max(self):
    847         self.assertEqual(max('123123'), '3')
    848         self.assertEqual(max(1, 2, 3), 3)
    849         self.assertEqual(max((1, 2, 3, 1, 2, 3)), 3)
    850         self.assertEqual(max([1, 2, 3, 1, 2, 3]), 3)
    851 
    852         self.assertEqual(max(1, 2, 3.0), 3.0)
    853         self.assertEqual(max(1, 2.0, 3), 3)
    854         self.assertEqual(max(1.0, 2, 3), 3)
    855 
    856         self.assertRaises(TypeError, max)
    857         self.assertRaises(TypeError, max, 42)
    858         self.assertRaises(ValueError, max, ())
    859         class BadSeq:
    860             def __getitem__(self, index):
    861                 raise ValueError
    862         self.assertRaises(ValueError, max, BadSeq())
    863 
    864         for stmt in (
    865             "max(key=int)",                 # no args
    866             "max(default=None)",
    867             "max(1, 2, default=None)",      # require container for default
    868             "max(default=None, key=int)",
    869             "max(1, key=int)",              # single arg not iterable
    870             "max(1, 2, keystone=int)",      # wrong keyword
    871             "max(1, 2, key=int, abc=int)",  # two many keywords
    872             "max(1, 2, key=1)",             # keyfunc is not callable
    873             ):
    874             try:
    875                 exec(stmt, globals())
    876             except TypeError:
    877                 pass
    878             else:
    879                 self.fail(stmt)
    880 
    881         self.assertEqual(max((1,), key=neg), 1)     # one elem iterable
    882         self.assertEqual(max((1,2), key=neg), 1)    # two elem iterable
    883         self.assertEqual(max(1, 2, key=neg), 1)     # two elems
    884 
    885         self.assertEqual(max((), default=None), None)    # zero elem iterable
    886         self.assertEqual(max((1,), default=None), 1)     # one elem iterable
    887         self.assertEqual(max((1,2), default=None), 2)    # two elem iterable
    888 
    889         self.assertEqual(max((), default=1, key=neg), 1)
    890         self.assertEqual(max((1, 2), default=3, key=neg), 1)
    891 
    892         data = [random.randrange(200) for i in range(100)]
    893         keys = dict((elem, random.randrange(50)) for elem in data)
    894         f = keys.__getitem__
    895         self.assertEqual(max(data, key=f),
    896                          sorted(reversed(data), key=f)[-1])
    897 
    898     def test_min(self):
    899         self.assertEqual(min('123123'), '1')
    900         self.assertEqual(min(1, 2, 3), 1)
    901         self.assertEqual(min((1, 2, 3, 1, 2, 3)), 1)
    902         self.assertEqual(min([1, 2, 3, 1, 2, 3]), 1)
    903 
    904         self.assertEqual(min(1, 2, 3.0), 1)
    905         self.assertEqual(min(1, 2.0, 3), 1)
    906         self.assertEqual(min(1.0, 2, 3), 1.0)
    907 
    908         self.assertRaises(TypeError, min)
    909         self.assertRaises(TypeError, min, 42)
    910         self.assertRaises(ValueError, min, ())
    911         class BadSeq:
    912             def __getitem__(self, index):
    913                 raise ValueError
    914         self.assertRaises(ValueError, min, BadSeq())
    915 
    916         for stmt in (
    917             "min(key=int)",                 # no args
    918             "min(default=None)",
    919             "min(1, 2, default=None)",      # require container for default
    920             "min(default=None, key=int)",
    921             "min(1, key=int)",              # single arg not iterable
    922             "min(1, 2, keystone=int)",      # wrong keyword
    923             "min(1, 2, key=int, abc=int)",  # two many keywords
    924             "min(1, 2, key=1)",             # keyfunc is not callable
    925             ):
    926             try:
    927                 exec(stmt, globals())
    928             except TypeError:
    929                 pass
    930             else:
    931                 self.fail(stmt)
    932 
    933         self.assertEqual(min((1,), key=neg), 1)     # one elem iterable
    934         self.assertEqual(min((1,2), key=neg), 2)    # two elem iterable
    935         self.assertEqual(min(1, 2, key=neg), 2)     # two elems
    936 
    937         self.assertEqual(min((), default=None), None)    # zero elem iterable
    938         self.assertEqual(min((1,), default=None), 1)     # one elem iterable
    939         self.assertEqual(min((1,2), default=None), 1)    # two elem iterable
    940 
    941         self.assertEqual(min((), default=1, key=neg), 1)
    942         self.assertEqual(min((1, 2), default=1, key=neg), 2)
    943 
    944         data = [random.randrange(200) for i in range(100)]
    945         keys = dict((elem, random.randrange(50)) for elem in data)
    946         f = keys.__getitem__
    947         self.assertEqual(min(data, key=f),
    948                          sorted(data, key=f)[0])
    949 
    950     def test_next(self):
    951         it = iter(range(2))
    952         self.assertEqual(next(it), 0)
    953         self.assertEqual(next(it), 1)
    954         self.assertRaises(StopIteration, next, it)
    955         self.assertRaises(StopIteration, next, it)
    956         self.assertEqual(next(it, 42), 42)
    957 
    958         class Iter(object):
    959             def __iter__(self):
    960                 return self
    961             def __next__(self):
    962                 raise StopIteration
    963 
    964         it = iter(Iter())
    965         self.assertEqual(next(it, 42), 42)
    966         self.assertRaises(StopIteration, next, it)
    967 
    968         def gen():
    969             yield 1
    970             return
    971 
    972         it = gen()
    973         self.assertEqual(next(it), 1)
    974         self.assertRaises(StopIteration, next, it)
    975         self.assertEqual(next(it, 42), 42)
    976 
    977     def test_oct(self):
    978         self.assertEqual(oct(100), '0o144')
    979         self.assertEqual(oct(-100), '-0o144')
    980         self.assertRaises(TypeError, oct, ())
    981 
    982     def write_testfile(self):
    983         # NB the first 4 lines are also used to test input, below
    984         fp = open(TESTFN, 'w')
    985         self.addCleanup(unlink, TESTFN)
    986         with fp:
    987             fp.write('1+1\n')
    988             fp.write('The quick brown fox jumps over the lazy dog')
    989             fp.write('.\n')
    990             fp.write('Dear John\n')
    991             fp.write('XXX'*100)
    992             fp.write('YYY'*100)
    993 
    994     def test_open(self):
    995         self.write_testfile()
    996         fp = open(TESTFN, 'r')
    997         with fp:
    998             self.assertEqual(fp.readline(4), '1+1\n')
    999             self.assertEqual(fp.readline(), 'The quick brown fox jumps over the lazy dog.\n')
   1000             self.assertEqual(fp.readline(4), 'Dear')
   1001             self.assertEqual(fp.readline(100), ' John\n')
   1002             self.assertEqual(fp.read(300), 'XXX'*100)
   1003             self.assertEqual(fp.read(1000), 'YYY'*100)
   1004 
   1005     def test_open_default_encoding(self):
   1006         old_environ = dict(os.environ)
   1007         try:
   1008             # try to get a user preferred encoding different than the current
   1009             # locale encoding to check that open() uses the current locale
   1010             # encoding and not the user preferred encoding
   1011             for key in ('LC_ALL', 'LANG', 'LC_CTYPE'):
   1012                 if key in os.environ:
   1013                     del os.environ[key]
   1014 
   1015             self.write_testfile()
   1016             current_locale_encoding = locale.getpreferredencoding(False)
   1017             fp = open(TESTFN, 'w')
   1018             with fp:
   1019                 self.assertEqual(fp.encoding, current_locale_encoding)
   1020         finally:
   1021             os.environ.clear()
   1022             os.environ.update(old_environ)
   1023 
   1024     def test_open_non_inheritable(self):
   1025         fileobj = open(__file__)
   1026         with fileobj:
   1027             self.assertFalse(os.get_inheritable(fileobj.fileno()))
   1028 
   1029     def test_ord(self):
   1030         self.assertEqual(ord(' '), 32)
   1031         self.assertEqual(ord('A'), 65)
   1032         self.assertEqual(ord('a'), 97)
   1033         self.assertEqual(ord('\x80'), 128)
   1034         self.assertEqual(ord('\xff'), 255)
   1035 
   1036         self.assertEqual(ord(b' '), 32)
   1037         self.assertEqual(ord(b'A'), 65)
   1038         self.assertEqual(ord(b'a'), 97)
   1039         self.assertEqual(ord(b'\x80'), 128)
   1040         self.assertEqual(ord(b'\xff'), 255)
   1041 
   1042         self.assertEqual(ord(chr(sys.maxunicode)), sys.maxunicode)
   1043         self.assertRaises(TypeError, ord, 42)
   1044 
   1045         self.assertEqual(ord(chr(0x10FFFF)), 0x10FFFF)
   1046         self.assertEqual(ord("\U0000FFFF"), 0x0000FFFF)
   1047         self.assertEqual(ord("\U00010000"), 0x00010000)
   1048         self.assertEqual(ord("\U00010001"), 0x00010001)
   1049         self.assertEqual(ord("\U000FFFFE"), 0x000FFFFE)
   1050         self.assertEqual(ord("\U000FFFFF"), 0x000FFFFF)
   1051         self.assertEqual(ord("\U00100000"), 0x00100000)
   1052         self.assertEqual(ord("\U00100001"), 0x00100001)
   1053         self.assertEqual(ord("\U0010FFFE"), 0x0010FFFE)
   1054         self.assertEqual(ord("\U0010FFFF"), 0x0010FFFF)
   1055 
   1056     def test_pow(self):
   1057         self.assertEqual(pow(0,0), 1)
   1058         self.assertEqual(pow(0,1), 0)
   1059         self.assertEqual(pow(1,0), 1)
   1060         self.assertEqual(pow(1,1), 1)
   1061 
   1062         self.assertEqual(pow(2,0), 1)
   1063         self.assertEqual(pow(2,10), 1024)
   1064         self.assertEqual(pow(2,20), 1024*1024)
   1065         self.assertEqual(pow(2,30), 1024*1024*1024)
   1066 
   1067         self.assertEqual(pow(-2,0), 1)
   1068         self.assertEqual(pow(-2,1), -2)
   1069         self.assertEqual(pow(-2,2), 4)
   1070         self.assertEqual(pow(-2,3), -8)
   1071 
   1072         self.assertAlmostEqual(pow(0.,0), 1.)
   1073         self.assertAlmostEqual(pow(0.,1), 0.)
   1074         self.assertAlmostEqual(pow(1.,0), 1.)
   1075         self.assertAlmostEqual(pow(1.,1), 1.)
   1076 
   1077         self.assertAlmostEqual(pow(2.,0), 1.)
   1078         self.assertAlmostEqual(pow(2.,10), 1024.)
   1079         self.assertAlmostEqual(pow(2.,20), 1024.*1024.)
   1080         self.assertAlmostEqual(pow(2.,30), 1024.*1024.*1024.)
   1081 
   1082         self.assertAlmostEqual(pow(-2.,0), 1.)
   1083         self.assertAlmostEqual(pow(-2.,1), -2.)
   1084         self.assertAlmostEqual(pow(-2.,2), 4.)
   1085         self.assertAlmostEqual(pow(-2.,3), -8.)
   1086 
   1087         for x in 2, 2.0:
   1088             for y in 10, 10.0:
   1089                 for z in 1000, 1000.0:
   1090                     if isinstance(x, float) or \
   1091                        isinstance(y, float) or \
   1092                        isinstance(z, float):
   1093                         self.assertRaises(TypeError, pow, x, y, z)
   1094                     else:
   1095                         self.assertAlmostEqual(pow(x, y, z), 24.0)
   1096 
   1097         self.assertAlmostEqual(pow(-1, 0.5), 1j)
   1098         self.assertAlmostEqual(pow(-1, 1/3), 0.5 + 0.8660254037844386j)
   1099 
   1100         self.assertRaises(ValueError, pow, -1, -2, 3)
   1101         self.assertRaises(ValueError, pow, 1, 2, 0)
   1102 
   1103         self.assertRaises(TypeError, pow)
   1104 
   1105     def test_input(self):
   1106         self.write_testfile()
   1107         fp = open(TESTFN, 'r')
   1108         savestdin = sys.stdin
   1109         savestdout = sys.stdout # Eats the echo
   1110         try:
   1111             sys.stdin = fp
   1112             sys.stdout = BitBucket()
   1113             self.assertEqual(input(), "1+1")
   1114             self.assertEqual(input(), 'The quick brown fox jumps over the lazy dog.')
   1115             self.assertEqual(input('testing\n'), 'Dear John')
   1116 
   1117             # SF 1535165: don't segfault on closed stdin
   1118             # sys.stdout must be a regular file for triggering
   1119             sys.stdout = savestdout
   1120             sys.stdin.close()
   1121             self.assertRaises(ValueError, input)
   1122 
   1123             sys.stdout = BitBucket()
   1124             sys.stdin = io.StringIO("NULL\0")
   1125             self.assertRaises(TypeError, input, 42, 42)
   1126             sys.stdin = io.StringIO("    'whitespace'")
   1127             self.assertEqual(input(), "    'whitespace'")
   1128             sys.stdin = io.StringIO()
   1129             self.assertRaises(EOFError, input)
   1130 
   1131             del sys.stdout
   1132             self.assertRaises(RuntimeError, input, 'prompt')
   1133             del sys.stdin
   1134             self.assertRaises(RuntimeError, input, 'prompt')
   1135         finally:
   1136             sys.stdin = savestdin
   1137             sys.stdout = savestdout
   1138             fp.close()
   1139 
   1140     # test_int(): see test_int.py for tests of built-in function int().
   1141 
   1142     def test_repr(self):
   1143         self.assertEqual(repr(''), '\'\'')
   1144         self.assertEqual(repr(0), '0')
   1145         self.assertEqual(repr(()), '()')
   1146         self.assertEqual(repr([]), '[]')
   1147         self.assertEqual(repr({}), '{}')
   1148         a = []
   1149         a.append(a)
   1150         self.assertEqual(repr(a), '[[...]]')
   1151         a = {}
   1152         a[0] = a
   1153         self.assertEqual(repr(a), '{0: {...}}')
   1154 
   1155     def test_round(self):
   1156         self.assertEqual(round(0.0), 0.0)
   1157         self.assertEqual(type(round(0.0)), int)
   1158         self.assertEqual(round(1.0), 1.0)
   1159         self.assertEqual(round(10.0), 10.0)
   1160         self.assertEqual(round(1000000000.0), 1000000000.0)
   1161         self.assertEqual(round(1e20), 1e20)
   1162 
   1163         self.assertEqual(round(-1.0), -1.0)
   1164         self.assertEqual(round(-10.0), -10.0)
   1165         self.assertEqual(round(-1000000000.0), -1000000000.0)
   1166         self.assertEqual(round(-1e20), -1e20)
   1167 
   1168         self.assertEqual(round(0.1), 0.0)
   1169         self.assertEqual(round(1.1), 1.0)
   1170         self.assertEqual(round(10.1), 10.0)
   1171         self.assertEqual(round(1000000000.1), 1000000000.0)
   1172 
   1173         self.assertEqual(round(-1.1), -1.0)
   1174         self.assertEqual(round(-10.1), -10.0)
   1175         self.assertEqual(round(-1000000000.1), -1000000000.0)
   1176 
   1177         self.assertEqual(round(0.9), 1.0)
   1178         self.assertEqual(round(9.9), 10.0)
   1179         self.assertEqual(round(999999999.9), 1000000000.0)
   1180 
   1181         self.assertEqual(round(-0.9), -1.0)
   1182         self.assertEqual(round(-9.9), -10.0)
   1183         self.assertEqual(round(-999999999.9), -1000000000.0)
   1184 
   1185         self.assertEqual(round(-8.0, -1), -10.0)
   1186         self.assertEqual(type(round(-8.0, -1)), float)
   1187 
   1188         self.assertEqual(type(round(-8.0, 0)), float)
   1189         self.assertEqual(type(round(-8.0, 1)), float)
   1190 
   1191         # Check even / odd rounding behaviour
   1192         self.assertEqual(round(5.5), 6)
   1193         self.assertEqual(round(6.5), 6)
   1194         self.assertEqual(round(-5.5), -6)
   1195         self.assertEqual(round(-6.5), -6)
   1196 
   1197         # Check behavior on ints
   1198         self.assertEqual(round(0), 0)
   1199         self.assertEqual(round(8), 8)
   1200         self.assertEqual(round(-8), -8)
   1201         self.assertEqual(type(round(0)), int)
   1202         self.assertEqual(type(round(-8, -1)), int)
   1203         self.assertEqual(type(round(-8, 0)), int)
   1204         self.assertEqual(type(round(-8, 1)), int)
   1205 
   1206         # test new kwargs
   1207         self.assertEqual(round(number=-8.0, ndigits=-1), -10.0)
   1208 
   1209         self.assertRaises(TypeError, round)
   1210 
   1211         # test generic rounding delegation for reals
   1212         class TestRound:
   1213             def __round__(self):
   1214                 return 23
   1215 
   1216         class TestNoRound:
   1217             pass
   1218 
   1219         self.assertEqual(round(TestRound()), 23)
   1220 
   1221         self.assertRaises(TypeError, round, 1, 2, 3)
   1222         self.assertRaises(TypeError, round, TestNoRound())
   1223 
   1224         t = TestNoRound()
   1225         t.__round__ = lambda *args: args
   1226         self.assertRaises(TypeError, round, t)
   1227         self.assertRaises(TypeError, round, t, 0)
   1228 
   1229     # Some versions of glibc for alpha have a bug that affects
   1230     # float -> integer rounding (floor, ceil, rint, round) for
   1231     # values in the range [2**52, 2**53).  See:
   1232     #
   1233     #   http://sources.redhat.com/bugzilla/show_bug.cgi?id=5350
   1234     #
   1235     # We skip this test on Linux/alpha if it would fail.
   1236     linux_alpha = (platform.system().startswith('Linux') and
   1237                    platform.machine().startswith('alpha'))
   1238     system_round_bug = round(5e15+1) != 5e15+1
   1239     @unittest.skipIf(linux_alpha and system_round_bug,
   1240                      "test will fail;  failure is probably due to a "
   1241                      "buggy system round function")
   1242     def test_round_large(self):
   1243         # Issue #1869: integral floats should remain unchanged
   1244         self.assertEqual(round(5e15-1), 5e15-1)
   1245         self.assertEqual(round(5e15), 5e15)
   1246         self.assertEqual(round(5e15+1), 5e15+1)
   1247         self.assertEqual(round(5e15+2), 5e15+2)
   1248         self.assertEqual(round(5e15+3), 5e15+3)
   1249 
   1250     def test_bug_27936(self):
   1251         # Verify that ndigits=None means the same as passing in no argument
   1252         for x in [1234,
   1253                   1234.56,
   1254                   decimal.Decimal('1234.56'),
   1255                   fractions.Fraction(123456, 100)]:
   1256             self.assertEqual(round(x, None), round(x))
   1257             self.assertEqual(type(round(x, None)), type(round(x)))
   1258 
   1259     def test_setattr(self):
   1260         setattr(sys, 'spam', 1)
   1261         self.assertEqual(sys.spam, 1)
   1262         self.assertRaises(TypeError, setattr, sys, 1, 'spam')
   1263         self.assertRaises(TypeError, setattr)
   1264 
   1265     # test_str(): see test_unicode.py and test_bytes.py for str() tests.
   1266 
   1267     def test_sum(self):
   1268         self.assertEqual(sum([]), 0)
   1269         self.assertEqual(sum(list(range(2,8))), 27)
   1270         self.assertEqual(sum(iter(list(range(2,8)))), 27)
   1271         self.assertEqual(sum(Squares(10)), 285)
   1272         self.assertEqual(sum(iter(Squares(10))), 285)
   1273         self.assertEqual(sum([[1], [2], [3]], []), [1, 2, 3])
   1274 
   1275         self.assertRaises(TypeError, sum)
   1276         self.assertRaises(TypeError, sum, 42)
   1277         self.assertRaises(TypeError, sum, ['a', 'b', 'c'])
   1278         self.assertRaises(TypeError, sum, ['a', 'b', 'c'], '')
   1279         self.assertRaises(TypeError, sum, [b'a', b'c'], b'')
   1280         values = [bytearray(b'a'), bytearray(b'b')]
   1281         self.assertRaises(TypeError, sum, values, bytearray(b''))
   1282         self.assertRaises(TypeError, sum, [[1], [2], [3]])
   1283         self.assertRaises(TypeError, sum, [{2:3}])
   1284         self.assertRaises(TypeError, sum, [{2:3}]*2, {2:3})
   1285 
   1286         class BadSeq:
   1287             def __getitem__(self, index):
   1288                 raise ValueError
   1289         self.assertRaises(ValueError, sum, BadSeq())
   1290 
   1291         empty = []
   1292         sum(([x] for x in range(10)), empty)
   1293         self.assertEqual(empty, [])
   1294 
   1295     def test_type(self):
   1296         self.assertEqual(type(''),  type('123'))
   1297         self.assertNotEqual(type(''), type(()))
   1298 
   1299     # We don't want self in vars(), so these are static methods
   1300 
   1301     @staticmethod
   1302     def get_vars_f0():
   1303         return vars()
   1304 
   1305     @staticmethod
   1306     def get_vars_f2():
   1307         BuiltinTest.get_vars_f0()
   1308         a = 1
   1309         b = 2
   1310         return vars()
   1311 
   1312     class C_get_vars(object):
   1313         def getDict(self):
   1314             return {'a':2}
   1315         __dict__ = property(fget=getDict)
   1316 
   1317     def test_vars(self):
   1318         self.assertEqual(set(vars()), set(dir()))
   1319         self.assertEqual(set(vars(sys)), set(dir(sys)))
   1320         self.assertEqual(self.get_vars_f0(), {})
   1321         self.assertEqual(self.get_vars_f2(), {'a': 1, 'b': 2})
   1322         self.assertRaises(TypeError, vars, 42, 42)
   1323         self.assertRaises(TypeError, vars, 42)
   1324         self.assertEqual(vars(self.C_get_vars()), {'a':2})
   1325 
   1326     def test_zip(self):
   1327         a = (1, 2, 3)
   1328         b = (4, 5, 6)
   1329         t = [(1, 4), (2, 5), (3, 6)]
   1330         self.assertEqual(list(zip(a, b)), t)
   1331         b = [4, 5, 6]
   1332         self.assertEqual(list(zip(a, b)), t)
   1333         b = (4, 5, 6, 7)
   1334         self.assertEqual(list(zip(a, b)), t)
   1335         class I:
   1336             def __getitem__(self, i):
   1337                 if i < 0 or i > 2: raise IndexError
   1338                 return i + 4
   1339         self.assertEqual(list(zip(a, I())), t)
   1340         self.assertEqual(list(zip()), [])
   1341         self.assertEqual(list(zip(*[])), [])
   1342         self.assertRaises(TypeError, zip, None)
   1343         class G:
   1344             pass
   1345         self.assertRaises(TypeError, zip, a, G())
   1346         self.assertRaises(RuntimeError, zip, a, TestFailingIter())
   1347 
   1348         # Make sure zip doesn't try to allocate a billion elements for the
   1349         # result list when one of its arguments doesn't say how long it is.
   1350         # A MemoryError is the most likely failure mode.
   1351         class SequenceWithoutALength:
   1352             def __getitem__(self, i):
   1353                 if i == 5:
   1354                     raise IndexError
   1355                 else:
   1356                     return i
   1357         self.assertEqual(
   1358             list(zip(SequenceWithoutALength(), range(2**30))),
   1359             list(enumerate(range(5)))
   1360         )
   1361 
   1362         class BadSeq:
   1363             def __getitem__(self, i):
   1364                 if i == 5:
   1365                     raise ValueError
   1366                 else:
   1367                     return i
   1368         self.assertRaises(ValueError, list, zip(BadSeq(), BadSeq()))
   1369 
   1370     def test_zip_pickle(self):
   1371         a = (1, 2, 3)
   1372         b = (4, 5, 6)
   1373         t = [(1, 4), (2, 5), (3, 6)]
   1374         for proto in range(pickle.HIGHEST_PROTOCOL + 1):
   1375             z1 = zip(a, b)
   1376             self.check_iter_pickle(z1, t, proto)
   1377 
   1378     def test_format(self):
   1379         # Test the basic machinery of the format() builtin.  Don't test
   1380         #  the specifics of the various formatters
   1381         self.assertEqual(format(3, ''), '3')
   1382 
   1383         # Returns some classes to use for various tests.  There's
   1384         #  an old-style version, and a new-style version
   1385         def classes_new():
   1386             class A(object):
   1387                 def __init__(self, x):
   1388                     self.x = x
   1389                 def __format__(self, format_spec):
   1390                     return str(self.x) + format_spec
   1391             class DerivedFromA(A):
   1392                 pass
   1393 
   1394             class Simple(object): pass
   1395             class DerivedFromSimple(Simple):
   1396                 def __init__(self, x):
   1397                     self.x = x
   1398                 def __format__(self, format_spec):
   1399                     return str(self.x) + format_spec
   1400             class DerivedFromSimple2(DerivedFromSimple): pass
   1401             return A, DerivedFromA, DerivedFromSimple, DerivedFromSimple2
   1402 
   1403         def class_test(A, DerivedFromA, DerivedFromSimple, DerivedFromSimple2):
   1404             self.assertEqual(format(A(3), 'spec'), '3spec')
   1405             self.assertEqual(format(DerivedFromA(4), 'spec'), '4spec')
   1406             self.assertEqual(format(DerivedFromSimple(5), 'abc'), '5abc')
   1407             self.assertEqual(format(DerivedFromSimple2(10), 'abcdef'),
   1408                              '10abcdef')
   1409 
   1410         class_test(*classes_new())
   1411 
   1412         def empty_format_spec(value):
   1413             # test that:
   1414             #  format(x, '') == str(x)
   1415             #  format(x) == str(x)
   1416             self.assertEqual(format(value, ""), str(value))
   1417             self.assertEqual(format(value), str(value))
   1418 
   1419         # for builtin types, format(x, "") == str(x)
   1420         empty_format_spec(17**13)
   1421         empty_format_spec(1.0)
   1422         empty_format_spec(3.1415e104)
   1423         empty_format_spec(-3.1415e104)
   1424         empty_format_spec(3.1415e-104)
   1425         empty_format_spec(-3.1415e-104)
   1426         empty_format_spec(object)
   1427         empty_format_spec(None)
   1428 
   1429         # TypeError because self.__format__ returns the wrong type
   1430         class BadFormatResult:
   1431             def __format__(self, format_spec):
   1432                 return 1.0
   1433         self.assertRaises(TypeError, format, BadFormatResult(), "")
   1434 
   1435         # TypeError because format_spec is not unicode or str
   1436         self.assertRaises(TypeError, format, object(), 4)
   1437         self.assertRaises(TypeError, format, object(), object())
   1438 
   1439         # tests for object.__format__ really belong elsewhere, but
   1440         #  there's no good place to put them
   1441         x = object().__format__('')
   1442         self.assertTrue(x.startswith('<object object at'))
   1443 
   1444         # first argument to object.__format__ must be string
   1445         self.assertRaises(TypeError, object().__format__, 3)
   1446         self.assertRaises(TypeError, object().__format__, object())
   1447         self.assertRaises(TypeError, object().__format__, None)
   1448 
   1449         # --------------------------------------------------------------------
   1450         # Issue #7994: object.__format__ with a non-empty format string is
   1451         # disallowed
   1452         class A:
   1453             def __format__(self, fmt_str):
   1454                 return format('', fmt_str)
   1455 
   1456         self.assertEqual(format(A()), '')
   1457         self.assertEqual(format(A(), ''), '')
   1458         self.assertEqual(format(A(), 's'), '')
   1459 
   1460         class B:
   1461             pass
   1462 
   1463         class C(object):
   1464             pass
   1465 
   1466         for cls in [object, B, C]:
   1467             obj = cls()
   1468             self.assertEqual(format(obj), str(obj))
   1469             self.assertEqual(format(obj, ''), str(obj))
   1470             with self.assertRaisesRegex(TypeError,
   1471                                         r'\b%s\b' % re.escape(cls.__name__)):
   1472                 format(obj, 's')
   1473         # --------------------------------------------------------------------
   1474 
   1475         # make sure we can take a subclass of str as a format spec
   1476         class DerivedFromStr(str): pass
   1477         self.assertEqual(format(0, DerivedFromStr('10')), '         0')
   1478 
   1479     def test_bin(self):
   1480         self.assertEqual(bin(0), '0b0')
   1481         self.assertEqual(bin(1), '0b1')
   1482         self.assertEqual(bin(-1), '-0b1')
   1483         self.assertEqual(bin(2**65), '0b1' + '0' * 65)
   1484         self.assertEqual(bin(2**65-1), '0b' + '1' * 65)
   1485         self.assertEqual(bin(-(2**65)), '-0b1' + '0' * 65)
   1486         self.assertEqual(bin(-(2**65-1)), '-0b' + '1' * 65)
   1487 
   1488     def test_bytearray_translate(self):
   1489         x = bytearray(b"abc")
   1490         self.assertRaises(ValueError, x.translate, b"1", 1)
   1491         self.assertRaises(TypeError, x.translate, b"1"*256, 1)
   1492 
   1493     def test_construct_singletons(self):
   1494         for const in None, Ellipsis, NotImplemented:
   1495             tp = type(const)
   1496             self.assertIs(tp(), const)
   1497             self.assertRaises(TypeError, tp, 1, 2)
   1498             self.assertRaises(TypeError, tp, a=1, b=2)
   1499 
   1500 @unittest.skipUnless(pty, "the pty and signal modules must be available")
   1501 class PtyTests(unittest.TestCase):
   1502     """Tests that use a pseudo terminal to guarantee stdin and stdout are
   1503     terminals in the test environment"""
   1504 
   1505     def run_child(self, child, terminal_input):
   1506         r, w = os.pipe()  # Pipe test results from child back to parent
   1507         try:
   1508             pid, fd = pty.fork()
   1509         except (OSError, AttributeError) as e:
   1510             os.close(r)
   1511             os.close(w)
   1512             self.skipTest("pty.fork() raised {}".format(e))
   1513             raise
   1514         if pid == 0:
   1515             # Child
   1516             try:
   1517                 # Make sure we don't get stuck if there's a problem
   1518                 signal.alarm(2)
   1519                 os.close(r)
   1520                 with open(w, "w") as wpipe:
   1521                     child(wpipe)
   1522             except:
   1523                 traceback.print_exc()
   1524             finally:
   1525                 # We don't want to return to unittest...
   1526                 os._exit(0)
   1527         # Parent
   1528         os.close(w)
   1529         os.write(fd, terminal_input)
   1530         # Get results from the pipe
   1531         with open(r, "r") as rpipe:
   1532             lines = []
   1533             while True:
   1534                 line = rpipe.readline().strip()
   1535                 if line == "":
   1536                     # The other end was closed => the child exited
   1537                     break
   1538                 lines.append(line)
   1539         # Check the result was got and corresponds to the user's terminal input
   1540         if len(lines) != 2:
   1541             # Something went wrong, try to get at stderr
   1542             # Beware of Linux raising EIO when the slave is closed
   1543             child_output = bytearray()
   1544             while True:
   1545                 try:
   1546                     chunk = os.read(fd, 3000)
   1547                 except OSError:  # Assume EIO
   1548                     break
   1549                 if not chunk:
   1550                     break
   1551                 child_output.extend(chunk)
   1552             os.close(fd)
   1553             child_output = child_output.decode("ascii", "ignore")
   1554             self.fail("got %d lines in pipe but expected 2, child output was:\n%s"
   1555                       % (len(lines), child_output))
   1556         os.close(fd)
   1557         return lines
   1558 
   1559     def check_input_tty(self, prompt, terminal_input, stdio_encoding=None):
   1560         if not sys.stdin.isatty() or not sys.stdout.isatty():
   1561             self.skipTest("stdin and stdout must be ttys")
   1562         def child(wpipe):
   1563             # Check the error handlers are accounted for
   1564             if stdio_encoding:
   1565                 sys.stdin = io.TextIOWrapper(sys.stdin.detach(),
   1566                                              encoding=stdio_encoding,
   1567                                              errors='surrogateescape')
   1568                 sys.stdout = io.TextIOWrapper(sys.stdout.detach(),
   1569                                               encoding=stdio_encoding,
   1570                                               errors='replace')
   1571             print("tty =", sys.stdin.isatty() and sys.stdout.isatty(), file=wpipe)
   1572             print(ascii(input(prompt)), file=wpipe)
   1573         lines = self.run_child(child, terminal_input + b"\r\n")
   1574         # Check we did exercise the GNU readline path
   1575         self.assertIn(lines[0], {'tty = True', 'tty = False'})
   1576         if lines[0] != 'tty = True':
   1577             self.skipTest("standard IO in should have been a tty")
   1578         input_result = eval(lines[1])   # ascii() -> eval() roundtrip
   1579         if stdio_encoding:
   1580             expected = terminal_input.decode(stdio_encoding, 'surrogateescape')
   1581         else:
   1582             expected = terminal_input.decode(sys.stdin.encoding)  # what else?
   1583         self.assertEqual(input_result, expected)
   1584 
   1585     def test_input_tty(self):
   1586         # Test input() functionality when wired to a tty (the code path
   1587         # is different and invokes GNU readline if available).
   1588         self.check_input_tty("prompt", b"quux")
   1589 
   1590     def test_input_tty_non_ascii(self):
   1591         # Check stdin/stdout encoding is used when invoking GNU readline
   1592         self.check_input_tty("prompt", b"quux\xe9", "utf-8")
   1593 
   1594     def test_input_tty_non_ascii_unicode_errors(self):
   1595         # Check stdin/stdout error handler is used when invoking GNU readline
   1596         self.check_input_tty("prompt", b"quux\xe9", "ascii")
   1597 
   1598     def test_input_no_stdout_fileno(self):
   1599         # Issue #24402: If stdin is the original terminal but stdout.fileno()
   1600         # fails, do not use the original stdout file descriptor
   1601         def child(wpipe):
   1602             print("stdin.isatty():", sys.stdin.isatty(), file=wpipe)
   1603             sys.stdout = io.StringIO()  # Does not support fileno()
   1604             input("prompt")
   1605             print("captured:", ascii(sys.stdout.getvalue()), file=wpipe)
   1606         lines = self.run_child(child, b"quux\r")
   1607         expected = (
   1608             "stdin.isatty(): True",
   1609             "captured: 'prompt'",
   1610         )
   1611         self.assertSequenceEqual(lines, expected)
   1612 
   1613 class TestSorted(unittest.TestCase):
   1614 
   1615     def test_basic(self):
   1616         data = list(range(100))
   1617         copy = data[:]
   1618         random.shuffle(copy)
   1619         self.assertEqual(data, sorted(copy))
   1620         self.assertNotEqual(data, copy)
   1621 
   1622         data.reverse()
   1623         random.shuffle(copy)
   1624         self.assertEqual(data, sorted(copy, key=lambda x: -x))
   1625         self.assertNotEqual(data, copy)
   1626         random.shuffle(copy)
   1627         self.assertEqual(data, sorted(copy, reverse=1))
   1628         self.assertNotEqual(data, copy)
   1629 
   1630     def test_bad_arguments(self):
   1631         # Issue #29327: The first argument is positional-only.
   1632         sorted([])
   1633         with self.assertRaises(TypeError):
   1634             sorted(iterable=[])
   1635         # Other arguments are keyword-only
   1636         sorted([], key=None)
   1637         with self.assertRaises(TypeError):
   1638             sorted([], None)
   1639 
   1640     def test_inputtypes(self):
   1641         s = 'abracadabra'
   1642         types = [list, tuple, str]
   1643         for T in types:
   1644             self.assertEqual(sorted(s), sorted(T(s)))
   1645 
   1646         s = ''.join(set(s))  # unique letters only
   1647         types = [str, set, frozenset, list, tuple, dict.fromkeys]
   1648         for T in types:
   1649             self.assertEqual(sorted(s), sorted(T(s)))
   1650 
   1651     def test_baddecorator(self):
   1652         data = 'The quick Brown fox Jumped over The lazy Dog'.split()
   1653         self.assertRaises(TypeError, sorted, data, None, lambda x,y: 0)
   1654 
   1655 
   1656 class ShutdownTest(unittest.TestCase):
   1657 
   1658     def test_cleanup(self):
   1659         # Issue #19255: builtins are still available at shutdown
   1660         code = """if 1:
   1661             import builtins
   1662             import sys
   1663 
   1664             class C:
   1665                 def __del__(self):
   1666                     print("before")
   1667                     # Check that builtins still exist
   1668                     len(())
   1669                     print("after")
   1670 
   1671             c = C()
   1672             # Make this module survive until builtins and sys are cleaned
   1673             builtins.here = sys.modules[__name__]
   1674             sys.here = sys.modules[__name__]
   1675             # Create a reference loop so that this module needs to go
   1676             # through a GC phase.
   1677             here = sys.modules[__name__]
   1678             """
   1679         # Issue #20599: Force ASCII encoding to get a codec implemented in C,
   1680         # otherwise the codec may be unloaded before C.__del__() is called, and
   1681         # so print("before") fails because the codec cannot be used to encode
   1682         # "before" to sys.stdout.encoding. For example, on Windows,
   1683         # sys.stdout.encoding is the OEM code page and these code pages are
   1684         # implemented in Python
   1685         rc, out, err = assert_python_ok("-c", code,
   1686                                         PYTHONIOENCODING="ascii")
   1687         self.assertEqual(["before", "after"], out.decode().splitlines())
   1688 
   1689 
   1690 class TestType(unittest.TestCase):
   1691     def test_new_type(self):
   1692         A = type('A', (), {})
   1693         self.assertEqual(A.__name__, 'A')
   1694         self.assertEqual(A.__qualname__, 'A')
   1695         self.assertEqual(A.__module__, __name__)
   1696         self.assertEqual(A.__bases__, (object,))
   1697         self.assertIs(A.__base__, object)
   1698         x = A()
   1699         self.assertIs(type(x), A)
   1700         self.assertIs(x.__class__, A)
   1701 
   1702         class B:
   1703             def ham(self):
   1704                 return 'ham%d' % self
   1705         C = type('C', (B, int), {'spam': lambda self: 'spam%s' % self})
   1706         self.assertEqual(C.__name__, 'C')
   1707         self.assertEqual(C.__qualname__, 'C')
   1708         self.assertEqual(C.__module__, __name__)
   1709         self.assertEqual(C.__bases__, (B, int))
   1710         self.assertIs(C.__base__, int)
   1711         self.assertIn('spam', C.__dict__)
   1712         self.assertNotIn('ham', C.__dict__)
   1713         x = C(42)
   1714         self.assertEqual(x, 42)
   1715         self.assertIs(type(x), C)
   1716         self.assertIs(x.__class__, C)
   1717         self.assertEqual(x.ham(), 'ham42')
   1718         self.assertEqual(x.spam(), 'spam42')
   1719         self.assertEqual(x.to_bytes(2, 'little'), b'\x2a\x00')
   1720 
   1721     def test_type_nokwargs(self):
   1722         with self.assertRaises(TypeError):
   1723             type('a', (), {}, x=5)
   1724         with self.assertRaises(TypeError):
   1725             type('a', (), dict={})
   1726 
   1727     def test_type_name(self):
   1728         for name in 'A', '\xc4', '\U0001f40d', 'B.A', '42', '':
   1729             with self.subTest(name=name):
   1730                 A = type(name, (), {})
   1731                 self.assertEqual(A.__name__, name)
   1732                 self.assertEqual(A.__qualname__, name)
   1733                 self.assertEqual(A.__module__, __name__)
   1734         with self.assertRaises(ValueError):
   1735             type('A\x00B', (), {})
   1736         with self.assertRaises(ValueError):
   1737             type('A\udcdcB', (), {})
   1738         with self.assertRaises(TypeError):
   1739             type(b'A', (), {})
   1740 
   1741         C = type('C', (), {})
   1742         for name in 'A', '\xc4', '\U0001f40d', 'B.A', '42', '':
   1743             with self.subTest(name=name):
   1744                 C.__name__ = name
   1745                 self.assertEqual(C.__name__, name)
   1746                 self.assertEqual(C.__qualname__, 'C')
   1747                 self.assertEqual(C.__module__, __name__)
   1748 
   1749         A = type('C', (), {})
   1750         with self.assertRaises(ValueError):
   1751             A.__name__ = 'A\x00B'
   1752         self.assertEqual(A.__name__, 'C')
   1753         with self.assertRaises(ValueError):
   1754             A.__name__ = 'A\udcdcB'
   1755         self.assertEqual(A.__name__, 'C')
   1756         with self.assertRaises(TypeError):
   1757             A.__name__ = b'A'
   1758         self.assertEqual(A.__name__, 'C')
   1759 
   1760     def test_type_qualname(self):
   1761         A = type('A', (), {'__qualname__': 'B.C'})
   1762         self.assertEqual(A.__name__, 'A')
   1763         self.assertEqual(A.__qualname__, 'B.C')
   1764         self.assertEqual(A.__module__, __name__)
   1765         with self.assertRaises(TypeError):
   1766             type('A', (), {'__qualname__': b'B'})
   1767         self.assertEqual(A.__qualname__, 'B.C')
   1768 
   1769         A.__qualname__ = 'D.E'
   1770         self.assertEqual(A.__name__, 'A')
   1771         self.assertEqual(A.__qualname__, 'D.E')
   1772         with self.assertRaises(TypeError):
   1773             A.__qualname__ = b'B'
   1774         self.assertEqual(A.__qualname__, 'D.E')
   1775 
   1776     def test_type_doc(self):
   1777         for doc in 'x', '\xc4', '\U0001f40d', 'x\x00y', b'x', 42, None:
   1778             A = type('A', (), {'__doc__': doc})
   1779             self.assertEqual(A.__doc__, doc)
   1780         with self.assertRaises(UnicodeEncodeError):
   1781             type('A', (), {'__doc__': 'x\udcdcy'})
   1782 
   1783         A = type('A', (), {})
   1784         self.assertEqual(A.__doc__, None)
   1785         for doc in 'x', '\xc4', '\U0001f40d', 'x\x00y', 'x\udcdcy', b'x', 42, None:
   1786             A.__doc__ = doc
   1787             self.assertEqual(A.__doc__, doc)
   1788 
   1789     def test_bad_args(self):
   1790         with self.assertRaises(TypeError):
   1791             type()
   1792         with self.assertRaises(TypeError):
   1793             type('A', ())
   1794         with self.assertRaises(TypeError):
   1795             type('A', (), {}, ())
   1796         with self.assertRaises(TypeError):
   1797             type('A', (), dict={})
   1798         with self.assertRaises(TypeError):
   1799             type('A', [], {})
   1800         with self.assertRaises(TypeError):
   1801             type('A', (), types.MappingProxyType({}))
   1802         with self.assertRaises(TypeError):
   1803             type('A', (None,), {})
   1804         with self.assertRaises(TypeError):
   1805             type('A', (bool,), {})
   1806         with self.assertRaises(TypeError):
   1807             type('A', (int, str), {})
   1808 
   1809     def test_bad_slots(self):
   1810         with self.assertRaises(TypeError):
   1811             type('A', (), {'__slots__': b'x'})
   1812         with self.assertRaises(TypeError):
   1813             type('A', (int,), {'__slots__': 'x'})
   1814         with self.assertRaises(TypeError):
   1815             type('A', (), {'__slots__': ''})
   1816         with self.assertRaises(TypeError):
   1817             type('A', (), {'__slots__': '42'})
   1818         with self.assertRaises(TypeError):
   1819             type('A', (), {'__slots__': 'x\x00y'})
   1820         with self.assertRaises(ValueError):
   1821             type('A', (), {'__slots__': 'x', 'x': 0})
   1822         with self.assertRaises(TypeError):
   1823             type('A', (), {'__slots__': ('__dict__', '__dict__')})
   1824         with self.assertRaises(TypeError):
   1825             type('A', (), {'__slots__': ('__weakref__', '__weakref__')})
   1826 
   1827         class B:
   1828             pass
   1829         with self.assertRaises(TypeError):
   1830             type('A', (B,), {'__slots__': '__dict__'})
   1831         with self.assertRaises(TypeError):
   1832             type('A', (B,), {'__slots__': '__weakref__'})
   1833 
   1834 
   1835 def load_tests(loader, tests, pattern):
   1836     from doctest import DocTestSuite
   1837     tests.addTest(DocTestSuite(builtins))
   1838     return tests
   1839 
   1840 if __name__ == "__main__":
   1841     unittest.main()
   1842