blob: 2d3e1ccd90bcc4ee92f0b044f51fda3e6b3fd493 [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
Walter Dörwald919497e2003-01-19 16:23:59 +00003import test.test_support, unittest
Walter Dörwald1f5947b2007-05-22 16:52:54 +00004from test.test_support import fcmp, TESTFN, unlink, run_unittest, \
5 run_with_locale
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00006from operator import neg
Guido van Rossum3bead091992-01-27 17:00:37 +00007
Guido van Rossum34d19282007-08-09 01:03:29 +00008import sys, warnings, random, UserDict, io
Walter Dörwald919497e2003-01-19 16:23:59 +00009warnings.filterwarnings("ignore", "hex../oct.. of negative int",
10 FutureWarning, __name__)
Guido van Rossumefbbb1c2003-04-11 18:43:06 +000011warnings.filterwarnings("ignore", "integer argument expected",
12 DeprecationWarning, "unittest")
Guido van Rossum3bead091992-01-27 17:00:37 +000013
Walter Dörwald919497e2003-01-19 16:23:59 +000014class Squares:
Guido van Rossum3bead091992-01-27 17:00:37 +000015
Walter Dörwald919497e2003-01-19 16:23:59 +000016 def __init__(self, max):
17 self.max = max
18 self.sofar = []
19
20 def __len__(self): return len(self.sofar)
21
22 def __getitem__(self, i):
23 if not 0 <= i < self.max: raise IndexError
24 n = len(self.sofar)
25 while n <= i:
26 self.sofar.append(n*n)
27 n += 1
28 return self.sofar[i]
29
30class StrSquares:
31
32 def __init__(self, max):
33 self.max = max
34 self.sofar = []
35
36 def __len__(self):
37 return len(self.sofar)
38
39 def __getitem__(self, i):
40 if not 0 <= i < self.max:
41 raise IndexError
42 n = len(self.sofar)
43 while n <= i:
44 self.sofar.append(str(n*n))
45 n += 1
46 return self.sofar[i]
47
48class BitBucket:
49 def write(self, line):
50 pass
51
52L = [
53 ('0', 0),
54 ('1', 1),
55 ('9', 9),
56 ('10', 10),
57 ('99', 99),
58 ('100', 100),
59 ('314', 314),
60 (' 314', 314),
61 ('314 ', 314),
62 (' \t\t 314 \t\t ', 314),
Walter Dörwald70a6b492004-02-12 17:35:32 +000063 (repr(sys.maxint), sys.maxint),
Walter Dörwald919497e2003-01-19 16:23:59 +000064 (' 1x', ValueError),
65 (' 1 ', 1),
66 (' 1\02 ', ValueError),
67 ('', ValueError),
68 (' ', ValueError),
Walter Dörwald1f5947b2007-05-22 16:52:54 +000069 (' \t\t ', ValueError),
Guido van Rossumef87d6e2007-05-02 19:09:54 +000070 (str(b'\u0663\u0661\u0664 ','raw-unicode-escape'), 314),
Guido van Rossum84fc66d2007-05-03 17:18:26 +000071 (chr(0x200), ValueError),
Walter Dörwald919497e2003-01-19 16:23:59 +000072]
73
Raymond Hettinger96229b12005-03-11 06:49:40 +000074class TestFailingBool:
Jack Diederich4dafcc42006-11-28 19:15:13 +000075 def __bool__(self):
Raymond Hettinger96229b12005-03-11 06:49:40 +000076 raise RuntimeError
77
78class TestFailingIter:
79 def __iter__(self):
80 raise RuntimeError
81
Walter Dörwald919497e2003-01-19 16:23:59 +000082class BuiltinTest(unittest.TestCase):
83
84 def test_import(self):
85 __import__('sys')
86 __import__('time')
87 __import__('string')
Guido van Rossumd8faa362007-04-27 19:54:29 +000088 __import__(name='sys')
89 __import__(name='time', level=0)
Walter Dörwald919497e2003-01-19 16:23:59 +000090 self.assertRaises(ImportError, __import__, 'spamspam')
91 self.assertRaises(TypeError, __import__, 1, 2, 3, 4)
Thomas Wouters49fd7fa2006-04-21 10:40:58 +000092 self.assertRaises(ValueError, __import__, '')
Guido van Rossumd8faa362007-04-27 19:54:29 +000093 self.assertRaises(TypeError, __import__, 'sys', name='sys')
Walter Dörwald919497e2003-01-19 16:23:59 +000094
95 def test_abs(self):
96 # int
97 self.assertEqual(abs(0), 0)
98 self.assertEqual(abs(1234), 1234)
99 self.assertEqual(abs(-1234), 1234)
Thomas Wouters89f507f2006-12-13 04:49:30 +0000100 self.assertTrue(abs(-sys.maxint-1) > 0)
Walter Dörwald919497e2003-01-19 16:23:59 +0000101 # float
102 self.assertEqual(abs(0.0), 0.0)
103 self.assertEqual(abs(3.14), 3.14)
104 self.assertEqual(abs(-3.14), 3.14)
105 # long
Guido van Rossume2a383d2007-01-15 16:59:06 +0000106 self.assertEqual(abs(0), 0)
107 self.assertEqual(abs(1234), 1234)
108 self.assertEqual(abs(-1234), 1234)
Walter Dörwald919497e2003-01-19 16:23:59 +0000109 # str
110 self.assertRaises(TypeError, abs, 'a')
111
Raymond Hettinger96229b12005-03-11 06:49:40 +0000112 def test_all(self):
113 self.assertEqual(all([2, 4, 6]), True)
114 self.assertEqual(all([2, None, 6]), False)
115 self.assertRaises(RuntimeError, all, [2, TestFailingBool(), 6])
116 self.assertRaises(RuntimeError, all, TestFailingIter())
117 self.assertRaises(TypeError, all, 10) # Non-iterable
118 self.assertRaises(TypeError, all) # No args
119 self.assertRaises(TypeError, all, [2, 4, 6], []) # Too many args
120 self.assertEqual(all([]), True) # Empty iterator
121 S = [50, 60]
122 self.assertEqual(all(x > 42 for x in S), True)
123 S = [50, 40, 60]
124 self.assertEqual(all(x > 42 for x in S), False)
125
126 def test_any(self):
127 self.assertEqual(any([None, None, None]), False)
128 self.assertEqual(any([None, 4, None]), True)
129 self.assertRaises(RuntimeError, any, [None, TestFailingBool(), 6])
130 self.assertRaises(RuntimeError, all, TestFailingIter())
131 self.assertRaises(TypeError, any, 10) # Non-iterable
132 self.assertRaises(TypeError, any) # No args
133 self.assertRaises(TypeError, any, [2, 4, 6], []) # Too many args
134 self.assertEqual(any([]), False) # Empty iterator
135 S = [40, 60, 30]
136 self.assertEqual(any(x > 42 for x in S), True)
137 S = [10, 20, 30]
138 self.assertEqual(any(x > 42 for x in S), False)
139
Thomas Wouters89f507f2006-12-13 04:49:30 +0000140 def test_neg(self):
141 x = -sys.maxint-1
142 self.assert_(isinstance(x, int))
143 self.assertEqual(-x, sys.maxint+1)
144
Guido van Rossumd59da4b2007-05-22 18:11:13 +0000145 # XXX(nnorwitz): This test case for callable should probably be removed.
Walter Dörwald919497e2003-01-19 16:23:59 +0000146 def test_callable(self):
Guido van Rossumd59da4b2007-05-22 18:11:13 +0000147 self.assert_(hasattr(len, '__call__'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000148 def f(): pass
Guido van Rossumd59da4b2007-05-22 18:11:13 +0000149 self.assert_(hasattr(f, '__call__'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000150 class C:
151 def meth(self): pass
Guido van Rossumd59da4b2007-05-22 18:11:13 +0000152 self.assert_(hasattr(C, '__call__'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000153 x = C()
Guido van Rossumd59da4b2007-05-22 18:11:13 +0000154 self.assert_(hasattr(x.meth, '__call__'))
155 self.assert_(not hasattr(x, '__call__'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000156 class D(C):
157 def __call__(self): pass
158 y = D()
Guido van Rossumd59da4b2007-05-22 18:11:13 +0000159 self.assert_(hasattr(y, '__call__'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000160 y()
161
162 def test_chr(self):
163 self.assertEqual(chr(32), ' ')
164 self.assertEqual(chr(65), 'A')
165 self.assertEqual(chr(97), 'a')
166 self.assertEqual(chr(0xff), '\xff')
Guido van Rossum572dbf82007-04-27 23:53:51 +0000167 self.assertRaises(ValueError, chr, 1<<24)
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000168 self.assertEqual(chr(sys.maxunicode),
169 str(('\\U%08x' % (sys.maxunicode)).encode("ascii"),
170 'unicode-escape'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000171 self.assertRaises(TypeError, chr)
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000172 self.assertEqual(chr(0x0000FFFF), "\U0000FFFF")
173 self.assertEqual(chr(0x00010000), "\U00010000")
174 self.assertEqual(chr(0x00010001), "\U00010001")
175 self.assertEqual(chr(0x000FFFFE), "\U000FFFFE")
176 self.assertEqual(chr(0x000FFFFF), "\U000FFFFF")
177 self.assertEqual(chr(0x00100000), "\U00100000")
178 self.assertEqual(chr(0x00100001), "\U00100001")
179 self.assertEqual(chr(0x0010FFFE), "\U0010FFFE")
180 self.assertEqual(chr(0x0010FFFF), "\U0010FFFF")
181 self.assertRaises(ValueError, chr, -1)
182 self.assertRaises(ValueError, chr, 0x00110000)
Walter Dörwald919497e2003-01-19 16:23:59 +0000183
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000184 def test_cmp(self):
Walter Dörwald919497e2003-01-19 16:23:59 +0000185 self.assertEqual(cmp(-1, 1), -1)
186 self.assertEqual(cmp(1, -1), 1)
187 self.assertEqual(cmp(1, 1), 0)
Armin Rigo2b3eb402003-10-28 12:05:48 +0000188 # verify that circular objects are not handled
Walter Dörwald919497e2003-01-19 16:23:59 +0000189 a = []; a.append(a)
190 b = []; b.append(b)
191 from UserList import UserList
192 c = UserList(); c.append(c)
Armin Rigo2b3eb402003-10-28 12:05:48 +0000193 self.assertRaises(RuntimeError, cmp, a, b)
194 self.assertRaises(RuntimeError, cmp, b, c)
195 self.assertRaises(RuntimeError, cmp, c, a)
196 self.assertRaises(RuntimeError, cmp, a, c)
197 # okay, now break the cycles
Walter Dörwald919497e2003-01-19 16:23:59 +0000198 a.pop(); b.pop(); c.pop()
199 self.assertRaises(TypeError, cmp)
200
Walter Dörwald919497e2003-01-19 16:23:59 +0000201 def test_compile(self):
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000202 compile('print(1)\n', '', 'exec')
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000203## bom = b'\xef\xbb\xbf'
204## compile(bom + b'print(1)\n', '', 'exec')
Guido van Rossumd8faa362007-04-27 19:54:29 +0000205 compile(source='pass', filename='?', mode='exec')
206 compile(dont_inherit=0, filename='tmp', source='0', mode='eval')
207 compile('pass', '?', dont_inherit=1, mode='exec')
Walter Dörwald919497e2003-01-19 16:23:59 +0000208 self.assertRaises(TypeError, compile)
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000209 self.assertRaises(ValueError, compile, 'print(42)\n', '<string>', 'badmode')
210 self.assertRaises(ValueError, compile, 'print(42)\n', '<string>', 'single', 0xff)
Neal Norwitzfcf44352005-11-27 20:37:43 +0000211 self.assertRaises(TypeError, compile, chr(0), 'f', 'exec')
Guido van Rossumd8faa362007-04-27 19:54:29 +0000212 self.assertRaises(TypeError, compile, 'pass', '?', 'exec',
213 mode='eval', source='0', filename='tmp')
Walter Dörwald1f5947b2007-05-22 16:52:54 +0000214 compile('print("\xe5")\n', '', 'exec')
215 self.assertRaises(TypeError, compile, chr(0), 'f', 'exec')
216 self.assertRaises(ValueError, compile, str('a = 1'), 'f', 'bad')
Guido van Rossumd8faa362007-04-27 19:54:29 +0000217
Walter Dörwald919497e2003-01-19 16:23:59 +0000218 def test_delattr(self):
219 import sys
220 sys.spam = 1
221 delattr(sys, 'spam')
222 self.assertRaises(TypeError, delattr)
223
224 def test_dir(self):
Georg Brandle32b4222007-03-10 22:13:27 +0000225 # dir(wrong number of arguments)
Walter Dörwald919497e2003-01-19 16:23:59 +0000226 self.assertRaises(TypeError, dir, 42, 42)
227
Georg Brandle32b4222007-03-10 22:13:27 +0000228 # dir() - local scope
229 local_var = 1
230 self.assert_('local_var' in dir())
231
232 # dir(module)
233 import sys
234 self.assert_('exit' in dir(sys))
235
236 # dir(module_with_invalid__dict__)
237 import types
238 class Foo(types.ModuleType):
239 __dict__ = 8
240 f = Foo("foo")
241 self.assertRaises(TypeError, dir, f)
242
243 # dir(type)
244 self.assert_("strip" in dir(str))
245 self.assert_("__mro__" not in dir(str))
246
247 # dir(obj)
248 class Foo(object):
249 def __init__(self):
250 self.x = 7
251 self.y = 8
252 self.z = 9
253 f = Foo()
254 self.assert_("y" in dir(f))
255
256 # dir(obj_no__dict__)
257 class Foo(object):
258 __slots__ = []
259 f = Foo()
260 self.assert_("__repr__" in dir(f))
261
262 # dir(obj_no__class__with__dict__)
263 # (an ugly trick to cause getattr(f, "__class__") to fail)
264 class Foo(object):
265 __slots__ = ["__class__", "__dict__"]
266 def __init__(self):
267 self.bar = "wow"
268 f = Foo()
269 self.assert_("__repr__" not in dir(f))
270 self.assert_("bar" in dir(f))
271
272 # dir(obj_using __dir__)
273 class Foo(object):
274 def __dir__(self):
275 return ["kan", "ga", "roo"]
276 f = Foo()
277 self.assert_(dir(f) == ["ga", "kan", "roo"])
278
279 # dir(obj__dir__not_list)
280 class Foo(object):
281 def __dir__(self):
282 return 7
283 f = Foo()
284 self.assertRaises(TypeError, dir, f)
285
Collin Winter3eed7652007-08-14 17:53:54 +0000286 # dir(traceback)
287 try:
288 raise IndexError
289 except:
290 self.assertEqual(len(dir(sys.exc_info()[2])), 4)
291
292
Walter Dörwald919497e2003-01-19 16:23:59 +0000293 def test_divmod(self):
294 self.assertEqual(divmod(12, 7), (1, 5))
295 self.assertEqual(divmod(-12, 7), (-2, 2))
296 self.assertEqual(divmod(12, -7), (-2, -2))
297 self.assertEqual(divmod(-12, -7), (1, -5))
298
Guido van Rossume2a383d2007-01-15 16:59:06 +0000299 self.assertEqual(divmod(12, 7), (1, 5))
300 self.assertEqual(divmod(-12, 7), (-2, 2))
301 self.assertEqual(divmod(12, -7), (-2, -2))
302 self.assertEqual(divmod(-12, -7), (1, -5))
Walter Dörwald919497e2003-01-19 16:23:59 +0000303
Guido van Rossume2a383d2007-01-15 16:59:06 +0000304 self.assertEqual(divmod(12, 7), (1, 5))
305 self.assertEqual(divmod(-12, 7), (-2, 2))
306 self.assertEqual(divmod(12, -7), (-2, -2))
307 self.assertEqual(divmod(-12, -7), (1, -5))
Walter Dörwald919497e2003-01-19 16:23:59 +0000308
Raymond Hettinger5ea7e312004-09-30 07:47:20 +0000309 self.assertEqual(divmod(-sys.maxint-1, -1),
310 (sys.maxint+1, 0))
311
Walter Dörwald919497e2003-01-19 16:23:59 +0000312 self.assert_(not fcmp(divmod(3.25, 1.0), (3.0, 0.25)))
313 self.assert_(not fcmp(divmod(-3.25, 1.0), (-4.0, 0.75)))
314 self.assert_(not fcmp(divmod(3.25, -1.0), (-4.0, -0.75)))
315 self.assert_(not fcmp(divmod(-3.25, -1.0), (3.0, -0.25)))
316
317 self.assertRaises(TypeError, divmod)
318
319 def test_eval(self):
320 self.assertEqual(eval('1+1'), 2)
321 self.assertEqual(eval(' 1+1\n'), 2)
322 globals = {'a': 1, 'b': 2}
323 locals = {'b': 200, 'c': 300}
324 self.assertEqual(eval('a', globals) , 1)
325 self.assertEqual(eval('a', globals, locals), 1)
326 self.assertEqual(eval('b', globals, locals), 200)
327 self.assertEqual(eval('c', globals, locals), 300)
Walter Dörwald919497e2003-01-19 16:23:59 +0000328 globals = {'a': 1, 'b': 2}
329 locals = {'b': 200, 'c': 300}
Walter Dörwald1f5947b2007-05-22 16:52:54 +0000330## bom = b'\xef\xbb\xbf'
331## self.assertEqual(eval(bom + b'a', globals, locals), 1)
332 self.assertEqual(eval('"\xe5"', globals), "\xe5")
Walter Dörwald919497e2003-01-19 16:23:59 +0000333 self.assertRaises(TypeError, eval)
334 self.assertRaises(TypeError, eval, ())
335
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000336 def test_general_eval(self):
337 # Tests that general mappings can be used for the locals argument
338
339 class M:
340 "Test mapping interface versus possible calls from eval()."
341 def __getitem__(self, key):
342 if key == 'a':
343 return 12
344 raise KeyError
Guido van Rossumcd70eee2007-02-11 18:53:00 +0000345 def keys(self):
346 return list('xyz')
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000347
348 m = M()
349 g = globals()
350 self.assertEqual(eval('a', g, m), 12)
351 self.assertRaises(NameError, eval, 'b', g, m)
352 self.assertEqual(eval('dir()', g, m), list('xyz'))
353 self.assertEqual(eval('globals()', g, m), g)
354 self.assertEqual(eval('locals()', g, m), m)
Raymond Hettinger513ffe82004-07-06 13:44:41 +0000355 self.assertRaises(TypeError, eval, 'a', m)
Raymond Hettinger66bd2332004-08-02 08:30:07 +0000356 class A:
357 "Non-mapping"
358 pass
359 m = A()
360 self.assertRaises(TypeError, eval, 'a', g, m)
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000361
362 # Verify that dict subclasses work as well
363 class D(dict):
364 def __getitem__(self, key):
365 if key == 'a':
366 return 12
367 return dict.__getitem__(self, key)
Guido van Rossumcd70eee2007-02-11 18:53:00 +0000368 def keys(self):
369 return list('xyz')
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000370
371 d = D()
372 self.assertEqual(eval('a', g, d), 12)
373 self.assertRaises(NameError, eval, 'b', g, d)
374 self.assertEqual(eval('dir()', g, d), list('xyz'))
375 self.assertEqual(eval('globals()', g, d), g)
376 self.assertEqual(eval('locals()', g, d), d)
377
378 # Verify locals stores (used by list comps)
379 eval('[locals() for i in (2,3)]', g, d)
380 eval('[locals() for i in (2,3)]', g, UserDict.UserDict())
381
382 class SpreadSheet:
383 "Sample application showing nested, calculated lookups."
384 _cells = {}
385 def __setitem__(self, key, formula):
386 self._cells[key] = formula
Thomas Wouters73e5a5b2006-06-08 15:35:45 +0000387 def __getitem__(self, key):
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000388 return eval(self._cells[key], globals(), self)
389
390 ss = SpreadSheet()
391 ss['a1'] = '5'
392 ss['a2'] = 'a1*6'
393 ss['a3'] = 'a2*7'
394 self.assertEqual(ss['a3'], 210)
395
Raymond Hettinger2a7dede2004-08-07 04:55:30 +0000396 # Verify that dir() catches a non-list returned by eval
397 # SF bug #1004669
398 class C:
399 def __getitem__(self, item):
400 raise KeyError(item)
Guido van Rossumcd70eee2007-02-11 18:53:00 +0000401 def keys(self):
402 return 1 # used to be 'a' but that's no longer an error
Raymond Hettinger2a7dede2004-08-07 04:55:30 +0000403 self.assertRaises(TypeError, eval, 'dir()', globals(), C())
404
Georg Brandl7cae87c2006-09-06 06:51:57 +0000405 def test_exec(self):
406 g = {}
407 exec('z = 1', g)
408 if '__builtins__' in g:
409 del g['__builtins__']
410 self.assertEqual(g, {'z': 1})
411
Guido van Rossumef87d6e2007-05-02 19:09:54 +0000412 exec('z = 1+1', g)
Georg Brandl7cae87c2006-09-06 06:51:57 +0000413 if '__builtins__' in g:
414 del g['__builtins__']
415 self.assertEqual(g, {'z': 2})
416 g = {}
417 l = {}
418
419 import warnings
420 warnings.filterwarnings("ignore", "global statement", module="<string>")
421 exec('global a; a = 1; b = 2', g, l)
422 if '__builtins__' in g:
423 del g['__builtins__']
424 if '__builtins__' in l:
425 del l['__builtins__']
426 self.assertEqual((g, l), ({'a': 1}, {'b': 2}))
427
Walter Dörwald919497e2003-01-19 16:23:59 +0000428 def test_filter(self):
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000429 self.assertEqual(list(filter(lambda c: 'a' <= c <= 'z', 'Hello World')), list('elloorld'))
430 self.assertEqual(list(filter(None, [1, 'hello', [], [3], '', None, 9, 0])), [1, 'hello', [3], 9])
431 self.assertEqual(list(filter(lambda x: x > 0, [1, -3, 9, 0, 2])), [1, 9, 2])
432 self.assertEqual(list(filter(None, Squares(10))), [1, 4, 9, 16, 25, 36, 49, 64, 81])
433 self.assertEqual(list(filter(lambda x: x%2, Squares(10))), [1, 9, 25, 49, 81])
Walter Dörwald919497e2003-01-19 16:23:59 +0000434 def identity(item):
435 return 1
436 filter(identity, Squares(5))
437 self.assertRaises(TypeError, filter)
438 class BadSeq(object):
Tim Petersf2715e02003-02-19 02:35:07 +0000439 def __getitem__(self, index):
440 if index<4:
441 return 42
442 raise ValueError
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000443 self.assertRaises(ValueError, list, filter(lambda x: x, BadSeq()))
Walter Dörwald919497e2003-01-19 16:23:59 +0000444 def badfunc():
445 pass
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000446 self.assertRaises(TypeError, list, filter(badfunc, range(5)))
Walter Dörwald919497e2003-01-19 16:23:59 +0000447
Walter Dörwaldbf517072003-01-27 15:57:14 +0000448 # test bltinmodule.c::filtertuple()
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000449 self.assertEqual(list(filter(None, (1, 2))), [1, 2])
450 self.assertEqual(list(filter(lambda x: x>=3, (1, 2, 3, 4))), [3, 4])
451 self.assertRaises(TypeError, list, filter(42, (1, 2)))
Walter Dörwaldc3da83f2003-02-04 20:24:45 +0000452
Walter Dörwald919497e2003-01-19 16:23:59 +0000453 def test_float(self):
454 self.assertEqual(float(3.14), 3.14)
455 self.assertEqual(float(314), 314.0)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000456 self.assertEqual(float(314), 314.0)
Walter Dörwald919497e2003-01-19 16:23:59 +0000457 self.assertEqual(float(" 3.14 "), 3.14)
Neal Norwitze7214a12005-12-18 05:03:17 +0000458 self.assertRaises(ValueError, float, " 0x3.1 ")
459 self.assertRaises(ValueError, float, " -0x3.p-1 ")
Walter Dörwald1f5947b2007-05-22 16:52:54 +0000460 self.assertEqual(float(str(b" \u0663.\u0661\u0664 ",'raw-unicode-escape')), 3.14)
461 self.assertEqual(float("1"*10000), 1e10000) # Inf on both sides
Walter Dörwald919497e2003-01-19 16:23:59 +0000462
Thomas Wouters477c8d52006-05-27 19:21:47 +0000463 @run_with_locale('LC_NUMERIC', 'fr_FR', 'de_DE')
Neal Norwitz5898fa22005-11-22 05:17:40 +0000464 def test_float_with_comma(self):
465 # set locale to something that doesn't use '.' for the decimal point
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000466 # float must not accept the locale specific decimal point but
467 # it still has to accept the normal python syntac
Thomas Wouters477c8d52006-05-27 19:21:47 +0000468 import locale
469 if not locale.localeconv()['decimal_point'] == ',':
Neal Norwitz5898fa22005-11-22 05:17:40 +0000470 return
471
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000472 self.assertEqual(float(" 3.14 "), 3.14)
473 self.assertEqual(float("+3.14 "), 3.14)
474 self.assertEqual(float("-3.14 "), -3.14)
475 self.assertEqual(float(".14 "), .14)
476 self.assertEqual(float("3. "), 3.0)
477 self.assertEqual(float("3.e3 "), 3000.0)
478 self.assertEqual(float("3.2e3 "), 3200.0)
479 self.assertEqual(float("2.5e-1 "), 0.25)
480 self.assertEqual(float("5e-1"), 0.5)
481 self.assertRaises(ValueError, float, " 3,14 ")
482 self.assertRaises(ValueError, float, " +3,14 ")
483 self.assertRaises(ValueError, float, " -3,14 ")
Thomas Wouters477c8d52006-05-27 19:21:47 +0000484 self.assertRaises(ValueError, float, " 0x3.1 ")
485 self.assertRaises(ValueError, float, " -0x3.p-1 ")
486 self.assertEqual(float(" 25.e-1 "), 2.5)
487 self.assertEqual(fcmp(float(" .25e-1 "), .025), 0)
Neal Norwitz5898fa22005-11-22 05:17:40 +0000488
Brett Cannonc3647ac2005-04-26 03:45:26 +0000489 def test_floatconversion(self):
490 # Make sure that calls to __float__() work properly
491 class Foo0:
492 def __float__(self):
493 return 42.
494
495 class Foo1(object):
496 def __float__(self):
497 return 42.
498
499 class Foo2(float):
500 def __float__(self):
501 return 42.
502
503 class Foo3(float):
504 def __new__(cls, value=0.):
505 return float.__new__(cls, 2*value)
506
507 def __float__(self):
508 return self
509
510 class Foo4(float):
511 def __float__(self):
512 return 42
513
514 self.assertAlmostEqual(float(Foo0()), 42.)
515 self.assertAlmostEqual(float(Foo1()), 42.)
516 self.assertAlmostEqual(float(Foo2()), 42.)
517 self.assertAlmostEqual(float(Foo3(21)), 42.)
518 self.assertRaises(TypeError, float, Foo4(42))
519
Eric Smith8c663262007-08-25 02:26:07 +0000520 def test_format(self):
521 class A:
522 def __init__(self, x):
523 self.x = x
524 def __format__(self, format_spec):
525 return str(self.x) + format_spec
526
527 # class that returns a bad type from __format__
528 class H:
529 def __format__(self, format_spec):
530 return 1.0
531
532 self.assertEqual(format(3, ''), '3')
533 self.assertEqual(format(A(3), 'spec'), '3spec')
534
535 # for builtin types, format(x, "") == str(x)
536 self.assertEqual(format(17**13, ""), str(17**13))
537 self.assertEqual(format(1.0, ""), str(1.0))
538 self.assertEqual(format(3.1415e104, ""), str(3.1415e104))
539 self.assertEqual(format(-3.1415e104, ""), str(-3.1415e104))
540 self.assertEqual(format(3.1415e-104, ""), str(3.1415e-104))
541 self.assertEqual(format(-3.1415e-104, ""), str(-3.1415e-104))
542 self.assertEqual(format(object, ""), str(object))
543
Eric Smith739e2ad2007-08-27 19:07:22 +0000544 # TypeError because self.__format__ returns the wrong type
545 self.assertRaises(TypeError, format, H(), "")
Eric Smith8c663262007-08-25 02:26:07 +0000546
Walter Dörwald919497e2003-01-19 16:23:59 +0000547 def test_getattr(self):
548 import sys
549 self.assert_(getattr(sys, 'stdout') is sys.stdout)
550 self.assertRaises(TypeError, getattr, sys, 1)
551 self.assertRaises(TypeError, getattr, sys, 1, "foo")
552 self.assertRaises(TypeError, getattr)
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000553 self.assertRaises(AttributeError, getattr, sys, chr(sys.maxunicode))
Walter Dörwald919497e2003-01-19 16:23:59 +0000554
555 def test_hasattr(self):
556 import sys
557 self.assert_(hasattr(sys, 'stdout'))
558 self.assertRaises(TypeError, hasattr, sys, 1)
559 self.assertRaises(TypeError, hasattr)
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000560 self.assertEqual(False, hasattr(sys, chr(sys.maxunicode)))
Walter Dörwald919497e2003-01-19 16:23:59 +0000561
562 def test_hash(self):
563 hash(None)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000564 self.assertEqual(hash(1), hash(1))
Walter Dörwald919497e2003-01-19 16:23:59 +0000565 self.assertEqual(hash(1), hash(1.0))
566 hash('spam')
Walter Dörwald1f5947b2007-05-22 16:52:54 +0000567 self.assertEqual(hash('spam'), hash(str8('spam')))
Walter Dörwald919497e2003-01-19 16:23:59 +0000568 hash((0,1,2,3))
569 def f(): pass
570 self.assertRaises(TypeError, hash, [])
571 self.assertRaises(TypeError, hash, {})
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000572 # Bug 1536021: Allow hash to return long objects
573 class X:
574 def __hash__(self):
575 return 2**100
576 self.assertEquals(type(hash(X())), int)
577 class Y(object):
578 def __hash__(self):
579 return 2**100
580 self.assertEquals(type(hash(Y())), int)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000581 class Z(int):
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000582 def __hash__(self):
583 return self
Guido van Rossume2a383d2007-01-15 16:59:06 +0000584 self.assertEquals(hash(Z(42)), hash(42))
Walter Dörwald919497e2003-01-19 16:23:59 +0000585
586 def test_hex(self):
587 self.assertEqual(hex(16), '0x10')
Guido van Rossume2a383d2007-01-15 16:59:06 +0000588 self.assertEqual(hex(16), '0x10')
Guido van Rossum6c9e1302003-11-29 23:52:13 +0000589 self.assertEqual(hex(-16), '-0x10')
Guido van Rossume2a383d2007-01-15 16:59:06 +0000590 self.assertEqual(hex(-16), '-0x10')
Walter Dörwald919497e2003-01-19 16:23:59 +0000591 self.assertRaises(TypeError, hex, {})
592
593 def test_id(self):
594 id(None)
595 id(1)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000596 id(1)
Walter Dörwald919497e2003-01-19 16:23:59 +0000597 id(1.0)
598 id('spam')
599 id((0,1,2,3))
600 id([0,1,2,3])
601 id({'spam': 1, 'eggs': 2, 'ham': 3})
602
Guido van Rossuma88a0332007-02-26 16:59:55 +0000603 # Test input() later, alphabetized as if it were raw_input
604
Walter Dörwald919497e2003-01-19 16:23:59 +0000605 def test_int(self):
606 self.assertEqual(int(314), 314)
607 self.assertEqual(int(3.14), 3)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000608 self.assertEqual(int(314), 314)
Walter Dörwald919497e2003-01-19 16:23:59 +0000609 # Check that conversion from float truncates towards zero
610 self.assertEqual(int(-3.14), -3)
611 self.assertEqual(int(3.9), 3)
612 self.assertEqual(int(-3.9), -3)
613 self.assertEqual(int(3.5), 3)
614 self.assertEqual(int(-3.5), -3)
615 # Different base:
Guido van Rossume2a383d2007-01-15 16:59:06 +0000616 self.assertEqual(int("10",16), 16)
Walter Dörwald919497e2003-01-19 16:23:59 +0000617 # Test conversion from strings and various anomalies
618 for s, v in L:
619 for sign in "", "+", "-":
620 for prefix in "", " ", "\t", " \t\t ":
621 ss = prefix + sign + s
622 vv = v
623 if sign == "-" and v is not ValueError:
624 vv = -v
625 try:
626 self.assertEqual(int(ss), vv)
627 except v:
628 pass
629
Walter Dörwald70a6b492004-02-12 17:35:32 +0000630 s = repr(-1-sys.maxint)
Thomas Wouters89f507f2006-12-13 04:49:30 +0000631 x = int(s)
632 self.assertEqual(x+1, -sys.maxint)
633 self.assert_(isinstance(x, int))
Walter Dörwald919497e2003-01-19 16:23:59 +0000634 # should return long
Thomas Wouters89f507f2006-12-13 04:49:30 +0000635 self.assertEqual(int(s[1:]), sys.maxint+1)
Walter Dörwald919497e2003-01-19 16:23:59 +0000636
637 # should return long
638 x = int(1e100)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000639 self.assert_(isinstance(x, int))
Walter Dörwald919497e2003-01-19 16:23:59 +0000640 x = int(-1e100)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000641 self.assert_(isinstance(x, int))
Walter Dörwald919497e2003-01-19 16:23:59 +0000642
643
644 # SF bug 434186: 0x80000000/2 != 0x80000000>>1.
645 # Worked by accident in Windows release build, but failed in debug build.
646 # Failed in all Linux builds.
647 x = -1-sys.maxint
648 self.assertEqual(x >> 1, x//2)
649
650 self.assertRaises(ValueError, int, '123\0')
651 self.assertRaises(ValueError, int, '53', 40)
652
Thomas Wouters89f507f2006-12-13 04:49:30 +0000653 # SF bug 1545497: embedded NULs were not detected with
654 # explicit base
655 self.assertRaises(ValueError, int, '123\0', 10)
656 self.assertRaises(ValueError, int, '123\x00 245', 20)
657
Walter Dörwald919497e2003-01-19 16:23:59 +0000658 x = int('1' * 600)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000659 self.assert_(isinstance(x, int))
Walter Dörwald919497e2003-01-19 16:23:59 +0000660
Walter Dörwald1f5947b2007-05-22 16:52:54 +0000661 x = int(chr(0x661) * 600)
662 self.assert_(isinstance(x, int))
Walter Dörwald919497e2003-01-19 16:23:59 +0000663
664 self.assertRaises(TypeError, int, 1, 12)
665
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000666 # tests with base 0
667 self.assertRaises(ValueError, int, ' 0123 ', 0) # old octal syntax
668 self.assertEqual(int('000', 0), 0)
669 self.assertEqual(int('0o123', 0), 83)
670 self.assertEqual(int('0x123', 0), 291)
671 self.assertEqual(int('0b100', 0), 4)
672 self.assertEqual(int(' 0O123 ', 0), 83)
673 self.assertEqual(int(' 0X123 ', 0), 291)
674 self.assertEqual(int(' 0B100 ', 0), 4)
675
676 # without base still base 10
677 self.assertEqual(int('0123'), 123)
678 self.assertEqual(int('0123', 10), 123)
679
680 # tests with prefix and base != 0
Neal Norwitz5898fa22005-11-22 05:17:40 +0000681 self.assertEqual(int('0x123', 16), 291)
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000682 self.assertEqual(int('0o123', 8), 83)
683 self.assertEqual(int('0b100', 2), 4)
684 self.assertEqual(int('0X123', 16), 291)
685 self.assertEqual(int('0O123', 8), 83)
686 self.assertEqual(int('0B100', 2), 4)
Walter Dörwald919497e2003-01-19 16:23:59 +0000687
Thomas Wouters477c8d52006-05-27 19:21:47 +0000688 # SF bug 1334662: int(string, base) wrong answers
689 # Various representations of 2**32 evaluated to 0
690 # rather than 2**32 in previous versions
691
Guido van Rossume2a383d2007-01-15 16:59:06 +0000692 self.assertEqual(int('100000000000000000000000000000000', 2), 4294967296)
693 self.assertEqual(int('102002022201221111211', 3), 4294967296)
694 self.assertEqual(int('10000000000000000', 4), 4294967296)
695 self.assertEqual(int('32244002423141', 5), 4294967296)
696 self.assertEqual(int('1550104015504', 6), 4294967296)
697 self.assertEqual(int('211301422354', 7), 4294967296)
698 self.assertEqual(int('40000000000', 8), 4294967296)
699 self.assertEqual(int('12068657454', 9), 4294967296)
700 self.assertEqual(int('4294967296', 10), 4294967296)
701 self.assertEqual(int('1904440554', 11), 4294967296)
702 self.assertEqual(int('9ba461594', 12), 4294967296)
703 self.assertEqual(int('535a79889', 13), 4294967296)
704 self.assertEqual(int('2ca5b7464', 14), 4294967296)
705 self.assertEqual(int('1a20dcd81', 15), 4294967296)
706 self.assertEqual(int('100000000', 16), 4294967296)
707 self.assertEqual(int('a7ffda91', 17), 4294967296)
708 self.assertEqual(int('704he7g4', 18), 4294967296)
709 self.assertEqual(int('4f5aff66', 19), 4294967296)
710 self.assertEqual(int('3723ai4g', 20), 4294967296)
711 self.assertEqual(int('281d55i4', 21), 4294967296)
712 self.assertEqual(int('1fj8b184', 22), 4294967296)
713 self.assertEqual(int('1606k7ic', 23), 4294967296)
714 self.assertEqual(int('mb994ag', 24), 4294967296)
715 self.assertEqual(int('hek2mgl', 25), 4294967296)
716 self.assertEqual(int('dnchbnm', 26), 4294967296)
717 self.assertEqual(int('b28jpdm', 27), 4294967296)
718 self.assertEqual(int('8pfgih4', 28), 4294967296)
719 self.assertEqual(int('76beigg', 29), 4294967296)
720 self.assertEqual(int('5qmcpqg', 30), 4294967296)
721 self.assertEqual(int('4q0jto4', 31), 4294967296)
722 self.assertEqual(int('4000000', 32), 4294967296)
723 self.assertEqual(int('3aokq94', 33), 4294967296)
724 self.assertEqual(int('2qhxjli', 34), 4294967296)
725 self.assertEqual(int('2br45qb', 35), 4294967296)
726 self.assertEqual(int('1z141z4', 36), 4294967296)
Thomas Wouters477c8d52006-05-27 19:21:47 +0000727
728 # SF bug 1334662: int(string, base) wrong answers
729 # Checks for proper evaluation of 2**32 + 1
Guido van Rossume2a383d2007-01-15 16:59:06 +0000730 self.assertEqual(int('100000000000000000000000000000001', 2), 4294967297)
731 self.assertEqual(int('102002022201221111212', 3), 4294967297)
732 self.assertEqual(int('10000000000000001', 4), 4294967297)
733 self.assertEqual(int('32244002423142', 5), 4294967297)
734 self.assertEqual(int('1550104015505', 6), 4294967297)
735 self.assertEqual(int('211301422355', 7), 4294967297)
736 self.assertEqual(int('40000000001', 8), 4294967297)
737 self.assertEqual(int('12068657455', 9), 4294967297)
738 self.assertEqual(int('4294967297', 10), 4294967297)
739 self.assertEqual(int('1904440555', 11), 4294967297)
740 self.assertEqual(int('9ba461595', 12), 4294967297)
741 self.assertEqual(int('535a7988a', 13), 4294967297)
742 self.assertEqual(int('2ca5b7465', 14), 4294967297)
743 self.assertEqual(int('1a20dcd82', 15), 4294967297)
744 self.assertEqual(int('100000001', 16), 4294967297)
745 self.assertEqual(int('a7ffda92', 17), 4294967297)
746 self.assertEqual(int('704he7g5', 18), 4294967297)
747 self.assertEqual(int('4f5aff67', 19), 4294967297)
748 self.assertEqual(int('3723ai4h', 20), 4294967297)
749 self.assertEqual(int('281d55i5', 21), 4294967297)
750 self.assertEqual(int('1fj8b185', 22), 4294967297)
751 self.assertEqual(int('1606k7id', 23), 4294967297)
752 self.assertEqual(int('mb994ah', 24), 4294967297)
753 self.assertEqual(int('hek2mgm', 25), 4294967297)
754 self.assertEqual(int('dnchbnn', 26), 4294967297)
755 self.assertEqual(int('b28jpdn', 27), 4294967297)
756 self.assertEqual(int('8pfgih5', 28), 4294967297)
757 self.assertEqual(int('76beigh', 29), 4294967297)
758 self.assertEqual(int('5qmcpqh', 30), 4294967297)
759 self.assertEqual(int('4q0jto5', 31), 4294967297)
760 self.assertEqual(int('4000001', 32), 4294967297)
761 self.assertEqual(int('3aokq95', 33), 4294967297)
762 self.assertEqual(int('2qhxjlj', 34), 4294967297)
763 self.assertEqual(int('2br45qc', 35), 4294967297)
764 self.assertEqual(int('1z141z5', 36), 4294967297)
Thomas Wouters477c8d52006-05-27 19:21:47 +0000765
Brett Cannonc3647ac2005-04-26 03:45:26 +0000766 def test_intconversion(self):
767 # Test __int__()
768 class Foo0:
769 def __int__(self):
770 return 42
771
772 class Foo1(object):
773 def __int__(self):
774 return 42
775
776 class Foo2(int):
777 def __int__(self):
778 return 42
779
780 class Foo3(int):
781 def __int__(self):
782 return self
783
784 class Foo4(int):
785 def __int__(self):
Guido van Rossume2a383d2007-01-15 16:59:06 +0000786 return 42
Brett Cannonc3647ac2005-04-26 03:45:26 +0000787
788 class Foo5(int):
789 def __int__(self):
790 return 42.
791
792 self.assertEqual(int(Foo0()), 42)
793 self.assertEqual(int(Foo1()), 42)
794 self.assertEqual(int(Foo2()), 42)
795 self.assertEqual(int(Foo3()), 0)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000796 self.assertEqual(int(Foo4()), 42)
Brett Cannonc3647ac2005-04-26 03:45:26 +0000797 self.assertRaises(TypeError, int, Foo5())
798
Walter Dörwald919497e2003-01-19 16:23:59 +0000799 def test_iter(self):
800 self.assertRaises(TypeError, iter)
801 self.assertRaises(TypeError, iter, 42, 42)
802 lists = [("1", "2"), ["1", "2"], "12"]
Walter Dörwald919497e2003-01-19 16:23:59 +0000803 for l in lists:
804 i = iter(l)
Georg Brandla18af4e2007-04-21 15:47:16 +0000805 self.assertEqual(next(i), '1')
806 self.assertEqual(next(i), '2')
807 self.assertRaises(StopIteration, next, i)
Walter Dörwald919497e2003-01-19 16:23:59 +0000808
809 def test_isinstance(self):
810 class C:
811 pass
812 class D(C):
813 pass
814 class E:
815 pass
816 c = C()
817 d = D()
818 e = E()
819 self.assert_(isinstance(c, C))
820 self.assert_(isinstance(d, C))
821 self.assert_(not isinstance(e, C))
822 self.assert_(not isinstance(c, D))
823 self.assert_(not isinstance('foo', E))
824 self.assertRaises(TypeError, isinstance, E, 'foo')
825 self.assertRaises(TypeError, isinstance)
826
827 def test_issubclass(self):
828 class C:
829 pass
830 class D(C):
831 pass
832 class E:
833 pass
834 c = C()
835 d = D()
836 e = E()
837 self.assert_(issubclass(D, C))
838 self.assert_(issubclass(C, C))
839 self.assert_(not issubclass(C, D))
840 self.assertRaises(TypeError, issubclass, 'foo', E)
841 self.assertRaises(TypeError, issubclass, E, 'foo')
842 self.assertRaises(TypeError, issubclass)
843
844 def test_len(self):
845 self.assertEqual(len('123'), 3)
846 self.assertEqual(len(()), 0)
847 self.assertEqual(len((1, 2, 3, 4)), 4)
848 self.assertEqual(len([1, 2, 3, 4]), 4)
849 self.assertEqual(len({}), 0)
850 self.assertEqual(len({'a':1, 'b': 2}), 2)
851 class BadSeq:
852 def __len__(self):
853 raise ValueError
854 self.assertRaises(ValueError, len, BadSeq())
855
856 def test_list(self):
857 self.assertEqual(list([]), [])
858 l0_3 = [0, 1, 2, 3]
859 l0_3_bis = list(l0_3)
860 self.assertEqual(l0_3, l0_3_bis)
861 self.assert_(l0_3 is not l0_3_bis)
862 self.assertEqual(list(()), [])
863 self.assertEqual(list((0, 1, 2, 3)), [0, 1, 2, 3])
864 self.assertEqual(list(''), [])
865 self.assertEqual(list('spam'), ['s', 'p', 'a', 'm'])
866
867 if sys.maxint == 0x7fffffff:
868 # This test can currently only work on 32-bit machines.
869 # XXX If/when PySequence_Length() returns a ssize_t, it should be
870 # XXX re-enabled.
871 # Verify clearing of bug #556025.
872 # This assumes that the max data size (sys.maxint) == max
873 # address size this also assumes that the address size is at
874 # least 4 bytes with 8 byte addresses, the bug is not well
875 # tested
876 #
877 # Note: This test is expected to SEGV under Cygwin 1.3.12 or
878 # earlier due to a newlib bug. See the following mailing list
879 # thread for the details:
880
881 # http://sources.redhat.com/ml/newlib/2002/msg00369.html
Guido van Rossum805365e2007-05-07 22:24:25 +0000882 self.assertRaises(MemoryError, list, range(sys.maxint // 2))
Walter Dörwald919497e2003-01-19 16:23:59 +0000883
Raymond Hettingeraa241e02004-09-26 19:24:20 +0000884 # This code used to segfault in Py2.4a3
885 x = []
886 x.extend(-y for y in x)
887 self.assertEqual(x, [])
888
Walter Dörwald919497e2003-01-19 16:23:59 +0000889 def test_long(self):
Guido van Rossume2a383d2007-01-15 16:59:06 +0000890 self.assertEqual(int(314), 314)
891 self.assertEqual(int(3.14), 3)
892 self.assertEqual(int(314), 314)
Walter Dörwald919497e2003-01-19 16:23:59 +0000893 # Check that conversion from float truncates towards zero
Guido van Rossume2a383d2007-01-15 16:59:06 +0000894 self.assertEqual(int(-3.14), -3)
895 self.assertEqual(int(3.9), 3)
896 self.assertEqual(int(-3.9), -3)
897 self.assertEqual(int(3.5), 3)
898 self.assertEqual(int(-3.5), -3)
899 self.assertEqual(int("-3"), -3)
Walter Dörwald919497e2003-01-19 16:23:59 +0000900 # Different base:
Guido van Rossume2a383d2007-01-15 16:59:06 +0000901 self.assertEqual(int("10",16), 16)
Walter Dörwald919497e2003-01-19 16:23:59 +0000902 # Check conversions from string (same test set as for int(), and then some)
903 LL = [
Guido van Rossume2a383d2007-01-15 16:59:06 +0000904 ('1' + '0'*20, 10**20),
905 ('1' + '0'*100, 10**100)
Walter Dörwald919497e2003-01-19 16:23:59 +0000906 ]
Walter Dörwald1f5947b2007-05-22 16:52:54 +0000907 for s, v in LL:
Walter Dörwald919497e2003-01-19 16:23:59 +0000908 for sign in "", "+", "-":
909 for prefix in "", " ", "\t", " \t\t ":
910 ss = prefix + sign + s
911 vv = v
912 if sign == "-" and v is not ValueError:
913 vv = -v
914 try:
Guido van Rossume2a383d2007-01-15 16:59:06 +0000915 self.assertEqual(int(ss), int(vv))
Walter Dörwald919497e2003-01-19 16:23:59 +0000916 except v:
917 pass
918
Guido van Rossume2a383d2007-01-15 16:59:06 +0000919 self.assertRaises(ValueError, int, '123\0')
920 self.assertRaises(ValueError, int, '53', 40)
921 self.assertRaises(TypeError, int, 1, 12)
Walter Dörwald919497e2003-01-19 16:23:59 +0000922
Guido van Rossumd8faa362007-04-27 19:54:29 +0000923 # SF patch #1638879: embedded NULs were not detected with
924 # explicit base
925 self.assertRaises(ValueError, int, '123\0', 10)
926 self.assertRaises(ValueError, int, '123\x00 245', 20)
927
Guido van Rossume2a383d2007-01-15 16:59:06 +0000928 self.assertEqual(int('100000000000000000000000000000000', 2),
Thomas Wouters477c8d52006-05-27 19:21:47 +0000929 4294967296)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000930 self.assertEqual(int('102002022201221111211', 3), 4294967296)
931 self.assertEqual(int('10000000000000000', 4), 4294967296)
932 self.assertEqual(int('32244002423141', 5), 4294967296)
933 self.assertEqual(int('1550104015504', 6), 4294967296)
934 self.assertEqual(int('211301422354', 7), 4294967296)
935 self.assertEqual(int('40000000000', 8), 4294967296)
936 self.assertEqual(int('12068657454', 9), 4294967296)
937 self.assertEqual(int('4294967296', 10), 4294967296)
938 self.assertEqual(int('1904440554', 11), 4294967296)
939 self.assertEqual(int('9ba461594', 12), 4294967296)
940 self.assertEqual(int('535a79889', 13), 4294967296)
941 self.assertEqual(int('2ca5b7464', 14), 4294967296)
942 self.assertEqual(int('1a20dcd81', 15), 4294967296)
943 self.assertEqual(int('100000000', 16), 4294967296)
944 self.assertEqual(int('a7ffda91', 17), 4294967296)
945 self.assertEqual(int('704he7g4', 18), 4294967296)
946 self.assertEqual(int('4f5aff66', 19), 4294967296)
947 self.assertEqual(int('3723ai4g', 20), 4294967296)
948 self.assertEqual(int('281d55i4', 21), 4294967296)
949 self.assertEqual(int('1fj8b184', 22), 4294967296)
950 self.assertEqual(int('1606k7ic', 23), 4294967296)
951 self.assertEqual(int('mb994ag', 24), 4294967296)
952 self.assertEqual(int('hek2mgl', 25), 4294967296)
953 self.assertEqual(int('dnchbnm', 26), 4294967296)
954 self.assertEqual(int('b28jpdm', 27), 4294967296)
955 self.assertEqual(int('8pfgih4', 28), 4294967296)
956 self.assertEqual(int('76beigg', 29), 4294967296)
957 self.assertEqual(int('5qmcpqg', 30), 4294967296)
958 self.assertEqual(int('4q0jto4', 31), 4294967296)
959 self.assertEqual(int('4000000', 32), 4294967296)
960 self.assertEqual(int('3aokq94', 33), 4294967296)
961 self.assertEqual(int('2qhxjli', 34), 4294967296)
962 self.assertEqual(int('2br45qb', 35), 4294967296)
963 self.assertEqual(int('1z141z4', 36), 4294967296)
Thomas Wouters477c8d52006-05-27 19:21:47 +0000964
Guido van Rossume2a383d2007-01-15 16:59:06 +0000965 self.assertEqual(int('100000000000000000000000000000001', 2),
Thomas Wouters477c8d52006-05-27 19:21:47 +0000966 4294967297)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000967 self.assertEqual(int('102002022201221111212', 3), 4294967297)
968 self.assertEqual(int('10000000000000001', 4), 4294967297)
969 self.assertEqual(int('32244002423142', 5), 4294967297)
970 self.assertEqual(int('1550104015505', 6), 4294967297)
971 self.assertEqual(int('211301422355', 7), 4294967297)
972 self.assertEqual(int('40000000001', 8), 4294967297)
973 self.assertEqual(int('12068657455', 9), 4294967297)
974 self.assertEqual(int('4294967297', 10), 4294967297)
975 self.assertEqual(int('1904440555', 11), 4294967297)
976 self.assertEqual(int('9ba461595', 12), 4294967297)
977 self.assertEqual(int('535a7988a', 13), 4294967297)
978 self.assertEqual(int('2ca5b7465', 14), 4294967297)
979 self.assertEqual(int('1a20dcd82', 15), 4294967297)
980 self.assertEqual(int('100000001', 16), 4294967297)
981 self.assertEqual(int('a7ffda92', 17), 4294967297)
982 self.assertEqual(int('704he7g5', 18), 4294967297)
983 self.assertEqual(int('4f5aff67', 19), 4294967297)
984 self.assertEqual(int('3723ai4h', 20), 4294967297)
985 self.assertEqual(int('281d55i5', 21), 4294967297)
986 self.assertEqual(int('1fj8b185', 22), 4294967297)
987 self.assertEqual(int('1606k7id', 23), 4294967297)
988 self.assertEqual(int('mb994ah', 24), 4294967297)
989 self.assertEqual(int('hek2mgm', 25), 4294967297)
990 self.assertEqual(int('dnchbnn', 26), 4294967297)
991 self.assertEqual(int('b28jpdn', 27), 4294967297)
992 self.assertEqual(int('8pfgih5', 28), 4294967297)
993 self.assertEqual(int('76beigh', 29), 4294967297)
994 self.assertEqual(int('5qmcpqh', 30), 4294967297)
995 self.assertEqual(int('4q0jto5', 31), 4294967297)
996 self.assertEqual(int('4000001', 32), 4294967297)
997 self.assertEqual(int('3aokq95', 33), 4294967297)
998 self.assertEqual(int('2qhxjlj', 34), 4294967297)
999 self.assertEqual(int('2br45qc', 35), 4294967297)
1000 self.assertEqual(int('1z141z5', 36), 4294967297)
Thomas Wouters477c8d52006-05-27 19:21:47 +00001001
1002
Brett Cannonc3647ac2005-04-26 03:45:26 +00001003 def test_longconversion(self):
1004 # Test __long__()
1005 class Foo0:
1006 def __long__(self):
Guido van Rossume2a383d2007-01-15 16:59:06 +00001007 return 42
Brett Cannonc3647ac2005-04-26 03:45:26 +00001008
1009 class Foo1(object):
1010 def __long__(self):
Guido van Rossume2a383d2007-01-15 16:59:06 +00001011 return 42
Brett Cannonc3647ac2005-04-26 03:45:26 +00001012
Guido van Rossume2a383d2007-01-15 16:59:06 +00001013 class Foo2(int):
Brett Cannonc3647ac2005-04-26 03:45:26 +00001014 def __long__(self):
1015 return 42
1016
Guido van Rossume2a383d2007-01-15 16:59:06 +00001017 class Foo3(int):
1018 def __long__(self):
1019 return self
1020
1021 class Foo4(int):
1022 def __long__(self):
1023 return 42
1024
1025 class Foo5(int):
Brett Cannonc3647ac2005-04-26 03:45:26 +00001026 def __long__(self):
1027 return 42.
1028
Guido van Rossume2a383d2007-01-15 16:59:06 +00001029 self.assertEqual(int(Foo0()), 42)
1030 self.assertEqual(int(Foo1()), 42)
Guido van Rossumd8faa362007-04-27 19:54:29 +00001031 # XXX invokes __int__ now
Guido van Rossumddefaf32007-01-14 03:31:43 +00001032 # self.assertEqual(long(Foo2()), 42L)
Guido van Rossume2a383d2007-01-15 16:59:06 +00001033 self.assertEqual(int(Foo3()), 0)
Guido van Rossumd8faa362007-04-27 19:54:29 +00001034 # XXX likewise
Guido van Rossumddefaf32007-01-14 03:31:43 +00001035 # self.assertEqual(long(Foo4()), 42)
1036 # self.assertRaises(TypeError, long, Foo5())
Brett Cannonc3647ac2005-04-26 03:45:26 +00001037
Walter Dörwald919497e2003-01-19 16:23:59 +00001038 def test_map(self):
1039 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001040 list(map(None, 'hello')),
1041 [('h',), ('e',), ('l',), ('l',), ('o',)]
Walter Dörwald919497e2003-01-19 16:23:59 +00001042 )
1043 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001044 list(map(None, 'abcd', 'efg')),
1045 [('a', 'e'), ('b', 'f'), ('c', 'g')]
Walter Dörwald919497e2003-01-19 16:23:59 +00001046 )
1047 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001048 list(map(None, range(3))),
1049 [(0,), (1,), (2,)]
Walter Dörwald919497e2003-01-19 16:23:59 +00001050 )
1051 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001052 list(map(lambda x: x*x, range(1,4))),
Walter Dörwald919497e2003-01-19 16:23:59 +00001053 [1, 4, 9]
1054 )
1055 try:
1056 from math import sqrt
1057 except ImportError:
1058 def sqrt(x):
1059 return pow(x, 0.5)
1060 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001061 list(map(lambda x: list(map(sqrt, x)), [[16, 4], [81, 9]])),
Walter Dörwald919497e2003-01-19 16:23:59 +00001062 [[4.0, 2.0], [9.0, 3.0]]
1063 )
1064 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001065 list(map(lambda x, y: x+y, [1,3,2], [9,1,4])),
Walter Dörwald919497e2003-01-19 16:23:59 +00001066 [10, 4, 6]
1067 )
1068
1069 def plus(*v):
1070 accu = 0
1071 for i in v: accu = accu + i
1072 return accu
1073 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001074 list(map(plus, [1, 3, 7])),
Walter Dörwald919497e2003-01-19 16:23:59 +00001075 [1, 3, 7]
1076 )
1077 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001078 list(map(plus, [1, 3, 7], [4, 9, 2])),
Walter Dörwald919497e2003-01-19 16:23:59 +00001079 [1+4, 3+9, 7+2]
1080 )
1081 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001082 list(map(plus, [1, 3, 7], [4, 9, 2], [1, 1, 0])),
Walter Dörwald919497e2003-01-19 16:23:59 +00001083 [1+4+1, 3+9+1, 7+2+0]
1084 )
1085 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001086 list(map(None, Squares(10))),
1087 [(0,), (1,), (4,), (9,), (16,), (25,), (36,), (49,), (64,), (81,)]
1088 )
1089 self.assertEqual(
1090 list(map(int, Squares(10))),
Walter Dörwald919497e2003-01-19 16:23:59 +00001091 [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
1092 )
1093 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001094 list(map(None, Squares(3), Squares(2))),
1095 [(0,0), (1,1)]
Walter Dörwald919497e2003-01-19 16:23:59 +00001096 )
Guido van Rossum47b9ff62006-08-24 00:41:19 +00001097 def Max(a, b):
1098 if a is None:
1099 return b
1100 if b is None:
1101 return a
1102 return max(a, b)
Walter Dörwald919497e2003-01-19 16:23:59 +00001103 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001104 list(map(Max, Squares(3), Squares(2))),
1105 [0, 1]
Walter Dörwald919497e2003-01-19 16:23:59 +00001106 )
1107 self.assertRaises(TypeError, map)
1108 self.assertRaises(TypeError, map, lambda x: x, 42)
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001109 self.assertEqual(list(map(None, [42])), [(42,)])
Walter Dörwald919497e2003-01-19 16:23:59 +00001110 class BadSeq:
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001111 def __iter__(self):
Walter Dörwald919497e2003-01-19 16:23:59 +00001112 raise ValueError
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001113 yield None
1114 self.assertRaises(ValueError, list, map(lambda x: x, BadSeq()))
Neal Norwitzfcf44352005-11-27 20:37:43 +00001115 def badfunc(x):
1116 raise RuntimeError
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001117 self.assertRaises(RuntimeError, list, map(badfunc, range(5)))
Walter Dörwald919497e2003-01-19 16:23:59 +00001118
1119 def test_max(self):
1120 self.assertEqual(max('123123'), '3')
1121 self.assertEqual(max(1, 2, 3), 3)
1122 self.assertEqual(max((1, 2, 3, 1, 2, 3)), 3)
1123 self.assertEqual(max([1, 2, 3, 1, 2, 3]), 3)
1124
Guido van Rossume2a383d2007-01-15 16:59:06 +00001125 self.assertEqual(max(1, 2, 3.0), 3.0)
1126 self.assertEqual(max(1, 2.0, 3), 3)
1127 self.assertEqual(max(1.0, 2, 3), 3)
Walter Dörwald919497e2003-01-19 16:23:59 +00001128
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001129 for stmt in (
1130 "max(key=int)", # no args
1131 "max(1, key=int)", # single arg not iterable
1132 "max(1, 2, keystone=int)", # wrong keyword
1133 "max(1, 2, key=int, abc=int)", # two many keywords
1134 "max(1, 2, key=1)", # keyfunc is not callable
1135 ):
Tim Peters7f061872004-12-07 21:17:46 +00001136 try:
Georg Brandl7cae87c2006-09-06 06:51:57 +00001137 exec(stmt, globals())
Tim Peters7f061872004-12-07 21:17:46 +00001138 except TypeError:
1139 pass
1140 else:
1141 self.fail(stmt)
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001142
1143 self.assertEqual(max((1,), key=neg), 1) # one elem iterable
1144 self.assertEqual(max((1,2), key=neg), 1) # two elem iterable
1145 self.assertEqual(max(1, 2, key=neg), 1) # two elems
1146
1147 data = [random.randrange(200) for i in range(100)]
1148 keys = dict((elem, random.randrange(50)) for elem in data)
1149 f = keys.__getitem__
1150 self.assertEqual(max(data, key=f),
1151 sorted(reversed(data), key=f)[-1])
1152
Walter Dörwald919497e2003-01-19 16:23:59 +00001153 def test_min(self):
1154 self.assertEqual(min('123123'), '1')
1155 self.assertEqual(min(1, 2, 3), 1)
1156 self.assertEqual(min((1, 2, 3, 1, 2, 3)), 1)
1157 self.assertEqual(min([1, 2, 3, 1, 2, 3]), 1)
1158
Guido van Rossume2a383d2007-01-15 16:59:06 +00001159 self.assertEqual(min(1, 2, 3.0), 1)
1160 self.assertEqual(min(1, 2.0, 3), 1)
1161 self.assertEqual(min(1.0, 2, 3), 1.0)
Walter Dörwald919497e2003-01-19 16:23:59 +00001162
1163 self.assertRaises(TypeError, min)
1164 self.assertRaises(TypeError, min, 42)
1165 self.assertRaises(ValueError, min, ())
1166 class BadSeq:
1167 def __getitem__(self, index):
1168 raise ValueError
1169 self.assertRaises(ValueError, min, BadSeq())
1170 class BadNumber:
1171 def __cmp__(self, other):
1172 raise ValueError
Guido van Rossum47b9ff62006-08-24 00:41:19 +00001173 self.assertRaises(TypeError, min, (42, BadNumber()))
Walter Dörwald919497e2003-01-19 16:23:59 +00001174
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001175 for stmt in (
1176 "min(key=int)", # no args
1177 "min(1, key=int)", # single arg not iterable
1178 "min(1, 2, keystone=int)", # wrong keyword
1179 "min(1, 2, key=int, abc=int)", # two many keywords
1180 "min(1, 2, key=1)", # keyfunc is not callable
1181 ):
Tim Peters7f061872004-12-07 21:17:46 +00001182 try:
Georg Brandl7cae87c2006-09-06 06:51:57 +00001183 exec(stmt, globals())
Tim Peters7f061872004-12-07 21:17:46 +00001184 except TypeError:
1185 pass
1186 else:
1187 self.fail(stmt)
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001188
1189 self.assertEqual(min((1,), key=neg), 1) # one elem iterable
1190 self.assertEqual(min((1,2), key=neg), 2) # two elem iterable
1191 self.assertEqual(min(1, 2, key=neg), 2) # two elems
1192
1193 data = [random.randrange(200) for i in range(100)]
1194 keys = dict((elem, random.randrange(50)) for elem in data)
1195 f = keys.__getitem__
1196 self.assertEqual(min(data, key=f),
1197 sorted(data, key=f)[0])
1198
Georg Brandla18af4e2007-04-21 15:47:16 +00001199 def test_next(self):
1200 it = iter(range(2))
1201 self.assertEqual(next(it), 0)
1202 self.assertEqual(next(it), 1)
1203 self.assertRaises(StopIteration, next, it)
1204 self.assertRaises(StopIteration, next, it)
1205 self.assertEquals(next(it, 42), 42)
1206
1207 class Iter(object):
1208 def __iter__(self):
1209 return self
1210 def __next__(self):
1211 raise StopIteration
1212
1213 it = iter(Iter())
1214 self.assertEquals(next(it, 42), 42)
1215 self.assertRaises(StopIteration, next, it)
1216
1217 def gen():
1218 yield 1
1219 return
1220
1221 it = gen()
1222 self.assertEquals(next(it), 1)
1223 self.assertRaises(StopIteration, next, it)
1224 self.assertEquals(next(it, 42), 42)
1225
Walter Dörwald919497e2003-01-19 16:23:59 +00001226 def test_oct(self):
Guido van Rossumcd16bf62007-06-13 18:07:49 +00001227 self.assertEqual(oct(100), '0o144')
1228 self.assertEqual(oct(100), '0o144')
1229 self.assertEqual(oct(-100), '-0o144')
1230 self.assertEqual(oct(-100), '-0o144')
Walter Dörwald919497e2003-01-19 16:23:59 +00001231 self.assertRaises(TypeError, oct, ())
1232
1233 def write_testfile(self):
Guido van Rossuma88a0332007-02-26 16:59:55 +00001234 # NB the first 4 lines are also used to test input, below
Walter Dörwald919497e2003-01-19 16:23:59 +00001235 fp = open(TESTFN, 'w')
1236 try:
1237 fp.write('1+1\n')
1238 fp.write('1+1\n')
1239 fp.write('The quick brown fox jumps over the lazy dog')
1240 fp.write('.\n')
1241 fp.write('Dear John\n')
1242 fp.write('XXX'*100)
1243 fp.write('YYY'*100)
1244 finally:
1245 fp.close()
1246
1247 def test_open(self):
1248 self.write_testfile()
1249 fp = open(TESTFN, 'r')
1250 try:
1251 self.assertEqual(fp.readline(4), '1+1\n')
1252 self.assertEqual(fp.readline(4), '1+1\n')
1253 self.assertEqual(fp.readline(), 'The quick brown fox jumps over the lazy dog.\n')
1254 self.assertEqual(fp.readline(4), 'Dear')
1255 self.assertEqual(fp.readline(100), ' John\n')
1256 self.assertEqual(fp.read(300), 'XXX'*100)
1257 self.assertEqual(fp.read(1000), 'YYY'*100)
1258 finally:
1259 fp.close()
1260 unlink(TESTFN)
1261
1262 def test_ord(self):
1263 self.assertEqual(ord(' '), 32)
1264 self.assertEqual(ord('A'), 65)
1265 self.assertEqual(ord('a'), 97)
Guido van Rossumf9e91c92007-05-08 21:05:48 +00001266 self.assertEqual(ord('\x80'), 128)
1267 self.assertEqual(ord('\xff'), 255)
1268
1269 self.assertEqual(ord(b' '), 32)
1270 self.assertEqual(ord(b'A'), 65)
1271 self.assertEqual(ord(b'a'), 97)
1272 self.assertEqual(ord(b'\x80'), 128)
1273 self.assertEqual(ord(b'\xff'), 255)
1274
Walter Dörwald1f5947b2007-05-22 16:52:54 +00001275 self.assertEqual(ord(chr(sys.maxunicode)), sys.maxunicode)
Walter Dörwald919497e2003-01-19 16:23:59 +00001276 self.assertRaises(TypeError, ord, 42)
Walter Dörwald919497e2003-01-19 16:23:59 +00001277
Guido van Rossum8ac004e2007-07-15 13:00:05 +00001278 self.assertEqual(ord(chr(0x10FFFF)), 0x10FFFF)
1279 self.assertEqual(ord("\U0000FFFF"), 0x0000FFFF)
1280 self.assertEqual(ord("\U00010000"), 0x00010000)
1281 self.assertEqual(ord("\U00010001"), 0x00010001)
1282 self.assertEqual(ord("\U000FFFFE"), 0x000FFFFE)
1283 self.assertEqual(ord("\U000FFFFF"), 0x000FFFFF)
1284 self.assertEqual(ord("\U00100000"), 0x00100000)
1285 self.assertEqual(ord("\U00100001"), 0x00100001)
1286 self.assertEqual(ord("\U0010FFFE"), 0x0010FFFE)
1287 self.assertEqual(ord("\U0010FFFF"), 0x0010FFFF)
1288
Walter Dörwald919497e2003-01-19 16:23:59 +00001289 def test_pow(self):
1290 self.assertEqual(pow(0,0), 1)
1291 self.assertEqual(pow(0,1), 0)
1292 self.assertEqual(pow(1,0), 1)
1293 self.assertEqual(pow(1,1), 1)
1294
1295 self.assertEqual(pow(2,0), 1)
1296 self.assertEqual(pow(2,10), 1024)
1297 self.assertEqual(pow(2,20), 1024*1024)
1298 self.assertEqual(pow(2,30), 1024*1024*1024)
1299
1300 self.assertEqual(pow(-2,0), 1)
1301 self.assertEqual(pow(-2,1), -2)
1302 self.assertEqual(pow(-2,2), 4)
1303 self.assertEqual(pow(-2,3), -8)
1304
Guido van Rossume2a383d2007-01-15 16:59:06 +00001305 self.assertEqual(pow(0,0), 1)
1306 self.assertEqual(pow(0,1), 0)
1307 self.assertEqual(pow(1,0), 1)
1308 self.assertEqual(pow(1,1), 1)
Walter Dörwald919497e2003-01-19 16:23:59 +00001309
Guido van Rossume2a383d2007-01-15 16:59:06 +00001310 self.assertEqual(pow(2,0), 1)
1311 self.assertEqual(pow(2,10), 1024)
1312 self.assertEqual(pow(2,20), 1024*1024)
1313 self.assertEqual(pow(2,30), 1024*1024*1024)
Walter Dörwald919497e2003-01-19 16:23:59 +00001314
Guido van Rossume2a383d2007-01-15 16:59:06 +00001315 self.assertEqual(pow(-2,0), 1)
1316 self.assertEqual(pow(-2,1), -2)
1317 self.assertEqual(pow(-2,2), 4)
1318 self.assertEqual(pow(-2,3), -8)
Walter Dörwald919497e2003-01-19 16:23:59 +00001319
1320 self.assertAlmostEqual(pow(0.,0), 1.)
1321 self.assertAlmostEqual(pow(0.,1), 0.)
1322 self.assertAlmostEqual(pow(1.,0), 1.)
1323 self.assertAlmostEqual(pow(1.,1), 1.)
1324
1325 self.assertAlmostEqual(pow(2.,0), 1.)
1326 self.assertAlmostEqual(pow(2.,10), 1024.)
1327 self.assertAlmostEqual(pow(2.,20), 1024.*1024.)
1328 self.assertAlmostEqual(pow(2.,30), 1024.*1024.*1024.)
1329
1330 self.assertAlmostEqual(pow(-2.,0), 1.)
1331 self.assertAlmostEqual(pow(-2.,1), -2.)
1332 self.assertAlmostEqual(pow(-2.,2), 4.)
1333 self.assertAlmostEqual(pow(-2.,3), -8.)
1334
Guido van Rossume2a383d2007-01-15 16:59:06 +00001335 for x in 2, 2, 2.0:
1336 for y in 10, 10, 10.0:
1337 for z in 1000, 1000, 1000.0:
Walter Dörwald919497e2003-01-19 16:23:59 +00001338 if isinstance(x, float) or \
1339 isinstance(y, float) or \
1340 isinstance(z, float):
1341 self.assertRaises(TypeError, pow, x, y, z)
1342 else:
1343 self.assertAlmostEqual(pow(x, y, z), 24.0)
1344
1345 self.assertRaises(TypeError, pow, -1, -2, 3)
1346 self.assertRaises(ValueError, pow, 1, 2, 0)
Guido van Rossume2a383d2007-01-15 16:59:06 +00001347 self.assertRaises(TypeError, pow, -1, -2, 3)
1348 self.assertRaises(ValueError, pow, 1, 2, 0)
Walter Dörwald919497e2003-01-19 16:23:59 +00001349 self.assertRaises(ValueError, pow, -342.43, 0.234)
1350
1351 self.assertRaises(TypeError, pow)
1352
1353 def test_range(self):
Guido van Rossum805365e2007-05-07 22:24:25 +00001354 self.assertEqual(list(range(3)), [0, 1, 2])
1355 self.assertEqual(list(range(1, 5)), [1, 2, 3, 4])
1356 self.assertEqual(list(range(0)), [])
1357 self.assertEqual(list(range(-3)), [])
1358 self.assertEqual(list(range(1, 10, 3)), [1, 4, 7])
1359 #self.assertEqual(list(range(5, -5, -3)), [5, 2, -1, -4])
Walter Dörwald919497e2003-01-19 16:23:59 +00001360
Guido van Rossum805365e2007-05-07 22:24:25 +00001361 """ XXX(nnorwitz):
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001362 # Now test range() with longs
Guido van Rossum805365e2007-05-07 22:24:25 +00001363 self.assertEqual(list(range(-2**100)), [])
1364 self.assertEqual(list(range(0, -2**100)), [])
1365 self.assertEqual(list(range(0, 2**100, -1)), [])
1366 self.assertEqual(list(range(0, 2**100, -1)), [])
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001367
Guido van Rossume2a383d2007-01-15 16:59:06 +00001368 a = int(10 * sys.maxint)
1369 b = int(100 * sys.maxint)
1370 c = int(50 * sys.maxint)
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001371
Guido van Rossum805365e2007-05-07 22:24:25 +00001372 self.assertEqual(list(range(a, a+2)), [a, a+1])
1373 self.assertEqual(list(range(a+2, a, -1)), [a+2, a+1])
1374 self.assertEqual(list(range(a+4, a, -2)), [a+4, a+2])
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001375
Guido van Rossum805365e2007-05-07 22:24:25 +00001376 seq = list(range(a, b, c))
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001377 self.assert_(a in seq)
1378 self.assert_(b not in seq)
1379 self.assertEqual(len(seq), 2)
1380
Guido van Rossum805365e2007-05-07 22:24:25 +00001381 seq = list(range(b, a, -c))
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001382 self.assert_(b in seq)
1383 self.assert_(a not in seq)
1384 self.assertEqual(len(seq), 2)
1385
Guido van Rossum805365e2007-05-07 22:24:25 +00001386 seq = list(range(-a, -b, -c))
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001387 self.assert_(-a in seq)
1388 self.assert_(-b not in seq)
1389 self.assertEqual(len(seq), 2)
1390
Walter Dörwald919497e2003-01-19 16:23:59 +00001391 self.assertRaises(TypeError, range)
1392 self.assertRaises(TypeError, range, 1, 2, 3, 4)
1393 self.assertRaises(ValueError, range, 1, 2, 0)
Guido van Rossume2a383d2007-01-15 16:59:06 +00001394 self.assertRaises(ValueError, range, a, a + 1, int(0))
Neal Norwitzfcf44352005-11-27 20:37:43 +00001395
1396 class badzero(int):
Guido van Rossum47b9ff62006-08-24 00:41:19 +00001397 def __eq__(self, other):
Neal Norwitzfcf44352005-11-27 20:37:43 +00001398 raise RuntimeError
Guido van Rossum47b9ff62006-08-24 00:41:19 +00001399 __ne__ = __lt__ = __gt__ = __le__ = __ge__ = __eq__
1400
1401 # XXX This won't (but should!) raise RuntimeError if a is an int...
Neal Norwitzfcf44352005-11-27 20:37:43 +00001402 self.assertRaises(RuntimeError, range, a, a + 1, badzero(1))
Guido van Rossum805365e2007-05-07 22:24:25 +00001403 """
Walter Dörwald919497e2003-01-19 16:23:59 +00001404
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001405 # Reject floats when it would require PyLongs to represent.
1406 # (smaller floats still accepted, but deprecated)
Tim Peters299b3df2003-04-15 14:40:03 +00001407 self.assertRaises(TypeError, range, 1e100, 1e101, 1e101)
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001408
Walter Dörwald357981e2003-04-15 18:59:28 +00001409 self.assertRaises(TypeError, range, 0, "spam")
1410 self.assertRaises(TypeError, range, 0, 42, "spam")
1411
Guido van Rossum805365e2007-05-07 22:24:25 +00001412 #NEAL self.assertRaises(OverflowError, range, -sys.maxint, sys.maxint)
1413 #NEAL self.assertRaises(OverflowError, range, 0, 2*sys.maxint)
1414
1415 self.assertRaises(OverflowError, len, range(0, sys.maxint**10))
Walter Dörwald357981e2003-04-15 18:59:28 +00001416
Guido van Rossuma88a0332007-02-26 16:59:55 +00001417 def test_input(self):
1418 self.write_testfile()
1419 fp = open(TESTFN, 'r')
1420 savestdin = sys.stdin
1421 savestdout = sys.stdout # Eats the echo
1422 try:
1423 sys.stdin = fp
1424 sys.stdout = BitBucket()
1425 self.assertEqual(input(), "1+1")
1426 self.assertEqual(input('testing\n'), "1+1")
1427 self.assertEqual(input(), 'The quick brown fox jumps over the lazy dog.')
1428 self.assertEqual(input('testing\n'), 'Dear John')
1429
1430 # SF 1535165: don't segfault on closed stdin
1431 # sys.stdout must be a regular file for triggering
1432 sys.stdout = savestdout
1433 sys.stdin.close()
1434 self.assertRaises(ValueError, input)
1435
1436 sys.stdout = BitBucket()
Guido van Rossum34d19282007-08-09 01:03:29 +00001437 sys.stdin = io.StringIO("NULL\0")
Guido van Rossuma88a0332007-02-26 16:59:55 +00001438 self.assertRaises(TypeError, input, 42, 42)
Guido van Rossum34d19282007-08-09 01:03:29 +00001439 sys.stdin = io.StringIO(" 'whitespace'")
Guido van Rossuma88a0332007-02-26 16:59:55 +00001440 self.assertEqual(input(), " 'whitespace'")
Guido van Rossum34d19282007-08-09 01:03:29 +00001441 sys.stdin = io.StringIO()
Guido van Rossuma88a0332007-02-26 16:59:55 +00001442 self.assertRaises(EOFError, input)
1443
1444 del sys.stdout
1445 self.assertRaises(RuntimeError, input, 'prompt')
1446 del sys.stdin
1447 self.assertRaises(RuntimeError, input, 'prompt')
1448 finally:
1449 sys.stdin = savestdin
1450 sys.stdout = savestdout
1451 fp.close()
1452 unlink(TESTFN)
1453
Walter Dörwald919497e2003-01-19 16:23:59 +00001454 def test_repr(self):
1455 self.assertEqual(repr(''), '\'\'')
1456 self.assertEqual(repr(0), '0')
Guido van Rossume2a383d2007-01-15 16:59:06 +00001457 self.assertEqual(repr(0), '0')
Walter Dörwald919497e2003-01-19 16:23:59 +00001458 self.assertEqual(repr(()), '()')
1459 self.assertEqual(repr([]), '[]')
1460 self.assertEqual(repr({}), '{}')
1461 a = []
1462 a.append(a)
1463 self.assertEqual(repr(a), '[[...]]')
1464 a = {}
1465 a[0] = a
1466 self.assertEqual(repr(a), '{0: {...}}')
1467
1468 def test_round(self):
1469 self.assertEqual(round(0.0), 0.0)
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001470 self.assertEqual(type(round(0.0)), int)
Walter Dörwald919497e2003-01-19 16:23:59 +00001471 self.assertEqual(round(1.0), 1.0)
1472 self.assertEqual(round(10.0), 10.0)
1473 self.assertEqual(round(1000000000.0), 1000000000.0)
1474 self.assertEqual(round(1e20), 1e20)
1475
1476 self.assertEqual(round(-1.0), -1.0)
1477 self.assertEqual(round(-10.0), -10.0)
1478 self.assertEqual(round(-1000000000.0), -1000000000.0)
1479 self.assertEqual(round(-1e20), -1e20)
1480
1481 self.assertEqual(round(0.1), 0.0)
1482 self.assertEqual(round(1.1), 1.0)
1483 self.assertEqual(round(10.1), 10.0)
1484 self.assertEqual(round(1000000000.1), 1000000000.0)
1485
1486 self.assertEqual(round(-1.1), -1.0)
1487 self.assertEqual(round(-10.1), -10.0)
1488 self.assertEqual(round(-1000000000.1), -1000000000.0)
1489
1490 self.assertEqual(round(0.9), 1.0)
1491 self.assertEqual(round(9.9), 10.0)
1492 self.assertEqual(round(999999999.9), 1000000000.0)
1493
1494 self.assertEqual(round(-0.9), -1.0)
1495 self.assertEqual(round(-9.9), -10.0)
1496 self.assertEqual(round(-999999999.9), -1000000000.0)
1497
1498 self.assertEqual(round(-8.0, -1), -10.0)
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001499 self.assertEqual(type(round(-8.0, -1)), float)
1500
1501 self.assertEqual(type(round(-8.0, 0)), float)
1502 self.assertEqual(type(round(-8.0, 1)), float)
1503
1504 # Check even / odd rounding behaviour
1505 self.assertEqual(round(5.5), 6)
1506 self.assertEqual(round(6.5), 6)
1507 self.assertEqual(round(-5.5), -6)
1508 self.assertEqual(round(-6.5), -6)
1509
1510 # Check behavior on ints
1511 self.assertEqual(round(0), 0)
1512 self.assertEqual(round(8), 8)
1513 self.assertEqual(round(-8), -8)
1514 self.assertEqual(type(round(0)), int)
1515 self.assertEqual(type(round(-8, -1)), float)
1516 self.assertEqual(type(round(-8, 0)), float)
1517 self.assertEqual(type(round(-8, 1)), float)
Walter Dörwald919497e2003-01-19 16:23:59 +00001518
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001519 # test new kwargs
1520 self.assertEqual(round(number=-8.0, ndigits=-1), -10.0)
1521
Walter Dörwald919497e2003-01-19 16:23:59 +00001522 self.assertRaises(TypeError, round)
1523
Alex Martelliae211f92007-08-22 23:21:33 +00001524 # test generic rounding delegation for reals
1525 class TestRound:
1526 def __round__(self):
1527 return 23
1528
1529 class TestNoRound:
1530 pass
1531
1532 self.assertEqual(round(TestRound()), 23)
1533
1534 self.assertRaises(TypeError, round, 1, 2, 3)
1535 self.assertRaises(TypeError, round, TestNoRound())
1536
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001537 t = TestNoRound()
1538 t.__round__ = lambda *args: args
1539 self.assertRaises(TypeError, round, t)
1540 self.assertRaises(TypeError, round, t, 0)
1541
Walter Dörwald919497e2003-01-19 16:23:59 +00001542 def test_setattr(self):
Tim Petersf2715e02003-02-19 02:35:07 +00001543 setattr(sys, 'spam', 1)
1544 self.assertEqual(sys.spam, 1)
1545 self.assertRaises(TypeError, setattr, sys, 1, 'spam')
1546 self.assertRaises(TypeError, setattr)
Walter Dörwald919497e2003-01-19 16:23:59 +00001547
1548 def test_str(self):
1549 self.assertEqual(str(''), '')
1550 self.assertEqual(str(0), '0')
Guido van Rossume2a383d2007-01-15 16:59:06 +00001551 self.assertEqual(str(0), '0')
Walter Dörwald919497e2003-01-19 16:23:59 +00001552 self.assertEqual(str(()), '()')
1553 self.assertEqual(str([]), '[]')
1554 self.assertEqual(str({}), '{}')
1555 a = []
1556 a.append(a)
1557 self.assertEqual(str(a), '[[...]]')
1558 a = {}
1559 a[0] = a
1560 self.assertEqual(str(a), '{0: {...}}')
1561
Alex Martellia70b1912003-04-22 08:12:33 +00001562 def test_sum(self):
1563 self.assertEqual(sum([]), 0)
Guido van Rossum805365e2007-05-07 22:24:25 +00001564 self.assertEqual(sum(list(range(2,8))), 27)
1565 self.assertEqual(sum(iter(list(range(2,8)))), 27)
Alex Martellia70b1912003-04-22 08:12:33 +00001566 self.assertEqual(sum(Squares(10)), 285)
1567 self.assertEqual(sum(iter(Squares(10))), 285)
1568 self.assertEqual(sum([[1], [2], [3]], []), [1, 2, 3])
1569
1570 self.assertRaises(TypeError, sum)
1571 self.assertRaises(TypeError, sum, 42)
1572 self.assertRaises(TypeError, sum, ['a', 'b', 'c'])
1573 self.assertRaises(TypeError, sum, ['a', 'b', 'c'], '')
1574 self.assertRaises(TypeError, sum, [[1], [2], [3]])
1575 self.assertRaises(TypeError, sum, [{2:3}])
1576 self.assertRaises(TypeError, sum, [{2:3}]*2, {2:3})
1577
1578 class BadSeq:
1579 def __getitem__(self, index):
1580 raise ValueError
1581 self.assertRaises(ValueError, sum, BadSeq())
1582
Alex Martelli86d8b342007-08-22 22:39:42 +00001583 def test_trunc(self):
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001584
1585 self.assertEqual(trunc(1), 1)
1586 self.assertEqual(trunc(-1), -1)
1587 self.assertEqual(type(trunc(1)), int)
1588 self.assertEqual(type(trunc(1.5)), int)
1589 self.assertEqual(trunc(1.5), 1)
1590 self.assertEqual(trunc(-1.5), -1)
1591 self.assertEqual(trunc(1.999999), 1)
1592 self.assertEqual(trunc(-1.999999), -1)
1593 self.assertEqual(trunc(-0.999999), -0)
1594 self.assertEqual(trunc(-100.999), -100)
1595
Alex Martelli86d8b342007-08-22 22:39:42 +00001596 class TestTrunc:
1597 def __trunc__(self):
1598 return 23
1599
1600 class TestNoTrunc:
1601 pass
1602
1603 self.assertEqual(trunc(TestTrunc()), 23)
1604
1605 self.assertRaises(TypeError, trunc)
1606 self.assertRaises(TypeError, trunc, 1, 2)
1607 self.assertRaises(TypeError, trunc, TestNoTrunc())
1608
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001609 t = TestNoTrunc()
1610 t.__trunc__ = lambda *args: args
1611 self.assertRaises(TypeError, trunc, t)
1612 self.assertRaises(TypeError, trunc, t, 0)
1613
Walter Dörwald919497e2003-01-19 16:23:59 +00001614 def test_tuple(self):
1615 self.assertEqual(tuple(()), ())
1616 t0_3 = (0, 1, 2, 3)
1617 t0_3_bis = tuple(t0_3)
1618 self.assert_(t0_3 is t0_3_bis)
1619 self.assertEqual(tuple([]), ())
1620 self.assertEqual(tuple([0, 1, 2, 3]), (0, 1, 2, 3))
1621 self.assertEqual(tuple(''), ())
1622 self.assertEqual(tuple('spam'), ('s', 'p', 'a', 'm'))
1623
1624 def test_type(self):
1625 self.assertEqual(type(''), type('123'))
1626 self.assertNotEqual(type(''), type(()))
1627
Guido van Rossumfee7b932005-01-16 00:21:28 +00001628 # We don't want self in vars(), so these are static methods
1629
1630 @staticmethod
Walter Dörwald919497e2003-01-19 16:23:59 +00001631 def get_vars_f0():
1632 return vars()
Walter Dörwald919497e2003-01-19 16:23:59 +00001633
Guido van Rossumfee7b932005-01-16 00:21:28 +00001634 @staticmethod
Walter Dörwald919497e2003-01-19 16:23:59 +00001635 def get_vars_f2():
1636 BuiltinTest.get_vars_f0()
1637 a = 1
1638 b = 2
1639 return vars()
Walter Dörwald919497e2003-01-19 16:23:59 +00001640
1641 def test_vars(self):
Raymond Hettingera690a992003-11-16 16:17:49 +00001642 self.assertEqual(set(vars()), set(dir()))
Walter Dörwald919497e2003-01-19 16:23:59 +00001643 import sys
Raymond Hettingera690a992003-11-16 16:17:49 +00001644 self.assertEqual(set(vars(sys)), set(dir(sys)))
Walter Dörwald919497e2003-01-19 16:23:59 +00001645 self.assertEqual(self.get_vars_f0(), {})
1646 self.assertEqual(self.get_vars_f2(), {'a': 1, 'b': 2})
1647 self.assertRaises(TypeError, vars, 42, 42)
1648 self.assertRaises(TypeError, vars, 42)
1649
1650 def test_zip(self):
1651 a = (1, 2, 3)
1652 b = (4, 5, 6)
1653 t = [(1, 4), (2, 5), (3, 6)]
Guido van Rossum801f0d72006-08-24 19:48:10 +00001654 self.assertEqual(list(zip(a, b)), t)
Walter Dörwald919497e2003-01-19 16:23:59 +00001655 b = [4, 5, 6]
Guido van Rossum801f0d72006-08-24 19:48:10 +00001656 self.assertEqual(list(zip(a, b)), t)
Walter Dörwald919497e2003-01-19 16:23:59 +00001657 b = (4, 5, 6, 7)
Guido van Rossum801f0d72006-08-24 19:48:10 +00001658 self.assertEqual(list(zip(a, b)), t)
Walter Dörwald919497e2003-01-19 16:23:59 +00001659 class I:
1660 def __getitem__(self, i):
1661 if i < 0 or i > 2: raise IndexError
1662 return i + 4
Guido van Rossum801f0d72006-08-24 19:48:10 +00001663 self.assertEqual(list(zip(a, I())), t)
1664 self.assertEqual(list(zip()), [])
1665 self.assertEqual(list(zip(*[])), [])
Walter Dörwald919497e2003-01-19 16:23:59 +00001666 self.assertRaises(TypeError, zip, None)
1667 class G:
1668 pass
1669 self.assertRaises(TypeError, zip, a, G())
1670
1671 # Make sure zip doesn't try to allocate a billion elements for the
1672 # result list when one of its arguments doesn't say how long it is.
1673 # A MemoryError is the most likely failure mode.
1674 class SequenceWithoutALength:
1675 def __getitem__(self, i):
1676 if i == 5:
1677 raise IndexError
1678 else:
1679 return i
1680 self.assertEqual(
Guido van Rossum805365e2007-05-07 22:24:25 +00001681 list(zip(SequenceWithoutALength(), range(2**30))),
Walter Dörwald919497e2003-01-19 16:23:59 +00001682 list(enumerate(range(5)))
1683 )
1684
1685 class BadSeq:
1686 def __getitem__(self, i):
1687 if i == 5:
1688 raise ValueError
1689 else:
1690 return i
Guido van Rossum801f0d72006-08-24 19:48:10 +00001691 self.assertRaises(ValueError, list, zip(BadSeq(), BadSeq()))
Walter Dörwald919497e2003-01-19 16:23:59 +00001692
Raymond Hettinger64958a12003-12-17 20:43:33 +00001693class TestSorted(unittest.TestCase):
1694
1695 def test_basic(self):
Guido van Rossum805365e2007-05-07 22:24:25 +00001696 data = list(range(100))
Raymond Hettinger64958a12003-12-17 20:43:33 +00001697 copy = data[:]
1698 random.shuffle(copy)
1699 self.assertEqual(data, sorted(copy))
1700 self.assertNotEqual(data, copy)
1701
1702 data.reverse()
1703 random.shuffle(copy)
Guido van Rossum47b9ff62006-08-24 00:41:19 +00001704 self.assertEqual(data, sorted(copy, cmp=lambda x, y: (x < y) - (x > y)))
Raymond Hettinger64958a12003-12-17 20:43:33 +00001705 self.assertNotEqual(data, copy)
1706 random.shuffle(copy)
1707 self.assertEqual(data, sorted(copy, key=lambda x: -x))
1708 self.assertNotEqual(data, copy)
1709 random.shuffle(copy)
1710 self.assertEqual(data, sorted(copy, reverse=1))
1711 self.assertNotEqual(data, copy)
1712
1713 def test_inputtypes(self):
1714 s = 'abracadabra'
Walter Dörwald1f5947b2007-05-22 16:52:54 +00001715 types = [list, tuple, str]
Walter Dörwald4e41a4b2005-08-03 17:09:04 +00001716 for T in types:
Raymond Hettinger64958a12003-12-17 20:43:33 +00001717 self.assertEqual(sorted(s), sorted(T(s)))
1718
Walter Dörwald1f5947b2007-05-22 16:52:54 +00001719 s = ''.join(set(s)) # unique letters only
1720 types = [str, set, frozenset, list, tuple, dict.fromkeys]
Walter Dörwald4e41a4b2005-08-03 17:09:04 +00001721 for T in types:
Raymond Hettinger64958a12003-12-17 20:43:33 +00001722 self.assertEqual(sorted(s), sorted(T(s)))
1723
1724 def test_baddecorator(self):
1725 data = 'The quick Brown fox Jumped over The lazy Dog'.split()
1726 self.assertRaises(TypeError, sorted, data, None, lambda x,y: 0)
1727
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001728def test_main(verbose=None):
1729 test_classes = (BuiltinTest, TestSorted)
1730
1731 run_unittest(*test_classes)
1732
1733 # verify reference counting
1734 if verbose and hasattr(sys, "gettotalrefcount"):
1735 import gc
1736 counts = [None] * 5
Guido van Rossum805365e2007-05-07 22:24:25 +00001737 for i in range(len(counts)):
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001738 run_unittest(*test_classes)
1739 gc.collect()
1740 counts[i] = sys.gettotalrefcount()
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001741 print(counts)
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001742
Walter Dörwald919497e2003-01-19 16:23:59 +00001743
1744if __name__ == "__main__":
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001745 test_main(verbose=True)