blob: 2a08337c7942e0a8eefbaa6aa4fad2980b1b6444 [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 Dickinson94882db2009-11-09 17:14:18 +00003import platform
Benjamin Petersonee8712c2008-05-20 21:35:26 +00004import test.support, unittest
5from test.support import fcmp, TESTFN, unlink, run_unittest, \
Walter Dörwald1f5947b2007-05-22 16:52:54 +00006 run_with_locale
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00007from operator import neg
Guido van Rossum3bead091992-01-27 17:00:37 +00008
Raymond Hettinger53dbe392008-02-12 20:03:09 +00009import sys, warnings, random, collections, io, fractions
Walter Dörwald919497e2003-01-19 16:23:59 +000010warnings.filterwarnings("ignore", "hex../oct.. of negative int",
11 FutureWarning, __name__)
Guido van Rossumefbbb1c2003-04-11 18:43:06 +000012warnings.filterwarnings("ignore", "integer argument expected",
13 DeprecationWarning, "unittest")
Mark Dickinsona56c4672009-01-27 18:17:45 +000014import builtins
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)
129 # long
Guido van Rossume2a383d2007-01-15 16:59:06 +0000130 self.assertEqual(abs(0), 0)
131 self.assertEqual(abs(1234), 1234)
132 self.assertEqual(abs(-1234), 1234)
Walter Dörwald919497e2003-01-19 16:23:59 +0000133 # str
134 self.assertRaises(TypeError, abs, 'a')
135
Raymond Hettinger96229b12005-03-11 06:49:40 +0000136 def test_all(self):
137 self.assertEqual(all([2, 4, 6]), True)
138 self.assertEqual(all([2, None, 6]), False)
139 self.assertRaises(RuntimeError, all, [2, TestFailingBool(), 6])
140 self.assertRaises(RuntimeError, all, TestFailingIter())
141 self.assertRaises(TypeError, all, 10) # Non-iterable
142 self.assertRaises(TypeError, all) # No args
143 self.assertRaises(TypeError, all, [2, 4, 6], []) # Too many args
144 self.assertEqual(all([]), True) # Empty iterator
145 S = [50, 60]
146 self.assertEqual(all(x > 42 for x in S), True)
147 S = [50, 40, 60]
148 self.assertEqual(all(x > 42 for x in S), False)
149
150 def test_any(self):
151 self.assertEqual(any([None, None, None]), False)
152 self.assertEqual(any([None, 4, None]), True)
153 self.assertRaises(RuntimeError, any, [None, TestFailingBool(), 6])
154 self.assertRaises(RuntimeError, all, TestFailingIter())
155 self.assertRaises(TypeError, any, 10) # Non-iterable
156 self.assertRaises(TypeError, any) # No args
157 self.assertRaises(TypeError, any, [2, 4, 6], []) # Too many args
158 self.assertEqual(any([]), False) # Empty iterator
159 S = [40, 60, 30]
160 self.assertEqual(any(x > 42 for x in S), True)
161 S = [10, 20, 30]
162 self.assertEqual(any(x > 42 for x in S), False)
163
Georg Brandl559e5d72008-06-11 18:37:52 +0000164 def test_ascii(self):
165 self.assertEqual(ascii(''), '\'\'')
166 self.assertEqual(ascii(0), '0')
167 self.assertEqual(ascii(0), '0')
168 self.assertEqual(ascii(()), '()')
169 self.assertEqual(ascii([]), '[]')
170 self.assertEqual(ascii({}), '{}')
171 a = []
172 a.append(a)
173 self.assertEqual(ascii(a), '[[...]]')
174 a = {}
175 a[0] = a
176 self.assertEqual(ascii(a), '{0: {...}}')
177
Thomas Wouters89f507f2006-12-13 04:49:30 +0000178 def test_neg(self):
Christian Heimesa37d4c62007-12-04 23:02:19 +0000179 x = -sys.maxsize-1
Georg Brandlab91fde2009-08-13 08:51:18 +0000180 self.assertTrue(isinstance(x, int))
Christian Heimesa37d4c62007-12-04 23:02:19 +0000181 self.assertEqual(-x, sys.maxsize+1)
Thomas Wouters89f507f2006-12-13 04:49:30 +0000182
Guido van Rossumd59da4b2007-05-22 18:11:13 +0000183 # XXX(nnorwitz): This test case for callable should probably be removed.
Walter Dörwald919497e2003-01-19 16:23:59 +0000184 def test_callable(self):
Georg Brandlab91fde2009-08-13 08:51:18 +0000185 self.assertTrue(hasattr(len, '__call__'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000186 def f(): pass
Georg Brandlab91fde2009-08-13 08:51:18 +0000187 self.assertTrue(hasattr(f, '__call__'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000188 class C:
189 def meth(self): pass
Georg Brandlab91fde2009-08-13 08:51:18 +0000190 self.assertTrue(hasattr(C, '__call__'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000191 x = C()
Georg Brandlab91fde2009-08-13 08:51:18 +0000192 self.assertTrue(hasattr(x.meth, '__call__'))
193 self.assertTrue(not hasattr(x, '__call__'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000194 class D(C):
195 def __call__(self): pass
196 y = D()
Georg Brandlab91fde2009-08-13 08:51:18 +0000197 self.assertTrue(hasattr(y, '__call__'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000198 y()
199
200 def test_chr(self):
201 self.assertEqual(chr(32), ' ')
202 self.assertEqual(chr(65), 'A')
203 self.assertEqual(chr(97), 'a')
204 self.assertEqual(chr(0xff), '\xff')
Guido van Rossum572dbf82007-04-27 23:53:51 +0000205 self.assertRaises(ValueError, chr, 1<<24)
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000206 self.assertEqual(chr(sys.maxunicode),
207 str(('\\U%08x' % (sys.maxunicode)).encode("ascii"),
208 'unicode-escape'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000209 self.assertRaises(TypeError, chr)
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000210 self.assertEqual(chr(0x0000FFFF), "\U0000FFFF")
211 self.assertEqual(chr(0x00010000), "\U00010000")
212 self.assertEqual(chr(0x00010001), "\U00010001")
213 self.assertEqual(chr(0x000FFFFE), "\U000FFFFE")
214 self.assertEqual(chr(0x000FFFFF), "\U000FFFFF")
215 self.assertEqual(chr(0x00100000), "\U00100000")
216 self.assertEqual(chr(0x00100001), "\U00100001")
217 self.assertEqual(chr(0x0010FFFE), "\U0010FFFE")
218 self.assertEqual(chr(0x0010FFFF), "\U0010FFFF")
219 self.assertRaises(ValueError, chr, -1)
220 self.assertRaises(ValueError, chr, 0x00110000)
Amaury Forgeot d'Arc7888d082008-08-01 01:06:32 +0000221 self.assertRaises((OverflowError, ValueError), chr, 2**32)
Walter Dörwald919497e2003-01-19 16:23:59 +0000222
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000223 def test_cmp(self):
Georg Brandlab91fde2009-08-13 08:51:18 +0000224 self.assertTrue(not hasattr(builtins, "cmp"))
Walter Dörwald919497e2003-01-19 16:23:59 +0000225
Walter Dörwald919497e2003-01-19 16:23:59 +0000226 def test_compile(self):
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000227 compile('print(1)\n', '', 'exec')
Amaury Forgeot d'Arcaf593462007-11-22 20:53:01 +0000228 bom = b'\xef\xbb\xbf'
229 compile(bom + b'print(1)\n', '', 'exec')
Guido van Rossumd8faa362007-04-27 19:54:29 +0000230 compile(source='pass', filename='?', mode='exec')
231 compile(dont_inherit=0, filename='tmp', source='0', mode='eval')
232 compile('pass', '?', dont_inherit=1, mode='exec')
Benjamin Peterson60320cb2008-09-26 21:49:22 +0000233 compile(memoryview(b"text"), "name", "exec")
Walter Dörwald919497e2003-01-19 16:23:59 +0000234 self.assertRaises(TypeError, compile)
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000235 self.assertRaises(ValueError, compile, 'print(42)\n', '<string>', 'badmode')
236 self.assertRaises(ValueError, compile, 'print(42)\n', '<string>', 'single', 0xff)
Neal Norwitzfcf44352005-11-27 20:37:43 +0000237 self.assertRaises(TypeError, compile, chr(0), 'f', 'exec')
Guido van Rossumd8faa362007-04-27 19:54:29 +0000238 self.assertRaises(TypeError, compile, 'pass', '?', 'exec',
239 mode='eval', source='0', filename='tmp')
Walter Dörwald1f5947b2007-05-22 16:52:54 +0000240 compile('print("\xe5")\n', '', 'exec')
241 self.assertRaises(TypeError, compile, chr(0), 'f', 'exec')
242 self.assertRaises(ValueError, compile, str('a = 1'), 'f', 'bad')
Guido van Rossumd8faa362007-04-27 19:54:29 +0000243
Walter Dörwald919497e2003-01-19 16:23:59 +0000244 def test_delattr(self):
245 import sys
246 sys.spam = 1
247 delattr(sys, 'spam')
248 self.assertRaises(TypeError, delattr)
249
250 def test_dir(self):
Georg Brandle32b4222007-03-10 22:13:27 +0000251 # dir(wrong number of arguments)
Walter Dörwald919497e2003-01-19 16:23:59 +0000252 self.assertRaises(TypeError, dir, 42, 42)
253
Georg Brandle32b4222007-03-10 22:13:27 +0000254 # dir() - local scope
255 local_var = 1
Georg Brandlab91fde2009-08-13 08:51:18 +0000256 self.assertTrue('local_var' in dir())
Georg Brandle32b4222007-03-10 22:13:27 +0000257
258 # dir(module)
259 import sys
Georg Brandlab91fde2009-08-13 08:51:18 +0000260 self.assertTrue('exit' in dir(sys))
Georg Brandle32b4222007-03-10 22:13:27 +0000261
262 # dir(module_with_invalid__dict__)
263 import types
264 class Foo(types.ModuleType):
265 __dict__ = 8
266 f = Foo("foo")
267 self.assertRaises(TypeError, dir, f)
268
269 # dir(type)
Georg Brandlab91fde2009-08-13 08:51:18 +0000270 self.assertTrue("strip" in dir(str))
271 self.assertTrue("__mro__" not in dir(str))
Georg Brandle32b4222007-03-10 22:13:27 +0000272
273 # dir(obj)
274 class Foo(object):
275 def __init__(self):
276 self.x = 7
277 self.y = 8
278 self.z = 9
279 f = Foo()
Georg Brandlab91fde2009-08-13 08:51:18 +0000280 self.assertTrue("y" in dir(f))
Georg Brandle32b4222007-03-10 22:13:27 +0000281
282 # dir(obj_no__dict__)
283 class Foo(object):
284 __slots__ = []
285 f = Foo()
Georg Brandlab91fde2009-08-13 08:51:18 +0000286 self.assertTrue("__repr__" in dir(f))
Georg Brandle32b4222007-03-10 22:13:27 +0000287
288 # dir(obj_no__class__with__dict__)
289 # (an ugly trick to cause getattr(f, "__class__") to fail)
290 class Foo(object):
291 __slots__ = ["__class__", "__dict__"]
292 def __init__(self):
293 self.bar = "wow"
294 f = Foo()
Georg Brandlab91fde2009-08-13 08:51:18 +0000295 self.assertTrue("__repr__" not in dir(f))
296 self.assertTrue("bar" in dir(f))
Georg Brandle32b4222007-03-10 22:13:27 +0000297
298 # dir(obj_using __dir__)
299 class Foo(object):
300 def __dir__(self):
301 return ["kan", "ga", "roo"]
302 f = Foo()
Georg Brandlab91fde2009-08-13 08:51:18 +0000303 self.assertTrue(dir(f) == ["ga", "kan", "roo"])
Georg Brandle32b4222007-03-10 22:13:27 +0000304
305 # dir(obj__dir__not_list)
306 class Foo(object):
307 def __dir__(self):
308 return 7
309 f = Foo()
310 self.assertRaises(TypeError, dir, f)
311
Collin Winter3eed7652007-08-14 17:53:54 +0000312 # dir(traceback)
313 try:
314 raise IndexError
315 except:
316 self.assertEqual(len(dir(sys.exc_info()[2])), 4)
317
318
Walter Dörwald919497e2003-01-19 16:23:59 +0000319 def test_divmod(self):
320 self.assertEqual(divmod(12, 7), (1, 5))
321 self.assertEqual(divmod(-12, 7), (-2, 2))
322 self.assertEqual(divmod(12, -7), (-2, -2))
323 self.assertEqual(divmod(-12, -7), (1, -5))
324
Guido van Rossume2a383d2007-01-15 16:59:06 +0000325 self.assertEqual(divmod(12, 7), (1, 5))
326 self.assertEqual(divmod(-12, 7), (-2, 2))
327 self.assertEqual(divmod(12, -7), (-2, -2))
328 self.assertEqual(divmod(-12, -7), (1, -5))
Walter Dörwald919497e2003-01-19 16:23:59 +0000329
Guido van Rossume2a383d2007-01-15 16:59:06 +0000330 self.assertEqual(divmod(12, 7), (1, 5))
331 self.assertEqual(divmod(-12, 7), (-2, 2))
332 self.assertEqual(divmod(12, -7), (-2, -2))
333 self.assertEqual(divmod(-12, -7), (1, -5))
Walter Dörwald919497e2003-01-19 16:23:59 +0000334
Christian Heimesa37d4c62007-12-04 23:02:19 +0000335 self.assertEqual(divmod(-sys.maxsize-1, -1),
336 (sys.maxsize+1, 0))
Raymond Hettinger5ea7e312004-09-30 07:47:20 +0000337
Georg Brandlab91fde2009-08-13 08:51:18 +0000338 self.assertTrue(not fcmp(divmod(3.25, 1.0), (3.0, 0.25)))
339 self.assertTrue(not fcmp(divmod(-3.25, 1.0), (-4.0, 0.75)))
340 self.assertTrue(not fcmp(divmod(3.25, -1.0), (-4.0, -0.75)))
341 self.assertTrue(not fcmp(divmod(-3.25, -1.0), (3.0, -0.25)))
Walter Dörwald919497e2003-01-19 16:23:59 +0000342
343 self.assertRaises(TypeError, divmod)
344
345 def test_eval(self):
346 self.assertEqual(eval('1+1'), 2)
347 self.assertEqual(eval(' 1+1\n'), 2)
348 globals = {'a': 1, 'b': 2}
349 locals = {'b': 200, 'c': 300}
350 self.assertEqual(eval('a', globals) , 1)
351 self.assertEqual(eval('a', globals, locals), 1)
352 self.assertEqual(eval('b', globals, locals), 200)
353 self.assertEqual(eval('c', globals, locals), 300)
Walter Dörwald919497e2003-01-19 16:23:59 +0000354 globals = {'a': 1, 'b': 2}
355 locals = {'b': 200, 'c': 300}
Amaury Forgeot d'Arcaf593462007-11-22 20:53:01 +0000356 bom = b'\xef\xbb\xbf'
357 self.assertEqual(eval(bom + b'a', globals, locals), 1)
Walter Dörwald1f5947b2007-05-22 16:52:54 +0000358 self.assertEqual(eval('"\xe5"', globals), "\xe5")
Walter Dörwald919497e2003-01-19 16:23:59 +0000359 self.assertRaises(TypeError, eval)
360 self.assertRaises(TypeError, eval, ())
Amaury Forgeot d'Arcaf593462007-11-22 20:53:01 +0000361 self.assertRaises(SyntaxError, eval, bom[:2] + b'a')
Walter Dörwald919497e2003-01-19 16:23:59 +0000362
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000363 def test_general_eval(self):
364 # Tests that general mappings can be used for the locals argument
365
366 class M:
367 "Test mapping interface versus possible calls from eval()."
368 def __getitem__(self, key):
369 if key == 'a':
370 return 12
371 raise KeyError
Guido van Rossumcd70eee2007-02-11 18:53:00 +0000372 def keys(self):
373 return list('xyz')
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000374
375 m = M()
376 g = globals()
377 self.assertEqual(eval('a', g, m), 12)
378 self.assertRaises(NameError, eval, 'b', g, m)
379 self.assertEqual(eval('dir()', g, m), list('xyz'))
380 self.assertEqual(eval('globals()', g, m), g)
381 self.assertEqual(eval('locals()', g, m), m)
Raymond Hettinger513ffe82004-07-06 13:44:41 +0000382 self.assertRaises(TypeError, eval, 'a', m)
Raymond Hettinger66bd2332004-08-02 08:30:07 +0000383 class A:
384 "Non-mapping"
385 pass
386 m = A()
387 self.assertRaises(TypeError, eval, 'a', g, m)
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000388
389 # Verify that dict subclasses work as well
390 class D(dict):
391 def __getitem__(self, key):
392 if key == 'a':
393 return 12
394 return dict.__getitem__(self, key)
Guido van Rossumcd70eee2007-02-11 18:53:00 +0000395 def keys(self):
396 return list('xyz')
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000397
398 d = D()
399 self.assertEqual(eval('a', g, d), 12)
400 self.assertRaises(NameError, eval, 'b', g, d)
401 self.assertEqual(eval('dir()', g, d), list('xyz'))
402 self.assertEqual(eval('globals()', g, d), g)
403 self.assertEqual(eval('locals()', g, d), d)
404
405 # Verify locals stores (used by list comps)
406 eval('[locals() for i in (2,3)]', g, d)
Raymond Hettingerf80680d2008-02-06 00:07:11 +0000407 eval('[locals() for i in (2,3)]', g, collections.UserDict())
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000408
409 class SpreadSheet:
410 "Sample application showing nested, calculated lookups."
411 _cells = {}
412 def __setitem__(self, key, formula):
413 self._cells[key] = formula
Thomas Wouters73e5a5b2006-06-08 15:35:45 +0000414 def __getitem__(self, key):
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000415 return eval(self._cells[key], globals(), self)
416
417 ss = SpreadSheet()
418 ss['a1'] = '5'
419 ss['a2'] = 'a1*6'
420 ss['a3'] = 'a2*7'
421 self.assertEqual(ss['a3'], 210)
422
Raymond Hettinger2a7dede2004-08-07 04:55:30 +0000423 # Verify that dir() catches a non-list returned by eval
424 # SF bug #1004669
425 class C:
426 def __getitem__(self, item):
427 raise KeyError(item)
Guido van Rossumcd70eee2007-02-11 18:53:00 +0000428 def keys(self):
429 return 1 # used to be 'a' but that's no longer an error
Raymond Hettinger2a7dede2004-08-07 04:55:30 +0000430 self.assertRaises(TypeError, eval, 'dir()', globals(), C())
431
Georg Brandl7cae87c2006-09-06 06:51:57 +0000432 def test_exec(self):
433 g = {}
434 exec('z = 1', g)
435 if '__builtins__' in g:
436 del g['__builtins__']
437 self.assertEqual(g, {'z': 1})
438
Guido van Rossumef87d6e2007-05-02 19:09:54 +0000439 exec('z = 1+1', g)
Georg Brandl7cae87c2006-09-06 06:51:57 +0000440 if '__builtins__' in g:
441 del g['__builtins__']
442 self.assertEqual(g, {'z': 2})
443 g = {}
444 l = {}
445
446 import warnings
447 warnings.filterwarnings("ignore", "global statement", module="<string>")
448 exec('global a; a = 1; b = 2', g, l)
449 if '__builtins__' in g:
450 del g['__builtins__']
451 if '__builtins__' in l:
452 del l['__builtins__']
453 self.assertEqual((g, l), ({'a': 1}, {'b': 2}))
454
Amaury Forgeot d'Arc9ed77352008-04-04 23:25:27 +0000455 def test_exec_redirected(self):
456 savestdout = sys.stdout
457 sys.stdout = None # Whatever that cannot flush()
458 try:
459 # Used to raise SystemError('error return without exception set')
460 exec('a')
461 except NameError:
462 pass
463 finally:
464 sys.stdout = savestdout
465
Walter Dörwald919497e2003-01-19 16:23:59 +0000466 def test_filter(self):
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000467 self.assertEqual(list(filter(lambda c: 'a' <= c <= 'z', 'Hello World')), list('elloorld'))
468 self.assertEqual(list(filter(None, [1, 'hello', [], [3], '', None, 9, 0])), [1, 'hello', [3], 9])
469 self.assertEqual(list(filter(lambda x: x > 0, [1, -3, 9, 0, 2])), [1, 9, 2])
470 self.assertEqual(list(filter(None, Squares(10))), [1, 4, 9, 16, 25, 36, 49, 64, 81])
471 self.assertEqual(list(filter(lambda x: x%2, Squares(10))), [1, 9, 25, 49, 81])
Walter Dörwald919497e2003-01-19 16:23:59 +0000472 def identity(item):
473 return 1
474 filter(identity, Squares(5))
475 self.assertRaises(TypeError, filter)
476 class BadSeq(object):
Tim Petersf2715e02003-02-19 02:35:07 +0000477 def __getitem__(self, index):
478 if index<4:
479 return 42
480 raise ValueError
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000481 self.assertRaises(ValueError, list, filter(lambda x: x, BadSeq()))
Walter Dörwald919497e2003-01-19 16:23:59 +0000482 def badfunc():
483 pass
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000484 self.assertRaises(TypeError, list, filter(badfunc, range(5)))
Walter Dörwald919497e2003-01-19 16:23:59 +0000485
Walter Dörwaldbf517072003-01-27 15:57:14 +0000486 # test bltinmodule.c::filtertuple()
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000487 self.assertEqual(list(filter(None, (1, 2))), [1, 2])
488 self.assertEqual(list(filter(lambda x: x>=3, (1, 2, 3, 4))), [3, 4])
489 self.assertRaises(TypeError, list, filter(42, (1, 2)))
Walter Dörwaldc3da83f2003-02-04 20:24:45 +0000490
Walter Dörwald919497e2003-01-19 16:23:59 +0000491 def test_getattr(self):
492 import sys
Georg Brandlab91fde2009-08-13 08:51:18 +0000493 self.assertTrue(getattr(sys, 'stdout') is sys.stdout)
Walter Dörwald919497e2003-01-19 16:23:59 +0000494 self.assertRaises(TypeError, getattr, sys, 1)
495 self.assertRaises(TypeError, getattr, sys, 1, "foo")
496 self.assertRaises(TypeError, getattr)
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000497 self.assertRaises(AttributeError, getattr, sys, chr(sys.maxunicode))
Victor Stinner7f045cf2010-03-21 21:07:44 +0000498 # unicode surrogates are not encodable to the default encoding (utf8)
499 self.assertRaises(AttributeError, getattr, 1, "\uDAD1\uD51E")
Walter Dörwald919497e2003-01-19 16:23:59 +0000500
501 def test_hasattr(self):
502 import sys
Georg Brandlab91fde2009-08-13 08:51:18 +0000503 self.assertTrue(hasattr(sys, 'stdout'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000504 self.assertRaises(TypeError, hasattr, sys, 1)
505 self.assertRaises(TypeError, hasattr)
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000506 self.assertEqual(False, hasattr(sys, chr(sys.maxunicode)))
Walter Dörwald919497e2003-01-19 16:23:59 +0000507
Alexandre Vassalottieca20b62008-05-16 02:54:33 +0000508 # Check that hasattr allows SystemExit and KeyboardInterrupts by
509 class A:
510 def __getattr__(self, what):
511 raise KeyboardInterrupt
512 self.assertRaises(KeyboardInterrupt, hasattr, A(), "b")
513 class B:
514 def __getattr__(self, what):
515 raise SystemExit
516 self.assertRaises(SystemExit, hasattr, B(), "b")
517
Walter Dörwald919497e2003-01-19 16:23:59 +0000518 def test_hash(self):
519 hash(None)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000520 self.assertEqual(hash(1), hash(1))
Walter Dörwald919497e2003-01-19 16:23:59 +0000521 self.assertEqual(hash(1), hash(1.0))
522 hash('spam')
Guido van Rossum98297ee2007-11-06 21:34:58 +0000523 self.assertEqual(hash('spam'), hash(b'spam'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000524 hash((0,1,2,3))
525 def f(): pass
526 self.assertRaises(TypeError, hash, [])
527 self.assertRaises(TypeError, hash, {})
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000528 # Bug 1536021: Allow hash to return long objects
529 class X:
530 def __hash__(self):
531 return 2**100
532 self.assertEquals(type(hash(X())), int)
533 class Y(object):
534 def __hash__(self):
535 return 2**100
536 self.assertEquals(type(hash(Y())), int)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000537 class Z(int):
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000538 def __hash__(self):
539 return self
Guido van Rossume2a383d2007-01-15 16:59:06 +0000540 self.assertEquals(hash(Z(42)), hash(42))
Walter Dörwald919497e2003-01-19 16:23:59 +0000541
542 def test_hex(self):
543 self.assertEqual(hex(16), '0x10')
Guido van Rossume2a383d2007-01-15 16:59:06 +0000544 self.assertEqual(hex(16), '0x10')
Guido van Rossum6c9e1302003-11-29 23:52:13 +0000545 self.assertEqual(hex(-16), '-0x10')
Guido van Rossume2a383d2007-01-15 16:59:06 +0000546 self.assertEqual(hex(-16), '-0x10')
Walter Dörwald919497e2003-01-19 16:23:59 +0000547 self.assertRaises(TypeError, hex, {})
548
549 def test_id(self):
550 id(None)
551 id(1)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000552 id(1)
Walter Dörwald919497e2003-01-19 16:23:59 +0000553 id(1.0)
554 id('spam')
555 id((0,1,2,3))
556 id([0,1,2,3])
557 id({'spam': 1, 'eggs': 2, 'ham': 3})
558
Guido van Rossuma88a0332007-02-26 16:59:55 +0000559 # Test input() later, alphabetized as if it were raw_input
560
Walter Dörwald919497e2003-01-19 16:23:59 +0000561 def test_iter(self):
562 self.assertRaises(TypeError, iter)
563 self.assertRaises(TypeError, iter, 42, 42)
564 lists = [("1", "2"), ["1", "2"], "12"]
Walter Dörwald919497e2003-01-19 16:23:59 +0000565 for l in lists:
566 i = iter(l)
Georg Brandla18af4e2007-04-21 15:47:16 +0000567 self.assertEqual(next(i), '1')
568 self.assertEqual(next(i), '2')
569 self.assertRaises(StopIteration, next, i)
Walter Dörwald919497e2003-01-19 16:23:59 +0000570
571 def test_isinstance(self):
572 class C:
573 pass
574 class D(C):
575 pass
576 class E:
577 pass
578 c = C()
579 d = D()
580 e = E()
Georg Brandlab91fde2009-08-13 08:51:18 +0000581 self.assertTrue(isinstance(c, C))
582 self.assertTrue(isinstance(d, C))
583 self.assertTrue(not isinstance(e, C))
584 self.assertTrue(not isinstance(c, D))
585 self.assertTrue(not isinstance('foo', E))
Walter Dörwald919497e2003-01-19 16:23:59 +0000586 self.assertRaises(TypeError, isinstance, E, 'foo')
587 self.assertRaises(TypeError, isinstance)
588
589 def test_issubclass(self):
590 class C:
591 pass
592 class D(C):
593 pass
594 class E:
595 pass
596 c = C()
597 d = D()
598 e = E()
Georg Brandlab91fde2009-08-13 08:51:18 +0000599 self.assertTrue(issubclass(D, C))
600 self.assertTrue(issubclass(C, C))
601 self.assertTrue(not issubclass(C, D))
Walter Dörwald919497e2003-01-19 16:23:59 +0000602 self.assertRaises(TypeError, issubclass, 'foo', E)
603 self.assertRaises(TypeError, issubclass, E, 'foo')
604 self.assertRaises(TypeError, issubclass)
605
606 def test_len(self):
607 self.assertEqual(len('123'), 3)
608 self.assertEqual(len(()), 0)
609 self.assertEqual(len((1, 2, 3, 4)), 4)
610 self.assertEqual(len([1, 2, 3, 4]), 4)
611 self.assertEqual(len({}), 0)
612 self.assertEqual(len({'a':1, 'b': 2}), 2)
613 class BadSeq:
614 def __len__(self):
615 raise ValueError
616 self.assertRaises(ValueError, len, BadSeq())
Benjamin Petersonee1ae7c2009-02-08 21:07:20 +0000617 class InvalidLen:
618 def __len__(self):
619 return None
620 self.assertRaises(TypeError, len, InvalidLen())
621 class FloatLen:
622 def __len__(self):
623 return 4.5
624 self.assertRaises(TypeError, len, FloatLen())
625 class HugeLen:
626 def __len__(self):
627 return sys.maxsize + 1
628 self.assertRaises(OverflowError, len, HugeLen())
Walter Dörwald919497e2003-01-19 16:23:59 +0000629
Walter Dörwald919497e2003-01-19 16:23:59 +0000630 def test_map(self):
631 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000632 list(map(lambda x: x*x, range(1,4))),
Walter Dörwald919497e2003-01-19 16:23:59 +0000633 [1, 4, 9]
634 )
635 try:
636 from math import sqrt
637 except ImportError:
638 def sqrt(x):
639 return pow(x, 0.5)
640 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000641 list(map(lambda x: list(map(sqrt, x)), [[16, 4], [81, 9]])),
Walter Dörwald919497e2003-01-19 16:23:59 +0000642 [[4.0, 2.0], [9.0, 3.0]]
643 )
644 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000645 list(map(lambda x, y: x+y, [1,3,2], [9,1,4])),
Walter Dörwald919497e2003-01-19 16:23:59 +0000646 [10, 4, 6]
647 )
648
649 def plus(*v):
650 accu = 0
651 for i in v: accu = accu + i
652 return accu
653 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000654 list(map(plus, [1, 3, 7])),
Walter Dörwald919497e2003-01-19 16:23:59 +0000655 [1, 3, 7]
656 )
657 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000658 list(map(plus, [1, 3, 7], [4, 9, 2])),
Walter Dörwald919497e2003-01-19 16:23:59 +0000659 [1+4, 3+9, 7+2]
660 )
661 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000662 list(map(plus, [1, 3, 7], [4, 9, 2], [1, 1, 0])),
Walter Dörwald919497e2003-01-19 16:23:59 +0000663 [1+4+1, 3+9+1, 7+2+0]
664 )
665 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000666 list(map(int, Squares(10))),
Walter Dörwald919497e2003-01-19 16:23:59 +0000667 [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
668 )
Guido van Rossum47b9ff62006-08-24 00:41:19 +0000669 def Max(a, b):
670 if a is None:
671 return b
672 if b is None:
673 return a
674 return max(a, b)
Walter Dörwald919497e2003-01-19 16:23:59 +0000675 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000676 list(map(Max, Squares(3), Squares(2))),
677 [0, 1]
Walter Dörwald919497e2003-01-19 16:23:59 +0000678 )
679 self.assertRaises(TypeError, map)
680 self.assertRaises(TypeError, map, lambda x: x, 42)
Walter Dörwald919497e2003-01-19 16:23:59 +0000681 class BadSeq:
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000682 def __iter__(self):
Walter Dörwald919497e2003-01-19 16:23:59 +0000683 raise ValueError
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000684 yield None
685 self.assertRaises(ValueError, list, map(lambda x: x, BadSeq()))
Neal Norwitzfcf44352005-11-27 20:37:43 +0000686 def badfunc(x):
687 raise RuntimeError
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000688 self.assertRaises(RuntimeError, list, map(badfunc, range(5)))
Walter Dörwald919497e2003-01-19 16:23:59 +0000689
690 def test_max(self):
691 self.assertEqual(max('123123'), '3')
692 self.assertEqual(max(1, 2, 3), 3)
693 self.assertEqual(max((1, 2, 3, 1, 2, 3)), 3)
694 self.assertEqual(max([1, 2, 3, 1, 2, 3]), 3)
695
Guido van Rossume2a383d2007-01-15 16:59:06 +0000696 self.assertEqual(max(1, 2, 3.0), 3.0)
697 self.assertEqual(max(1, 2.0, 3), 3)
698 self.assertEqual(max(1.0, 2, 3), 3)
Walter Dörwald919497e2003-01-19 16:23:59 +0000699
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +0000700 for stmt in (
701 "max(key=int)", # no args
702 "max(1, key=int)", # single arg not iterable
703 "max(1, 2, keystone=int)", # wrong keyword
704 "max(1, 2, key=int, abc=int)", # two many keywords
705 "max(1, 2, key=1)", # keyfunc is not callable
706 ):
Tim Peters7f061872004-12-07 21:17:46 +0000707 try:
Georg Brandl7cae87c2006-09-06 06:51:57 +0000708 exec(stmt, globals())
Tim Peters7f061872004-12-07 21:17:46 +0000709 except TypeError:
710 pass
711 else:
712 self.fail(stmt)
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +0000713
714 self.assertEqual(max((1,), key=neg), 1) # one elem iterable
715 self.assertEqual(max((1,2), key=neg), 1) # two elem iterable
716 self.assertEqual(max(1, 2, key=neg), 1) # two elems
717
718 data = [random.randrange(200) for i in range(100)]
719 keys = dict((elem, random.randrange(50)) for elem in data)
720 f = keys.__getitem__
721 self.assertEqual(max(data, key=f),
722 sorted(reversed(data), key=f)[-1])
723
Walter Dörwald919497e2003-01-19 16:23:59 +0000724 def test_min(self):
725 self.assertEqual(min('123123'), '1')
726 self.assertEqual(min(1, 2, 3), 1)
727 self.assertEqual(min((1, 2, 3, 1, 2, 3)), 1)
728 self.assertEqual(min([1, 2, 3, 1, 2, 3]), 1)
729
Guido van Rossume2a383d2007-01-15 16:59:06 +0000730 self.assertEqual(min(1, 2, 3.0), 1)
731 self.assertEqual(min(1, 2.0, 3), 1)
732 self.assertEqual(min(1.0, 2, 3), 1.0)
Walter Dörwald919497e2003-01-19 16:23:59 +0000733
734 self.assertRaises(TypeError, min)
735 self.assertRaises(TypeError, min, 42)
736 self.assertRaises(ValueError, min, ())
737 class BadSeq:
738 def __getitem__(self, index):
739 raise ValueError
740 self.assertRaises(ValueError, min, BadSeq())
Walter Dörwald919497e2003-01-19 16:23:59 +0000741
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +0000742 for stmt in (
743 "min(key=int)", # no args
744 "min(1, key=int)", # single arg not iterable
745 "min(1, 2, keystone=int)", # wrong keyword
746 "min(1, 2, key=int, abc=int)", # two many keywords
747 "min(1, 2, key=1)", # keyfunc is not callable
748 ):
Tim Peters7f061872004-12-07 21:17:46 +0000749 try:
Georg Brandl7cae87c2006-09-06 06:51:57 +0000750 exec(stmt, globals())
Tim Peters7f061872004-12-07 21:17:46 +0000751 except TypeError:
752 pass
753 else:
754 self.fail(stmt)
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +0000755
756 self.assertEqual(min((1,), key=neg), 1) # one elem iterable
757 self.assertEqual(min((1,2), key=neg), 2) # two elem iterable
758 self.assertEqual(min(1, 2, key=neg), 2) # two elems
759
760 data = [random.randrange(200) for i in range(100)]
761 keys = dict((elem, random.randrange(50)) for elem in data)
762 f = keys.__getitem__
763 self.assertEqual(min(data, key=f),
764 sorted(data, key=f)[0])
765
Georg Brandla18af4e2007-04-21 15:47:16 +0000766 def test_next(self):
767 it = iter(range(2))
768 self.assertEqual(next(it), 0)
769 self.assertEqual(next(it), 1)
770 self.assertRaises(StopIteration, next, it)
771 self.assertRaises(StopIteration, next, it)
772 self.assertEquals(next(it, 42), 42)
773
774 class Iter(object):
775 def __iter__(self):
776 return self
777 def __next__(self):
778 raise StopIteration
779
780 it = iter(Iter())
781 self.assertEquals(next(it, 42), 42)
782 self.assertRaises(StopIteration, next, it)
783
784 def gen():
785 yield 1
786 return
787
788 it = gen()
789 self.assertEquals(next(it), 1)
790 self.assertRaises(StopIteration, next, it)
791 self.assertEquals(next(it, 42), 42)
792
Walter Dörwald919497e2003-01-19 16:23:59 +0000793 def test_oct(self):
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000794 self.assertEqual(oct(100), '0o144')
795 self.assertEqual(oct(100), '0o144')
796 self.assertEqual(oct(-100), '-0o144')
797 self.assertEqual(oct(-100), '-0o144')
Walter Dörwald919497e2003-01-19 16:23:59 +0000798 self.assertRaises(TypeError, oct, ())
799
800 def write_testfile(self):
Guido van Rossuma88a0332007-02-26 16:59:55 +0000801 # NB the first 4 lines are also used to test input, below
Walter Dörwald919497e2003-01-19 16:23:59 +0000802 fp = open(TESTFN, 'w')
803 try:
804 fp.write('1+1\n')
805 fp.write('1+1\n')
806 fp.write('The quick brown fox jumps over the lazy dog')
807 fp.write('.\n')
808 fp.write('Dear John\n')
809 fp.write('XXX'*100)
810 fp.write('YYY'*100)
811 finally:
812 fp.close()
813
814 def test_open(self):
815 self.write_testfile()
816 fp = open(TESTFN, 'r')
817 try:
818 self.assertEqual(fp.readline(4), '1+1\n')
819 self.assertEqual(fp.readline(4), '1+1\n')
820 self.assertEqual(fp.readline(), 'The quick brown fox jumps over the lazy dog.\n')
821 self.assertEqual(fp.readline(4), 'Dear')
822 self.assertEqual(fp.readline(100), ' John\n')
823 self.assertEqual(fp.read(300), 'XXX'*100)
824 self.assertEqual(fp.read(1000), 'YYY'*100)
825 finally:
826 fp.close()
827 unlink(TESTFN)
828
829 def test_ord(self):
830 self.assertEqual(ord(' '), 32)
831 self.assertEqual(ord('A'), 65)
832 self.assertEqual(ord('a'), 97)
Guido van Rossumf9e91c92007-05-08 21:05:48 +0000833 self.assertEqual(ord('\x80'), 128)
834 self.assertEqual(ord('\xff'), 255)
835
836 self.assertEqual(ord(b' '), 32)
837 self.assertEqual(ord(b'A'), 65)
838 self.assertEqual(ord(b'a'), 97)
839 self.assertEqual(ord(b'\x80'), 128)
840 self.assertEqual(ord(b'\xff'), 255)
841
Walter Dörwald1f5947b2007-05-22 16:52:54 +0000842 self.assertEqual(ord(chr(sys.maxunicode)), sys.maxunicode)
Walter Dörwald919497e2003-01-19 16:23:59 +0000843 self.assertRaises(TypeError, ord, 42)
Walter Dörwald919497e2003-01-19 16:23:59 +0000844
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000845 self.assertEqual(ord(chr(0x10FFFF)), 0x10FFFF)
846 self.assertEqual(ord("\U0000FFFF"), 0x0000FFFF)
847 self.assertEqual(ord("\U00010000"), 0x00010000)
848 self.assertEqual(ord("\U00010001"), 0x00010001)
849 self.assertEqual(ord("\U000FFFFE"), 0x000FFFFE)
850 self.assertEqual(ord("\U000FFFFF"), 0x000FFFFF)
851 self.assertEqual(ord("\U00100000"), 0x00100000)
852 self.assertEqual(ord("\U00100001"), 0x00100001)
853 self.assertEqual(ord("\U0010FFFE"), 0x0010FFFE)
854 self.assertEqual(ord("\U0010FFFF"), 0x0010FFFF)
855
Walter Dörwald919497e2003-01-19 16:23:59 +0000856 def test_pow(self):
857 self.assertEqual(pow(0,0), 1)
858 self.assertEqual(pow(0,1), 0)
859 self.assertEqual(pow(1,0), 1)
860 self.assertEqual(pow(1,1), 1)
861
862 self.assertEqual(pow(2,0), 1)
863 self.assertEqual(pow(2,10), 1024)
864 self.assertEqual(pow(2,20), 1024*1024)
865 self.assertEqual(pow(2,30), 1024*1024*1024)
866
867 self.assertEqual(pow(-2,0), 1)
868 self.assertEqual(pow(-2,1), -2)
869 self.assertEqual(pow(-2,2), 4)
870 self.assertEqual(pow(-2,3), -8)
871
Guido van Rossume2a383d2007-01-15 16:59:06 +0000872 self.assertEqual(pow(0,0), 1)
873 self.assertEqual(pow(0,1), 0)
874 self.assertEqual(pow(1,0), 1)
875 self.assertEqual(pow(1,1), 1)
Walter Dörwald919497e2003-01-19 16:23:59 +0000876
Guido van Rossume2a383d2007-01-15 16:59:06 +0000877 self.assertEqual(pow(2,0), 1)
878 self.assertEqual(pow(2,10), 1024)
879 self.assertEqual(pow(2,20), 1024*1024)
880 self.assertEqual(pow(2,30), 1024*1024*1024)
Walter Dörwald919497e2003-01-19 16:23:59 +0000881
Guido van Rossume2a383d2007-01-15 16:59:06 +0000882 self.assertEqual(pow(-2,0), 1)
883 self.assertEqual(pow(-2,1), -2)
884 self.assertEqual(pow(-2,2), 4)
885 self.assertEqual(pow(-2,3), -8)
Walter Dörwald919497e2003-01-19 16:23:59 +0000886
887 self.assertAlmostEqual(pow(0.,0), 1.)
888 self.assertAlmostEqual(pow(0.,1), 0.)
889 self.assertAlmostEqual(pow(1.,0), 1.)
890 self.assertAlmostEqual(pow(1.,1), 1.)
891
892 self.assertAlmostEqual(pow(2.,0), 1.)
893 self.assertAlmostEqual(pow(2.,10), 1024.)
894 self.assertAlmostEqual(pow(2.,20), 1024.*1024.)
895 self.assertAlmostEqual(pow(2.,30), 1024.*1024.*1024.)
896
897 self.assertAlmostEqual(pow(-2.,0), 1.)
898 self.assertAlmostEqual(pow(-2.,1), -2.)
899 self.assertAlmostEqual(pow(-2.,2), 4.)
900 self.assertAlmostEqual(pow(-2.,3), -8.)
901
Guido van Rossume2a383d2007-01-15 16:59:06 +0000902 for x in 2, 2, 2.0:
903 for y in 10, 10, 10.0:
904 for z in 1000, 1000, 1000.0:
Walter Dörwald919497e2003-01-19 16:23:59 +0000905 if isinstance(x, float) or \
906 isinstance(y, float) or \
907 isinstance(z, float):
908 self.assertRaises(TypeError, pow, x, y, z)
909 else:
910 self.assertAlmostEqual(pow(x, y, z), 24.0)
911
Jeffrey Yasskin3404b3c2007-09-07 15:15:49 +0000912 self.assertAlmostEqual(pow(-1, 0.5), 1j)
913 self.assertAlmostEqual(pow(-1, 1/3), 0.5 + 0.8660254037844386j)
914
Walter Dörwald919497e2003-01-19 16:23:59 +0000915 self.assertRaises(TypeError, pow, -1, -2, 3)
916 self.assertRaises(ValueError, pow, 1, 2, 0)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000917 self.assertRaises(TypeError, pow, -1, -2, 3)
918 self.assertRaises(ValueError, pow, 1, 2, 0)
Walter Dörwald919497e2003-01-19 16:23:59 +0000919
920 self.assertRaises(TypeError, pow)
921
922 def test_range(self):
Guido van Rossum805365e2007-05-07 22:24:25 +0000923 self.assertEqual(list(range(3)), [0, 1, 2])
924 self.assertEqual(list(range(1, 5)), [1, 2, 3, 4])
925 self.assertEqual(list(range(0)), [])
926 self.assertEqual(list(range(-3)), [])
927 self.assertEqual(list(range(1, 10, 3)), [1, 4, 7])
928 #self.assertEqual(list(range(5, -5, -3)), [5, 2, -1, -4])
Walter Dörwald919497e2003-01-19 16:23:59 +0000929
Mark Dickinsoneb36d312009-06-24 18:36:46 +0000930 #issue 6334: the internal stored range length was being
931 #computed incorrectly in some cases involving large arguments.
932 x = range(10**20, 10**20+10, 3)
933 self.assertEqual(len(x), 4)
934 self.assertEqual(len(list(x)), 4)
935
936 x = range(10**20+10, 10**20, 3)
937 self.assertEqual(len(x), 0)
938 self.assertEqual(len(list(x)), 0)
939
940 x = range(10**20, 10**20+10, -3)
941 self.assertEqual(len(x), 0)
942 self.assertEqual(len(list(x)), 0)
943
944 x = range(10**20+10, 10**20, -3)
945 self.assertEqual(len(x), 4)
946 self.assertEqual(len(list(x)), 4)
947
Guido van Rossum805365e2007-05-07 22:24:25 +0000948 """ XXX(nnorwitz):
Guido van Rossumefbbb1c2003-04-11 18:43:06 +0000949 # Now test range() with longs
Guido van Rossum805365e2007-05-07 22:24:25 +0000950 self.assertEqual(list(range(-2**100)), [])
951 self.assertEqual(list(range(0, -2**100)), [])
952 self.assertEqual(list(range(0, 2**100, -1)), [])
953 self.assertEqual(list(range(0, 2**100, -1)), [])
Guido van Rossumefbbb1c2003-04-11 18:43:06 +0000954
Christian Heimesa37d4c62007-12-04 23:02:19 +0000955 a = int(10 * sys.maxsize)
956 b = int(100 * sys.maxsize)
957 c = int(50 * sys.maxsize)
Guido van Rossumefbbb1c2003-04-11 18:43:06 +0000958
Guido van Rossum805365e2007-05-07 22:24:25 +0000959 self.assertEqual(list(range(a, a+2)), [a, a+1])
960 self.assertEqual(list(range(a+2, a, -1)), [a+2, a+1])
961 self.assertEqual(list(range(a+4, a, -2)), [a+4, a+2])
Guido van Rossumefbbb1c2003-04-11 18:43:06 +0000962
Guido van Rossum805365e2007-05-07 22:24:25 +0000963 seq = list(range(a, b, c))
Georg Brandlab91fde2009-08-13 08:51:18 +0000964 self.assertTrue(a in seq)
965 self.assertTrue(b not in seq)
Guido van Rossumefbbb1c2003-04-11 18:43:06 +0000966 self.assertEqual(len(seq), 2)
967
Guido van Rossum805365e2007-05-07 22:24:25 +0000968 seq = list(range(b, a, -c))
Georg Brandlab91fde2009-08-13 08:51:18 +0000969 self.assertTrue(b in seq)
970 self.assertTrue(a not in seq)
Guido van Rossumefbbb1c2003-04-11 18:43:06 +0000971 self.assertEqual(len(seq), 2)
972
Guido van Rossum805365e2007-05-07 22:24:25 +0000973 seq = list(range(-a, -b, -c))
Georg Brandlab91fde2009-08-13 08:51:18 +0000974 self.assertTrue(-a in seq)
975 self.assertTrue(-b not in seq)
Guido van Rossumefbbb1c2003-04-11 18:43:06 +0000976 self.assertEqual(len(seq), 2)
977
Walter Dörwald919497e2003-01-19 16:23:59 +0000978 self.assertRaises(TypeError, range)
979 self.assertRaises(TypeError, range, 1, 2, 3, 4)
980 self.assertRaises(ValueError, range, 1, 2, 0)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000981 self.assertRaises(ValueError, range, a, a + 1, int(0))
Neal Norwitzfcf44352005-11-27 20:37:43 +0000982
983 class badzero(int):
Guido van Rossum47b9ff62006-08-24 00:41:19 +0000984 def __eq__(self, other):
Neal Norwitzfcf44352005-11-27 20:37:43 +0000985 raise RuntimeError
Guido van Rossum47b9ff62006-08-24 00:41:19 +0000986 __ne__ = __lt__ = __gt__ = __le__ = __ge__ = __eq__
987
988 # XXX This won't (but should!) raise RuntimeError if a is an int...
Neal Norwitzfcf44352005-11-27 20:37:43 +0000989 self.assertRaises(RuntimeError, range, a, a + 1, badzero(1))
Guido van Rossum805365e2007-05-07 22:24:25 +0000990 """
Walter Dörwald919497e2003-01-19 16:23:59 +0000991
Guido van Rossumefbbb1c2003-04-11 18:43:06 +0000992 # Reject floats when it would require PyLongs to represent.
993 # (smaller floats still accepted, but deprecated)
Tim Peters299b3df2003-04-15 14:40:03 +0000994 self.assertRaises(TypeError, range, 1e100, 1e101, 1e101)
Guido van Rossumefbbb1c2003-04-11 18:43:06 +0000995
Walter Dörwald357981e2003-04-15 18:59:28 +0000996 self.assertRaises(TypeError, range, 0, "spam")
997 self.assertRaises(TypeError, range, 0, 42, "spam")
998
Christian Heimesa37d4c62007-12-04 23:02:19 +0000999 #NEAL self.assertRaises(OverflowError, range, -sys.maxsize, sys.maxsize)
1000 #NEAL self.assertRaises(OverflowError, range, 0, 2*sys.maxsize)
Guido van Rossum805365e2007-05-07 22:24:25 +00001001
Christian Heimesa37d4c62007-12-04 23:02:19 +00001002 self.assertRaises(OverflowError, len, range(0, sys.maxsize**10))
Walter Dörwald357981e2003-04-15 18:59:28 +00001003
Guido van Rossuma88a0332007-02-26 16:59:55 +00001004 def test_input(self):
1005 self.write_testfile()
1006 fp = open(TESTFN, 'r')
1007 savestdin = sys.stdin
1008 savestdout = sys.stdout # Eats the echo
1009 try:
1010 sys.stdin = fp
1011 sys.stdout = BitBucket()
1012 self.assertEqual(input(), "1+1")
1013 self.assertEqual(input('testing\n'), "1+1")
1014 self.assertEqual(input(), 'The quick brown fox jumps over the lazy dog.')
1015 self.assertEqual(input('testing\n'), 'Dear John')
1016
1017 # SF 1535165: don't segfault on closed stdin
1018 # sys.stdout must be a regular file for triggering
1019 sys.stdout = savestdout
1020 sys.stdin.close()
1021 self.assertRaises(ValueError, input)
1022
1023 sys.stdout = BitBucket()
Guido van Rossum34d19282007-08-09 01:03:29 +00001024 sys.stdin = io.StringIO("NULL\0")
Guido van Rossuma88a0332007-02-26 16:59:55 +00001025 self.assertRaises(TypeError, input, 42, 42)
Guido van Rossum34d19282007-08-09 01:03:29 +00001026 sys.stdin = io.StringIO(" 'whitespace'")
Guido van Rossuma88a0332007-02-26 16:59:55 +00001027 self.assertEqual(input(), " 'whitespace'")
Guido van Rossum34d19282007-08-09 01:03:29 +00001028 sys.stdin = io.StringIO()
Guido van Rossuma88a0332007-02-26 16:59:55 +00001029 self.assertRaises(EOFError, input)
1030
1031 del sys.stdout
1032 self.assertRaises(RuntimeError, input, 'prompt')
1033 del sys.stdin
1034 self.assertRaises(RuntimeError, input, 'prompt')
1035 finally:
1036 sys.stdin = savestdin
1037 sys.stdout = savestdout
1038 fp.close()
1039 unlink(TESTFN)
1040
Walter Dörwald919497e2003-01-19 16:23:59 +00001041 def test_repr(self):
1042 self.assertEqual(repr(''), '\'\'')
1043 self.assertEqual(repr(0), '0')
Guido van Rossume2a383d2007-01-15 16:59:06 +00001044 self.assertEqual(repr(0), '0')
Walter Dörwald919497e2003-01-19 16:23:59 +00001045 self.assertEqual(repr(()), '()')
1046 self.assertEqual(repr([]), '[]')
1047 self.assertEqual(repr({}), '{}')
1048 a = []
1049 a.append(a)
1050 self.assertEqual(repr(a), '[[...]]')
1051 a = {}
1052 a[0] = a
1053 self.assertEqual(repr(a), '{0: {...}}')
1054
1055 def test_round(self):
1056 self.assertEqual(round(0.0), 0.0)
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001057 self.assertEqual(type(round(0.0)), int)
Walter Dörwald919497e2003-01-19 16:23:59 +00001058 self.assertEqual(round(1.0), 1.0)
1059 self.assertEqual(round(10.0), 10.0)
1060 self.assertEqual(round(1000000000.0), 1000000000.0)
1061 self.assertEqual(round(1e20), 1e20)
1062
1063 self.assertEqual(round(-1.0), -1.0)
1064 self.assertEqual(round(-10.0), -10.0)
1065 self.assertEqual(round(-1000000000.0), -1000000000.0)
1066 self.assertEqual(round(-1e20), -1e20)
1067
1068 self.assertEqual(round(0.1), 0.0)
1069 self.assertEqual(round(1.1), 1.0)
1070 self.assertEqual(round(10.1), 10.0)
1071 self.assertEqual(round(1000000000.1), 1000000000.0)
1072
1073 self.assertEqual(round(-1.1), -1.0)
1074 self.assertEqual(round(-10.1), -10.0)
1075 self.assertEqual(round(-1000000000.1), -1000000000.0)
1076
1077 self.assertEqual(round(0.9), 1.0)
1078 self.assertEqual(round(9.9), 10.0)
1079 self.assertEqual(round(999999999.9), 1000000000.0)
1080
1081 self.assertEqual(round(-0.9), -1.0)
1082 self.assertEqual(round(-9.9), -10.0)
1083 self.assertEqual(round(-999999999.9), -1000000000.0)
1084
1085 self.assertEqual(round(-8.0, -1), -10.0)
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001086 self.assertEqual(type(round(-8.0, -1)), float)
1087
1088 self.assertEqual(type(round(-8.0, 0)), float)
1089 self.assertEqual(type(round(-8.0, 1)), float)
1090
1091 # Check even / odd rounding behaviour
1092 self.assertEqual(round(5.5), 6)
1093 self.assertEqual(round(6.5), 6)
1094 self.assertEqual(round(-5.5), -6)
1095 self.assertEqual(round(-6.5), -6)
1096
1097 # Check behavior on ints
1098 self.assertEqual(round(0), 0)
1099 self.assertEqual(round(8), 8)
1100 self.assertEqual(round(-8), -8)
1101 self.assertEqual(type(round(0)), int)
Mark Dickinson1124e712009-01-28 21:25:58 +00001102 self.assertEqual(type(round(-8, -1)), int)
1103 self.assertEqual(type(round(-8, 0)), int)
1104 self.assertEqual(type(round(-8, 1)), int)
Walter Dörwald919497e2003-01-19 16:23:59 +00001105
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001106 # test new kwargs
1107 self.assertEqual(round(number=-8.0, ndigits=-1), -10.0)
1108
Walter Dörwald919497e2003-01-19 16:23:59 +00001109 self.assertRaises(TypeError, round)
1110
Alex Martelliae211f92007-08-22 23:21:33 +00001111 # test generic rounding delegation for reals
1112 class TestRound:
1113 def __round__(self):
1114 return 23
1115
1116 class TestNoRound:
1117 pass
1118
1119 self.assertEqual(round(TestRound()), 23)
1120
1121 self.assertRaises(TypeError, round, 1, 2, 3)
1122 self.assertRaises(TypeError, round, TestNoRound())
1123
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001124 t = TestNoRound()
1125 t.__round__ = lambda *args: args
1126 self.assertRaises(TypeError, round, t)
1127 self.assertRaises(TypeError, round, t, 0)
1128
Mark Dickinson94882db2009-11-09 17:14:18 +00001129 # Some versions of glibc for alpha have a bug that affects
1130 # float -> integer rounding (floor, ceil, rint, round) for
1131 # values in the range [2**52, 2**53). See:
1132 #
1133 # http://sources.redhat.com/bugzilla/show_bug.cgi?id=5350
1134 #
1135 # We skip this test on Linux/alpha if it would fail.
1136 linux_alpha = (platform.system().startswith('Linux') and
1137 platform.machine().startswith('alpha'))
1138 system_round_bug = round(5e15+1) != 5e15+1
1139 @unittest.skipIf(linux_alpha and system_round_bug,
1140 "test will fail; failure is probably due to a "
1141 "buggy system round function")
1142 def test_round_large(self):
1143 # Issue #1869: integral floats should remain unchanged
1144 self.assertEqual(round(5e15-1), 5e15-1)
1145 self.assertEqual(round(5e15), 5e15)
1146 self.assertEqual(round(5e15+1), 5e15+1)
1147 self.assertEqual(round(5e15+2), 5e15+2)
1148 self.assertEqual(round(5e15+3), 5e15+3)
1149
Walter Dörwald919497e2003-01-19 16:23:59 +00001150 def test_setattr(self):
Tim Petersf2715e02003-02-19 02:35:07 +00001151 setattr(sys, 'spam', 1)
1152 self.assertEqual(sys.spam, 1)
1153 self.assertRaises(TypeError, setattr, sys, 1, 'spam')
1154 self.assertRaises(TypeError, setattr)
Walter Dörwald919497e2003-01-19 16:23:59 +00001155
Walter Dörwald919497e2003-01-19 16:23:59 +00001156
Alex Martellia70b1912003-04-22 08:12:33 +00001157 def test_sum(self):
1158 self.assertEqual(sum([]), 0)
Guido van Rossum805365e2007-05-07 22:24:25 +00001159 self.assertEqual(sum(list(range(2,8))), 27)
1160 self.assertEqual(sum(iter(list(range(2,8)))), 27)
Alex Martellia70b1912003-04-22 08:12:33 +00001161 self.assertEqual(sum(Squares(10)), 285)
1162 self.assertEqual(sum(iter(Squares(10))), 285)
1163 self.assertEqual(sum([[1], [2], [3]], []), [1, 2, 3])
1164
1165 self.assertRaises(TypeError, sum)
1166 self.assertRaises(TypeError, sum, 42)
1167 self.assertRaises(TypeError, sum, ['a', 'b', 'c'])
1168 self.assertRaises(TypeError, sum, ['a', 'b', 'c'], '')
1169 self.assertRaises(TypeError, sum, [[1], [2], [3]])
1170 self.assertRaises(TypeError, sum, [{2:3}])
1171 self.assertRaises(TypeError, sum, [{2:3}]*2, {2:3})
1172
1173 class BadSeq:
1174 def __getitem__(self, index):
1175 raise ValueError
1176 self.assertRaises(ValueError, sum, BadSeq())
1177
Walter Dörwald919497e2003-01-19 16:23:59 +00001178 def test_type(self):
1179 self.assertEqual(type(''), type('123'))
1180 self.assertNotEqual(type(''), type(()))
1181
Guido van Rossumfee7b932005-01-16 00:21:28 +00001182 # We don't want self in vars(), so these are static methods
1183
1184 @staticmethod
Walter Dörwald919497e2003-01-19 16:23:59 +00001185 def get_vars_f0():
1186 return vars()
Walter Dörwald919497e2003-01-19 16:23:59 +00001187
Guido van Rossumfee7b932005-01-16 00:21:28 +00001188 @staticmethod
Walter Dörwald919497e2003-01-19 16:23:59 +00001189 def get_vars_f2():
1190 BuiltinTest.get_vars_f0()
1191 a = 1
1192 b = 2
1193 return vars()
Walter Dörwald919497e2003-01-19 16:23:59 +00001194
1195 def test_vars(self):
Raymond Hettingera690a992003-11-16 16:17:49 +00001196 self.assertEqual(set(vars()), set(dir()))
Walter Dörwald919497e2003-01-19 16:23:59 +00001197 import sys
Raymond Hettingera690a992003-11-16 16:17:49 +00001198 self.assertEqual(set(vars(sys)), set(dir(sys)))
Walter Dörwald919497e2003-01-19 16:23:59 +00001199 self.assertEqual(self.get_vars_f0(), {})
1200 self.assertEqual(self.get_vars_f2(), {'a': 1, 'b': 2})
1201 self.assertRaises(TypeError, vars, 42, 42)
1202 self.assertRaises(TypeError, vars, 42)
1203
1204 def test_zip(self):
1205 a = (1, 2, 3)
1206 b = (4, 5, 6)
1207 t = [(1, 4), (2, 5), (3, 6)]
Guido van Rossum801f0d72006-08-24 19:48:10 +00001208 self.assertEqual(list(zip(a, b)), t)
Walter Dörwald919497e2003-01-19 16:23:59 +00001209 b = [4, 5, 6]
Guido van Rossum801f0d72006-08-24 19:48:10 +00001210 self.assertEqual(list(zip(a, b)), t)
Walter Dörwald919497e2003-01-19 16:23:59 +00001211 b = (4, 5, 6, 7)
Guido van Rossum801f0d72006-08-24 19:48:10 +00001212 self.assertEqual(list(zip(a, b)), t)
Walter Dörwald919497e2003-01-19 16:23:59 +00001213 class I:
1214 def __getitem__(self, i):
1215 if i < 0 or i > 2: raise IndexError
1216 return i + 4
Guido van Rossum801f0d72006-08-24 19:48:10 +00001217 self.assertEqual(list(zip(a, I())), t)
1218 self.assertEqual(list(zip()), [])
1219 self.assertEqual(list(zip(*[])), [])
Walter Dörwald919497e2003-01-19 16:23:59 +00001220 self.assertRaises(TypeError, zip, None)
1221 class G:
1222 pass
1223 self.assertRaises(TypeError, zip, a, G())
Alexander Belopolsky7a9bdbc2010-08-16 19:46:32 +00001224 self.assertRaises(RuntimeError, zip, a, TestFailingIter())
Walter Dörwald919497e2003-01-19 16:23:59 +00001225
1226 # Make sure zip doesn't try to allocate a billion elements for the
1227 # result list when one of its arguments doesn't say how long it is.
1228 # A MemoryError is the most likely failure mode.
1229 class SequenceWithoutALength:
1230 def __getitem__(self, i):
1231 if i == 5:
1232 raise IndexError
1233 else:
1234 return i
1235 self.assertEqual(
Guido van Rossum805365e2007-05-07 22:24:25 +00001236 list(zip(SequenceWithoutALength(), range(2**30))),
Walter Dörwald919497e2003-01-19 16:23:59 +00001237 list(enumerate(range(5)))
1238 )
1239
1240 class BadSeq:
1241 def __getitem__(self, i):
1242 if i == 5:
1243 raise ValueError
1244 else:
1245 return i
Guido van Rossum801f0d72006-08-24 19:48:10 +00001246 self.assertRaises(ValueError, list, zip(BadSeq(), BadSeq()))
Walter Dörwald919497e2003-01-19 16:23:59 +00001247
Christian Heimes90c3d9b2008-02-23 13:18:03 +00001248 def test_bin(self):
1249 self.assertEqual(bin(0), '0b0')
1250 self.assertEqual(bin(1), '0b1')
1251 self.assertEqual(bin(-1), '-0b1')
1252 self.assertEqual(bin(2**65), '0b1' + '0' * 65)
1253 self.assertEqual(bin(2**65-1), '0b' + '1' * 65)
1254 self.assertEqual(bin(-(2**65)), '-0b1' + '0' * 65)
1255 self.assertEqual(bin(-(2**65-1)), '-0b' + '1' * 65)
1256
Georg Brandl069bcc32009-07-22 12:06:11 +00001257 def test_bytearray_translate(self):
1258 x = bytearray(b"abc")
1259 self.assertRaises(ValueError, x.translate, b"1", 1)
1260 self.assertRaises(TypeError, x.translate, b"1"*256, 1)
1261
Raymond Hettinger64958a12003-12-17 20:43:33 +00001262class TestSorted(unittest.TestCase):
1263
1264 def test_basic(self):
Guido van Rossum805365e2007-05-07 22:24:25 +00001265 data = list(range(100))
Raymond Hettinger64958a12003-12-17 20:43:33 +00001266 copy = data[:]
1267 random.shuffle(copy)
1268 self.assertEqual(data, sorted(copy))
1269 self.assertNotEqual(data, copy)
1270
1271 data.reverse()
1272 random.shuffle(copy)
Raymond Hettinger64958a12003-12-17 20:43:33 +00001273 self.assertEqual(data, sorted(copy, key=lambda x: -x))
1274 self.assertNotEqual(data, copy)
1275 random.shuffle(copy)
1276 self.assertEqual(data, sorted(copy, reverse=1))
1277 self.assertNotEqual(data, copy)
1278
1279 def test_inputtypes(self):
1280 s = 'abracadabra'
Walter Dörwald1f5947b2007-05-22 16:52:54 +00001281 types = [list, tuple, str]
Walter Dörwald4e41a4b2005-08-03 17:09:04 +00001282 for T in types:
Raymond Hettinger64958a12003-12-17 20:43:33 +00001283 self.assertEqual(sorted(s), sorted(T(s)))
1284
Walter Dörwald1f5947b2007-05-22 16:52:54 +00001285 s = ''.join(set(s)) # unique letters only
1286 types = [str, set, frozenset, list, tuple, dict.fromkeys]
Walter Dörwald4e41a4b2005-08-03 17:09:04 +00001287 for T in types:
Raymond Hettinger64958a12003-12-17 20:43:33 +00001288 self.assertEqual(sorted(s), sorted(T(s)))
1289
1290 def test_baddecorator(self):
1291 data = 'The quick Brown fox Jumped over The lazy Dog'.split()
1292 self.assertRaises(TypeError, sorted, data, None, lambda x,y: 0)
1293
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001294def test_main(verbose=None):
1295 test_classes = (BuiltinTest, TestSorted)
1296
1297 run_unittest(*test_classes)
1298
1299 # verify reference counting
1300 if verbose and hasattr(sys, "gettotalrefcount"):
1301 import gc
1302 counts = [None] * 5
Guido van Rossum805365e2007-05-07 22:24:25 +00001303 for i in range(len(counts)):
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001304 run_unittest(*test_classes)
1305 gc.collect()
1306 counts[i] = sys.gettotalrefcount()
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001307 print(counts)
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001308
Walter Dörwald919497e2003-01-19 16:23:59 +00001309
1310if __name__ == "__main__":
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001311 test_main(verbose=True)