blob: 9233871147f31b88428b15d2f5ebe6e96a8584cf [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
Thomas Wouters477c8d52006-05-27 19:21:47 +00004from test.test_support import fcmp, have_unicode, TESTFN, unlink, \
5 run_unittest, run_with_locale
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00006from operator import neg
Guido van Rossum3bead091992-01-27 17:00:37 +00007
Raymond Hettinger214b1c32004-07-02 06:41:07 +00008import sys, warnings, cStringIO, random, UserDict
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
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +000014# count the number of test runs.
15# used to skip running test_execfile() multiple times
16numruns = 0
17
Walter Dörwald919497e2003-01-19 16:23:59 +000018class Squares:
Guido van Rossum3bead091992-01-27 17:00:37 +000019
Walter Dörwald919497e2003-01-19 16:23:59 +000020 def __init__(self, max):
21 self.max = max
22 self.sofar = []
23
24 def __len__(self): return len(self.sofar)
25
26 def __getitem__(self, i):
27 if not 0 <= i < self.max: raise IndexError
28 n = len(self.sofar)
29 while n <= i:
30 self.sofar.append(n*n)
31 n += 1
32 return self.sofar[i]
33
34class StrSquares:
35
36 def __init__(self, max):
37 self.max = max
38 self.sofar = []
39
40 def __len__(self):
41 return len(self.sofar)
42
43 def __getitem__(self, i):
44 if not 0 <= i < self.max:
45 raise IndexError
46 n = len(self.sofar)
47 while n <= i:
48 self.sofar.append(str(n*n))
49 n += 1
50 return self.sofar[i]
51
52class BitBucket:
53 def write(self, line):
54 pass
55
56L = [
57 ('0', 0),
58 ('1', 1),
59 ('9', 9),
60 ('10', 10),
61 ('99', 99),
62 ('100', 100),
63 ('314', 314),
64 (' 314', 314),
65 ('314 ', 314),
66 (' \t\t 314 \t\t ', 314),
Walter Dörwald70a6b492004-02-12 17:35:32 +000067 (repr(sys.maxint), sys.maxint),
Walter Dörwald919497e2003-01-19 16:23:59 +000068 (' 1x', ValueError),
69 (' 1 ', 1),
70 (' 1\02 ', ValueError),
71 ('', ValueError),
72 (' ', ValueError),
73 (' \t\t ', ValueError)
74]
75if have_unicode:
76 L += [
Guido van Rossumef87d6e2007-05-02 19:09:54 +000077 (str('0'), 0),
78 (str('1'), 1),
79 (str('9'), 9),
80 (str('10'), 10),
81 (str('99'), 99),
82 (str('100'), 100),
83 (str('314'), 314),
84 (str(' 314'), 314),
85 (str(b'\u0663\u0661\u0664 ','raw-unicode-escape'), 314),
86 (str(' \t\t 314 \t\t '), 314),
87 (str(' 1x'), ValueError),
88 (str(' 1 '), 1),
89 (str(' 1\02 '), ValueError),
90 (str(''), ValueError),
91 (str(' '), ValueError),
92 (str(' \t\t '), ValueError),
Guido van Rossum84fc66d2007-05-03 17:18:26 +000093 (chr(0x200), ValueError),
Walter Dörwald919497e2003-01-19 16:23:59 +000094]
95
Raymond Hettinger96229b12005-03-11 06:49:40 +000096class TestFailingBool:
Jack Diederich4dafcc42006-11-28 19:15:13 +000097 def __bool__(self):
Raymond Hettinger96229b12005-03-11 06:49:40 +000098 raise RuntimeError
99
100class TestFailingIter:
101 def __iter__(self):
102 raise RuntimeError
103
Walter Dörwald919497e2003-01-19 16:23:59 +0000104class BuiltinTest(unittest.TestCase):
105
106 def test_import(self):
107 __import__('sys')
108 __import__('time')
109 __import__('string')
Guido van Rossumd8faa362007-04-27 19:54:29 +0000110 __import__(name='sys')
111 __import__(name='time', level=0)
Walter Dörwald919497e2003-01-19 16:23:59 +0000112 self.assertRaises(ImportError, __import__, 'spamspam')
113 self.assertRaises(TypeError, __import__, 1, 2, 3, 4)
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000114 self.assertRaises(ValueError, __import__, '')
Guido van Rossumd8faa362007-04-27 19:54:29 +0000115 self.assertRaises(TypeError, __import__, 'sys', name='sys')
Walter Dörwald919497e2003-01-19 16:23:59 +0000116
117 def test_abs(self):
118 # int
119 self.assertEqual(abs(0), 0)
120 self.assertEqual(abs(1234), 1234)
121 self.assertEqual(abs(-1234), 1234)
Thomas Wouters89f507f2006-12-13 04:49:30 +0000122 self.assertTrue(abs(-sys.maxint-1) > 0)
Walter Dörwald919497e2003-01-19 16:23:59 +0000123 # float
124 self.assertEqual(abs(0.0), 0.0)
125 self.assertEqual(abs(3.14), 3.14)
126 self.assertEqual(abs(-3.14), 3.14)
127 # long
Guido van Rossume2a383d2007-01-15 16:59:06 +0000128 self.assertEqual(abs(0), 0)
129 self.assertEqual(abs(1234), 1234)
130 self.assertEqual(abs(-1234), 1234)
Walter Dörwald919497e2003-01-19 16:23:59 +0000131 # str
132 self.assertRaises(TypeError, abs, 'a')
133
Raymond Hettinger96229b12005-03-11 06:49:40 +0000134 def test_all(self):
135 self.assertEqual(all([2, 4, 6]), True)
136 self.assertEqual(all([2, None, 6]), False)
137 self.assertRaises(RuntimeError, all, [2, TestFailingBool(), 6])
138 self.assertRaises(RuntimeError, all, TestFailingIter())
139 self.assertRaises(TypeError, all, 10) # Non-iterable
140 self.assertRaises(TypeError, all) # No args
141 self.assertRaises(TypeError, all, [2, 4, 6], []) # Too many args
142 self.assertEqual(all([]), True) # Empty iterator
143 S = [50, 60]
144 self.assertEqual(all(x > 42 for x in S), True)
145 S = [50, 40, 60]
146 self.assertEqual(all(x > 42 for x in S), False)
147
148 def test_any(self):
149 self.assertEqual(any([None, None, None]), False)
150 self.assertEqual(any([None, 4, None]), True)
151 self.assertRaises(RuntimeError, any, [None, TestFailingBool(), 6])
152 self.assertRaises(RuntimeError, all, TestFailingIter())
153 self.assertRaises(TypeError, any, 10) # Non-iterable
154 self.assertRaises(TypeError, any) # No args
155 self.assertRaises(TypeError, any, [2, 4, 6], []) # Too many args
156 self.assertEqual(any([]), False) # Empty iterator
157 S = [40, 60, 30]
158 self.assertEqual(any(x > 42 for x in S), True)
159 S = [10, 20, 30]
160 self.assertEqual(any(x > 42 for x in S), False)
161
Thomas Wouters89f507f2006-12-13 04:49:30 +0000162 def test_neg(self):
163 x = -sys.maxint-1
164 self.assert_(isinstance(x, int))
165 self.assertEqual(-x, sys.maxint+1)
166
Walter Dörwald919497e2003-01-19 16:23:59 +0000167 def test_callable(self):
168 self.assert_(callable(len))
169 def f(): pass
170 self.assert_(callable(f))
171 class C:
172 def meth(self): pass
173 self.assert_(callable(C))
174 x = C()
175 self.assert_(callable(x.meth))
176 self.assert_(not callable(x))
177 class D(C):
178 def __call__(self): pass
179 y = D()
180 self.assert_(callable(y))
181 y()
182
183 def test_chr(self):
184 self.assertEqual(chr(32), ' ')
185 self.assertEqual(chr(65), 'A')
186 self.assertEqual(chr(97), 'a')
187 self.assertEqual(chr(0xff), '\xff')
Guido van Rossum572dbf82007-04-27 23:53:51 +0000188 self.assertRaises(ValueError, chr, 1<<24)
Walter Dörwald919497e2003-01-19 16:23:59 +0000189 self.assertRaises(TypeError, chr)
190
Guido van Rossum47b9ff62006-08-24 00:41:19 +0000191 def XXX_test_cmp(self):
192 # cmp() is no longer supported
Walter Dörwald919497e2003-01-19 16:23:59 +0000193 self.assertEqual(cmp(-1, 1), -1)
194 self.assertEqual(cmp(1, -1), 1)
195 self.assertEqual(cmp(1, 1), 0)
Armin Rigo2b3eb402003-10-28 12:05:48 +0000196 # verify that circular objects are not handled
Walter Dörwald919497e2003-01-19 16:23:59 +0000197 a = []; a.append(a)
198 b = []; b.append(b)
199 from UserList import UserList
200 c = UserList(); c.append(c)
Armin Rigo2b3eb402003-10-28 12:05:48 +0000201 self.assertRaises(RuntimeError, cmp, a, b)
202 self.assertRaises(RuntimeError, cmp, b, c)
203 self.assertRaises(RuntimeError, cmp, c, a)
204 self.assertRaises(RuntimeError, cmp, a, c)
205 # okay, now break the cycles
Walter Dörwald919497e2003-01-19 16:23:59 +0000206 a.pop(); b.pop(); c.pop()
207 self.assertRaises(TypeError, cmp)
208
Walter Dörwald919497e2003-01-19 16:23:59 +0000209 def test_compile(self):
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000210 compile('print(1)\n', '', 'exec')
Just van Rossumf032f862003-02-09 20:38:48 +0000211 bom = '\xef\xbb\xbf'
Guido van Rossum572dbf82007-04-27 23:53:51 +0000212 compile((bom + 'print(1)\n').encode("latin-1"), '', 'exec')
Guido van Rossumd8faa362007-04-27 19:54:29 +0000213 compile(source='pass', filename='?', mode='exec')
214 compile(dont_inherit=0, filename='tmp', source='0', mode='eval')
215 compile('pass', '?', dont_inherit=1, mode='exec')
Walter Dörwald919497e2003-01-19 16:23:59 +0000216 self.assertRaises(TypeError, compile)
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000217 self.assertRaises(ValueError, compile, 'print(42)\n', '<string>', 'badmode')
218 self.assertRaises(ValueError, compile, 'print(42)\n', '<string>', 'single', 0xff)
Neal Norwitzfcf44352005-11-27 20:37:43 +0000219 self.assertRaises(TypeError, compile, chr(0), 'f', 'exec')
Guido van Rossumd8faa362007-04-27 19:54:29 +0000220 self.assertRaises(TypeError, compile, 'pass', '?', 'exec',
221 mode='eval', source='0', filename='tmp')
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000222 if have_unicode:
Guido van Rossumef87d6e2007-05-02 19:09:54 +0000223 compile(str(b'print(u"\xc3\xa5")\n', 'utf8'), '', 'exec')
Guido van Rossum84fc66d2007-05-03 17:18:26 +0000224 self.assertRaises(TypeError, compile, chr(0), 'f', 'exec')
Guido van Rossumef87d6e2007-05-02 19:09:54 +0000225 self.assertRaises(ValueError, compile, str('a = 1'), 'f', 'bad')
Walter Dörwald919497e2003-01-19 16:23:59 +0000226
Guido van Rossumd8faa362007-04-27 19:54:29 +0000227
Walter Dörwald919497e2003-01-19 16:23:59 +0000228 def test_delattr(self):
229 import sys
230 sys.spam = 1
231 delattr(sys, 'spam')
232 self.assertRaises(TypeError, delattr)
233
234 def test_dir(self):
Georg Brandle32b4222007-03-10 22:13:27 +0000235 # dir(wrong number of arguments)
Walter Dörwald919497e2003-01-19 16:23:59 +0000236 self.assertRaises(TypeError, dir, 42, 42)
237
Georg Brandle32b4222007-03-10 22:13:27 +0000238 # dir() - local scope
239 local_var = 1
240 self.assert_('local_var' in dir())
241
242 # dir(module)
243 import sys
244 self.assert_('exit' in dir(sys))
245
246 # dir(module_with_invalid__dict__)
247 import types
248 class Foo(types.ModuleType):
249 __dict__ = 8
250 f = Foo("foo")
251 self.assertRaises(TypeError, dir, f)
252
253 # dir(type)
254 self.assert_("strip" in dir(str))
255 self.assert_("__mro__" not in dir(str))
256
257 # dir(obj)
258 class Foo(object):
259 def __init__(self):
260 self.x = 7
261 self.y = 8
262 self.z = 9
263 f = Foo()
264 self.assert_("y" in dir(f))
265
266 # dir(obj_no__dict__)
267 class Foo(object):
268 __slots__ = []
269 f = Foo()
270 self.assert_("__repr__" in dir(f))
271
272 # dir(obj_no__class__with__dict__)
273 # (an ugly trick to cause getattr(f, "__class__") to fail)
274 class Foo(object):
275 __slots__ = ["__class__", "__dict__"]
276 def __init__(self):
277 self.bar = "wow"
278 f = Foo()
279 self.assert_("__repr__" not in dir(f))
280 self.assert_("bar" in dir(f))
281
282 # dir(obj_using __dir__)
283 class Foo(object):
284 def __dir__(self):
285 return ["kan", "ga", "roo"]
286 f = Foo()
287 self.assert_(dir(f) == ["ga", "kan", "roo"])
288
289 # dir(obj__dir__not_list)
290 class Foo(object):
291 def __dir__(self):
292 return 7
293 f = Foo()
294 self.assertRaises(TypeError, dir, f)
295
Walter Dörwald919497e2003-01-19 16:23:59 +0000296 def test_divmod(self):
297 self.assertEqual(divmod(12, 7), (1, 5))
298 self.assertEqual(divmod(-12, 7), (-2, 2))
299 self.assertEqual(divmod(12, -7), (-2, -2))
300 self.assertEqual(divmod(-12, -7), (1, -5))
301
Guido van Rossume2a383d2007-01-15 16:59:06 +0000302 self.assertEqual(divmod(12, 7), (1, 5))
303 self.assertEqual(divmod(-12, 7), (-2, 2))
304 self.assertEqual(divmod(12, -7), (-2, -2))
305 self.assertEqual(divmod(-12, -7), (1, -5))
Walter Dörwald919497e2003-01-19 16:23:59 +0000306
Guido van Rossume2a383d2007-01-15 16:59:06 +0000307 self.assertEqual(divmod(12, 7), (1, 5))
308 self.assertEqual(divmod(-12, 7), (-2, 2))
309 self.assertEqual(divmod(12, -7), (-2, -2))
310 self.assertEqual(divmod(-12, -7), (1, -5))
Walter Dörwald919497e2003-01-19 16:23:59 +0000311
Raymond Hettinger5ea7e312004-09-30 07:47:20 +0000312 self.assertEqual(divmod(-sys.maxint-1, -1),
313 (sys.maxint+1, 0))
314
Walter Dörwald919497e2003-01-19 16:23:59 +0000315 self.assert_(not fcmp(divmod(3.25, 1.0), (3.0, 0.25)))
316 self.assert_(not fcmp(divmod(-3.25, 1.0), (-4.0, 0.75)))
317 self.assert_(not fcmp(divmod(3.25, -1.0), (-4.0, -0.75)))
318 self.assert_(not fcmp(divmod(-3.25, -1.0), (3.0, -0.25)))
319
320 self.assertRaises(TypeError, divmod)
321
322 def test_eval(self):
323 self.assertEqual(eval('1+1'), 2)
324 self.assertEqual(eval(' 1+1\n'), 2)
325 globals = {'a': 1, 'b': 2}
326 locals = {'b': 200, 'c': 300}
327 self.assertEqual(eval('a', globals) , 1)
328 self.assertEqual(eval('a', globals, locals), 1)
329 self.assertEqual(eval('b', globals, locals), 200)
330 self.assertEqual(eval('c', globals, locals), 300)
331 if have_unicode:
Guido van Rossumef87d6e2007-05-02 19:09:54 +0000332 self.assertEqual(eval(str('1+1')), 2)
333 self.assertEqual(eval(str(' 1+1\n')), 2)
Walter Dörwald919497e2003-01-19 16:23:59 +0000334 globals = {'a': 1, 'b': 2}
335 locals = {'b': 200, 'c': 300}
336 if have_unicode:
Guido van Rossumef87d6e2007-05-02 19:09:54 +0000337 self.assertEqual(eval(str('a'), globals), 1)
338 self.assertEqual(eval(str('a'), globals, locals), 1)
339 self.assertEqual(eval(str('b'), globals, locals), 200)
340 self.assertEqual(eval(str('c'), globals, locals), 300)
Just van Rossumf032f862003-02-09 20:38:48 +0000341 bom = '\xef\xbb\xbf'
Guido van Rossum572dbf82007-04-27 23:53:51 +0000342 self.assertEqual(eval((bom + 'a').encode("latin-1"), globals, locals), 1)
Guido van Rossumef87d6e2007-05-02 19:09:54 +0000343 self.assertEqual(eval(str(b'u"\xc3\xa5"', 'utf8'), globals),
344 str(b'\xc3\xa5', 'utf8'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000345 self.assertRaises(TypeError, eval)
346 self.assertRaises(TypeError, eval, ())
347
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000348 def test_general_eval(self):
349 # Tests that general mappings can be used for the locals argument
350
351 class M:
352 "Test mapping interface versus possible calls from eval()."
353 def __getitem__(self, key):
354 if key == 'a':
355 return 12
356 raise KeyError
Guido van Rossumcd70eee2007-02-11 18:53:00 +0000357 def keys(self):
358 return list('xyz')
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000359
360 m = M()
361 g = globals()
362 self.assertEqual(eval('a', g, m), 12)
363 self.assertRaises(NameError, eval, 'b', g, m)
364 self.assertEqual(eval('dir()', g, m), list('xyz'))
365 self.assertEqual(eval('globals()', g, m), g)
366 self.assertEqual(eval('locals()', g, m), m)
Raymond Hettinger513ffe82004-07-06 13:44:41 +0000367 self.assertRaises(TypeError, eval, 'a', m)
Raymond Hettinger66bd2332004-08-02 08:30:07 +0000368 class A:
369 "Non-mapping"
370 pass
371 m = A()
372 self.assertRaises(TypeError, eval, 'a', g, m)
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000373
374 # Verify that dict subclasses work as well
375 class D(dict):
376 def __getitem__(self, key):
377 if key == 'a':
378 return 12
379 return dict.__getitem__(self, key)
Guido van Rossumcd70eee2007-02-11 18:53:00 +0000380 def keys(self):
381 return list('xyz')
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000382
383 d = D()
384 self.assertEqual(eval('a', g, d), 12)
385 self.assertRaises(NameError, eval, 'b', g, d)
386 self.assertEqual(eval('dir()', g, d), list('xyz'))
387 self.assertEqual(eval('globals()', g, d), g)
388 self.assertEqual(eval('locals()', g, d), d)
389
390 # Verify locals stores (used by list comps)
391 eval('[locals() for i in (2,3)]', g, d)
392 eval('[locals() for i in (2,3)]', g, UserDict.UserDict())
393
394 class SpreadSheet:
395 "Sample application showing nested, calculated lookups."
396 _cells = {}
397 def __setitem__(self, key, formula):
398 self._cells[key] = formula
Thomas Wouters73e5a5b2006-06-08 15:35:45 +0000399 def __getitem__(self, key):
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000400 return eval(self._cells[key], globals(), self)
401
402 ss = SpreadSheet()
403 ss['a1'] = '5'
404 ss['a2'] = 'a1*6'
405 ss['a3'] = 'a2*7'
406 self.assertEqual(ss['a3'], 210)
407
Raymond Hettinger2a7dede2004-08-07 04:55:30 +0000408 # Verify that dir() catches a non-list returned by eval
409 # SF bug #1004669
410 class C:
411 def __getitem__(self, item):
412 raise KeyError(item)
Guido van Rossumcd70eee2007-02-11 18:53:00 +0000413 def keys(self):
414 return 1 # used to be 'a' but that's no longer an error
Raymond Hettinger2a7dede2004-08-07 04:55:30 +0000415 self.assertRaises(TypeError, eval, 'dir()', globals(), C())
416
Walter Dörwald919497e2003-01-19 16:23:59 +0000417 # Done outside of the method test_z to get the correct scope
418 z = 0
419 f = open(TESTFN, 'w')
420 f.write('z = z+1\n')
421 f.write('z = z*2\n')
422 f.close()
423 execfile(TESTFN)
424
425 def test_execfile(self):
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +0000426 global numruns
427 if numruns:
428 return
429 numruns += 1
Tim Peters7f061872004-12-07 21:17:46 +0000430
Walter Dörwald919497e2003-01-19 16:23:59 +0000431 globals = {'a': 1, 'b': 2}
432 locals = {'b': 200, 'c': 300}
433
434 self.assertEqual(self.__class__.z, 2)
435 globals['z'] = 0
436 execfile(TESTFN, globals)
437 self.assertEqual(globals['z'], 2)
438 locals['z'] = 0
439 execfile(TESTFN, globals, locals)
440 self.assertEqual(locals['z'], 2)
Raymond Hettinger66bd2332004-08-02 08:30:07 +0000441
442 class M:
443 "Test mapping interface versus possible calls from execfile()."
444 def __init__(self):
445 self.z = 10
446 def __getitem__(self, key):
447 if key == 'z':
448 return self.z
449 raise KeyError
450 def __setitem__(self, key, value):
451 if key == 'z':
452 self.z = value
453 return
454 raise KeyError
455
456 locals = M()
457 locals['z'] = 0
458 execfile(TESTFN, globals, locals)
459 self.assertEqual(locals['z'], 2)
460
Walter Dörwald919497e2003-01-19 16:23:59 +0000461 unlink(TESTFN)
462 self.assertRaises(TypeError, execfile)
Neal Norwitzfcf44352005-11-27 20:37:43 +0000463 self.assertRaises(TypeError, execfile, TESTFN, {}, ())
Walter Dörwald919497e2003-01-19 16:23:59 +0000464 import os
465 self.assertRaises(IOError, execfile, os.curdir)
466 self.assertRaises(IOError, execfile, "I_dont_exist")
467
Georg Brandl7cae87c2006-09-06 06:51:57 +0000468 def test_exec(self):
469 g = {}
470 exec('z = 1', g)
471 if '__builtins__' in g:
472 del g['__builtins__']
473 self.assertEqual(g, {'z': 1})
474
Guido van Rossumef87d6e2007-05-02 19:09:54 +0000475 exec('z = 1+1', g)
Georg Brandl7cae87c2006-09-06 06:51:57 +0000476 if '__builtins__' in g:
477 del g['__builtins__']
478 self.assertEqual(g, {'z': 2})
479 g = {}
480 l = {}
481
482 import warnings
483 warnings.filterwarnings("ignore", "global statement", module="<string>")
484 exec('global a; a = 1; b = 2', g, l)
485 if '__builtins__' in g:
486 del g['__builtins__']
487 if '__builtins__' in l:
488 del l['__builtins__']
489 self.assertEqual((g, l), ({'a': 1}, {'b': 2}))
490
Walter Dörwald919497e2003-01-19 16:23:59 +0000491 def test_filter(self):
492 self.assertEqual(filter(lambda c: 'a' <= c <= 'z', 'Hello World'), 'elloorld')
493 self.assertEqual(filter(None, [1, 'hello', [], [3], '', None, 9, 0]), [1, 'hello', [3], 9])
494 self.assertEqual(filter(lambda x: x > 0, [1, -3, 9, 0, 2]), [1, 9, 2])
495 self.assertEqual(filter(None, Squares(10)), [1, 4, 9, 16, 25, 36, 49, 64, 81])
496 self.assertEqual(filter(lambda x: x%2, Squares(10)), [1, 9, 25, 49, 81])
497 def identity(item):
498 return 1
499 filter(identity, Squares(5))
500 self.assertRaises(TypeError, filter)
501 class BadSeq(object):
Tim Petersf2715e02003-02-19 02:35:07 +0000502 def __getitem__(self, index):
503 if index<4:
504 return 42
505 raise ValueError
Walter Dörwald919497e2003-01-19 16:23:59 +0000506 self.assertRaises(ValueError, filter, lambda x: x, BadSeq())
507 def badfunc():
508 pass
509 self.assertRaises(TypeError, filter, badfunc, range(5))
510
Walter Dörwaldbf517072003-01-27 15:57:14 +0000511 # test bltinmodule.c::filtertuple()
Walter Dörwald919497e2003-01-19 16:23:59 +0000512 self.assertEqual(filter(None, (1, 2)), (1, 2))
513 self.assertEqual(filter(lambda x: x>=3, (1, 2, 3, 4)), (3, 4))
514 self.assertRaises(TypeError, filter, 42, (1, 2))
515
Walter Dörwaldbf517072003-01-27 15:57:14 +0000516 # test bltinmodule.c::filterstring()
Walter Dörwald919497e2003-01-19 16:23:59 +0000517 self.assertEqual(filter(None, "12"), "12")
518 self.assertEqual(filter(lambda x: x>="3", "1234"), "34")
519 self.assertRaises(TypeError, filter, 42, "12")
520 class badstr(str):
521 def __getitem__(self, index):
522 raise ValueError
523 self.assertRaises(ValueError, filter, lambda x: x >="3", badstr("1234"))
Walter Dörwaldbf517072003-01-27 15:57:14 +0000524
Walter Dörwald903f1e02003-02-04 16:28:00 +0000525 class badstr2(str):
526 def __getitem__(self, index):
527 return 42
528 self.assertRaises(TypeError, filter, lambda x: x >=42, badstr2("1234"))
529
530 class weirdstr(str):
531 def __getitem__(self, index):
532 return weirdstr(2*str.__getitem__(self, index))
533 self.assertEqual(filter(lambda x: x>="33", weirdstr("1234")), "3344")
534
Walter Dörwald5e61e242003-02-04 17:04:01 +0000535 class shiftstr(str):
536 def __getitem__(self, index):
537 return chr(ord(str.__getitem__(self, index))+1)
538 self.assertEqual(filter(lambda x: x>="3", shiftstr("1234")), "345")
539
Martin v. Löwis8afd7572003-01-25 22:46:11 +0000540 if have_unicode:
Walter Dörwaldbf517072003-01-27 15:57:14 +0000541 # test bltinmodule.c::filterunicode()
Guido van Rossumef87d6e2007-05-02 19:09:54 +0000542 self.assertEqual(filter(None, str("12")), str("12"))
543 self.assertEqual(filter(lambda x: x>="3", str("1234")), str("34"))
544 self.assertRaises(TypeError, filter, 42, str("12"))
545 self.assertRaises(ValueError, filter, lambda x: x >="3", badstr(str("1234")))
Walter Dörwald919497e2003-01-19 16:23:59 +0000546
Guido van Rossumef87d6e2007-05-02 19:09:54 +0000547 class badunicode(str):
Walter Dörwald903f1e02003-02-04 16:28:00 +0000548 def __getitem__(self, index):
549 return 42
550 self.assertRaises(TypeError, filter, lambda x: x >=42, badunicode("1234"))
551
Guido van Rossumef87d6e2007-05-02 19:09:54 +0000552 class weirdunicode(str):
Walter Dörwald903f1e02003-02-04 16:28:00 +0000553 def __getitem__(self, index):
Guido van Rossumef87d6e2007-05-02 19:09:54 +0000554 return weirdunicode(2*str.__getitem__(self, index))
Walter Dörwald903f1e02003-02-04 16:28:00 +0000555 self.assertEqual(
Guido van Rossumef87d6e2007-05-02 19:09:54 +0000556 filter(lambda x: x>=str("33"), weirdunicode("1234")), str("3344"))
Walter Dörwald903f1e02003-02-04 16:28:00 +0000557
Guido van Rossumef87d6e2007-05-02 19:09:54 +0000558 class shiftunicode(str):
Walter Dörwald5e61e242003-02-04 17:04:01 +0000559 def __getitem__(self, index):
Guido van Rossum84fc66d2007-05-03 17:18:26 +0000560 return chr(ord(str.__getitem__(self, index))+1)
Walter Dörwald5e61e242003-02-04 17:04:01 +0000561 self.assertEqual(
Guido van Rossumef87d6e2007-05-02 19:09:54 +0000562 filter(lambda x: x>=str("3"), shiftunicode("1234")),
563 str("345")
Walter Dörwald5e61e242003-02-04 17:04:01 +0000564 )
565
Walter Dörwaldc3da83f2003-02-04 20:24:45 +0000566 def test_filter_subclasses(self):
Walter Dörwaldc8cb5d92003-08-15 17:52:39 +0000567 # test that filter() never returns tuple, str or unicode subclasses
568 # and that the result always goes through __getitem__
569 funcs = (None, bool, lambda x: True)
Walter Dörwaldc3da83f2003-02-04 20:24:45 +0000570 class tuple2(tuple):
Walter Dörwald1918f772003-02-10 13:19:13 +0000571 def __getitem__(self, index):
572 return 2*tuple.__getitem__(self, index)
Walter Dörwaldc3da83f2003-02-04 20:24:45 +0000573 class str2(str):
Walter Dörwald1918f772003-02-10 13:19:13 +0000574 def __getitem__(self, index):
575 return 2*str.__getitem__(self, index)
Walter Dörwaldc3da83f2003-02-04 20:24:45 +0000576 inputs = {
Walter Dörwald8dd19322003-02-10 17:36:40 +0000577 tuple2: {(): (), (1, 2, 3): (2, 4, 6)},
Walter Dörwald1918f772003-02-10 13:19:13 +0000578 str2: {"": "", "123": "112233"}
Walter Dörwaldc3da83f2003-02-04 20:24:45 +0000579 }
580 if have_unicode:
Guido van Rossumef87d6e2007-05-02 19:09:54 +0000581 class unicode2(str):
Walter Dörwald1918f772003-02-10 13:19:13 +0000582 def __getitem__(self, index):
Guido van Rossumef87d6e2007-05-02 19:09:54 +0000583 return 2*str.__getitem__(self, index)
Walter Dörwald1918f772003-02-10 13:19:13 +0000584 inputs[unicode2] = {
Guido van Rossumef87d6e2007-05-02 19:09:54 +0000585 str(): str(),
586 str("123"): str("112233")
Walter Dörwald1918f772003-02-10 13:19:13 +0000587 }
Walter Dörwaldc3da83f2003-02-04 20:24:45 +0000588
Guido van Rossumcc2b0162007-02-11 06:12:03 +0000589 for (cls, inps) in inputs.items():
590 for (inp, exp) in inps.items():
Tim Petersf2715e02003-02-19 02:35:07 +0000591 # make sure the output goes through __getitem__
592 # even if func is None
593 self.assertEqual(
594 filter(funcs[0], cls(inp)),
595 filter(funcs[1], cls(inp))
596 )
597 for func in funcs:
Walter Dörwald1918f772003-02-10 13:19:13 +0000598 outp = filter(func, cls(inp))
599 self.assertEqual(outp, exp)
600 self.assert_(not isinstance(outp, cls))
Walter Dörwaldc3da83f2003-02-04 20:24:45 +0000601
Walter Dörwald919497e2003-01-19 16:23:59 +0000602 def test_float(self):
603 self.assertEqual(float(3.14), 3.14)
604 self.assertEqual(float(314), 314.0)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000605 self.assertEqual(float(314), 314.0)
Walter Dörwald919497e2003-01-19 16:23:59 +0000606 self.assertEqual(float(" 3.14 "), 3.14)
Neal Norwitze7214a12005-12-18 05:03:17 +0000607 self.assertRaises(ValueError, float, " 0x3.1 ")
608 self.assertRaises(ValueError, float, " -0x3.p-1 ")
Walter Dörwald919497e2003-01-19 16:23:59 +0000609 if have_unicode:
Guido van Rossumef87d6e2007-05-02 19:09:54 +0000610 self.assertEqual(float(str(" 3.14 ")), 3.14)
611 self.assertEqual(float(str(b" \u0663.\u0661\u0664 ",'raw-unicode-escape')), 3.14)
Walter Dörwaldede187f2005-11-29 15:45:14 +0000612 # Implementation limitation in PyFloat_FromString()
Guido van Rossumef87d6e2007-05-02 19:09:54 +0000613 self.assertRaises(ValueError, float, str("1"*10000))
Walter Dörwald919497e2003-01-19 16:23:59 +0000614
Thomas Wouters477c8d52006-05-27 19:21:47 +0000615 @run_with_locale('LC_NUMERIC', 'fr_FR', 'de_DE')
Neal Norwitz5898fa22005-11-22 05:17:40 +0000616 def test_float_with_comma(self):
617 # set locale to something that doesn't use '.' for the decimal point
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000618 # float must not accept the locale specific decimal point but
619 # it still has to accept the normal python syntac
Thomas Wouters477c8d52006-05-27 19:21:47 +0000620 import locale
621 if not locale.localeconv()['decimal_point'] == ',':
Neal Norwitz5898fa22005-11-22 05:17:40 +0000622 return
623
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000624 self.assertEqual(float(" 3.14 "), 3.14)
625 self.assertEqual(float("+3.14 "), 3.14)
626 self.assertEqual(float("-3.14 "), -3.14)
627 self.assertEqual(float(".14 "), .14)
628 self.assertEqual(float("3. "), 3.0)
629 self.assertEqual(float("3.e3 "), 3000.0)
630 self.assertEqual(float("3.2e3 "), 3200.0)
631 self.assertEqual(float("2.5e-1 "), 0.25)
632 self.assertEqual(float("5e-1"), 0.5)
633 self.assertRaises(ValueError, float, " 3,14 ")
634 self.assertRaises(ValueError, float, " +3,14 ")
635 self.assertRaises(ValueError, float, " -3,14 ")
Thomas Wouters477c8d52006-05-27 19:21:47 +0000636 self.assertRaises(ValueError, float, " 0x3.1 ")
637 self.assertRaises(ValueError, float, " -0x3.p-1 ")
638 self.assertEqual(float(" 25.e-1 "), 2.5)
639 self.assertEqual(fcmp(float(" .25e-1 "), .025), 0)
Neal Norwitz5898fa22005-11-22 05:17:40 +0000640
Brett Cannonc3647ac2005-04-26 03:45:26 +0000641 def test_floatconversion(self):
642 # Make sure that calls to __float__() work properly
643 class Foo0:
644 def __float__(self):
645 return 42.
646
647 class Foo1(object):
648 def __float__(self):
649 return 42.
650
651 class Foo2(float):
652 def __float__(self):
653 return 42.
654
655 class Foo3(float):
656 def __new__(cls, value=0.):
657 return float.__new__(cls, 2*value)
658
659 def __float__(self):
660 return self
661
662 class Foo4(float):
663 def __float__(self):
664 return 42
665
666 self.assertAlmostEqual(float(Foo0()), 42.)
667 self.assertAlmostEqual(float(Foo1()), 42.)
668 self.assertAlmostEqual(float(Foo2()), 42.)
669 self.assertAlmostEqual(float(Foo3(21)), 42.)
670 self.assertRaises(TypeError, float, Foo4(42))
671
Walter Dörwald919497e2003-01-19 16:23:59 +0000672 def test_getattr(self):
673 import sys
674 self.assert_(getattr(sys, 'stdout') is sys.stdout)
675 self.assertRaises(TypeError, getattr, sys, 1)
676 self.assertRaises(TypeError, getattr, sys, 1, "foo")
677 self.assertRaises(TypeError, getattr)
Walter Dörwald4e41a4b2005-08-03 17:09:04 +0000678 if have_unicode:
Guido van Rossum84fc66d2007-05-03 17:18:26 +0000679 self.assertRaises(UnicodeError, getattr, sys, chr(sys.maxunicode))
Walter Dörwald919497e2003-01-19 16:23:59 +0000680
681 def test_hasattr(self):
682 import sys
683 self.assert_(hasattr(sys, 'stdout'))
684 self.assertRaises(TypeError, hasattr, sys, 1)
685 self.assertRaises(TypeError, hasattr)
Walter Dörwald4e41a4b2005-08-03 17:09:04 +0000686 if have_unicode:
Guido van Rossum84fc66d2007-05-03 17:18:26 +0000687 self.assertRaises(UnicodeError, hasattr, sys, chr(sys.maxunicode))
Walter Dörwald919497e2003-01-19 16:23:59 +0000688
689 def test_hash(self):
690 hash(None)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000691 self.assertEqual(hash(1), hash(1))
Walter Dörwald919497e2003-01-19 16:23:59 +0000692 self.assertEqual(hash(1), hash(1.0))
693 hash('spam')
694 if have_unicode:
Guido van Rossumef87d6e2007-05-02 19:09:54 +0000695 self.assertEqual(hash('spam'), hash(str('spam')))
Walter Dörwald919497e2003-01-19 16:23:59 +0000696 hash((0,1,2,3))
697 def f(): pass
698 self.assertRaises(TypeError, hash, [])
699 self.assertRaises(TypeError, hash, {})
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000700 # Bug 1536021: Allow hash to return long objects
701 class X:
702 def __hash__(self):
703 return 2**100
704 self.assertEquals(type(hash(X())), int)
705 class Y(object):
706 def __hash__(self):
707 return 2**100
708 self.assertEquals(type(hash(Y())), int)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000709 class Z(int):
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000710 def __hash__(self):
711 return self
Guido van Rossume2a383d2007-01-15 16:59:06 +0000712 self.assertEquals(hash(Z(42)), hash(42))
Walter Dörwald919497e2003-01-19 16:23:59 +0000713
714 def test_hex(self):
715 self.assertEqual(hex(16), '0x10')
Guido van Rossume2a383d2007-01-15 16:59:06 +0000716 self.assertEqual(hex(16), '0x10')
Guido van Rossum6c9e1302003-11-29 23:52:13 +0000717 self.assertEqual(hex(-16), '-0x10')
Guido van Rossume2a383d2007-01-15 16:59:06 +0000718 self.assertEqual(hex(-16), '-0x10')
Walter Dörwald919497e2003-01-19 16:23:59 +0000719 self.assertRaises(TypeError, hex, {})
720
721 def test_id(self):
722 id(None)
723 id(1)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000724 id(1)
Walter Dörwald919497e2003-01-19 16:23:59 +0000725 id(1.0)
726 id('spam')
727 id((0,1,2,3))
728 id([0,1,2,3])
729 id({'spam': 1, 'eggs': 2, 'ham': 3})
730
Guido van Rossuma88a0332007-02-26 16:59:55 +0000731 # Test input() later, alphabetized as if it were raw_input
732
Walter Dörwald919497e2003-01-19 16:23:59 +0000733 def test_int(self):
734 self.assertEqual(int(314), 314)
735 self.assertEqual(int(3.14), 3)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000736 self.assertEqual(int(314), 314)
Walter Dörwald919497e2003-01-19 16:23:59 +0000737 # Check that conversion from float truncates towards zero
738 self.assertEqual(int(-3.14), -3)
739 self.assertEqual(int(3.9), 3)
740 self.assertEqual(int(-3.9), -3)
741 self.assertEqual(int(3.5), 3)
742 self.assertEqual(int(-3.5), -3)
743 # Different base:
Guido van Rossume2a383d2007-01-15 16:59:06 +0000744 self.assertEqual(int("10",16), 16)
Walter Dörwald919497e2003-01-19 16:23:59 +0000745 if have_unicode:
Guido van Rossumef87d6e2007-05-02 19:09:54 +0000746 self.assertEqual(int(str("10"),16), 16)
Walter Dörwald919497e2003-01-19 16:23:59 +0000747 # Test conversion from strings and various anomalies
748 for s, v in L:
749 for sign in "", "+", "-":
750 for prefix in "", " ", "\t", " \t\t ":
751 ss = prefix + sign + s
752 vv = v
753 if sign == "-" and v is not ValueError:
754 vv = -v
755 try:
756 self.assertEqual(int(ss), vv)
757 except v:
758 pass
759
Walter Dörwald70a6b492004-02-12 17:35:32 +0000760 s = repr(-1-sys.maxint)
Thomas Wouters89f507f2006-12-13 04:49:30 +0000761 x = int(s)
762 self.assertEqual(x+1, -sys.maxint)
763 self.assert_(isinstance(x, int))
Walter Dörwald919497e2003-01-19 16:23:59 +0000764 # should return long
Thomas Wouters89f507f2006-12-13 04:49:30 +0000765 self.assertEqual(int(s[1:]), sys.maxint+1)
Walter Dörwald919497e2003-01-19 16:23:59 +0000766
767 # should return long
768 x = int(1e100)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000769 self.assert_(isinstance(x, int))
Walter Dörwald919497e2003-01-19 16:23:59 +0000770 x = int(-1e100)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000771 self.assert_(isinstance(x, int))
Walter Dörwald919497e2003-01-19 16:23:59 +0000772
773
774 # SF bug 434186: 0x80000000/2 != 0x80000000>>1.
775 # Worked by accident in Windows release build, but failed in debug build.
776 # Failed in all Linux builds.
777 x = -1-sys.maxint
778 self.assertEqual(x >> 1, x//2)
779
780 self.assertRaises(ValueError, int, '123\0')
781 self.assertRaises(ValueError, int, '53', 40)
782
Thomas Wouters89f507f2006-12-13 04:49:30 +0000783 # SF bug 1545497: embedded NULs were not detected with
784 # explicit base
785 self.assertRaises(ValueError, int, '123\0', 10)
786 self.assertRaises(ValueError, int, '123\x00 245', 20)
787
Walter Dörwald919497e2003-01-19 16:23:59 +0000788 x = int('1' * 600)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000789 self.assert_(isinstance(x, int))
Walter Dörwald919497e2003-01-19 16:23:59 +0000790
791 if have_unicode:
Guido van Rossum84fc66d2007-05-03 17:18:26 +0000792 x = int(chr(0x661) * 600)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000793 self.assert_(isinstance(x, int))
Walter Dörwald919497e2003-01-19 16:23:59 +0000794
795 self.assertRaises(TypeError, int, 1, 12)
796
797 self.assertEqual(int('0123', 0), 83)
Neal Norwitz5898fa22005-11-22 05:17:40 +0000798 self.assertEqual(int('0x123', 16), 291)
Walter Dörwald919497e2003-01-19 16:23:59 +0000799
Thomas Wouters477c8d52006-05-27 19:21:47 +0000800 # SF bug 1334662: int(string, base) wrong answers
801 # Various representations of 2**32 evaluated to 0
802 # rather than 2**32 in previous versions
803
Guido van Rossume2a383d2007-01-15 16:59:06 +0000804 self.assertEqual(int('100000000000000000000000000000000', 2), 4294967296)
805 self.assertEqual(int('102002022201221111211', 3), 4294967296)
806 self.assertEqual(int('10000000000000000', 4), 4294967296)
807 self.assertEqual(int('32244002423141', 5), 4294967296)
808 self.assertEqual(int('1550104015504', 6), 4294967296)
809 self.assertEqual(int('211301422354', 7), 4294967296)
810 self.assertEqual(int('40000000000', 8), 4294967296)
811 self.assertEqual(int('12068657454', 9), 4294967296)
812 self.assertEqual(int('4294967296', 10), 4294967296)
813 self.assertEqual(int('1904440554', 11), 4294967296)
814 self.assertEqual(int('9ba461594', 12), 4294967296)
815 self.assertEqual(int('535a79889', 13), 4294967296)
816 self.assertEqual(int('2ca5b7464', 14), 4294967296)
817 self.assertEqual(int('1a20dcd81', 15), 4294967296)
818 self.assertEqual(int('100000000', 16), 4294967296)
819 self.assertEqual(int('a7ffda91', 17), 4294967296)
820 self.assertEqual(int('704he7g4', 18), 4294967296)
821 self.assertEqual(int('4f5aff66', 19), 4294967296)
822 self.assertEqual(int('3723ai4g', 20), 4294967296)
823 self.assertEqual(int('281d55i4', 21), 4294967296)
824 self.assertEqual(int('1fj8b184', 22), 4294967296)
825 self.assertEqual(int('1606k7ic', 23), 4294967296)
826 self.assertEqual(int('mb994ag', 24), 4294967296)
827 self.assertEqual(int('hek2mgl', 25), 4294967296)
828 self.assertEqual(int('dnchbnm', 26), 4294967296)
829 self.assertEqual(int('b28jpdm', 27), 4294967296)
830 self.assertEqual(int('8pfgih4', 28), 4294967296)
831 self.assertEqual(int('76beigg', 29), 4294967296)
832 self.assertEqual(int('5qmcpqg', 30), 4294967296)
833 self.assertEqual(int('4q0jto4', 31), 4294967296)
834 self.assertEqual(int('4000000', 32), 4294967296)
835 self.assertEqual(int('3aokq94', 33), 4294967296)
836 self.assertEqual(int('2qhxjli', 34), 4294967296)
837 self.assertEqual(int('2br45qb', 35), 4294967296)
838 self.assertEqual(int('1z141z4', 36), 4294967296)
Thomas Wouters477c8d52006-05-27 19:21:47 +0000839
840 # SF bug 1334662: int(string, base) wrong answers
841 # Checks for proper evaluation of 2**32 + 1
Guido van Rossume2a383d2007-01-15 16:59:06 +0000842 self.assertEqual(int('100000000000000000000000000000001', 2), 4294967297)
843 self.assertEqual(int('102002022201221111212', 3), 4294967297)
844 self.assertEqual(int('10000000000000001', 4), 4294967297)
845 self.assertEqual(int('32244002423142', 5), 4294967297)
846 self.assertEqual(int('1550104015505', 6), 4294967297)
847 self.assertEqual(int('211301422355', 7), 4294967297)
848 self.assertEqual(int('40000000001', 8), 4294967297)
849 self.assertEqual(int('12068657455', 9), 4294967297)
850 self.assertEqual(int('4294967297', 10), 4294967297)
851 self.assertEqual(int('1904440555', 11), 4294967297)
852 self.assertEqual(int('9ba461595', 12), 4294967297)
853 self.assertEqual(int('535a7988a', 13), 4294967297)
854 self.assertEqual(int('2ca5b7465', 14), 4294967297)
855 self.assertEqual(int('1a20dcd82', 15), 4294967297)
856 self.assertEqual(int('100000001', 16), 4294967297)
857 self.assertEqual(int('a7ffda92', 17), 4294967297)
858 self.assertEqual(int('704he7g5', 18), 4294967297)
859 self.assertEqual(int('4f5aff67', 19), 4294967297)
860 self.assertEqual(int('3723ai4h', 20), 4294967297)
861 self.assertEqual(int('281d55i5', 21), 4294967297)
862 self.assertEqual(int('1fj8b185', 22), 4294967297)
863 self.assertEqual(int('1606k7id', 23), 4294967297)
864 self.assertEqual(int('mb994ah', 24), 4294967297)
865 self.assertEqual(int('hek2mgm', 25), 4294967297)
866 self.assertEqual(int('dnchbnn', 26), 4294967297)
867 self.assertEqual(int('b28jpdn', 27), 4294967297)
868 self.assertEqual(int('8pfgih5', 28), 4294967297)
869 self.assertEqual(int('76beigh', 29), 4294967297)
870 self.assertEqual(int('5qmcpqh', 30), 4294967297)
871 self.assertEqual(int('4q0jto5', 31), 4294967297)
872 self.assertEqual(int('4000001', 32), 4294967297)
873 self.assertEqual(int('3aokq95', 33), 4294967297)
874 self.assertEqual(int('2qhxjlj', 34), 4294967297)
875 self.assertEqual(int('2br45qc', 35), 4294967297)
876 self.assertEqual(int('1z141z5', 36), 4294967297)
Thomas Wouters477c8d52006-05-27 19:21:47 +0000877
Brett Cannonc3647ac2005-04-26 03:45:26 +0000878 def test_intconversion(self):
879 # Test __int__()
880 class Foo0:
881 def __int__(self):
882 return 42
883
884 class Foo1(object):
885 def __int__(self):
886 return 42
887
888 class Foo2(int):
889 def __int__(self):
890 return 42
891
892 class Foo3(int):
893 def __int__(self):
894 return self
895
896 class Foo4(int):
897 def __int__(self):
Guido van Rossume2a383d2007-01-15 16:59:06 +0000898 return 42
Brett Cannonc3647ac2005-04-26 03:45:26 +0000899
900 class Foo5(int):
901 def __int__(self):
902 return 42.
903
904 self.assertEqual(int(Foo0()), 42)
905 self.assertEqual(int(Foo1()), 42)
906 self.assertEqual(int(Foo2()), 42)
907 self.assertEqual(int(Foo3()), 0)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000908 self.assertEqual(int(Foo4()), 42)
Brett Cannonc3647ac2005-04-26 03:45:26 +0000909 self.assertRaises(TypeError, int, Foo5())
910
Walter Dörwald919497e2003-01-19 16:23:59 +0000911 def test_iter(self):
912 self.assertRaises(TypeError, iter)
913 self.assertRaises(TypeError, iter, 42, 42)
914 lists = [("1", "2"), ["1", "2"], "12"]
915 if have_unicode:
Guido van Rossumef87d6e2007-05-02 19:09:54 +0000916 lists.append(str("12"))
Walter Dörwald919497e2003-01-19 16:23:59 +0000917 for l in lists:
918 i = iter(l)
Georg Brandla18af4e2007-04-21 15:47:16 +0000919 self.assertEqual(next(i), '1')
920 self.assertEqual(next(i), '2')
921 self.assertRaises(StopIteration, next, i)
Walter Dörwald919497e2003-01-19 16:23:59 +0000922
923 def test_isinstance(self):
924 class C:
925 pass
926 class D(C):
927 pass
928 class E:
929 pass
930 c = C()
931 d = D()
932 e = E()
933 self.assert_(isinstance(c, C))
934 self.assert_(isinstance(d, C))
935 self.assert_(not isinstance(e, C))
936 self.assert_(not isinstance(c, D))
937 self.assert_(not isinstance('foo', E))
938 self.assertRaises(TypeError, isinstance, E, 'foo')
939 self.assertRaises(TypeError, isinstance)
940
941 def test_issubclass(self):
942 class C:
943 pass
944 class D(C):
945 pass
946 class E:
947 pass
948 c = C()
949 d = D()
950 e = E()
951 self.assert_(issubclass(D, C))
952 self.assert_(issubclass(C, C))
953 self.assert_(not issubclass(C, D))
954 self.assertRaises(TypeError, issubclass, 'foo', E)
955 self.assertRaises(TypeError, issubclass, E, 'foo')
956 self.assertRaises(TypeError, issubclass)
957
958 def test_len(self):
959 self.assertEqual(len('123'), 3)
960 self.assertEqual(len(()), 0)
961 self.assertEqual(len((1, 2, 3, 4)), 4)
962 self.assertEqual(len([1, 2, 3, 4]), 4)
963 self.assertEqual(len({}), 0)
964 self.assertEqual(len({'a':1, 'b': 2}), 2)
965 class BadSeq:
966 def __len__(self):
967 raise ValueError
968 self.assertRaises(ValueError, len, BadSeq())
969
970 def test_list(self):
971 self.assertEqual(list([]), [])
972 l0_3 = [0, 1, 2, 3]
973 l0_3_bis = list(l0_3)
974 self.assertEqual(l0_3, l0_3_bis)
975 self.assert_(l0_3 is not l0_3_bis)
976 self.assertEqual(list(()), [])
977 self.assertEqual(list((0, 1, 2, 3)), [0, 1, 2, 3])
978 self.assertEqual(list(''), [])
979 self.assertEqual(list('spam'), ['s', 'p', 'a', 'm'])
980
981 if sys.maxint == 0x7fffffff:
982 # This test can currently only work on 32-bit machines.
983 # XXX If/when PySequence_Length() returns a ssize_t, it should be
984 # XXX re-enabled.
985 # Verify clearing of bug #556025.
986 # This assumes that the max data size (sys.maxint) == max
987 # address size this also assumes that the address size is at
988 # least 4 bytes with 8 byte addresses, the bug is not well
989 # tested
990 #
991 # Note: This test is expected to SEGV under Cygwin 1.3.12 or
992 # earlier due to a newlib bug. See the following mailing list
993 # thread for the details:
994
995 # http://sources.redhat.com/ml/newlib/2002/msg00369.html
996 self.assertRaises(MemoryError, list, xrange(sys.maxint // 2))
997
Raymond Hettingeraa241e02004-09-26 19:24:20 +0000998 # This code used to segfault in Py2.4a3
999 x = []
1000 x.extend(-y for y in x)
1001 self.assertEqual(x, [])
1002
Walter Dörwald919497e2003-01-19 16:23:59 +00001003 def test_long(self):
Guido van Rossume2a383d2007-01-15 16:59:06 +00001004 self.assertEqual(int(314), 314)
1005 self.assertEqual(int(3.14), 3)
1006 self.assertEqual(int(314), 314)
Walter Dörwald919497e2003-01-19 16:23:59 +00001007 # Check that conversion from float truncates towards zero
Guido van Rossume2a383d2007-01-15 16:59:06 +00001008 self.assertEqual(int(-3.14), -3)
1009 self.assertEqual(int(3.9), 3)
1010 self.assertEqual(int(-3.9), -3)
1011 self.assertEqual(int(3.5), 3)
1012 self.assertEqual(int(-3.5), -3)
1013 self.assertEqual(int("-3"), -3)
Walter Dörwald919497e2003-01-19 16:23:59 +00001014 if have_unicode:
Guido van Rossumef87d6e2007-05-02 19:09:54 +00001015 self.assertEqual(int(str("-3")), -3)
Walter Dörwald919497e2003-01-19 16:23:59 +00001016 # Different base:
Guido van Rossume2a383d2007-01-15 16:59:06 +00001017 self.assertEqual(int("10",16), 16)
Walter Dörwald919497e2003-01-19 16:23:59 +00001018 if have_unicode:
Guido van Rossumef87d6e2007-05-02 19:09:54 +00001019 self.assertEqual(int(str("10"),16), 16)
Walter Dörwald919497e2003-01-19 16:23:59 +00001020 # Check conversions from string (same test set as for int(), and then some)
1021 LL = [
Guido van Rossume2a383d2007-01-15 16:59:06 +00001022 ('1' + '0'*20, 10**20),
1023 ('1' + '0'*100, 10**100)
Walter Dörwald919497e2003-01-19 16:23:59 +00001024 ]
Walter Dörwaldc8cb5d92003-08-15 17:52:39 +00001025 L2 = L[:]
Walter Dörwald919497e2003-01-19 16:23:59 +00001026 if have_unicode:
1027 L2 += [
Guido van Rossumef87d6e2007-05-02 19:09:54 +00001028 (str('1') + str('0')*20, 10**20),
1029 (str('1') + str('0')*100, 10**100),
Walter Dörwald919497e2003-01-19 16:23:59 +00001030 ]
1031 for s, v in L2 + LL:
1032 for sign in "", "+", "-":
1033 for prefix in "", " ", "\t", " \t\t ":
1034 ss = prefix + sign + s
1035 vv = v
1036 if sign == "-" and v is not ValueError:
1037 vv = -v
1038 try:
Guido van Rossume2a383d2007-01-15 16:59:06 +00001039 self.assertEqual(int(ss), int(vv))
Walter Dörwald919497e2003-01-19 16:23:59 +00001040 except v:
1041 pass
1042
Guido van Rossume2a383d2007-01-15 16:59:06 +00001043 self.assertRaises(ValueError, int, '123\0')
1044 self.assertRaises(ValueError, int, '53', 40)
1045 self.assertRaises(TypeError, int, 1, 12)
Walter Dörwald919497e2003-01-19 16:23:59 +00001046
Guido van Rossumd8faa362007-04-27 19:54:29 +00001047 # SF patch #1638879: embedded NULs were not detected with
1048 # explicit base
1049 self.assertRaises(ValueError, int, '123\0', 10)
1050 self.assertRaises(ValueError, int, '123\x00 245', 20)
1051
Guido van Rossume2a383d2007-01-15 16:59:06 +00001052 self.assertEqual(int('100000000000000000000000000000000', 2),
Thomas Wouters477c8d52006-05-27 19:21:47 +00001053 4294967296)
Guido van Rossume2a383d2007-01-15 16:59:06 +00001054 self.assertEqual(int('102002022201221111211', 3), 4294967296)
1055 self.assertEqual(int('10000000000000000', 4), 4294967296)
1056 self.assertEqual(int('32244002423141', 5), 4294967296)
1057 self.assertEqual(int('1550104015504', 6), 4294967296)
1058 self.assertEqual(int('211301422354', 7), 4294967296)
1059 self.assertEqual(int('40000000000', 8), 4294967296)
1060 self.assertEqual(int('12068657454', 9), 4294967296)
1061 self.assertEqual(int('4294967296', 10), 4294967296)
1062 self.assertEqual(int('1904440554', 11), 4294967296)
1063 self.assertEqual(int('9ba461594', 12), 4294967296)
1064 self.assertEqual(int('535a79889', 13), 4294967296)
1065 self.assertEqual(int('2ca5b7464', 14), 4294967296)
1066 self.assertEqual(int('1a20dcd81', 15), 4294967296)
1067 self.assertEqual(int('100000000', 16), 4294967296)
1068 self.assertEqual(int('a7ffda91', 17), 4294967296)
1069 self.assertEqual(int('704he7g4', 18), 4294967296)
1070 self.assertEqual(int('4f5aff66', 19), 4294967296)
1071 self.assertEqual(int('3723ai4g', 20), 4294967296)
1072 self.assertEqual(int('281d55i4', 21), 4294967296)
1073 self.assertEqual(int('1fj8b184', 22), 4294967296)
1074 self.assertEqual(int('1606k7ic', 23), 4294967296)
1075 self.assertEqual(int('mb994ag', 24), 4294967296)
1076 self.assertEqual(int('hek2mgl', 25), 4294967296)
1077 self.assertEqual(int('dnchbnm', 26), 4294967296)
1078 self.assertEqual(int('b28jpdm', 27), 4294967296)
1079 self.assertEqual(int('8pfgih4', 28), 4294967296)
1080 self.assertEqual(int('76beigg', 29), 4294967296)
1081 self.assertEqual(int('5qmcpqg', 30), 4294967296)
1082 self.assertEqual(int('4q0jto4', 31), 4294967296)
1083 self.assertEqual(int('4000000', 32), 4294967296)
1084 self.assertEqual(int('3aokq94', 33), 4294967296)
1085 self.assertEqual(int('2qhxjli', 34), 4294967296)
1086 self.assertEqual(int('2br45qb', 35), 4294967296)
1087 self.assertEqual(int('1z141z4', 36), 4294967296)
Thomas Wouters477c8d52006-05-27 19:21:47 +00001088
Guido van Rossume2a383d2007-01-15 16:59:06 +00001089 self.assertEqual(int('100000000000000000000000000000001', 2),
Thomas Wouters477c8d52006-05-27 19:21:47 +00001090 4294967297)
Guido van Rossume2a383d2007-01-15 16:59:06 +00001091 self.assertEqual(int('102002022201221111212', 3), 4294967297)
1092 self.assertEqual(int('10000000000000001', 4), 4294967297)
1093 self.assertEqual(int('32244002423142', 5), 4294967297)
1094 self.assertEqual(int('1550104015505', 6), 4294967297)
1095 self.assertEqual(int('211301422355', 7), 4294967297)
1096 self.assertEqual(int('40000000001', 8), 4294967297)
1097 self.assertEqual(int('12068657455', 9), 4294967297)
1098 self.assertEqual(int('4294967297', 10), 4294967297)
1099 self.assertEqual(int('1904440555', 11), 4294967297)
1100 self.assertEqual(int('9ba461595', 12), 4294967297)
1101 self.assertEqual(int('535a7988a', 13), 4294967297)
1102 self.assertEqual(int('2ca5b7465', 14), 4294967297)
1103 self.assertEqual(int('1a20dcd82', 15), 4294967297)
1104 self.assertEqual(int('100000001', 16), 4294967297)
1105 self.assertEqual(int('a7ffda92', 17), 4294967297)
1106 self.assertEqual(int('704he7g5', 18), 4294967297)
1107 self.assertEqual(int('4f5aff67', 19), 4294967297)
1108 self.assertEqual(int('3723ai4h', 20), 4294967297)
1109 self.assertEqual(int('281d55i5', 21), 4294967297)
1110 self.assertEqual(int('1fj8b185', 22), 4294967297)
1111 self.assertEqual(int('1606k7id', 23), 4294967297)
1112 self.assertEqual(int('mb994ah', 24), 4294967297)
1113 self.assertEqual(int('hek2mgm', 25), 4294967297)
1114 self.assertEqual(int('dnchbnn', 26), 4294967297)
1115 self.assertEqual(int('b28jpdn', 27), 4294967297)
1116 self.assertEqual(int('8pfgih5', 28), 4294967297)
1117 self.assertEqual(int('76beigh', 29), 4294967297)
1118 self.assertEqual(int('5qmcpqh', 30), 4294967297)
1119 self.assertEqual(int('4q0jto5', 31), 4294967297)
1120 self.assertEqual(int('4000001', 32), 4294967297)
1121 self.assertEqual(int('3aokq95', 33), 4294967297)
1122 self.assertEqual(int('2qhxjlj', 34), 4294967297)
1123 self.assertEqual(int('2br45qc', 35), 4294967297)
1124 self.assertEqual(int('1z141z5', 36), 4294967297)
Thomas Wouters477c8d52006-05-27 19:21:47 +00001125
1126
Brett Cannonc3647ac2005-04-26 03:45:26 +00001127 def test_longconversion(self):
1128 # Test __long__()
1129 class Foo0:
1130 def __long__(self):
Guido van Rossume2a383d2007-01-15 16:59:06 +00001131 return 42
Brett Cannonc3647ac2005-04-26 03:45:26 +00001132
1133 class Foo1(object):
1134 def __long__(self):
Guido van Rossume2a383d2007-01-15 16:59:06 +00001135 return 42
Brett Cannonc3647ac2005-04-26 03:45:26 +00001136
Guido van Rossume2a383d2007-01-15 16:59:06 +00001137 class Foo2(int):
Brett Cannonc3647ac2005-04-26 03:45:26 +00001138 def __long__(self):
1139 return 42
1140
Guido van Rossume2a383d2007-01-15 16:59:06 +00001141 class Foo3(int):
1142 def __long__(self):
1143 return self
1144
1145 class Foo4(int):
1146 def __long__(self):
1147 return 42
1148
1149 class Foo5(int):
Brett Cannonc3647ac2005-04-26 03:45:26 +00001150 def __long__(self):
1151 return 42.
1152
Guido van Rossume2a383d2007-01-15 16:59:06 +00001153 self.assertEqual(int(Foo0()), 42)
1154 self.assertEqual(int(Foo1()), 42)
Guido van Rossumd8faa362007-04-27 19:54:29 +00001155 # XXX invokes __int__ now
Guido van Rossumddefaf32007-01-14 03:31:43 +00001156 # self.assertEqual(long(Foo2()), 42L)
Guido van Rossume2a383d2007-01-15 16:59:06 +00001157 self.assertEqual(int(Foo3()), 0)
Guido van Rossumd8faa362007-04-27 19:54:29 +00001158 # XXX likewise
Guido van Rossumddefaf32007-01-14 03:31:43 +00001159 # self.assertEqual(long(Foo4()), 42)
1160 # self.assertRaises(TypeError, long, Foo5())
Brett Cannonc3647ac2005-04-26 03:45:26 +00001161
Walter Dörwald919497e2003-01-19 16:23:59 +00001162 def test_map(self):
1163 self.assertEqual(
1164 map(None, 'hello world'),
1165 ['h','e','l','l','o',' ','w','o','r','l','d']
1166 )
1167 self.assertEqual(
1168 map(None, 'abcd', 'efg'),
1169 [('a', 'e'), ('b', 'f'), ('c', 'g'), ('d', None)]
1170 )
1171 self.assertEqual(
1172 map(None, range(10)),
1173 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
1174 )
1175 self.assertEqual(
1176 map(lambda x: x*x, range(1,4)),
1177 [1, 4, 9]
1178 )
1179 try:
1180 from math import sqrt
1181 except ImportError:
1182 def sqrt(x):
1183 return pow(x, 0.5)
1184 self.assertEqual(
1185 map(lambda x: map(sqrt,x), [[16, 4], [81, 9]]),
1186 [[4.0, 2.0], [9.0, 3.0]]
1187 )
1188 self.assertEqual(
1189 map(lambda x, y: x+y, [1,3,2], [9,1,4]),
1190 [10, 4, 6]
1191 )
1192
1193 def plus(*v):
1194 accu = 0
1195 for i in v: accu = accu + i
1196 return accu
1197 self.assertEqual(
1198 map(plus, [1, 3, 7]),
1199 [1, 3, 7]
1200 )
1201 self.assertEqual(
1202 map(plus, [1, 3, 7], [4, 9, 2]),
1203 [1+4, 3+9, 7+2]
1204 )
1205 self.assertEqual(
1206 map(plus, [1, 3, 7], [4, 9, 2], [1, 1, 0]),
1207 [1+4+1, 3+9+1, 7+2+0]
1208 )
1209 self.assertEqual(
1210 map(None, Squares(10)),
1211 [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
1212 )
1213 self.assertEqual(
1214 map(int, Squares(10)),
1215 [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
1216 )
1217 self.assertEqual(
1218 map(None, Squares(3), Squares(2)),
1219 [(0,0), (1,1), (4,None)]
1220 )
Guido van Rossum47b9ff62006-08-24 00:41:19 +00001221 def Max(a, b):
1222 if a is None:
1223 return b
1224 if b is None:
1225 return a
1226 return max(a, b)
Walter Dörwald919497e2003-01-19 16:23:59 +00001227 self.assertEqual(
Guido van Rossum47b9ff62006-08-24 00:41:19 +00001228 map(Max, Squares(3), Squares(2)),
Walter Dörwald919497e2003-01-19 16:23:59 +00001229 [0, 1, 4]
1230 )
1231 self.assertRaises(TypeError, map)
1232 self.assertRaises(TypeError, map, lambda x: x, 42)
1233 self.assertEqual(map(None, [42]), [42])
1234 class BadSeq:
1235 def __getitem__(self, index):
1236 raise ValueError
1237 self.assertRaises(ValueError, map, lambda x: x, BadSeq())
Neal Norwitzfcf44352005-11-27 20:37:43 +00001238 def badfunc(x):
1239 raise RuntimeError
1240 self.assertRaises(RuntimeError, map, badfunc, range(5))
Walter Dörwald919497e2003-01-19 16:23:59 +00001241
1242 def test_max(self):
1243 self.assertEqual(max('123123'), '3')
1244 self.assertEqual(max(1, 2, 3), 3)
1245 self.assertEqual(max((1, 2, 3, 1, 2, 3)), 3)
1246 self.assertEqual(max([1, 2, 3, 1, 2, 3]), 3)
1247
Guido van Rossume2a383d2007-01-15 16:59:06 +00001248 self.assertEqual(max(1, 2, 3.0), 3.0)
1249 self.assertEqual(max(1, 2.0, 3), 3)
1250 self.assertEqual(max(1.0, 2, 3), 3)
Walter Dörwald919497e2003-01-19 16:23:59 +00001251
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001252 for stmt in (
1253 "max(key=int)", # no args
1254 "max(1, key=int)", # single arg not iterable
1255 "max(1, 2, keystone=int)", # wrong keyword
1256 "max(1, 2, key=int, abc=int)", # two many keywords
1257 "max(1, 2, key=1)", # keyfunc is not callable
1258 ):
Tim Peters7f061872004-12-07 21:17:46 +00001259 try:
Georg Brandl7cae87c2006-09-06 06:51:57 +00001260 exec(stmt, globals())
Tim Peters7f061872004-12-07 21:17:46 +00001261 except TypeError:
1262 pass
1263 else:
1264 self.fail(stmt)
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001265
1266 self.assertEqual(max((1,), key=neg), 1) # one elem iterable
1267 self.assertEqual(max((1,2), key=neg), 1) # two elem iterable
1268 self.assertEqual(max(1, 2, key=neg), 1) # two elems
1269
1270 data = [random.randrange(200) for i in range(100)]
1271 keys = dict((elem, random.randrange(50)) for elem in data)
1272 f = keys.__getitem__
1273 self.assertEqual(max(data, key=f),
1274 sorted(reversed(data), key=f)[-1])
1275
Walter Dörwald919497e2003-01-19 16:23:59 +00001276 def test_min(self):
1277 self.assertEqual(min('123123'), '1')
1278 self.assertEqual(min(1, 2, 3), 1)
1279 self.assertEqual(min((1, 2, 3, 1, 2, 3)), 1)
1280 self.assertEqual(min([1, 2, 3, 1, 2, 3]), 1)
1281
Guido van Rossume2a383d2007-01-15 16:59:06 +00001282 self.assertEqual(min(1, 2, 3.0), 1)
1283 self.assertEqual(min(1, 2.0, 3), 1)
1284 self.assertEqual(min(1.0, 2, 3), 1.0)
Walter Dörwald919497e2003-01-19 16:23:59 +00001285
1286 self.assertRaises(TypeError, min)
1287 self.assertRaises(TypeError, min, 42)
1288 self.assertRaises(ValueError, min, ())
1289 class BadSeq:
1290 def __getitem__(self, index):
1291 raise ValueError
1292 self.assertRaises(ValueError, min, BadSeq())
1293 class BadNumber:
1294 def __cmp__(self, other):
1295 raise ValueError
Guido van Rossum47b9ff62006-08-24 00:41:19 +00001296 self.assertRaises(TypeError, min, (42, BadNumber()))
Walter Dörwald919497e2003-01-19 16:23:59 +00001297
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001298 for stmt in (
1299 "min(key=int)", # no args
1300 "min(1, key=int)", # single arg not iterable
1301 "min(1, 2, keystone=int)", # wrong keyword
1302 "min(1, 2, key=int, abc=int)", # two many keywords
1303 "min(1, 2, key=1)", # keyfunc is not callable
1304 ):
Tim Peters7f061872004-12-07 21:17:46 +00001305 try:
Georg Brandl7cae87c2006-09-06 06:51:57 +00001306 exec(stmt, globals())
Tim Peters7f061872004-12-07 21:17:46 +00001307 except TypeError:
1308 pass
1309 else:
1310 self.fail(stmt)
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001311
1312 self.assertEqual(min((1,), key=neg), 1) # one elem iterable
1313 self.assertEqual(min((1,2), key=neg), 2) # two elem iterable
1314 self.assertEqual(min(1, 2, key=neg), 2) # two elems
1315
1316 data = [random.randrange(200) for i in range(100)]
1317 keys = dict((elem, random.randrange(50)) for elem in data)
1318 f = keys.__getitem__
1319 self.assertEqual(min(data, key=f),
1320 sorted(data, key=f)[0])
1321
Georg Brandla18af4e2007-04-21 15:47:16 +00001322 def test_next(self):
1323 it = iter(range(2))
1324 self.assertEqual(next(it), 0)
1325 self.assertEqual(next(it), 1)
1326 self.assertRaises(StopIteration, next, it)
1327 self.assertRaises(StopIteration, next, it)
1328 self.assertEquals(next(it, 42), 42)
1329
1330 class Iter(object):
1331 def __iter__(self):
1332 return self
1333 def __next__(self):
1334 raise StopIteration
1335
1336 it = iter(Iter())
1337 self.assertEquals(next(it, 42), 42)
1338 self.assertRaises(StopIteration, next, it)
1339
1340 def gen():
1341 yield 1
1342 return
1343
1344 it = gen()
1345 self.assertEquals(next(it), 1)
1346 self.assertRaises(StopIteration, next, it)
1347 self.assertEquals(next(it, 42), 42)
1348
Walter Dörwald919497e2003-01-19 16:23:59 +00001349 def test_oct(self):
1350 self.assertEqual(oct(100), '0144')
Guido van Rossume2a383d2007-01-15 16:59:06 +00001351 self.assertEqual(oct(100), '0144')
Guido van Rossum6c9e1302003-11-29 23:52:13 +00001352 self.assertEqual(oct(-100), '-0144')
Guido van Rossume2a383d2007-01-15 16:59:06 +00001353 self.assertEqual(oct(-100), '-0144')
Walter Dörwald919497e2003-01-19 16:23:59 +00001354 self.assertRaises(TypeError, oct, ())
1355
1356 def write_testfile(self):
Guido van Rossuma88a0332007-02-26 16:59:55 +00001357 # NB the first 4 lines are also used to test input, below
Walter Dörwald919497e2003-01-19 16:23:59 +00001358 fp = open(TESTFN, 'w')
1359 try:
1360 fp.write('1+1\n')
1361 fp.write('1+1\n')
1362 fp.write('The quick brown fox jumps over the lazy dog')
1363 fp.write('.\n')
1364 fp.write('Dear John\n')
1365 fp.write('XXX'*100)
1366 fp.write('YYY'*100)
1367 finally:
1368 fp.close()
1369
1370 def test_open(self):
1371 self.write_testfile()
1372 fp = open(TESTFN, 'r')
1373 try:
1374 self.assertEqual(fp.readline(4), '1+1\n')
1375 self.assertEqual(fp.readline(4), '1+1\n')
1376 self.assertEqual(fp.readline(), 'The quick brown fox jumps over the lazy dog.\n')
1377 self.assertEqual(fp.readline(4), 'Dear')
1378 self.assertEqual(fp.readline(100), ' John\n')
1379 self.assertEqual(fp.read(300), 'XXX'*100)
1380 self.assertEqual(fp.read(1000), 'YYY'*100)
1381 finally:
1382 fp.close()
1383 unlink(TESTFN)
1384
1385 def test_ord(self):
1386 self.assertEqual(ord(' '), 32)
1387 self.assertEqual(ord('A'), 65)
1388 self.assertEqual(ord('a'), 97)
1389 if have_unicode:
Guido van Rossum84fc66d2007-05-03 17:18:26 +00001390 self.assertEqual(ord(chr(sys.maxunicode)), sys.maxunicode)
Walter Dörwald919497e2003-01-19 16:23:59 +00001391 self.assertRaises(TypeError, ord, 42)
Walter Dörwald4e41a4b2005-08-03 17:09:04 +00001392 if have_unicode:
Guido van Rossumef87d6e2007-05-02 19:09:54 +00001393 self.assertRaises(TypeError, ord, str("12"))
Walter Dörwald919497e2003-01-19 16:23:59 +00001394
1395 def test_pow(self):
1396 self.assertEqual(pow(0,0), 1)
1397 self.assertEqual(pow(0,1), 0)
1398 self.assertEqual(pow(1,0), 1)
1399 self.assertEqual(pow(1,1), 1)
1400
1401 self.assertEqual(pow(2,0), 1)
1402 self.assertEqual(pow(2,10), 1024)
1403 self.assertEqual(pow(2,20), 1024*1024)
1404 self.assertEqual(pow(2,30), 1024*1024*1024)
1405
1406 self.assertEqual(pow(-2,0), 1)
1407 self.assertEqual(pow(-2,1), -2)
1408 self.assertEqual(pow(-2,2), 4)
1409 self.assertEqual(pow(-2,3), -8)
1410
Guido van Rossume2a383d2007-01-15 16:59:06 +00001411 self.assertEqual(pow(0,0), 1)
1412 self.assertEqual(pow(0,1), 0)
1413 self.assertEqual(pow(1,0), 1)
1414 self.assertEqual(pow(1,1), 1)
Walter Dörwald919497e2003-01-19 16:23:59 +00001415
Guido van Rossume2a383d2007-01-15 16:59:06 +00001416 self.assertEqual(pow(2,0), 1)
1417 self.assertEqual(pow(2,10), 1024)
1418 self.assertEqual(pow(2,20), 1024*1024)
1419 self.assertEqual(pow(2,30), 1024*1024*1024)
Walter Dörwald919497e2003-01-19 16:23:59 +00001420
Guido van Rossume2a383d2007-01-15 16:59:06 +00001421 self.assertEqual(pow(-2,0), 1)
1422 self.assertEqual(pow(-2,1), -2)
1423 self.assertEqual(pow(-2,2), 4)
1424 self.assertEqual(pow(-2,3), -8)
Walter Dörwald919497e2003-01-19 16:23:59 +00001425
1426 self.assertAlmostEqual(pow(0.,0), 1.)
1427 self.assertAlmostEqual(pow(0.,1), 0.)
1428 self.assertAlmostEqual(pow(1.,0), 1.)
1429 self.assertAlmostEqual(pow(1.,1), 1.)
1430
1431 self.assertAlmostEqual(pow(2.,0), 1.)
1432 self.assertAlmostEqual(pow(2.,10), 1024.)
1433 self.assertAlmostEqual(pow(2.,20), 1024.*1024.)
1434 self.assertAlmostEqual(pow(2.,30), 1024.*1024.*1024.)
1435
1436 self.assertAlmostEqual(pow(-2.,0), 1.)
1437 self.assertAlmostEqual(pow(-2.,1), -2.)
1438 self.assertAlmostEqual(pow(-2.,2), 4.)
1439 self.assertAlmostEqual(pow(-2.,3), -8.)
1440
Guido van Rossume2a383d2007-01-15 16:59:06 +00001441 for x in 2, 2, 2.0:
1442 for y in 10, 10, 10.0:
1443 for z in 1000, 1000, 1000.0:
Walter Dörwald919497e2003-01-19 16:23:59 +00001444 if isinstance(x, float) or \
1445 isinstance(y, float) or \
1446 isinstance(z, float):
1447 self.assertRaises(TypeError, pow, x, y, z)
1448 else:
1449 self.assertAlmostEqual(pow(x, y, z), 24.0)
1450
1451 self.assertRaises(TypeError, pow, -1, -2, 3)
1452 self.assertRaises(ValueError, pow, 1, 2, 0)
Guido van Rossume2a383d2007-01-15 16:59:06 +00001453 self.assertRaises(TypeError, pow, -1, -2, 3)
1454 self.assertRaises(ValueError, pow, 1, 2, 0)
Walter Dörwald919497e2003-01-19 16:23:59 +00001455 self.assertRaises(ValueError, pow, -342.43, 0.234)
1456
1457 self.assertRaises(TypeError, pow)
1458
1459 def test_range(self):
1460 self.assertEqual(range(3), [0, 1, 2])
1461 self.assertEqual(range(1, 5), [1, 2, 3, 4])
1462 self.assertEqual(range(0), [])
1463 self.assertEqual(range(-3), [])
1464 self.assertEqual(range(1, 10, 3), [1, 4, 7])
1465 self.assertEqual(range(5, -5, -3), [5, 2, -1, -4])
1466
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001467 # Now test range() with longs
1468 self.assertEqual(range(-2**100), [])
1469 self.assertEqual(range(0, -2**100), [])
1470 self.assertEqual(range(0, 2**100, -1), [])
1471 self.assertEqual(range(0, 2**100, -1), [])
1472
Guido van Rossume2a383d2007-01-15 16:59:06 +00001473 a = int(10 * sys.maxint)
1474 b = int(100 * sys.maxint)
1475 c = int(50 * sys.maxint)
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001476
1477 self.assertEqual(range(a, a+2), [a, a+1])
Guido van Rossume2a383d2007-01-15 16:59:06 +00001478 self.assertEqual(range(a+2, a, -1), [a+2, a+1])
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001479 self.assertEqual(range(a+4, a, -2), [a+4, a+2])
1480
1481 seq = range(a, b, c)
1482 self.assert_(a in seq)
1483 self.assert_(b not in seq)
1484 self.assertEqual(len(seq), 2)
1485
1486 seq = range(b, a, -c)
1487 self.assert_(b in seq)
1488 self.assert_(a not in seq)
1489 self.assertEqual(len(seq), 2)
1490
1491 seq = range(-a, -b, -c)
1492 self.assert_(-a in seq)
1493 self.assert_(-b not in seq)
1494 self.assertEqual(len(seq), 2)
1495
Walter Dörwald919497e2003-01-19 16:23:59 +00001496 self.assertRaises(TypeError, range)
1497 self.assertRaises(TypeError, range, 1, 2, 3, 4)
1498 self.assertRaises(ValueError, range, 1, 2, 0)
Guido van Rossume2a383d2007-01-15 16:59:06 +00001499 self.assertRaises(ValueError, range, a, a + 1, int(0))
Neal Norwitzfcf44352005-11-27 20:37:43 +00001500
1501 class badzero(int):
Guido van Rossum47b9ff62006-08-24 00:41:19 +00001502 def __eq__(self, other):
Neal Norwitzfcf44352005-11-27 20:37:43 +00001503 raise RuntimeError
Guido van Rossum47b9ff62006-08-24 00:41:19 +00001504 __ne__ = __lt__ = __gt__ = __le__ = __ge__ = __eq__
1505
1506 # XXX This won't (but should!) raise RuntimeError if a is an int...
Neal Norwitzfcf44352005-11-27 20:37:43 +00001507 self.assertRaises(RuntimeError, range, a, a + 1, badzero(1))
Walter Dörwald919497e2003-01-19 16:23:59 +00001508
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001509 # Reject floats when it would require PyLongs to represent.
1510 # (smaller floats still accepted, but deprecated)
Tim Peters299b3df2003-04-15 14:40:03 +00001511 self.assertRaises(TypeError, range, 1e100, 1e101, 1e101)
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001512
Walter Dörwald357981e2003-04-15 18:59:28 +00001513 self.assertRaises(TypeError, range, 0, "spam")
1514 self.assertRaises(TypeError, range, 0, 42, "spam")
1515
1516 self.assertRaises(OverflowError, range, -sys.maxint, sys.maxint)
1517 self.assertRaises(OverflowError, range, 0, 2*sys.maxint)
1518
Guido van Rossuma88a0332007-02-26 16:59:55 +00001519 def test_input(self):
1520 self.write_testfile()
1521 fp = open(TESTFN, 'r')
1522 savestdin = sys.stdin
1523 savestdout = sys.stdout # Eats the echo
1524 try:
1525 sys.stdin = fp
1526 sys.stdout = BitBucket()
1527 self.assertEqual(input(), "1+1")
1528 self.assertEqual(input('testing\n'), "1+1")
1529 self.assertEqual(input(), 'The quick brown fox jumps over the lazy dog.')
1530 self.assertEqual(input('testing\n'), 'Dear John')
1531
1532 # SF 1535165: don't segfault on closed stdin
1533 # sys.stdout must be a regular file for triggering
1534 sys.stdout = savestdout
1535 sys.stdin.close()
1536 self.assertRaises(ValueError, input)
1537
1538 sys.stdout = BitBucket()
1539 sys.stdin = cStringIO.StringIO("NULL\0")
1540 self.assertRaises(TypeError, input, 42, 42)
1541 sys.stdin = cStringIO.StringIO(" 'whitespace'")
1542 self.assertEqual(input(), " 'whitespace'")
1543 sys.stdin = cStringIO.StringIO()
1544 self.assertRaises(EOFError, input)
1545
1546 del sys.stdout
1547 self.assertRaises(RuntimeError, input, 'prompt')
1548 del sys.stdin
1549 self.assertRaises(RuntimeError, input, 'prompt')
1550 finally:
1551 sys.stdin = savestdin
1552 sys.stdout = savestdout
1553 fp.close()
1554 unlink(TESTFN)
1555
Walter Dörwald919497e2003-01-19 16:23:59 +00001556 def test_reload(self):
1557 import marshal
1558 reload(marshal)
1559 import string
1560 reload(string)
1561 ## import sys
1562 ## self.assertRaises(ImportError, reload, sys)
1563
1564 def test_repr(self):
1565 self.assertEqual(repr(''), '\'\'')
1566 self.assertEqual(repr(0), '0')
Guido van Rossume2a383d2007-01-15 16:59:06 +00001567 self.assertEqual(repr(0), '0')
Walter Dörwald919497e2003-01-19 16:23:59 +00001568 self.assertEqual(repr(()), '()')
1569 self.assertEqual(repr([]), '[]')
1570 self.assertEqual(repr({}), '{}')
1571 a = []
1572 a.append(a)
1573 self.assertEqual(repr(a), '[[...]]')
1574 a = {}
1575 a[0] = a
1576 self.assertEqual(repr(a), '{0: {...}}')
1577
1578 def test_round(self):
1579 self.assertEqual(round(0.0), 0.0)
1580 self.assertEqual(round(1.0), 1.0)
1581 self.assertEqual(round(10.0), 10.0)
1582 self.assertEqual(round(1000000000.0), 1000000000.0)
1583 self.assertEqual(round(1e20), 1e20)
1584
1585 self.assertEqual(round(-1.0), -1.0)
1586 self.assertEqual(round(-10.0), -10.0)
1587 self.assertEqual(round(-1000000000.0), -1000000000.0)
1588 self.assertEqual(round(-1e20), -1e20)
1589
1590 self.assertEqual(round(0.1), 0.0)
1591 self.assertEqual(round(1.1), 1.0)
1592 self.assertEqual(round(10.1), 10.0)
1593 self.assertEqual(round(1000000000.1), 1000000000.0)
1594
1595 self.assertEqual(round(-1.1), -1.0)
1596 self.assertEqual(round(-10.1), -10.0)
1597 self.assertEqual(round(-1000000000.1), -1000000000.0)
1598
1599 self.assertEqual(round(0.9), 1.0)
1600 self.assertEqual(round(9.9), 10.0)
1601 self.assertEqual(round(999999999.9), 1000000000.0)
1602
1603 self.assertEqual(round(-0.9), -1.0)
1604 self.assertEqual(round(-9.9), -10.0)
1605 self.assertEqual(round(-999999999.9), -1000000000.0)
1606
1607 self.assertEqual(round(-8.0, -1), -10.0)
1608
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001609 # test new kwargs
1610 self.assertEqual(round(number=-8.0, ndigits=-1), -10.0)
1611
Walter Dörwald919497e2003-01-19 16:23:59 +00001612 self.assertRaises(TypeError, round)
1613
1614 def test_setattr(self):
Tim Petersf2715e02003-02-19 02:35:07 +00001615 setattr(sys, 'spam', 1)
1616 self.assertEqual(sys.spam, 1)
1617 self.assertRaises(TypeError, setattr, sys, 1, 'spam')
1618 self.assertRaises(TypeError, setattr)
Walter Dörwald919497e2003-01-19 16:23:59 +00001619
1620 def test_str(self):
1621 self.assertEqual(str(''), '')
1622 self.assertEqual(str(0), '0')
Guido van Rossume2a383d2007-01-15 16:59:06 +00001623 self.assertEqual(str(0), '0')
Walter Dörwald919497e2003-01-19 16:23:59 +00001624 self.assertEqual(str(()), '()')
1625 self.assertEqual(str([]), '[]')
1626 self.assertEqual(str({}), '{}')
1627 a = []
1628 a.append(a)
1629 self.assertEqual(str(a), '[[...]]')
1630 a = {}
1631 a[0] = a
1632 self.assertEqual(str(a), '{0: {...}}')
1633
Alex Martellia70b1912003-04-22 08:12:33 +00001634 def test_sum(self):
1635 self.assertEqual(sum([]), 0)
1636 self.assertEqual(sum(range(2,8)), 27)
1637 self.assertEqual(sum(iter(range(2,8))), 27)
1638 self.assertEqual(sum(Squares(10)), 285)
1639 self.assertEqual(sum(iter(Squares(10))), 285)
1640 self.assertEqual(sum([[1], [2], [3]], []), [1, 2, 3])
1641
1642 self.assertRaises(TypeError, sum)
1643 self.assertRaises(TypeError, sum, 42)
1644 self.assertRaises(TypeError, sum, ['a', 'b', 'c'])
1645 self.assertRaises(TypeError, sum, ['a', 'b', 'c'], '')
1646 self.assertRaises(TypeError, sum, [[1], [2], [3]])
1647 self.assertRaises(TypeError, sum, [{2:3}])
1648 self.assertRaises(TypeError, sum, [{2:3}]*2, {2:3})
1649
1650 class BadSeq:
1651 def __getitem__(self, index):
1652 raise ValueError
1653 self.assertRaises(ValueError, sum, BadSeq())
1654
Walter Dörwald919497e2003-01-19 16:23:59 +00001655 def test_tuple(self):
1656 self.assertEqual(tuple(()), ())
1657 t0_3 = (0, 1, 2, 3)
1658 t0_3_bis = tuple(t0_3)
1659 self.assert_(t0_3 is t0_3_bis)
1660 self.assertEqual(tuple([]), ())
1661 self.assertEqual(tuple([0, 1, 2, 3]), (0, 1, 2, 3))
1662 self.assertEqual(tuple(''), ())
1663 self.assertEqual(tuple('spam'), ('s', 'p', 'a', 'm'))
1664
1665 def test_type(self):
1666 self.assertEqual(type(''), type('123'))
1667 self.assertNotEqual(type(''), type(()))
1668
1669 def test_unichr(self):
1670 if have_unicode:
Guido van Rossum84fc66d2007-05-03 17:18:26 +00001671 self.assertEqual(chr(32), str(' '))
1672 self.assertEqual(chr(65), str('A'))
1673 self.assertEqual(chr(97), str('a'))
Walter Dörwald919497e2003-01-19 16:23:59 +00001674 self.assertEqual(
Guido van Rossum84fc66d2007-05-03 17:18:26 +00001675 chr(sys.maxunicode),
Guido van Rossumef87d6e2007-05-02 19:09:54 +00001676 str(('\\U%08x' % (sys.maxunicode)).encode("ascii"), 'unicode-escape')
Walter Dörwald919497e2003-01-19 16:23:59 +00001677 )
Guido van Rossum84fc66d2007-05-03 17:18:26 +00001678 self.assertRaises(ValueError, chr, sys.maxunicode+1)
1679 self.assertRaises(TypeError, chr)
Walter Dörwald919497e2003-01-19 16:23:59 +00001680
Guido van Rossumfee7b932005-01-16 00:21:28 +00001681 # We don't want self in vars(), so these are static methods
1682
1683 @staticmethod
Walter Dörwald919497e2003-01-19 16:23:59 +00001684 def get_vars_f0():
1685 return vars()
Walter Dörwald919497e2003-01-19 16:23:59 +00001686
Guido van Rossumfee7b932005-01-16 00:21:28 +00001687 @staticmethod
Walter Dörwald919497e2003-01-19 16:23:59 +00001688 def get_vars_f2():
1689 BuiltinTest.get_vars_f0()
1690 a = 1
1691 b = 2
1692 return vars()
Walter Dörwald919497e2003-01-19 16:23:59 +00001693
1694 def test_vars(self):
Raymond Hettingera690a992003-11-16 16:17:49 +00001695 self.assertEqual(set(vars()), set(dir()))
Walter Dörwald919497e2003-01-19 16:23:59 +00001696 import sys
Raymond Hettingera690a992003-11-16 16:17:49 +00001697 self.assertEqual(set(vars(sys)), set(dir(sys)))
Walter Dörwald919497e2003-01-19 16:23:59 +00001698 self.assertEqual(self.get_vars_f0(), {})
1699 self.assertEqual(self.get_vars_f2(), {'a': 1, 'b': 2})
1700 self.assertRaises(TypeError, vars, 42, 42)
1701 self.assertRaises(TypeError, vars, 42)
1702
1703 def test_zip(self):
1704 a = (1, 2, 3)
1705 b = (4, 5, 6)
1706 t = [(1, 4), (2, 5), (3, 6)]
Guido van Rossum801f0d72006-08-24 19:48:10 +00001707 self.assertEqual(list(zip(a, b)), t)
Walter Dörwald919497e2003-01-19 16:23:59 +00001708 b = [4, 5, 6]
Guido van Rossum801f0d72006-08-24 19:48:10 +00001709 self.assertEqual(list(zip(a, b)), t)
Walter Dörwald919497e2003-01-19 16:23:59 +00001710 b = (4, 5, 6, 7)
Guido van Rossum801f0d72006-08-24 19:48:10 +00001711 self.assertEqual(list(zip(a, b)), t)
Walter Dörwald919497e2003-01-19 16:23:59 +00001712 class I:
1713 def __getitem__(self, i):
1714 if i < 0 or i > 2: raise IndexError
1715 return i + 4
Guido van Rossum801f0d72006-08-24 19:48:10 +00001716 self.assertEqual(list(zip(a, I())), t)
1717 self.assertEqual(list(zip()), [])
1718 self.assertEqual(list(zip(*[])), [])
Walter Dörwald919497e2003-01-19 16:23:59 +00001719 self.assertRaises(TypeError, zip, None)
1720 class G:
1721 pass
1722 self.assertRaises(TypeError, zip, a, G())
1723
1724 # Make sure zip doesn't try to allocate a billion elements for the
1725 # result list when one of its arguments doesn't say how long it is.
1726 # A MemoryError is the most likely failure mode.
1727 class SequenceWithoutALength:
1728 def __getitem__(self, i):
1729 if i == 5:
1730 raise IndexError
1731 else:
1732 return i
1733 self.assertEqual(
Guido van Rossum801f0d72006-08-24 19:48:10 +00001734 list(zip(SequenceWithoutALength(), xrange(2**30))),
Walter Dörwald919497e2003-01-19 16:23:59 +00001735 list(enumerate(range(5)))
1736 )
1737
1738 class BadSeq:
1739 def __getitem__(self, i):
1740 if i == 5:
1741 raise ValueError
1742 else:
1743 return i
Guido van Rossum801f0d72006-08-24 19:48:10 +00001744 self.assertRaises(ValueError, list, zip(BadSeq(), BadSeq()))
Walter Dörwald919497e2003-01-19 16:23:59 +00001745
Raymond Hettinger64958a12003-12-17 20:43:33 +00001746class TestSorted(unittest.TestCase):
1747
1748 def test_basic(self):
1749 data = range(100)
1750 copy = data[:]
1751 random.shuffle(copy)
1752 self.assertEqual(data, sorted(copy))
1753 self.assertNotEqual(data, copy)
1754
1755 data.reverse()
1756 random.shuffle(copy)
Guido van Rossum47b9ff62006-08-24 00:41:19 +00001757 self.assertEqual(data, sorted(copy, cmp=lambda x, y: (x < y) - (x > y)))
Raymond Hettinger64958a12003-12-17 20:43:33 +00001758 self.assertNotEqual(data, copy)
1759 random.shuffle(copy)
1760 self.assertEqual(data, sorted(copy, key=lambda x: -x))
1761 self.assertNotEqual(data, copy)
1762 random.shuffle(copy)
1763 self.assertEqual(data, sorted(copy, reverse=1))
1764 self.assertNotEqual(data, copy)
1765
1766 def test_inputtypes(self):
1767 s = 'abracadabra'
Walter Dörwald4e41a4b2005-08-03 17:09:04 +00001768 types = [list, tuple]
1769 if have_unicode:
Guido van Rossumef87d6e2007-05-02 19:09:54 +00001770 types.insert(0, str)
Walter Dörwald4e41a4b2005-08-03 17:09:04 +00001771 for T in types:
Raymond Hettinger64958a12003-12-17 20:43:33 +00001772 self.assertEqual(sorted(s), sorted(T(s)))
1773
1774 s = ''.join(dict.fromkeys(s).keys()) # unique letters only
Walter Dörwald4e41a4b2005-08-03 17:09:04 +00001775 types = [set, frozenset, list, tuple, dict.fromkeys]
1776 if have_unicode:
Guido van Rossumef87d6e2007-05-02 19:09:54 +00001777 types.insert(0, str)
Walter Dörwald4e41a4b2005-08-03 17:09:04 +00001778 for T in types:
Raymond Hettinger64958a12003-12-17 20:43:33 +00001779 self.assertEqual(sorted(s), sorted(T(s)))
1780
1781 def test_baddecorator(self):
1782 data = 'The quick Brown fox Jumped over The lazy Dog'.split()
1783 self.assertRaises(TypeError, sorted, data, None, lambda x,y: 0)
1784
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001785def test_main(verbose=None):
1786 test_classes = (BuiltinTest, TestSorted)
1787
1788 run_unittest(*test_classes)
1789
1790 # verify reference counting
1791 if verbose and hasattr(sys, "gettotalrefcount"):
1792 import gc
1793 counts = [None] * 5
1794 for i in xrange(len(counts)):
1795 run_unittest(*test_classes)
1796 gc.collect()
1797 counts[i] = sys.gettotalrefcount()
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001798 print(counts)
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001799
Walter Dörwald919497e2003-01-19 16:23:59 +00001800
1801if __name__ == "__main__":
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001802 test_main(verbose=True)