blob: f88a2d5d1380e8e0940bcb629d2ea0038d049203 [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))
Walter Dörwald919497e2003-01-19 16:23:59 +0000498
499 def test_hasattr(self):
500 import sys
Georg Brandlab91fde2009-08-13 08:51:18 +0000501 self.assertTrue(hasattr(sys, 'stdout'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000502 self.assertRaises(TypeError, hasattr, sys, 1)
503 self.assertRaises(TypeError, hasattr)
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000504 self.assertEqual(False, hasattr(sys, chr(sys.maxunicode)))
Walter Dörwald919497e2003-01-19 16:23:59 +0000505
Alexandre Vassalottieca20b62008-05-16 02:54:33 +0000506 # Check that hasattr allows SystemExit and KeyboardInterrupts by
507 class A:
508 def __getattr__(self, what):
509 raise KeyboardInterrupt
510 self.assertRaises(KeyboardInterrupt, hasattr, A(), "b")
511 class B:
512 def __getattr__(self, what):
513 raise SystemExit
514 self.assertRaises(SystemExit, hasattr, B(), "b")
515
Walter Dörwald919497e2003-01-19 16:23:59 +0000516 def test_hash(self):
517 hash(None)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000518 self.assertEqual(hash(1), hash(1))
Walter Dörwald919497e2003-01-19 16:23:59 +0000519 self.assertEqual(hash(1), hash(1.0))
520 hash('spam')
Guido van Rossum98297ee2007-11-06 21:34:58 +0000521 self.assertEqual(hash('spam'), hash(b'spam'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000522 hash((0,1,2,3))
523 def f(): pass
524 self.assertRaises(TypeError, hash, [])
525 self.assertRaises(TypeError, hash, {})
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000526 # Bug 1536021: Allow hash to return long objects
527 class X:
528 def __hash__(self):
529 return 2**100
530 self.assertEquals(type(hash(X())), int)
531 class Y(object):
532 def __hash__(self):
533 return 2**100
534 self.assertEquals(type(hash(Y())), int)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000535 class Z(int):
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000536 def __hash__(self):
537 return self
Guido van Rossume2a383d2007-01-15 16:59:06 +0000538 self.assertEquals(hash(Z(42)), hash(42))
Walter Dörwald919497e2003-01-19 16:23:59 +0000539
540 def test_hex(self):
541 self.assertEqual(hex(16), '0x10')
Guido van Rossume2a383d2007-01-15 16:59:06 +0000542 self.assertEqual(hex(16), '0x10')
Guido van Rossum6c9e1302003-11-29 23:52:13 +0000543 self.assertEqual(hex(-16), '-0x10')
Guido van Rossume2a383d2007-01-15 16:59:06 +0000544 self.assertEqual(hex(-16), '-0x10')
Walter Dörwald919497e2003-01-19 16:23:59 +0000545 self.assertRaises(TypeError, hex, {})
546
547 def test_id(self):
548 id(None)
549 id(1)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000550 id(1)
Walter Dörwald919497e2003-01-19 16:23:59 +0000551 id(1.0)
552 id('spam')
553 id((0,1,2,3))
554 id([0,1,2,3])
555 id({'spam': 1, 'eggs': 2, 'ham': 3})
556
Guido van Rossuma88a0332007-02-26 16:59:55 +0000557 # Test input() later, alphabetized as if it were raw_input
558
Walter Dörwald919497e2003-01-19 16:23:59 +0000559 def test_iter(self):
560 self.assertRaises(TypeError, iter)
561 self.assertRaises(TypeError, iter, 42, 42)
562 lists = [("1", "2"), ["1", "2"], "12"]
Walter Dörwald919497e2003-01-19 16:23:59 +0000563 for l in lists:
564 i = iter(l)
Georg Brandla18af4e2007-04-21 15:47:16 +0000565 self.assertEqual(next(i), '1')
566 self.assertEqual(next(i), '2')
567 self.assertRaises(StopIteration, next, i)
Walter Dörwald919497e2003-01-19 16:23:59 +0000568
569 def test_isinstance(self):
570 class C:
571 pass
572 class D(C):
573 pass
574 class E:
575 pass
576 c = C()
577 d = D()
578 e = E()
Georg Brandlab91fde2009-08-13 08:51:18 +0000579 self.assertTrue(isinstance(c, C))
580 self.assertTrue(isinstance(d, C))
581 self.assertTrue(not isinstance(e, C))
582 self.assertTrue(not isinstance(c, D))
583 self.assertTrue(not isinstance('foo', E))
Walter Dörwald919497e2003-01-19 16:23:59 +0000584 self.assertRaises(TypeError, isinstance, E, 'foo')
585 self.assertRaises(TypeError, isinstance)
586
587 def test_issubclass(self):
588 class C:
589 pass
590 class D(C):
591 pass
592 class E:
593 pass
594 c = C()
595 d = D()
596 e = E()
Georg Brandlab91fde2009-08-13 08:51:18 +0000597 self.assertTrue(issubclass(D, C))
598 self.assertTrue(issubclass(C, C))
599 self.assertTrue(not issubclass(C, D))
Walter Dörwald919497e2003-01-19 16:23:59 +0000600 self.assertRaises(TypeError, issubclass, 'foo', E)
601 self.assertRaises(TypeError, issubclass, E, 'foo')
602 self.assertRaises(TypeError, issubclass)
603
604 def test_len(self):
605 self.assertEqual(len('123'), 3)
606 self.assertEqual(len(()), 0)
607 self.assertEqual(len((1, 2, 3, 4)), 4)
608 self.assertEqual(len([1, 2, 3, 4]), 4)
609 self.assertEqual(len({}), 0)
610 self.assertEqual(len({'a':1, 'b': 2}), 2)
611 class BadSeq:
612 def __len__(self):
613 raise ValueError
614 self.assertRaises(ValueError, len, BadSeq())
Benjamin Petersonee1ae7c2009-02-08 21:07:20 +0000615 class InvalidLen:
616 def __len__(self):
617 return None
618 self.assertRaises(TypeError, len, InvalidLen())
619 class FloatLen:
620 def __len__(self):
621 return 4.5
622 self.assertRaises(TypeError, len, FloatLen())
623 class HugeLen:
624 def __len__(self):
625 return sys.maxsize + 1
626 self.assertRaises(OverflowError, len, HugeLen())
Walter Dörwald919497e2003-01-19 16:23:59 +0000627
Walter Dörwald919497e2003-01-19 16:23:59 +0000628 def test_map(self):
629 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000630 list(map(lambda x: x*x, range(1,4))),
Walter Dörwald919497e2003-01-19 16:23:59 +0000631 [1, 4, 9]
632 )
633 try:
634 from math import sqrt
635 except ImportError:
636 def sqrt(x):
637 return pow(x, 0.5)
638 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000639 list(map(lambda x: list(map(sqrt, x)), [[16, 4], [81, 9]])),
Walter Dörwald919497e2003-01-19 16:23:59 +0000640 [[4.0, 2.0], [9.0, 3.0]]
641 )
642 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000643 list(map(lambda x, y: x+y, [1,3,2], [9,1,4])),
Walter Dörwald919497e2003-01-19 16:23:59 +0000644 [10, 4, 6]
645 )
646
647 def plus(*v):
648 accu = 0
649 for i in v: accu = accu + i
650 return accu
651 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000652 list(map(plus, [1, 3, 7])),
Walter Dörwald919497e2003-01-19 16:23:59 +0000653 [1, 3, 7]
654 )
655 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000656 list(map(plus, [1, 3, 7], [4, 9, 2])),
Walter Dörwald919497e2003-01-19 16:23:59 +0000657 [1+4, 3+9, 7+2]
658 )
659 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000660 list(map(plus, [1, 3, 7], [4, 9, 2], [1, 1, 0])),
Walter Dörwald919497e2003-01-19 16:23:59 +0000661 [1+4+1, 3+9+1, 7+2+0]
662 )
663 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000664 list(map(int, Squares(10))),
Walter Dörwald919497e2003-01-19 16:23:59 +0000665 [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
666 )
Guido van Rossum47b9ff62006-08-24 00:41:19 +0000667 def Max(a, b):
668 if a is None:
669 return b
670 if b is None:
671 return a
672 return max(a, b)
Walter Dörwald919497e2003-01-19 16:23:59 +0000673 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000674 list(map(Max, Squares(3), Squares(2))),
675 [0, 1]
Walter Dörwald919497e2003-01-19 16:23:59 +0000676 )
677 self.assertRaises(TypeError, map)
678 self.assertRaises(TypeError, map, lambda x: x, 42)
Walter Dörwald919497e2003-01-19 16:23:59 +0000679 class BadSeq:
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000680 def __iter__(self):
Walter Dörwald919497e2003-01-19 16:23:59 +0000681 raise ValueError
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000682 yield None
683 self.assertRaises(ValueError, list, map(lambda x: x, BadSeq()))
Neal Norwitzfcf44352005-11-27 20:37:43 +0000684 def badfunc(x):
685 raise RuntimeError
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000686 self.assertRaises(RuntimeError, list, map(badfunc, range(5)))
Walter Dörwald919497e2003-01-19 16:23:59 +0000687
688 def test_max(self):
689 self.assertEqual(max('123123'), '3')
690 self.assertEqual(max(1, 2, 3), 3)
691 self.assertEqual(max((1, 2, 3, 1, 2, 3)), 3)
692 self.assertEqual(max([1, 2, 3, 1, 2, 3]), 3)
693
Guido van Rossume2a383d2007-01-15 16:59:06 +0000694 self.assertEqual(max(1, 2, 3.0), 3.0)
695 self.assertEqual(max(1, 2.0, 3), 3)
696 self.assertEqual(max(1.0, 2, 3), 3)
Walter Dörwald919497e2003-01-19 16:23:59 +0000697
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +0000698 for stmt in (
699 "max(key=int)", # no args
700 "max(1, key=int)", # single arg not iterable
701 "max(1, 2, keystone=int)", # wrong keyword
702 "max(1, 2, key=int, abc=int)", # two many keywords
703 "max(1, 2, key=1)", # keyfunc is not callable
704 ):
Tim Peters7f061872004-12-07 21:17:46 +0000705 try:
Georg Brandl7cae87c2006-09-06 06:51:57 +0000706 exec(stmt, globals())
Tim Peters7f061872004-12-07 21:17:46 +0000707 except TypeError:
708 pass
709 else:
710 self.fail(stmt)
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +0000711
712 self.assertEqual(max((1,), key=neg), 1) # one elem iterable
713 self.assertEqual(max((1,2), key=neg), 1) # two elem iterable
714 self.assertEqual(max(1, 2, key=neg), 1) # two elems
715
716 data = [random.randrange(200) for i in range(100)]
717 keys = dict((elem, random.randrange(50)) for elem in data)
718 f = keys.__getitem__
719 self.assertEqual(max(data, key=f),
720 sorted(reversed(data), key=f)[-1])
721
Walter Dörwald919497e2003-01-19 16:23:59 +0000722 def test_min(self):
723 self.assertEqual(min('123123'), '1')
724 self.assertEqual(min(1, 2, 3), 1)
725 self.assertEqual(min((1, 2, 3, 1, 2, 3)), 1)
726 self.assertEqual(min([1, 2, 3, 1, 2, 3]), 1)
727
Guido van Rossume2a383d2007-01-15 16:59:06 +0000728 self.assertEqual(min(1, 2, 3.0), 1)
729 self.assertEqual(min(1, 2.0, 3), 1)
730 self.assertEqual(min(1.0, 2, 3), 1.0)
Walter Dörwald919497e2003-01-19 16:23:59 +0000731
732 self.assertRaises(TypeError, min)
733 self.assertRaises(TypeError, min, 42)
734 self.assertRaises(ValueError, min, ())
735 class BadSeq:
736 def __getitem__(self, index):
737 raise ValueError
738 self.assertRaises(ValueError, min, BadSeq())
Walter Dörwald919497e2003-01-19 16:23:59 +0000739
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +0000740 for stmt in (
741 "min(key=int)", # no args
742 "min(1, key=int)", # single arg not iterable
743 "min(1, 2, keystone=int)", # wrong keyword
744 "min(1, 2, key=int, abc=int)", # two many keywords
745 "min(1, 2, key=1)", # keyfunc is not callable
746 ):
Tim Peters7f061872004-12-07 21:17:46 +0000747 try:
Georg Brandl7cae87c2006-09-06 06:51:57 +0000748 exec(stmt, globals())
Tim Peters7f061872004-12-07 21:17:46 +0000749 except TypeError:
750 pass
751 else:
752 self.fail(stmt)
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +0000753
754 self.assertEqual(min((1,), key=neg), 1) # one elem iterable
755 self.assertEqual(min((1,2), key=neg), 2) # two elem iterable
756 self.assertEqual(min(1, 2, key=neg), 2) # two elems
757
758 data = [random.randrange(200) for i in range(100)]
759 keys = dict((elem, random.randrange(50)) for elem in data)
760 f = keys.__getitem__
761 self.assertEqual(min(data, key=f),
762 sorted(data, key=f)[0])
763
Georg Brandla18af4e2007-04-21 15:47:16 +0000764 def test_next(self):
765 it = iter(range(2))
766 self.assertEqual(next(it), 0)
767 self.assertEqual(next(it), 1)
768 self.assertRaises(StopIteration, next, it)
769 self.assertRaises(StopIteration, next, it)
770 self.assertEquals(next(it, 42), 42)
771
772 class Iter(object):
773 def __iter__(self):
774 return self
775 def __next__(self):
776 raise StopIteration
777
778 it = iter(Iter())
779 self.assertEquals(next(it, 42), 42)
780 self.assertRaises(StopIteration, next, it)
781
782 def gen():
783 yield 1
784 return
785
786 it = gen()
787 self.assertEquals(next(it), 1)
788 self.assertRaises(StopIteration, next, it)
789 self.assertEquals(next(it, 42), 42)
790
Walter Dörwald919497e2003-01-19 16:23:59 +0000791 def test_oct(self):
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000792 self.assertEqual(oct(100), '0o144')
793 self.assertEqual(oct(100), '0o144')
794 self.assertEqual(oct(-100), '-0o144')
795 self.assertEqual(oct(-100), '-0o144')
Walter Dörwald919497e2003-01-19 16:23:59 +0000796 self.assertRaises(TypeError, oct, ())
797
798 def write_testfile(self):
Guido van Rossuma88a0332007-02-26 16:59:55 +0000799 # NB the first 4 lines are also used to test input, below
Walter Dörwald919497e2003-01-19 16:23:59 +0000800 fp = open(TESTFN, 'w')
801 try:
802 fp.write('1+1\n')
803 fp.write('1+1\n')
804 fp.write('The quick brown fox jumps over the lazy dog')
805 fp.write('.\n')
806 fp.write('Dear John\n')
807 fp.write('XXX'*100)
808 fp.write('YYY'*100)
809 finally:
810 fp.close()
811
812 def test_open(self):
813 self.write_testfile()
814 fp = open(TESTFN, 'r')
815 try:
816 self.assertEqual(fp.readline(4), '1+1\n')
817 self.assertEqual(fp.readline(4), '1+1\n')
818 self.assertEqual(fp.readline(), 'The quick brown fox jumps over the lazy dog.\n')
819 self.assertEqual(fp.readline(4), 'Dear')
820 self.assertEqual(fp.readline(100), ' John\n')
821 self.assertEqual(fp.read(300), 'XXX'*100)
822 self.assertEqual(fp.read(1000), 'YYY'*100)
823 finally:
824 fp.close()
825 unlink(TESTFN)
826
827 def test_ord(self):
828 self.assertEqual(ord(' '), 32)
829 self.assertEqual(ord('A'), 65)
830 self.assertEqual(ord('a'), 97)
Guido van Rossumf9e91c92007-05-08 21:05:48 +0000831 self.assertEqual(ord('\x80'), 128)
832 self.assertEqual(ord('\xff'), 255)
833
834 self.assertEqual(ord(b' '), 32)
835 self.assertEqual(ord(b'A'), 65)
836 self.assertEqual(ord(b'a'), 97)
837 self.assertEqual(ord(b'\x80'), 128)
838 self.assertEqual(ord(b'\xff'), 255)
839
Walter Dörwald1f5947b2007-05-22 16:52:54 +0000840 self.assertEqual(ord(chr(sys.maxunicode)), sys.maxunicode)
Walter Dörwald919497e2003-01-19 16:23:59 +0000841 self.assertRaises(TypeError, ord, 42)
Walter Dörwald919497e2003-01-19 16:23:59 +0000842
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000843 self.assertEqual(ord(chr(0x10FFFF)), 0x10FFFF)
844 self.assertEqual(ord("\U0000FFFF"), 0x0000FFFF)
845 self.assertEqual(ord("\U00010000"), 0x00010000)
846 self.assertEqual(ord("\U00010001"), 0x00010001)
847 self.assertEqual(ord("\U000FFFFE"), 0x000FFFFE)
848 self.assertEqual(ord("\U000FFFFF"), 0x000FFFFF)
849 self.assertEqual(ord("\U00100000"), 0x00100000)
850 self.assertEqual(ord("\U00100001"), 0x00100001)
851 self.assertEqual(ord("\U0010FFFE"), 0x0010FFFE)
852 self.assertEqual(ord("\U0010FFFF"), 0x0010FFFF)
853
Walter Dörwald919497e2003-01-19 16:23:59 +0000854 def test_pow(self):
855 self.assertEqual(pow(0,0), 1)
856 self.assertEqual(pow(0,1), 0)
857 self.assertEqual(pow(1,0), 1)
858 self.assertEqual(pow(1,1), 1)
859
860 self.assertEqual(pow(2,0), 1)
861 self.assertEqual(pow(2,10), 1024)
862 self.assertEqual(pow(2,20), 1024*1024)
863 self.assertEqual(pow(2,30), 1024*1024*1024)
864
865 self.assertEqual(pow(-2,0), 1)
866 self.assertEqual(pow(-2,1), -2)
867 self.assertEqual(pow(-2,2), 4)
868 self.assertEqual(pow(-2,3), -8)
869
Guido van Rossume2a383d2007-01-15 16:59:06 +0000870 self.assertEqual(pow(0,0), 1)
871 self.assertEqual(pow(0,1), 0)
872 self.assertEqual(pow(1,0), 1)
873 self.assertEqual(pow(1,1), 1)
Walter Dörwald919497e2003-01-19 16:23:59 +0000874
Guido van Rossume2a383d2007-01-15 16:59:06 +0000875 self.assertEqual(pow(2,0), 1)
876 self.assertEqual(pow(2,10), 1024)
877 self.assertEqual(pow(2,20), 1024*1024)
878 self.assertEqual(pow(2,30), 1024*1024*1024)
Walter Dörwald919497e2003-01-19 16:23:59 +0000879
Guido van Rossume2a383d2007-01-15 16:59:06 +0000880 self.assertEqual(pow(-2,0), 1)
881 self.assertEqual(pow(-2,1), -2)
882 self.assertEqual(pow(-2,2), 4)
883 self.assertEqual(pow(-2,3), -8)
Walter Dörwald919497e2003-01-19 16:23:59 +0000884
885 self.assertAlmostEqual(pow(0.,0), 1.)
886 self.assertAlmostEqual(pow(0.,1), 0.)
887 self.assertAlmostEqual(pow(1.,0), 1.)
888 self.assertAlmostEqual(pow(1.,1), 1.)
889
890 self.assertAlmostEqual(pow(2.,0), 1.)
891 self.assertAlmostEqual(pow(2.,10), 1024.)
892 self.assertAlmostEqual(pow(2.,20), 1024.*1024.)
893 self.assertAlmostEqual(pow(2.,30), 1024.*1024.*1024.)
894
895 self.assertAlmostEqual(pow(-2.,0), 1.)
896 self.assertAlmostEqual(pow(-2.,1), -2.)
897 self.assertAlmostEqual(pow(-2.,2), 4.)
898 self.assertAlmostEqual(pow(-2.,3), -8.)
899
Guido van Rossume2a383d2007-01-15 16:59:06 +0000900 for x in 2, 2, 2.0:
901 for y in 10, 10, 10.0:
902 for z in 1000, 1000, 1000.0:
Walter Dörwald919497e2003-01-19 16:23:59 +0000903 if isinstance(x, float) or \
904 isinstance(y, float) or \
905 isinstance(z, float):
906 self.assertRaises(TypeError, pow, x, y, z)
907 else:
908 self.assertAlmostEqual(pow(x, y, z), 24.0)
909
Jeffrey Yasskin3404b3c2007-09-07 15:15:49 +0000910 self.assertAlmostEqual(pow(-1, 0.5), 1j)
911 self.assertAlmostEqual(pow(-1, 1/3), 0.5 + 0.8660254037844386j)
912
Walter Dörwald919497e2003-01-19 16:23:59 +0000913 self.assertRaises(TypeError, pow, -1, -2, 3)
914 self.assertRaises(ValueError, pow, 1, 2, 0)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000915 self.assertRaises(TypeError, pow, -1, -2, 3)
916 self.assertRaises(ValueError, pow, 1, 2, 0)
Walter Dörwald919497e2003-01-19 16:23:59 +0000917
918 self.assertRaises(TypeError, pow)
919
920 def test_range(self):
Guido van Rossum805365e2007-05-07 22:24:25 +0000921 self.assertEqual(list(range(3)), [0, 1, 2])
922 self.assertEqual(list(range(1, 5)), [1, 2, 3, 4])
923 self.assertEqual(list(range(0)), [])
924 self.assertEqual(list(range(-3)), [])
925 self.assertEqual(list(range(1, 10, 3)), [1, 4, 7])
926 #self.assertEqual(list(range(5, -5, -3)), [5, 2, -1, -4])
Walter Dörwald919497e2003-01-19 16:23:59 +0000927
Mark Dickinsoneb36d312009-06-24 18:36:46 +0000928 #issue 6334: the internal stored range length was being
929 #computed incorrectly in some cases involving large arguments.
930 x = range(10**20, 10**20+10, 3)
931 self.assertEqual(len(x), 4)
932 self.assertEqual(len(list(x)), 4)
933
934 x = range(10**20+10, 10**20, 3)
935 self.assertEqual(len(x), 0)
936 self.assertEqual(len(list(x)), 0)
937
938 x = range(10**20, 10**20+10, -3)
939 self.assertEqual(len(x), 0)
940 self.assertEqual(len(list(x)), 0)
941
942 x = range(10**20+10, 10**20, -3)
943 self.assertEqual(len(x), 4)
944 self.assertEqual(len(list(x)), 4)
945
Guido van Rossum805365e2007-05-07 22:24:25 +0000946 """ XXX(nnorwitz):
Guido van Rossumefbbb1c2003-04-11 18:43:06 +0000947 # Now test range() with longs
Guido van Rossum805365e2007-05-07 22:24:25 +0000948 self.assertEqual(list(range(-2**100)), [])
949 self.assertEqual(list(range(0, -2**100)), [])
950 self.assertEqual(list(range(0, 2**100, -1)), [])
951 self.assertEqual(list(range(0, 2**100, -1)), [])
Guido van Rossumefbbb1c2003-04-11 18:43:06 +0000952
Christian Heimesa37d4c62007-12-04 23:02:19 +0000953 a = int(10 * sys.maxsize)
954 b = int(100 * sys.maxsize)
955 c = int(50 * sys.maxsize)
Guido van Rossumefbbb1c2003-04-11 18:43:06 +0000956
Guido van Rossum805365e2007-05-07 22:24:25 +0000957 self.assertEqual(list(range(a, a+2)), [a, a+1])
958 self.assertEqual(list(range(a+2, a, -1)), [a+2, a+1])
959 self.assertEqual(list(range(a+4, a, -2)), [a+4, a+2])
Guido van Rossumefbbb1c2003-04-11 18:43:06 +0000960
Guido van Rossum805365e2007-05-07 22:24:25 +0000961 seq = list(range(a, b, c))
Georg Brandlab91fde2009-08-13 08:51:18 +0000962 self.assertTrue(a in seq)
963 self.assertTrue(b not in seq)
Guido van Rossumefbbb1c2003-04-11 18:43:06 +0000964 self.assertEqual(len(seq), 2)
965
Guido van Rossum805365e2007-05-07 22:24:25 +0000966 seq = list(range(b, a, -c))
Georg Brandlab91fde2009-08-13 08:51:18 +0000967 self.assertTrue(b in seq)
968 self.assertTrue(a not in seq)
Guido van Rossumefbbb1c2003-04-11 18:43:06 +0000969 self.assertEqual(len(seq), 2)
970
Guido van Rossum805365e2007-05-07 22:24:25 +0000971 seq = list(range(-a, -b, -c))
Georg Brandlab91fde2009-08-13 08:51:18 +0000972 self.assertTrue(-a in seq)
973 self.assertTrue(-b not in seq)
Guido van Rossumefbbb1c2003-04-11 18:43:06 +0000974 self.assertEqual(len(seq), 2)
975
Walter Dörwald919497e2003-01-19 16:23:59 +0000976 self.assertRaises(TypeError, range)
977 self.assertRaises(TypeError, range, 1, 2, 3, 4)
978 self.assertRaises(ValueError, range, 1, 2, 0)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000979 self.assertRaises(ValueError, range, a, a + 1, int(0))
Neal Norwitzfcf44352005-11-27 20:37:43 +0000980
981 class badzero(int):
Guido van Rossum47b9ff62006-08-24 00:41:19 +0000982 def __eq__(self, other):
Neal Norwitzfcf44352005-11-27 20:37:43 +0000983 raise RuntimeError
Guido van Rossum47b9ff62006-08-24 00:41:19 +0000984 __ne__ = __lt__ = __gt__ = __le__ = __ge__ = __eq__
985
986 # XXX This won't (but should!) raise RuntimeError if a is an int...
Neal Norwitzfcf44352005-11-27 20:37:43 +0000987 self.assertRaises(RuntimeError, range, a, a + 1, badzero(1))
Guido van Rossum805365e2007-05-07 22:24:25 +0000988 """
Walter Dörwald919497e2003-01-19 16:23:59 +0000989
Guido van Rossumefbbb1c2003-04-11 18:43:06 +0000990 # Reject floats when it would require PyLongs to represent.
991 # (smaller floats still accepted, but deprecated)
Tim Peters299b3df2003-04-15 14:40:03 +0000992 self.assertRaises(TypeError, range, 1e100, 1e101, 1e101)
Guido van Rossumefbbb1c2003-04-11 18:43:06 +0000993
Walter Dörwald357981e2003-04-15 18:59:28 +0000994 self.assertRaises(TypeError, range, 0, "spam")
995 self.assertRaises(TypeError, range, 0, 42, "spam")
996
Christian Heimesa37d4c62007-12-04 23:02:19 +0000997 #NEAL self.assertRaises(OverflowError, range, -sys.maxsize, sys.maxsize)
998 #NEAL self.assertRaises(OverflowError, range, 0, 2*sys.maxsize)
Guido van Rossum805365e2007-05-07 22:24:25 +0000999
Christian Heimesa37d4c62007-12-04 23:02:19 +00001000 self.assertRaises(OverflowError, len, range(0, sys.maxsize**10))
Walter Dörwald357981e2003-04-15 18:59:28 +00001001
Guido van Rossuma88a0332007-02-26 16:59:55 +00001002 def test_input(self):
1003 self.write_testfile()
1004 fp = open(TESTFN, 'r')
1005 savestdin = sys.stdin
1006 savestdout = sys.stdout # Eats the echo
1007 try:
1008 sys.stdin = fp
1009 sys.stdout = BitBucket()
1010 self.assertEqual(input(), "1+1")
1011 self.assertEqual(input('testing\n'), "1+1")
1012 self.assertEqual(input(), 'The quick brown fox jumps over the lazy dog.')
1013 self.assertEqual(input('testing\n'), 'Dear John')
1014
1015 # SF 1535165: don't segfault on closed stdin
1016 # sys.stdout must be a regular file for triggering
1017 sys.stdout = savestdout
1018 sys.stdin.close()
1019 self.assertRaises(ValueError, input)
1020
1021 sys.stdout = BitBucket()
Guido van Rossum34d19282007-08-09 01:03:29 +00001022 sys.stdin = io.StringIO("NULL\0")
Guido van Rossuma88a0332007-02-26 16:59:55 +00001023 self.assertRaises(TypeError, input, 42, 42)
Guido van Rossum34d19282007-08-09 01:03:29 +00001024 sys.stdin = io.StringIO(" 'whitespace'")
Guido van Rossuma88a0332007-02-26 16:59:55 +00001025 self.assertEqual(input(), " 'whitespace'")
Guido van Rossum34d19282007-08-09 01:03:29 +00001026 sys.stdin = io.StringIO()
Guido van Rossuma88a0332007-02-26 16:59:55 +00001027 self.assertRaises(EOFError, input)
1028
1029 del sys.stdout
1030 self.assertRaises(RuntimeError, input, 'prompt')
1031 del sys.stdin
1032 self.assertRaises(RuntimeError, input, 'prompt')
1033 finally:
1034 sys.stdin = savestdin
1035 sys.stdout = savestdout
1036 fp.close()
1037 unlink(TESTFN)
1038
Walter Dörwald919497e2003-01-19 16:23:59 +00001039 def test_repr(self):
1040 self.assertEqual(repr(''), '\'\'')
1041 self.assertEqual(repr(0), '0')
Guido van Rossume2a383d2007-01-15 16:59:06 +00001042 self.assertEqual(repr(0), '0')
Walter Dörwald919497e2003-01-19 16:23:59 +00001043 self.assertEqual(repr(()), '()')
1044 self.assertEqual(repr([]), '[]')
1045 self.assertEqual(repr({}), '{}')
1046 a = []
1047 a.append(a)
1048 self.assertEqual(repr(a), '[[...]]')
1049 a = {}
1050 a[0] = a
1051 self.assertEqual(repr(a), '{0: {...}}')
1052
1053 def test_round(self):
1054 self.assertEqual(round(0.0), 0.0)
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001055 self.assertEqual(type(round(0.0)), int)
Walter Dörwald919497e2003-01-19 16:23:59 +00001056 self.assertEqual(round(1.0), 1.0)
1057 self.assertEqual(round(10.0), 10.0)
1058 self.assertEqual(round(1000000000.0), 1000000000.0)
1059 self.assertEqual(round(1e20), 1e20)
1060
1061 self.assertEqual(round(-1.0), -1.0)
1062 self.assertEqual(round(-10.0), -10.0)
1063 self.assertEqual(round(-1000000000.0), -1000000000.0)
1064 self.assertEqual(round(-1e20), -1e20)
1065
1066 self.assertEqual(round(0.1), 0.0)
1067 self.assertEqual(round(1.1), 1.0)
1068 self.assertEqual(round(10.1), 10.0)
1069 self.assertEqual(round(1000000000.1), 1000000000.0)
1070
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(0.9), 1.0)
1076 self.assertEqual(round(9.9), 10.0)
1077 self.assertEqual(round(999999999.9), 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(-8.0, -1), -10.0)
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001084 self.assertEqual(type(round(-8.0, -1)), float)
1085
1086 self.assertEqual(type(round(-8.0, 0)), float)
1087 self.assertEqual(type(round(-8.0, 1)), float)
1088
1089 # Check even / odd rounding behaviour
1090 self.assertEqual(round(5.5), 6)
1091 self.assertEqual(round(6.5), 6)
1092 self.assertEqual(round(-5.5), -6)
1093 self.assertEqual(round(-6.5), -6)
1094
1095 # Check behavior on ints
1096 self.assertEqual(round(0), 0)
1097 self.assertEqual(round(8), 8)
1098 self.assertEqual(round(-8), -8)
1099 self.assertEqual(type(round(0)), int)
Mark Dickinson1124e712009-01-28 21:25:58 +00001100 self.assertEqual(type(round(-8, -1)), int)
1101 self.assertEqual(type(round(-8, 0)), int)
1102 self.assertEqual(type(round(-8, 1)), int)
Walter Dörwald919497e2003-01-19 16:23:59 +00001103
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001104 # test new kwargs
1105 self.assertEqual(round(number=-8.0, ndigits=-1), -10.0)
1106
Walter Dörwald919497e2003-01-19 16:23:59 +00001107 self.assertRaises(TypeError, round)
1108
Alex Martelliae211f92007-08-22 23:21:33 +00001109 # test generic rounding delegation for reals
1110 class TestRound:
1111 def __round__(self):
1112 return 23
1113
1114 class TestNoRound:
1115 pass
1116
1117 self.assertEqual(round(TestRound()), 23)
1118
1119 self.assertRaises(TypeError, round, 1, 2, 3)
1120 self.assertRaises(TypeError, round, TestNoRound())
1121
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001122 t = TestNoRound()
1123 t.__round__ = lambda *args: args
1124 self.assertRaises(TypeError, round, t)
1125 self.assertRaises(TypeError, round, t, 0)
1126
Mark Dickinson94882db2009-11-09 17:14:18 +00001127 # Some versions of glibc for alpha have a bug that affects
1128 # float -> integer rounding (floor, ceil, rint, round) for
1129 # values in the range [2**52, 2**53). See:
1130 #
1131 # http://sources.redhat.com/bugzilla/show_bug.cgi?id=5350
1132 #
1133 # We skip this test on Linux/alpha if it would fail.
1134 linux_alpha = (platform.system().startswith('Linux') and
1135 platform.machine().startswith('alpha'))
1136 system_round_bug = round(5e15+1) != 5e15+1
1137 @unittest.skipIf(linux_alpha and system_round_bug,
1138 "test will fail; failure is probably due to a "
1139 "buggy system round function")
1140 def test_round_large(self):
1141 # Issue #1869: integral floats should remain unchanged
1142 self.assertEqual(round(5e15-1), 5e15-1)
1143 self.assertEqual(round(5e15), 5e15)
1144 self.assertEqual(round(5e15+1), 5e15+1)
1145 self.assertEqual(round(5e15+2), 5e15+2)
1146 self.assertEqual(round(5e15+3), 5e15+3)
1147
Walter Dörwald919497e2003-01-19 16:23:59 +00001148 def test_setattr(self):
Tim Petersf2715e02003-02-19 02:35:07 +00001149 setattr(sys, 'spam', 1)
1150 self.assertEqual(sys.spam, 1)
1151 self.assertRaises(TypeError, setattr, sys, 1, 'spam')
1152 self.assertRaises(TypeError, setattr)
Walter Dörwald919497e2003-01-19 16:23:59 +00001153
Walter Dörwald919497e2003-01-19 16:23:59 +00001154
Alex Martellia70b1912003-04-22 08:12:33 +00001155 def test_sum(self):
1156 self.assertEqual(sum([]), 0)
Guido van Rossum805365e2007-05-07 22:24:25 +00001157 self.assertEqual(sum(list(range(2,8))), 27)
1158 self.assertEqual(sum(iter(list(range(2,8)))), 27)
Alex Martellia70b1912003-04-22 08:12:33 +00001159 self.assertEqual(sum(Squares(10)), 285)
1160 self.assertEqual(sum(iter(Squares(10))), 285)
1161 self.assertEqual(sum([[1], [2], [3]], []), [1, 2, 3])
1162
1163 self.assertRaises(TypeError, sum)
1164 self.assertRaises(TypeError, sum, 42)
1165 self.assertRaises(TypeError, sum, ['a', 'b', 'c'])
1166 self.assertRaises(TypeError, sum, ['a', 'b', 'c'], '')
1167 self.assertRaises(TypeError, sum, [[1], [2], [3]])
1168 self.assertRaises(TypeError, sum, [{2:3}])
1169 self.assertRaises(TypeError, sum, [{2:3}]*2, {2:3})
1170
1171 class BadSeq:
1172 def __getitem__(self, index):
1173 raise ValueError
1174 self.assertRaises(ValueError, sum, BadSeq())
1175
Walter Dörwald919497e2003-01-19 16:23:59 +00001176 def test_type(self):
1177 self.assertEqual(type(''), type('123'))
1178 self.assertNotEqual(type(''), type(()))
1179
Guido van Rossumfee7b932005-01-16 00:21:28 +00001180 # We don't want self in vars(), so these are static methods
1181
1182 @staticmethod
Walter Dörwald919497e2003-01-19 16:23:59 +00001183 def get_vars_f0():
1184 return vars()
Walter Dörwald919497e2003-01-19 16:23:59 +00001185
Guido van Rossumfee7b932005-01-16 00:21:28 +00001186 @staticmethod
Walter Dörwald919497e2003-01-19 16:23:59 +00001187 def get_vars_f2():
1188 BuiltinTest.get_vars_f0()
1189 a = 1
1190 b = 2
1191 return vars()
Walter Dörwald919497e2003-01-19 16:23:59 +00001192
1193 def test_vars(self):
Raymond Hettingera690a992003-11-16 16:17:49 +00001194 self.assertEqual(set(vars()), set(dir()))
Walter Dörwald919497e2003-01-19 16:23:59 +00001195 import sys
Raymond Hettingera690a992003-11-16 16:17:49 +00001196 self.assertEqual(set(vars(sys)), set(dir(sys)))
Walter Dörwald919497e2003-01-19 16:23:59 +00001197 self.assertEqual(self.get_vars_f0(), {})
1198 self.assertEqual(self.get_vars_f2(), {'a': 1, 'b': 2})
1199 self.assertRaises(TypeError, vars, 42, 42)
1200 self.assertRaises(TypeError, vars, 42)
1201
1202 def test_zip(self):
1203 a = (1, 2, 3)
1204 b = (4, 5, 6)
1205 t = [(1, 4), (2, 5), (3, 6)]
Guido van Rossum801f0d72006-08-24 19:48:10 +00001206 self.assertEqual(list(zip(a, b)), t)
Walter Dörwald919497e2003-01-19 16:23:59 +00001207 b = [4, 5, 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, 7)
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 class I:
1212 def __getitem__(self, i):
1213 if i < 0 or i > 2: raise IndexError
1214 return i + 4
Guido van Rossum801f0d72006-08-24 19:48:10 +00001215 self.assertEqual(list(zip(a, I())), t)
1216 self.assertEqual(list(zip()), [])
1217 self.assertEqual(list(zip(*[])), [])
Walter Dörwald919497e2003-01-19 16:23:59 +00001218 self.assertRaises(TypeError, zip, None)
1219 class G:
1220 pass
1221 self.assertRaises(TypeError, zip, a, G())
1222
1223 # Make sure zip doesn't try to allocate a billion elements for the
1224 # result list when one of its arguments doesn't say how long it is.
1225 # A MemoryError is the most likely failure mode.
1226 class SequenceWithoutALength:
1227 def __getitem__(self, i):
1228 if i == 5:
1229 raise IndexError
1230 else:
1231 return i
1232 self.assertEqual(
Guido van Rossum805365e2007-05-07 22:24:25 +00001233 list(zip(SequenceWithoutALength(), range(2**30))),
Walter Dörwald919497e2003-01-19 16:23:59 +00001234 list(enumerate(range(5)))
1235 )
1236
1237 class BadSeq:
1238 def __getitem__(self, i):
1239 if i == 5:
1240 raise ValueError
1241 else:
1242 return i
Guido van Rossum801f0d72006-08-24 19:48:10 +00001243 self.assertRaises(ValueError, list, zip(BadSeq(), BadSeq()))
Walter Dörwald919497e2003-01-19 16:23:59 +00001244
Christian Heimes90c3d9b2008-02-23 13:18:03 +00001245 def test_bin(self):
1246 self.assertEqual(bin(0), '0b0')
1247 self.assertEqual(bin(1), '0b1')
1248 self.assertEqual(bin(-1), '-0b1')
1249 self.assertEqual(bin(2**65), '0b1' + '0' * 65)
1250 self.assertEqual(bin(2**65-1), '0b' + '1' * 65)
1251 self.assertEqual(bin(-(2**65)), '-0b1' + '0' * 65)
1252 self.assertEqual(bin(-(2**65-1)), '-0b' + '1' * 65)
1253
Georg Brandl069bcc32009-07-22 12:06:11 +00001254 def test_bytearray_translate(self):
1255 x = bytearray(b"abc")
1256 self.assertRaises(ValueError, x.translate, b"1", 1)
1257 self.assertRaises(TypeError, x.translate, b"1"*256, 1)
1258
Raymond Hettinger64958a12003-12-17 20:43:33 +00001259class TestSorted(unittest.TestCase):
1260
1261 def test_basic(self):
Guido van Rossum805365e2007-05-07 22:24:25 +00001262 data = list(range(100))
Raymond Hettinger64958a12003-12-17 20:43:33 +00001263 copy = data[:]
1264 random.shuffle(copy)
1265 self.assertEqual(data, sorted(copy))
1266 self.assertNotEqual(data, copy)
1267
1268 data.reverse()
1269 random.shuffle(copy)
Raymond Hettinger64958a12003-12-17 20:43:33 +00001270 self.assertEqual(data, sorted(copy, key=lambda x: -x))
1271 self.assertNotEqual(data, copy)
1272 random.shuffle(copy)
1273 self.assertEqual(data, sorted(copy, reverse=1))
1274 self.assertNotEqual(data, copy)
1275
1276 def test_inputtypes(self):
1277 s = 'abracadabra'
Walter Dörwald1f5947b2007-05-22 16:52:54 +00001278 types = [list, tuple, str]
Walter Dörwald4e41a4b2005-08-03 17:09:04 +00001279 for T in types:
Raymond Hettinger64958a12003-12-17 20:43:33 +00001280 self.assertEqual(sorted(s), sorted(T(s)))
1281
Walter Dörwald1f5947b2007-05-22 16:52:54 +00001282 s = ''.join(set(s)) # unique letters only
1283 types = [str, set, frozenset, list, tuple, dict.fromkeys]
Walter Dörwald4e41a4b2005-08-03 17:09:04 +00001284 for T in types:
Raymond Hettinger64958a12003-12-17 20:43:33 +00001285 self.assertEqual(sorted(s), sorted(T(s)))
1286
1287 def test_baddecorator(self):
1288 data = 'The quick Brown fox Jumped over The lazy Dog'.split()
1289 self.assertRaises(TypeError, sorted, data, None, lambda x,y: 0)
1290
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001291def test_main(verbose=None):
1292 test_classes = (BuiltinTest, TestSorted)
1293
1294 run_unittest(*test_classes)
1295
1296 # verify reference counting
1297 if verbose and hasattr(sys, "gettotalrefcount"):
1298 import gc
1299 counts = [None] * 5
Guido van Rossum805365e2007-05-07 22:24:25 +00001300 for i in range(len(counts)):
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001301 run_unittest(*test_classes)
1302 gc.collect()
1303 counts[i] = sys.gettotalrefcount()
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001304 print(counts)
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001305
Walter Dörwald919497e2003-01-19 16:23:59 +00001306
1307if __name__ == "__main__":
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001308 test_main(verbose=True)