blob: 3f412b785196349e6cc9ff12dac1fccd99c99666 [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
Brett Cannon77628992010-03-20 20:59:33 +00005from test.support import fcmp, TESTFN, unlink, run_unittest, check_warnings
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00006from operator import neg
Guido van Rossum3bead091992-01-27 17:00:37 +00007
Georg Brandl1b37e872010-03-14 10:45:50 +00008import sys, warnings, random, collections, io
9
Mark Dickinsona56c4672009-01-27 18:17:45 +000010import builtins
Guido van Rossum3bead091992-01-27 17:00:37 +000011
Walter Dörwald919497e2003-01-19 16:23:59 +000012class Squares:
Guido van Rossum3bead091992-01-27 17:00:37 +000013
Walter Dörwald919497e2003-01-19 16:23:59 +000014 def __init__(self, max):
15 self.max = max
16 self.sofar = []
17
18 def __len__(self): return len(self.sofar)
19
20 def __getitem__(self, i):
21 if not 0 <= i < self.max: raise IndexError
22 n = len(self.sofar)
23 while n <= i:
24 self.sofar.append(n*n)
25 n += 1
26 return self.sofar[i]
27
28class StrSquares:
29
30 def __init__(self, max):
31 self.max = max
32 self.sofar = []
33
34 def __len__(self):
35 return len(self.sofar)
36
37 def __getitem__(self, i):
38 if not 0 <= i < self.max:
39 raise IndexError
40 n = len(self.sofar)
41 while n <= i:
42 self.sofar.append(str(n*n))
43 n += 1
44 return self.sofar[i]
45
46class BitBucket:
47 def write(self, line):
48 pass
49
Facundo Batista2336bdd2008-01-19 19:12:01 +000050test_conv_no_sign = [
Walter Dörwald919497e2003-01-19 16:23:59 +000051 ('0', 0),
52 ('1', 1),
53 ('9', 9),
54 ('10', 10),
55 ('99', 99),
56 ('100', 100),
57 ('314', 314),
58 (' 314', 314),
59 ('314 ', 314),
60 (' \t\t 314 \t\t ', 314),
Christian Heimesa37d4c62007-12-04 23:02:19 +000061 (repr(sys.maxsize), sys.maxsize),
Walter Dörwald919497e2003-01-19 16:23:59 +000062 (' 1x', ValueError),
63 (' 1 ', 1),
64 (' 1\02 ', ValueError),
65 ('', ValueError),
66 (' ', ValueError),
Walter Dörwald1f5947b2007-05-22 16:52:54 +000067 (' \t\t ', ValueError),
Guido van Rossumef87d6e2007-05-02 19:09:54 +000068 (str(b'\u0663\u0661\u0664 ','raw-unicode-escape'), 314),
Guido van Rossum84fc66d2007-05-03 17:18:26 +000069 (chr(0x200), ValueError),
Walter Dörwald919497e2003-01-19 16:23:59 +000070]
71
Facundo Batista2336bdd2008-01-19 19:12:01 +000072test_conv_sign = [
73 ('0', 0),
74 ('1', 1),
75 ('9', 9),
76 ('10', 10),
77 ('99', 99),
78 ('100', 100),
79 ('314', 314),
80 (' 314', ValueError),
81 ('314 ', 314),
82 (' \t\t 314 \t\t ', ValueError),
83 (repr(sys.maxsize), sys.maxsize),
84 (' 1x', ValueError),
85 (' 1 ', ValueError),
86 (' 1\02 ', ValueError),
87 ('', ValueError),
88 (' ', ValueError),
89 (' \t\t ', ValueError),
90 (str(b'\u0663\u0661\u0664 ','raw-unicode-escape'), 314),
91 (chr(0x200), ValueError),
92]
93
Raymond Hettinger96229b12005-03-11 06:49:40 +000094class TestFailingBool:
Jack Diederich4dafcc42006-11-28 19:15:13 +000095 def __bool__(self):
Raymond Hettinger96229b12005-03-11 06:49:40 +000096 raise RuntimeError
97
98class TestFailingIter:
99 def __iter__(self):
100 raise RuntimeError
101
Walter Dörwald919497e2003-01-19 16:23:59 +0000102class BuiltinTest(unittest.TestCase):
103
104 def test_import(self):
105 __import__('sys')
106 __import__('time')
107 __import__('string')
Guido van Rossumd8faa362007-04-27 19:54:29 +0000108 __import__(name='sys')
109 __import__(name='time', level=0)
Walter Dörwald919497e2003-01-19 16:23:59 +0000110 self.assertRaises(ImportError, __import__, 'spamspam')
111 self.assertRaises(TypeError, __import__, 1, 2, 3, 4)
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000112 self.assertRaises(ValueError, __import__, '')
Guido van Rossumd8faa362007-04-27 19:54:29 +0000113 self.assertRaises(TypeError, __import__, 'sys', name='sys')
Walter Dörwald919497e2003-01-19 16:23:59 +0000114
115 def test_abs(self):
116 # int
117 self.assertEqual(abs(0), 0)
118 self.assertEqual(abs(1234), 1234)
119 self.assertEqual(abs(-1234), 1234)
Christian Heimesa37d4c62007-12-04 23:02:19 +0000120 self.assertTrue(abs(-sys.maxsize-1) > 0)
Walter Dörwald919497e2003-01-19 16:23:59 +0000121 # float
122 self.assertEqual(abs(0.0), 0.0)
123 self.assertEqual(abs(3.14), 3.14)
124 self.assertEqual(abs(-3.14), 3.14)
Walter Dörwald919497e2003-01-19 16:23:59 +0000125 # str
126 self.assertRaises(TypeError, abs, 'a')
Mark Dickinsonfb3dc942010-05-25 19:06:24 +0000127 # bool
128 self.assertEqual(abs(True), 1)
129 self.assertEqual(abs(False), 0)
130 # other
131 self.assertRaises(TypeError, abs)
132 self.assertRaises(TypeError, abs, None)
133 class AbsClass(object):
134 def __abs__(self):
135 return -5
136 self.assertEqual(abs(AbsClass()), -5)
Walter Dörwald919497e2003-01-19 16:23:59 +0000137
Raymond Hettinger96229b12005-03-11 06:49:40 +0000138 def test_all(self):
139 self.assertEqual(all([2, 4, 6]), True)
140 self.assertEqual(all([2, None, 6]), False)
141 self.assertRaises(RuntimeError, all, [2, TestFailingBool(), 6])
142 self.assertRaises(RuntimeError, all, TestFailingIter())
143 self.assertRaises(TypeError, all, 10) # Non-iterable
144 self.assertRaises(TypeError, all) # No args
145 self.assertRaises(TypeError, all, [2, 4, 6], []) # Too many args
146 self.assertEqual(all([]), True) # Empty iterator
147 S = [50, 60]
148 self.assertEqual(all(x > 42 for x in S), True)
149 S = [50, 40, 60]
150 self.assertEqual(all(x > 42 for x in S), False)
151
152 def test_any(self):
153 self.assertEqual(any([None, None, None]), False)
154 self.assertEqual(any([None, 4, None]), True)
155 self.assertRaises(RuntimeError, any, [None, TestFailingBool(), 6])
156 self.assertRaises(RuntimeError, all, TestFailingIter())
157 self.assertRaises(TypeError, any, 10) # Non-iterable
158 self.assertRaises(TypeError, any) # No args
159 self.assertRaises(TypeError, any, [2, 4, 6], []) # Too many args
160 self.assertEqual(any([]), False) # Empty iterator
161 S = [40, 60, 30]
162 self.assertEqual(any(x > 42 for x in S), True)
163 S = [10, 20, 30]
164 self.assertEqual(any(x > 42 for x in S), False)
165
Georg Brandl559e5d72008-06-11 18:37:52 +0000166 def test_ascii(self):
167 self.assertEqual(ascii(''), '\'\'')
168 self.assertEqual(ascii(0), '0')
Georg Brandl559e5d72008-06-11 18:37:52 +0000169 self.assertEqual(ascii(()), '()')
170 self.assertEqual(ascii([]), '[]')
171 self.assertEqual(ascii({}), '{}')
172 a = []
173 a.append(a)
174 self.assertEqual(ascii(a), '[[...]]')
175 a = {}
176 a[0] = a
177 self.assertEqual(ascii(a), '{0: {...}}')
178
Thomas Wouters89f507f2006-12-13 04:49:30 +0000179 def test_neg(self):
Christian Heimesa37d4c62007-12-04 23:02:19 +0000180 x = -sys.maxsize-1
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000181 self.assertTrue(isinstance(x, int))
Christian Heimesa37d4c62007-12-04 23:02:19 +0000182 self.assertEqual(-x, sys.maxsize+1)
Thomas Wouters89f507f2006-12-13 04:49:30 +0000183
Guido van Rossumd59da4b2007-05-22 18:11:13 +0000184 # XXX(nnorwitz): This test case for callable should probably be removed.
Walter Dörwald919497e2003-01-19 16:23:59 +0000185 def test_callable(self):
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000186 self.assertTrue(hasattr(len, '__call__'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000187 def f(): pass
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000188 self.assertTrue(hasattr(f, '__call__'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000189 class C:
190 def meth(self): pass
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000191 self.assertTrue(hasattr(C, '__call__'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000192 x = C()
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000193 self.assertTrue(hasattr(x.meth, '__call__'))
194 self.assertTrue(not hasattr(x, '__call__'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000195 class D(C):
196 def __call__(self): pass
197 y = D()
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000198 self.assertTrue(hasattr(y, '__call__'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000199 y()
200
201 def test_chr(self):
202 self.assertEqual(chr(32), ' ')
203 self.assertEqual(chr(65), 'A')
204 self.assertEqual(chr(97), 'a')
205 self.assertEqual(chr(0xff), '\xff')
Guido van Rossum572dbf82007-04-27 23:53:51 +0000206 self.assertRaises(ValueError, chr, 1<<24)
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000207 self.assertEqual(chr(sys.maxunicode),
208 str(('\\U%08x' % (sys.maxunicode)).encode("ascii"),
209 'unicode-escape'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000210 self.assertRaises(TypeError, chr)
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000211 self.assertEqual(chr(0x0000FFFF), "\U0000FFFF")
212 self.assertEqual(chr(0x00010000), "\U00010000")
213 self.assertEqual(chr(0x00010001), "\U00010001")
214 self.assertEqual(chr(0x000FFFFE), "\U000FFFFE")
215 self.assertEqual(chr(0x000FFFFF), "\U000FFFFF")
216 self.assertEqual(chr(0x00100000), "\U00100000")
217 self.assertEqual(chr(0x00100001), "\U00100001")
218 self.assertEqual(chr(0x0010FFFE), "\U0010FFFE")
219 self.assertEqual(chr(0x0010FFFF), "\U0010FFFF")
220 self.assertRaises(ValueError, chr, -1)
221 self.assertRaises(ValueError, chr, 0x00110000)
Amaury Forgeot d'Arc7888d082008-08-01 01:06:32 +0000222 self.assertRaises((OverflowError, ValueError), chr, 2**32)
Walter Dörwald919497e2003-01-19 16:23:59 +0000223
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000224 def test_cmp(self):
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000225 self.assertTrue(not hasattr(builtins, "cmp"))
Walter Dörwald919497e2003-01-19 16:23:59 +0000226
Walter Dörwald919497e2003-01-19 16:23:59 +0000227 def test_compile(self):
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000228 compile('print(1)\n', '', 'exec')
Amaury Forgeot d'Arcaf593462007-11-22 20:53:01 +0000229 bom = b'\xef\xbb\xbf'
230 compile(bom + b'print(1)\n', '', 'exec')
Guido van Rossumd8faa362007-04-27 19:54:29 +0000231 compile(source='pass', filename='?', mode='exec')
232 compile(dont_inherit=0, filename='tmp', source='0', mode='eval')
233 compile('pass', '?', dont_inherit=1, mode='exec')
Benjamin Peterson60320cb2008-09-26 21:49:22 +0000234 compile(memoryview(b"text"), "name", "exec")
Walter Dörwald919497e2003-01-19 16:23:59 +0000235 self.assertRaises(TypeError, compile)
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000236 self.assertRaises(ValueError, compile, 'print(42)\n', '<string>', 'badmode')
237 self.assertRaises(ValueError, compile, 'print(42)\n', '<string>', 'single', 0xff)
Neal Norwitzfcf44352005-11-27 20:37:43 +0000238 self.assertRaises(TypeError, compile, chr(0), 'f', 'exec')
Guido van Rossumd8faa362007-04-27 19:54:29 +0000239 self.assertRaises(TypeError, compile, 'pass', '?', 'exec',
240 mode='eval', source='0', filename='tmp')
Walter Dörwald1f5947b2007-05-22 16:52:54 +0000241 compile('print("\xe5")\n', '', 'exec')
242 self.assertRaises(TypeError, compile, chr(0), 'f', 'exec')
243 self.assertRaises(ValueError, compile, str('a = 1'), 'f', 'bad')
Guido van Rossumd8faa362007-04-27 19:54:29 +0000244
Walter Dörwald919497e2003-01-19 16:23:59 +0000245 def test_delattr(self):
246 import sys
247 sys.spam = 1
248 delattr(sys, 'spam')
249 self.assertRaises(TypeError, delattr)
250
251 def test_dir(self):
Georg Brandle32b4222007-03-10 22:13:27 +0000252 # dir(wrong number of arguments)
Walter Dörwald919497e2003-01-19 16:23:59 +0000253 self.assertRaises(TypeError, dir, 42, 42)
254
Georg Brandle32b4222007-03-10 22:13:27 +0000255 # dir() - local scope
256 local_var = 1
Benjamin Peterson577473f2010-01-19 00:09:57 +0000257 self.assertIn('local_var', dir())
Georg Brandle32b4222007-03-10 22:13:27 +0000258
259 # dir(module)
260 import sys
Benjamin Peterson577473f2010-01-19 00:09:57 +0000261 self.assertIn('exit', dir(sys))
Georg Brandle32b4222007-03-10 22:13:27 +0000262
263 # dir(module_with_invalid__dict__)
264 import types
265 class Foo(types.ModuleType):
266 __dict__ = 8
267 f = Foo("foo")
268 self.assertRaises(TypeError, dir, f)
269
270 # dir(type)
Benjamin Peterson577473f2010-01-19 00:09:57 +0000271 self.assertIn("strip", dir(str))
272 self.assertNotIn("__mro__", dir(str))
Georg Brandle32b4222007-03-10 22:13:27 +0000273
274 # dir(obj)
275 class Foo(object):
276 def __init__(self):
277 self.x = 7
278 self.y = 8
279 self.z = 9
280 f = Foo()
Benjamin Peterson577473f2010-01-19 00:09:57 +0000281 self.assertIn("y", dir(f))
Georg Brandle32b4222007-03-10 22:13:27 +0000282
283 # dir(obj_no__dict__)
284 class Foo(object):
285 __slots__ = []
286 f = Foo()
Benjamin Peterson577473f2010-01-19 00:09:57 +0000287 self.assertIn("__repr__", dir(f))
Georg Brandle32b4222007-03-10 22:13:27 +0000288
289 # dir(obj_no__class__with__dict__)
290 # (an ugly trick to cause getattr(f, "__class__") to fail)
291 class Foo(object):
292 __slots__ = ["__class__", "__dict__"]
293 def __init__(self):
294 self.bar = "wow"
295 f = Foo()
Benjamin Peterson577473f2010-01-19 00:09:57 +0000296 self.assertNotIn("__repr__", dir(f))
297 self.assertIn("bar", dir(f))
Georg Brandle32b4222007-03-10 22:13:27 +0000298
299 # dir(obj_using __dir__)
300 class Foo(object):
301 def __dir__(self):
302 return ["kan", "ga", "roo"]
303 f = Foo()
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000304 self.assertTrue(dir(f) == ["ga", "kan", "roo"])
Georg Brandle32b4222007-03-10 22:13:27 +0000305
306 # dir(obj__dir__not_list)
307 class Foo(object):
308 def __dir__(self):
309 return 7
310 f = Foo()
311 self.assertRaises(TypeError, dir, f)
312
Collin Winter3eed7652007-08-14 17:53:54 +0000313 # dir(traceback)
314 try:
315 raise IndexError
316 except:
317 self.assertEqual(len(dir(sys.exc_info()[2])), 4)
318
319
Walter Dörwald919497e2003-01-19 16:23:59 +0000320 def test_divmod(self):
321 self.assertEqual(divmod(12, 7), (1, 5))
322 self.assertEqual(divmod(-12, 7), (-2, 2))
323 self.assertEqual(divmod(12, -7), (-2, -2))
324 self.assertEqual(divmod(-12, -7), (1, -5))
325
Mark Dickinson5c2db372009-12-05 20:28:34 +0000326 self.assertEqual(divmod(-sys.maxsize-1, -1), (sys.maxsize+1, 0))
Raymond Hettinger5ea7e312004-09-30 07:47:20 +0000327
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000328 self.assertTrue(not fcmp(divmod(3.25, 1.0), (3.0, 0.25)))
329 self.assertTrue(not fcmp(divmod(-3.25, 1.0), (-4.0, 0.75)))
330 self.assertTrue(not fcmp(divmod(3.25, -1.0), (-4.0, -0.75)))
331 self.assertTrue(not fcmp(divmod(-3.25, -1.0), (3.0, -0.25)))
Walter Dörwald919497e2003-01-19 16:23:59 +0000332
333 self.assertRaises(TypeError, divmod)
334
335 def test_eval(self):
336 self.assertEqual(eval('1+1'), 2)
337 self.assertEqual(eval(' 1+1\n'), 2)
338 globals = {'a': 1, 'b': 2}
339 locals = {'b': 200, 'c': 300}
340 self.assertEqual(eval('a', globals) , 1)
341 self.assertEqual(eval('a', globals, locals), 1)
342 self.assertEqual(eval('b', globals, locals), 200)
343 self.assertEqual(eval('c', globals, locals), 300)
Walter Dörwald919497e2003-01-19 16:23:59 +0000344 globals = {'a': 1, 'b': 2}
345 locals = {'b': 200, 'c': 300}
Amaury Forgeot d'Arcaf593462007-11-22 20:53:01 +0000346 bom = b'\xef\xbb\xbf'
347 self.assertEqual(eval(bom + b'a', globals, locals), 1)
Walter Dörwald1f5947b2007-05-22 16:52:54 +0000348 self.assertEqual(eval('"\xe5"', globals), "\xe5")
Walter Dörwald919497e2003-01-19 16:23:59 +0000349 self.assertRaises(TypeError, eval)
350 self.assertRaises(TypeError, eval, ())
Amaury Forgeot d'Arcaf593462007-11-22 20:53:01 +0000351 self.assertRaises(SyntaxError, eval, bom[:2] + b'a')
Walter Dörwald919497e2003-01-19 16:23:59 +0000352
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000353 def test_general_eval(self):
354 # Tests that general mappings can be used for the locals argument
355
356 class M:
357 "Test mapping interface versus possible calls from eval()."
358 def __getitem__(self, key):
359 if key == 'a':
360 return 12
361 raise KeyError
Guido van Rossumcd70eee2007-02-11 18:53:00 +0000362 def keys(self):
363 return list('xyz')
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000364
365 m = M()
366 g = globals()
367 self.assertEqual(eval('a', g, m), 12)
368 self.assertRaises(NameError, eval, 'b', g, m)
369 self.assertEqual(eval('dir()', g, m), list('xyz'))
370 self.assertEqual(eval('globals()', g, m), g)
371 self.assertEqual(eval('locals()', g, m), m)
Raymond Hettinger513ffe82004-07-06 13:44:41 +0000372 self.assertRaises(TypeError, eval, 'a', m)
Raymond Hettinger66bd2332004-08-02 08:30:07 +0000373 class A:
374 "Non-mapping"
375 pass
376 m = A()
377 self.assertRaises(TypeError, eval, 'a', g, m)
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000378
379 # Verify that dict subclasses work as well
380 class D(dict):
381 def __getitem__(self, key):
382 if key == 'a':
383 return 12
384 return dict.__getitem__(self, key)
Guido van Rossumcd70eee2007-02-11 18:53:00 +0000385 def keys(self):
386 return list('xyz')
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000387
388 d = D()
389 self.assertEqual(eval('a', g, d), 12)
390 self.assertRaises(NameError, eval, 'b', g, d)
391 self.assertEqual(eval('dir()', g, d), list('xyz'))
392 self.assertEqual(eval('globals()', g, d), g)
393 self.assertEqual(eval('locals()', g, d), d)
394
395 # Verify locals stores (used by list comps)
396 eval('[locals() for i in (2,3)]', g, d)
Raymond Hettingerf80680d2008-02-06 00:07:11 +0000397 eval('[locals() for i in (2,3)]', g, collections.UserDict())
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000398
399 class SpreadSheet:
400 "Sample application showing nested, calculated lookups."
401 _cells = {}
402 def __setitem__(self, key, formula):
403 self._cells[key] = formula
Thomas Wouters73e5a5b2006-06-08 15:35:45 +0000404 def __getitem__(self, key):
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000405 return eval(self._cells[key], globals(), self)
406
407 ss = SpreadSheet()
408 ss['a1'] = '5'
409 ss['a2'] = 'a1*6'
410 ss['a3'] = 'a2*7'
411 self.assertEqual(ss['a3'], 210)
412
Raymond Hettinger2a7dede2004-08-07 04:55:30 +0000413 # Verify that dir() catches a non-list returned by eval
414 # SF bug #1004669
415 class C:
416 def __getitem__(self, item):
417 raise KeyError(item)
Guido van Rossumcd70eee2007-02-11 18:53:00 +0000418 def keys(self):
419 return 1 # used to be 'a' but that's no longer an error
Raymond Hettinger2a7dede2004-08-07 04:55:30 +0000420 self.assertRaises(TypeError, eval, 'dir()', globals(), C())
421
Georg Brandl7cae87c2006-09-06 06:51:57 +0000422 def test_exec(self):
423 g = {}
424 exec('z = 1', g)
425 if '__builtins__' in g:
426 del g['__builtins__']
427 self.assertEqual(g, {'z': 1})
428
Guido van Rossumef87d6e2007-05-02 19:09:54 +0000429 exec('z = 1+1', g)
Georg Brandl7cae87c2006-09-06 06:51:57 +0000430 if '__builtins__' in g:
431 del g['__builtins__']
432 self.assertEqual(g, {'z': 2})
433 g = {}
434 l = {}
435
Brett Cannon77628992010-03-20 20:59:33 +0000436 with check_warnings():
437 warnings.filterwarnings("ignore", "global statement",
438 module="<string>")
439 exec('global a; a = 1; b = 2', g, l)
Georg Brandl7cae87c2006-09-06 06:51:57 +0000440 if '__builtins__' in g:
441 del g['__builtins__']
442 if '__builtins__' in l:
443 del l['__builtins__']
444 self.assertEqual((g, l), ({'a': 1}, {'b': 2}))
445
Amaury Forgeot d'Arc9ed77352008-04-04 23:25:27 +0000446 def test_exec_redirected(self):
447 savestdout = sys.stdout
448 sys.stdout = None # Whatever that cannot flush()
449 try:
450 # Used to raise SystemError('error return without exception set')
451 exec('a')
452 except NameError:
453 pass
454 finally:
455 sys.stdout = savestdout
456
Walter Dörwald919497e2003-01-19 16:23:59 +0000457 def test_filter(self):
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000458 self.assertEqual(list(filter(lambda c: 'a' <= c <= 'z', 'Hello World')), list('elloorld'))
459 self.assertEqual(list(filter(None, [1, 'hello', [], [3], '', None, 9, 0])), [1, 'hello', [3], 9])
460 self.assertEqual(list(filter(lambda x: x > 0, [1, -3, 9, 0, 2])), [1, 9, 2])
461 self.assertEqual(list(filter(None, Squares(10))), [1, 4, 9, 16, 25, 36, 49, 64, 81])
462 self.assertEqual(list(filter(lambda x: x%2, Squares(10))), [1, 9, 25, 49, 81])
Walter Dörwald919497e2003-01-19 16:23:59 +0000463 def identity(item):
464 return 1
465 filter(identity, Squares(5))
466 self.assertRaises(TypeError, filter)
467 class BadSeq(object):
Tim Petersf2715e02003-02-19 02:35:07 +0000468 def __getitem__(self, index):
469 if index<4:
470 return 42
471 raise ValueError
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000472 self.assertRaises(ValueError, list, filter(lambda x: x, BadSeq()))
Walter Dörwald919497e2003-01-19 16:23:59 +0000473 def badfunc():
474 pass
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000475 self.assertRaises(TypeError, list, filter(badfunc, range(5)))
Walter Dörwald919497e2003-01-19 16:23:59 +0000476
Walter Dörwaldbf517072003-01-27 15:57:14 +0000477 # test bltinmodule.c::filtertuple()
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000478 self.assertEqual(list(filter(None, (1, 2))), [1, 2])
479 self.assertEqual(list(filter(lambda x: x>=3, (1, 2, 3, 4))), [3, 4])
480 self.assertRaises(TypeError, list, filter(42, (1, 2)))
Walter Dörwaldc3da83f2003-02-04 20:24:45 +0000481
Walter Dörwald919497e2003-01-19 16:23:59 +0000482 def test_getattr(self):
483 import sys
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000484 self.assertTrue(getattr(sys, 'stdout') is sys.stdout)
Walter Dörwald919497e2003-01-19 16:23:59 +0000485 self.assertRaises(TypeError, getattr, sys, 1)
486 self.assertRaises(TypeError, getattr, sys, 1, "foo")
487 self.assertRaises(TypeError, getattr)
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000488 self.assertRaises(AttributeError, getattr, sys, chr(sys.maxunicode))
Victor Stinner624dbf62010-03-12 17:17:58 +0000489 # unicode surrogates are not encodable to the default encoding (utf8)
490 self.assertRaises(AttributeError, getattr, 1, "\uDAD1\uD51E")
Walter Dörwald919497e2003-01-19 16:23:59 +0000491
492 def test_hasattr(self):
493 import sys
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000494 self.assertTrue(hasattr(sys, 'stdout'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000495 self.assertRaises(TypeError, hasattr, sys, 1)
496 self.assertRaises(TypeError, hasattr)
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000497 self.assertEqual(False, hasattr(sys, chr(sys.maxunicode)))
Walter Dörwald919497e2003-01-19 16:23:59 +0000498
Alexandre Vassalottieca20b62008-05-16 02:54:33 +0000499 # Check that hasattr allows SystemExit and KeyboardInterrupts by
500 class A:
501 def __getattr__(self, what):
502 raise KeyboardInterrupt
503 self.assertRaises(KeyboardInterrupt, hasattr, A(), "b")
504 class B:
505 def __getattr__(self, what):
506 raise SystemExit
507 self.assertRaises(SystemExit, hasattr, B(), "b")
508
Walter Dörwald919497e2003-01-19 16:23:59 +0000509 def test_hash(self):
510 hash(None)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000511 self.assertEqual(hash(1), hash(1))
Walter Dörwald919497e2003-01-19 16:23:59 +0000512 self.assertEqual(hash(1), hash(1.0))
513 hash('spam')
Guido van Rossum98297ee2007-11-06 21:34:58 +0000514 self.assertEqual(hash('spam'), hash(b'spam'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000515 hash((0,1,2,3))
516 def f(): pass
517 self.assertRaises(TypeError, hash, [])
518 self.assertRaises(TypeError, hash, {})
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000519 # Bug 1536021: Allow hash to return long objects
520 class X:
521 def __hash__(self):
522 return 2**100
523 self.assertEquals(type(hash(X())), int)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000524 class Z(int):
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000525 def __hash__(self):
526 return self
Guido van Rossume2a383d2007-01-15 16:59:06 +0000527 self.assertEquals(hash(Z(42)), hash(42))
Walter Dörwald919497e2003-01-19 16:23:59 +0000528
529 def test_hex(self):
530 self.assertEqual(hex(16), '0x10')
Guido van Rossume2a383d2007-01-15 16:59:06 +0000531 self.assertEqual(hex(-16), '-0x10')
Walter Dörwald919497e2003-01-19 16:23:59 +0000532 self.assertRaises(TypeError, hex, {})
533
534 def test_id(self):
535 id(None)
536 id(1)
Walter Dörwald919497e2003-01-19 16:23:59 +0000537 id(1.0)
538 id('spam')
539 id((0,1,2,3))
540 id([0,1,2,3])
541 id({'spam': 1, 'eggs': 2, 'ham': 3})
542
Guido van Rossuma88a0332007-02-26 16:59:55 +0000543 # Test input() later, alphabetized as if it were raw_input
544
Walter Dörwald919497e2003-01-19 16:23:59 +0000545 def test_iter(self):
546 self.assertRaises(TypeError, iter)
547 self.assertRaises(TypeError, iter, 42, 42)
548 lists = [("1", "2"), ["1", "2"], "12"]
Walter Dörwald919497e2003-01-19 16:23:59 +0000549 for l in lists:
550 i = iter(l)
Georg Brandla18af4e2007-04-21 15:47:16 +0000551 self.assertEqual(next(i), '1')
552 self.assertEqual(next(i), '2')
553 self.assertRaises(StopIteration, next, i)
Walter Dörwald919497e2003-01-19 16:23:59 +0000554
555 def test_isinstance(self):
556 class C:
557 pass
558 class D(C):
559 pass
560 class E:
561 pass
562 c = C()
563 d = D()
564 e = E()
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000565 self.assertTrue(isinstance(c, C))
566 self.assertTrue(isinstance(d, C))
567 self.assertTrue(not isinstance(e, C))
568 self.assertTrue(not isinstance(c, D))
569 self.assertTrue(not isinstance('foo', E))
Walter Dörwald919497e2003-01-19 16:23:59 +0000570 self.assertRaises(TypeError, isinstance, E, 'foo')
571 self.assertRaises(TypeError, isinstance)
572
573 def test_issubclass(self):
574 class C:
575 pass
576 class D(C):
577 pass
578 class E:
579 pass
580 c = C()
581 d = D()
582 e = E()
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000583 self.assertTrue(issubclass(D, C))
584 self.assertTrue(issubclass(C, C))
585 self.assertTrue(not issubclass(C, D))
Walter Dörwald919497e2003-01-19 16:23:59 +0000586 self.assertRaises(TypeError, issubclass, 'foo', E)
587 self.assertRaises(TypeError, issubclass, E, 'foo')
588 self.assertRaises(TypeError, issubclass)
589
590 def test_len(self):
591 self.assertEqual(len('123'), 3)
592 self.assertEqual(len(()), 0)
593 self.assertEqual(len((1, 2, 3, 4)), 4)
594 self.assertEqual(len([1, 2, 3, 4]), 4)
595 self.assertEqual(len({}), 0)
596 self.assertEqual(len({'a':1, 'b': 2}), 2)
597 class BadSeq:
598 def __len__(self):
599 raise ValueError
600 self.assertRaises(ValueError, len, BadSeq())
Benjamin Petersonee1ae7c2009-02-08 21:07:20 +0000601 class InvalidLen:
602 def __len__(self):
603 return None
604 self.assertRaises(TypeError, len, InvalidLen())
605 class FloatLen:
606 def __len__(self):
607 return 4.5
608 self.assertRaises(TypeError, len, FloatLen())
609 class HugeLen:
610 def __len__(self):
611 return sys.maxsize + 1
612 self.assertRaises(OverflowError, len, HugeLen())
Mark Dickinsonfb3dc942010-05-25 19:06:24 +0000613 class NoLenMethod(object): pass
614 self.assertRaises(TypeError, len, NoLenMethod())
Walter Dörwald919497e2003-01-19 16:23:59 +0000615
Walter Dörwald919497e2003-01-19 16:23:59 +0000616 def test_map(self):
617 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000618 list(map(lambda x: x*x, range(1,4))),
Walter Dörwald919497e2003-01-19 16:23:59 +0000619 [1, 4, 9]
620 )
621 try:
622 from math import sqrt
623 except ImportError:
624 def sqrt(x):
625 return pow(x, 0.5)
626 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000627 list(map(lambda x: list(map(sqrt, x)), [[16, 4], [81, 9]])),
Walter Dörwald919497e2003-01-19 16:23:59 +0000628 [[4.0, 2.0], [9.0, 3.0]]
629 )
630 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000631 list(map(lambda x, y: x+y, [1,3,2], [9,1,4])),
Walter Dörwald919497e2003-01-19 16:23:59 +0000632 [10, 4, 6]
633 )
634
635 def plus(*v):
636 accu = 0
637 for i in v: accu = accu + i
638 return accu
639 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000640 list(map(plus, [1, 3, 7])),
Walter Dörwald919497e2003-01-19 16:23:59 +0000641 [1, 3, 7]
642 )
643 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000644 list(map(plus, [1, 3, 7], [4, 9, 2])),
Walter Dörwald919497e2003-01-19 16:23:59 +0000645 [1+4, 3+9, 7+2]
646 )
647 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000648 list(map(plus, [1, 3, 7], [4, 9, 2], [1, 1, 0])),
Walter Dörwald919497e2003-01-19 16:23:59 +0000649 [1+4+1, 3+9+1, 7+2+0]
650 )
651 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000652 list(map(int, Squares(10))),
Walter Dörwald919497e2003-01-19 16:23:59 +0000653 [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
654 )
Guido van Rossum47b9ff62006-08-24 00:41:19 +0000655 def Max(a, b):
656 if a is None:
657 return b
658 if b is None:
659 return a
660 return max(a, b)
Walter Dörwald919497e2003-01-19 16:23:59 +0000661 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000662 list(map(Max, Squares(3), Squares(2))),
663 [0, 1]
Walter Dörwald919497e2003-01-19 16:23:59 +0000664 )
665 self.assertRaises(TypeError, map)
666 self.assertRaises(TypeError, map, lambda x: x, 42)
Walter Dörwald919497e2003-01-19 16:23:59 +0000667 class BadSeq:
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000668 def __iter__(self):
Walter Dörwald919497e2003-01-19 16:23:59 +0000669 raise ValueError
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000670 yield None
671 self.assertRaises(ValueError, list, map(lambda x: x, BadSeq()))
Neal Norwitzfcf44352005-11-27 20:37:43 +0000672 def badfunc(x):
673 raise RuntimeError
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000674 self.assertRaises(RuntimeError, list, map(badfunc, range(5)))
Walter Dörwald919497e2003-01-19 16:23:59 +0000675
676 def test_max(self):
677 self.assertEqual(max('123123'), '3')
678 self.assertEqual(max(1, 2, 3), 3)
679 self.assertEqual(max((1, 2, 3, 1, 2, 3)), 3)
680 self.assertEqual(max([1, 2, 3, 1, 2, 3]), 3)
681
Guido van Rossume2a383d2007-01-15 16:59:06 +0000682 self.assertEqual(max(1, 2, 3.0), 3.0)
683 self.assertEqual(max(1, 2.0, 3), 3)
684 self.assertEqual(max(1.0, 2, 3), 3)
Walter Dörwald919497e2003-01-19 16:23:59 +0000685
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +0000686 for stmt in (
687 "max(key=int)", # no args
688 "max(1, key=int)", # single arg not iterable
689 "max(1, 2, keystone=int)", # wrong keyword
690 "max(1, 2, key=int, abc=int)", # two many keywords
691 "max(1, 2, key=1)", # keyfunc is not callable
692 ):
Tim Peters7f061872004-12-07 21:17:46 +0000693 try:
Georg Brandl7cae87c2006-09-06 06:51:57 +0000694 exec(stmt, globals())
Tim Peters7f061872004-12-07 21:17:46 +0000695 except TypeError:
696 pass
697 else:
698 self.fail(stmt)
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +0000699
700 self.assertEqual(max((1,), key=neg), 1) # one elem iterable
701 self.assertEqual(max((1,2), key=neg), 1) # two elem iterable
702 self.assertEqual(max(1, 2, key=neg), 1) # two elems
703
704 data = [random.randrange(200) for i in range(100)]
705 keys = dict((elem, random.randrange(50)) for elem in data)
706 f = keys.__getitem__
707 self.assertEqual(max(data, key=f),
708 sorted(reversed(data), key=f)[-1])
709
Walter Dörwald919497e2003-01-19 16:23:59 +0000710 def test_min(self):
711 self.assertEqual(min('123123'), '1')
712 self.assertEqual(min(1, 2, 3), 1)
713 self.assertEqual(min((1, 2, 3, 1, 2, 3)), 1)
714 self.assertEqual(min([1, 2, 3, 1, 2, 3]), 1)
715
Guido van Rossume2a383d2007-01-15 16:59:06 +0000716 self.assertEqual(min(1, 2, 3.0), 1)
717 self.assertEqual(min(1, 2.0, 3), 1)
718 self.assertEqual(min(1.0, 2, 3), 1.0)
Walter Dörwald919497e2003-01-19 16:23:59 +0000719
720 self.assertRaises(TypeError, min)
721 self.assertRaises(TypeError, min, 42)
722 self.assertRaises(ValueError, min, ())
723 class BadSeq:
724 def __getitem__(self, index):
725 raise ValueError
726 self.assertRaises(ValueError, min, BadSeq())
Walter Dörwald919497e2003-01-19 16:23:59 +0000727
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +0000728 for stmt in (
729 "min(key=int)", # no args
730 "min(1, key=int)", # single arg not iterable
731 "min(1, 2, keystone=int)", # wrong keyword
732 "min(1, 2, key=int, abc=int)", # two many keywords
733 "min(1, 2, key=1)", # keyfunc is not callable
734 ):
Tim Peters7f061872004-12-07 21:17:46 +0000735 try:
Georg Brandl7cae87c2006-09-06 06:51:57 +0000736 exec(stmt, globals())
Tim Peters7f061872004-12-07 21:17:46 +0000737 except TypeError:
738 pass
739 else:
740 self.fail(stmt)
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +0000741
742 self.assertEqual(min((1,), key=neg), 1) # one elem iterable
743 self.assertEqual(min((1,2), key=neg), 2) # two elem iterable
744 self.assertEqual(min(1, 2, key=neg), 2) # two elems
745
746 data = [random.randrange(200) for i in range(100)]
747 keys = dict((elem, random.randrange(50)) for elem in data)
748 f = keys.__getitem__
749 self.assertEqual(min(data, key=f),
750 sorted(data, key=f)[0])
751
Georg Brandla18af4e2007-04-21 15:47:16 +0000752 def test_next(self):
753 it = iter(range(2))
754 self.assertEqual(next(it), 0)
755 self.assertEqual(next(it), 1)
756 self.assertRaises(StopIteration, next, it)
757 self.assertRaises(StopIteration, next, it)
758 self.assertEquals(next(it, 42), 42)
759
760 class Iter(object):
761 def __iter__(self):
762 return self
763 def __next__(self):
764 raise StopIteration
765
766 it = iter(Iter())
767 self.assertEquals(next(it, 42), 42)
768 self.assertRaises(StopIteration, next, it)
769
770 def gen():
771 yield 1
772 return
773
774 it = gen()
775 self.assertEquals(next(it), 1)
776 self.assertRaises(StopIteration, next, it)
777 self.assertEquals(next(it, 42), 42)
778
Walter Dörwald919497e2003-01-19 16:23:59 +0000779 def test_oct(self):
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000780 self.assertEqual(oct(100), '0o144')
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000781 self.assertEqual(oct(-100), '-0o144')
Walter Dörwald919497e2003-01-19 16:23:59 +0000782 self.assertRaises(TypeError, oct, ())
783
784 def write_testfile(self):
Guido van Rossuma88a0332007-02-26 16:59:55 +0000785 # NB the first 4 lines are also used to test input, below
Walter Dörwald919497e2003-01-19 16:23:59 +0000786 fp = open(TESTFN, 'w')
787 try:
788 fp.write('1+1\n')
Walter Dörwald919497e2003-01-19 16:23:59 +0000789 fp.write('The quick brown fox jumps over the lazy dog')
790 fp.write('.\n')
791 fp.write('Dear John\n')
792 fp.write('XXX'*100)
793 fp.write('YYY'*100)
794 finally:
795 fp.close()
796
797 def test_open(self):
798 self.write_testfile()
799 fp = open(TESTFN, 'r')
800 try:
801 self.assertEqual(fp.readline(4), '1+1\n')
Walter Dörwald919497e2003-01-19 16:23:59 +0000802 self.assertEqual(fp.readline(), 'The quick brown fox jumps over the lazy dog.\n')
803 self.assertEqual(fp.readline(4), 'Dear')
804 self.assertEqual(fp.readline(100), ' John\n')
805 self.assertEqual(fp.read(300), 'XXX'*100)
806 self.assertEqual(fp.read(1000), 'YYY'*100)
807 finally:
808 fp.close()
809 unlink(TESTFN)
810
811 def test_ord(self):
812 self.assertEqual(ord(' '), 32)
813 self.assertEqual(ord('A'), 65)
814 self.assertEqual(ord('a'), 97)
Guido van Rossumf9e91c92007-05-08 21:05:48 +0000815 self.assertEqual(ord('\x80'), 128)
816 self.assertEqual(ord('\xff'), 255)
817
818 self.assertEqual(ord(b' '), 32)
819 self.assertEqual(ord(b'A'), 65)
820 self.assertEqual(ord(b'a'), 97)
821 self.assertEqual(ord(b'\x80'), 128)
822 self.assertEqual(ord(b'\xff'), 255)
823
Walter Dörwald1f5947b2007-05-22 16:52:54 +0000824 self.assertEqual(ord(chr(sys.maxunicode)), sys.maxunicode)
Walter Dörwald919497e2003-01-19 16:23:59 +0000825 self.assertRaises(TypeError, ord, 42)
Walter Dörwald919497e2003-01-19 16:23:59 +0000826
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000827 self.assertEqual(ord(chr(0x10FFFF)), 0x10FFFF)
828 self.assertEqual(ord("\U0000FFFF"), 0x0000FFFF)
829 self.assertEqual(ord("\U00010000"), 0x00010000)
830 self.assertEqual(ord("\U00010001"), 0x00010001)
831 self.assertEqual(ord("\U000FFFFE"), 0x000FFFFE)
832 self.assertEqual(ord("\U000FFFFF"), 0x000FFFFF)
833 self.assertEqual(ord("\U00100000"), 0x00100000)
834 self.assertEqual(ord("\U00100001"), 0x00100001)
835 self.assertEqual(ord("\U0010FFFE"), 0x0010FFFE)
836 self.assertEqual(ord("\U0010FFFF"), 0x0010FFFF)
837
Walter Dörwald919497e2003-01-19 16:23:59 +0000838 def test_pow(self):
839 self.assertEqual(pow(0,0), 1)
840 self.assertEqual(pow(0,1), 0)
841 self.assertEqual(pow(1,0), 1)
842 self.assertEqual(pow(1,1), 1)
843
844 self.assertEqual(pow(2,0), 1)
845 self.assertEqual(pow(2,10), 1024)
846 self.assertEqual(pow(2,20), 1024*1024)
847 self.assertEqual(pow(2,30), 1024*1024*1024)
848
849 self.assertEqual(pow(-2,0), 1)
850 self.assertEqual(pow(-2,1), -2)
851 self.assertEqual(pow(-2,2), 4)
852 self.assertEqual(pow(-2,3), -8)
853
Walter Dörwald919497e2003-01-19 16:23:59 +0000854 self.assertAlmostEqual(pow(0.,0), 1.)
855 self.assertAlmostEqual(pow(0.,1), 0.)
856 self.assertAlmostEqual(pow(1.,0), 1.)
857 self.assertAlmostEqual(pow(1.,1), 1.)
858
859 self.assertAlmostEqual(pow(2.,0), 1.)
860 self.assertAlmostEqual(pow(2.,10), 1024.)
861 self.assertAlmostEqual(pow(2.,20), 1024.*1024.)
862 self.assertAlmostEqual(pow(2.,30), 1024.*1024.*1024.)
863
864 self.assertAlmostEqual(pow(-2.,0), 1.)
865 self.assertAlmostEqual(pow(-2.,1), -2.)
866 self.assertAlmostEqual(pow(-2.,2), 4.)
867 self.assertAlmostEqual(pow(-2.,3), -8.)
868
Mark Dickinson5c2db372009-12-05 20:28:34 +0000869 for x in 2, 2.0:
870 for y in 10, 10.0:
871 for z in 1000, 1000.0:
Walter Dörwald919497e2003-01-19 16:23:59 +0000872 if isinstance(x, float) or \
873 isinstance(y, float) or \
874 isinstance(z, float):
875 self.assertRaises(TypeError, pow, x, y, z)
876 else:
877 self.assertAlmostEqual(pow(x, y, z), 24.0)
878
Jeffrey Yasskin3404b3c2007-09-07 15:15:49 +0000879 self.assertAlmostEqual(pow(-1, 0.5), 1j)
880 self.assertAlmostEqual(pow(-1, 1/3), 0.5 + 0.8660254037844386j)
881
Walter Dörwald919497e2003-01-19 16:23:59 +0000882 self.assertRaises(TypeError, pow, -1, -2, 3)
883 self.assertRaises(ValueError, pow, 1, 2, 0)
Walter Dörwald919497e2003-01-19 16:23:59 +0000884
885 self.assertRaises(TypeError, pow)
886
887 def test_range(self):
Guido van Rossum805365e2007-05-07 22:24:25 +0000888 self.assertEqual(list(range(3)), [0, 1, 2])
889 self.assertEqual(list(range(1, 5)), [1, 2, 3, 4])
890 self.assertEqual(list(range(0)), [])
891 self.assertEqual(list(range(-3)), [])
892 self.assertEqual(list(range(1, 10, 3)), [1, 4, 7])
893 #self.assertEqual(list(range(5, -5, -3)), [5, 2, -1, -4])
Walter Dörwald919497e2003-01-19 16:23:59 +0000894
Mark Dickinsoneb36d312009-06-24 18:36:46 +0000895 #issue 6334: the internal stored range length was being
896 #computed incorrectly in some cases involving large arguments.
897 x = range(10**20, 10**20+10, 3)
898 self.assertEqual(len(x), 4)
899 self.assertEqual(len(list(x)), 4)
900
901 x = range(10**20+10, 10**20, 3)
902 self.assertEqual(len(x), 0)
903 self.assertEqual(len(list(x)), 0)
904
905 x = range(10**20, 10**20+10, -3)
906 self.assertEqual(len(x), 0)
907 self.assertEqual(len(list(x)), 0)
908
909 x = range(10**20+10, 10**20, -3)
910 self.assertEqual(len(x), 4)
911 self.assertEqual(len(list(x)), 4)
912
Guido van Rossumefbbb1c2003-04-11 18:43:06 +0000913 # Now test range() with longs
Guido van Rossum805365e2007-05-07 22:24:25 +0000914 self.assertEqual(list(range(-2**100)), [])
915 self.assertEqual(list(range(0, -2**100)), [])
916 self.assertEqual(list(range(0, 2**100, -1)), [])
917 self.assertEqual(list(range(0, 2**100, -1)), [])
Guido van Rossumefbbb1c2003-04-11 18:43:06 +0000918
Christian Heimesa37d4c62007-12-04 23:02:19 +0000919 a = int(10 * sys.maxsize)
920 b = int(100 * sys.maxsize)
921 c = int(50 * sys.maxsize)
Guido van Rossumefbbb1c2003-04-11 18:43:06 +0000922
Guido van Rossum805365e2007-05-07 22:24:25 +0000923 self.assertEqual(list(range(a, a+2)), [a, a+1])
924 self.assertEqual(list(range(a+2, a, -1)), [a+2, a+1])
925 self.assertEqual(list(range(a+4, a, -2)), [a+4, a+2])
Guido van Rossumefbbb1c2003-04-11 18:43:06 +0000926
Guido van Rossum805365e2007-05-07 22:24:25 +0000927 seq = list(range(a, b, c))
Benjamin Peterson577473f2010-01-19 00:09:57 +0000928 self.assertIn(a, seq)
929 self.assertNotIn(b, seq)
Guido van Rossumefbbb1c2003-04-11 18:43:06 +0000930 self.assertEqual(len(seq), 2)
931
Guido van Rossum805365e2007-05-07 22:24:25 +0000932 seq = list(range(b, a, -c))
Benjamin Peterson577473f2010-01-19 00:09:57 +0000933 self.assertIn(b, seq)
934 self.assertNotIn(a, seq)
Guido van Rossumefbbb1c2003-04-11 18:43:06 +0000935 self.assertEqual(len(seq), 2)
936
Guido van Rossum805365e2007-05-07 22:24:25 +0000937 seq = list(range(-a, -b, -c))
Benjamin Peterson577473f2010-01-19 00:09:57 +0000938 self.assertIn(-a, seq)
939 self.assertNotIn(-b, seq)
Guido van Rossumefbbb1c2003-04-11 18:43:06 +0000940 self.assertEqual(len(seq), 2)
941
Walter Dörwald919497e2003-01-19 16:23:59 +0000942 self.assertRaises(TypeError, range)
943 self.assertRaises(TypeError, range, 1, 2, 3, 4)
944 self.assertRaises(ValueError, range, 1, 2, 0)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000945 self.assertRaises(ValueError, range, a, a + 1, int(0))
Neal Norwitzfcf44352005-11-27 20:37:43 +0000946
Mark Dickinson5c2db372009-12-05 20:28:34 +0000947 """ XXX(nnorwitz):
Neal Norwitzfcf44352005-11-27 20:37:43 +0000948 class badzero(int):
Guido van Rossum47b9ff62006-08-24 00:41:19 +0000949 def __eq__(self, other):
Neal Norwitzfcf44352005-11-27 20:37:43 +0000950 raise RuntimeError
Guido van Rossum47b9ff62006-08-24 00:41:19 +0000951 __ne__ = __lt__ = __gt__ = __le__ = __ge__ = __eq__
952
953 # XXX This won't (but should!) raise RuntimeError if a is an int...
Neal Norwitzfcf44352005-11-27 20:37:43 +0000954 self.assertRaises(RuntimeError, range, a, a + 1, badzero(1))
Guido van Rossum805365e2007-05-07 22:24:25 +0000955 """
Walter Dörwald919497e2003-01-19 16:23:59 +0000956
Mark Dickinson85b53532010-05-05 22:39:58 +0000957 # Reject floats.
958 self.assertRaises(TypeError, range, 1., 1., 1.)
Tim Peters299b3df2003-04-15 14:40:03 +0000959 self.assertRaises(TypeError, range, 1e100, 1e101, 1e101)
Guido van Rossumefbbb1c2003-04-11 18:43:06 +0000960
Walter Dörwald357981e2003-04-15 18:59:28 +0000961 self.assertRaises(TypeError, range, 0, "spam")
962 self.assertRaises(TypeError, range, 0, 42, "spam")
963
Christian Heimesa37d4c62007-12-04 23:02:19 +0000964 #NEAL self.assertRaises(OverflowError, range, -sys.maxsize, sys.maxsize)
965 #NEAL self.assertRaises(OverflowError, range, 0, 2*sys.maxsize)
Guido van Rossum805365e2007-05-07 22:24:25 +0000966
Christian Heimesa37d4c62007-12-04 23:02:19 +0000967 self.assertRaises(OverflowError, len, range(0, sys.maxsize**10))
Walter Dörwald357981e2003-04-15 18:59:28 +0000968
Mark Dickinson85b53532010-05-05 22:39:58 +0000969 bignum = 2*sys.maxsize
970 smallnum = 42
971
972 # User-defined class with an __index__ method
973 class I:
974 def __init__(self, n):
975 self.n = int(n)
976 def __index__(self):
977 return self.n
978 self.assertEqual(list(range(I(bignum), I(bignum + 1))), [bignum])
979 self.assertEqual(list(range(I(smallnum), I(smallnum + 1))), [smallnum])
980
981 # User-defined class with a failing __index__ method
982 class IX:
983 def __index__(self):
984 raise RuntimeError
985 self.assertRaises(RuntimeError, range, IX())
986
987 # User-defined class with an invalid __index__ method
988 class IN:
989 def __index__(self):
990 return "not a number"
991
992 self.assertRaises(TypeError, range, IN())
993 # Exercise various combinations of bad arguments, to check
994 # refcounting logic
995 self.assertRaises(TypeError, range, 0.0)
996
997 self.assertRaises(TypeError, range, 0, 0.0)
998 self.assertRaises(TypeError, range, 0.0, 0)
999 self.assertRaises(TypeError, range, 0.0, 0.0)
1000
1001 self.assertRaises(TypeError, range, 0, 0, 1.0)
1002 self.assertRaises(TypeError, range, 0, 0.0, 1)
1003 self.assertRaises(TypeError, range, 0, 0.0, 1.0)
1004 self.assertRaises(TypeError, range, 0.0, 0, 1)
1005 self.assertRaises(TypeError, range, 0.0, 0, 1.0)
1006 self.assertRaises(TypeError, range, 0.0, 0.0, 1)
1007 self.assertRaises(TypeError, range, 0.0, 0.0, 1.0)
1008
Guido van Rossuma88a0332007-02-26 16:59:55 +00001009 def test_input(self):
1010 self.write_testfile()
1011 fp = open(TESTFN, 'r')
1012 savestdin = sys.stdin
1013 savestdout = sys.stdout # Eats the echo
1014 try:
1015 sys.stdin = fp
1016 sys.stdout = BitBucket()
1017 self.assertEqual(input(), "1+1")
Guido van Rossuma88a0332007-02-26 16:59:55 +00001018 self.assertEqual(input(), 'The quick brown fox jumps over the lazy dog.')
1019 self.assertEqual(input('testing\n'), 'Dear John')
1020
1021 # SF 1535165: don't segfault on closed stdin
1022 # sys.stdout must be a regular file for triggering
1023 sys.stdout = savestdout
1024 sys.stdin.close()
1025 self.assertRaises(ValueError, input)
1026
1027 sys.stdout = BitBucket()
Guido van Rossum34d19282007-08-09 01:03:29 +00001028 sys.stdin = io.StringIO("NULL\0")
Guido van Rossuma88a0332007-02-26 16:59:55 +00001029 self.assertRaises(TypeError, input, 42, 42)
Guido van Rossum34d19282007-08-09 01:03:29 +00001030 sys.stdin = io.StringIO(" 'whitespace'")
Guido van Rossuma88a0332007-02-26 16:59:55 +00001031 self.assertEqual(input(), " 'whitespace'")
Guido van Rossum34d19282007-08-09 01:03:29 +00001032 sys.stdin = io.StringIO()
Guido van Rossuma88a0332007-02-26 16:59:55 +00001033 self.assertRaises(EOFError, input)
1034
1035 del sys.stdout
1036 self.assertRaises(RuntimeError, input, 'prompt')
1037 del sys.stdin
1038 self.assertRaises(RuntimeError, input, 'prompt')
1039 finally:
1040 sys.stdin = savestdin
1041 sys.stdout = savestdout
1042 fp.close()
1043 unlink(TESTFN)
1044
Walter Dörwald919497e2003-01-19 16:23:59 +00001045 def test_repr(self):
1046 self.assertEqual(repr(''), '\'\'')
1047 self.assertEqual(repr(0), '0')
Walter Dörwald919497e2003-01-19 16:23:59 +00001048 self.assertEqual(repr(()), '()')
1049 self.assertEqual(repr([]), '[]')
1050 self.assertEqual(repr({}), '{}')
1051 a = []
1052 a.append(a)
1053 self.assertEqual(repr(a), '[[...]]')
1054 a = {}
1055 a[0] = a
1056 self.assertEqual(repr(a), '{0: {...}}')
1057
1058 def test_round(self):
1059 self.assertEqual(round(0.0), 0.0)
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001060 self.assertEqual(type(round(0.0)), int)
Walter Dörwald919497e2003-01-19 16:23:59 +00001061 self.assertEqual(round(1.0), 1.0)
1062 self.assertEqual(round(10.0), 10.0)
1063 self.assertEqual(round(1000000000.0), 1000000000.0)
1064 self.assertEqual(round(1e20), 1e20)
1065
1066 self.assertEqual(round(-1.0), -1.0)
1067 self.assertEqual(round(-10.0), -10.0)
1068 self.assertEqual(round(-1000000000.0), -1000000000.0)
1069 self.assertEqual(round(-1e20), -1e20)
1070
1071 self.assertEqual(round(0.1), 0.0)
1072 self.assertEqual(round(1.1), 1.0)
1073 self.assertEqual(round(10.1), 10.0)
1074 self.assertEqual(round(1000000000.1), 1000000000.0)
1075
1076 self.assertEqual(round(-1.1), -1.0)
1077 self.assertEqual(round(-10.1), -10.0)
1078 self.assertEqual(round(-1000000000.1), -1000000000.0)
1079
1080 self.assertEqual(round(0.9), 1.0)
1081 self.assertEqual(round(9.9), 10.0)
1082 self.assertEqual(round(999999999.9), 1000000000.0)
1083
1084 self.assertEqual(round(-0.9), -1.0)
1085 self.assertEqual(round(-9.9), -10.0)
1086 self.assertEqual(round(-999999999.9), -1000000000.0)
1087
1088 self.assertEqual(round(-8.0, -1), -10.0)
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001089 self.assertEqual(type(round(-8.0, -1)), float)
1090
1091 self.assertEqual(type(round(-8.0, 0)), float)
1092 self.assertEqual(type(round(-8.0, 1)), float)
1093
1094 # Check even / odd rounding behaviour
1095 self.assertEqual(round(5.5), 6)
1096 self.assertEqual(round(6.5), 6)
1097 self.assertEqual(round(-5.5), -6)
1098 self.assertEqual(round(-6.5), -6)
1099
1100 # Check behavior on ints
1101 self.assertEqual(round(0), 0)
1102 self.assertEqual(round(8), 8)
1103 self.assertEqual(round(-8), -8)
1104 self.assertEqual(type(round(0)), int)
Mark Dickinson1124e712009-01-28 21:25:58 +00001105 self.assertEqual(type(round(-8, -1)), int)
1106 self.assertEqual(type(round(-8, 0)), int)
1107 self.assertEqual(type(round(-8, 1)), int)
Walter Dörwald919497e2003-01-19 16:23:59 +00001108
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001109 # test new kwargs
1110 self.assertEqual(round(number=-8.0, ndigits=-1), -10.0)
1111
Walter Dörwald919497e2003-01-19 16:23:59 +00001112 self.assertRaises(TypeError, round)
1113
Alex Martelliae211f92007-08-22 23:21:33 +00001114 # test generic rounding delegation for reals
1115 class TestRound:
1116 def __round__(self):
1117 return 23
1118
1119 class TestNoRound:
1120 pass
1121
1122 self.assertEqual(round(TestRound()), 23)
1123
1124 self.assertRaises(TypeError, round, 1, 2, 3)
1125 self.assertRaises(TypeError, round, TestNoRound())
1126
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001127 t = TestNoRound()
1128 t.__round__ = lambda *args: args
1129 self.assertRaises(TypeError, round, t)
1130 self.assertRaises(TypeError, round, t, 0)
1131
Mark Dickinsonad731b92009-11-09 17:12:30 +00001132 # Some versions of glibc for alpha have a bug that affects
1133 # float -> integer rounding (floor, ceil, rint, round) for
1134 # values in the range [2**52, 2**53). See:
1135 #
1136 # http://sources.redhat.com/bugzilla/show_bug.cgi?id=5350
1137 #
1138 # We skip this test on Linux/alpha if it would fail.
1139 linux_alpha = (platform.system().startswith('Linux') and
1140 platform.machine().startswith('alpha'))
1141 system_round_bug = round(5e15+1) != 5e15+1
1142 @unittest.skipIf(linux_alpha and system_round_bug,
1143 "test will fail; failure is probably due to a "
1144 "buggy system round function")
1145 def test_round_large(self):
1146 # Issue #1869: integral floats should remain unchanged
1147 self.assertEqual(round(5e15-1), 5e15-1)
1148 self.assertEqual(round(5e15), 5e15)
1149 self.assertEqual(round(5e15+1), 5e15+1)
1150 self.assertEqual(round(5e15+2), 5e15+2)
1151 self.assertEqual(round(5e15+3), 5e15+3)
1152
Walter Dörwald919497e2003-01-19 16:23:59 +00001153 def test_setattr(self):
Tim Petersf2715e02003-02-19 02:35:07 +00001154 setattr(sys, 'spam', 1)
1155 self.assertEqual(sys.spam, 1)
1156 self.assertRaises(TypeError, setattr, sys, 1, 'spam')
1157 self.assertRaises(TypeError, setattr)
Walter Dörwald919497e2003-01-19 16:23:59 +00001158
Walter Dörwald919497e2003-01-19 16:23:59 +00001159
Alex Martellia70b1912003-04-22 08:12:33 +00001160 def test_sum(self):
1161 self.assertEqual(sum([]), 0)
Guido van Rossum805365e2007-05-07 22:24:25 +00001162 self.assertEqual(sum(list(range(2,8))), 27)
1163 self.assertEqual(sum(iter(list(range(2,8)))), 27)
Alex Martellia70b1912003-04-22 08:12:33 +00001164 self.assertEqual(sum(Squares(10)), 285)
1165 self.assertEqual(sum(iter(Squares(10))), 285)
1166 self.assertEqual(sum([[1], [2], [3]], []), [1, 2, 3])
1167
1168 self.assertRaises(TypeError, sum)
1169 self.assertRaises(TypeError, sum, 42)
1170 self.assertRaises(TypeError, sum, ['a', 'b', 'c'])
1171 self.assertRaises(TypeError, sum, ['a', 'b', 'c'], '')
1172 self.assertRaises(TypeError, sum, [[1], [2], [3]])
1173 self.assertRaises(TypeError, sum, [{2:3}])
1174 self.assertRaises(TypeError, sum, [{2:3}]*2, {2:3})
1175
1176 class BadSeq:
1177 def __getitem__(self, index):
1178 raise ValueError
1179 self.assertRaises(ValueError, sum, BadSeq())
1180
Mark Dickinson3a22b472009-10-17 21:48:16 +00001181 empty = []
1182 sum(([x] for x in range(10)), empty)
1183 self.assertEqual(empty, [])
1184
Walter Dörwald919497e2003-01-19 16:23:59 +00001185 def test_type(self):
1186 self.assertEqual(type(''), type('123'))
1187 self.assertNotEqual(type(''), type(()))
1188
Guido van Rossumfee7b932005-01-16 00:21:28 +00001189 # We don't want self in vars(), so these are static methods
1190
1191 @staticmethod
Walter Dörwald919497e2003-01-19 16:23:59 +00001192 def get_vars_f0():
1193 return vars()
Walter Dörwald919497e2003-01-19 16:23:59 +00001194
Guido van Rossumfee7b932005-01-16 00:21:28 +00001195 @staticmethod
Walter Dörwald919497e2003-01-19 16:23:59 +00001196 def get_vars_f2():
1197 BuiltinTest.get_vars_f0()
1198 a = 1
1199 b = 2
1200 return vars()
Walter Dörwald919497e2003-01-19 16:23:59 +00001201
Mark Dickinsonfb3dc942010-05-25 19:06:24 +00001202 class C_get_vars(object):
1203 def getDict(self):
1204 return {'a':2}
1205 __dict__ = property(fget=getDict)
1206
Walter Dörwald919497e2003-01-19 16:23:59 +00001207 def test_vars(self):
Raymond Hettingera690a992003-11-16 16:17:49 +00001208 self.assertEqual(set(vars()), set(dir()))
Walter Dörwald919497e2003-01-19 16:23:59 +00001209 import sys
Raymond Hettingera690a992003-11-16 16:17:49 +00001210 self.assertEqual(set(vars(sys)), set(dir(sys)))
Walter Dörwald919497e2003-01-19 16:23:59 +00001211 self.assertEqual(self.get_vars_f0(), {})
1212 self.assertEqual(self.get_vars_f2(), {'a': 1, 'b': 2})
1213 self.assertRaises(TypeError, vars, 42, 42)
1214 self.assertRaises(TypeError, vars, 42)
Mark Dickinsonfb3dc942010-05-25 19:06:24 +00001215 self.assertEqual(vars(self.C_get_vars()), {'a':2})
Walter Dörwald919497e2003-01-19 16:23:59 +00001216
1217 def test_zip(self):
1218 a = (1, 2, 3)
1219 b = (4, 5, 6)
1220 t = [(1, 4), (2, 5), (3, 6)]
Guido van Rossum801f0d72006-08-24 19:48:10 +00001221 self.assertEqual(list(zip(a, b)), t)
Walter Dörwald919497e2003-01-19 16:23:59 +00001222 b = [4, 5, 6]
Guido van Rossum801f0d72006-08-24 19:48:10 +00001223 self.assertEqual(list(zip(a, b)), t)
Walter Dörwald919497e2003-01-19 16:23:59 +00001224 b = (4, 5, 6, 7)
Guido van Rossum801f0d72006-08-24 19:48:10 +00001225 self.assertEqual(list(zip(a, b)), t)
Walter Dörwald919497e2003-01-19 16:23:59 +00001226 class I:
1227 def __getitem__(self, i):
1228 if i < 0 or i > 2: raise IndexError
1229 return i + 4
Guido van Rossum801f0d72006-08-24 19:48:10 +00001230 self.assertEqual(list(zip(a, I())), t)
1231 self.assertEqual(list(zip()), [])
1232 self.assertEqual(list(zip(*[])), [])
Walter Dörwald919497e2003-01-19 16:23:59 +00001233 self.assertRaises(TypeError, zip, None)
1234 class G:
1235 pass
1236 self.assertRaises(TypeError, zip, a, G())
1237
1238 # Make sure zip doesn't try to allocate a billion elements for the
1239 # result list when one of its arguments doesn't say how long it is.
1240 # A MemoryError is the most likely failure mode.
1241 class SequenceWithoutALength:
1242 def __getitem__(self, i):
1243 if i == 5:
1244 raise IndexError
1245 else:
1246 return i
1247 self.assertEqual(
Guido van Rossum805365e2007-05-07 22:24:25 +00001248 list(zip(SequenceWithoutALength(), range(2**30))),
Walter Dörwald919497e2003-01-19 16:23:59 +00001249 list(enumerate(range(5)))
1250 )
1251
1252 class BadSeq:
1253 def __getitem__(self, i):
1254 if i == 5:
1255 raise ValueError
1256 else:
1257 return i
Guido van Rossum801f0d72006-08-24 19:48:10 +00001258 self.assertRaises(ValueError, list, zip(BadSeq(), BadSeq()))
Walter Dörwald919497e2003-01-19 16:23:59 +00001259
Christian Heimes90c3d9b2008-02-23 13:18:03 +00001260 def test_bin(self):
1261 self.assertEqual(bin(0), '0b0')
1262 self.assertEqual(bin(1), '0b1')
1263 self.assertEqual(bin(-1), '-0b1')
1264 self.assertEqual(bin(2**65), '0b1' + '0' * 65)
1265 self.assertEqual(bin(2**65-1), '0b' + '1' * 65)
1266 self.assertEqual(bin(-(2**65)), '-0b1' + '0' * 65)
1267 self.assertEqual(bin(-(2**65-1)), '-0b' + '1' * 65)
1268
Georg Brandl953152f2009-07-22 12:03:59 +00001269 def test_bytearray_translate(self):
1270 x = bytearray(b"abc")
1271 self.assertRaises(ValueError, x.translate, b"1", 1)
1272 self.assertRaises(TypeError, x.translate, b"1"*256, 1)
1273
Raymond Hettinger64958a12003-12-17 20:43:33 +00001274class TestSorted(unittest.TestCase):
1275
1276 def test_basic(self):
Guido van Rossum805365e2007-05-07 22:24:25 +00001277 data = list(range(100))
Raymond Hettinger64958a12003-12-17 20:43:33 +00001278 copy = data[:]
1279 random.shuffle(copy)
1280 self.assertEqual(data, sorted(copy))
1281 self.assertNotEqual(data, copy)
1282
1283 data.reverse()
1284 random.shuffle(copy)
Raymond Hettinger64958a12003-12-17 20:43:33 +00001285 self.assertEqual(data, sorted(copy, key=lambda x: -x))
1286 self.assertNotEqual(data, copy)
1287 random.shuffle(copy)
1288 self.assertEqual(data, sorted(copy, reverse=1))
1289 self.assertNotEqual(data, copy)
1290
1291 def test_inputtypes(self):
1292 s = 'abracadabra'
Walter Dörwald1f5947b2007-05-22 16:52:54 +00001293 types = [list, tuple, str]
Walter Dörwald4e41a4b2005-08-03 17:09:04 +00001294 for T in types:
Raymond Hettinger64958a12003-12-17 20:43:33 +00001295 self.assertEqual(sorted(s), sorted(T(s)))
1296
Walter Dörwald1f5947b2007-05-22 16:52:54 +00001297 s = ''.join(set(s)) # unique letters only
1298 types = [str, set, frozenset, list, tuple, dict.fromkeys]
Walter Dörwald4e41a4b2005-08-03 17:09:04 +00001299 for T in types:
Raymond Hettinger64958a12003-12-17 20:43:33 +00001300 self.assertEqual(sorted(s), sorted(T(s)))
1301
1302 def test_baddecorator(self):
1303 data = 'The quick Brown fox Jumped over The lazy Dog'.split()
1304 self.assertRaises(TypeError, sorted, data, None, lambda x,y: 0)
1305
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001306def test_main(verbose=None):
1307 test_classes = (BuiltinTest, TestSorted)
1308
1309 run_unittest(*test_classes)
1310
1311 # verify reference counting
1312 if verbose and hasattr(sys, "gettotalrefcount"):
1313 import gc
1314 counts = [None] * 5
Guido van Rossum805365e2007-05-07 22:24:25 +00001315 for i in range(len(counts)):
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001316 run_unittest(*test_classes)
1317 gc.collect()
1318 counts[i] = sys.gettotalrefcount()
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001319 print(counts)
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001320
Walter Dörwald919497e2003-01-19 16:23:59 +00001321
1322if __name__ == "__main__":
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001323 test_main(verbose=True)