blob: 1469e36847a0e27e526099a94cf1e6b5dcfdb610 [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
Brett Cannon77628992010-03-20 20:59:33 +000013from test.support import fcmp, 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
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000397 self.assertTrue(not fcmp(divmod(3.25, 1.0), (3.0, 0.25)))
398 self.assertTrue(not fcmp(divmod(-3.25, 1.0), (-4.0, 0.75)))
399 self.assertTrue(not fcmp(divmod(3.25, -1.0), (-4.0, -0.75)))
400 self.assertTrue(not fcmp(divmod(-3.25, -1.0), (3.0, -0.25)))
Walter Dörwald919497e2003-01-19 16:23:59 +0000401
402 self.assertRaises(TypeError, divmod)
403
404 def test_eval(self):
405 self.assertEqual(eval('1+1'), 2)
406 self.assertEqual(eval(' 1+1\n'), 2)
407 globals = {'a': 1, 'b': 2}
408 locals = {'b': 200, 'c': 300}
409 self.assertEqual(eval('a', globals) , 1)
410 self.assertEqual(eval('a', globals, locals), 1)
411 self.assertEqual(eval('b', globals, locals), 200)
412 self.assertEqual(eval('c', globals, locals), 300)
Walter Dörwald919497e2003-01-19 16:23:59 +0000413 globals = {'a': 1, 'b': 2}
414 locals = {'b': 200, 'c': 300}
Amaury Forgeot d'Arcaf593462007-11-22 20:53:01 +0000415 bom = b'\xef\xbb\xbf'
416 self.assertEqual(eval(bom + b'a', globals, locals), 1)
Walter Dörwald1f5947b2007-05-22 16:52:54 +0000417 self.assertEqual(eval('"\xe5"', globals), "\xe5")
Walter Dörwald919497e2003-01-19 16:23:59 +0000418 self.assertRaises(TypeError, eval)
419 self.assertRaises(TypeError, eval, ())
Amaury Forgeot d'Arcaf593462007-11-22 20:53:01 +0000420 self.assertRaises(SyntaxError, eval, bom[:2] + b'a')
Walter Dörwald919497e2003-01-19 16:23:59 +0000421
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000422 def test_general_eval(self):
423 # Tests that general mappings can be used for the locals argument
424
425 class M:
426 "Test mapping interface versus possible calls from eval()."
427 def __getitem__(self, key):
428 if key == 'a':
429 return 12
430 raise KeyError
Guido van Rossumcd70eee2007-02-11 18:53:00 +0000431 def keys(self):
432 return list('xyz')
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000433
434 m = M()
435 g = globals()
436 self.assertEqual(eval('a', g, m), 12)
437 self.assertRaises(NameError, eval, 'b', g, m)
438 self.assertEqual(eval('dir()', g, m), list('xyz'))
439 self.assertEqual(eval('globals()', g, m), g)
440 self.assertEqual(eval('locals()', g, m), m)
Raymond Hettinger513ffe82004-07-06 13:44:41 +0000441 self.assertRaises(TypeError, eval, 'a', m)
Raymond Hettinger66bd2332004-08-02 08:30:07 +0000442 class A:
443 "Non-mapping"
444 pass
445 m = A()
446 self.assertRaises(TypeError, eval, 'a', g, m)
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000447
448 # Verify that dict subclasses work as well
449 class D(dict):
450 def __getitem__(self, key):
451 if key == 'a':
452 return 12
453 return dict.__getitem__(self, key)
Guido van Rossumcd70eee2007-02-11 18:53:00 +0000454 def keys(self):
455 return list('xyz')
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000456
457 d = D()
458 self.assertEqual(eval('a', g, d), 12)
459 self.assertRaises(NameError, eval, 'b', g, d)
460 self.assertEqual(eval('dir()', g, d), list('xyz'))
461 self.assertEqual(eval('globals()', g, d), g)
462 self.assertEqual(eval('locals()', g, d), d)
463
464 # Verify locals stores (used by list comps)
465 eval('[locals() for i in (2,3)]', g, d)
Raymond Hettingerf80680d2008-02-06 00:07:11 +0000466 eval('[locals() for i in (2,3)]', g, collections.UserDict())
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000467
468 class SpreadSheet:
469 "Sample application showing nested, calculated lookups."
470 _cells = {}
471 def __setitem__(self, key, formula):
472 self._cells[key] = formula
Thomas Wouters73e5a5b2006-06-08 15:35:45 +0000473 def __getitem__(self, key):
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000474 return eval(self._cells[key], globals(), self)
475
476 ss = SpreadSheet()
477 ss['a1'] = '5'
478 ss['a2'] = 'a1*6'
479 ss['a3'] = 'a2*7'
480 self.assertEqual(ss['a3'], 210)
481
Raymond Hettinger2a7dede2004-08-07 04:55:30 +0000482 # Verify that dir() catches a non-list returned by eval
483 # SF bug #1004669
484 class C:
485 def __getitem__(self, item):
486 raise KeyError(item)
Guido van Rossumcd70eee2007-02-11 18:53:00 +0000487 def keys(self):
488 return 1 # used to be 'a' but that's no longer an error
Raymond Hettinger2a7dede2004-08-07 04:55:30 +0000489 self.assertRaises(TypeError, eval, 'dir()', globals(), C())
490
Georg Brandl7cae87c2006-09-06 06:51:57 +0000491 def test_exec(self):
492 g = {}
493 exec('z = 1', g)
494 if '__builtins__' in g:
495 del g['__builtins__']
496 self.assertEqual(g, {'z': 1})
497
Guido van Rossumef87d6e2007-05-02 19:09:54 +0000498 exec('z = 1+1', g)
Georg Brandl7cae87c2006-09-06 06:51:57 +0000499 if '__builtins__' in g:
500 del g['__builtins__']
501 self.assertEqual(g, {'z': 2})
502 g = {}
503 l = {}
504
Brett Cannon77628992010-03-20 20:59:33 +0000505 with check_warnings():
506 warnings.filterwarnings("ignore", "global statement",
507 module="<string>")
508 exec('global a; a = 1; b = 2', g, l)
Georg Brandl7cae87c2006-09-06 06:51:57 +0000509 if '__builtins__' in g:
510 del g['__builtins__']
511 if '__builtins__' in l:
512 del l['__builtins__']
513 self.assertEqual((g, l), ({'a': 1}, {'b': 2}))
514
Amaury Forgeot d'Arc9ed77352008-04-04 23:25:27 +0000515 def test_exec_redirected(self):
516 savestdout = sys.stdout
517 sys.stdout = None # Whatever that cannot flush()
518 try:
519 # Used to raise SystemError('error return without exception set')
520 exec('a')
521 except NameError:
522 pass
523 finally:
524 sys.stdout = savestdout
525
Walter Dörwald919497e2003-01-19 16:23:59 +0000526 def test_filter(self):
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000527 self.assertEqual(list(filter(lambda c: 'a' <= c <= 'z', 'Hello World')), list('elloorld'))
528 self.assertEqual(list(filter(None, [1, 'hello', [], [3], '', None, 9, 0])), [1, 'hello', [3], 9])
529 self.assertEqual(list(filter(lambda x: x > 0, [1, -3, 9, 0, 2])), [1, 9, 2])
530 self.assertEqual(list(filter(None, Squares(10))), [1, 4, 9, 16, 25, 36, 49, 64, 81])
531 self.assertEqual(list(filter(lambda x: x%2, Squares(10))), [1, 9, 25, 49, 81])
Walter Dörwald919497e2003-01-19 16:23:59 +0000532 def identity(item):
533 return 1
534 filter(identity, Squares(5))
535 self.assertRaises(TypeError, filter)
536 class BadSeq(object):
Tim Petersf2715e02003-02-19 02:35:07 +0000537 def __getitem__(self, index):
538 if index<4:
539 return 42
540 raise ValueError
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000541 self.assertRaises(ValueError, list, filter(lambda x: x, BadSeq()))
Walter Dörwald919497e2003-01-19 16:23:59 +0000542 def badfunc():
543 pass
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000544 self.assertRaises(TypeError, list, filter(badfunc, range(5)))
Walter Dörwald919497e2003-01-19 16:23:59 +0000545
Walter Dörwaldbf517072003-01-27 15:57:14 +0000546 # test bltinmodule.c::filtertuple()
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000547 self.assertEqual(list(filter(None, (1, 2))), [1, 2])
548 self.assertEqual(list(filter(lambda x: x>=3, (1, 2, 3, 4))), [3, 4])
549 self.assertRaises(TypeError, list, filter(42, (1, 2)))
Walter Dörwaldc3da83f2003-02-04 20:24:45 +0000550
Walter Dörwald919497e2003-01-19 16:23:59 +0000551 def test_getattr(self):
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000552 self.assertTrue(getattr(sys, 'stdout') is sys.stdout)
Walter Dörwald919497e2003-01-19 16:23:59 +0000553 self.assertRaises(TypeError, getattr, sys, 1)
554 self.assertRaises(TypeError, getattr, sys, 1, "foo")
555 self.assertRaises(TypeError, getattr)
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000556 self.assertRaises(AttributeError, getattr, sys, chr(sys.maxunicode))
Victor Stinner624dbf62010-03-12 17:17:58 +0000557 # unicode surrogates are not encodable to the default encoding (utf8)
558 self.assertRaises(AttributeError, getattr, 1, "\uDAD1\uD51E")
Walter Dörwald919497e2003-01-19 16:23:59 +0000559
560 def test_hasattr(self):
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000561 self.assertTrue(hasattr(sys, 'stdout'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000562 self.assertRaises(TypeError, hasattr, sys, 1)
563 self.assertRaises(TypeError, hasattr)
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000564 self.assertEqual(False, hasattr(sys, chr(sys.maxunicode)))
Walter Dörwald919497e2003-01-19 16:23:59 +0000565
Benjamin Peterson17689992010-08-24 03:26:23 +0000566 # Check that hasattr propagates all exceptions outside of
567 # AttributeError.
Alexandre Vassalottieca20b62008-05-16 02:54:33 +0000568 class A:
569 def __getattr__(self, what):
Benjamin Peterson17689992010-08-24 03:26:23 +0000570 raise SystemExit
571 self.assertRaises(SystemExit, hasattr, A(), "b")
Alexandre Vassalottieca20b62008-05-16 02:54:33 +0000572 class B:
573 def __getattr__(self, what):
Benjamin Peterson17689992010-08-24 03:26:23 +0000574 raise ValueError
575 self.assertRaises(ValueError, hasattr, B(), "b")
Alexandre Vassalottieca20b62008-05-16 02:54:33 +0000576
Walter Dörwald919497e2003-01-19 16:23:59 +0000577 def test_hash(self):
578 hash(None)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000579 self.assertEqual(hash(1), hash(1))
Walter Dörwald919497e2003-01-19 16:23:59 +0000580 self.assertEqual(hash(1), hash(1.0))
581 hash('spam')
Guido van Rossum98297ee2007-11-06 21:34:58 +0000582 self.assertEqual(hash('spam'), hash(b'spam'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000583 hash((0,1,2,3))
584 def f(): pass
585 self.assertRaises(TypeError, hash, [])
586 self.assertRaises(TypeError, hash, {})
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000587 # Bug 1536021: Allow hash to return long objects
588 class X:
589 def __hash__(self):
590 return 2**100
Ezio Melottib3aedd42010-11-20 19:04:17 +0000591 self.assertEqual(type(hash(X())), int)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000592 class Z(int):
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000593 def __hash__(self):
594 return self
Ezio Melottib3aedd42010-11-20 19:04:17 +0000595 self.assertEqual(hash(Z(42)), hash(42))
Walter Dörwald919497e2003-01-19 16:23:59 +0000596
597 def test_hex(self):
598 self.assertEqual(hex(16), '0x10')
Guido van Rossume2a383d2007-01-15 16:59:06 +0000599 self.assertEqual(hex(-16), '-0x10')
Walter Dörwald919497e2003-01-19 16:23:59 +0000600 self.assertRaises(TypeError, hex, {})
601
602 def test_id(self):
603 id(None)
604 id(1)
Walter Dörwald919497e2003-01-19 16:23:59 +0000605 id(1.0)
606 id('spam')
607 id((0,1,2,3))
608 id([0,1,2,3])
609 id({'spam': 1, 'eggs': 2, 'ham': 3})
610
Guido van Rossuma88a0332007-02-26 16:59:55 +0000611 # Test input() later, alphabetized as if it were raw_input
612
Walter Dörwald919497e2003-01-19 16:23:59 +0000613 def test_iter(self):
614 self.assertRaises(TypeError, iter)
615 self.assertRaises(TypeError, iter, 42, 42)
616 lists = [("1", "2"), ["1", "2"], "12"]
Walter Dörwald919497e2003-01-19 16:23:59 +0000617 for l in lists:
618 i = iter(l)
Georg Brandla18af4e2007-04-21 15:47:16 +0000619 self.assertEqual(next(i), '1')
620 self.assertEqual(next(i), '2')
621 self.assertRaises(StopIteration, next, i)
Walter Dörwald919497e2003-01-19 16:23:59 +0000622
623 def test_isinstance(self):
624 class C:
625 pass
626 class D(C):
627 pass
628 class E:
629 pass
630 c = C()
631 d = D()
632 e = E()
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000633 self.assertTrue(isinstance(c, C))
634 self.assertTrue(isinstance(d, C))
635 self.assertTrue(not isinstance(e, C))
636 self.assertTrue(not isinstance(c, D))
637 self.assertTrue(not isinstance('foo', E))
Walter Dörwald919497e2003-01-19 16:23:59 +0000638 self.assertRaises(TypeError, isinstance, E, 'foo')
639 self.assertRaises(TypeError, isinstance)
640
641 def test_issubclass(self):
642 class C:
643 pass
644 class D(C):
645 pass
646 class E:
647 pass
648 c = C()
649 d = D()
650 e = E()
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000651 self.assertTrue(issubclass(D, C))
652 self.assertTrue(issubclass(C, C))
653 self.assertTrue(not issubclass(C, D))
Walter Dörwald919497e2003-01-19 16:23:59 +0000654 self.assertRaises(TypeError, issubclass, 'foo', E)
655 self.assertRaises(TypeError, issubclass, E, 'foo')
656 self.assertRaises(TypeError, issubclass)
657
658 def test_len(self):
659 self.assertEqual(len('123'), 3)
660 self.assertEqual(len(()), 0)
661 self.assertEqual(len((1, 2, 3, 4)), 4)
662 self.assertEqual(len([1, 2, 3, 4]), 4)
663 self.assertEqual(len({}), 0)
664 self.assertEqual(len({'a':1, 'b': 2}), 2)
665 class BadSeq:
666 def __len__(self):
667 raise ValueError
668 self.assertRaises(ValueError, len, BadSeq())
Benjamin Petersonee1ae7c2009-02-08 21:07:20 +0000669 class InvalidLen:
670 def __len__(self):
671 return None
672 self.assertRaises(TypeError, len, InvalidLen())
673 class FloatLen:
674 def __len__(self):
675 return 4.5
676 self.assertRaises(TypeError, len, FloatLen())
677 class HugeLen:
678 def __len__(self):
679 return sys.maxsize + 1
680 self.assertRaises(OverflowError, len, HugeLen())
Mark Dickinsonfb3dc942010-05-25 19:06:24 +0000681 class NoLenMethod(object): pass
682 self.assertRaises(TypeError, len, NoLenMethod())
Walter Dörwald919497e2003-01-19 16:23:59 +0000683
Walter Dörwald919497e2003-01-19 16:23:59 +0000684 def test_map(self):
685 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000686 list(map(lambda x: x*x, range(1,4))),
Walter Dörwald919497e2003-01-19 16:23:59 +0000687 [1, 4, 9]
688 )
689 try:
690 from math import sqrt
691 except ImportError:
692 def sqrt(x):
693 return pow(x, 0.5)
694 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000695 list(map(lambda x: list(map(sqrt, x)), [[16, 4], [81, 9]])),
Walter Dörwald919497e2003-01-19 16:23:59 +0000696 [[4.0, 2.0], [9.0, 3.0]]
697 )
698 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000699 list(map(lambda x, y: x+y, [1,3,2], [9,1,4])),
Walter Dörwald919497e2003-01-19 16:23:59 +0000700 [10, 4, 6]
701 )
702
703 def plus(*v):
704 accu = 0
705 for i in v: accu = accu + i
706 return accu
707 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000708 list(map(plus, [1, 3, 7])),
Walter Dörwald919497e2003-01-19 16:23:59 +0000709 [1, 3, 7]
710 )
711 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000712 list(map(plus, [1, 3, 7], [4, 9, 2])),
Walter Dörwald919497e2003-01-19 16:23:59 +0000713 [1+4, 3+9, 7+2]
714 )
715 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000716 list(map(plus, [1, 3, 7], [4, 9, 2], [1, 1, 0])),
Walter Dörwald919497e2003-01-19 16:23:59 +0000717 [1+4+1, 3+9+1, 7+2+0]
718 )
719 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000720 list(map(int, Squares(10))),
Walter Dörwald919497e2003-01-19 16:23:59 +0000721 [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
722 )
Guido van Rossum47b9ff62006-08-24 00:41:19 +0000723 def Max(a, b):
724 if a is None:
725 return b
726 if b is None:
727 return a
728 return max(a, b)
Walter Dörwald919497e2003-01-19 16:23:59 +0000729 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000730 list(map(Max, Squares(3), Squares(2))),
731 [0, 1]
Walter Dörwald919497e2003-01-19 16:23:59 +0000732 )
733 self.assertRaises(TypeError, map)
734 self.assertRaises(TypeError, map, lambda x: x, 42)
Walter Dörwald919497e2003-01-19 16:23:59 +0000735 class BadSeq:
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000736 def __iter__(self):
Walter Dörwald919497e2003-01-19 16:23:59 +0000737 raise ValueError
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000738 yield None
739 self.assertRaises(ValueError, list, map(lambda x: x, BadSeq()))
Neal Norwitzfcf44352005-11-27 20:37:43 +0000740 def badfunc(x):
741 raise RuntimeError
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000742 self.assertRaises(RuntimeError, list, map(badfunc, range(5)))
Walter Dörwald919497e2003-01-19 16:23:59 +0000743
744 def test_max(self):
745 self.assertEqual(max('123123'), '3')
746 self.assertEqual(max(1, 2, 3), 3)
747 self.assertEqual(max((1, 2, 3, 1, 2, 3)), 3)
748 self.assertEqual(max([1, 2, 3, 1, 2, 3]), 3)
749
Guido van Rossume2a383d2007-01-15 16:59:06 +0000750 self.assertEqual(max(1, 2, 3.0), 3.0)
751 self.assertEqual(max(1, 2.0, 3), 3)
752 self.assertEqual(max(1.0, 2, 3), 3)
Walter Dörwald919497e2003-01-19 16:23:59 +0000753
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +0000754 for stmt in (
755 "max(key=int)", # no args
756 "max(1, key=int)", # single arg not iterable
757 "max(1, 2, keystone=int)", # wrong keyword
758 "max(1, 2, key=int, abc=int)", # two many keywords
759 "max(1, 2, key=1)", # keyfunc is not callable
760 ):
Tim Peters7f061872004-12-07 21:17:46 +0000761 try:
Georg Brandl7cae87c2006-09-06 06:51:57 +0000762 exec(stmt, globals())
Tim Peters7f061872004-12-07 21:17:46 +0000763 except TypeError:
764 pass
765 else:
766 self.fail(stmt)
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +0000767
768 self.assertEqual(max((1,), key=neg), 1) # one elem iterable
769 self.assertEqual(max((1,2), key=neg), 1) # two elem iterable
770 self.assertEqual(max(1, 2, key=neg), 1) # two elems
771
772 data = [random.randrange(200) for i in range(100)]
773 keys = dict((elem, random.randrange(50)) for elem in data)
774 f = keys.__getitem__
775 self.assertEqual(max(data, key=f),
776 sorted(reversed(data), key=f)[-1])
777
Walter Dörwald919497e2003-01-19 16:23:59 +0000778 def test_min(self):
779 self.assertEqual(min('123123'), '1')
780 self.assertEqual(min(1, 2, 3), 1)
781 self.assertEqual(min((1, 2, 3, 1, 2, 3)), 1)
782 self.assertEqual(min([1, 2, 3, 1, 2, 3]), 1)
783
Guido van Rossume2a383d2007-01-15 16:59:06 +0000784 self.assertEqual(min(1, 2, 3.0), 1)
785 self.assertEqual(min(1, 2.0, 3), 1)
786 self.assertEqual(min(1.0, 2, 3), 1.0)
Walter Dörwald919497e2003-01-19 16:23:59 +0000787
788 self.assertRaises(TypeError, min)
789 self.assertRaises(TypeError, min, 42)
790 self.assertRaises(ValueError, min, ())
791 class BadSeq:
792 def __getitem__(self, index):
793 raise ValueError
794 self.assertRaises(ValueError, min, BadSeq())
Walter Dörwald919497e2003-01-19 16:23:59 +0000795
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +0000796 for stmt in (
797 "min(key=int)", # no args
798 "min(1, key=int)", # single arg not iterable
799 "min(1, 2, keystone=int)", # wrong keyword
800 "min(1, 2, key=int, abc=int)", # two many keywords
801 "min(1, 2, key=1)", # keyfunc is not callable
802 ):
Tim Peters7f061872004-12-07 21:17:46 +0000803 try:
Georg Brandl7cae87c2006-09-06 06:51:57 +0000804 exec(stmt, globals())
Tim Peters7f061872004-12-07 21:17:46 +0000805 except TypeError:
806 pass
807 else:
808 self.fail(stmt)
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +0000809
810 self.assertEqual(min((1,), key=neg), 1) # one elem iterable
811 self.assertEqual(min((1,2), key=neg), 2) # two elem iterable
812 self.assertEqual(min(1, 2, key=neg), 2) # two elems
813
814 data = [random.randrange(200) for i in range(100)]
815 keys = dict((elem, random.randrange(50)) for elem in data)
816 f = keys.__getitem__
817 self.assertEqual(min(data, key=f),
818 sorted(data, key=f)[0])
819
Georg Brandla18af4e2007-04-21 15:47:16 +0000820 def test_next(self):
821 it = iter(range(2))
822 self.assertEqual(next(it), 0)
823 self.assertEqual(next(it), 1)
824 self.assertRaises(StopIteration, next, it)
825 self.assertRaises(StopIteration, next, it)
Ezio Melottib3aedd42010-11-20 19:04:17 +0000826 self.assertEqual(next(it, 42), 42)
Georg Brandla18af4e2007-04-21 15:47:16 +0000827
828 class Iter(object):
829 def __iter__(self):
830 return self
831 def __next__(self):
832 raise StopIteration
833
834 it = iter(Iter())
Ezio Melottib3aedd42010-11-20 19:04:17 +0000835 self.assertEqual(next(it, 42), 42)
Georg Brandla18af4e2007-04-21 15:47:16 +0000836 self.assertRaises(StopIteration, next, it)
837
838 def gen():
839 yield 1
840 return
841
842 it = gen()
Ezio Melottib3aedd42010-11-20 19:04:17 +0000843 self.assertEqual(next(it), 1)
Georg Brandla18af4e2007-04-21 15:47:16 +0000844 self.assertRaises(StopIteration, next, it)
Ezio Melottib3aedd42010-11-20 19:04:17 +0000845 self.assertEqual(next(it, 42), 42)
Georg Brandla18af4e2007-04-21 15:47:16 +0000846
Walter Dörwald919497e2003-01-19 16:23:59 +0000847 def test_oct(self):
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000848 self.assertEqual(oct(100), '0o144')
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000849 self.assertEqual(oct(-100), '-0o144')
Walter Dörwald919497e2003-01-19 16:23:59 +0000850 self.assertRaises(TypeError, oct, ())
851
852 def write_testfile(self):
Guido van Rossuma88a0332007-02-26 16:59:55 +0000853 # NB the first 4 lines are also used to test input, below
Walter Dörwald919497e2003-01-19 16:23:59 +0000854 fp = open(TESTFN, 'w')
855 try:
856 fp.write('1+1\n')
Walter Dörwald919497e2003-01-19 16:23:59 +0000857 fp.write('The quick brown fox jumps over the lazy dog')
858 fp.write('.\n')
859 fp.write('Dear John\n')
860 fp.write('XXX'*100)
861 fp.write('YYY'*100)
862 finally:
863 fp.close()
864
865 def test_open(self):
866 self.write_testfile()
867 fp = open(TESTFN, 'r')
868 try:
869 self.assertEqual(fp.readline(4), '1+1\n')
Walter Dörwald919497e2003-01-19 16:23:59 +0000870 self.assertEqual(fp.readline(), 'The quick brown fox jumps over the lazy dog.\n')
871 self.assertEqual(fp.readline(4), 'Dear')
872 self.assertEqual(fp.readline(100), ' John\n')
873 self.assertEqual(fp.read(300), 'XXX'*100)
874 self.assertEqual(fp.read(1000), 'YYY'*100)
875 finally:
876 fp.close()
877 unlink(TESTFN)
878
879 def test_ord(self):
880 self.assertEqual(ord(' '), 32)
881 self.assertEqual(ord('A'), 65)
882 self.assertEqual(ord('a'), 97)
Guido van Rossumf9e91c92007-05-08 21:05:48 +0000883 self.assertEqual(ord('\x80'), 128)
884 self.assertEqual(ord('\xff'), 255)
885
886 self.assertEqual(ord(b' '), 32)
887 self.assertEqual(ord(b'A'), 65)
888 self.assertEqual(ord(b'a'), 97)
889 self.assertEqual(ord(b'\x80'), 128)
890 self.assertEqual(ord(b'\xff'), 255)
891
Walter Dörwald1f5947b2007-05-22 16:52:54 +0000892 self.assertEqual(ord(chr(sys.maxunicode)), sys.maxunicode)
Walter Dörwald919497e2003-01-19 16:23:59 +0000893 self.assertRaises(TypeError, ord, 42)
Walter Dörwald919497e2003-01-19 16:23:59 +0000894
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000895 self.assertEqual(ord(chr(0x10FFFF)), 0x10FFFF)
896 self.assertEqual(ord("\U0000FFFF"), 0x0000FFFF)
897 self.assertEqual(ord("\U00010000"), 0x00010000)
898 self.assertEqual(ord("\U00010001"), 0x00010001)
899 self.assertEqual(ord("\U000FFFFE"), 0x000FFFFE)
900 self.assertEqual(ord("\U000FFFFF"), 0x000FFFFF)
901 self.assertEqual(ord("\U00100000"), 0x00100000)
902 self.assertEqual(ord("\U00100001"), 0x00100001)
903 self.assertEqual(ord("\U0010FFFE"), 0x0010FFFE)
904 self.assertEqual(ord("\U0010FFFF"), 0x0010FFFF)
905
Walter Dörwald919497e2003-01-19 16:23:59 +0000906 def test_pow(self):
907 self.assertEqual(pow(0,0), 1)
908 self.assertEqual(pow(0,1), 0)
909 self.assertEqual(pow(1,0), 1)
910 self.assertEqual(pow(1,1), 1)
911
912 self.assertEqual(pow(2,0), 1)
913 self.assertEqual(pow(2,10), 1024)
914 self.assertEqual(pow(2,20), 1024*1024)
915 self.assertEqual(pow(2,30), 1024*1024*1024)
916
917 self.assertEqual(pow(-2,0), 1)
918 self.assertEqual(pow(-2,1), -2)
919 self.assertEqual(pow(-2,2), 4)
920 self.assertEqual(pow(-2,3), -8)
921
Walter Dörwald919497e2003-01-19 16:23:59 +0000922 self.assertAlmostEqual(pow(0.,0), 1.)
923 self.assertAlmostEqual(pow(0.,1), 0.)
924 self.assertAlmostEqual(pow(1.,0), 1.)
925 self.assertAlmostEqual(pow(1.,1), 1.)
926
927 self.assertAlmostEqual(pow(2.,0), 1.)
928 self.assertAlmostEqual(pow(2.,10), 1024.)
929 self.assertAlmostEqual(pow(2.,20), 1024.*1024.)
930 self.assertAlmostEqual(pow(2.,30), 1024.*1024.*1024.)
931
932 self.assertAlmostEqual(pow(-2.,0), 1.)
933 self.assertAlmostEqual(pow(-2.,1), -2.)
934 self.assertAlmostEqual(pow(-2.,2), 4.)
935 self.assertAlmostEqual(pow(-2.,3), -8.)
936
Mark Dickinson5c2db372009-12-05 20:28:34 +0000937 for x in 2, 2.0:
938 for y in 10, 10.0:
939 for z in 1000, 1000.0:
Walter Dörwald919497e2003-01-19 16:23:59 +0000940 if isinstance(x, float) or \
941 isinstance(y, float) or \
942 isinstance(z, float):
943 self.assertRaises(TypeError, pow, x, y, z)
944 else:
945 self.assertAlmostEqual(pow(x, y, z), 24.0)
946
Jeffrey Yasskin3404b3c2007-09-07 15:15:49 +0000947 self.assertAlmostEqual(pow(-1, 0.5), 1j)
948 self.assertAlmostEqual(pow(-1, 1/3), 0.5 + 0.8660254037844386j)
949
Walter Dörwald919497e2003-01-19 16:23:59 +0000950 self.assertRaises(TypeError, pow, -1, -2, 3)
951 self.assertRaises(ValueError, pow, 1, 2, 0)
Walter Dörwald919497e2003-01-19 16:23:59 +0000952
953 self.assertRaises(TypeError, pow)
954
Guido van Rossuma88a0332007-02-26 16:59:55 +0000955 def test_input(self):
956 self.write_testfile()
957 fp = open(TESTFN, 'r')
958 savestdin = sys.stdin
959 savestdout = sys.stdout # Eats the echo
960 try:
961 sys.stdin = fp
962 sys.stdout = BitBucket()
963 self.assertEqual(input(), "1+1")
Guido van Rossuma88a0332007-02-26 16:59:55 +0000964 self.assertEqual(input(), 'The quick brown fox jumps over the lazy dog.')
965 self.assertEqual(input('testing\n'), 'Dear John')
966
967 # SF 1535165: don't segfault on closed stdin
968 # sys.stdout must be a regular file for triggering
969 sys.stdout = savestdout
970 sys.stdin.close()
971 self.assertRaises(ValueError, input)
972
973 sys.stdout = BitBucket()
Guido van Rossum34d19282007-08-09 01:03:29 +0000974 sys.stdin = io.StringIO("NULL\0")
Guido van Rossuma88a0332007-02-26 16:59:55 +0000975 self.assertRaises(TypeError, input, 42, 42)
Guido van Rossum34d19282007-08-09 01:03:29 +0000976 sys.stdin = io.StringIO(" 'whitespace'")
Guido van Rossuma88a0332007-02-26 16:59:55 +0000977 self.assertEqual(input(), " 'whitespace'")
Guido van Rossum34d19282007-08-09 01:03:29 +0000978 sys.stdin = io.StringIO()
Guido van Rossuma88a0332007-02-26 16:59:55 +0000979 self.assertRaises(EOFError, input)
980
981 del sys.stdout
982 self.assertRaises(RuntimeError, input, 'prompt')
983 del sys.stdin
984 self.assertRaises(RuntimeError, input, 'prompt')
985 finally:
986 sys.stdin = savestdin
987 sys.stdout = savestdout
988 fp.close()
989 unlink(TESTFN)
990
Walter Dörwald919497e2003-01-19 16:23:59 +0000991 def test_repr(self):
992 self.assertEqual(repr(''), '\'\'')
993 self.assertEqual(repr(0), '0')
Walter Dörwald919497e2003-01-19 16:23:59 +0000994 self.assertEqual(repr(()), '()')
995 self.assertEqual(repr([]), '[]')
996 self.assertEqual(repr({}), '{}')
997 a = []
998 a.append(a)
999 self.assertEqual(repr(a), '[[...]]')
1000 a = {}
1001 a[0] = a
1002 self.assertEqual(repr(a), '{0: {...}}')
1003
1004 def test_round(self):
1005 self.assertEqual(round(0.0), 0.0)
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001006 self.assertEqual(type(round(0.0)), int)
Walter Dörwald919497e2003-01-19 16:23:59 +00001007 self.assertEqual(round(1.0), 1.0)
1008 self.assertEqual(round(10.0), 10.0)
1009 self.assertEqual(round(1000000000.0), 1000000000.0)
1010 self.assertEqual(round(1e20), 1e20)
1011
1012 self.assertEqual(round(-1.0), -1.0)
1013 self.assertEqual(round(-10.0), -10.0)
1014 self.assertEqual(round(-1000000000.0), -1000000000.0)
1015 self.assertEqual(round(-1e20), -1e20)
1016
1017 self.assertEqual(round(0.1), 0.0)
1018 self.assertEqual(round(1.1), 1.0)
1019 self.assertEqual(round(10.1), 10.0)
1020 self.assertEqual(round(1000000000.1), 1000000000.0)
1021
1022 self.assertEqual(round(-1.1), -1.0)
1023 self.assertEqual(round(-10.1), -10.0)
1024 self.assertEqual(round(-1000000000.1), -1000000000.0)
1025
1026 self.assertEqual(round(0.9), 1.0)
1027 self.assertEqual(round(9.9), 10.0)
1028 self.assertEqual(round(999999999.9), 1000000000.0)
1029
1030 self.assertEqual(round(-0.9), -1.0)
1031 self.assertEqual(round(-9.9), -10.0)
1032 self.assertEqual(round(-999999999.9), -1000000000.0)
1033
1034 self.assertEqual(round(-8.0, -1), -10.0)
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001035 self.assertEqual(type(round(-8.0, -1)), float)
1036
1037 self.assertEqual(type(round(-8.0, 0)), float)
1038 self.assertEqual(type(round(-8.0, 1)), float)
1039
1040 # Check even / odd rounding behaviour
1041 self.assertEqual(round(5.5), 6)
1042 self.assertEqual(round(6.5), 6)
1043 self.assertEqual(round(-5.5), -6)
1044 self.assertEqual(round(-6.5), -6)
1045
1046 # Check behavior on ints
1047 self.assertEqual(round(0), 0)
1048 self.assertEqual(round(8), 8)
1049 self.assertEqual(round(-8), -8)
1050 self.assertEqual(type(round(0)), int)
Mark Dickinson1124e712009-01-28 21:25:58 +00001051 self.assertEqual(type(round(-8, -1)), int)
1052 self.assertEqual(type(round(-8, 0)), int)
1053 self.assertEqual(type(round(-8, 1)), int)
Walter Dörwald919497e2003-01-19 16:23:59 +00001054
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001055 # test new kwargs
1056 self.assertEqual(round(number=-8.0, ndigits=-1), -10.0)
1057
Walter Dörwald919497e2003-01-19 16:23:59 +00001058 self.assertRaises(TypeError, round)
1059
Alex Martelliae211f92007-08-22 23:21:33 +00001060 # test generic rounding delegation for reals
1061 class TestRound:
1062 def __round__(self):
1063 return 23
1064
1065 class TestNoRound:
1066 pass
1067
1068 self.assertEqual(round(TestRound()), 23)
1069
1070 self.assertRaises(TypeError, round, 1, 2, 3)
1071 self.assertRaises(TypeError, round, TestNoRound())
1072
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001073 t = TestNoRound()
1074 t.__round__ = lambda *args: args
1075 self.assertRaises(TypeError, round, t)
1076 self.assertRaises(TypeError, round, t, 0)
1077
Mark Dickinsonad731b92009-11-09 17:12:30 +00001078 # Some versions of glibc for alpha have a bug that affects
1079 # float -> integer rounding (floor, ceil, rint, round) for
1080 # values in the range [2**52, 2**53). See:
1081 #
1082 # http://sources.redhat.com/bugzilla/show_bug.cgi?id=5350
1083 #
1084 # We skip this test on Linux/alpha if it would fail.
1085 linux_alpha = (platform.system().startswith('Linux') and
1086 platform.machine().startswith('alpha'))
1087 system_round_bug = round(5e15+1) != 5e15+1
1088 @unittest.skipIf(linux_alpha and system_round_bug,
1089 "test will fail; failure is probably due to a "
1090 "buggy system round function")
1091 def test_round_large(self):
1092 # Issue #1869: integral floats should remain unchanged
1093 self.assertEqual(round(5e15-1), 5e15-1)
1094 self.assertEqual(round(5e15), 5e15)
1095 self.assertEqual(round(5e15+1), 5e15+1)
1096 self.assertEqual(round(5e15+2), 5e15+2)
1097 self.assertEqual(round(5e15+3), 5e15+3)
1098
Walter Dörwald919497e2003-01-19 16:23:59 +00001099 def test_setattr(self):
Tim Petersf2715e02003-02-19 02:35:07 +00001100 setattr(sys, 'spam', 1)
1101 self.assertEqual(sys.spam, 1)
1102 self.assertRaises(TypeError, setattr, sys, 1, 'spam')
1103 self.assertRaises(TypeError, setattr)
Walter Dörwald919497e2003-01-19 16:23:59 +00001104
Walter Dörwald919497e2003-01-19 16:23:59 +00001105
Alex Martellia70b1912003-04-22 08:12:33 +00001106 def test_sum(self):
1107 self.assertEqual(sum([]), 0)
Guido van Rossum805365e2007-05-07 22:24:25 +00001108 self.assertEqual(sum(list(range(2,8))), 27)
1109 self.assertEqual(sum(iter(list(range(2,8)))), 27)
Alex Martellia70b1912003-04-22 08:12:33 +00001110 self.assertEqual(sum(Squares(10)), 285)
1111 self.assertEqual(sum(iter(Squares(10))), 285)
1112 self.assertEqual(sum([[1], [2], [3]], []), [1, 2, 3])
1113
1114 self.assertRaises(TypeError, sum)
1115 self.assertRaises(TypeError, sum, 42)
1116 self.assertRaises(TypeError, sum, ['a', 'b', 'c'])
1117 self.assertRaises(TypeError, sum, ['a', 'b', 'c'], '')
1118 self.assertRaises(TypeError, sum, [[1], [2], [3]])
1119 self.assertRaises(TypeError, sum, [{2:3}])
1120 self.assertRaises(TypeError, sum, [{2:3}]*2, {2:3})
1121
1122 class BadSeq:
1123 def __getitem__(self, index):
1124 raise ValueError
1125 self.assertRaises(ValueError, sum, BadSeq())
1126
Mark Dickinson3a22b472009-10-17 21:48:16 +00001127 empty = []
1128 sum(([x] for x in range(10)), empty)
1129 self.assertEqual(empty, [])
1130
Walter Dörwald919497e2003-01-19 16:23:59 +00001131 def test_type(self):
1132 self.assertEqual(type(''), type('123'))
1133 self.assertNotEqual(type(''), type(()))
1134
Guido van Rossumfee7b932005-01-16 00:21:28 +00001135 # We don't want self in vars(), so these are static methods
1136
1137 @staticmethod
Walter Dörwald919497e2003-01-19 16:23:59 +00001138 def get_vars_f0():
1139 return vars()
Walter Dörwald919497e2003-01-19 16:23:59 +00001140
Guido van Rossumfee7b932005-01-16 00:21:28 +00001141 @staticmethod
Walter Dörwald919497e2003-01-19 16:23:59 +00001142 def get_vars_f2():
1143 BuiltinTest.get_vars_f0()
1144 a = 1
1145 b = 2
1146 return vars()
Walter Dörwald919497e2003-01-19 16:23:59 +00001147
Mark Dickinsonfb3dc942010-05-25 19:06:24 +00001148 class C_get_vars(object):
1149 def getDict(self):
1150 return {'a':2}
1151 __dict__ = property(fget=getDict)
1152
Walter Dörwald919497e2003-01-19 16:23:59 +00001153 def test_vars(self):
Raymond Hettingera690a992003-11-16 16:17:49 +00001154 self.assertEqual(set(vars()), set(dir()))
Raymond Hettingera690a992003-11-16 16:17:49 +00001155 self.assertEqual(set(vars(sys)), set(dir(sys)))
Walter Dörwald919497e2003-01-19 16:23:59 +00001156 self.assertEqual(self.get_vars_f0(), {})
1157 self.assertEqual(self.get_vars_f2(), {'a': 1, 'b': 2})
1158 self.assertRaises(TypeError, vars, 42, 42)
1159 self.assertRaises(TypeError, vars, 42)
Mark Dickinsonfb3dc942010-05-25 19:06:24 +00001160 self.assertEqual(vars(self.C_get_vars()), {'a':2})
Walter Dörwald919497e2003-01-19 16:23:59 +00001161
1162 def test_zip(self):
1163 a = (1, 2, 3)
1164 b = (4, 5, 6)
1165 t = [(1, 4), (2, 5), (3, 6)]
Guido van Rossum801f0d72006-08-24 19:48:10 +00001166 self.assertEqual(list(zip(a, b)), t)
Walter Dörwald919497e2003-01-19 16:23:59 +00001167 b = [4, 5, 6]
Guido van Rossum801f0d72006-08-24 19:48:10 +00001168 self.assertEqual(list(zip(a, b)), t)
Walter Dörwald919497e2003-01-19 16:23:59 +00001169 b = (4, 5, 6, 7)
Guido van Rossum801f0d72006-08-24 19:48:10 +00001170 self.assertEqual(list(zip(a, b)), t)
Walter Dörwald919497e2003-01-19 16:23:59 +00001171 class I:
1172 def __getitem__(self, i):
1173 if i < 0 or i > 2: raise IndexError
1174 return i + 4
Guido van Rossum801f0d72006-08-24 19:48:10 +00001175 self.assertEqual(list(zip(a, I())), t)
1176 self.assertEqual(list(zip()), [])
1177 self.assertEqual(list(zip(*[])), [])
Walter Dörwald919497e2003-01-19 16:23:59 +00001178 self.assertRaises(TypeError, zip, None)
1179 class G:
1180 pass
1181 self.assertRaises(TypeError, zip, a, G())
Alexander Belopolskye29e6bf2010-08-16 18:55:46 +00001182 self.assertRaises(RuntimeError, zip, a, TestFailingIter())
Walter Dörwald919497e2003-01-19 16:23:59 +00001183
1184 # Make sure zip doesn't try to allocate a billion elements for the
1185 # result list when one of its arguments doesn't say how long it is.
1186 # A MemoryError is the most likely failure mode.
1187 class SequenceWithoutALength:
1188 def __getitem__(self, i):
1189 if i == 5:
1190 raise IndexError
1191 else:
1192 return i
1193 self.assertEqual(
Guido van Rossum805365e2007-05-07 22:24:25 +00001194 list(zip(SequenceWithoutALength(), range(2**30))),
Walter Dörwald919497e2003-01-19 16:23:59 +00001195 list(enumerate(range(5)))
1196 )
1197
1198 class BadSeq:
1199 def __getitem__(self, i):
1200 if i == 5:
1201 raise ValueError
1202 else:
1203 return i
Guido van Rossum801f0d72006-08-24 19:48:10 +00001204 self.assertRaises(ValueError, list, zip(BadSeq(), BadSeq()))
Walter Dörwald919497e2003-01-19 16:23:59 +00001205
Eric Smithe4d63172010-09-13 20:48:43 +00001206 def test_format(self):
1207 # Test the basic machinery of the format() builtin. Don't test
1208 # the specifics of the various formatters
1209 self.assertEqual(format(3, ''), '3')
1210
1211 # Returns some classes to use for various tests. There's
1212 # an old-style version, and a new-style version
1213 def classes_new():
1214 class A(object):
1215 def __init__(self, x):
1216 self.x = x
1217 def __format__(self, format_spec):
1218 return str(self.x) + format_spec
1219 class DerivedFromA(A):
1220 pass
1221
1222 class Simple(object): pass
1223 class DerivedFromSimple(Simple):
1224 def __init__(self, x):
1225 self.x = x
1226 def __format__(self, format_spec):
1227 return str(self.x) + format_spec
1228 class DerivedFromSimple2(DerivedFromSimple): pass
1229 return A, DerivedFromA, DerivedFromSimple, DerivedFromSimple2
1230
1231 def class_test(A, DerivedFromA, DerivedFromSimple, DerivedFromSimple2):
1232 self.assertEqual(format(A(3), 'spec'), '3spec')
1233 self.assertEqual(format(DerivedFromA(4), 'spec'), '4spec')
1234 self.assertEqual(format(DerivedFromSimple(5), 'abc'), '5abc')
1235 self.assertEqual(format(DerivedFromSimple2(10), 'abcdef'),
1236 '10abcdef')
1237
1238 class_test(*classes_new())
1239
1240 def empty_format_spec(value):
1241 # test that:
1242 # format(x, '') == str(x)
1243 # format(x) == str(x)
1244 self.assertEqual(format(value, ""), str(value))
1245 self.assertEqual(format(value), str(value))
1246
1247 # for builtin types, format(x, "") == str(x)
1248 empty_format_spec(17**13)
1249 empty_format_spec(1.0)
1250 empty_format_spec(3.1415e104)
1251 empty_format_spec(-3.1415e104)
1252 empty_format_spec(3.1415e-104)
1253 empty_format_spec(-3.1415e-104)
1254 empty_format_spec(object)
1255 empty_format_spec(None)
1256
1257 # TypeError because self.__format__ returns the wrong type
1258 class BadFormatResult:
1259 def __format__(self, format_spec):
1260 return 1.0
1261 self.assertRaises(TypeError, format, BadFormatResult(), "")
1262
1263 # TypeError because format_spec is not unicode or str
1264 self.assertRaises(TypeError, format, object(), 4)
1265 self.assertRaises(TypeError, format, object(), object())
1266
1267 # tests for object.__format__ really belong elsewhere, but
1268 # there's no good place to put them
1269 x = object().__format__('')
1270 self.assertTrue(x.startswith('<object object at'))
1271
1272 # first argument to object.__format__ must be string
1273 self.assertRaises(TypeError, object().__format__, 3)
1274 self.assertRaises(TypeError, object().__format__, object())
1275 self.assertRaises(TypeError, object().__format__, None)
1276
1277 # --------------------------------------------------------------------
1278 # Issue #7994: object.__format__ with a non-empty format string is
1279 # pending deprecated
1280 def test_deprecated_format_string(obj, fmt_str, should_raise_warning):
1281 with warnings.catch_warnings(record=True) as w:
1282 warnings.simplefilter("always", PendingDeprecationWarning)
1283 format(obj, fmt_str)
1284 if should_raise_warning:
1285 self.assertEqual(len(w), 1)
1286 self.assertIsInstance(w[0].message, PendingDeprecationWarning)
1287 self.assertIn('object.__format__ with a non-empty format '
1288 'string', str(w[0].message))
1289 else:
1290 self.assertEqual(len(w), 0)
1291
1292 fmt_strs = ['', 's']
1293
1294 class A:
1295 def __format__(self, fmt_str):
1296 return format('', fmt_str)
1297
1298 for fmt_str in fmt_strs:
1299 test_deprecated_format_string(A(), fmt_str, False)
1300
1301 class B:
1302 pass
1303
1304 class C(object):
1305 pass
1306
1307 for cls in [object, B, C]:
1308 for fmt_str in fmt_strs:
1309 test_deprecated_format_string(cls(), fmt_str, len(fmt_str) != 0)
1310 # --------------------------------------------------------------------
1311
1312 # make sure we can take a subclass of str as a format spec
1313 class DerivedFromStr(str): pass
1314 self.assertEqual(format(0, DerivedFromStr('10')), ' 0')
1315
Christian Heimes90c3d9b2008-02-23 13:18:03 +00001316 def test_bin(self):
1317 self.assertEqual(bin(0), '0b0')
1318 self.assertEqual(bin(1), '0b1')
1319 self.assertEqual(bin(-1), '-0b1')
1320 self.assertEqual(bin(2**65), '0b1' + '0' * 65)
1321 self.assertEqual(bin(2**65-1), '0b' + '1' * 65)
1322 self.assertEqual(bin(-(2**65)), '-0b1' + '0' * 65)
1323 self.assertEqual(bin(-(2**65-1)), '-0b' + '1' * 65)
1324
Georg Brandl953152f2009-07-22 12:03:59 +00001325 def test_bytearray_translate(self):
1326 x = bytearray(b"abc")
1327 self.assertRaises(ValueError, x.translate, b"1", 1)
1328 self.assertRaises(TypeError, x.translate, b"1"*256, 1)
1329
Raymond Hettinger64958a12003-12-17 20:43:33 +00001330class TestSorted(unittest.TestCase):
1331
1332 def test_basic(self):
Guido van Rossum805365e2007-05-07 22:24:25 +00001333 data = list(range(100))
Raymond Hettinger64958a12003-12-17 20:43:33 +00001334 copy = data[:]
1335 random.shuffle(copy)
1336 self.assertEqual(data, sorted(copy))
1337 self.assertNotEqual(data, copy)
1338
1339 data.reverse()
1340 random.shuffle(copy)
Raymond Hettinger64958a12003-12-17 20:43:33 +00001341 self.assertEqual(data, sorted(copy, key=lambda x: -x))
1342 self.assertNotEqual(data, copy)
1343 random.shuffle(copy)
1344 self.assertEqual(data, sorted(copy, reverse=1))
1345 self.assertNotEqual(data, copy)
1346
1347 def test_inputtypes(self):
1348 s = 'abracadabra'
Walter Dörwald1f5947b2007-05-22 16:52:54 +00001349 types = [list, tuple, str]
Walter Dörwald4e41a4b2005-08-03 17:09:04 +00001350 for T in types:
Raymond Hettinger64958a12003-12-17 20:43:33 +00001351 self.assertEqual(sorted(s), sorted(T(s)))
1352
Walter Dörwald1f5947b2007-05-22 16:52:54 +00001353 s = ''.join(set(s)) # unique letters only
1354 types = [str, set, frozenset, list, tuple, dict.fromkeys]
Walter Dörwald4e41a4b2005-08-03 17:09:04 +00001355 for T in types:
Raymond Hettinger64958a12003-12-17 20:43:33 +00001356 self.assertEqual(sorted(s), sorted(T(s)))
1357
1358 def test_baddecorator(self):
1359 data = 'The quick Brown fox Jumped over The lazy Dog'.split()
1360 self.assertRaises(TypeError, sorted, data, None, lambda x,y: 0)
1361
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001362def test_main(verbose=None):
1363 test_classes = (BuiltinTest, TestSorted)
1364
1365 run_unittest(*test_classes)
1366
1367 # verify reference counting
1368 if verbose and hasattr(sys, "gettotalrefcount"):
1369 import gc
1370 counts = [None] * 5
Guido van Rossum805365e2007-05-07 22:24:25 +00001371 for i in range(len(counts)):
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001372 run_unittest(*test_classes)
1373 gc.collect()
1374 counts[i] = sys.gettotalrefcount()
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001375 print(counts)
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001376
Walter Dörwald919497e2003-01-19 16:23:59 +00001377
1378if __name__ == "__main__":
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001379 test_main(verbose=True)