blob: e5957ae0d77315e5828bce33013f68d8e7753a96 [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))
Eric Smith185e30c2007-08-30 22:23:08 +0000543 self.assertEqual(format(None, ""), str(None))
Eric Smith8c663262007-08-25 02:26:07 +0000544
Eric Smith739e2ad2007-08-27 19:07:22 +0000545 # TypeError because self.__format__ returns the wrong type
546 self.assertRaises(TypeError, format, H(), "")
Eric Smith8c663262007-08-25 02:26:07 +0000547
Walter Dörwald919497e2003-01-19 16:23:59 +0000548 def test_getattr(self):
549 import sys
550 self.assert_(getattr(sys, 'stdout') is sys.stdout)
551 self.assertRaises(TypeError, getattr, sys, 1)
552 self.assertRaises(TypeError, getattr, sys, 1, "foo")
553 self.assertRaises(TypeError, getattr)
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000554 self.assertRaises(AttributeError, getattr, sys, chr(sys.maxunicode))
Walter Dörwald919497e2003-01-19 16:23:59 +0000555
556 def test_hasattr(self):
557 import sys
558 self.assert_(hasattr(sys, 'stdout'))
559 self.assertRaises(TypeError, hasattr, sys, 1)
560 self.assertRaises(TypeError, hasattr)
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000561 self.assertEqual(False, hasattr(sys, chr(sys.maxunicode)))
Walter Dörwald919497e2003-01-19 16:23:59 +0000562
563 def test_hash(self):
564 hash(None)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000565 self.assertEqual(hash(1), hash(1))
Walter Dörwald919497e2003-01-19 16:23:59 +0000566 self.assertEqual(hash(1), hash(1.0))
567 hash('spam')
Walter Dörwald1f5947b2007-05-22 16:52:54 +0000568 self.assertEqual(hash('spam'), hash(str8('spam')))
Walter Dörwald919497e2003-01-19 16:23:59 +0000569 hash((0,1,2,3))
570 def f(): pass
571 self.assertRaises(TypeError, hash, [])
572 self.assertRaises(TypeError, hash, {})
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000573 # Bug 1536021: Allow hash to return long objects
574 class X:
575 def __hash__(self):
576 return 2**100
577 self.assertEquals(type(hash(X())), int)
578 class Y(object):
579 def __hash__(self):
580 return 2**100
581 self.assertEquals(type(hash(Y())), int)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000582 class Z(int):
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000583 def __hash__(self):
584 return self
Guido van Rossume2a383d2007-01-15 16:59:06 +0000585 self.assertEquals(hash(Z(42)), hash(42))
Walter Dörwald919497e2003-01-19 16:23:59 +0000586
587 def test_hex(self):
588 self.assertEqual(hex(16), '0x10')
Guido van Rossume2a383d2007-01-15 16:59:06 +0000589 self.assertEqual(hex(16), '0x10')
Guido van Rossum6c9e1302003-11-29 23:52:13 +0000590 self.assertEqual(hex(-16), '-0x10')
Guido van Rossume2a383d2007-01-15 16:59:06 +0000591 self.assertEqual(hex(-16), '-0x10')
Walter Dörwald919497e2003-01-19 16:23:59 +0000592 self.assertRaises(TypeError, hex, {})
593
594 def test_id(self):
595 id(None)
596 id(1)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000597 id(1)
Walter Dörwald919497e2003-01-19 16:23:59 +0000598 id(1.0)
599 id('spam')
600 id((0,1,2,3))
601 id([0,1,2,3])
602 id({'spam': 1, 'eggs': 2, 'ham': 3})
603
Guido van Rossuma88a0332007-02-26 16:59:55 +0000604 # Test input() later, alphabetized as if it were raw_input
605
Walter Dörwald919497e2003-01-19 16:23:59 +0000606 def test_int(self):
607 self.assertEqual(int(314), 314)
608 self.assertEqual(int(3.14), 3)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000609 self.assertEqual(int(314), 314)
Walter Dörwald919497e2003-01-19 16:23:59 +0000610 # Check that conversion from float truncates towards zero
611 self.assertEqual(int(-3.14), -3)
612 self.assertEqual(int(3.9), 3)
613 self.assertEqual(int(-3.9), -3)
614 self.assertEqual(int(3.5), 3)
615 self.assertEqual(int(-3.5), -3)
616 # Different base:
Guido van Rossume2a383d2007-01-15 16:59:06 +0000617 self.assertEqual(int("10",16), 16)
Walter Dörwald919497e2003-01-19 16:23:59 +0000618 # Test conversion from strings and various anomalies
619 for s, v in L:
620 for sign in "", "+", "-":
621 for prefix in "", " ", "\t", " \t\t ":
622 ss = prefix + sign + s
623 vv = v
624 if sign == "-" and v is not ValueError:
625 vv = -v
626 try:
627 self.assertEqual(int(ss), vv)
628 except v:
629 pass
630
Walter Dörwald70a6b492004-02-12 17:35:32 +0000631 s = repr(-1-sys.maxint)
Thomas Wouters89f507f2006-12-13 04:49:30 +0000632 x = int(s)
633 self.assertEqual(x+1, -sys.maxint)
634 self.assert_(isinstance(x, int))
Walter Dörwald919497e2003-01-19 16:23:59 +0000635 # should return long
Thomas Wouters89f507f2006-12-13 04:49:30 +0000636 self.assertEqual(int(s[1:]), sys.maxint+1)
Walter Dörwald919497e2003-01-19 16:23:59 +0000637
638 # should return long
639 x = int(1e100)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000640 self.assert_(isinstance(x, int))
Walter Dörwald919497e2003-01-19 16:23:59 +0000641 x = int(-1e100)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000642 self.assert_(isinstance(x, int))
Walter Dörwald919497e2003-01-19 16:23:59 +0000643
644
645 # SF bug 434186: 0x80000000/2 != 0x80000000>>1.
646 # Worked by accident in Windows release build, but failed in debug build.
647 # Failed in all Linux builds.
648 x = -1-sys.maxint
649 self.assertEqual(x >> 1, x//2)
650
651 self.assertRaises(ValueError, int, '123\0')
652 self.assertRaises(ValueError, int, '53', 40)
653
Thomas Wouters89f507f2006-12-13 04:49:30 +0000654 # SF bug 1545497: embedded NULs were not detected with
655 # explicit base
656 self.assertRaises(ValueError, int, '123\0', 10)
657 self.assertRaises(ValueError, int, '123\x00 245', 20)
658
Walter Dörwald919497e2003-01-19 16:23:59 +0000659 x = int('1' * 600)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000660 self.assert_(isinstance(x, int))
Walter Dörwald919497e2003-01-19 16:23:59 +0000661
Walter Dörwald1f5947b2007-05-22 16:52:54 +0000662 x = int(chr(0x661) * 600)
663 self.assert_(isinstance(x, int))
Walter Dörwald919497e2003-01-19 16:23:59 +0000664
665 self.assertRaises(TypeError, int, 1, 12)
666
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000667 # tests with base 0
668 self.assertRaises(ValueError, int, ' 0123 ', 0) # old octal syntax
669 self.assertEqual(int('000', 0), 0)
670 self.assertEqual(int('0o123', 0), 83)
671 self.assertEqual(int('0x123', 0), 291)
672 self.assertEqual(int('0b100', 0), 4)
673 self.assertEqual(int(' 0O123 ', 0), 83)
674 self.assertEqual(int(' 0X123 ', 0), 291)
675 self.assertEqual(int(' 0B100 ', 0), 4)
676
677 # without base still base 10
678 self.assertEqual(int('0123'), 123)
679 self.assertEqual(int('0123', 10), 123)
680
681 # tests with prefix and base != 0
Neal Norwitz5898fa22005-11-22 05:17:40 +0000682 self.assertEqual(int('0x123', 16), 291)
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000683 self.assertEqual(int('0o123', 8), 83)
684 self.assertEqual(int('0b100', 2), 4)
685 self.assertEqual(int('0X123', 16), 291)
686 self.assertEqual(int('0O123', 8), 83)
687 self.assertEqual(int('0B100', 2), 4)
Walter Dörwald919497e2003-01-19 16:23:59 +0000688
Thomas Wouters477c8d52006-05-27 19:21:47 +0000689 # SF bug 1334662: int(string, base) wrong answers
690 # Various representations of 2**32 evaluated to 0
691 # rather than 2**32 in previous versions
692
Guido van Rossume2a383d2007-01-15 16:59:06 +0000693 self.assertEqual(int('100000000000000000000000000000000', 2), 4294967296)
694 self.assertEqual(int('102002022201221111211', 3), 4294967296)
695 self.assertEqual(int('10000000000000000', 4), 4294967296)
696 self.assertEqual(int('32244002423141', 5), 4294967296)
697 self.assertEqual(int('1550104015504', 6), 4294967296)
698 self.assertEqual(int('211301422354', 7), 4294967296)
699 self.assertEqual(int('40000000000', 8), 4294967296)
700 self.assertEqual(int('12068657454', 9), 4294967296)
701 self.assertEqual(int('4294967296', 10), 4294967296)
702 self.assertEqual(int('1904440554', 11), 4294967296)
703 self.assertEqual(int('9ba461594', 12), 4294967296)
704 self.assertEqual(int('535a79889', 13), 4294967296)
705 self.assertEqual(int('2ca5b7464', 14), 4294967296)
706 self.assertEqual(int('1a20dcd81', 15), 4294967296)
707 self.assertEqual(int('100000000', 16), 4294967296)
708 self.assertEqual(int('a7ffda91', 17), 4294967296)
709 self.assertEqual(int('704he7g4', 18), 4294967296)
710 self.assertEqual(int('4f5aff66', 19), 4294967296)
711 self.assertEqual(int('3723ai4g', 20), 4294967296)
712 self.assertEqual(int('281d55i4', 21), 4294967296)
713 self.assertEqual(int('1fj8b184', 22), 4294967296)
714 self.assertEqual(int('1606k7ic', 23), 4294967296)
715 self.assertEqual(int('mb994ag', 24), 4294967296)
716 self.assertEqual(int('hek2mgl', 25), 4294967296)
717 self.assertEqual(int('dnchbnm', 26), 4294967296)
718 self.assertEqual(int('b28jpdm', 27), 4294967296)
719 self.assertEqual(int('8pfgih4', 28), 4294967296)
720 self.assertEqual(int('76beigg', 29), 4294967296)
721 self.assertEqual(int('5qmcpqg', 30), 4294967296)
722 self.assertEqual(int('4q0jto4', 31), 4294967296)
723 self.assertEqual(int('4000000', 32), 4294967296)
724 self.assertEqual(int('3aokq94', 33), 4294967296)
725 self.assertEqual(int('2qhxjli', 34), 4294967296)
726 self.assertEqual(int('2br45qb', 35), 4294967296)
727 self.assertEqual(int('1z141z4', 36), 4294967296)
Thomas Wouters477c8d52006-05-27 19:21:47 +0000728
729 # SF bug 1334662: int(string, base) wrong answers
730 # Checks for proper evaluation of 2**32 + 1
Guido van Rossume2a383d2007-01-15 16:59:06 +0000731 self.assertEqual(int('100000000000000000000000000000001', 2), 4294967297)
732 self.assertEqual(int('102002022201221111212', 3), 4294967297)
733 self.assertEqual(int('10000000000000001', 4), 4294967297)
734 self.assertEqual(int('32244002423142', 5), 4294967297)
735 self.assertEqual(int('1550104015505', 6), 4294967297)
736 self.assertEqual(int('211301422355', 7), 4294967297)
737 self.assertEqual(int('40000000001', 8), 4294967297)
738 self.assertEqual(int('12068657455', 9), 4294967297)
739 self.assertEqual(int('4294967297', 10), 4294967297)
740 self.assertEqual(int('1904440555', 11), 4294967297)
741 self.assertEqual(int('9ba461595', 12), 4294967297)
742 self.assertEqual(int('535a7988a', 13), 4294967297)
743 self.assertEqual(int('2ca5b7465', 14), 4294967297)
744 self.assertEqual(int('1a20dcd82', 15), 4294967297)
745 self.assertEqual(int('100000001', 16), 4294967297)
746 self.assertEqual(int('a7ffda92', 17), 4294967297)
747 self.assertEqual(int('704he7g5', 18), 4294967297)
748 self.assertEqual(int('4f5aff67', 19), 4294967297)
749 self.assertEqual(int('3723ai4h', 20), 4294967297)
750 self.assertEqual(int('281d55i5', 21), 4294967297)
751 self.assertEqual(int('1fj8b185', 22), 4294967297)
752 self.assertEqual(int('1606k7id', 23), 4294967297)
753 self.assertEqual(int('mb994ah', 24), 4294967297)
754 self.assertEqual(int('hek2mgm', 25), 4294967297)
755 self.assertEqual(int('dnchbnn', 26), 4294967297)
756 self.assertEqual(int('b28jpdn', 27), 4294967297)
757 self.assertEqual(int('8pfgih5', 28), 4294967297)
758 self.assertEqual(int('76beigh', 29), 4294967297)
759 self.assertEqual(int('5qmcpqh', 30), 4294967297)
760 self.assertEqual(int('4q0jto5', 31), 4294967297)
761 self.assertEqual(int('4000001', 32), 4294967297)
762 self.assertEqual(int('3aokq95', 33), 4294967297)
763 self.assertEqual(int('2qhxjlj', 34), 4294967297)
764 self.assertEqual(int('2br45qc', 35), 4294967297)
765 self.assertEqual(int('1z141z5', 36), 4294967297)
Thomas Wouters477c8d52006-05-27 19:21:47 +0000766
Brett Cannonc3647ac2005-04-26 03:45:26 +0000767 def test_intconversion(self):
768 # Test __int__()
769 class Foo0:
770 def __int__(self):
771 return 42
772
773 class Foo1(object):
774 def __int__(self):
775 return 42
776
777 class Foo2(int):
778 def __int__(self):
779 return 42
780
781 class Foo3(int):
782 def __int__(self):
783 return self
784
785 class Foo4(int):
786 def __int__(self):
Guido van Rossume2a383d2007-01-15 16:59:06 +0000787 return 42
Brett Cannonc3647ac2005-04-26 03:45:26 +0000788
789 class Foo5(int):
790 def __int__(self):
791 return 42.
792
793 self.assertEqual(int(Foo0()), 42)
794 self.assertEqual(int(Foo1()), 42)
795 self.assertEqual(int(Foo2()), 42)
796 self.assertEqual(int(Foo3()), 0)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000797 self.assertEqual(int(Foo4()), 42)
Brett Cannonc3647ac2005-04-26 03:45:26 +0000798 self.assertRaises(TypeError, int, Foo5())
799
Walter Dörwald919497e2003-01-19 16:23:59 +0000800 def test_iter(self):
801 self.assertRaises(TypeError, iter)
802 self.assertRaises(TypeError, iter, 42, 42)
803 lists = [("1", "2"), ["1", "2"], "12"]
Walter Dörwald919497e2003-01-19 16:23:59 +0000804 for l in lists:
805 i = iter(l)
Georg Brandla18af4e2007-04-21 15:47:16 +0000806 self.assertEqual(next(i), '1')
807 self.assertEqual(next(i), '2')
808 self.assertRaises(StopIteration, next, i)
Walter Dörwald919497e2003-01-19 16:23:59 +0000809
810 def test_isinstance(self):
811 class C:
812 pass
813 class D(C):
814 pass
815 class E:
816 pass
817 c = C()
818 d = D()
819 e = E()
820 self.assert_(isinstance(c, C))
821 self.assert_(isinstance(d, C))
822 self.assert_(not isinstance(e, C))
823 self.assert_(not isinstance(c, D))
824 self.assert_(not isinstance('foo', E))
825 self.assertRaises(TypeError, isinstance, E, 'foo')
826 self.assertRaises(TypeError, isinstance)
827
828 def test_issubclass(self):
829 class C:
830 pass
831 class D(C):
832 pass
833 class E:
834 pass
835 c = C()
836 d = D()
837 e = E()
838 self.assert_(issubclass(D, C))
839 self.assert_(issubclass(C, C))
840 self.assert_(not issubclass(C, D))
841 self.assertRaises(TypeError, issubclass, 'foo', E)
842 self.assertRaises(TypeError, issubclass, E, 'foo')
843 self.assertRaises(TypeError, issubclass)
844
845 def test_len(self):
846 self.assertEqual(len('123'), 3)
847 self.assertEqual(len(()), 0)
848 self.assertEqual(len((1, 2, 3, 4)), 4)
849 self.assertEqual(len([1, 2, 3, 4]), 4)
850 self.assertEqual(len({}), 0)
851 self.assertEqual(len({'a':1, 'b': 2}), 2)
852 class BadSeq:
853 def __len__(self):
854 raise ValueError
855 self.assertRaises(ValueError, len, BadSeq())
856
857 def test_list(self):
858 self.assertEqual(list([]), [])
859 l0_3 = [0, 1, 2, 3]
860 l0_3_bis = list(l0_3)
861 self.assertEqual(l0_3, l0_3_bis)
862 self.assert_(l0_3 is not l0_3_bis)
863 self.assertEqual(list(()), [])
864 self.assertEqual(list((0, 1, 2, 3)), [0, 1, 2, 3])
865 self.assertEqual(list(''), [])
866 self.assertEqual(list('spam'), ['s', 'p', 'a', 'm'])
867
868 if sys.maxint == 0x7fffffff:
869 # This test can currently only work on 32-bit machines.
870 # XXX If/when PySequence_Length() returns a ssize_t, it should be
871 # XXX re-enabled.
872 # Verify clearing of bug #556025.
873 # This assumes that the max data size (sys.maxint) == max
874 # address size this also assumes that the address size is at
875 # least 4 bytes with 8 byte addresses, the bug is not well
876 # tested
877 #
878 # Note: This test is expected to SEGV under Cygwin 1.3.12 or
879 # earlier due to a newlib bug. See the following mailing list
880 # thread for the details:
881
882 # http://sources.redhat.com/ml/newlib/2002/msg00369.html
Guido van Rossum805365e2007-05-07 22:24:25 +0000883 self.assertRaises(MemoryError, list, range(sys.maxint // 2))
Walter Dörwald919497e2003-01-19 16:23:59 +0000884
Raymond Hettingeraa241e02004-09-26 19:24:20 +0000885 # This code used to segfault in Py2.4a3
886 x = []
887 x.extend(-y for y in x)
888 self.assertEqual(x, [])
889
Walter Dörwald919497e2003-01-19 16:23:59 +0000890 def test_long(self):
Guido van Rossume2a383d2007-01-15 16:59:06 +0000891 self.assertEqual(int(314), 314)
892 self.assertEqual(int(3.14), 3)
893 self.assertEqual(int(314), 314)
Walter Dörwald919497e2003-01-19 16:23:59 +0000894 # Check that conversion from float truncates towards zero
Guido van Rossume2a383d2007-01-15 16:59:06 +0000895 self.assertEqual(int(-3.14), -3)
896 self.assertEqual(int(3.9), 3)
897 self.assertEqual(int(-3.9), -3)
898 self.assertEqual(int(3.5), 3)
899 self.assertEqual(int(-3.5), -3)
900 self.assertEqual(int("-3"), -3)
Walter Dörwald919497e2003-01-19 16:23:59 +0000901 # Different base:
Guido van Rossume2a383d2007-01-15 16:59:06 +0000902 self.assertEqual(int("10",16), 16)
Walter Dörwald919497e2003-01-19 16:23:59 +0000903 # Check conversions from string (same test set as for int(), and then some)
904 LL = [
Guido van Rossume2a383d2007-01-15 16:59:06 +0000905 ('1' + '0'*20, 10**20),
906 ('1' + '0'*100, 10**100)
Walter Dörwald919497e2003-01-19 16:23:59 +0000907 ]
Walter Dörwald1f5947b2007-05-22 16:52:54 +0000908 for s, v in LL:
Walter Dörwald919497e2003-01-19 16:23:59 +0000909 for sign in "", "+", "-":
910 for prefix in "", " ", "\t", " \t\t ":
911 ss = prefix + sign + s
912 vv = v
913 if sign == "-" and v is not ValueError:
914 vv = -v
915 try:
Guido van Rossume2a383d2007-01-15 16:59:06 +0000916 self.assertEqual(int(ss), int(vv))
Walter Dörwald919497e2003-01-19 16:23:59 +0000917 except v:
918 pass
919
Guido van Rossume2a383d2007-01-15 16:59:06 +0000920 self.assertRaises(ValueError, int, '123\0')
921 self.assertRaises(ValueError, int, '53', 40)
922 self.assertRaises(TypeError, int, 1, 12)
Walter Dörwald919497e2003-01-19 16:23:59 +0000923
Guido van Rossumd8faa362007-04-27 19:54:29 +0000924 # SF patch #1638879: embedded NULs were not detected with
925 # explicit base
926 self.assertRaises(ValueError, int, '123\0', 10)
927 self.assertRaises(ValueError, int, '123\x00 245', 20)
928
Guido van Rossume2a383d2007-01-15 16:59:06 +0000929 self.assertEqual(int('100000000000000000000000000000000', 2),
Thomas Wouters477c8d52006-05-27 19:21:47 +0000930 4294967296)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000931 self.assertEqual(int('102002022201221111211', 3), 4294967296)
932 self.assertEqual(int('10000000000000000', 4), 4294967296)
933 self.assertEqual(int('32244002423141', 5), 4294967296)
934 self.assertEqual(int('1550104015504', 6), 4294967296)
935 self.assertEqual(int('211301422354', 7), 4294967296)
936 self.assertEqual(int('40000000000', 8), 4294967296)
937 self.assertEqual(int('12068657454', 9), 4294967296)
938 self.assertEqual(int('4294967296', 10), 4294967296)
939 self.assertEqual(int('1904440554', 11), 4294967296)
940 self.assertEqual(int('9ba461594', 12), 4294967296)
941 self.assertEqual(int('535a79889', 13), 4294967296)
942 self.assertEqual(int('2ca5b7464', 14), 4294967296)
943 self.assertEqual(int('1a20dcd81', 15), 4294967296)
944 self.assertEqual(int('100000000', 16), 4294967296)
945 self.assertEqual(int('a7ffda91', 17), 4294967296)
946 self.assertEqual(int('704he7g4', 18), 4294967296)
947 self.assertEqual(int('4f5aff66', 19), 4294967296)
948 self.assertEqual(int('3723ai4g', 20), 4294967296)
949 self.assertEqual(int('281d55i4', 21), 4294967296)
950 self.assertEqual(int('1fj8b184', 22), 4294967296)
951 self.assertEqual(int('1606k7ic', 23), 4294967296)
952 self.assertEqual(int('mb994ag', 24), 4294967296)
953 self.assertEqual(int('hek2mgl', 25), 4294967296)
954 self.assertEqual(int('dnchbnm', 26), 4294967296)
955 self.assertEqual(int('b28jpdm', 27), 4294967296)
956 self.assertEqual(int('8pfgih4', 28), 4294967296)
957 self.assertEqual(int('76beigg', 29), 4294967296)
958 self.assertEqual(int('5qmcpqg', 30), 4294967296)
959 self.assertEqual(int('4q0jto4', 31), 4294967296)
960 self.assertEqual(int('4000000', 32), 4294967296)
961 self.assertEqual(int('3aokq94', 33), 4294967296)
962 self.assertEqual(int('2qhxjli', 34), 4294967296)
963 self.assertEqual(int('2br45qb', 35), 4294967296)
964 self.assertEqual(int('1z141z4', 36), 4294967296)
Thomas Wouters477c8d52006-05-27 19:21:47 +0000965
Guido van Rossume2a383d2007-01-15 16:59:06 +0000966 self.assertEqual(int('100000000000000000000000000000001', 2),
Thomas Wouters477c8d52006-05-27 19:21:47 +0000967 4294967297)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000968 self.assertEqual(int('102002022201221111212', 3), 4294967297)
969 self.assertEqual(int('10000000000000001', 4), 4294967297)
970 self.assertEqual(int('32244002423142', 5), 4294967297)
971 self.assertEqual(int('1550104015505', 6), 4294967297)
972 self.assertEqual(int('211301422355', 7), 4294967297)
973 self.assertEqual(int('40000000001', 8), 4294967297)
974 self.assertEqual(int('12068657455', 9), 4294967297)
975 self.assertEqual(int('4294967297', 10), 4294967297)
976 self.assertEqual(int('1904440555', 11), 4294967297)
977 self.assertEqual(int('9ba461595', 12), 4294967297)
978 self.assertEqual(int('535a7988a', 13), 4294967297)
979 self.assertEqual(int('2ca5b7465', 14), 4294967297)
980 self.assertEqual(int('1a20dcd82', 15), 4294967297)
981 self.assertEqual(int('100000001', 16), 4294967297)
982 self.assertEqual(int('a7ffda92', 17), 4294967297)
983 self.assertEqual(int('704he7g5', 18), 4294967297)
984 self.assertEqual(int('4f5aff67', 19), 4294967297)
985 self.assertEqual(int('3723ai4h', 20), 4294967297)
986 self.assertEqual(int('281d55i5', 21), 4294967297)
987 self.assertEqual(int('1fj8b185', 22), 4294967297)
988 self.assertEqual(int('1606k7id', 23), 4294967297)
989 self.assertEqual(int('mb994ah', 24), 4294967297)
990 self.assertEqual(int('hek2mgm', 25), 4294967297)
991 self.assertEqual(int('dnchbnn', 26), 4294967297)
992 self.assertEqual(int('b28jpdn', 27), 4294967297)
993 self.assertEqual(int('8pfgih5', 28), 4294967297)
994 self.assertEqual(int('76beigh', 29), 4294967297)
995 self.assertEqual(int('5qmcpqh', 30), 4294967297)
996 self.assertEqual(int('4q0jto5', 31), 4294967297)
997 self.assertEqual(int('4000001', 32), 4294967297)
998 self.assertEqual(int('3aokq95', 33), 4294967297)
999 self.assertEqual(int('2qhxjlj', 34), 4294967297)
1000 self.assertEqual(int('2br45qc', 35), 4294967297)
1001 self.assertEqual(int('1z141z5', 36), 4294967297)
Thomas Wouters477c8d52006-05-27 19:21:47 +00001002
1003
Brett Cannonc3647ac2005-04-26 03:45:26 +00001004 def test_longconversion(self):
1005 # Test __long__()
1006 class Foo0:
1007 def __long__(self):
Guido van Rossume2a383d2007-01-15 16:59:06 +00001008 return 42
Brett Cannonc3647ac2005-04-26 03:45:26 +00001009
1010 class Foo1(object):
1011 def __long__(self):
Guido van Rossume2a383d2007-01-15 16:59:06 +00001012 return 42
Brett Cannonc3647ac2005-04-26 03:45:26 +00001013
Guido van Rossume2a383d2007-01-15 16:59:06 +00001014 class Foo2(int):
Brett Cannonc3647ac2005-04-26 03:45:26 +00001015 def __long__(self):
1016 return 42
1017
Guido van Rossume2a383d2007-01-15 16:59:06 +00001018 class Foo3(int):
1019 def __long__(self):
1020 return self
1021
1022 class Foo4(int):
1023 def __long__(self):
1024 return 42
1025
1026 class Foo5(int):
Brett Cannonc3647ac2005-04-26 03:45:26 +00001027 def __long__(self):
1028 return 42.
1029
Guido van Rossume2a383d2007-01-15 16:59:06 +00001030 self.assertEqual(int(Foo0()), 42)
1031 self.assertEqual(int(Foo1()), 42)
Guido van Rossumd8faa362007-04-27 19:54:29 +00001032 # XXX invokes __int__ now
Guido van Rossumddefaf32007-01-14 03:31:43 +00001033 # self.assertEqual(long(Foo2()), 42L)
Guido van Rossume2a383d2007-01-15 16:59:06 +00001034 self.assertEqual(int(Foo3()), 0)
Guido van Rossumd8faa362007-04-27 19:54:29 +00001035 # XXX likewise
Guido van Rossumddefaf32007-01-14 03:31:43 +00001036 # self.assertEqual(long(Foo4()), 42)
1037 # self.assertRaises(TypeError, long, Foo5())
Brett Cannonc3647ac2005-04-26 03:45:26 +00001038
Walter Dörwald919497e2003-01-19 16:23:59 +00001039 def test_map(self):
1040 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001041 list(map(None, 'hello')),
1042 [('h',), ('e',), ('l',), ('l',), ('o',)]
Walter Dörwald919497e2003-01-19 16:23:59 +00001043 )
1044 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001045 list(map(None, 'abcd', 'efg')),
1046 [('a', 'e'), ('b', 'f'), ('c', 'g')]
Walter Dörwald919497e2003-01-19 16:23:59 +00001047 )
1048 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001049 list(map(None, range(3))),
1050 [(0,), (1,), (2,)]
Walter Dörwald919497e2003-01-19 16:23:59 +00001051 )
1052 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001053 list(map(lambda x: x*x, range(1,4))),
Walter Dörwald919497e2003-01-19 16:23:59 +00001054 [1, 4, 9]
1055 )
1056 try:
1057 from math import sqrt
1058 except ImportError:
1059 def sqrt(x):
1060 return pow(x, 0.5)
1061 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001062 list(map(lambda x: list(map(sqrt, x)), [[16, 4], [81, 9]])),
Walter Dörwald919497e2003-01-19 16:23:59 +00001063 [[4.0, 2.0], [9.0, 3.0]]
1064 )
1065 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001066 list(map(lambda x, y: x+y, [1,3,2], [9,1,4])),
Walter Dörwald919497e2003-01-19 16:23:59 +00001067 [10, 4, 6]
1068 )
1069
1070 def plus(*v):
1071 accu = 0
1072 for i in v: accu = accu + i
1073 return accu
1074 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001075 list(map(plus, [1, 3, 7])),
Walter Dörwald919497e2003-01-19 16:23:59 +00001076 [1, 3, 7]
1077 )
1078 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001079 list(map(plus, [1, 3, 7], [4, 9, 2])),
Walter Dörwald919497e2003-01-19 16:23:59 +00001080 [1+4, 3+9, 7+2]
1081 )
1082 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001083 list(map(plus, [1, 3, 7], [4, 9, 2], [1, 1, 0])),
Walter Dörwald919497e2003-01-19 16:23:59 +00001084 [1+4+1, 3+9+1, 7+2+0]
1085 )
1086 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001087 list(map(None, Squares(10))),
1088 [(0,), (1,), (4,), (9,), (16,), (25,), (36,), (49,), (64,), (81,)]
1089 )
1090 self.assertEqual(
1091 list(map(int, Squares(10))),
Walter Dörwald919497e2003-01-19 16:23:59 +00001092 [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
1093 )
1094 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001095 list(map(None, Squares(3), Squares(2))),
1096 [(0,0), (1,1)]
Walter Dörwald919497e2003-01-19 16:23:59 +00001097 )
Guido van Rossum47b9ff62006-08-24 00:41:19 +00001098 def Max(a, b):
1099 if a is None:
1100 return b
1101 if b is None:
1102 return a
1103 return max(a, b)
Walter Dörwald919497e2003-01-19 16:23:59 +00001104 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001105 list(map(Max, Squares(3), Squares(2))),
1106 [0, 1]
Walter Dörwald919497e2003-01-19 16:23:59 +00001107 )
1108 self.assertRaises(TypeError, map)
1109 self.assertRaises(TypeError, map, lambda x: x, 42)
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001110 self.assertEqual(list(map(None, [42])), [(42,)])
Walter Dörwald919497e2003-01-19 16:23:59 +00001111 class BadSeq:
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001112 def __iter__(self):
Walter Dörwald919497e2003-01-19 16:23:59 +00001113 raise ValueError
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001114 yield None
1115 self.assertRaises(ValueError, list, map(lambda x: x, BadSeq()))
Neal Norwitzfcf44352005-11-27 20:37:43 +00001116 def badfunc(x):
1117 raise RuntimeError
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001118 self.assertRaises(RuntimeError, list, map(badfunc, range(5)))
Walter Dörwald919497e2003-01-19 16:23:59 +00001119
1120 def test_max(self):
1121 self.assertEqual(max('123123'), '3')
1122 self.assertEqual(max(1, 2, 3), 3)
1123 self.assertEqual(max((1, 2, 3, 1, 2, 3)), 3)
1124 self.assertEqual(max([1, 2, 3, 1, 2, 3]), 3)
1125
Guido van Rossume2a383d2007-01-15 16:59:06 +00001126 self.assertEqual(max(1, 2, 3.0), 3.0)
1127 self.assertEqual(max(1, 2.0, 3), 3)
1128 self.assertEqual(max(1.0, 2, 3), 3)
Walter Dörwald919497e2003-01-19 16:23:59 +00001129
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001130 for stmt in (
1131 "max(key=int)", # no args
1132 "max(1, key=int)", # single arg not iterable
1133 "max(1, 2, keystone=int)", # wrong keyword
1134 "max(1, 2, key=int, abc=int)", # two many keywords
1135 "max(1, 2, key=1)", # keyfunc is not callable
1136 ):
Tim Peters7f061872004-12-07 21:17:46 +00001137 try:
Georg Brandl7cae87c2006-09-06 06:51:57 +00001138 exec(stmt, globals())
Tim Peters7f061872004-12-07 21:17:46 +00001139 except TypeError:
1140 pass
1141 else:
1142 self.fail(stmt)
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001143
1144 self.assertEqual(max((1,), key=neg), 1) # one elem iterable
1145 self.assertEqual(max((1,2), key=neg), 1) # two elem iterable
1146 self.assertEqual(max(1, 2, key=neg), 1) # two elems
1147
1148 data = [random.randrange(200) for i in range(100)]
1149 keys = dict((elem, random.randrange(50)) for elem in data)
1150 f = keys.__getitem__
1151 self.assertEqual(max(data, key=f),
1152 sorted(reversed(data), key=f)[-1])
1153
Walter Dörwald919497e2003-01-19 16:23:59 +00001154 def test_min(self):
1155 self.assertEqual(min('123123'), '1')
1156 self.assertEqual(min(1, 2, 3), 1)
1157 self.assertEqual(min((1, 2, 3, 1, 2, 3)), 1)
1158 self.assertEqual(min([1, 2, 3, 1, 2, 3]), 1)
1159
Guido van Rossume2a383d2007-01-15 16:59:06 +00001160 self.assertEqual(min(1, 2, 3.0), 1)
1161 self.assertEqual(min(1, 2.0, 3), 1)
1162 self.assertEqual(min(1.0, 2, 3), 1.0)
Walter Dörwald919497e2003-01-19 16:23:59 +00001163
1164 self.assertRaises(TypeError, min)
1165 self.assertRaises(TypeError, min, 42)
1166 self.assertRaises(ValueError, min, ())
1167 class BadSeq:
1168 def __getitem__(self, index):
1169 raise ValueError
1170 self.assertRaises(ValueError, min, BadSeq())
1171 class BadNumber:
1172 def __cmp__(self, other):
1173 raise ValueError
Guido van Rossum47b9ff62006-08-24 00:41:19 +00001174 self.assertRaises(TypeError, min, (42, BadNumber()))
Walter Dörwald919497e2003-01-19 16:23:59 +00001175
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001176 for stmt in (
1177 "min(key=int)", # no args
1178 "min(1, key=int)", # single arg not iterable
1179 "min(1, 2, keystone=int)", # wrong keyword
1180 "min(1, 2, key=int, abc=int)", # two many keywords
1181 "min(1, 2, key=1)", # keyfunc is not callable
1182 ):
Tim Peters7f061872004-12-07 21:17:46 +00001183 try:
Georg Brandl7cae87c2006-09-06 06:51:57 +00001184 exec(stmt, globals())
Tim Peters7f061872004-12-07 21:17:46 +00001185 except TypeError:
1186 pass
1187 else:
1188 self.fail(stmt)
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001189
1190 self.assertEqual(min((1,), key=neg), 1) # one elem iterable
1191 self.assertEqual(min((1,2), key=neg), 2) # two elem iterable
1192 self.assertEqual(min(1, 2, key=neg), 2) # two elems
1193
1194 data = [random.randrange(200) for i in range(100)]
1195 keys = dict((elem, random.randrange(50)) for elem in data)
1196 f = keys.__getitem__
1197 self.assertEqual(min(data, key=f),
1198 sorted(data, key=f)[0])
1199
Georg Brandla18af4e2007-04-21 15:47:16 +00001200 def test_next(self):
1201 it = iter(range(2))
1202 self.assertEqual(next(it), 0)
1203 self.assertEqual(next(it), 1)
1204 self.assertRaises(StopIteration, next, it)
1205 self.assertRaises(StopIteration, next, it)
1206 self.assertEquals(next(it, 42), 42)
1207
1208 class Iter(object):
1209 def __iter__(self):
1210 return self
1211 def __next__(self):
1212 raise StopIteration
1213
1214 it = iter(Iter())
1215 self.assertEquals(next(it, 42), 42)
1216 self.assertRaises(StopIteration, next, it)
1217
1218 def gen():
1219 yield 1
1220 return
1221
1222 it = gen()
1223 self.assertEquals(next(it), 1)
1224 self.assertRaises(StopIteration, next, it)
1225 self.assertEquals(next(it, 42), 42)
1226
Walter Dörwald919497e2003-01-19 16:23:59 +00001227 def test_oct(self):
Guido van Rossumcd16bf62007-06-13 18:07:49 +00001228 self.assertEqual(oct(100), '0o144')
1229 self.assertEqual(oct(100), '0o144')
1230 self.assertEqual(oct(-100), '-0o144')
1231 self.assertEqual(oct(-100), '-0o144')
Walter Dörwald919497e2003-01-19 16:23:59 +00001232 self.assertRaises(TypeError, oct, ())
1233
1234 def write_testfile(self):
Guido van Rossuma88a0332007-02-26 16:59:55 +00001235 # NB the first 4 lines are also used to test input, below
Walter Dörwald919497e2003-01-19 16:23:59 +00001236 fp = open(TESTFN, 'w')
1237 try:
1238 fp.write('1+1\n')
1239 fp.write('1+1\n')
1240 fp.write('The quick brown fox jumps over the lazy dog')
1241 fp.write('.\n')
1242 fp.write('Dear John\n')
1243 fp.write('XXX'*100)
1244 fp.write('YYY'*100)
1245 finally:
1246 fp.close()
1247
1248 def test_open(self):
1249 self.write_testfile()
1250 fp = open(TESTFN, 'r')
1251 try:
1252 self.assertEqual(fp.readline(4), '1+1\n')
1253 self.assertEqual(fp.readline(4), '1+1\n')
1254 self.assertEqual(fp.readline(), 'The quick brown fox jumps over the lazy dog.\n')
1255 self.assertEqual(fp.readline(4), 'Dear')
1256 self.assertEqual(fp.readline(100), ' John\n')
1257 self.assertEqual(fp.read(300), 'XXX'*100)
1258 self.assertEqual(fp.read(1000), 'YYY'*100)
1259 finally:
1260 fp.close()
1261 unlink(TESTFN)
1262
1263 def test_ord(self):
1264 self.assertEqual(ord(' '), 32)
1265 self.assertEqual(ord('A'), 65)
1266 self.assertEqual(ord('a'), 97)
Guido van Rossumf9e91c92007-05-08 21:05:48 +00001267 self.assertEqual(ord('\x80'), 128)
1268 self.assertEqual(ord('\xff'), 255)
1269
1270 self.assertEqual(ord(b' '), 32)
1271 self.assertEqual(ord(b'A'), 65)
1272 self.assertEqual(ord(b'a'), 97)
1273 self.assertEqual(ord(b'\x80'), 128)
1274 self.assertEqual(ord(b'\xff'), 255)
1275
Walter Dörwald1f5947b2007-05-22 16:52:54 +00001276 self.assertEqual(ord(chr(sys.maxunicode)), sys.maxunicode)
Walter Dörwald919497e2003-01-19 16:23:59 +00001277 self.assertRaises(TypeError, ord, 42)
Walter Dörwald919497e2003-01-19 16:23:59 +00001278
Guido van Rossum8ac004e2007-07-15 13:00:05 +00001279 self.assertEqual(ord(chr(0x10FFFF)), 0x10FFFF)
1280 self.assertEqual(ord("\U0000FFFF"), 0x0000FFFF)
1281 self.assertEqual(ord("\U00010000"), 0x00010000)
1282 self.assertEqual(ord("\U00010001"), 0x00010001)
1283 self.assertEqual(ord("\U000FFFFE"), 0x000FFFFE)
1284 self.assertEqual(ord("\U000FFFFF"), 0x000FFFFF)
1285 self.assertEqual(ord("\U00100000"), 0x00100000)
1286 self.assertEqual(ord("\U00100001"), 0x00100001)
1287 self.assertEqual(ord("\U0010FFFE"), 0x0010FFFE)
1288 self.assertEqual(ord("\U0010FFFF"), 0x0010FFFF)
1289
Walter Dörwald919497e2003-01-19 16:23:59 +00001290 def test_pow(self):
1291 self.assertEqual(pow(0,0), 1)
1292 self.assertEqual(pow(0,1), 0)
1293 self.assertEqual(pow(1,0), 1)
1294 self.assertEqual(pow(1,1), 1)
1295
1296 self.assertEqual(pow(2,0), 1)
1297 self.assertEqual(pow(2,10), 1024)
1298 self.assertEqual(pow(2,20), 1024*1024)
1299 self.assertEqual(pow(2,30), 1024*1024*1024)
1300
1301 self.assertEqual(pow(-2,0), 1)
1302 self.assertEqual(pow(-2,1), -2)
1303 self.assertEqual(pow(-2,2), 4)
1304 self.assertEqual(pow(-2,3), -8)
1305
Guido van Rossume2a383d2007-01-15 16:59:06 +00001306 self.assertEqual(pow(0,0), 1)
1307 self.assertEqual(pow(0,1), 0)
1308 self.assertEqual(pow(1,0), 1)
1309 self.assertEqual(pow(1,1), 1)
Walter Dörwald919497e2003-01-19 16:23:59 +00001310
Guido van Rossume2a383d2007-01-15 16:59:06 +00001311 self.assertEqual(pow(2,0), 1)
1312 self.assertEqual(pow(2,10), 1024)
1313 self.assertEqual(pow(2,20), 1024*1024)
1314 self.assertEqual(pow(2,30), 1024*1024*1024)
Walter Dörwald919497e2003-01-19 16:23:59 +00001315
Guido van Rossume2a383d2007-01-15 16:59:06 +00001316 self.assertEqual(pow(-2,0), 1)
1317 self.assertEqual(pow(-2,1), -2)
1318 self.assertEqual(pow(-2,2), 4)
1319 self.assertEqual(pow(-2,3), -8)
Walter Dörwald919497e2003-01-19 16:23:59 +00001320
1321 self.assertAlmostEqual(pow(0.,0), 1.)
1322 self.assertAlmostEqual(pow(0.,1), 0.)
1323 self.assertAlmostEqual(pow(1.,0), 1.)
1324 self.assertAlmostEqual(pow(1.,1), 1.)
1325
1326 self.assertAlmostEqual(pow(2.,0), 1.)
1327 self.assertAlmostEqual(pow(2.,10), 1024.)
1328 self.assertAlmostEqual(pow(2.,20), 1024.*1024.)
1329 self.assertAlmostEqual(pow(2.,30), 1024.*1024.*1024.)
1330
1331 self.assertAlmostEqual(pow(-2.,0), 1.)
1332 self.assertAlmostEqual(pow(-2.,1), -2.)
1333 self.assertAlmostEqual(pow(-2.,2), 4.)
1334 self.assertAlmostEqual(pow(-2.,3), -8.)
1335
Guido van Rossume2a383d2007-01-15 16:59:06 +00001336 for x in 2, 2, 2.0:
1337 for y in 10, 10, 10.0:
1338 for z in 1000, 1000, 1000.0:
Walter Dörwald919497e2003-01-19 16:23:59 +00001339 if isinstance(x, float) or \
1340 isinstance(y, float) or \
1341 isinstance(z, float):
1342 self.assertRaises(TypeError, pow, x, y, z)
1343 else:
1344 self.assertAlmostEqual(pow(x, y, z), 24.0)
1345
1346 self.assertRaises(TypeError, pow, -1, -2, 3)
1347 self.assertRaises(ValueError, pow, 1, 2, 0)
Guido van Rossume2a383d2007-01-15 16:59:06 +00001348 self.assertRaises(TypeError, pow, -1, -2, 3)
1349 self.assertRaises(ValueError, pow, 1, 2, 0)
Walter Dörwald919497e2003-01-19 16:23:59 +00001350 self.assertRaises(ValueError, pow, -342.43, 0.234)
1351
1352 self.assertRaises(TypeError, pow)
1353
1354 def test_range(self):
Guido van Rossum805365e2007-05-07 22:24:25 +00001355 self.assertEqual(list(range(3)), [0, 1, 2])
1356 self.assertEqual(list(range(1, 5)), [1, 2, 3, 4])
1357 self.assertEqual(list(range(0)), [])
1358 self.assertEqual(list(range(-3)), [])
1359 self.assertEqual(list(range(1, 10, 3)), [1, 4, 7])
1360 #self.assertEqual(list(range(5, -5, -3)), [5, 2, -1, -4])
Walter Dörwald919497e2003-01-19 16:23:59 +00001361
Guido van Rossum805365e2007-05-07 22:24:25 +00001362 """ XXX(nnorwitz):
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001363 # Now test range() with longs
Guido van Rossum805365e2007-05-07 22:24:25 +00001364 self.assertEqual(list(range(-2**100)), [])
1365 self.assertEqual(list(range(0, -2**100)), [])
1366 self.assertEqual(list(range(0, 2**100, -1)), [])
1367 self.assertEqual(list(range(0, 2**100, -1)), [])
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001368
Guido van Rossume2a383d2007-01-15 16:59:06 +00001369 a = int(10 * sys.maxint)
1370 b = int(100 * sys.maxint)
1371 c = int(50 * sys.maxint)
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001372
Guido van Rossum805365e2007-05-07 22:24:25 +00001373 self.assertEqual(list(range(a, a+2)), [a, a+1])
1374 self.assertEqual(list(range(a+2, a, -1)), [a+2, a+1])
1375 self.assertEqual(list(range(a+4, a, -2)), [a+4, a+2])
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001376
Guido van Rossum805365e2007-05-07 22:24:25 +00001377 seq = list(range(a, b, c))
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001378 self.assert_(a in seq)
1379 self.assert_(b not in seq)
1380 self.assertEqual(len(seq), 2)
1381
Guido van Rossum805365e2007-05-07 22:24:25 +00001382 seq = list(range(b, a, -c))
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001383 self.assert_(b in seq)
1384 self.assert_(a not in seq)
1385 self.assertEqual(len(seq), 2)
1386
Guido van Rossum805365e2007-05-07 22:24:25 +00001387 seq = list(range(-a, -b, -c))
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001388 self.assert_(-a in seq)
1389 self.assert_(-b not in seq)
1390 self.assertEqual(len(seq), 2)
1391
Walter Dörwald919497e2003-01-19 16:23:59 +00001392 self.assertRaises(TypeError, range)
1393 self.assertRaises(TypeError, range, 1, 2, 3, 4)
1394 self.assertRaises(ValueError, range, 1, 2, 0)
Guido van Rossume2a383d2007-01-15 16:59:06 +00001395 self.assertRaises(ValueError, range, a, a + 1, int(0))
Neal Norwitzfcf44352005-11-27 20:37:43 +00001396
1397 class badzero(int):
Guido van Rossum47b9ff62006-08-24 00:41:19 +00001398 def __eq__(self, other):
Neal Norwitzfcf44352005-11-27 20:37:43 +00001399 raise RuntimeError
Guido van Rossum47b9ff62006-08-24 00:41:19 +00001400 __ne__ = __lt__ = __gt__ = __le__ = __ge__ = __eq__
1401
1402 # XXX This won't (but should!) raise RuntimeError if a is an int...
Neal Norwitzfcf44352005-11-27 20:37:43 +00001403 self.assertRaises(RuntimeError, range, a, a + 1, badzero(1))
Guido van Rossum805365e2007-05-07 22:24:25 +00001404 """
Walter Dörwald919497e2003-01-19 16:23:59 +00001405
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001406 # Reject floats when it would require PyLongs to represent.
1407 # (smaller floats still accepted, but deprecated)
Tim Peters299b3df2003-04-15 14:40:03 +00001408 self.assertRaises(TypeError, range, 1e100, 1e101, 1e101)
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001409
Walter Dörwald357981e2003-04-15 18:59:28 +00001410 self.assertRaises(TypeError, range, 0, "spam")
1411 self.assertRaises(TypeError, range, 0, 42, "spam")
1412
Guido van Rossum805365e2007-05-07 22:24:25 +00001413 #NEAL self.assertRaises(OverflowError, range, -sys.maxint, sys.maxint)
1414 #NEAL self.assertRaises(OverflowError, range, 0, 2*sys.maxint)
1415
1416 self.assertRaises(OverflowError, len, range(0, sys.maxint**10))
Walter Dörwald357981e2003-04-15 18:59:28 +00001417
Guido van Rossuma88a0332007-02-26 16:59:55 +00001418 def test_input(self):
1419 self.write_testfile()
1420 fp = open(TESTFN, 'r')
1421 savestdin = sys.stdin
1422 savestdout = sys.stdout # Eats the echo
1423 try:
1424 sys.stdin = fp
1425 sys.stdout = BitBucket()
1426 self.assertEqual(input(), "1+1")
1427 self.assertEqual(input('testing\n'), "1+1")
1428 self.assertEqual(input(), 'The quick brown fox jumps over the lazy dog.')
1429 self.assertEqual(input('testing\n'), 'Dear John')
1430
1431 # SF 1535165: don't segfault on closed stdin
1432 # sys.stdout must be a regular file for triggering
1433 sys.stdout = savestdout
1434 sys.stdin.close()
1435 self.assertRaises(ValueError, input)
1436
1437 sys.stdout = BitBucket()
Guido van Rossum34d19282007-08-09 01:03:29 +00001438 sys.stdin = io.StringIO("NULL\0")
Guido van Rossuma88a0332007-02-26 16:59:55 +00001439 self.assertRaises(TypeError, input, 42, 42)
Guido van Rossum34d19282007-08-09 01:03:29 +00001440 sys.stdin = io.StringIO(" 'whitespace'")
Guido van Rossuma88a0332007-02-26 16:59:55 +00001441 self.assertEqual(input(), " 'whitespace'")
Guido van Rossum34d19282007-08-09 01:03:29 +00001442 sys.stdin = io.StringIO()
Guido van Rossuma88a0332007-02-26 16:59:55 +00001443 self.assertRaises(EOFError, input)
1444
1445 del sys.stdout
1446 self.assertRaises(RuntimeError, input, 'prompt')
1447 del sys.stdin
1448 self.assertRaises(RuntimeError, input, 'prompt')
1449 finally:
1450 sys.stdin = savestdin
1451 sys.stdout = savestdout
1452 fp.close()
1453 unlink(TESTFN)
1454
Walter Dörwald919497e2003-01-19 16:23:59 +00001455 def test_repr(self):
1456 self.assertEqual(repr(''), '\'\'')
1457 self.assertEqual(repr(0), '0')
Guido van Rossume2a383d2007-01-15 16:59:06 +00001458 self.assertEqual(repr(0), '0')
Walter Dörwald919497e2003-01-19 16:23:59 +00001459 self.assertEqual(repr(()), '()')
1460 self.assertEqual(repr([]), '[]')
1461 self.assertEqual(repr({}), '{}')
1462 a = []
1463 a.append(a)
1464 self.assertEqual(repr(a), '[[...]]')
1465 a = {}
1466 a[0] = a
1467 self.assertEqual(repr(a), '{0: {...}}')
1468
1469 def test_round(self):
1470 self.assertEqual(round(0.0), 0.0)
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001471 self.assertEqual(type(round(0.0)), int)
Walter Dörwald919497e2003-01-19 16:23:59 +00001472 self.assertEqual(round(1.0), 1.0)
1473 self.assertEqual(round(10.0), 10.0)
1474 self.assertEqual(round(1000000000.0), 1000000000.0)
1475 self.assertEqual(round(1e20), 1e20)
1476
1477 self.assertEqual(round(-1.0), -1.0)
1478 self.assertEqual(round(-10.0), -10.0)
1479 self.assertEqual(round(-1000000000.0), -1000000000.0)
1480 self.assertEqual(round(-1e20), -1e20)
1481
1482 self.assertEqual(round(0.1), 0.0)
1483 self.assertEqual(round(1.1), 1.0)
1484 self.assertEqual(round(10.1), 10.0)
1485 self.assertEqual(round(1000000000.1), 1000000000.0)
1486
1487 self.assertEqual(round(-1.1), -1.0)
1488 self.assertEqual(round(-10.1), -10.0)
1489 self.assertEqual(round(-1000000000.1), -1000000000.0)
1490
1491 self.assertEqual(round(0.9), 1.0)
1492 self.assertEqual(round(9.9), 10.0)
1493 self.assertEqual(round(999999999.9), 1000000000.0)
1494
1495 self.assertEqual(round(-0.9), -1.0)
1496 self.assertEqual(round(-9.9), -10.0)
1497 self.assertEqual(round(-999999999.9), -1000000000.0)
1498
1499 self.assertEqual(round(-8.0, -1), -10.0)
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001500 self.assertEqual(type(round(-8.0, -1)), float)
1501
1502 self.assertEqual(type(round(-8.0, 0)), float)
1503 self.assertEqual(type(round(-8.0, 1)), float)
1504
1505 # Check even / odd rounding behaviour
1506 self.assertEqual(round(5.5), 6)
1507 self.assertEqual(round(6.5), 6)
1508 self.assertEqual(round(-5.5), -6)
1509 self.assertEqual(round(-6.5), -6)
1510
1511 # Check behavior on ints
1512 self.assertEqual(round(0), 0)
1513 self.assertEqual(round(8), 8)
1514 self.assertEqual(round(-8), -8)
1515 self.assertEqual(type(round(0)), int)
1516 self.assertEqual(type(round(-8, -1)), float)
1517 self.assertEqual(type(round(-8, 0)), float)
1518 self.assertEqual(type(round(-8, 1)), float)
Walter Dörwald919497e2003-01-19 16:23:59 +00001519
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001520 # test new kwargs
1521 self.assertEqual(round(number=-8.0, ndigits=-1), -10.0)
1522
Walter Dörwald919497e2003-01-19 16:23:59 +00001523 self.assertRaises(TypeError, round)
1524
Alex Martelliae211f92007-08-22 23:21:33 +00001525 # test generic rounding delegation for reals
1526 class TestRound:
1527 def __round__(self):
1528 return 23
1529
1530 class TestNoRound:
1531 pass
1532
1533 self.assertEqual(round(TestRound()), 23)
1534
1535 self.assertRaises(TypeError, round, 1, 2, 3)
1536 self.assertRaises(TypeError, round, TestNoRound())
1537
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001538 t = TestNoRound()
1539 t.__round__ = lambda *args: args
1540 self.assertRaises(TypeError, round, t)
1541 self.assertRaises(TypeError, round, t, 0)
1542
Walter Dörwald919497e2003-01-19 16:23:59 +00001543 def test_setattr(self):
Tim Petersf2715e02003-02-19 02:35:07 +00001544 setattr(sys, 'spam', 1)
1545 self.assertEqual(sys.spam, 1)
1546 self.assertRaises(TypeError, setattr, sys, 1, 'spam')
1547 self.assertRaises(TypeError, setattr)
Walter Dörwald919497e2003-01-19 16:23:59 +00001548
1549 def test_str(self):
1550 self.assertEqual(str(''), '')
1551 self.assertEqual(str(0), '0')
Guido van Rossume2a383d2007-01-15 16:59:06 +00001552 self.assertEqual(str(0), '0')
Walter Dörwald919497e2003-01-19 16:23:59 +00001553 self.assertEqual(str(()), '()')
1554 self.assertEqual(str([]), '[]')
1555 self.assertEqual(str({}), '{}')
1556 a = []
1557 a.append(a)
1558 self.assertEqual(str(a), '[[...]]')
1559 a = {}
1560 a[0] = a
1561 self.assertEqual(str(a), '{0: {...}}')
1562
Alex Martellia70b1912003-04-22 08:12:33 +00001563 def test_sum(self):
1564 self.assertEqual(sum([]), 0)
Guido van Rossum805365e2007-05-07 22:24:25 +00001565 self.assertEqual(sum(list(range(2,8))), 27)
1566 self.assertEqual(sum(iter(list(range(2,8)))), 27)
Alex Martellia70b1912003-04-22 08:12:33 +00001567 self.assertEqual(sum(Squares(10)), 285)
1568 self.assertEqual(sum(iter(Squares(10))), 285)
1569 self.assertEqual(sum([[1], [2], [3]], []), [1, 2, 3])
1570
1571 self.assertRaises(TypeError, sum)
1572 self.assertRaises(TypeError, sum, 42)
1573 self.assertRaises(TypeError, sum, ['a', 'b', 'c'])
1574 self.assertRaises(TypeError, sum, ['a', 'b', 'c'], '')
1575 self.assertRaises(TypeError, sum, [[1], [2], [3]])
1576 self.assertRaises(TypeError, sum, [{2:3}])
1577 self.assertRaises(TypeError, sum, [{2:3}]*2, {2:3})
1578
1579 class BadSeq:
1580 def __getitem__(self, index):
1581 raise ValueError
1582 self.assertRaises(ValueError, sum, BadSeq())
1583
Alex Martelli86d8b342007-08-22 22:39:42 +00001584 def test_trunc(self):
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001585
1586 self.assertEqual(trunc(1), 1)
1587 self.assertEqual(trunc(-1), -1)
1588 self.assertEqual(type(trunc(1)), int)
1589 self.assertEqual(type(trunc(1.5)), int)
1590 self.assertEqual(trunc(1.5), 1)
1591 self.assertEqual(trunc(-1.5), -1)
1592 self.assertEqual(trunc(1.999999), 1)
1593 self.assertEqual(trunc(-1.999999), -1)
1594 self.assertEqual(trunc(-0.999999), -0)
1595 self.assertEqual(trunc(-100.999), -100)
1596
Alex Martelli86d8b342007-08-22 22:39:42 +00001597 class TestTrunc:
1598 def __trunc__(self):
1599 return 23
1600
1601 class TestNoTrunc:
1602 pass
1603
1604 self.assertEqual(trunc(TestTrunc()), 23)
1605
1606 self.assertRaises(TypeError, trunc)
1607 self.assertRaises(TypeError, trunc, 1, 2)
1608 self.assertRaises(TypeError, trunc, TestNoTrunc())
1609
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001610 t = TestNoTrunc()
1611 t.__trunc__ = lambda *args: args
1612 self.assertRaises(TypeError, trunc, t)
1613 self.assertRaises(TypeError, trunc, t, 0)
1614
Walter Dörwald919497e2003-01-19 16:23:59 +00001615 def test_tuple(self):
1616 self.assertEqual(tuple(()), ())
1617 t0_3 = (0, 1, 2, 3)
1618 t0_3_bis = tuple(t0_3)
1619 self.assert_(t0_3 is t0_3_bis)
1620 self.assertEqual(tuple([]), ())
1621 self.assertEqual(tuple([0, 1, 2, 3]), (0, 1, 2, 3))
1622 self.assertEqual(tuple(''), ())
1623 self.assertEqual(tuple('spam'), ('s', 'p', 'a', 'm'))
1624
1625 def test_type(self):
1626 self.assertEqual(type(''), type('123'))
1627 self.assertNotEqual(type(''), type(()))
1628
Guido van Rossumfee7b932005-01-16 00:21:28 +00001629 # We don't want self in vars(), so these are static methods
1630
1631 @staticmethod
Walter Dörwald919497e2003-01-19 16:23:59 +00001632 def get_vars_f0():
1633 return vars()
Walter Dörwald919497e2003-01-19 16:23:59 +00001634
Guido van Rossumfee7b932005-01-16 00:21:28 +00001635 @staticmethod
Walter Dörwald919497e2003-01-19 16:23:59 +00001636 def get_vars_f2():
1637 BuiltinTest.get_vars_f0()
1638 a = 1
1639 b = 2
1640 return vars()
Walter Dörwald919497e2003-01-19 16:23:59 +00001641
1642 def test_vars(self):
Raymond Hettingera690a992003-11-16 16:17:49 +00001643 self.assertEqual(set(vars()), set(dir()))
Walter Dörwald919497e2003-01-19 16:23:59 +00001644 import sys
Raymond Hettingera690a992003-11-16 16:17:49 +00001645 self.assertEqual(set(vars(sys)), set(dir(sys)))
Walter Dörwald919497e2003-01-19 16:23:59 +00001646 self.assertEqual(self.get_vars_f0(), {})
1647 self.assertEqual(self.get_vars_f2(), {'a': 1, 'b': 2})
1648 self.assertRaises(TypeError, vars, 42, 42)
1649 self.assertRaises(TypeError, vars, 42)
1650
1651 def test_zip(self):
1652 a = (1, 2, 3)
1653 b = (4, 5, 6)
1654 t = [(1, 4), (2, 5), (3, 6)]
Guido van Rossum801f0d72006-08-24 19:48:10 +00001655 self.assertEqual(list(zip(a, b)), t)
Walter Dörwald919497e2003-01-19 16:23:59 +00001656 b = [4, 5, 6]
Guido van Rossum801f0d72006-08-24 19:48:10 +00001657 self.assertEqual(list(zip(a, b)), t)
Walter Dörwald919497e2003-01-19 16:23:59 +00001658 b = (4, 5, 6, 7)
Guido van Rossum801f0d72006-08-24 19:48:10 +00001659 self.assertEqual(list(zip(a, b)), t)
Walter Dörwald919497e2003-01-19 16:23:59 +00001660 class I:
1661 def __getitem__(self, i):
1662 if i < 0 or i > 2: raise IndexError
1663 return i + 4
Guido van Rossum801f0d72006-08-24 19:48:10 +00001664 self.assertEqual(list(zip(a, I())), t)
1665 self.assertEqual(list(zip()), [])
1666 self.assertEqual(list(zip(*[])), [])
Walter Dörwald919497e2003-01-19 16:23:59 +00001667 self.assertRaises(TypeError, zip, None)
1668 class G:
1669 pass
1670 self.assertRaises(TypeError, zip, a, G())
1671
1672 # Make sure zip doesn't try to allocate a billion elements for the
1673 # result list when one of its arguments doesn't say how long it is.
1674 # A MemoryError is the most likely failure mode.
1675 class SequenceWithoutALength:
1676 def __getitem__(self, i):
1677 if i == 5:
1678 raise IndexError
1679 else:
1680 return i
1681 self.assertEqual(
Guido van Rossum805365e2007-05-07 22:24:25 +00001682 list(zip(SequenceWithoutALength(), range(2**30))),
Walter Dörwald919497e2003-01-19 16:23:59 +00001683 list(enumerate(range(5)))
1684 )
1685
1686 class BadSeq:
1687 def __getitem__(self, i):
1688 if i == 5:
1689 raise ValueError
1690 else:
1691 return i
Guido van Rossum801f0d72006-08-24 19:48:10 +00001692 self.assertRaises(ValueError, list, zip(BadSeq(), BadSeq()))
Walter Dörwald919497e2003-01-19 16:23:59 +00001693
Raymond Hettinger64958a12003-12-17 20:43:33 +00001694class TestSorted(unittest.TestCase):
1695
1696 def test_basic(self):
Guido van Rossum805365e2007-05-07 22:24:25 +00001697 data = list(range(100))
Raymond Hettinger64958a12003-12-17 20:43:33 +00001698 copy = data[:]
1699 random.shuffle(copy)
1700 self.assertEqual(data, sorted(copy))
1701 self.assertNotEqual(data, copy)
1702
1703 data.reverse()
1704 random.shuffle(copy)
Guido van Rossum47b9ff62006-08-24 00:41:19 +00001705 self.assertEqual(data, sorted(copy, cmp=lambda x, y: (x < y) - (x > y)))
Raymond Hettinger64958a12003-12-17 20:43:33 +00001706 self.assertNotEqual(data, copy)
1707 random.shuffle(copy)
1708 self.assertEqual(data, sorted(copy, key=lambda x: -x))
1709 self.assertNotEqual(data, copy)
1710 random.shuffle(copy)
1711 self.assertEqual(data, sorted(copy, reverse=1))
1712 self.assertNotEqual(data, copy)
1713
1714 def test_inputtypes(self):
1715 s = 'abracadabra'
Walter Dörwald1f5947b2007-05-22 16:52:54 +00001716 types = [list, tuple, str]
Walter Dörwald4e41a4b2005-08-03 17:09:04 +00001717 for T in types:
Raymond Hettinger64958a12003-12-17 20:43:33 +00001718 self.assertEqual(sorted(s), sorted(T(s)))
1719
Walter Dörwald1f5947b2007-05-22 16:52:54 +00001720 s = ''.join(set(s)) # unique letters only
1721 types = [str, set, frozenset, list, tuple, dict.fromkeys]
Walter Dörwald4e41a4b2005-08-03 17:09:04 +00001722 for T in types:
Raymond Hettinger64958a12003-12-17 20:43:33 +00001723 self.assertEqual(sorted(s), sorted(T(s)))
1724
1725 def test_baddecorator(self):
1726 data = 'The quick Brown fox Jumped over The lazy Dog'.split()
1727 self.assertRaises(TypeError, sorted, data, None, lambda x,y: 0)
1728
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001729def test_main(verbose=None):
1730 test_classes = (BuiltinTest, TestSorted)
1731
1732 run_unittest(*test_classes)
1733
1734 # verify reference counting
1735 if verbose and hasattr(sys, "gettotalrefcount"):
1736 import gc
1737 counts = [None] * 5
Guido van Rossum805365e2007-05-07 22:24:25 +00001738 for i in range(len(counts)):
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001739 run_unittest(*test_classes)
1740 gc.collect()
1741 counts[i] = sys.gettotalrefcount()
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001742 print(counts)
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001743
Walter Dörwald919497e2003-01-19 16:23:59 +00001744
1745if __name__ == "__main__":
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001746 test_main(verbose=True)