blob: 61d40464990d2e247ff76e3ded0710b917dd3f6f [file] [log] [blame]
Walter Dörwald919497e2003-01-19 16:23:59 +00001# Python test set -- built-in functions
Guido van Rossum3bead091992-01-27 17:00:37 +00002
Mark Dickinsonad731b92009-11-09 17:12:30 +00003import platform
Georg Brandl1b37e872010-03-14 10:45:50 +00004import unittest
Benjamin Peterson076e0312010-08-23 21:58:59 +00005import sys
6import warnings
7import collections
8import io
Georg Brandl8334fd92010-12-04 10:26:46 +00009import ast
Benjamin Peterson076e0312010-08-23 21:58:59 +000010import types
11import builtins
12import random
Eli Bendersky67ebabd2011-02-25 10:14:17 +000013from test.support import TESTFN, unlink, run_unittest, check_warnings
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +000014from operator import neg
Guido van Rossum3bead091992-01-27 17:00:37 +000015
Guido van Rossum3bead091992-01-27 17:00:37 +000016
Walter Dörwald919497e2003-01-19 16:23:59 +000017class Squares:
Guido van Rossum3bead091992-01-27 17:00:37 +000018
Walter Dörwald919497e2003-01-19 16:23:59 +000019 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
33class 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
51class BitBucket:
52 def write(self, line):
53 pass
54
Facundo Batista2336bdd2008-01-19 19:12:01 +000055test_conv_no_sign = [
Walter Dörwald919497e2003-01-19 16:23:59 +000056 ('0', 0),
57 ('1', 1),
58 ('9', 9),
59 ('10', 10),
60 ('99', 99),
61 ('100', 100),
62 ('314', 314),
63 (' 314', 314),
64 ('314 ', 314),
65 (' \t\t 314 \t\t ', 314),
Christian Heimesa37d4c62007-12-04 23:02:19 +000066 (repr(sys.maxsize), sys.maxsize),
Walter Dörwald919497e2003-01-19 16:23:59 +000067 (' 1x', ValueError),
68 (' 1 ', 1),
69 (' 1\02 ', ValueError),
70 ('', ValueError),
71 (' ', ValueError),
Walter Dörwald1f5947b2007-05-22 16:52:54 +000072 (' \t\t ', ValueError),
Guido van Rossumef87d6e2007-05-02 19:09:54 +000073 (str(b'\u0663\u0661\u0664 ','raw-unicode-escape'), 314),
Guido van Rossum84fc66d2007-05-03 17:18:26 +000074 (chr(0x200), ValueError),
Walter Dörwald919497e2003-01-19 16:23:59 +000075]
76
Facundo Batista2336bdd2008-01-19 19:12:01 +000077test_conv_sign = [
78 ('0', 0),
79 ('1', 1),
80 ('9', 9),
81 ('10', 10),
82 ('99', 99),
83 ('100', 100),
84 ('314', 314),
85 (' 314', ValueError),
86 ('314 ', 314),
87 (' \t\t 314 \t\t ', ValueError),
88 (repr(sys.maxsize), sys.maxsize),
89 (' 1x', ValueError),
90 (' 1 ', ValueError),
91 (' 1\02 ', ValueError),
92 ('', ValueError),
93 (' ', ValueError),
94 (' \t\t ', ValueError),
95 (str(b'\u0663\u0661\u0664 ','raw-unicode-escape'), 314),
96 (chr(0x200), ValueError),
97]
98
Raymond Hettinger96229b12005-03-11 06:49:40 +000099class TestFailingBool:
Jack Diederich4dafcc42006-11-28 19:15:13 +0000100 def __bool__(self):
Raymond Hettinger96229b12005-03-11 06:49:40 +0000101 raise RuntimeError
102
103class TestFailingIter:
104 def __iter__(self):
105 raise RuntimeError
106
Walter Dörwald919497e2003-01-19 16:23:59 +0000107class BuiltinTest(unittest.TestCase):
108
109 def test_import(self):
110 __import__('sys')
111 __import__('time')
112 __import__('string')
Guido van Rossumd8faa362007-04-27 19:54:29 +0000113 __import__(name='sys')
114 __import__(name='time', level=0)
Walter Dörwald919497e2003-01-19 16:23:59 +0000115 self.assertRaises(ImportError, __import__, 'spamspam')
116 self.assertRaises(TypeError, __import__, 1, 2, 3, 4)
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000117 self.assertRaises(ValueError, __import__, '')
Guido van Rossumd8faa362007-04-27 19:54:29 +0000118 self.assertRaises(TypeError, __import__, 'sys', name='sys')
Walter Dörwald919497e2003-01-19 16:23:59 +0000119
120 def test_abs(self):
121 # int
122 self.assertEqual(abs(0), 0)
123 self.assertEqual(abs(1234), 1234)
124 self.assertEqual(abs(-1234), 1234)
Christian Heimesa37d4c62007-12-04 23:02:19 +0000125 self.assertTrue(abs(-sys.maxsize-1) > 0)
Walter Dörwald919497e2003-01-19 16:23:59 +0000126 # float
127 self.assertEqual(abs(0.0), 0.0)
128 self.assertEqual(abs(3.14), 3.14)
129 self.assertEqual(abs(-3.14), 3.14)
Walter Dörwald919497e2003-01-19 16:23:59 +0000130 # str
131 self.assertRaises(TypeError, abs, 'a')
Mark Dickinsonfb3dc942010-05-25 19:06:24 +0000132 # bool
133 self.assertEqual(abs(True), 1)
134 self.assertEqual(abs(False), 0)
135 # other
136 self.assertRaises(TypeError, abs)
137 self.assertRaises(TypeError, abs, None)
138 class AbsClass(object):
139 def __abs__(self):
140 return -5
141 self.assertEqual(abs(AbsClass()), -5)
Walter Dörwald919497e2003-01-19 16:23:59 +0000142
Raymond Hettinger96229b12005-03-11 06:49:40 +0000143 def test_all(self):
144 self.assertEqual(all([2, 4, 6]), True)
145 self.assertEqual(all([2, None, 6]), False)
146 self.assertRaises(RuntimeError, all, [2, TestFailingBool(), 6])
147 self.assertRaises(RuntimeError, all, TestFailingIter())
148 self.assertRaises(TypeError, all, 10) # Non-iterable
149 self.assertRaises(TypeError, all) # No args
150 self.assertRaises(TypeError, all, [2, 4, 6], []) # Too many args
151 self.assertEqual(all([]), True) # Empty iterator
152 S = [50, 60]
153 self.assertEqual(all(x > 42 for x in S), True)
154 S = [50, 40, 60]
155 self.assertEqual(all(x > 42 for x in S), False)
156
157 def test_any(self):
158 self.assertEqual(any([None, None, None]), False)
159 self.assertEqual(any([None, 4, None]), True)
160 self.assertRaises(RuntimeError, any, [None, TestFailingBool(), 6])
161 self.assertRaises(RuntimeError, all, TestFailingIter())
162 self.assertRaises(TypeError, any, 10) # Non-iterable
163 self.assertRaises(TypeError, any) # No args
164 self.assertRaises(TypeError, any, [2, 4, 6], []) # Too many args
165 self.assertEqual(any([]), False) # Empty iterator
166 S = [40, 60, 30]
167 self.assertEqual(any(x > 42 for x in S), True)
168 S = [10, 20, 30]
169 self.assertEqual(any(x > 42 for x in S), False)
170
Georg Brandl559e5d72008-06-11 18:37:52 +0000171 def test_ascii(self):
172 self.assertEqual(ascii(''), '\'\'')
173 self.assertEqual(ascii(0), '0')
Georg Brandl559e5d72008-06-11 18:37:52 +0000174 self.assertEqual(ascii(()), '()')
175 self.assertEqual(ascii([]), '[]')
176 self.assertEqual(ascii({}), '{}')
177 a = []
178 a.append(a)
179 self.assertEqual(ascii(a), '[[...]]')
180 a = {}
181 a[0] = a
182 self.assertEqual(ascii(a), '{0: {...}}')
Antoine Pitroue4a18922010-09-09 20:30:23 +0000183 # Advanced checks for unicode strings
184 def _check_uni(s):
185 self.assertEqual(ascii(s), repr(s))
186 _check_uni("'")
187 _check_uni('"')
188 _check_uni('"\'')
189 _check_uni('\0')
190 _check_uni('\r\n\t .')
191 # Unprintable non-ASCII characters
192 _check_uni('\x85')
193 _check_uni('\u1fff')
194 _check_uni('\U00012fff')
195 # Lone surrogates
196 _check_uni('\ud800')
197 _check_uni('\udfff')
198 # Issue #9804: surrogates should be joined even for printable
199 # wide characters (UCS-2 builds).
200 self.assertEqual(ascii('\U0001d121'), "'\\U0001d121'")
201 # All together
202 s = "'\0\"\n\r\t abcd\x85é\U00012fff\uD800\U0001D121xxx."
203 self.assertEqual(ascii(s),
204 r"""'\'\x00"\n\r\t abcd\x85\xe9\U00012fff\ud800\U0001d121xxx.'""")
Georg Brandl559e5d72008-06-11 18:37:52 +0000205
Thomas Wouters89f507f2006-12-13 04:49:30 +0000206 def test_neg(self):
Christian Heimesa37d4c62007-12-04 23:02:19 +0000207 x = -sys.maxsize-1
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000208 self.assertTrue(isinstance(x, int))
Christian Heimesa37d4c62007-12-04 23:02:19 +0000209 self.assertEqual(-x, sys.maxsize+1)
Thomas Wouters89f507f2006-12-13 04:49:30 +0000210
Walter Dörwald919497e2003-01-19 16:23:59 +0000211 def test_callable(self):
Antoine Pitroue71362d2010-11-27 22:00:11 +0000212 self.assertTrue(callable(len))
213 self.assertFalse(callable("a"))
214 self.assertTrue(callable(callable))
215 self.assertTrue(callable(lambda x, y: x + y))
216 self.assertFalse(callable(__builtins__))
Walter Dörwald919497e2003-01-19 16:23:59 +0000217 def f(): pass
Antoine Pitroue71362d2010-11-27 22:00:11 +0000218 self.assertTrue(callable(f))
219
220 class C1:
Walter Dörwald919497e2003-01-19 16:23:59 +0000221 def meth(self): pass
Antoine Pitroue71362d2010-11-27 22:00:11 +0000222 self.assertTrue(callable(C1))
223 c = C1()
224 self.assertTrue(callable(c.meth))
225 self.assertFalse(callable(c))
226
227 # __call__ is looked up on the class, not the instance
228 c.__call__ = None
229 self.assertFalse(callable(c))
230 c.__call__ = lambda self: 0
231 self.assertFalse(callable(c))
232 del c.__call__
233 self.assertFalse(callable(c))
234
235 class C2(object):
Walter Dörwald919497e2003-01-19 16:23:59 +0000236 def __call__(self): pass
Antoine Pitroue71362d2010-11-27 22:00:11 +0000237 c2 = C2()
238 self.assertTrue(callable(c2))
239 c2.__call__ = None
240 self.assertTrue(callable(c2))
241 class C3(C2): pass
242 c3 = C3()
243 self.assertTrue(callable(c3))
Walter Dörwald919497e2003-01-19 16:23:59 +0000244
245 def test_chr(self):
246 self.assertEqual(chr(32), ' ')
247 self.assertEqual(chr(65), 'A')
248 self.assertEqual(chr(97), 'a')
249 self.assertEqual(chr(0xff), '\xff')
Guido van Rossum572dbf82007-04-27 23:53:51 +0000250 self.assertRaises(ValueError, chr, 1<<24)
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000251 self.assertEqual(chr(sys.maxunicode),
252 str(('\\U%08x' % (sys.maxunicode)).encode("ascii"),
253 'unicode-escape'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000254 self.assertRaises(TypeError, chr)
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000255 self.assertEqual(chr(0x0000FFFF), "\U0000FFFF")
256 self.assertEqual(chr(0x00010000), "\U00010000")
257 self.assertEqual(chr(0x00010001), "\U00010001")
258 self.assertEqual(chr(0x000FFFFE), "\U000FFFFE")
259 self.assertEqual(chr(0x000FFFFF), "\U000FFFFF")
260 self.assertEqual(chr(0x00100000), "\U00100000")
261 self.assertEqual(chr(0x00100001), "\U00100001")
262 self.assertEqual(chr(0x0010FFFE), "\U0010FFFE")
263 self.assertEqual(chr(0x0010FFFF), "\U0010FFFF")
264 self.assertRaises(ValueError, chr, -1)
265 self.assertRaises(ValueError, chr, 0x00110000)
Amaury Forgeot d'Arc7888d082008-08-01 01:06:32 +0000266 self.assertRaises((OverflowError, ValueError), chr, 2**32)
Walter Dörwald919497e2003-01-19 16:23:59 +0000267
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000268 def test_cmp(self):
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000269 self.assertTrue(not hasattr(builtins, "cmp"))
Walter Dörwald919497e2003-01-19 16:23:59 +0000270
Walter Dörwald919497e2003-01-19 16:23:59 +0000271 def test_compile(self):
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000272 compile('print(1)\n', '', 'exec')
Amaury Forgeot d'Arcaf593462007-11-22 20:53:01 +0000273 bom = b'\xef\xbb\xbf'
274 compile(bom + b'print(1)\n', '', 'exec')
Guido van Rossumd8faa362007-04-27 19:54:29 +0000275 compile(source='pass', filename='?', mode='exec')
276 compile(dont_inherit=0, filename='tmp', source='0', mode='eval')
277 compile('pass', '?', dont_inherit=1, mode='exec')
Benjamin Peterson60320cb2008-09-26 21:49:22 +0000278 compile(memoryview(b"text"), "name", "exec")
Walter Dörwald919497e2003-01-19 16:23:59 +0000279 self.assertRaises(TypeError, compile)
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000280 self.assertRaises(ValueError, compile, 'print(42)\n', '<string>', 'badmode')
281 self.assertRaises(ValueError, compile, 'print(42)\n', '<string>', 'single', 0xff)
Neal Norwitzfcf44352005-11-27 20:37:43 +0000282 self.assertRaises(TypeError, compile, chr(0), 'f', 'exec')
Guido van Rossumd8faa362007-04-27 19:54:29 +0000283 self.assertRaises(TypeError, compile, 'pass', '?', 'exec',
284 mode='eval', source='0', filename='tmp')
Walter Dörwald1f5947b2007-05-22 16:52:54 +0000285 compile('print("\xe5")\n', '', 'exec')
286 self.assertRaises(TypeError, compile, chr(0), 'f', 'exec')
287 self.assertRaises(ValueError, compile, str('a = 1'), 'f', 'bad')
Guido van Rossumd8faa362007-04-27 19:54:29 +0000288
Georg Brandl8334fd92010-12-04 10:26:46 +0000289 # test the optimize argument
290
291 codestr = '''def f():
292 """doc"""
293 try:
294 assert False
295 except AssertionError:
296 return (True, f.__doc__)
297 else:
298 return (False, f.__doc__)
299 '''
300 def f(): """doc"""
301 values = [(-1, __debug__, f.__doc__),
302 (0, True, 'doc'),
303 (1, False, 'doc'),
304 (2, False, None)]
305 for optval, debugval, docstring in values:
306 # test both direct compilation and compilation via AST
307 codeobjs = []
308 codeobjs.append(compile(codestr, "<test>", "exec", optimize=optval))
309 tree = ast.parse(codestr)
310 codeobjs.append(compile(tree, "<test>", "exec", optimize=optval))
311 for code in codeobjs:
312 ns = {}
313 exec(code, ns)
314 rv = ns['f']()
315 self.assertEqual(rv, (debugval, docstring))
316
Walter Dörwald919497e2003-01-19 16:23:59 +0000317 def test_delattr(self):
Walter Dörwald919497e2003-01-19 16:23:59 +0000318 sys.spam = 1
319 delattr(sys, 'spam')
320 self.assertRaises(TypeError, delattr)
321
322 def test_dir(self):
Georg Brandle32b4222007-03-10 22:13:27 +0000323 # dir(wrong number of arguments)
Walter Dörwald919497e2003-01-19 16:23:59 +0000324 self.assertRaises(TypeError, dir, 42, 42)
325
Georg Brandle32b4222007-03-10 22:13:27 +0000326 # dir() - local scope
327 local_var = 1
Benjamin Peterson577473f2010-01-19 00:09:57 +0000328 self.assertIn('local_var', dir())
Georg Brandle32b4222007-03-10 22:13:27 +0000329
330 # dir(module)
Benjamin Peterson577473f2010-01-19 00:09:57 +0000331 self.assertIn('exit', dir(sys))
Georg Brandle32b4222007-03-10 22:13:27 +0000332
333 # dir(module_with_invalid__dict__)
Georg Brandle32b4222007-03-10 22:13:27 +0000334 class Foo(types.ModuleType):
335 __dict__ = 8
336 f = Foo("foo")
337 self.assertRaises(TypeError, dir, f)
338
339 # dir(type)
Benjamin Peterson577473f2010-01-19 00:09:57 +0000340 self.assertIn("strip", dir(str))
341 self.assertNotIn("__mro__", dir(str))
Georg Brandle32b4222007-03-10 22:13:27 +0000342
343 # dir(obj)
344 class Foo(object):
345 def __init__(self):
346 self.x = 7
347 self.y = 8
348 self.z = 9
349 f = Foo()
Benjamin Peterson577473f2010-01-19 00:09:57 +0000350 self.assertIn("y", dir(f))
Georg Brandle32b4222007-03-10 22:13:27 +0000351
352 # dir(obj_no__dict__)
353 class Foo(object):
354 __slots__ = []
355 f = Foo()
Benjamin Peterson577473f2010-01-19 00:09:57 +0000356 self.assertIn("__repr__", dir(f))
Georg Brandle32b4222007-03-10 22:13:27 +0000357
358 # dir(obj_no__class__with__dict__)
359 # (an ugly trick to cause getattr(f, "__class__") to fail)
360 class Foo(object):
361 __slots__ = ["__class__", "__dict__"]
362 def __init__(self):
363 self.bar = "wow"
364 f = Foo()
Benjamin Peterson577473f2010-01-19 00:09:57 +0000365 self.assertNotIn("__repr__", dir(f))
366 self.assertIn("bar", dir(f))
Georg Brandle32b4222007-03-10 22:13:27 +0000367
368 # dir(obj_using __dir__)
369 class Foo(object):
370 def __dir__(self):
371 return ["kan", "ga", "roo"]
372 f = Foo()
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000373 self.assertTrue(dir(f) == ["ga", "kan", "roo"])
Georg Brandle32b4222007-03-10 22:13:27 +0000374
375 # dir(obj__dir__not_list)
376 class Foo(object):
377 def __dir__(self):
378 return 7
379 f = Foo()
380 self.assertRaises(TypeError, dir, f)
381
Collin Winter3eed7652007-08-14 17:53:54 +0000382 # dir(traceback)
383 try:
384 raise IndexError
385 except:
386 self.assertEqual(len(dir(sys.exc_info()[2])), 4)
387
388
Walter Dörwald919497e2003-01-19 16:23:59 +0000389 def test_divmod(self):
390 self.assertEqual(divmod(12, 7), (1, 5))
391 self.assertEqual(divmod(-12, 7), (-2, 2))
392 self.assertEqual(divmod(12, -7), (-2, -2))
393 self.assertEqual(divmod(-12, -7), (1, -5))
394
Mark Dickinson5c2db372009-12-05 20:28:34 +0000395 self.assertEqual(divmod(-sys.maxsize-1, -1), (sys.maxsize+1, 0))
Raymond Hettinger5ea7e312004-09-30 07:47:20 +0000396
Eli Bendersky67ebabd2011-02-25 10:14:17 +0000397 for num, denom, exp_result in [ (3.25, 1.0, (3.0, 0.25)),
398 (-3.25, 1.0, (-4.0, 0.75)),
399 (3.25, -1.0, (-4.0, -0.75)),
400 (-3.25, -1.0, (3.0, -0.25))]:
401 result = divmod(num, denom)
402 self.assertAlmostEqual(result[0], exp_result[0])
403 self.assertAlmostEqual(result[1], exp_result[1])
Walter Dörwald919497e2003-01-19 16:23:59 +0000404
405 self.assertRaises(TypeError, divmod)
406
407 def test_eval(self):
408 self.assertEqual(eval('1+1'), 2)
409 self.assertEqual(eval(' 1+1\n'), 2)
410 globals = {'a': 1, 'b': 2}
411 locals = {'b': 200, 'c': 300}
412 self.assertEqual(eval('a', globals) , 1)
413 self.assertEqual(eval('a', globals, locals), 1)
414 self.assertEqual(eval('b', globals, locals), 200)
415 self.assertEqual(eval('c', globals, locals), 300)
Walter Dörwald919497e2003-01-19 16:23:59 +0000416 globals = {'a': 1, 'b': 2}
417 locals = {'b': 200, 'c': 300}
Amaury Forgeot d'Arcaf593462007-11-22 20:53:01 +0000418 bom = b'\xef\xbb\xbf'
419 self.assertEqual(eval(bom + b'a', globals, locals), 1)
Walter Dörwald1f5947b2007-05-22 16:52:54 +0000420 self.assertEqual(eval('"\xe5"', globals), "\xe5")
Walter Dörwald919497e2003-01-19 16:23:59 +0000421 self.assertRaises(TypeError, eval)
422 self.assertRaises(TypeError, eval, ())
Amaury Forgeot d'Arcaf593462007-11-22 20:53:01 +0000423 self.assertRaises(SyntaxError, eval, bom[:2] + b'a')
Walter Dörwald919497e2003-01-19 16:23:59 +0000424
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000425 def test_general_eval(self):
426 # Tests that general mappings can be used for the locals argument
427
428 class M:
429 "Test mapping interface versus possible calls from eval()."
430 def __getitem__(self, key):
431 if key == 'a':
432 return 12
433 raise KeyError
Guido van Rossumcd70eee2007-02-11 18:53:00 +0000434 def keys(self):
435 return list('xyz')
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000436
437 m = M()
438 g = globals()
439 self.assertEqual(eval('a', g, m), 12)
440 self.assertRaises(NameError, eval, 'b', g, m)
441 self.assertEqual(eval('dir()', g, m), list('xyz'))
442 self.assertEqual(eval('globals()', g, m), g)
443 self.assertEqual(eval('locals()', g, m), m)
Raymond Hettinger513ffe82004-07-06 13:44:41 +0000444 self.assertRaises(TypeError, eval, 'a', m)
Raymond Hettinger66bd2332004-08-02 08:30:07 +0000445 class A:
446 "Non-mapping"
447 pass
448 m = A()
449 self.assertRaises(TypeError, eval, 'a', g, m)
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000450
451 # Verify that dict subclasses work as well
452 class D(dict):
453 def __getitem__(self, key):
454 if key == 'a':
455 return 12
456 return dict.__getitem__(self, key)
Guido van Rossumcd70eee2007-02-11 18:53:00 +0000457 def keys(self):
458 return list('xyz')
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000459
460 d = D()
461 self.assertEqual(eval('a', g, d), 12)
462 self.assertRaises(NameError, eval, 'b', g, d)
463 self.assertEqual(eval('dir()', g, d), list('xyz'))
464 self.assertEqual(eval('globals()', g, d), g)
465 self.assertEqual(eval('locals()', g, d), d)
466
467 # Verify locals stores (used by list comps)
468 eval('[locals() for i in (2,3)]', g, d)
Raymond Hettingerf80680d2008-02-06 00:07:11 +0000469 eval('[locals() for i in (2,3)]', g, collections.UserDict())
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000470
471 class SpreadSheet:
472 "Sample application showing nested, calculated lookups."
473 _cells = {}
474 def __setitem__(self, key, formula):
475 self._cells[key] = formula
Thomas Wouters73e5a5b2006-06-08 15:35:45 +0000476 def __getitem__(self, key):
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000477 return eval(self._cells[key], globals(), self)
478
479 ss = SpreadSheet()
480 ss['a1'] = '5'
481 ss['a2'] = 'a1*6'
482 ss['a3'] = 'a2*7'
483 self.assertEqual(ss['a3'], 210)
484
Raymond Hettinger2a7dede2004-08-07 04:55:30 +0000485 # Verify that dir() catches a non-list returned by eval
486 # SF bug #1004669
487 class C:
488 def __getitem__(self, item):
489 raise KeyError(item)
Guido van Rossumcd70eee2007-02-11 18:53:00 +0000490 def keys(self):
491 return 1 # used to be 'a' but that's no longer an error
Raymond Hettinger2a7dede2004-08-07 04:55:30 +0000492 self.assertRaises(TypeError, eval, 'dir()', globals(), C())
493
Georg Brandl7cae87c2006-09-06 06:51:57 +0000494 def test_exec(self):
495 g = {}
496 exec('z = 1', g)
497 if '__builtins__' in g:
498 del g['__builtins__']
499 self.assertEqual(g, {'z': 1})
500
Guido van Rossumef87d6e2007-05-02 19:09:54 +0000501 exec('z = 1+1', g)
Georg Brandl7cae87c2006-09-06 06:51:57 +0000502 if '__builtins__' in g:
503 del g['__builtins__']
504 self.assertEqual(g, {'z': 2})
505 g = {}
506 l = {}
507
Brett Cannon77628992010-03-20 20:59:33 +0000508 with check_warnings():
509 warnings.filterwarnings("ignore", "global statement",
510 module="<string>")
511 exec('global a; a = 1; b = 2', g, l)
Georg Brandl7cae87c2006-09-06 06:51:57 +0000512 if '__builtins__' in g:
513 del g['__builtins__']
514 if '__builtins__' in l:
515 del l['__builtins__']
516 self.assertEqual((g, l), ({'a': 1}, {'b': 2}))
517
Amaury Forgeot d'Arc9ed77352008-04-04 23:25:27 +0000518 def test_exec_redirected(self):
519 savestdout = sys.stdout
520 sys.stdout = None # Whatever that cannot flush()
521 try:
522 # Used to raise SystemError('error return without exception set')
523 exec('a')
524 except NameError:
525 pass
526 finally:
527 sys.stdout = savestdout
528
Walter Dörwald919497e2003-01-19 16:23:59 +0000529 def test_filter(self):
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000530 self.assertEqual(list(filter(lambda c: 'a' <= c <= 'z', 'Hello World')), list('elloorld'))
531 self.assertEqual(list(filter(None, [1, 'hello', [], [3], '', None, 9, 0])), [1, 'hello', [3], 9])
532 self.assertEqual(list(filter(lambda x: x > 0, [1, -3, 9, 0, 2])), [1, 9, 2])
533 self.assertEqual(list(filter(None, Squares(10))), [1, 4, 9, 16, 25, 36, 49, 64, 81])
534 self.assertEqual(list(filter(lambda x: x%2, Squares(10))), [1, 9, 25, 49, 81])
Walter Dörwald919497e2003-01-19 16:23:59 +0000535 def identity(item):
536 return 1
537 filter(identity, Squares(5))
538 self.assertRaises(TypeError, filter)
539 class BadSeq(object):
Tim Petersf2715e02003-02-19 02:35:07 +0000540 def __getitem__(self, index):
541 if index<4:
542 return 42
543 raise ValueError
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000544 self.assertRaises(ValueError, list, filter(lambda x: x, BadSeq()))
Walter Dörwald919497e2003-01-19 16:23:59 +0000545 def badfunc():
546 pass
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000547 self.assertRaises(TypeError, list, filter(badfunc, range(5)))
Walter Dörwald919497e2003-01-19 16:23:59 +0000548
Walter Dörwaldbf517072003-01-27 15:57:14 +0000549 # test bltinmodule.c::filtertuple()
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000550 self.assertEqual(list(filter(None, (1, 2))), [1, 2])
551 self.assertEqual(list(filter(lambda x: x>=3, (1, 2, 3, 4))), [3, 4])
552 self.assertRaises(TypeError, list, filter(42, (1, 2)))
Walter Dörwaldc3da83f2003-02-04 20:24:45 +0000553
Walter Dörwald919497e2003-01-19 16:23:59 +0000554 def test_getattr(self):
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000555 self.assertTrue(getattr(sys, 'stdout') is sys.stdout)
Walter Dörwald919497e2003-01-19 16:23:59 +0000556 self.assertRaises(TypeError, getattr, sys, 1)
557 self.assertRaises(TypeError, getattr, sys, 1, "foo")
558 self.assertRaises(TypeError, getattr)
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000559 self.assertRaises(AttributeError, getattr, sys, chr(sys.maxunicode))
Victor Stinner624dbf62010-03-12 17:17:58 +0000560 # unicode surrogates are not encodable to the default encoding (utf8)
561 self.assertRaises(AttributeError, getattr, 1, "\uDAD1\uD51E")
Walter Dörwald919497e2003-01-19 16:23:59 +0000562
563 def test_hasattr(self):
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000564 self.assertTrue(hasattr(sys, 'stdout'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000565 self.assertRaises(TypeError, hasattr, sys, 1)
566 self.assertRaises(TypeError, hasattr)
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000567 self.assertEqual(False, hasattr(sys, chr(sys.maxunicode)))
Walter Dörwald919497e2003-01-19 16:23:59 +0000568
Benjamin Peterson17689992010-08-24 03:26:23 +0000569 # Check that hasattr propagates all exceptions outside of
570 # AttributeError.
Alexandre Vassalottieca20b62008-05-16 02:54:33 +0000571 class A:
572 def __getattr__(self, what):
Benjamin Peterson17689992010-08-24 03:26:23 +0000573 raise SystemExit
574 self.assertRaises(SystemExit, hasattr, A(), "b")
Alexandre Vassalottieca20b62008-05-16 02:54:33 +0000575 class B:
576 def __getattr__(self, what):
Benjamin Peterson17689992010-08-24 03:26:23 +0000577 raise ValueError
578 self.assertRaises(ValueError, hasattr, B(), "b")
Alexandre Vassalottieca20b62008-05-16 02:54:33 +0000579
Walter Dörwald919497e2003-01-19 16:23:59 +0000580 def test_hash(self):
581 hash(None)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000582 self.assertEqual(hash(1), hash(1))
Walter Dörwald919497e2003-01-19 16:23:59 +0000583 self.assertEqual(hash(1), hash(1.0))
584 hash('spam')
Guido van Rossum98297ee2007-11-06 21:34:58 +0000585 self.assertEqual(hash('spam'), hash(b'spam'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000586 hash((0,1,2,3))
587 def f(): pass
588 self.assertRaises(TypeError, hash, [])
589 self.assertRaises(TypeError, hash, {})
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000590 # Bug 1536021: Allow hash to return long objects
591 class X:
592 def __hash__(self):
593 return 2**100
Ezio Melottib3aedd42010-11-20 19:04:17 +0000594 self.assertEqual(type(hash(X())), int)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000595 class Z(int):
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000596 def __hash__(self):
597 return self
Ezio Melottib3aedd42010-11-20 19:04:17 +0000598 self.assertEqual(hash(Z(42)), hash(42))
Walter Dörwald919497e2003-01-19 16:23:59 +0000599
600 def test_hex(self):
601 self.assertEqual(hex(16), '0x10')
Guido van Rossume2a383d2007-01-15 16:59:06 +0000602 self.assertEqual(hex(-16), '-0x10')
Walter Dörwald919497e2003-01-19 16:23:59 +0000603 self.assertRaises(TypeError, hex, {})
604
605 def test_id(self):
606 id(None)
607 id(1)
Walter Dörwald919497e2003-01-19 16:23:59 +0000608 id(1.0)
609 id('spam')
610 id((0,1,2,3))
611 id([0,1,2,3])
612 id({'spam': 1, 'eggs': 2, 'ham': 3})
613
Guido van Rossuma88a0332007-02-26 16:59:55 +0000614 # Test input() later, alphabetized as if it were raw_input
615
Walter Dörwald919497e2003-01-19 16:23:59 +0000616 def test_iter(self):
617 self.assertRaises(TypeError, iter)
618 self.assertRaises(TypeError, iter, 42, 42)
619 lists = [("1", "2"), ["1", "2"], "12"]
Walter Dörwald919497e2003-01-19 16:23:59 +0000620 for l in lists:
621 i = iter(l)
Georg Brandla18af4e2007-04-21 15:47:16 +0000622 self.assertEqual(next(i), '1')
623 self.assertEqual(next(i), '2')
624 self.assertRaises(StopIteration, next, i)
Walter Dörwald919497e2003-01-19 16:23:59 +0000625
626 def test_isinstance(self):
627 class C:
628 pass
629 class D(C):
630 pass
631 class E:
632 pass
633 c = C()
634 d = D()
635 e = E()
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000636 self.assertTrue(isinstance(c, C))
637 self.assertTrue(isinstance(d, C))
638 self.assertTrue(not isinstance(e, C))
639 self.assertTrue(not isinstance(c, D))
640 self.assertTrue(not isinstance('foo', E))
Walter Dörwald919497e2003-01-19 16:23:59 +0000641 self.assertRaises(TypeError, isinstance, E, 'foo')
642 self.assertRaises(TypeError, isinstance)
643
644 def test_issubclass(self):
645 class C:
646 pass
647 class D(C):
648 pass
649 class E:
650 pass
651 c = C()
652 d = D()
653 e = E()
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000654 self.assertTrue(issubclass(D, C))
655 self.assertTrue(issubclass(C, C))
656 self.assertTrue(not issubclass(C, D))
Walter Dörwald919497e2003-01-19 16:23:59 +0000657 self.assertRaises(TypeError, issubclass, 'foo', E)
658 self.assertRaises(TypeError, issubclass, E, 'foo')
659 self.assertRaises(TypeError, issubclass)
660
661 def test_len(self):
662 self.assertEqual(len('123'), 3)
663 self.assertEqual(len(()), 0)
664 self.assertEqual(len((1, 2, 3, 4)), 4)
665 self.assertEqual(len([1, 2, 3, 4]), 4)
666 self.assertEqual(len({}), 0)
667 self.assertEqual(len({'a':1, 'b': 2}), 2)
668 class BadSeq:
669 def __len__(self):
670 raise ValueError
671 self.assertRaises(ValueError, len, BadSeq())
Benjamin Petersonee1ae7c2009-02-08 21:07:20 +0000672 class InvalidLen:
673 def __len__(self):
674 return None
675 self.assertRaises(TypeError, len, InvalidLen())
676 class FloatLen:
677 def __len__(self):
678 return 4.5
679 self.assertRaises(TypeError, len, FloatLen())
680 class HugeLen:
681 def __len__(self):
682 return sys.maxsize + 1
683 self.assertRaises(OverflowError, len, HugeLen())
Mark Dickinsonfb3dc942010-05-25 19:06:24 +0000684 class NoLenMethod(object): pass
685 self.assertRaises(TypeError, len, NoLenMethod())
Walter Dörwald919497e2003-01-19 16:23:59 +0000686
Walter Dörwald919497e2003-01-19 16:23:59 +0000687 def test_map(self):
688 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000689 list(map(lambda x: x*x, range(1,4))),
Walter Dörwald919497e2003-01-19 16:23:59 +0000690 [1, 4, 9]
691 )
692 try:
693 from math import sqrt
694 except ImportError:
695 def sqrt(x):
696 return pow(x, 0.5)
697 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000698 list(map(lambda x: list(map(sqrt, x)), [[16, 4], [81, 9]])),
Walter Dörwald919497e2003-01-19 16:23:59 +0000699 [[4.0, 2.0], [9.0, 3.0]]
700 )
701 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000702 list(map(lambda x, y: x+y, [1,3,2], [9,1,4])),
Walter Dörwald919497e2003-01-19 16:23:59 +0000703 [10, 4, 6]
704 )
705
706 def plus(*v):
707 accu = 0
708 for i in v: accu = accu + i
709 return accu
710 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000711 list(map(plus, [1, 3, 7])),
Walter Dörwald919497e2003-01-19 16:23:59 +0000712 [1, 3, 7]
713 )
714 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000715 list(map(plus, [1, 3, 7], [4, 9, 2])),
Walter Dörwald919497e2003-01-19 16:23:59 +0000716 [1+4, 3+9, 7+2]
717 )
718 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000719 list(map(plus, [1, 3, 7], [4, 9, 2], [1, 1, 0])),
Walter Dörwald919497e2003-01-19 16:23:59 +0000720 [1+4+1, 3+9+1, 7+2+0]
721 )
722 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000723 list(map(int, Squares(10))),
Walter Dörwald919497e2003-01-19 16:23:59 +0000724 [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
725 )
Guido van Rossum47b9ff62006-08-24 00:41:19 +0000726 def Max(a, b):
727 if a is None:
728 return b
729 if b is None:
730 return a
731 return max(a, b)
Walter Dörwald919497e2003-01-19 16:23:59 +0000732 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000733 list(map(Max, Squares(3), Squares(2))),
734 [0, 1]
Walter Dörwald919497e2003-01-19 16:23:59 +0000735 )
736 self.assertRaises(TypeError, map)
737 self.assertRaises(TypeError, map, lambda x: x, 42)
Walter Dörwald919497e2003-01-19 16:23:59 +0000738 class BadSeq:
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000739 def __iter__(self):
Walter Dörwald919497e2003-01-19 16:23:59 +0000740 raise ValueError
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000741 yield None
742 self.assertRaises(ValueError, list, map(lambda x: x, BadSeq()))
Neal Norwitzfcf44352005-11-27 20:37:43 +0000743 def badfunc(x):
744 raise RuntimeError
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000745 self.assertRaises(RuntimeError, list, map(badfunc, range(5)))
Walter Dörwald919497e2003-01-19 16:23:59 +0000746
747 def test_max(self):
748 self.assertEqual(max('123123'), '3')
749 self.assertEqual(max(1, 2, 3), 3)
750 self.assertEqual(max((1, 2, 3, 1, 2, 3)), 3)
751 self.assertEqual(max([1, 2, 3, 1, 2, 3]), 3)
752
Guido van Rossume2a383d2007-01-15 16:59:06 +0000753 self.assertEqual(max(1, 2, 3.0), 3.0)
754 self.assertEqual(max(1, 2.0, 3), 3)
755 self.assertEqual(max(1.0, 2, 3), 3)
Walter Dörwald919497e2003-01-19 16:23:59 +0000756
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +0000757 for stmt in (
758 "max(key=int)", # no args
759 "max(1, key=int)", # single arg not iterable
760 "max(1, 2, keystone=int)", # wrong keyword
761 "max(1, 2, key=int, abc=int)", # two many keywords
762 "max(1, 2, key=1)", # keyfunc is not callable
763 ):
Tim Peters7f061872004-12-07 21:17:46 +0000764 try:
Georg Brandl7cae87c2006-09-06 06:51:57 +0000765 exec(stmt, globals())
Tim Peters7f061872004-12-07 21:17:46 +0000766 except TypeError:
767 pass
768 else:
769 self.fail(stmt)
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +0000770
771 self.assertEqual(max((1,), key=neg), 1) # one elem iterable
772 self.assertEqual(max((1,2), key=neg), 1) # two elem iterable
773 self.assertEqual(max(1, 2, key=neg), 1) # two elems
774
775 data = [random.randrange(200) for i in range(100)]
776 keys = dict((elem, random.randrange(50)) for elem in data)
777 f = keys.__getitem__
778 self.assertEqual(max(data, key=f),
779 sorted(reversed(data), key=f)[-1])
780
Walter Dörwald919497e2003-01-19 16:23:59 +0000781 def test_min(self):
782 self.assertEqual(min('123123'), '1')
783 self.assertEqual(min(1, 2, 3), 1)
784 self.assertEqual(min((1, 2, 3, 1, 2, 3)), 1)
785 self.assertEqual(min([1, 2, 3, 1, 2, 3]), 1)
786
Guido van Rossume2a383d2007-01-15 16:59:06 +0000787 self.assertEqual(min(1, 2, 3.0), 1)
788 self.assertEqual(min(1, 2.0, 3), 1)
789 self.assertEqual(min(1.0, 2, 3), 1.0)
Walter Dörwald919497e2003-01-19 16:23:59 +0000790
791 self.assertRaises(TypeError, min)
792 self.assertRaises(TypeError, min, 42)
793 self.assertRaises(ValueError, min, ())
794 class BadSeq:
795 def __getitem__(self, index):
796 raise ValueError
797 self.assertRaises(ValueError, min, BadSeq())
Walter Dörwald919497e2003-01-19 16:23:59 +0000798
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +0000799 for stmt in (
800 "min(key=int)", # no args
801 "min(1, key=int)", # single arg not iterable
802 "min(1, 2, keystone=int)", # wrong keyword
803 "min(1, 2, key=int, abc=int)", # two many keywords
804 "min(1, 2, key=1)", # keyfunc is not callable
805 ):
Tim Peters7f061872004-12-07 21:17:46 +0000806 try:
Georg Brandl7cae87c2006-09-06 06:51:57 +0000807 exec(stmt, globals())
Tim Peters7f061872004-12-07 21:17:46 +0000808 except TypeError:
809 pass
810 else:
811 self.fail(stmt)
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +0000812
813 self.assertEqual(min((1,), key=neg), 1) # one elem iterable
814 self.assertEqual(min((1,2), key=neg), 2) # two elem iterable
815 self.assertEqual(min(1, 2, key=neg), 2) # two elems
816
817 data = [random.randrange(200) for i in range(100)]
818 keys = dict((elem, random.randrange(50)) for elem in data)
819 f = keys.__getitem__
820 self.assertEqual(min(data, key=f),
821 sorted(data, key=f)[0])
822
Georg Brandla18af4e2007-04-21 15:47:16 +0000823 def test_next(self):
824 it = iter(range(2))
825 self.assertEqual(next(it), 0)
826 self.assertEqual(next(it), 1)
827 self.assertRaises(StopIteration, next, it)
828 self.assertRaises(StopIteration, next, it)
Ezio Melottib3aedd42010-11-20 19:04:17 +0000829 self.assertEqual(next(it, 42), 42)
Georg Brandla18af4e2007-04-21 15:47:16 +0000830
831 class Iter(object):
832 def __iter__(self):
833 return self
834 def __next__(self):
835 raise StopIteration
836
837 it = iter(Iter())
Ezio Melottib3aedd42010-11-20 19:04:17 +0000838 self.assertEqual(next(it, 42), 42)
Georg Brandla18af4e2007-04-21 15:47:16 +0000839 self.assertRaises(StopIteration, next, it)
840
841 def gen():
842 yield 1
843 return
844
845 it = gen()
Ezio Melottib3aedd42010-11-20 19:04:17 +0000846 self.assertEqual(next(it), 1)
Georg Brandla18af4e2007-04-21 15:47:16 +0000847 self.assertRaises(StopIteration, next, it)
Ezio Melottib3aedd42010-11-20 19:04:17 +0000848 self.assertEqual(next(it, 42), 42)
Georg Brandla18af4e2007-04-21 15:47:16 +0000849
Walter Dörwald919497e2003-01-19 16:23:59 +0000850 def test_oct(self):
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000851 self.assertEqual(oct(100), '0o144')
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000852 self.assertEqual(oct(-100), '-0o144')
Walter Dörwald919497e2003-01-19 16:23:59 +0000853 self.assertRaises(TypeError, oct, ())
854
855 def write_testfile(self):
Guido van Rossuma88a0332007-02-26 16:59:55 +0000856 # NB the first 4 lines are also used to test input, below
Walter Dörwald919497e2003-01-19 16:23:59 +0000857 fp = open(TESTFN, 'w')
858 try:
859 fp.write('1+1\n')
Walter Dörwald919497e2003-01-19 16:23:59 +0000860 fp.write('The quick brown fox jumps over the lazy dog')
861 fp.write('.\n')
862 fp.write('Dear John\n')
863 fp.write('XXX'*100)
864 fp.write('YYY'*100)
865 finally:
866 fp.close()
867
868 def test_open(self):
869 self.write_testfile()
870 fp = open(TESTFN, 'r')
871 try:
872 self.assertEqual(fp.readline(4), '1+1\n')
Walter Dörwald919497e2003-01-19 16:23:59 +0000873 self.assertEqual(fp.readline(), 'The quick brown fox jumps over the lazy dog.\n')
874 self.assertEqual(fp.readline(4), 'Dear')
875 self.assertEqual(fp.readline(100), ' John\n')
876 self.assertEqual(fp.read(300), 'XXX'*100)
877 self.assertEqual(fp.read(1000), 'YYY'*100)
878 finally:
879 fp.close()
880 unlink(TESTFN)
881
882 def test_ord(self):
883 self.assertEqual(ord(' '), 32)
884 self.assertEqual(ord('A'), 65)
885 self.assertEqual(ord('a'), 97)
Guido van Rossumf9e91c92007-05-08 21:05:48 +0000886 self.assertEqual(ord('\x80'), 128)
887 self.assertEqual(ord('\xff'), 255)
888
889 self.assertEqual(ord(b' '), 32)
890 self.assertEqual(ord(b'A'), 65)
891 self.assertEqual(ord(b'a'), 97)
892 self.assertEqual(ord(b'\x80'), 128)
893 self.assertEqual(ord(b'\xff'), 255)
894
Walter Dörwald1f5947b2007-05-22 16:52:54 +0000895 self.assertEqual(ord(chr(sys.maxunicode)), sys.maxunicode)
Walter Dörwald919497e2003-01-19 16:23:59 +0000896 self.assertRaises(TypeError, ord, 42)
Walter Dörwald919497e2003-01-19 16:23:59 +0000897
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000898 self.assertEqual(ord(chr(0x10FFFF)), 0x10FFFF)
899 self.assertEqual(ord("\U0000FFFF"), 0x0000FFFF)
900 self.assertEqual(ord("\U00010000"), 0x00010000)
901 self.assertEqual(ord("\U00010001"), 0x00010001)
902 self.assertEqual(ord("\U000FFFFE"), 0x000FFFFE)
903 self.assertEqual(ord("\U000FFFFF"), 0x000FFFFF)
904 self.assertEqual(ord("\U00100000"), 0x00100000)
905 self.assertEqual(ord("\U00100001"), 0x00100001)
906 self.assertEqual(ord("\U0010FFFE"), 0x0010FFFE)
907 self.assertEqual(ord("\U0010FFFF"), 0x0010FFFF)
908
Walter Dörwald919497e2003-01-19 16:23:59 +0000909 def test_pow(self):
910 self.assertEqual(pow(0,0), 1)
911 self.assertEqual(pow(0,1), 0)
912 self.assertEqual(pow(1,0), 1)
913 self.assertEqual(pow(1,1), 1)
914
915 self.assertEqual(pow(2,0), 1)
916 self.assertEqual(pow(2,10), 1024)
917 self.assertEqual(pow(2,20), 1024*1024)
918 self.assertEqual(pow(2,30), 1024*1024*1024)
919
920 self.assertEqual(pow(-2,0), 1)
921 self.assertEqual(pow(-2,1), -2)
922 self.assertEqual(pow(-2,2), 4)
923 self.assertEqual(pow(-2,3), -8)
924
Walter Dörwald919497e2003-01-19 16:23:59 +0000925 self.assertAlmostEqual(pow(0.,0), 1.)
926 self.assertAlmostEqual(pow(0.,1), 0.)
927 self.assertAlmostEqual(pow(1.,0), 1.)
928 self.assertAlmostEqual(pow(1.,1), 1.)
929
930 self.assertAlmostEqual(pow(2.,0), 1.)
931 self.assertAlmostEqual(pow(2.,10), 1024.)
932 self.assertAlmostEqual(pow(2.,20), 1024.*1024.)
933 self.assertAlmostEqual(pow(2.,30), 1024.*1024.*1024.)
934
935 self.assertAlmostEqual(pow(-2.,0), 1.)
936 self.assertAlmostEqual(pow(-2.,1), -2.)
937 self.assertAlmostEqual(pow(-2.,2), 4.)
938 self.assertAlmostEqual(pow(-2.,3), -8.)
939
Mark Dickinson5c2db372009-12-05 20:28:34 +0000940 for x in 2, 2.0:
941 for y in 10, 10.0:
942 for z in 1000, 1000.0:
Walter Dörwald919497e2003-01-19 16:23:59 +0000943 if isinstance(x, float) or \
944 isinstance(y, float) or \
945 isinstance(z, float):
946 self.assertRaises(TypeError, pow, x, y, z)
947 else:
948 self.assertAlmostEqual(pow(x, y, z), 24.0)
949
Jeffrey Yasskin3404b3c2007-09-07 15:15:49 +0000950 self.assertAlmostEqual(pow(-1, 0.5), 1j)
951 self.assertAlmostEqual(pow(-1, 1/3), 0.5 + 0.8660254037844386j)
952
Walter Dörwald919497e2003-01-19 16:23:59 +0000953 self.assertRaises(TypeError, pow, -1, -2, 3)
954 self.assertRaises(ValueError, pow, 1, 2, 0)
Walter Dörwald919497e2003-01-19 16:23:59 +0000955
956 self.assertRaises(TypeError, pow)
957
Guido van Rossuma88a0332007-02-26 16:59:55 +0000958 def test_input(self):
959 self.write_testfile()
960 fp = open(TESTFN, 'r')
961 savestdin = sys.stdin
962 savestdout = sys.stdout # Eats the echo
963 try:
964 sys.stdin = fp
965 sys.stdout = BitBucket()
966 self.assertEqual(input(), "1+1")
Guido van Rossuma88a0332007-02-26 16:59:55 +0000967 self.assertEqual(input(), 'The quick brown fox jumps over the lazy dog.')
968 self.assertEqual(input('testing\n'), 'Dear John')
969
970 # SF 1535165: don't segfault on closed stdin
971 # sys.stdout must be a regular file for triggering
972 sys.stdout = savestdout
973 sys.stdin.close()
974 self.assertRaises(ValueError, input)
975
976 sys.stdout = BitBucket()
Guido van Rossum34d19282007-08-09 01:03:29 +0000977 sys.stdin = io.StringIO("NULL\0")
Guido van Rossuma88a0332007-02-26 16:59:55 +0000978 self.assertRaises(TypeError, input, 42, 42)
Guido van Rossum34d19282007-08-09 01:03:29 +0000979 sys.stdin = io.StringIO(" 'whitespace'")
Guido van Rossuma88a0332007-02-26 16:59:55 +0000980 self.assertEqual(input(), " 'whitespace'")
Guido van Rossum34d19282007-08-09 01:03:29 +0000981 sys.stdin = io.StringIO()
Guido van Rossuma88a0332007-02-26 16:59:55 +0000982 self.assertRaises(EOFError, input)
983
984 del sys.stdout
985 self.assertRaises(RuntimeError, input, 'prompt')
986 del sys.stdin
987 self.assertRaises(RuntimeError, input, 'prompt')
988 finally:
989 sys.stdin = savestdin
990 sys.stdout = savestdout
991 fp.close()
992 unlink(TESTFN)
993
Walter Dörwald919497e2003-01-19 16:23:59 +0000994 def test_repr(self):
995 self.assertEqual(repr(''), '\'\'')
996 self.assertEqual(repr(0), '0')
Walter Dörwald919497e2003-01-19 16:23:59 +0000997 self.assertEqual(repr(()), '()')
998 self.assertEqual(repr([]), '[]')
999 self.assertEqual(repr({}), '{}')
1000 a = []
1001 a.append(a)
1002 self.assertEqual(repr(a), '[[...]]')
1003 a = {}
1004 a[0] = a
1005 self.assertEqual(repr(a), '{0: {...}}')
1006
1007 def test_round(self):
1008 self.assertEqual(round(0.0), 0.0)
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001009 self.assertEqual(type(round(0.0)), int)
Walter Dörwald919497e2003-01-19 16:23:59 +00001010 self.assertEqual(round(1.0), 1.0)
1011 self.assertEqual(round(10.0), 10.0)
1012 self.assertEqual(round(1000000000.0), 1000000000.0)
1013 self.assertEqual(round(1e20), 1e20)
1014
1015 self.assertEqual(round(-1.0), -1.0)
1016 self.assertEqual(round(-10.0), -10.0)
1017 self.assertEqual(round(-1000000000.0), -1000000000.0)
1018 self.assertEqual(round(-1e20), -1e20)
1019
1020 self.assertEqual(round(0.1), 0.0)
1021 self.assertEqual(round(1.1), 1.0)
1022 self.assertEqual(round(10.1), 10.0)
1023 self.assertEqual(round(1000000000.1), 1000000000.0)
1024
1025 self.assertEqual(round(-1.1), -1.0)
1026 self.assertEqual(round(-10.1), -10.0)
1027 self.assertEqual(round(-1000000000.1), -1000000000.0)
1028
1029 self.assertEqual(round(0.9), 1.0)
1030 self.assertEqual(round(9.9), 10.0)
1031 self.assertEqual(round(999999999.9), 1000000000.0)
1032
1033 self.assertEqual(round(-0.9), -1.0)
1034 self.assertEqual(round(-9.9), -10.0)
1035 self.assertEqual(round(-999999999.9), -1000000000.0)
1036
1037 self.assertEqual(round(-8.0, -1), -10.0)
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001038 self.assertEqual(type(round(-8.0, -1)), float)
1039
1040 self.assertEqual(type(round(-8.0, 0)), float)
1041 self.assertEqual(type(round(-8.0, 1)), float)
1042
1043 # Check even / odd rounding behaviour
1044 self.assertEqual(round(5.5), 6)
1045 self.assertEqual(round(6.5), 6)
1046 self.assertEqual(round(-5.5), -6)
1047 self.assertEqual(round(-6.5), -6)
1048
1049 # Check behavior on ints
1050 self.assertEqual(round(0), 0)
1051 self.assertEqual(round(8), 8)
1052 self.assertEqual(round(-8), -8)
1053 self.assertEqual(type(round(0)), int)
Mark Dickinson1124e712009-01-28 21:25:58 +00001054 self.assertEqual(type(round(-8, -1)), int)
1055 self.assertEqual(type(round(-8, 0)), int)
1056 self.assertEqual(type(round(-8, 1)), int)
Walter Dörwald919497e2003-01-19 16:23:59 +00001057
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001058 # test new kwargs
1059 self.assertEqual(round(number=-8.0, ndigits=-1), -10.0)
1060
Walter Dörwald919497e2003-01-19 16:23:59 +00001061 self.assertRaises(TypeError, round)
1062
Alex Martelliae211f92007-08-22 23:21:33 +00001063 # test generic rounding delegation for reals
1064 class TestRound:
1065 def __round__(self):
1066 return 23
1067
1068 class TestNoRound:
1069 pass
1070
1071 self.assertEqual(round(TestRound()), 23)
1072
1073 self.assertRaises(TypeError, round, 1, 2, 3)
1074 self.assertRaises(TypeError, round, TestNoRound())
1075
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001076 t = TestNoRound()
1077 t.__round__ = lambda *args: args
1078 self.assertRaises(TypeError, round, t)
1079 self.assertRaises(TypeError, round, t, 0)
1080
Mark Dickinsonad731b92009-11-09 17:12:30 +00001081 # Some versions of glibc for alpha have a bug that affects
1082 # float -> integer rounding (floor, ceil, rint, round) for
1083 # values in the range [2**52, 2**53). See:
1084 #
1085 # http://sources.redhat.com/bugzilla/show_bug.cgi?id=5350
1086 #
1087 # We skip this test on Linux/alpha if it would fail.
1088 linux_alpha = (platform.system().startswith('Linux') and
1089 platform.machine().startswith('alpha'))
1090 system_round_bug = round(5e15+1) != 5e15+1
1091 @unittest.skipIf(linux_alpha and system_round_bug,
1092 "test will fail; failure is probably due to a "
1093 "buggy system round function")
1094 def test_round_large(self):
1095 # Issue #1869: integral floats should remain unchanged
1096 self.assertEqual(round(5e15-1), 5e15-1)
1097 self.assertEqual(round(5e15), 5e15)
1098 self.assertEqual(round(5e15+1), 5e15+1)
1099 self.assertEqual(round(5e15+2), 5e15+2)
1100 self.assertEqual(round(5e15+3), 5e15+3)
1101
Walter Dörwald919497e2003-01-19 16:23:59 +00001102 def test_setattr(self):
Tim Petersf2715e02003-02-19 02:35:07 +00001103 setattr(sys, 'spam', 1)
1104 self.assertEqual(sys.spam, 1)
1105 self.assertRaises(TypeError, setattr, sys, 1, 'spam')
1106 self.assertRaises(TypeError, setattr)
Walter Dörwald919497e2003-01-19 16:23:59 +00001107
Walter Dörwald919497e2003-01-19 16:23:59 +00001108
Alex Martellia70b1912003-04-22 08:12:33 +00001109 def test_sum(self):
1110 self.assertEqual(sum([]), 0)
Guido van Rossum805365e2007-05-07 22:24:25 +00001111 self.assertEqual(sum(list(range(2,8))), 27)
1112 self.assertEqual(sum(iter(list(range(2,8)))), 27)
Alex Martellia70b1912003-04-22 08:12:33 +00001113 self.assertEqual(sum(Squares(10)), 285)
1114 self.assertEqual(sum(iter(Squares(10))), 285)
1115 self.assertEqual(sum([[1], [2], [3]], []), [1, 2, 3])
1116
1117 self.assertRaises(TypeError, sum)
1118 self.assertRaises(TypeError, sum, 42)
1119 self.assertRaises(TypeError, sum, ['a', 'b', 'c'])
1120 self.assertRaises(TypeError, sum, ['a', 'b', 'c'], '')
1121 self.assertRaises(TypeError, sum, [[1], [2], [3]])
1122 self.assertRaises(TypeError, sum, [{2:3}])
1123 self.assertRaises(TypeError, sum, [{2:3}]*2, {2:3})
1124
1125 class BadSeq:
1126 def __getitem__(self, index):
1127 raise ValueError
1128 self.assertRaises(ValueError, sum, BadSeq())
1129
Mark Dickinson3a22b472009-10-17 21:48:16 +00001130 empty = []
1131 sum(([x] for x in range(10)), empty)
1132 self.assertEqual(empty, [])
1133
Walter Dörwald919497e2003-01-19 16:23:59 +00001134 def test_type(self):
1135 self.assertEqual(type(''), type('123'))
1136 self.assertNotEqual(type(''), type(()))
1137
Guido van Rossumfee7b932005-01-16 00:21:28 +00001138 # We don't want self in vars(), so these are static methods
1139
1140 @staticmethod
Walter Dörwald919497e2003-01-19 16:23:59 +00001141 def get_vars_f0():
1142 return vars()
Walter Dörwald919497e2003-01-19 16:23:59 +00001143
Guido van Rossumfee7b932005-01-16 00:21:28 +00001144 @staticmethod
Walter Dörwald919497e2003-01-19 16:23:59 +00001145 def get_vars_f2():
1146 BuiltinTest.get_vars_f0()
1147 a = 1
1148 b = 2
1149 return vars()
Walter Dörwald919497e2003-01-19 16:23:59 +00001150
Mark Dickinsonfb3dc942010-05-25 19:06:24 +00001151 class C_get_vars(object):
1152 def getDict(self):
1153 return {'a':2}
1154 __dict__ = property(fget=getDict)
1155
Walter Dörwald919497e2003-01-19 16:23:59 +00001156 def test_vars(self):
Raymond Hettingera690a992003-11-16 16:17:49 +00001157 self.assertEqual(set(vars()), set(dir()))
Raymond Hettingera690a992003-11-16 16:17:49 +00001158 self.assertEqual(set(vars(sys)), set(dir(sys)))
Walter Dörwald919497e2003-01-19 16:23:59 +00001159 self.assertEqual(self.get_vars_f0(), {})
1160 self.assertEqual(self.get_vars_f2(), {'a': 1, 'b': 2})
1161 self.assertRaises(TypeError, vars, 42, 42)
1162 self.assertRaises(TypeError, vars, 42)
Mark Dickinsonfb3dc942010-05-25 19:06:24 +00001163 self.assertEqual(vars(self.C_get_vars()), {'a':2})
Walter Dörwald919497e2003-01-19 16:23:59 +00001164
1165 def test_zip(self):
1166 a = (1, 2, 3)
1167 b = (4, 5, 6)
1168 t = [(1, 4), (2, 5), (3, 6)]
Guido van Rossum801f0d72006-08-24 19:48:10 +00001169 self.assertEqual(list(zip(a, b)), t)
Walter Dörwald919497e2003-01-19 16:23:59 +00001170 b = [4, 5, 6]
Guido van Rossum801f0d72006-08-24 19:48:10 +00001171 self.assertEqual(list(zip(a, b)), t)
Walter Dörwald919497e2003-01-19 16:23:59 +00001172 b = (4, 5, 6, 7)
Guido van Rossum801f0d72006-08-24 19:48:10 +00001173 self.assertEqual(list(zip(a, b)), t)
Walter Dörwald919497e2003-01-19 16:23:59 +00001174 class I:
1175 def __getitem__(self, i):
1176 if i < 0 or i > 2: raise IndexError
1177 return i + 4
Guido van Rossum801f0d72006-08-24 19:48:10 +00001178 self.assertEqual(list(zip(a, I())), t)
1179 self.assertEqual(list(zip()), [])
1180 self.assertEqual(list(zip(*[])), [])
Walter Dörwald919497e2003-01-19 16:23:59 +00001181 self.assertRaises(TypeError, zip, None)
1182 class G:
1183 pass
1184 self.assertRaises(TypeError, zip, a, G())
Alexander Belopolskye29e6bf2010-08-16 18:55:46 +00001185 self.assertRaises(RuntimeError, zip, a, TestFailingIter())
Walter Dörwald919497e2003-01-19 16:23:59 +00001186
1187 # Make sure zip doesn't try to allocate a billion elements for the
1188 # result list when one of its arguments doesn't say how long it is.
1189 # A MemoryError is the most likely failure mode.
1190 class SequenceWithoutALength:
1191 def __getitem__(self, i):
1192 if i == 5:
1193 raise IndexError
1194 else:
1195 return i
1196 self.assertEqual(
Guido van Rossum805365e2007-05-07 22:24:25 +00001197 list(zip(SequenceWithoutALength(), range(2**30))),
Walter Dörwald919497e2003-01-19 16:23:59 +00001198 list(enumerate(range(5)))
1199 )
1200
1201 class BadSeq:
1202 def __getitem__(self, i):
1203 if i == 5:
1204 raise ValueError
1205 else:
1206 return i
Guido van Rossum801f0d72006-08-24 19:48:10 +00001207 self.assertRaises(ValueError, list, zip(BadSeq(), BadSeq()))
Walter Dörwald919497e2003-01-19 16:23:59 +00001208
Eric Smithe4d63172010-09-13 20:48:43 +00001209 def test_format(self):
1210 # Test the basic machinery of the format() builtin. Don't test
1211 # the specifics of the various formatters
1212 self.assertEqual(format(3, ''), '3')
1213
1214 # Returns some classes to use for various tests. There's
1215 # an old-style version, and a new-style version
1216 def classes_new():
1217 class A(object):
1218 def __init__(self, x):
1219 self.x = x
1220 def __format__(self, format_spec):
1221 return str(self.x) + format_spec
1222 class DerivedFromA(A):
1223 pass
1224
1225 class Simple(object): pass
1226 class DerivedFromSimple(Simple):
1227 def __init__(self, x):
1228 self.x = x
1229 def __format__(self, format_spec):
1230 return str(self.x) + format_spec
1231 class DerivedFromSimple2(DerivedFromSimple): pass
1232 return A, DerivedFromA, DerivedFromSimple, DerivedFromSimple2
1233
1234 def class_test(A, DerivedFromA, DerivedFromSimple, DerivedFromSimple2):
1235 self.assertEqual(format(A(3), 'spec'), '3spec')
1236 self.assertEqual(format(DerivedFromA(4), 'spec'), '4spec')
1237 self.assertEqual(format(DerivedFromSimple(5), 'abc'), '5abc')
1238 self.assertEqual(format(DerivedFromSimple2(10), 'abcdef'),
1239 '10abcdef')
1240
1241 class_test(*classes_new())
1242
1243 def empty_format_spec(value):
1244 # test that:
1245 # format(x, '') == str(x)
1246 # format(x) == str(x)
1247 self.assertEqual(format(value, ""), str(value))
1248 self.assertEqual(format(value), str(value))
1249
1250 # for builtin types, format(x, "") == str(x)
1251 empty_format_spec(17**13)
1252 empty_format_spec(1.0)
1253 empty_format_spec(3.1415e104)
1254 empty_format_spec(-3.1415e104)
1255 empty_format_spec(3.1415e-104)
1256 empty_format_spec(-3.1415e-104)
1257 empty_format_spec(object)
1258 empty_format_spec(None)
1259
1260 # TypeError because self.__format__ returns the wrong type
1261 class BadFormatResult:
1262 def __format__(self, format_spec):
1263 return 1.0
1264 self.assertRaises(TypeError, format, BadFormatResult(), "")
1265
1266 # TypeError because format_spec is not unicode or str
1267 self.assertRaises(TypeError, format, object(), 4)
1268 self.assertRaises(TypeError, format, object(), object())
1269
1270 # tests for object.__format__ really belong elsewhere, but
1271 # there's no good place to put them
1272 x = object().__format__('')
1273 self.assertTrue(x.startswith('<object object at'))
1274
1275 # first argument to object.__format__ must be string
1276 self.assertRaises(TypeError, object().__format__, 3)
1277 self.assertRaises(TypeError, object().__format__, object())
1278 self.assertRaises(TypeError, object().__format__, None)
1279
1280 # --------------------------------------------------------------------
1281 # Issue #7994: object.__format__ with a non-empty format string is
1282 # pending deprecated
1283 def test_deprecated_format_string(obj, fmt_str, should_raise_warning):
1284 with warnings.catch_warnings(record=True) as w:
1285 warnings.simplefilter("always", PendingDeprecationWarning)
1286 format(obj, fmt_str)
1287 if should_raise_warning:
1288 self.assertEqual(len(w), 1)
1289 self.assertIsInstance(w[0].message, PendingDeprecationWarning)
1290 self.assertIn('object.__format__ with a non-empty format '
1291 'string', str(w[0].message))
1292 else:
1293 self.assertEqual(len(w), 0)
1294
1295 fmt_strs = ['', 's']
1296
1297 class A:
1298 def __format__(self, fmt_str):
1299 return format('', fmt_str)
1300
1301 for fmt_str in fmt_strs:
1302 test_deprecated_format_string(A(), fmt_str, False)
1303
1304 class B:
1305 pass
1306
1307 class C(object):
1308 pass
1309
1310 for cls in [object, B, C]:
1311 for fmt_str in fmt_strs:
1312 test_deprecated_format_string(cls(), fmt_str, len(fmt_str) != 0)
1313 # --------------------------------------------------------------------
1314
1315 # make sure we can take a subclass of str as a format spec
1316 class DerivedFromStr(str): pass
1317 self.assertEqual(format(0, DerivedFromStr('10')), ' 0')
1318
Christian Heimes90c3d9b2008-02-23 13:18:03 +00001319 def test_bin(self):
1320 self.assertEqual(bin(0), '0b0')
1321 self.assertEqual(bin(1), '0b1')
1322 self.assertEqual(bin(-1), '-0b1')
1323 self.assertEqual(bin(2**65), '0b1' + '0' * 65)
1324 self.assertEqual(bin(2**65-1), '0b' + '1' * 65)
1325 self.assertEqual(bin(-(2**65)), '-0b1' + '0' * 65)
1326 self.assertEqual(bin(-(2**65-1)), '-0b' + '1' * 65)
1327
Georg Brandl953152f2009-07-22 12:03:59 +00001328 def test_bytearray_translate(self):
1329 x = bytearray(b"abc")
1330 self.assertRaises(ValueError, x.translate, b"1", 1)
1331 self.assertRaises(TypeError, x.translate, b"1"*256, 1)
1332
Raymond Hettinger64958a12003-12-17 20:43:33 +00001333class TestSorted(unittest.TestCase):
1334
1335 def test_basic(self):
Guido van Rossum805365e2007-05-07 22:24:25 +00001336 data = list(range(100))
Raymond Hettinger64958a12003-12-17 20:43:33 +00001337 copy = data[:]
1338 random.shuffle(copy)
1339 self.assertEqual(data, sorted(copy))
1340 self.assertNotEqual(data, copy)
1341
1342 data.reverse()
1343 random.shuffle(copy)
Raymond Hettinger64958a12003-12-17 20:43:33 +00001344 self.assertEqual(data, sorted(copy, key=lambda x: -x))
1345 self.assertNotEqual(data, copy)
1346 random.shuffle(copy)
1347 self.assertEqual(data, sorted(copy, reverse=1))
1348 self.assertNotEqual(data, copy)
1349
1350 def test_inputtypes(self):
1351 s = 'abracadabra'
Walter Dörwald1f5947b2007-05-22 16:52:54 +00001352 types = [list, tuple, str]
Walter Dörwald4e41a4b2005-08-03 17:09:04 +00001353 for T in types:
Raymond Hettinger64958a12003-12-17 20:43:33 +00001354 self.assertEqual(sorted(s), sorted(T(s)))
1355
Walter Dörwald1f5947b2007-05-22 16:52:54 +00001356 s = ''.join(set(s)) # unique letters only
1357 types = [str, set, frozenset, list, tuple, dict.fromkeys]
Walter Dörwald4e41a4b2005-08-03 17:09:04 +00001358 for T in types:
Raymond Hettinger64958a12003-12-17 20:43:33 +00001359 self.assertEqual(sorted(s), sorted(T(s)))
1360
1361 def test_baddecorator(self):
1362 data = 'The quick Brown fox Jumped over The lazy Dog'.split()
1363 self.assertRaises(TypeError, sorted, data, None, lambda x,y: 0)
1364
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001365def test_main(verbose=None):
1366 test_classes = (BuiltinTest, TestSorted)
1367
1368 run_unittest(*test_classes)
1369
1370 # verify reference counting
1371 if verbose and hasattr(sys, "gettotalrefcount"):
1372 import gc
1373 counts = [None] * 5
Guido van Rossum805365e2007-05-07 22:24:25 +00001374 for i in range(len(counts)):
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001375 run_unittest(*test_classes)
1376 gc.collect()
1377 counts[i] = sys.gettotalrefcount()
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001378 print(counts)
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001379
Walter Dörwald919497e2003-01-19 16:23:59 +00001380
1381if __name__ == "__main__":
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001382 test_main(verbose=True)