blob: aef5de8a11ec62f481b5ff376cc648e0292d2fba [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
9import types
10import builtins
11import random
Brett Cannon77628992010-03-20 20:59:33 +000012from test.support import fcmp, TESTFN, unlink, run_unittest, check_warnings
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +000013from operator import neg
Guido van Rossum3bead091992-01-27 17:00:37 +000014
Guido van Rossum3bead091992-01-27 17:00:37 +000015
Walter Dörwald919497e2003-01-19 16:23:59 +000016class Squares:
Guido van Rossum3bead091992-01-27 17:00:37 +000017
Walter Dörwald919497e2003-01-19 16:23:59 +000018 def __init__(self, max):
19 self.max = max
20 self.sofar = []
21
22 def __len__(self): return len(self.sofar)
23
24 def __getitem__(self, i):
25 if not 0 <= i < self.max: raise IndexError
26 n = len(self.sofar)
27 while n <= i:
28 self.sofar.append(n*n)
29 n += 1
30 return self.sofar[i]
31
32class StrSquares:
33
34 def __init__(self, max):
35 self.max = max
36 self.sofar = []
37
38 def __len__(self):
39 return len(self.sofar)
40
41 def __getitem__(self, i):
42 if not 0 <= i < self.max:
43 raise IndexError
44 n = len(self.sofar)
45 while n <= i:
46 self.sofar.append(str(n*n))
47 n += 1
48 return self.sofar[i]
49
50class BitBucket:
51 def write(self, line):
52 pass
53
Facundo Batista2336bdd2008-01-19 19:12:01 +000054test_conv_no_sign = [
Walter Dörwald919497e2003-01-19 16:23:59 +000055 ('0', 0),
56 ('1', 1),
57 ('9', 9),
58 ('10', 10),
59 ('99', 99),
60 ('100', 100),
61 ('314', 314),
62 (' 314', 314),
63 ('314 ', 314),
64 (' \t\t 314 \t\t ', 314),
Christian Heimesa37d4c62007-12-04 23:02:19 +000065 (repr(sys.maxsize), sys.maxsize),
Walter Dörwald919497e2003-01-19 16:23:59 +000066 (' 1x', ValueError),
67 (' 1 ', 1),
68 (' 1\02 ', ValueError),
69 ('', ValueError),
70 (' ', ValueError),
Walter Dörwald1f5947b2007-05-22 16:52:54 +000071 (' \t\t ', ValueError),
Guido van Rossumef87d6e2007-05-02 19:09:54 +000072 (str(b'\u0663\u0661\u0664 ','raw-unicode-escape'), 314),
Guido van Rossum84fc66d2007-05-03 17:18:26 +000073 (chr(0x200), ValueError),
Walter Dörwald919497e2003-01-19 16:23:59 +000074]
75
Facundo Batista2336bdd2008-01-19 19:12:01 +000076test_conv_sign = [
77 ('0', 0),
78 ('1', 1),
79 ('9', 9),
80 ('10', 10),
81 ('99', 99),
82 ('100', 100),
83 ('314', 314),
84 (' 314', ValueError),
85 ('314 ', 314),
86 (' \t\t 314 \t\t ', ValueError),
87 (repr(sys.maxsize), sys.maxsize),
88 (' 1x', ValueError),
89 (' 1 ', ValueError),
90 (' 1\02 ', ValueError),
91 ('', ValueError),
92 (' ', ValueError),
93 (' \t\t ', ValueError),
94 (str(b'\u0663\u0661\u0664 ','raw-unicode-escape'), 314),
95 (chr(0x200), ValueError),
96]
97
Raymond Hettinger96229b12005-03-11 06:49:40 +000098class TestFailingBool:
Jack Diederich4dafcc42006-11-28 19:15:13 +000099 def __bool__(self):
Raymond Hettinger96229b12005-03-11 06:49:40 +0000100 raise RuntimeError
101
102class TestFailingIter:
103 def __iter__(self):
104 raise RuntimeError
105
Walter Dörwald919497e2003-01-19 16:23:59 +0000106class BuiltinTest(unittest.TestCase):
107
108 def test_import(self):
109 __import__('sys')
110 __import__('time')
111 __import__('string')
Guido van Rossumd8faa362007-04-27 19:54:29 +0000112 __import__(name='sys')
113 __import__(name='time', level=0)
Walter Dörwald919497e2003-01-19 16:23:59 +0000114 self.assertRaises(ImportError, __import__, 'spamspam')
115 self.assertRaises(TypeError, __import__, 1, 2, 3, 4)
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000116 self.assertRaises(ValueError, __import__, '')
Guido van Rossumd8faa362007-04-27 19:54:29 +0000117 self.assertRaises(TypeError, __import__, 'sys', name='sys')
Walter Dörwald919497e2003-01-19 16:23:59 +0000118
119 def test_abs(self):
120 # int
121 self.assertEqual(abs(0), 0)
122 self.assertEqual(abs(1234), 1234)
123 self.assertEqual(abs(-1234), 1234)
Christian Heimesa37d4c62007-12-04 23:02:19 +0000124 self.assertTrue(abs(-sys.maxsize-1) > 0)
Walter Dörwald919497e2003-01-19 16:23:59 +0000125 # float
126 self.assertEqual(abs(0.0), 0.0)
127 self.assertEqual(abs(3.14), 3.14)
128 self.assertEqual(abs(-3.14), 3.14)
Walter Dörwald919497e2003-01-19 16:23:59 +0000129 # str
130 self.assertRaises(TypeError, abs, 'a')
Mark Dickinsonfb3dc942010-05-25 19:06:24 +0000131 # bool
132 self.assertEqual(abs(True), 1)
133 self.assertEqual(abs(False), 0)
134 # other
135 self.assertRaises(TypeError, abs)
136 self.assertRaises(TypeError, abs, None)
137 class AbsClass(object):
138 def __abs__(self):
139 return -5
140 self.assertEqual(abs(AbsClass()), -5)
Walter Dörwald919497e2003-01-19 16:23:59 +0000141
Raymond Hettinger96229b12005-03-11 06:49:40 +0000142 def test_all(self):
143 self.assertEqual(all([2, 4, 6]), True)
144 self.assertEqual(all([2, None, 6]), False)
145 self.assertRaises(RuntimeError, all, [2, TestFailingBool(), 6])
146 self.assertRaises(RuntimeError, all, TestFailingIter())
147 self.assertRaises(TypeError, all, 10) # Non-iterable
148 self.assertRaises(TypeError, all) # No args
149 self.assertRaises(TypeError, all, [2, 4, 6], []) # Too many args
150 self.assertEqual(all([]), True) # Empty iterator
151 S = [50, 60]
152 self.assertEqual(all(x > 42 for x in S), True)
153 S = [50, 40, 60]
154 self.assertEqual(all(x > 42 for x in S), False)
155
156 def test_any(self):
157 self.assertEqual(any([None, None, None]), False)
158 self.assertEqual(any([None, 4, None]), True)
159 self.assertRaises(RuntimeError, any, [None, TestFailingBool(), 6])
160 self.assertRaises(RuntimeError, all, TestFailingIter())
161 self.assertRaises(TypeError, any, 10) # Non-iterable
162 self.assertRaises(TypeError, any) # No args
163 self.assertRaises(TypeError, any, [2, 4, 6], []) # Too many args
164 self.assertEqual(any([]), False) # Empty iterator
165 S = [40, 60, 30]
166 self.assertEqual(any(x > 42 for x in S), True)
167 S = [10, 20, 30]
168 self.assertEqual(any(x > 42 for x in S), False)
169
Georg Brandl559e5d72008-06-11 18:37:52 +0000170 def test_ascii(self):
171 self.assertEqual(ascii(''), '\'\'')
172 self.assertEqual(ascii(0), '0')
Georg Brandl559e5d72008-06-11 18:37:52 +0000173 self.assertEqual(ascii(()), '()')
174 self.assertEqual(ascii([]), '[]')
175 self.assertEqual(ascii({}), '{}')
176 a = []
177 a.append(a)
178 self.assertEqual(ascii(a), '[[...]]')
179 a = {}
180 a[0] = a
181 self.assertEqual(ascii(a), '{0: {...}}')
182
Thomas Wouters89f507f2006-12-13 04:49:30 +0000183 def test_neg(self):
Christian Heimesa37d4c62007-12-04 23:02:19 +0000184 x = -sys.maxsize-1
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000185 self.assertTrue(isinstance(x, int))
Christian Heimesa37d4c62007-12-04 23:02:19 +0000186 self.assertEqual(-x, sys.maxsize+1)
Thomas Wouters89f507f2006-12-13 04:49:30 +0000187
Guido van Rossumd59da4b2007-05-22 18:11:13 +0000188 # XXX(nnorwitz): This test case for callable should probably be removed.
Walter Dörwald919497e2003-01-19 16:23:59 +0000189 def test_callable(self):
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000190 self.assertTrue(hasattr(len, '__call__'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000191 def f(): pass
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000192 self.assertTrue(hasattr(f, '__call__'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000193 class C:
194 def meth(self): pass
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000195 self.assertTrue(hasattr(C, '__call__'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000196 x = C()
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000197 self.assertTrue(hasattr(x.meth, '__call__'))
198 self.assertTrue(not hasattr(x, '__call__'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000199 class D(C):
200 def __call__(self): pass
201 y = D()
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000202 self.assertTrue(hasattr(y, '__call__'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000203 y()
204
205 def test_chr(self):
206 self.assertEqual(chr(32), ' ')
207 self.assertEqual(chr(65), 'A')
208 self.assertEqual(chr(97), 'a')
209 self.assertEqual(chr(0xff), '\xff')
Guido van Rossum572dbf82007-04-27 23:53:51 +0000210 self.assertRaises(ValueError, chr, 1<<24)
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000211 self.assertEqual(chr(sys.maxunicode),
212 str(('\\U%08x' % (sys.maxunicode)).encode("ascii"),
213 'unicode-escape'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000214 self.assertRaises(TypeError, chr)
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000215 self.assertEqual(chr(0x0000FFFF), "\U0000FFFF")
216 self.assertEqual(chr(0x00010000), "\U00010000")
217 self.assertEqual(chr(0x00010001), "\U00010001")
218 self.assertEqual(chr(0x000FFFFE), "\U000FFFFE")
219 self.assertEqual(chr(0x000FFFFF), "\U000FFFFF")
220 self.assertEqual(chr(0x00100000), "\U00100000")
221 self.assertEqual(chr(0x00100001), "\U00100001")
222 self.assertEqual(chr(0x0010FFFE), "\U0010FFFE")
223 self.assertEqual(chr(0x0010FFFF), "\U0010FFFF")
224 self.assertRaises(ValueError, chr, -1)
225 self.assertRaises(ValueError, chr, 0x00110000)
Amaury Forgeot d'Arc7888d082008-08-01 01:06:32 +0000226 self.assertRaises((OverflowError, ValueError), chr, 2**32)
Walter Dörwald919497e2003-01-19 16:23:59 +0000227
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000228 def test_cmp(self):
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000229 self.assertTrue(not hasattr(builtins, "cmp"))
Walter Dörwald919497e2003-01-19 16:23:59 +0000230
Walter Dörwald919497e2003-01-19 16:23:59 +0000231 def test_compile(self):
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000232 compile('print(1)\n', '', 'exec')
Amaury Forgeot d'Arcaf593462007-11-22 20:53:01 +0000233 bom = b'\xef\xbb\xbf'
234 compile(bom + b'print(1)\n', '', 'exec')
Guido van Rossumd8faa362007-04-27 19:54:29 +0000235 compile(source='pass', filename='?', mode='exec')
236 compile(dont_inherit=0, filename='tmp', source='0', mode='eval')
237 compile('pass', '?', dont_inherit=1, mode='exec')
Benjamin Peterson60320cb2008-09-26 21:49:22 +0000238 compile(memoryview(b"text"), "name", "exec")
Walter Dörwald919497e2003-01-19 16:23:59 +0000239 self.assertRaises(TypeError, compile)
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000240 self.assertRaises(ValueError, compile, 'print(42)\n', '<string>', 'badmode')
241 self.assertRaises(ValueError, compile, 'print(42)\n', '<string>', 'single', 0xff)
Neal Norwitzfcf44352005-11-27 20:37:43 +0000242 self.assertRaises(TypeError, compile, chr(0), 'f', 'exec')
Guido van Rossumd8faa362007-04-27 19:54:29 +0000243 self.assertRaises(TypeError, compile, 'pass', '?', 'exec',
244 mode='eval', source='0', filename='tmp')
Walter Dörwald1f5947b2007-05-22 16:52:54 +0000245 compile('print("\xe5")\n', '', 'exec')
246 self.assertRaises(TypeError, compile, chr(0), 'f', 'exec')
247 self.assertRaises(ValueError, compile, str('a = 1'), 'f', 'bad')
Guido van Rossumd8faa362007-04-27 19:54:29 +0000248
Walter Dörwald919497e2003-01-19 16:23:59 +0000249 def test_delattr(self):
Walter Dörwald919497e2003-01-19 16:23:59 +0000250 sys.spam = 1
251 delattr(sys, 'spam')
252 self.assertRaises(TypeError, delattr)
253
254 def test_dir(self):
Georg Brandle32b4222007-03-10 22:13:27 +0000255 # dir(wrong number of arguments)
Walter Dörwald919497e2003-01-19 16:23:59 +0000256 self.assertRaises(TypeError, dir, 42, 42)
257
Georg Brandle32b4222007-03-10 22:13:27 +0000258 # dir() - local scope
259 local_var = 1
Benjamin Peterson577473f2010-01-19 00:09:57 +0000260 self.assertIn('local_var', dir())
Georg Brandle32b4222007-03-10 22:13:27 +0000261
262 # dir(module)
Benjamin Peterson577473f2010-01-19 00:09:57 +0000263 self.assertIn('exit', dir(sys))
Georg Brandle32b4222007-03-10 22:13:27 +0000264
265 # dir(module_with_invalid__dict__)
Georg Brandle32b4222007-03-10 22:13:27 +0000266 class Foo(types.ModuleType):
267 __dict__ = 8
268 f = Foo("foo")
269 self.assertRaises(TypeError, dir, f)
270
271 # dir(type)
Benjamin Peterson577473f2010-01-19 00:09:57 +0000272 self.assertIn("strip", dir(str))
273 self.assertNotIn("__mro__", dir(str))
Georg Brandle32b4222007-03-10 22:13:27 +0000274
275 # dir(obj)
276 class Foo(object):
277 def __init__(self):
278 self.x = 7
279 self.y = 8
280 self.z = 9
281 f = Foo()
Benjamin Peterson577473f2010-01-19 00:09:57 +0000282 self.assertIn("y", dir(f))
Georg Brandle32b4222007-03-10 22:13:27 +0000283
284 # dir(obj_no__dict__)
285 class Foo(object):
286 __slots__ = []
287 f = Foo()
Benjamin Peterson577473f2010-01-19 00:09:57 +0000288 self.assertIn("__repr__", dir(f))
Georg Brandle32b4222007-03-10 22:13:27 +0000289
290 # dir(obj_no__class__with__dict__)
291 # (an ugly trick to cause getattr(f, "__class__") to fail)
292 class Foo(object):
293 __slots__ = ["__class__", "__dict__"]
294 def __init__(self):
295 self.bar = "wow"
296 f = Foo()
Benjamin Peterson577473f2010-01-19 00:09:57 +0000297 self.assertNotIn("__repr__", dir(f))
298 self.assertIn("bar", dir(f))
Georg Brandle32b4222007-03-10 22:13:27 +0000299
300 # dir(obj_using __dir__)
301 class Foo(object):
302 def __dir__(self):
303 return ["kan", "ga", "roo"]
304 f = Foo()
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000305 self.assertTrue(dir(f) == ["ga", "kan", "roo"])
Georg Brandle32b4222007-03-10 22:13:27 +0000306
307 # dir(obj__dir__not_list)
308 class Foo(object):
309 def __dir__(self):
310 return 7
311 f = Foo()
312 self.assertRaises(TypeError, dir, f)
313
Collin Winter3eed7652007-08-14 17:53:54 +0000314 # dir(traceback)
315 try:
316 raise IndexError
317 except:
318 self.assertEqual(len(dir(sys.exc_info()[2])), 4)
319
320
Walter Dörwald919497e2003-01-19 16:23:59 +0000321 def test_divmod(self):
322 self.assertEqual(divmod(12, 7), (1, 5))
323 self.assertEqual(divmod(-12, 7), (-2, 2))
324 self.assertEqual(divmod(12, -7), (-2, -2))
325 self.assertEqual(divmod(-12, -7), (1, -5))
326
Mark Dickinson5c2db372009-12-05 20:28:34 +0000327 self.assertEqual(divmod(-sys.maxsize-1, -1), (sys.maxsize+1, 0))
Raymond Hettinger5ea7e312004-09-30 07:47:20 +0000328
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000329 self.assertTrue(not fcmp(divmod(3.25, 1.0), (3.0, 0.25)))
330 self.assertTrue(not fcmp(divmod(-3.25, 1.0), (-4.0, 0.75)))
331 self.assertTrue(not fcmp(divmod(3.25, -1.0), (-4.0, -0.75)))
332 self.assertTrue(not fcmp(divmod(-3.25, -1.0), (3.0, -0.25)))
Walter Dörwald919497e2003-01-19 16:23:59 +0000333
334 self.assertRaises(TypeError, divmod)
335
336 def test_eval(self):
337 self.assertEqual(eval('1+1'), 2)
338 self.assertEqual(eval(' 1+1\n'), 2)
339 globals = {'a': 1, 'b': 2}
340 locals = {'b': 200, 'c': 300}
341 self.assertEqual(eval('a', globals) , 1)
342 self.assertEqual(eval('a', globals, locals), 1)
343 self.assertEqual(eval('b', globals, locals), 200)
344 self.assertEqual(eval('c', globals, locals), 300)
Walter Dörwald919497e2003-01-19 16:23:59 +0000345 globals = {'a': 1, 'b': 2}
346 locals = {'b': 200, 'c': 300}
Amaury Forgeot d'Arcaf593462007-11-22 20:53:01 +0000347 bom = b'\xef\xbb\xbf'
348 self.assertEqual(eval(bom + b'a', globals, locals), 1)
Walter Dörwald1f5947b2007-05-22 16:52:54 +0000349 self.assertEqual(eval('"\xe5"', globals), "\xe5")
Walter Dörwald919497e2003-01-19 16:23:59 +0000350 self.assertRaises(TypeError, eval)
351 self.assertRaises(TypeError, eval, ())
Amaury Forgeot d'Arcaf593462007-11-22 20:53:01 +0000352 self.assertRaises(SyntaxError, eval, bom[:2] + b'a')
Walter Dörwald919497e2003-01-19 16:23:59 +0000353
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000354 def test_general_eval(self):
355 # Tests that general mappings can be used for the locals argument
356
357 class M:
358 "Test mapping interface versus possible calls from eval()."
359 def __getitem__(self, key):
360 if key == 'a':
361 return 12
362 raise KeyError
Guido van Rossumcd70eee2007-02-11 18:53:00 +0000363 def keys(self):
364 return list('xyz')
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000365
366 m = M()
367 g = globals()
368 self.assertEqual(eval('a', g, m), 12)
369 self.assertRaises(NameError, eval, 'b', g, m)
370 self.assertEqual(eval('dir()', g, m), list('xyz'))
371 self.assertEqual(eval('globals()', g, m), g)
372 self.assertEqual(eval('locals()', g, m), m)
Raymond Hettinger513ffe82004-07-06 13:44:41 +0000373 self.assertRaises(TypeError, eval, 'a', m)
Raymond Hettinger66bd2332004-08-02 08:30:07 +0000374 class A:
375 "Non-mapping"
376 pass
377 m = A()
378 self.assertRaises(TypeError, eval, 'a', g, m)
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000379
380 # Verify that dict subclasses work as well
381 class D(dict):
382 def __getitem__(self, key):
383 if key == 'a':
384 return 12
385 return dict.__getitem__(self, key)
Guido van Rossumcd70eee2007-02-11 18:53:00 +0000386 def keys(self):
387 return list('xyz')
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000388
389 d = D()
390 self.assertEqual(eval('a', g, d), 12)
391 self.assertRaises(NameError, eval, 'b', g, d)
392 self.assertEqual(eval('dir()', g, d), list('xyz'))
393 self.assertEqual(eval('globals()', g, d), g)
394 self.assertEqual(eval('locals()', g, d), d)
395
396 # Verify locals stores (used by list comps)
397 eval('[locals() for i in (2,3)]', g, d)
Raymond Hettingerf80680d2008-02-06 00:07:11 +0000398 eval('[locals() for i in (2,3)]', g, collections.UserDict())
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000399
400 class SpreadSheet:
401 "Sample application showing nested, calculated lookups."
402 _cells = {}
403 def __setitem__(self, key, formula):
404 self._cells[key] = formula
Thomas Wouters73e5a5b2006-06-08 15:35:45 +0000405 def __getitem__(self, key):
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000406 return eval(self._cells[key], globals(), self)
407
408 ss = SpreadSheet()
409 ss['a1'] = '5'
410 ss['a2'] = 'a1*6'
411 ss['a3'] = 'a2*7'
412 self.assertEqual(ss['a3'], 210)
413
Raymond Hettinger2a7dede2004-08-07 04:55:30 +0000414 # Verify that dir() catches a non-list returned by eval
415 # SF bug #1004669
416 class C:
417 def __getitem__(self, item):
418 raise KeyError(item)
Guido van Rossumcd70eee2007-02-11 18:53:00 +0000419 def keys(self):
420 return 1 # used to be 'a' but that's no longer an error
Raymond Hettinger2a7dede2004-08-07 04:55:30 +0000421 self.assertRaises(TypeError, eval, 'dir()', globals(), C())
422
Georg Brandl7cae87c2006-09-06 06:51:57 +0000423 def test_exec(self):
424 g = {}
425 exec('z = 1', g)
426 if '__builtins__' in g:
427 del g['__builtins__']
428 self.assertEqual(g, {'z': 1})
429
Guido van Rossumef87d6e2007-05-02 19:09:54 +0000430 exec('z = 1+1', g)
Georg Brandl7cae87c2006-09-06 06:51:57 +0000431 if '__builtins__' in g:
432 del g['__builtins__']
433 self.assertEqual(g, {'z': 2})
434 g = {}
435 l = {}
436
Brett Cannon77628992010-03-20 20:59:33 +0000437 with check_warnings():
438 warnings.filterwarnings("ignore", "global statement",
439 module="<string>")
440 exec('global a; a = 1; b = 2', g, l)
Georg Brandl7cae87c2006-09-06 06:51:57 +0000441 if '__builtins__' in g:
442 del g['__builtins__']
443 if '__builtins__' in l:
444 del l['__builtins__']
445 self.assertEqual((g, l), ({'a': 1}, {'b': 2}))
446
Amaury Forgeot d'Arc9ed77352008-04-04 23:25:27 +0000447 def test_exec_redirected(self):
448 savestdout = sys.stdout
449 sys.stdout = None # Whatever that cannot flush()
450 try:
451 # Used to raise SystemError('error return without exception set')
452 exec('a')
453 except NameError:
454 pass
455 finally:
456 sys.stdout = savestdout
457
Walter Dörwald919497e2003-01-19 16:23:59 +0000458 def test_filter(self):
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000459 self.assertEqual(list(filter(lambda c: 'a' <= c <= 'z', 'Hello World')), list('elloorld'))
460 self.assertEqual(list(filter(None, [1, 'hello', [], [3], '', None, 9, 0])), [1, 'hello', [3], 9])
461 self.assertEqual(list(filter(lambda x: x > 0, [1, -3, 9, 0, 2])), [1, 9, 2])
462 self.assertEqual(list(filter(None, Squares(10))), [1, 4, 9, 16, 25, 36, 49, 64, 81])
463 self.assertEqual(list(filter(lambda x: x%2, Squares(10))), [1, 9, 25, 49, 81])
Walter Dörwald919497e2003-01-19 16:23:59 +0000464 def identity(item):
465 return 1
466 filter(identity, Squares(5))
467 self.assertRaises(TypeError, filter)
468 class BadSeq(object):
Tim Petersf2715e02003-02-19 02:35:07 +0000469 def __getitem__(self, index):
470 if index<4:
471 return 42
472 raise ValueError
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000473 self.assertRaises(ValueError, list, filter(lambda x: x, BadSeq()))
Walter Dörwald919497e2003-01-19 16:23:59 +0000474 def badfunc():
475 pass
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000476 self.assertRaises(TypeError, list, filter(badfunc, range(5)))
Walter Dörwald919497e2003-01-19 16:23:59 +0000477
Walter Dörwaldbf517072003-01-27 15:57:14 +0000478 # test bltinmodule.c::filtertuple()
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000479 self.assertEqual(list(filter(None, (1, 2))), [1, 2])
480 self.assertEqual(list(filter(lambda x: x>=3, (1, 2, 3, 4))), [3, 4])
481 self.assertRaises(TypeError, list, filter(42, (1, 2)))
Walter Dörwaldc3da83f2003-02-04 20:24:45 +0000482
Walter Dörwald919497e2003-01-19 16:23:59 +0000483 def test_getattr(self):
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):
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000493 self.assertTrue(hasattr(sys, 'stdout'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000494 self.assertRaises(TypeError, hasattr, sys, 1)
495 self.assertRaises(TypeError, hasattr)
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000496 self.assertEqual(False, hasattr(sys, chr(sys.maxunicode)))
Walter Dörwald919497e2003-01-19 16:23:59 +0000497
Alexandre Vassalottieca20b62008-05-16 02:54:33 +0000498 # Check that hasattr allows SystemExit and KeyboardInterrupts by
499 class A:
500 def __getattr__(self, what):
501 raise KeyboardInterrupt
502 self.assertRaises(KeyboardInterrupt, hasattr, A(), "b")
503 class B:
504 def __getattr__(self, what):
505 raise SystemExit
506 self.assertRaises(SystemExit, hasattr, B(), "b")
507
Walter Dörwald919497e2003-01-19 16:23:59 +0000508 def test_hash(self):
509 hash(None)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000510 self.assertEqual(hash(1), hash(1))
Walter Dörwald919497e2003-01-19 16:23:59 +0000511 self.assertEqual(hash(1), hash(1.0))
512 hash('spam')
Guido van Rossum98297ee2007-11-06 21:34:58 +0000513 self.assertEqual(hash('spam'), hash(b'spam'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000514 hash((0,1,2,3))
515 def f(): pass
516 self.assertRaises(TypeError, hash, [])
517 self.assertRaises(TypeError, hash, {})
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000518 # Bug 1536021: Allow hash to return long objects
519 class X:
520 def __hash__(self):
521 return 2**100
522 self.assertEquals(type(hash(X())), int)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000523 class Z(int):
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000524 def __hash__(self):
525 return self
Guido van Rossume2a383d2007-01-15 16:59:06 +0000526 self.assertEquals(hash(Z(42)), hash(42))
Walter Dörwald919497e2003-01-19 16:23:59 +0000527
528 def test_hex(self):
529 self.assertEqual(hex(16), '0x10')
Guido van Rossume2a383d2007-01-15 16:59:06 +0000530 self.assertEqual(hex(-16), '-0x10')
Walter Dörwald919497e2003-01-19 16:23:59 +0000531 self.assertRaises(TypeError, hex, {})
532
533 def test_id(self):
534 id(None)
535 id(1)
Walter Dörwald919497e2003-01-19 16:23:59 +0000536 id(1.0)
537 id('spam')
538 id((0,1,2,3))
539 id([0,1,2,3])
540 id({'spam': 1, 'eggs': 2, 'ham': 3})
541
Guido van Rossuma88a0332007-02-26 16:59:55 +0000542 # Test input() later, alphabetized as if it were raw_input
543
Walter Dörwald919497e2003-01-19 16:23:59 +0000544 def test_iter(self):
545 self.assertRaises(TypeError, iter)
546 self.assertRaises(TypeError, iter, 42, 42)
547 lists = [("1", "2"), ["1", "2"], "12"]
Walter Dörwald919497e2003-01-19 16:23:59 +0000548 for l in lists:
549 i = iter(l)
Georg Brandla18af4e2007-04-21 15:47:16 +0000550 self.assertEqual(next(i), '1')
551 self.assertEqual(next(i), '2')
552 self.assertRaises(StopIteration, next, i)
Walter Dörwald919497e2003-01-19 16:23:59 +0000553
554 def test_isinstance(self):
555 class C:
556 pass
557 class D(C):
558 pass
559 class E:
560 pass
561 c = C()
562 d = D()
563 e = E()
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000564 self.assertTrue(isinstance(c, C))
565 self.assertTrue(isinstance(d, C))
566 self.assertTrue(not isinstance(e, C))
567 self.assertTrue(not isinstance(c, D))
568 self.assertTrue(not isinstance('foo', E))
Walter Dörwald919497e2003-01-19 16:23:59 +0000569 self.assertRaises(TypeError, isinstance, E, 'foo')
570 self.assertRaises(TypeError, isinstance)
571
572 def test_issubclass(self):
573 class C:
574 pass
575 class D(C):
576 pass
577 class E:
578 pass
579 c = C()
580 d = D()
581 e = E()
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000582 self.assertTrue(issubclass(D, C))
583 self.assertTrue(issubclass(C, C))
584 self.assertTrue(not issubclass(C, D))
Walter Dörwald919497e2003-01-19 16:23:59 +0000585 self.assertRaises(TypeError, issubclass, 'foo', E)
586 self.assertRaises(TypeError, issubclass, E, 'foo')
587 self.assertRaises(TypeError, issubclass)
588
589 def test_len(self):
590 self.assertEqual(len('123'), 3)
591 self.assertEqual(len(()), 0)
592 self.assertEqual(len((1, 2, 3, 4)), 4)
593 self.assertEqual(len([1, 2, 3, 4]), 4)
594 self.assertEqual(len({}), 0)
595 self.assertEqual(len({'a':1, 'b': 2}), 2)
596 class BadSeq:
597 def __len__(self):
598 raise ValueError
599 self.assertRaises(ValueError, len, BadSeq())
Benjamin Petersonee1ae7c2009-02-08 21:07:20 +0000600 class InvalidLen:
601 def __len__(self):
602 return None
603 self.assertRaises(TypeError, len, InvalidLen())
604 class FloatLen:
605 def __len__(self):
606 return 4.5
607 self.assertRaises(TypeError, len, FloatLen())
608 class HugeLen:
609 def __len__(self):
610 return sys.maxsize + 1
611 self.assertRaises(OverflowError, len, HugeLen())
Mark Dickinsonfb3dc942010-05-25 19:06:24 +0000612 class NoLenMethod(object): pass
613 self.assertRaises(TypeError, len, NoLenMethod())
Walter Dörwald919497e2003-01-19 16:23:59 +0000614
Walter Dörwald919497e2003-01-19 16:23:59 +0000615 def test_map(self):
616 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000617 list(map(lambda x: x*x, range(1,4))),
Walter Dörwald919497e2003-01-19 16:23:59 +0000618 [1, 4, 9]
619 )
620 try:
621 from math import sqrt
622 except ImportError:
623 def sqrt(x):
624 return pow(x, 0.5)
625 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000626 list(map(lambda x: list(map(sqrt, x)), [[16, 4], [81, 9]])),
Walter Dörwald919497e2003-01-19 16:23:59 +0000627 [[4.0, 2.0], [9.0, 3.0]]
628 )
629 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000630 list(map(lambda x, y: x+y, [1,3,2], [9,1,4])),
Walter Dörwald919497e2003-01-19 16:23:59 +0000631 [10, 4, 6]
632 )
633
634 def plus(*v):
635 accu = 0
636 for i in v: accu = accu + i
637 return accu
638 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000639 list(map(plus, [1, 3, 7])),
Walter Dörwald919497e2003-01-19 16:23:59 +0000640 [1, 3, 7]
641 )
642 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000643 list(map(plus, [1, 3, 7], [4, 9, 2])),
Walter Dörwald919497e2003-01-19 16:23:59 +0000644 [1+4, 3+9, 7+2]
645 )
646 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000647 list(map(plus, [1, 3, 7], [4, 9, 2], [1, 1, 0])),
Walter Dörwald919497e2003-01-19 16:23:59 +0000648 [1+4+1, 3+9+1, 7+2+0]
649 )
650 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000651 list(map(int, Squares(10))),
Walter Dörwald919497e2003-01-19 16:23:59 +0000652 [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
653 )
Guido van Rossum47b9ff62006-08-24 00:41:19 +0000654 def Max(a, b):
655 if a is None:
656 return b
657 if b is None:
658 return a
659 return max(a, b)
Walter Dörwald919497e2003-01-19 16:23:59 +0000660 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000661 list(map(Max, Squares(3), Squares(2))),
662 [0, 1]
Walter Dörwald919497e2003-01-19 16:23:59 +0000663 )
664 self.assertRaises(TypeError, map)
665 self.assertRaises(TypeError, map, lambda x: x, 42)
Walter Dörwald919497e2003-01-19 16:23:59 +0000666 class BadSeq:
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000667 def __iter__(self):
Walter Dörwald919497e2003-01-19 16:23:59 +0000668 raise ValueError
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000669 yield None
670 self.assertRaises(ValueError, list, map(lambda x: x, BadSeq()))
Neal Norwitzfcf44352005-11-27 20:37:43 +0000671 def badfunc(x):
672 raise RuntimeError
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000673 self.assertRaises(RuntimeError, list, map(badfunc, range(5)))
Walter Dörwald919497e2003-01-19 16:23:59 +0000674
675 def test_max(self):
676 self.assertEqual(max('123123'), '3')
677 self.assertEqual(max(1, 2, 3), 3)
678 self.assertEqual(max((1, 2, 3, 1, 2, 3)), 3)
679 self.assertEqual(max([1, 2, 3, 1, 2, 3]), 3)
680
Guido van Rossume2a383d2007-01-15 16:59:06 +0000681 self.assertEqual(max(1, 2, 3.0), 3.0)
682 self.assertEqual(max(1, 2.0, 3), 3)
683 self.assertEqual(max(1.0, 2, 3), 3)
Walter Dörwald919497e2003-01-19 16:23:59 +0000684
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +0000685 for stmt in (
686 "max(key=int)", # no args
687 "max(1, key=int)", # single arg not iterable
688 "max(1, 2, keystone=int)", # wrong keyword
689 "max(1, 2, key=int, abc=int)", # two many keywords
690 "max(1, 2, key=1)", # keyfunc is not callable
691 ):
Tim Peters7f061872004-12-07 21:17:46 +0000692 try:
Georg Brandl7cae87c2006-09-06 06:51:57 +0000693 exec(stmt, globals())
Tim Peters7f061872004-12-07 21:17:46 +0000694 except TypeError:
695 pass
696 else:
697 self.fail(stmt)
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +0000698
699 self.assertEqual(max((1,), key=neg), 1) # one elem iterable
700 self.assertEqual(max((1,2), key=neg), 1) # two elem iterable
701 self.assertEqual(max(1, 2, key=neg), 1) # two elems
702
703 data = [random.randrange(200) for i in range(100)]
704 keys = dict((elem, random.randrange(50)) for elem in data)
705 f = keys.__getitem__
706 self.assertEqual(max(data, key=f),
707 sorted(reversed(data), key=f)[-1])
708
Walter Dörwald919497e2003-01-19 16:23:59 +0000709 def test_min(self):
710 self.assertEqual(min('123123'), '1')
711 self.assertEqual(min(1, 2, 3), 1)
712 self.assertEqual(min((1, 2, 3, 1, 2, 3)), 1)
713 self.assertEqual(min([1, 2, 3, 1, 2, 3]), 1)
714
Guido van Rossume2a383d2007-01-15 16:59:06 +0000715 self.assertEqual(min(1, 2, 3.0), 1)
716 self.assertEqual(min(1, 2.0, 3), 1)
717 self.assertEqual(min(1.0, 2, 3), 1.0)
Walter Dörwald919497e2003-01-19 16:23:59 +0000718
719 self.assertRaises(TypeError, min)
720 self.assertRaises(TypeError, min, 42)
721 self.assertRaises(ValueError, min, ())
722 class BadSeq:
723 def __getitem__(self, index):
724 raise ValueError
725 self.assertRaises(ValueError, min, BadSeq())
Walter Dörwald919497e2003-01-19 16:23:59 +0000726
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +0000727 for stmt in (
728 "min(key=int)", # no args
729 "min(1, key=int)", # single arg not iterable
730 "min(1, 2, keystone=int)", # wrong keyword
731 "min(1, 2, key=int, abc=int)", # two many keywords
732 "min(1, 2, key=1)", # keyfunc is not callable
733 ):
Tim Peters7f061872004-12-07 21:17:46 +0000734 try:
Georg Brandl7cae87c2006-09-06 06:51:57 +0000735 exec(stmt, globals())
Tim Peters7f061872004-12-07 21:17:46 +0000736 except TypeError:
737 pass
738 else:
739 self.fail(stmt)
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +0000740
741 self.assertEqual(min((1,), key=neg), 1) # one elem iterable
742 self.assertEqual(min((1,2), key=neg), 2) # two elem iterable
743 self.assertEqual(min(1, 2, key=neg), 2) # two elems
744
745 data = [random.randrange(200) for i in range(100)]
746 keys = dict((elem, random.randrange(50)) for elem in data)
747 f = keys.__getitem__
748 self.assertEqual(min(data, key=f),
749 sorted(data, key=f)[0])
750
Georg Brandla18af4e2007-04-21 15:47:16 +0000751 def test_next(self):
752 it = iter(range(2))
753 self.assertEqual(next(it), 0)
754 self.assertEqual(next(it), 1)
755 self.assertRaises(StopIteration, next, it)
756 self.assertRaises(StopIteration, next, it)
757 self.assertEquals(next(it, 42), 42)
758
759 class Iter(object):
760 def __iter__(self):
761 return self
762 def __next__(self):
763 raise StopIteration
764
765 it = iter(Iter())
766 self.assertEquals(next(it, 42), 42)
767 self.assertRaises(StopIteration, next, it)
768
769 def gen():
770 yield 1
771 return
772
773 it = gen()
774 self.assertEquals(next(it), 1)
775 self.assertRaises(StopIteration, next, it)
776 self.assertEquals(next(it, 42), 42)
777
Walter Dörwald919497e2003-01-19 16:23:59 +0000778 def test_oct(self):
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000779 self.assertEqual(oct(100), '0o144')
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000780 self.assertEqual(oct(-100), '-0o144')
Walter Dörwald919497e2003-01-19 16:23:59 +0000781 self.assertRaises(TypeError, oct, ())
782
783 def write_testfile(self):
Guido van Rossuma88a0332007-02-26 16:59:55 +0000784 # NB the first 4 lines are also used to test input, below
Walter Dörwald919497e2003-01-19 16:23:59 +0000785 fp = open(TESTFN, 'w')
786 try:
787 fp.write('1+1\n')
Walter Dörwald919497e2003-01-19 16:23:59 +0000788 fp.write('The quick brown fox jumps over the lazy dog')
789 fp.write('.\n')
790 fp.write('Dear John\n')
791 fp.write('XXX'*100)
792 fp.write('YYY'*100)
793 finally:
794 fp.close()
795
796 def test_open(self):
797 self.write_testfile()
798 fp = open(TESTFN, 'r')
799 try:
800 self.assertEqual(fp.readline(4), '1+1\n')
Walter Dörwald919497e2003-01-19 16:23:59 +0000801 self.assertEqual(fp.readline(), 'The quick brown fox jumps over the lazy dog.\n')
802 self.assertEqual(fp.readline(4), 'Dear')
803 self.assertEqual(fp.readline(100), ' John\n')
804 self.assertEqual(fp.read(300), 'XXX'*100)
805 self.assertEqual(fp.read(1000), 'YYY'*100)
806 finally:
807 fp.close()
808 unlink(TESTFN)
809
810 def test_ord(self):
811 self.assertEqual(ord(' '), 32)
812 self.assertEqual(ord('A'), 65)
813 self.assertEqual(ord('a'), 97)
Guido van Rossumf9e91c92007-05-08 21:05:48 +0000814 self.assertEqual(ord('\x80'), 128)
815 self.assertEqual(ord('\xff'), 255)
816
817 self.assertEqual(ord(b' '), 32)
818 self.assertEqual(ord(b'A'), 65)
819 self.assertEqual(ord(b'a'), 97)
820 self.assertEqual(ord(b'\x80'), 128)
821 self.assertEqual(ord(b'\xff'), 255)
822
Walter Dörwald1f5947b2007-05-22 16:52:54 +0000823 self.assertEqual(ord(chr(sys.maxunicode)), sys.maxunicode)
Walter Dörwald919497e2003-01-19 16:23:59 +0000824 self.assertRaises(TypeError, ord, 42)
Walter Dörwald919497e2003-01-19 16:23:59 +0000825
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000826 self.assertEqual(ord(chr(0x10FFFF)), 0x10FFFF)
827 self.assertEqual(ord("\U0000FFFF"), 0x0000FFFF)
828 self.assertEqual(ord("\U00010000"), 0x00010000)
829 self.assertEqual(ord("\U00010001"), 0x00010001)
830 self.assertEqual(ord("\U000FFFFE"), 0x000FFFFE)
831 self.assertEqual(ord("\U000FFFFF"), 0x000FFFFF)
832 self.assertEqual(ord("\U00100000"), 0x00100000)
833 self.assertEqual(ord("\U00100001"), 0x00100001)
834 self.assertEqual(ord("\U0010FFFE"), 0x0010FFFE)
835 self.assertEqual(ord("\U0010FFFF"), 0x0010FFFF)
836
Walter Dörwald919497e2003-01-19 16:23:59 +0000837 def test_pow(self):
838 self.assertEqual(pow(0,0), 1)
839 self.assertEqual(pow(0,1), 0)
840 self.assertEqual(pow(1,0), 1)
841 self.assertEqual(pow(1,1), 1)
842
843 self.assertEqual(pow(2,0), 1)
844 self.assertEqual(pow(2,10), 1024)
845 self.assertEqual(pow(2,20), 1024*1024)
846 self.assertEqual(pow(2,30), 1024*1024*1024)
847
848 self.assertEqual(pow(-2,0), 1)
849 self.assertEqual(pow(-2,1), -2)
850 self.assertEqual(pow(-2,2), 4)
851 self.assertEqual(pow(-2,3), -8)
852
Walter Dörwald919497e2003-01-19 16:23:59 +0000853 self.assertAlmostEqual(pow(0.,0), 1.)
854 self.assertAlmostEqual(pow(0.,1), 0.)
855 self.assertAlmostEqual(pow(1.,0), 1.)
856 self.assertAlmostEqual(pow(1.,1), 1.)
857
858 self.assertAlmostEqual(pow(2.,0), 1.)
859 self.assertAlmostEqual(pow(2.,10), 1024.)
860 self.assertAlmostEqual(pow(2.,20), 1024.*1024.)
861 self.assertAlmostEqual(pow(2.,30), 1024.*1024.*1024.)
862
863 self.assertAlmostEqual(pow(-2.,0), 1.)
864 self.assertAlmostEqual(pow(-2.,1), -2.)
865 self.assertAlmostEqual(pow(-2.,2), 4.)
866 self.assertAlmostEqual(pow(-2.,3), -8.)
867
Mark Dickinson5c2db372009-12-05 20:28:34 +0000868 for x in 2, 2.0:
869 for y in 10, 10.0:
870 for z in 1000, 1000.0:
Walter Dörwald919497e2003-01-19 16:23:59 +0000871 if isinstance(x, float) or \
872 isinstance(y, float) or \
873 isinstance(z, float):
874 self.assertRaises(TypeError, pow, x, y, z)
875 else:
876 self.assertAlmostEqual(pow(x, y, z), 24.0)
877
Jeffrey Yasskin3404b3c2007-09-07 15:15:49 +0000878 self.assertAlmostEqual(pow(-1, 0.5), 1j)
879 self.assertAlmostEqual(pow(-1, 1/3), 0.5 + 0.8660254037844386j)
880
Walter Dörwald919497e2003-01-19 16:23:59 +0000881 self.assertRaises(TypeError, pow, -1, -2, 3)
882 self.assertRaises(ValueError, pow, 1, 2, 0)
Walter Dörwald919497e2003-01-19 16:23:59 +0000883
884 self.assertRaises(TypeError, pow)
885
886 def test_range(self):
Guido van Rossum805365e2007-05-07 22:24:25 +0000887 self.assertEqual(list(range(3)), [0, 1, 2])
888 self.assertEqual(list(range(1, 5)), [1, 2, 3, 4])
889 self.assertEqual(list(range(0)), [])
890 self.assertEqual(list(range(-3)), [])
891 self.assertEqual(list(range(1, 10, 3)), [1, 4, 7])
892 #self.assertEqual(list(range(5, -5, -3)), [5, 2, -1, -4])
Walter Dörwald919497e2003-01-19 16:23:59 +0000893
Mark Dickinsoneb36d312009-06-24 18:36:46 +0000894 #issue 6334: the internal stored range length was being
895 #computed incorrectly in some cases involving large arguments.
896 x = range(10**20, 10**20+10, 3)
897 self.assertEqual(len(x), 4)
898 self.assertEqual(len(list(x)), 4)
899
900 x = range(10**20+10, 10**20, 3)
901 self.assertEqual(len(x), 0)
902 self.assertEqual(len(list(x)), 0)
903
904 x = range(10**20, 10**20+10, -3)
905 self.assertEqual(len(x), 0)
906 self.assertEqual(len(list(x)), 0)
907
908 x = range(10**20+10, 10**20, -3)
909 self.assertEqual(len(x), 4)
910 self.assertEqual(len(list(x)), 4)
911
Guido van Rossumefbbb1c2003-04-11 18:43:06 +0000912 # Now test range() with longs
Guido van Rossum805365e2007-05-07 22:24:25 +0000913 self.assertEqual(list(range(-2**100)), [])
914 self.assertEqual(list(range(0, -2**100)), [])
915 self.assertEqual(list(range(0, 2**100, -1)), [])
916 self.assertEqual(list(range(0, 2**100, -1)), [])
Guido van Rossumefbbb1c2003-04-11 18:43:06 +0000917
Christian Heimesa37d4c62007-12-04 23:02:19 +0000918 a = int(10 * sys.maxsize)
919 b = int(100 * sys.maxsize)
920 c = int(50 * sys.maxsize)
Guido van Rossumefbbb1c2003-04-11 18:43:06 +0000921
Guido van Rossum805365e2007-05-07 22:24:25 +0000922 self.assertEqual(list(range(a, a+2)), [a, a+1])
923 self.assertEqual(list(range(a+2, a, -1)), [a+2, a+1])
924 self.assertEqual(list(range(a+4, a, -2)), [a+4, a+2])
Guido van Rossumefbbb1c2003-04-11 18:43:06 +0000925
Guido van Rossum805365e2007-05-07 22:24:25 +0000926 seq = list(range(a, b, c))
Benjamin Peterson577473f2010-01-19 00:09:57 +0000927 self.assertIn(a, seq)
928 self.assertNotIn(b, seq)
Guido van Rossumefbbb1c2003-04-11 18:43:06 +0000929 self.assertEqual(len(seq), 2)
930
Guido van Rossum805365e2007-05-07 22:24:25 +0000931 seq = list(range(b, a, -c))
Benjamin Peterson577473f2010-01-19 00:09:57 +0000932 self.assertIn(b, seq)
933 self.assertNotIn(a, seq)
Guido van Rossumefbbb1c2003-04-11 18:43:06 +0000934 self.assertEqual(len(seq), 2)
935
Guido van Rossum805365e2007-05-07 22:24:25 +0000936 seq = list(range(-a, -b, -c))
Benjamin Peterson577473f2010-01-19 00:09:57 +0000937 self.assertIn(-a, seq)
938 self.assertNotIn(-b, seq)
Guido van Rossumefbbb1c2003-04-11 18:43:06 +0000939 self.assertEqual(len(seq), 2)
940
Walter Dörwald919497e2003-01-19 16:23:59 +0000941 self.assertRaises(TypeError, range)
942 self.assertRaises(TypeError, range, 1, 2, 3, 4)
943 self.assertRaises(ValueError, range, 1, 2, 0)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000944 self.assertRaises(ValueError, range, a, a + 1, int(0))
Neal Norwitzfcf44352005-11-27 20:37:43 +0000945
Mark Dickinson5c2db372009-12-05 20:28:34 +0000946 """ XXX(nnorwitz):
Neal Norwitzfcf44352005-11-27 20:37:43 +0000947 class badzero(int):
Guido van Rossum47b9ff62006-08-24 00:41:19 +0000948 def __eq__(self, other):
Neal Norwitzfcf44352005-11-27 20:37:43 +0000949 raise RuntimeError
Guido van Rossum47b9ff62006-08-24 00:41:19 +0000950 __ne__ = __lt__ = __gt__ = __le__ = __ge__ = __eq__
951
952 # XXX This won't (but should!) raise RuntimeError if a is an int...
Neal Norwitzfcf44352005-11-27 20:37:43 +0000953 self.assertRaises(RuntimeError, range, a, a + 1, badzero(1))
Guido van Rossum805365e2007-05-07 22:24:25 +0000954 """
Walter Dörwald919497e2003-01-19 16:23:59 +0000955
Mark Dickinson85b53532010-05-05 22:39:58 +0000956 # Reject floats.
957 self.assertRaises(TypeError, range, 1., 1., 1.)
Tim Peters299b3df2003-04-15 14:40:03 +0000958 self.assertRaises(TypeError, range, 1e100, 1e101, 1e101)
Guido van Rossumefbbb1c2003-04-11 18:43:06 +0000959
Walter Dörwald357981e2003-04-15 18:59:28 +0000960 self.assertRaises(TypeError, range, 0, "spam")
961 self.assertRaises(TypeError, range, 0, 42, "spam")
962
Christian Heimesa37d4c62007-12-04 23:02:19 +0000963 #NEAL self.assertRaises(OverflowError, range, -sys.maxsize, sys.maxsize)
964 #NEAL self.assertRaises(OverflowError, range, 0, 2*sys.maxsize)
Guido van Rossum805365e2007-05-07 22:24:25 +0000965
Christian Heimesa37d4c62007-12-04 23:02:19 +0000966 self.assertRaises(OverflowError, len, range(0, sys.maxsize**10))
Walter Dörwald357981e2003-04-15 18:59:28 +0000967
Mark Dickinson85b53532010-05-05 22:39:58 +0000968 bignum = 2*sys.maxsize
969 smallnum = 42
970
971 # User-defined class with an __index__ method
972 class I:
973 def __init__(self, n):
974 self.n = int(n)
975 def __index__(self):
976 return self.n
977 self.assertEqual(list(range(I(bignum), I(bignum + 1))), [bignum])
978 self.assertEqual(list(range(I(smallnum), I(smallnum + 1))), [smallnum])
979
980 # User-defined class with a failing __index__ method
981 class IX:
982 def __index__(self):
983 raise RuntimeError
984 self.assertRaises(RuntimeError, range, IX())
985
986 # User-defined class with an invalid __index__ method
987 class IN:
988 def __index__(self):
989 return "not a number"
990
991 self.assertRaises(TypeError, range, IN())
992 # Exercise various combinations of bad arguments, to check
993 # refcounting logic
994 self.assertRaises(TypeError, range, 0.0)
995
996 self.assertRaises(TypeError, range, 0, 0.0)
997 self.assertRaises(TypeError, range, 0.0, 0)
998 self.assertRaises(TypeError, range, 0.0, 0.0)
999
1000 self.assertRaises(TypeError, range, 0, 0, 1.0)
1001 self.assertRaises(TypeError, range, 0, 0.0, 1)
1002 self.assertRaises(TypeError, range, 0, 0.0, 1.0)
1003 self.assertRaises(TypeError, range, 0.0, 0, 1)
1004 self.assertRaises(TypeError, range, 0.0, 0, 1.0)
1005 self.assertRaises(TypeError, range, 0.0, 0.0, 1)
1006 self.assertRaises(TypeError, range, 0.0, 0.0, 1.0)
1007
Guido van Rossuma88a0332007-02-26 16:59:55 +00001008 def test_input(self):
1009 self.write_testfile()
1010 fp = open(TESTFN, 'r')
1011 savestdin = sys.stdin
1012 savestdout = sys.stdout # Eats the echo
1013 try:
1014 sys.stdin = fp
1015 sys.stdout = BitBucket()
1016 self.assertEqual(input(), "1+1")
Guido van Rossuma88a0332007-02-26 16:59:55 +00001017 self.assertEqual(input(), 'The quick brown fox jumps over the lazy dog.')
1018 self.assertEqual(input('testing\n'), 'Dear John')
1019
1020 # SF 1535165: don't segfault on closed stdin
1021 # sys.stdout must be a regular file for triggering
1022 sys.stdout = savestdout
1023 sys.stdin.close()
1024 self.assertRaises(ValueError, input)
1025
1026 sys.stdout = BitBucket()
Guido van Rossum34d19282007-08-09 01:03:29 +00001027 sys.stdin = io.StringIO("NULL\0")
Guido van Rossuma88a0332007-02-26 16:59:55 +00001028 self.assertRaises(TypeError, input, 42, 42)
Guido van Rossum34d19282007-08-09 01:03:29 +00001029 sys.stdin = io.StringIO(" 'whitespace'")
Guido van Rossuma88a0332007-02-26 16:59:55 +00001030 self.assertEqual(input(), " 'whitespace'")
Guido van Rossum34d19282007-08-09 01:03:29 +00001031 sys.stdin = io.StringIO()
Guido van Rossuma88a0332007-02-26 16:59:55 +00001032 self.assertRaises(EOFError, input)
1033
1034 del sys.stdout
1035 self.assertRaises(RuntimeError, input, 'prompt')
1036 del sys.stdin
1037 self.assertRaises(RuntimeError, input, 'prompt')
1038 finally:
1039 sys.stdin = savestdin
1040 sys.stdout = savestdout
1041 fp.close()
1042 unlink(TESTFN)
1043
Walter Dörwald919497e2003-01-19 16:23:59 +00001044 def test_repr(self):
1045 self.assertEqual(repr(''), '\'\'')
1046 self.assertEqual(repr(0), '0')
Walter Dörwald919497e2003-01-19 16:23:59 +00001047 self.assertEqual(repr(()), '()')
1048 self.assertEqual(repr([]), '[]')
1049 self.assertEqual(repr({}), '{}')
1050 a = []
1051 a.append(a)
1052 self.assertEqual(repr(a), '[[...]]')
1053 a = {}
1054 a[0] = a
1055 self.assertEqual(repr(a), '{0: {...}}')
1056
1057 def test_round(self):
1058 self.assertEqual(round(0.0), 0.0)
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001059 self.assertEqual(type(round(0.0)), int)
Walter Dörwald919497e2003-01-19 16:23:59 +00001060 self.assertEqual(round(1.0), 1.0)
1061 self.assertEqual(round(10.0), 10.0)
1062 self.assertEqual(round(1000000000.0), 1000000000.0)
1063 self.assertEqual(round(1e20), 1e20)
1064
1065 self.assertEqual(round(-1.0), -1.0)
1066 self.assertEqual(round(-10.0), -10.0)
1067 self.assertEqual(round(-1000000000.0), -1000000000.0)
1068 self.assertEqual(round(-1e20), -1e20)
1069
1070 self.assertEqual(round(0.1), 0.0)
1071 self.assertEqual(round(1.1), 1.0)
1072 self.assertEqual(round(10.1), 10.0)
1073 self.assertEqual(round(1000000000.1), 1000000000.0)
1074
1075 self.assertEqual(round(-1.1), -1.0)
1076 self.assertEqual(round(-10.1), -10.0)
1077 self.assertEqual(round(-1000000000.1), -1000000000.0)
1078
1079 self.assertEqual(round(0.9), 1.0)
1080 self.assertEqual(round(9.9), 10.0)
1081 self.assertEqual(round(999999999.9), 1000000000.0)
1082
1083 self.assertEqual(round(-0.9), -1.0)
1084 self.assertEqual(round(-9.9), -10.0)
1085 self.assertEqual(round(-999999999.9), -1000000000.0)
1086
1087 self.assertEqual(round(-8.0, -1), -10.0)
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001088 self.assertEqual(type(round(-8.0, -1)), float)
1089
1090 self.assertEqual(type(round(-8.0, 0)), float)
1091 self.assertEqual(type(round(-8.0, 1)), float)
1092
1093 # Check even / odd rounding behaviour
1094 self.assertEqual(round(5.5), 6)
1095 self.assertEqual(round(6.5), 6)
1096 self.assertEqual(round(-5.5), -6)
1097 self.assertEqual(round(-6.5), -6)
1098
1099 # Check behavior on ints
1100 self.assertEqual(round(0), 0)
1101 self.assertEqual(round(8), 8)
1102 self.assertEqual(round(-8), -8)
1103 self.assertEqual(type(round(0)), int)
Mark Dickinson1124e712009-01-28 21:25:58 +00001104 self.assertEqual(type(round(-8, -1)), int)
1105 self.assertEqual(type(round(-8, 0)), int)
1106 self.assertEqual(type(round(-8, 1)), int)
Walter Dörwald919497e2003-01-19 16:23:59 +00001107
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001108 # test new kwargs
1109 self.assertEqual(round(number=-8.0, ndigits=-1), -10.0)
1110
Walter Dörwald919497e2003-01-19 16:23:59 +00001111 self.assertRaises(TypeError, round)
1112
Alex Martelliae211f92007-08-22 23:21:33 +00001113 # test generic rounding delegation for reals
1114 class TestRound:
1115 def __round__(self):
1116 return 23
1117
1118 class TestNoRound:
1119 pass
1120
1121 self.assertEqual(round(TestRound()), 23)
1122
1123 self.assertRaises(TypeError, round, 1, 2, 3)
1124 self.assertRaises(TypeError, round, TestNoRound())
1125
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001126 t = TestNoRound()
1127 t.__round__ = lambda *args: args
1128 self.assertRaises(TypeError, round, t)
1129 self.assertRaises(TypeError, round, t, 0)
1130
Mark Dickinsonad731b92009-11-09 17:12:30 +00001131 # Some versions of glibc for alpha have a bug that affects
1132 # float -> integer rounding (floor, ceil, rint, round) for
1133 # values in the range [2**52, 2**53). See:
1134 #
1135 # http://sources.redhat.com/bugzilla/show_bug.cgi?id=5350
1136 #
1137 # We skip this test on Linux/alpha if it would fail.
1138 linux_alpha = (platform.system().startswith('Linux') and
1139 platform.machine().startswith('alpha'))
1140 system_round_bug = round(5e15+1) != 5e15+1
1141 @unittest.skipIf(linux_alpha and system_round_bug,
1142 "test will fail; failure is probably due to a "
1143 "buggy system round function")
1144 def test_round_large(self):
1145 # Issue #1869: integral floats should remain unchanged
1146 self.assertEqual(round(5e15-1), 5e15-1)
1147 self.assertEqual(round(5e15), 5e15)
1148 self.assertEqual(round(5e15+1), 5e15+1)
1149 self.assertEqual(round(5e15+2), 5e15+2)
1150 self.assertEqual(round(5e15+3), 5e15+3)
1151
Walter Dörwald919497e2003-01-19 16:23:59 +00001152 def test_setattr(self):
Tim Petersf2715e02003-02-19 02:35:07 +00001153 setattr(sys, 'spam', 1)
1154 self.assertEqual(sys.spam, 1)
1155 self.assertRaises(TypeError, setattr, sys, 1, 'spam')
1156 self.assertRaises(TypeError, setattr)
Walter Dörwald919497e2003-01-19 16:23:59 +00001157
Walter Dörwald919497e2003-01-19 16:23:59 +00001158
Alex Martellia70b1912003-04-22 08:12:33 +00001159 def test_sum(self):
1160 self.assertEqual(sum([]), 0)
Guido van Rossum805365e2007-05-07 22:24:25 +00001161 self.assertEqual(sum(list(range(2,8))), 27)
1162 self.assertEqual(sum(iter(list(range(2,8)))), 27)
Alex Martellia70b1912003-04-22 08:12:33 +00001163 self.assertEqual(sum(Squares(10)), 285)
1164 self.assertEqual(sum(iter(Squares(10))), 285)
1165 self.assertEqual(sum([[1], [2], [3]], []), [1, 2, 3])
1166
1167 self.assertRaises(TypeError, sum)
1168 self.assertRaises(TypeError, sum, 42)
1169 self.assertRaises(TypeError, sum, ['a', 'b', 'c'])
1170 self.assertRaises(TypeError, sum, ['a', 'b', 'c'], '')
1171 self.assertRaises(TypeError, sum, [[1], [2], [3]])
1172 self.assertRaises(TypeError, sum, [{2:3}])
1173 self.assertRaises(TypeError, sum, [{2:3}]*2, {2:3})
1174
1175 class BadSeq:
1176 def __getitem__(self, index):
1177 raise ValueError
1178 self.assertRaises(ValueError, sum, BadSeq())
1179
Mark Dickinson3a22b472009-10-17 21:48:16 +00001180 empty = []
1181 sum(([x] for x in range(10)), empty)
1182 self.assertEqual(empty, [])
1183
Walter Dörwald919497e2003-01-19 16:23:59 +00001184 def test_type(self):
1185 self.assertEqual(type(''), type('123'))
1186 self.assertNotEqual(type(''), type(()))
1187
Guido van Rossumfee7b932005-01-16 00:21:28 +00001188 # We don't want self in vars(), so these are static methods
1189
1190 @staticmethod
Walter Dörwald919497e2003-01-19 16:23:59 +00001191 def get_vars_f0():
1192 return vars()
Walter Dörwald919497e2003-01-19 16:23:59 +00001193
Guido van Rossumfee7b932005-01-16 00:21:28 +00001194 @staticmethod
Walter Dörwald919497e2003-01-19 16:23:59 +00001195 def get_vars_f2():
1196 BuiltinTest.get_vars_f0()
1197 a = 1
1198 b = 2
1199 return vars()
Walter Dörwald919497e2003-01-19 16:23:59 +00001200
Mark Dickinsonfb3dc942010-05-25 19:06:24 +00001201 class C_get_vars(object):
1202 def getDict(self):
1203 return {'a':2}
1204 __dict__ = property(fget=getDict)
1205
Walter Dörwald919497e2003-01-19 16:23:59 +00001206 def test_vars(self):
Raymond Hettingera690a992003-11-16 16:17:49 +00001207 self.assertEqual(set(vars()), set(dir()))
Raymond Hettingera690a992003-11-16 16:17:49 +00001208 self.assertEqual(set(vars(sys)), set(dir(sys)))
Walter Dörwald919497e2003-01-19 16:23:59 +00001209 self.assertEqual(self.get_vars_f0(), {})
1210 self.assertEqual(self.get_vars_f2(), {'a': 1, 'b': 2})
1211 self.assertRaises(TypeError, vars, 42, 42)
1212 self.assertRaises(TypeError, vars, 42)
Mark Dickinsonfb3dc942010-05-25 19:06:24 +00001213 self.assertEqual(vars(self.C_get_vars()), {'a':2})
Walter Dörwald919497e2003-01-19 16:23:59 +00001214
1215 def test_zip(self):
1216 a = (1, 2, 3)
1217 b = (4, 5, 6)
1218 t = [(1, 4), (2, 5), (3, 6)]
Guido van Rossum801f0d72006-08-24 19:48:10 +00001219 self.assertEqual(list(zip(a, b)), t)
Walter Dörwald919497e2003-01-19 16:23:59 +00001220 b = [4, 5, 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, 7)
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 class I:
1225 def __getitem__(self, i):
1226 if i < 0 or i > 2: raise IndexError
1227 return i + 4
Guido van Rossum801f0d72006-08-24 19:48:10 +00001228 self.assertEqual(list(zip(a, I())), t)
1229 self.assertEqual(list(zip()), [])
1230 self.assertEqual(list(zip(*[])), [])
Walter Dörwald919497e2003-01-19 16:23:59 +00001231 self.assertRaises(TypeError, zip, None)
1232 class G:
1233 pass
1234 self.assertRaises(TypeError, zip, a, G())
Alexander Belopolskye29e6bf2010-08-16 18:55:46 +00001235 self.assertRaises(RuntimeError, zip, a, TestFailingIter())
Walter Dörwald919497e2003-01-19 16:23:59 +00001236
1237 # Make sure zip doesn't try to allocate a billion elements for the
1238 # result list when one of its arguments doesn't say how long it is.
1239 # A MemoryError is the most likely failure mode.
1240 class SequenceWithoutALength:
1241 def __getitem__(self, i):
1242 if i == 5:
1243 raise IndexError
1244 else:
1245 return i
1246 self.assertEqual(
Guido van Rossum805365e2007-05-07 22:24:25 +00001247 list(zip(SequenceWithoutALength(), range(2**30))),
Walter Dörwald919497e2003-01-19 16:23:59 +00001248 list(enumerate(range(5)))
1249 )
1250
1251 class BadSeq:
1252 def __getitem__(self, i):
1253 if i == 5:
1254 raise ValueError
1255 else:
1256 return i
Guido van Rossum801f0d72006-08-24 19:48:10 +00001257 self.assertRaises(ValueError, list, zip(BadSeq(), BadSeq()))
Walter Dörwald919497e2003-01-19 16:23:59 +00001258
Christian Heimes90c3d9b2008-02-23 13:18:03 +00001259 def test_bin(self):
1260 self.assertEqual(bin(0), '0b0')
1261 self.assertEqual(bin(1), '0b1')
1262 self.assertEqual(bin(-1), '-0b1')
1263 self.assertEqual(bin(2**65), '0b1' + '0' * 65)
1264 self.assertEqual(bin(2**65-1), '0b' + '1' * 65)
1265 self.assertEqual(bin(-(2**65)), '-0b1' + '0' * 65)
1266 self.assertEqual(bin(-(2**65-1)), '-0b' + '1' * 65)
1267
Georg Brandl953152f2009-07-22 12:03:59 +00001268 def test_bytearray_translate(self):
1269 x = bytearray(b"abc")
1270 self.assertRaises(ValueError, x.translate, b"1", 1)
1271 self.assertRaises(TypeError, x.translate, b"1"*256, 1)
1272
Raymond Hettinger64958a12003-12-17 20:43:33 +00001273class TestSorted(unittest.TestCase):
1274
1275 def test_basic(self):
Guido van Rossum805365e2007-05-07 22:24:25 +00001276 data = list(range(100))
Raymond Hettinger64958a12003-12-17 20:43:33 +00001277 copy = data[:]
1278 random.shuffle(copy)
1279 self.assertEqual(data, sorted(copy))
1280 self.assertNotEqual(data, copy)
1281
1282 data.reverse()
1283 random.shuffle(copy)
Raymond Hettinger64958a12003-12-17 20:43:33 +00001284 self.assertEqual(data, sorted(copy, key=lambda x: -x))
1285 self.assertNotEqual(data, copy)
1286 random.shuffle(copy)
1287 self.assertEqual(data, sorted(copy, reverse=1))
1288 self.assertNotEqual(data, copy)
1289
1290 def test_inputtypes(self):
1291 s = 'abracadabra'
Walter Dörwald1f5947b2007-05-22 16:52:54 +00001292 types = [list, tuple, str]
Walter Dörwald4e41a4b2005-08-03 17:09:04 +00001293 for T in types:
Raymond Hettinger64958a12003-12-17 20:43:33 +00001294 self.assertEqual(sorted(s), sorted(T(s)))
1295
Walter Dörwald1f5947b2007-05-22 16:52:54 +00001296 s = ''.join(set(s)) # unique letters only
1297 types = [str, set, frozenset, list, tuple, dict.fromkeys]
Walter Dörwald4e41a4b2005-08-03 17:09:04 +00001298 for T in types:
Raymond Hettinger64958a12003-12-17 20:43:33 +00001299 self.assertEqual(sorted(s), sorted(T(s)))
1300
1301 def test_baddecorator(self):
1302 data = 'The quick Brown fox Jumped over The lazy Dog'.split()
1303 self.assertRaises(TypeError, sorted, data, None, lambda x,y: 0)
1304
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001305def test_main(verbose=None):
1306 test_classes = (BuiltinTest, TestSorted)
1307
1308 run_unittest(*test_classes)
1309
1310 # verify reference counting
1311 if verbose and hasattr(sys, "gettotalrefcount"):
1312 import gc
1313 counts = [None] * 5
Guido van Rossum805365e2007-05-07 22:24:25 +00001314 for i in range(len(counts)):
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001315 run_unittest(*test_classes)
1316 gc.collect()
1317 counts[i] = sys.gettotalrefcount()
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001318 print(counts)
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001319
Walter Dörwald919497e2003-01-19 16:23:59 +00001320
1321if __name__ == "__main__":
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001322 test_main(verbose=True)