blob: eae28b0e18fba02e5e45a0fe1e4e6bb2e4e38b3b [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')
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000211## bom = b'\xef\xbb\xbf'
212## compile(bom + b'print(1)\n', '', '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 Rossumf15a29f2007-05-04 00:41:39 +0000223 compile('print(u"\xe5")\n', '', '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)
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000341## bom = b'\xef\xbb\xbf'
342## self.assertEqual(eval(bom + b'a', globals, locals), 1)
343 self.assertEqual(eval('u"\xe5"', globals), u"\xe5")
Walter Dörwald919497e2003-01-19 16:23:59 +0000344 self.assertRaises(TypeError, eval)
345 self.assertRaises(TypeError, eval, ())
346
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000347 def test_general_eval(self):
348 # Tests that general mappings can be used for the locals argument
349
350 class M:
351 "Test mapping interface versus possible calls from eval()."
352 def __getitem__(self, key):
353 if key == 'a':
354 return 12
355 raise KeyError
Guido van Rossumcd70eee2007-02-11 18:53:00 +0000356 def keys(self):
357 return list('xyz')
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000358
359 m = M()
360 g = globals()
361 self.assertEqual(eval('a', g, m), 12)
362 self.assertRaises(NameError, eval, 'b', g, m)
363 self.assertEqual(eval('dir()', g, m), list('xyz'))
364 self.assertEqual(eval('globals()', g, m), g)
365 self.assertEqual(eval('locals()', g, m), m)
Raymond Hettinger513ffe82004-07-06 13:44:41 +0000366 self.assertRaises(TypeError, eval, 'a', m)
Raymond Hettinger66bd2332004-08-02 08:30:07 +0000367 class A:
368 "Non-mapping"
369 pass
370 m = A()
371 self.assertRaises(TypeError, eval, 'a', g, m)
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000372
373 # Verify that dict subclasses work as well
374 class D(dict):
375 def __getitem__(self, key):
376 if key == 'a':
377 return 12
378 return dict.__getitem__(self, key)
Guido van Rossumcd70eee2007-02-11 18:53:00 +0000379 def keys(self):
380 return list('xyz')
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000381
382 d = D()
383 self.assertEqual(eval('a', g, d), 12)
384 self.assertRaises(NameError, eval, 'b', g, d)
385 self.assertEqual(eval('dir()', g, d), list('xyz'))
386 self.assertEqual(eval('globals()', g, d), g)
387 self.assertEqual(eval('locals()', g, d), d)
388
389 # Verify locals stores (used by list comps)
390 eval('[locals() for i in (2,3)]', g, d)
391 eval('[locals() for i in (2,3)]', g, UserDict.UserDict())
392
393 class SpreadSheet:
394 "Sample application showing nested, calculated lookups."
395 _cells = {}
396 def __setitem__(self, key, formula):
397 self._cells[key] = formula
Thomas Wouters73e5a5b2006-06-08 15:35:45 +0000398 def __getitem__(self, key):
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000399 return eval(self._cells[key], globals(), self)
400
401 ss = SpreadSheet()
402 ss['a1'] = '5'
403 ss['a2'] = 'a1*6'
404 ss['a3'] = 'a2*7'
405 self.assertEqual(ss['a3'], 210)
406
Raymond Hettinger2a7dede2004-08-07 04:55:30 +0000407 # Verify that dir() catches a non-list returned by eval
408 # SF bug #1004669
409 class C:
410 def __getitem__(self, item):
411 raise KeyError(item)
Guido van Rossumcd70eee2007-02-11 18:53:00 +0000412 def keys(self):
413 return 1 # used to be 'a' but that's no longer an error
Raymond Hettinger2a7dede2004-08-07 04:55:30 +0000414 self.assertRaises(TypeError, eval, 'dir()', globals(), C())
415
Walter Dörwald919497e2003-01-19 16:23:59 +0000416 # Done outside of the method test_z to get the correct scope
417 z = 0
418 f = open(TESTFN, 'w')
419 f.write('z = z+1\n')
420 f.write('z = z*2\n')
421 f.close()
422 execfile(TESTFN)
423
424 def test_execfile(self):
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +0000425 global numruns
426 if numruns:
427 return
428 numruns += 1
Tim Peters7f061872004-12-07 21:17:46 +0000429
Walter Dörwald919497e2003-01-19 16:23:59 +0000430 globals = {'a': 1, 'b': 2}
431 locals = {'b': 200, 'c': 300}
432
433 self.assertEqual(self.__class__.z, 2)
434 globals['z'] = 0
435 execfile(TESTFN, globals)
436 self.assertEqual(globals['z'], 2)
437 locals['z'] = 0
438 execfile(TESTFN, globals, locals)
439 self.assertEqual(locals['z'], 2)
Raymond Hettinger66bd2332004-08-02 08:30:07 +0000440
441 class M:
442 "Test mapping interface versus possible calls from execfile()."
443 def __init__(self):
444 self.z = 10
445 def __getitem__(self, key):
446 if key == 'z':
447 return self.z
448 raise KeyError
449 def __setitem__(self, key, value):
450 if key == 'z':
451 self.z = value
452 return
453 raise KeyError
454
455 locals = M()
456 locals['z'] = 0
457 execfile(TESTFN, globals, locals)
458 self.assertEqual(locals['z'], 2)
459
Walter Dörwald919497e2003-01-19 16:23:59 +0000460 unlink(TESTFN)
461 self.assertRaises(TypeError, execfile)
Neal Norwitzfcf44352005-11-27 20:37:43 +0000462 self.assertRaises(TypeError, execfile, TESTFN, {}, ())
Walter Dörwald919497e2003-01-19 16:23:59 +0000463 import os
464 self.assertRaises(IOError, execfile, os.curdir)
465 self.assertRaises(IOError, execfile, "I_dont_exist")
466
Georg Brandl7cae87c2006-09-06 06:51:57 +0000467 def test_exec(self):
468 g = {}
469 exec('z = 1', g)
470 if '__builtins__' in g:
471 del g['__builtins__']
472 self.assertEqual(g, {'z': 1})
473
Guido van Rossumef87d6e2007-05-02 19:09:54 +0000474 exec('z = 1+1', g)
Georg Brandl7cae87c2006-09-06 06:51:57 +0000475 if '__builtins__' in g:
476 del g['__builtins__']
477 self.assertEqual(g, {'z': 2})
478 g = {}
479 l = {}
480
481 import warnings
482 warnings.filterwarnings("ignore", "global statement", module="<string>")
483 exec('global a; a = 1; b = 2', g, l)
484 if '__builtins__' in g:
485 del g['__builtins__']
486 if '__builtins__' in l:
487 del l['__builtins__']
488 self.assertEqual((g, l), ({'a': 1}, {'b': 2}))
489
Walter Dörwald919497e2003-01-19 16:23:59 +0000490 def test_filter(self):
491 self.assertEqual(filter(lambda c: 'a' <= c <= 'z', 'Hello World'), 'elloorld')
492 self.assertEqual(filter(None, [1, 'hello', [], [3], '', None, 9, 0]), [1, 'hello', [3], 9])
493 self.assertEqual(filter(lambda x: x > 0, [1, -3, 9, 0, 2]), [1, 9, 2])
494 self.assertEqual(filter(None, Squares(10)), [1, 4, 9, 16, 25, 36, 49, 64, 81])
495 self.assertEqual(filter(lambda x: x%2, Squares(10)), [1, 9, 25, 49, 81])
496 def identity(item):
497 return 1
498 filter(identity, Squares(5))
499 self.assertRaises(TypeError, filter)
500 class BadSeq(object):
Tim Petersf2715e02003-02-19 02:35:07 +0000501 def __getitem__(self, index):
502 if index<4:
503 return 42
504 raise ValueError
Walter Dörwald919497e2003-01-19 16:23:59 +0000505 self.assertRaises(ValueError, filter, lambda x: x, BadSeq())
506 def badfunc():
507 pass
508 self.assertRaises(TypeError, filter, badfunc, range(5))
509
Walter Dörwaldbf517072003-01-27 15:57:14 +0000510 # test bltinmodule.c::filtertuple()
Walter Dörwald919497e2003-01-19 16:23:59 +0000511 self.assertEqual(filter(None, (1, 2)), (1, 2))
512 self.assertEqual(filter(lambda x: x>=3, (1, 2, 3, 4)), (3, 4))
513 self.assertRaises(TypeError, filter, 42, (1, 2))
514
Walter Dörwaldbf517072003-01-27 15:57:14 +0000515 # test bltinmodule.c::filterstring()
Walter Dörwald919497e2003-01-19 16:23:59 +0000516 self.assertEqual(filter(None, "12"), "12")
517 self.assertEqual(filter(lambda x: x>="3", "1234"), "34")
518 self.assertRaises(TypeError, filter, 42, "12")
519 class badstr(str):
520 def __getitem__(self, index):
521 raise ValueError
522 self.assertRaises(ValueError, filter, lambda x: x >="3", badstr("1234"))
Walter Dörwaldbf517072003-01-27 15:57:14 +0000523
Walter Dörwald903f1e02003-02-04 16:28:00 +0000524 class badstr2(str):
525 def __getitem__(self, index):
526 return 42
527 self.assertRaises(TypeError, filter, lambda x: x >=42, badstr2("1234"))
528
529 class weirdstr(str):
530 def __getitem__(self, index):
531 return weirdstr(2*str.__getitem__(self, index))
532 self.assertEqual(filter(lambda x: x>="33", weirdstr("1234")), "3344")
533
Walter Dörwald5e61e242003-02-04 17:04:01 +0000534 class shiftstr(str):
535 def __getitem__(self, index):
536 return chr(ord(str.__getitem__(self, index))+1)
537 self.assertEqual(filter(lambda x: x>="3", shiftstr("1234")), "345")
538
Martin v. Löwis8afd7572003-01-25 22:46:11 +0000539 if have_unicode:
Walter Dörwaldbf517072003-01-27 15:57:14 +0000540 # test bltinmodule.c::filterunicode()
Guido van Rossumef87d6e2007-05-02 19:09:54 +0000541 self.assertEqual(filter(None, str("12")), str("12"))
542 self.assertEqual(filter(lambda x: x>="3", str("1234")), str("34"))
543 self.assertRaises(TypeError, filter, 42, str("12"))
544 self.assertRaises(ValueError, filter, lambda x: x >="3", badstr(str("1234")))
Walter Dörwald919497e2003-01-19 16:23:59 +0000545
Guido van Rossumef87d6e2007-05-02 19:09:54 +0000546 class badunicode(str):
Walter Dörwald903f1e02003-02-04 16:28:00 +0000547 def __getitem__(self, index):
548 return 42
549 self.assertRaises(TypeError, filter, lambda x: x >=42, badunicode("1234"))
550
Guido van Rossumef87d6e2007-05-02 19:09:54 +0000551 class weirdunicode(str):
Walter Dörwald903f1e02003-02-04 16:28:00 +0000552 def __getitem__(self, index):
Guido van Rossumef87d6e2007-05-02 19:09:54 +0000553 return weirdunicode(2*str.__getitem__(self, index))
Walter Dörwald903f1e02003-02-04 16:28:00 +0000554 self.assertEqual(
Guido van Rossumef87d6e2007-05-02 19:09:54 +0000555 filter(lambda x: x>=str("33"), weirdunicode("1234")), str("3344"))
Walter Dörwald903f1e02003-02-04 16:28:00 +0000556
Guido van Rossumef87d6e2007-05-02 19:09:54 +0000557 class shiftunicode(str):
Walter Dörwald5e61e242003-02-04 17:04:01 +0000558 def __getitem__(self, index):
Guido van Rossum84fc66d2007-05-03 17:18:26 +0000559 return chr(ord(str.__getitem__(self, index))+1)
Walter Dörwald5e61e242003-02-04 17:04:01 +0000560 self.assertEqual(
Guido van Rossumef87d6e2007-05-02 19:09:54 +0000561 filter(lambda x: x>=str("3"), shiftunicode("1234")),
562 str("345")
Walter Dörwald5e61e242003-02-04 17:04:01 +0000563 )
564
Walter Dörwaldc3da83f2003-02-04 20:24:45 +0000565 def test_filter_subclasses(self):
Walter Dörwaldc8cb5d92003-08-15 17:52:39 +0000566 # test that filter() never returns tuple, str or unicode subclasses
567 # and that the result always goes through __getitem__
568 funcs = (None, bool, lambda x: True)
Walter Dörwaldc3da83f2003-02-04 20:24:45 +0000569 class tuple2(tuple):
Walter Dörwald1918f772003-02-10 13:19:13 +0000570 def __getitem__(self, index):
571 return 2*tuple.__getitem__(self, index)
Walter Dörwaldc3da83f2003-02-04 20:24:45 +0000572 class str2(str):
Walter Dörwald1918f772003-02-10 13:19:13 +0000573 def __getitem__(self, index):
574 return 2*str.__getitem__(self, index)
Walter Dörwaldc3da83f2003-02-04 20:24:45 +0000575 inputs = {
Walter Dörwald8dd19322003-02-10 17:36:40 +0000576 tuple2: {(): (), (1, 2, 3): (2, 4, 6)},
Walter Dörwald1918f772003-02-10 13:19:13 +0000577 str2: {"": "", "123": "112233"}
Walter Dörwaldc3da83f2003-02-04 20:24:45 +0000578 }
579 if have_unicode:
Guido van Rossumef87d6e2007-05-02 19:09:54 +0000580 class unicode2(str):
Walter Dörwald1918f772003-02-10 13:19:13 +0000581 def __getitem__(self, index):
Guido van Rossumef87d6e2007-05-02 19:09:54 +0000582 return 2*str.__getitem__(self, index)
Walter Dörwald1918f772003-02-10 13:19:13 +0000583 inputs[unicode2] = {
Guido van Rossumef87d6e2007-05-02 19:09:54 +0000584 str(): str(),
585 str("123"): str("112233")
Walter Dörwald1918f772003-02-10 13:19:13 +0000586 }
Walter Dörwaldc3da83f2003-02-04 20:24:45 +0000587
Guido van Rossumcc2b0162007-02-11 06:12:03 +0000588 for (cls, inps) in inputs.items():
589 for (inp, exp) in inps.items():
Tim Petersf2715e02003-02-19 02:35:07 +0000590 # make sure the output goes through __getitem__
591 # even if func is None
592 self.assertEqual(
593 filter(funcs[0], cls(inp)),
594 filter(funcs[1], cls(inp))
595 )
596 for func in funcs:
Walter Dörwald1918f772003-02-10 13:19:13 +0000597 outp = filter(func, cls(inp))
598 self.assertEqual(outp, exp)
599 self.assert_(not isinstance(outp, cls))
Walter Dörwaldc3da83f2003-02-04 20:24:45 +0000600
Walter Dörwald919497e2003-01-19 16:23:59 +0000601 def test_float(self):
602 self.assertEqual(float(3.14), 3.14)
603 self.assertEqual(float(314), 314.0)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000604 self.assertEqual(float(314), 314.0)
Walter Dörwald919497e2003-01-19 16:23:59 +0000605 self.assertEqual(float(" 3.14 "), 3.14)
Neal Norwitze7214a12005-12-18 05:03:17 +0000606 self.assertRaises(ValueError, float, " 0x3.1 ")
607 self.assertRaises(ValueError, float, " -0x3.p-1 ")
Walter Dörwald919497e2003-01-19 16:23:59 +0000608 if have_unicode:
Guido van Rossumef87d6e2007-05-02 19:09:54 +0000609 self.assertEqual(float(str(" 3.14 ")), 3.14)
610 self.assertEqual(float(str(b" \u0663.\u0661\u0664 ",'raw-unicode-escape')), 3.14)
Walter Dörwaldede187f2005-11-29 15:45:14 +0000611 # Implementation limitation in PyFloat_FromString()
Guido van Rossumef87d6e2007-05-02 19:09:54 +0000612 self.assertRaises(ValueError, float, str("1"*10000))
Walter Dörwald919497e2003-01-19 16:23:59 +0000613
Thomas Wouters477c8d52006-05-27 19:21:47 +0000614 @run_with_locale('LC_NUMERIC', 'fr_FR', 'de_DE')
Neal Norwitz5898fa22005-11-22 05:17:40 +0000615 def test_float_with_comma(self):
616 # set locale to something that doesn't use '.' for the decimal point
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000617 # float must not accept the locale specific decimal point but
618 # it still has to accept the normal python syntac
Thomas Wouters477c8d52006-05-27 19:21:47 +0000619 import locale
620 if not locale.localeconv()['decimal_point'] == ',':
Neal Norwitz5898fa22005-11-22 05:17:40 +0000621 return
622
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000623 self.assertEqual(float(" 3.14 "), 3.14)
624 self.assertEqual(float("+3.14 "), 3.14)
625 self.assertEqual(float("-3.14 "), -3.14)
626 self.assertEqual(float(".14 "), .14)
627 self.assertEqual(float("3. "), 3.0)
628 self.assertEqual(float("3.e3 "), 3000.0)
629 self.assertEqual(float("3.2e3 "), 3200.0)
630 self.assertEqual(float("2.5e-1 "), 0.25)
631 self.assertEqual(float("5e-1"), 0.5)
632 self.assertRaises(ValueError, float, " 3,14 ")
633 self.assertRaises(ValueError, float, " +3,14 ")
634 self.assertRaises(ValueError, float, " -3,14 ")
Thomas Wouters477c8d52006-05-27 19:21:47 +0000635 self.assertRaises(ValueError, float, " 0x3.1 ")
636 self.assertRaises(ValueError, float, " -0x3.p-1 ")
637 self.assertEqual(float(" 25.e-1 "), 2.5)
638 self.assertEqual(fcmp(float(" .25e-1 "), .025), 0)
Neal Norwitz5898fa22005-11-22 05:17:40 +0000639
Brett Cannonc3647ac2005-04-26 03:45:26 +0000640 def test_floatconversion(self):
641 # Make sure that calls to __float__() work properly
642 class Foo0:
643 def __float__(self):
644 return 42.
645
646 class Foo1(object):
647 def __float__(self):
648 return 42.
649
650 class Foo2(float):
651 def __float__(self):
652 return 42.
653
654 class Foo3(float):
655 def __new__(cls, value=0.):
656 return float.__new__(cls, 2*value)
657
658 def __float__(self):
659 return self
660
661 class Foo4(float):
662 def __float__(self):
663 return 42
664
665 self.assertAlmostEqual(float(Foo0()), 42.)
666 self.assertAlmostEqual(float(Foo1()), 42.)
667 self.assertAlmostEqual(float(Foo2()), 42.)
668 self.assertAlmostEqual(float(Foo3(21)), 42.)
669 self.assertRaises(TypeError, float, Foo4(42))
670
Walter Dörwald919497e2003-01-19 16:23:59 +0000671 def test_getattr(self):
672 import sys
673 self.assert_(getattr(sys, 'stdout') is sys.stdout)
674 self.assertRaises(TypeError, getattr, sys, 1)
675 self.assertRaises(TypeError, getattr, sys, 1, "foo")
676 self.assertRaises(TypeError, getattr)
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000677 self.assertRaises(AttributeError, getattr, sys, chr(sys.maxunicode))
Walter Dörwald919497e2003-01-19 16:23:59 +0000678
679 def test_hasattr(self):
680 import sys
681 self.assert_(hasattr(sys, 'stdout'))
682 self.assertRaises(TypeError, hasattr, sys, 1)
683 self.assertRaises(TypeError, hasattr)
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000684 self.assertEqual(False, hasattr(sys, chr(sys.maxunicode)))
Walter Dörwald919497e2003-01-19 16:23:59 +0000685
686 def test_hash(self):
687 hash(None)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000688 self.assertEqual(hash(1), hash(1))
Walter Dörwald919497e2003-01-19 16:23:59 +0000689 self.assertEqual(hash(1), hash(1.0))
690 hash('spam')
691 if have_unicode:
Guido van Rossumef87d6e2007-05-02 19:09:54 +0000692 self.assertEqual(hash('spam'), hash(str('spam')))
Walter Dörwald919497e2003-01-19 16:23:59 +0000693 hash((0,1,2,3))
694 def f(): pass
695 self.assertRaises(TypeError, hash, [])
696 self.assertRaises(TypeError, hash, {})
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000697 # Bug 1536021: Allow hash to return long objects
698 class X:
699 def __hash__(self):
700 return 2**100
701 self.assertEquals(type(hash(X())), int)
702 class Y(object):
703 def __hash__(self):
704 return 2**100
705 self.assertEquals(type(hash(Y())), int)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000706 class Z(int):
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000707 def __hash__(self):
708 return self
Guido van Rossume2a383d2007-01-15 16:59:06 +0000709 self.assertEquals(hash(Z(42)), hash(42))
Walter Dörwald919497e2003-01-19 16:23:59 +0000710
711 def test_hex(self):
712 self.assertEqual(hex(16), '0x10')
Guido van Rossume2a383d2007-01-15 16:59:06 +0000713 self.assertEqual(hex(16), '0x10')
Guido van Rossum6c9e1302003-11-29 23:52:13 +0000714 self.assertEqual(hex(-16), '-0x10')
Guido van Rossume2a383d2007-01-15 16:59:06 +0000715 self.assertEqual(hex(-16), '-0x10')
Walter Dörwald919497e2003-01-19 16:23:59 +0000716 self.assertRaises(TypeError, hex, {})
717
718 def test_id(self):
719 id(None)
720 id(1)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000721 id(1)
Walter Dörwald919497e2003-01-19 16:23:59 +0000722 id(1.0)
723 id('spam')
724 id((0,1,2,3))
725 id([0,1,2,3])
726 id({'spam': 1, 'eggs': 2, 'ham': 3})
727
Guido van Rossuma88a0332007-02-26 16:59:55 +0000728 # Test input() later, alphabetized as if it were raw_input
729
Walter Dörwald919497e2003-01-19 16:23:59 +0000730 def test_int(self):
731 self.assertEqual(int(314), 314)
732 self.assertEqual(int(3.14), 3)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000733 self.assertEqual(int(314), 314)
Walter Dörwald919497e2003-01-19 16:23:59 +0000734 # Check that conversion from float truncates towards zero
735 self.assertEqual(int(-3.14), -3)
736 self.assertEqual(int(3.9), 3)
737 self.assertEqual(int(-3.9), -3)
738 self.assertEqual(int(3.5), 3)
739 self.assertEqual(int(-3.5), -3)
740 # Different base:
Guido van Rossume2a383d2007-01-15 16:59:06 +0000741 self.assertEqual(int("10",16), 16)
Walter Dörwald919497e2003-01-19 16:23:59 +0000742 if have_unicode:
Guido van Rossumef87d6e2007-05-02 19:09:54 +0000743 self.assertEqual(int(str("10"),16), 16)
Walter Dörwald919497e2003-01-19 16:23:59 +0000744 # Test conversion from strings and various anomalies
745 for s, v in L:
746 for sign in "", "+", "-":
747 for prefix in "", " ", "\t", " \t\t ":
748 ss = prefix + sign + s
749 vv = v
750 if sign == "-" and v is not ValueError:
751 vv = -v
752 try:
753 self.assertEqual(int(ss), vv)
754 except v:
755 pass
756
Walter Dörwald70a6b492004-02-12 17:35:32 +0000757 s = repr(-1-sys.maxint)
Thomas Wouters89f507f2006-12-13 04:49:30 +0000758 x = int(s)
759 self.assertEqual(x+1, -sys.maxint)
760 self.assert_(isinstance(x, int))
Walter Dörwald919497e2003-01-19 16:23:59 +0000761 # should return long
Thomas Wouters89f507f2006-12-13 04:49:30 +0000762 self.assertEqual(int(s[1:]), sys.maxint+1)
Walter Dörwald919497e2003-01-19 16:23:59 +0000763
764 # should return long
765 x = int(1e100)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000766 self.assert_(isinstance(x, int))
Walter Dörwald919497e2003-01-19 16:23:59 +0000767 x = int(-1e100)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000768 self.assert_(isinstance(x, int))
Walter Dörwald919497e2003-01-19 16:23:59 +0000769
770
771 # SF bug 434186: 0x80000000/2 != 0x80000000>>1.
772 # Worked by accident in Windows release build, but failed in debug build.
773 # Failed in all Linux builds.
774 x = -1-sys.maxint
775 self.assertEqual(x >> 1, x//2)
776
777 self.assertRaises(ValueError, int, '123\0')
778 self.assertRaises(ValueError, int, '53', 40)
779
Thomas Wouters89f507f2006-12-13 04:49:30 +0000780 # SF bug 1545497: embedded NULs were not detected with
781 # explicit base
782 self.assertRaises(ValueError, int, '123\0', 10)
783 self.assertRaises(ValueError, int, '123\x00 245', 20)
784
Walter Dörwald919497e2003-01-19 16:23:59 +0000785 x = int('1' * 600)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000786 self.assert_(isinstance(x, int))
Walter Dörwald919497e2003-01-19 16:23:59 +0000787
788 if have_unicode:
Guido van Rossum84fc66d2007-05-03 17:18:26 +0000789 x = int(chr(0x661) * 600)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000790 self.assert_(isinstance(x, int))
Walter Dörwald919497e2003-01-19 16:23:59 +0000791
792 self.assertRaises(TypeError, int, 1, 12)
793
794 self.assertEqual(int('0123', 0), 83)
Neal Norwitz5898fa22005-11-22 05:17:40 +0000795 self.assertEqual(int('0x123', 16), 291)
Walter Dörwald919497e2003-01-19 16:23:59 +0000796
Thomas Wouters477c8d52006-05-27 19:21:47 +0000797 # SF bug 1334662: int(string, base) wrong answers
798 # Various representations of 2**32 evaluated to 0
799 # rather than 2**32 in previous versions
800
Guido van Rossume2a383d2007-01-15 16:59:06 +0000801 self.assertEqual(int('100000000000000000000000000000000', 2), 4294967296)
802 self.assertEqual(int('102002022201221111211', 3), 4294967296)
803 self.assertEqual(int('10000000000000000', 4), 4294967296)
804 self.assertEqual(int('32244002423141', 5), 4294967296)
805 self.assertEqual(int('1550104015504', 6), 4294967296)
806 self.assertEqual(int('211301422354', 7), 4294967296)
807 self.assertEqual(int('40000000000', 8), 4294967296)
808 self.assertEqual(int('12068657454', 9), 4294967296)
809 self.assertEqual(int('4294967296', 10), 4294967296)
810 self.assertEqual(int('1904440554', 11), 4294967296)
811 self.assertEqual(int('9ba461594', 12), 4294967296)
812 self.assertEqual(int('535a79889', 13), 4294967296)
813 self.assertEqual(int('2ca5b7464', 14), 4294967296)
814 self.assertEqual(int('1a20dcd81', 15), 4294967296)
815 self.assertEqual(int('100000000', 16), 4294967296)
816 self.assertEqual(int('a7ffda91', 17), 4294967296)
817 self.assertEqual(int('704he7g4', 18), 4294967296)
818 self.assertEqual(int('4f5aff66', 19), 4294967296)
819 self.assertEqual(int('3723ai4g', 20), 4294967296)
820 self.assertEqual(int('281d55i4', 21), 4294967296)
821 self.assertEqual(int('1fj8b184', 22), 4294967296)
822 self.assertEqual(int('1606k7ic', 23), 4294967296)
823 self.assertEqual(int('mb994ag', 24), 4294967296)
824 self.assertEqual(int('hek2mgl', 25), 4294967296)
825 self.assertEqual(int('dnchbnm', 26), 4294967296)
826 self.assertEqual(int('b28jpdm', 27), 4294967296)
827 self.assertEqual(int('8pfgih4', 28), 4294967296)
828 self.assertEqual(int('76beigg', 29), 4294967296)
829 self.assertEqual(int('5qmcpqg', 30), 4294967296)
830 self.assertEqual(int('4q0jto4', 31), 4294967296)
831 self.assertEqual(int('4000000', 32), 4294967296)
832 self.assertEqual(int('3aokq94', 33), 4294967296)
833 self.assertEqual(int('2qhxjli', 34), 4294967296)
834 self.assertEqual(int('2br45qb', 35), 4294967296)
835 self.assertEqual(int('1z141z4', 36), 4294967296)
Thomas Wouters477c8d52006-05-27 19:21:47 +0000836
837 # SF bug 1334662: int(string, base) wrong answers
838 # Checks for proper evaluation of 2**32 + 1
Guido van Rossume2a383d2007-01-15 16:59:06 +0000839 self.assertEqual(int('100000000000000000000000000000001', 2), 4294967297)
840 self.assertEqual(int('102002022201221111212', 3), 4294967297)
841 self.assertEqual(int('10000000000000001', 4), 4294967297)
842 self.assertEqual(int('32244002423142', 5), 4294967297)
843 self.assertEqual(int('1550104015505', 6), 4294967297)
844 self.assertEqual(int('211301422355', 7), 4294967297)
845 self.assertEqual(int('40000000001', 8), 4294967297)
846 self.assertEqual(int('12068657455', 9), 4294967297)
847 self.assertEqual(int('4294967297', 10), 4294967297)
848 self.assertEqual(int('1904440555', 11), 4294967297)
849 self.assertEqual(int('9ba461595', 12), 4294967297)
850 self.assertEqual(int('535a7988a', 13), 4294967297)
851 self.assertEqual(int('2ca5b7465', 14), 4294967297)
852 self.assertEqual(int('1a20dcd82', 15), 4294967297)
853 self.assertEqual(int('100000001', 16), 4294967297)
854 self.assertEqual(int('a7ffda92', 17), 4294967297)
855 self.assertEqual(int('704he7g5', 18), 4294967297)
856 self.assertEqual(int('4f5aff67', 19), 4294967297)
857 self.assertEqual(int('3723ai4h', 20), 4294967297)
858 self.assertEqual(int('281d55i5', 21), 4294967297)
859 self.assertEqual(int('1fj8b185', 22), 4294967297)
860 self.assertEqual(int('1606k7id', 23), 4294967297)
861 self.assertEqual(int('mb994ah', 24), 4294967297)
862 self.assertEqual(int('hek2mgm', 25), 4294967297)
863 self.assertEqual(int('dnchbnn', 26), 4294967297)
864 self.assertEqual(int('b28jpdn', 27), 4294967297)
865 self.assertEqual(int('8pfgih5', 28), 4294967297)
866 self.assertEqual(int('76beigh', 29), 4294967297)
867 self.assertEqual(int('5qmcpqh', 30), 4294967297)
868 self.assertEqual(int('4q0jto5', 31), 4294967297)
869 self.assertEqual(int('4000001', 32), 4294967297)
870 self.assertEqual(int('3aokq95', 33), 4294967297)
871 self.assertEqual(int('2qhxjlj', 34), 4294967297)
872 self.assertEqual(int('2br45qc', 35), 4294967297)
873 self.assertEqual(int('1z141z5', 36), 4294967297)
Thomas Wouters477c8d52006-05-27 19:21:47 +0000874
Brett Cannonc3647ac2005-04-26 03:45:26 +0000875 def test_intconversion(self):
876 # Test __int__()
877 class Foo0:
878 def __int__(self):
879 return 42
880
881 class Foo1(object):
882 def __int__(self):
883 return 42
884
885 class Foo2(int):
886 def __int__(self):
887 return 42
888
889 class Foo3(int):
890 def __int__(self):
891 return self
892
893 class Foo4(int):
894 def __int__(self):
Guido van Rossume2a383d2007-01-15 16:59:06 +0000895 return 42
Brett Cannonc3647ac2005-04-26 03:45:26 +0000896
897 class Foo5(int):
898 def __int__(self):
899 return 42.
900
901 self.assertEqual(int(Foo0()), 42)
902 self.assertEqual(int(Foo1()), 42)
903 self.assertEqual(int(Foo2()), 42)
904 self.assertEqual(int(Foo3()), 0)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000905 self.assertEqual(int(Foo4()), 42)
Brett Cannonc3647ac2005-04-26 03:45:26 +0000906 self.assertRaises(TypeError, int, Foo5())
907
Walter Dörwald919497e2003-01-19 16:23:59 +0000908 def test_iter(self):
909 self.assertRaises(TypeError, iter)
910 self.assertRaises(TypeError, iter, 42, 42)
911 lists = [("1", "2"), ["1", "2"], "12"]
912 if have_unicode:
Guido van Rossumef87d6e2007-05-02 19:09:54 +0000913 lists.append(str("12"))
Walter Dörwald919497e2003-01-19 16:23:59 +0000914 for l in lists:
915 i = iter(l)
Georg Brandla18af4e2007-04-21 15:47:16 +0000916 self.assertEqual(next(i), '1')
917 self.assertEqual(next(i), '2')
918 self.assertRaises(StopIteration, next, i)
Walter Dörwald919497e2003-01-19 16:23:59 +0000919
920 def test_isinstance(self):
921 class C:
922 pass
923 class D(C):
924 pass
925 class E:
926 pass
927 c = C()
928 d = D()
929 e = E()
930 self.assert_(isinstance(c, C))
931 self.assert_(isinstance(d, C))
932 self.assert_(not isinstance(e, C))
933 self.assert_(not isinstance(c, D))
934 self.assert_(not isinstance('foo', E))
935 self.assertRaises(TypeError, isinstance, E, 'foo')
936 self.assertRaises(TypeError, isinstance)
937
938 def test_issubclass(self):
939 class C:
940 pass
941 class D(C):
942 pass
943 class E:
944 pass
945 c = C()
946 d = D()
947 e = E()
948 self.assert_(issubclass(D, C))
949 self.assert_(issubclass(C, C))
950 self.assert_(not issubclass(C, D))
951 self.assertRaises(TypeError, issubclass, 'foo', E)
952 self.assertRaises(TypeError, issubclass, E, 'foo')
953 self.assertRaises(TypeError, issubclass)
954
955 def test_len(self):
956 self.assertEqual(len('123'), 3)
957 self.assertEqual(len(()), 0)
958 self.assertEqual(len((1, 2, 3, 4)), 4)
959 self.assertEqual(len([1, 2, 3, 4]), 4)
960 self.assertEqual(len({}), 0)
961 self.assertEqual(len({'a':1, 'b': 2}), 2)
962 class BadSeq:
963 def __len__(self):
964 raise ValueError
965 self.assertRaises(ValueError, len, BadSeq())
966
967 def test_list(self):
968 self.assertEqual(list([]), [])
969 l0_3 = [0, 1, 2, 3]
970 l0_3_bis = list(l0_3)
971 self.assertEqual(l0_3, l0_3_bis)
972 self.assert_(l0_3 is not l0_3_bis)
973 self.assertEqual(list(()), [])
974 self.assertEqual(list((0, 1, 2, 3)), [0, 1, 2, 3])
975 self.assertEqual(list(''), [])
976 self.assertEqual(list('spam'), ['s', 'p', 'a', 'm'])
977
978 if sys.maxint == 0x7fffffff:
979 # This test can currently only work on 32-bit machines.
980 # XXX If/when PySequence_Length() returns a ssize_t, it should be
981 # XXX re-enabled.
982 # Verify clearing of bug #556025.
983 # This assumes that the max data size (sys.maxint) == max
984 # address size this also assumes that the address size is at
985 # least 4 bytes with 8 byte addresses, the bug is not well
986 # tested
987 #
988 # Note: This test is expected to SEGV under Cygwin 1.3.12 or
989 # earlier due to a newlib bug. See the following mailing list
990 # thread for the details:
991
992 # http://sources.redhat.com/ml/newlib/2002/msg00369.html
993 self.assertRaises(MemoryError, list, xrange(sys.maxint // 2))
994
Raymond Hettingeraa241e02004-09-26 19:24:20 +0000995 # This code used to segfault in Py2.4a3
996 x = []
997 x.extend(-y for y in x)
998 self.assertEqual(x, [])
999
Walter Dörwald919497e2003-01-19 16:23:59 +00001000 def test_long(self):
Guido van Rossume2a383d2007-01-15 16:59:06 +00001001 self.assertEqual(int(314), 314)
1002 self.assertEqual(int(3.14), 3)
1003 self.assertEqual(int(314), 314)
Walter Dörwald919497e2003-01-19 16:23:59 +00001004 # Check that conversion from float truncates towards zero
Guido van Rossume2a383d2007-01-15 16:59:06 +00001005 self.assertEqual(int(-3.14), -3)
1006 self.assertEqual(int(3.9), 3)
1007 self.assertEqual(int(-3.9), -3)
1008 self.assertEqual(int(3.5), 3)
1009 self.assertEqual(int(-3.5), -3)
1010 self.assertEqual(int("-3"), -3)
Walter Dörwald919497e2003-01-19 16:23:59 +00001011 if have_unicode:
Guido van Rossumef87d6e2007-05-02 19:09:54 +00001012 self.assertEqual(int(str("-3")), -3)
Walter Dörwald919497e2003-01-19 16:23:59 +00001013 # Different base:
Guido van Rossume2a383d2007-01-15 16:59:06 +00001014 self.assertEqual(int("10",16), 16)
Walter Dörwald919497e2003-01-19 16:23:59 +00001015 if have_unicode:
Guido van Rossumef87d6e2007-05-02 19:09:54 +00001016 self.assertEqual(int(str("10"),16), 16)
Walter Dörwald919497e2003-01-19 16:23:59 +00001017 # Check conversions from string (same test set as for int(), and then some)
1018 LL = [
Guido van Rossume2a383d2007-01-15 16:59:06 +00001019 ('1' + '0'*20, 10**20),
1020 ('1' + '0'*100, 10**100)
Walter Dörwald919497e2003-01-19 16:23:59 +00001021 ]
Walter Dörwaldc8cb5d92003-08-15 17:52:39 +00001022 L2 = L[:]
Walter Dörwald919497e2003-01-19 16:23:59 +00001023 if have_unicode:
1024 L2 += [
Guido van Rossumef87d6e2007-05-02 19:09:54 +00001025 (str('1') + str('0')*20, 10**20),
1026 (str('1') + str('0')*100, 10**100),
Walter Dörwald919497e2003-01-19 16:23:59 +00001027 ]
1028 for s, v in L2 + LL:
1029 for sign in "", "+", "-":
1030 for prefix in "", " ", "\t", " \t\t ":
1031 ss = prefix + sign + s
1032 vv = v
1033 if sign == "-" and v is not ValueError:
1034 vv = -v
1035 try:
Guido van Rossume2a383d2007-01-15 16:59:06 +00001036 self.assertEqual(int(ss), int(vv))
Walter Dörwald919497e2003-01-19 16:23:59 +00001037 except v:
1038 pass
1039
Guido van Rossume2a383d2007-01-15 16:59:06 +00001040 self.assertRaises(ValueError, int, '123\0')
1041 self.assertRaises(ValueError, int, '53', 40)
1042 self.assertRaises(TypeError, int, 1, 12)
Walter Dörwald919497e2003-01-19 16:23:59 +00001043
Guido van Rossumd8faa362007-04-27 19:54:29 +00001044 # SF patch #1638879: embedded NULs were not detected with
1045 # explicit base
1046 self.assertRaises(ValueError, int, '123\0', 10)
1047 self.assertRaises(ValueError, int, '123\x00 245', 20)
1048
Guido van Rossume2a383d2007-01-15 16:59:06 +00001049 self.assertEqual(int('100000000000000000000000000000000', 2),
Thomas Wouters477c8d52006-05-27 19:21:47 +00001050 4294967296)
Guido van Rossume2a383d2007-01-15 16:59:06 +00001051 self.assertEqual(int('102002022201221111211', 3), 4294967296)
1052 self.assertEqual(int('10000000000000000', 4), 4294967296)
1053 self.assertEqual(int('32244002423141', 5), 4294967296)
1054 self.assertEqual(int('1550104015504', 6), 4294967296)
1055 self.assertEqual(int('211301422354', 7), 4294967296)
1056 self.assertEqual(int('40000000000', 8), 4294967296)
1057 self.assertEqual(int('12068657454', 9), 4294967296)
1058 self.assertEqual(int('4294967296', 10), 4294967296)
1059 self.assertEqual(int('1904440554', 11), 4294967296)
1060 self.assertEqual(int('9ba461594', 12), 4294967296)
1061 self.assertEqual(int('535a79889', 13), 4294967296)
1062 self.assertEqual(int('2ca5b7464', 14), 4294967296)
1063 self.assertEqual(int('1a20dcd81', 15), 4294967296)
1064 self.assertEqual(int('100000000', 16), 4294967296)
1065 self.assertEqual(int('a7ffda91', 17), 4294967296)
1066 self.assertEqual(int('704he7g4', 18), 4294967296)
1067 self.assertEqual(int('4f5aff66', 19), 4294967296)
1068 self.assertEqual(int('3723ai4g', 20), 4294967296)
1069 self.assertEqual(int('281d55i4', 21), 4294967296)
1070 self.assertEqual(int('1fj8b184', 22), 4294967296)
1071 self.assertEqual(int('1606k7ic', 23), 4294967296)
1072 self.assertEqual(int('mb994ag', 24), 4294967296)
1073 self.assertEqual(int('hek2mgl', 25), 4294967296)
1074 self.assertEqual(int('dnchbnm', 26), 4294967296)
1075 self.assertEqual(int('b28jpdm', 27), 4294967296)
1076 self.assertEqual(int('8pfgih4', 28), 4294967296)
1077 self.assertEqual(int('76beigg', 29), 4294967296)
1078 self.assertEqual(int('5qmcpqg', 30), 4294967296)
1079 self.assertEqual(int('4q0jto4', 31), 4294967296)
1080 self.assertEqual(int('4000000', 32), 4294967296)
1081 self.assertEqual(int('3aokq94', 33), 4294967296)
1082 self.assertEqual(int('2qhxjli', 34), 4294967296)
1083 self.assertEqual(int('2br45qb', 35), 4294967296)
1084 self.assertEqual(int('1z141z4', 36), 4294967296)
Thomas Wouters477c8d52006-05-27 19:21:47 +00001085
Guido van Rossume2a383d2007-01-15 16:59:06 +00001086 self.assertEqual(int('100000000000000000000000000000001', 2),
Thomas Wouters477c8d52006-05-27 19:21:47 +00001087 4294967297)
Guido van Rossume2a383d2007-01-15 16:59:06 +00001088 self.assertEqual(int('102002022201221111212', 3), 4294967297)
1089 self.assertEqual(int('10000000000000001', 4), 4294967297)
1090 self.assertEqual(int('32244002423142', 5), 4294967297)
1091 self.assertEqual(int('1550104015505', 6), 4294967297)
1092 self.assertEqual(int('211301422355', 7), 4294967297)
1093 self.assertEqual(int('40000000001', 8), 4294967297)
1094 self.assertEqual(int('12068657455', 9), 4294967297)
1095 self.assertEqual(int('4294967297', 10), 4294967297)
1096 self.assertEqual(int('1904440555', 11), 4294967297)
1097 self.assertEqual(int('9ba461595', 12), 4294967297)
1098 self.assertEqual(int('535a7988a', 13), 4294967297)
1099 self.assertEqual(int('2ca5b7465', 14), 4294967297)
1100 self.assertEqual(int('1a20dcd82', 15), 4294967297)
1101 self.assertEqual(int('100000001', 16), 4294967297)
1102 self.assertEqual(int('a7ffda92', 17), 4294967297)
1103 self.assertEqual(int('704he7g5', 18), 4294967297)
1104 self.assertEqual(int('4f5aff67', 19), 4294967297)
1105 self.assertEqual(int('3723ai4h', 20), 4294967297)
1106 self.assertEqual(int('281d55i5', 21), 4294967297)
1107 self.assertEqual(int('1fj8b185', 22), 4294967297)
1108 self.assertEqual(int('1606k7id', 23), 4294967297)
1109 self.assertEqual(int('mb994ah', 24), 4294967297)
1110 self.assertEqual(int('hek2mgm', 25), 4294967297)
1111 self.assertEqual(int('dnchbnn', 26), 4294967297)
1112 self.assertEqual(int('b28jpdn', 27), 4294967297)
1113 self.assertEqual(int('8pfgih5', 28), 4294967297)
1114 self.assertEqual(int('76beigh', 29), 4294967297)
1115 self.assertEqual(int('5qmcpqh', 30), 4294967297)
1116 self.assertEqual(int('4q0jto5', 31), 4294967297)
1117 self.assertEqual(int('4000001', 32), 4294967297)
1118 self.assertEqual(int('3aokq95', 33), 4294967297)
1119 self.assertEqual(int('2qhxjlj', 34), 4294967297)
1120 self.assertEqual(int('2br45qc', 35), 4294967297)
1121 self.assertEqual(int('1z141z5', 36), 4294967297)
Thomas Wouters477c8d52006-05-27 19:21:47 +00001122
1123
Brett Cannonc3647ac2005-04-26 03:45:26 +00001124 def test_longconversion(self):
1125 # Test __long__()
1126 class Foo0:
1127 def __long__(self):
Guido van Rossume2a383d2007-01-15 16:59:06 +00001128 return 42
Brett Cannonc3647ac2005-04-26 03:45:26 +00001129
1130 class Foo1(object):
1131 def __long__(self):
Guido van Rossume2a383d2007-01-15 16:59:06 +00001132 return 42
Brett Cannonc3647ac2005-04-26 03:45:26 +00001133
Guido van Rossume2a383d2007-01-15 16:59:06 +00001134 class Foo2(int):
Brett Cannonc3647ac2005-04-26 03:45:26 +00001135 def __long__(self):
1136 return 42
1137
Guido van Rossume2a383d2007-01-15 16:59:06 +00001138 class Foo3(int):
1139 def __long__(self):
1140 return self
1141
1142 class Foo4(int):
1143 def __long__(self):
1144 return 42
1145
1146 class Foo5(int):
Brett Cannonc3647ac2005-04-26 03:45:26 +00001147 def __long__(self):
1148 return 42.
1149
Guido van Rossume2a383d2007-01-15 16:59:06 +00001150 self.assertEqual(int(Foo0()), 42)
1151 self.assertEqual(int(Foo1()), 42)
Guido van Rossumd8faa362007-04-27 19:54:29 +00001152 # XXX invokes __int__ now
Guido van Rossumddefaf32007-01-14 03:31:43 +00001153 # self.assertEqual(long(Foo2()), 42L)
Guido van Rossume2a383d2007-01-15 16:59:06 +00001154 self.assertEqual(int(Foo3()), 0)
Guido van Rossumd8faa362007-04-27 19:54:29 +00001155 # XXX likewise
Guido van Rossumddefaf32007-01-14 03:31:43 +00001156 # self.assertEqual(long(Foo4()), 42)
1157 # self.assertRaises(TypeError, long, Foo5())
Brett Cannonc3647ac2005-04-26 03:45:26 +00001158
Walter Dörwald919497e2003-01-19 16:23:59 +00001159 def test_map(self):
1160 self.assertEqual(
1161 map(None, 'hello world'),
1162 ['h','e','l','l','o',' ','w','o','r','l','d']
1163 )
1164 self.assertEqual(
1165 map(None, 'abcd', 'efg'),
1166 [('a', 'e'), ('b', 'f'), ('c', 'g'), ('d', None)]
1167 )
1168 self.assertEqual(
1169 map(None, range(10)),
1170 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
1171 )
1172 self.assertEqual(
1173 map(lambda x: x*x, range(1,4)),
1174 [1, 4, 9]
1175 )
1176 try:
1177 from math import sqrt
1178 except ImportError:
1179 def sqrt(x):
1180 return pow(x, 0.5)
1181 self.assertEqual(
1182 map(lambda x: map(sqrt,x), [[16, 4], [81, 9]]),
1183 [[4.0, 2.0], [9.0, 3.0]]
1184 )
1185 self.assertEqual(
1186 map(lambda x, y: x+y, [1,3,2], [9,1,4]),
1187 [10, 4, 6]
1188 )
1189
1190 def plus(*v):
1191 accu = 0
1192 for i in v: accu = accu + i
1193 return accu
1194 self.assertEqual(
1195 map(plus, [1, 3, 7]),
1196 [1, 3, 7]
1197 )
1198 self.assertEqual(
1199 map(plus, [1, 3, 7], [4, 9, 2]),
1200 [1+4, 3+9, 7+2]
1201 )
1202 self.assertEqual(
1203 map(plus, [1, 3, 7], [4, 9, 2], [1, 1, 0]),
1204 [1+4+1, 3+9+1, 7+2+0]
1205 )
1206 self.assertEqual(
1207 map(None, Squares(10)),
1208 [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
1209 )
1210 self.assertEqual(
1211 map(int, Squares(10)),
1212 [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
1213 )
1214 self.assertEqual(
1215 map(None, Squares(3), Squares(2)),
1216 [(0,0), (1,1), (4,None)]
1217 )
Guido van Rossum47b9ff62006-08-24 00:41:19 +00001218 def Max(a, b):
1219 if a is None:
1220 return b
1221 if b is None:
1222 return a
1223 return max(a, b)
Walter Dörwald919497e2003-01-19 16:23:59 +00001224 self.assertEqual(
Guido van Rossum47b9ff62006-08-24 00:41:19 +00001225 map(Max, Squares(3), Squares(2)),
Walter Dörwald919497e2003-01-19 16:23:59 +00001226 [0, 1, 4]
1227 )
1228 self.assertRaises(TypeError, map)
1229 self.assertRaises(TypeError, map, lambda x: x, 42)
1230 self.assertEqual(map(None, [42]), [42])
1231 class BadSeq:
1232 def __getitem__(self, index):
1233 raise ValueError
1234 self.assertRaises(ValueError, map, lambda x: x, BadSeq())
Neal Norwitzfcf44352005-11-27 20:37:43 +00001235 def badfunc(x):
1236 raise RuntimeError
1237 self.assertRaises(RuntimeError, map, badfunc, range(5))
Walter Dörwald919497e2003-01-19 16:23:59 +00001238
1239 def test_max(self):
1240 self.assertEqual(max('123123'), '3')
1241 self.assertEqual(max(1, 2, 3), 3)
1242 self.assertEqual(max((1, 2, 3, 1, 2, 3)), 3)
1243 self.assertEqual(max([1, 2, 3, 1, 2, 3]), 3)
1244
Guido van Rossume2a383d2007-01-15 16:59:06 +00001245 self.assertEqual(max(1, 2, 3.0), 3.0)
1246 self.assertEqual(max(1, 2.0, 3), 3)
1247 self.assertEqual(max(1.0, 2, 3), 3)
Walter Dörwald919497e2003-01-19 16:23:59 +00001248
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001249 for stmt in (
1250 "max(key=int)", # no args
1251 "max(1, key=int)", # single arg not iterable
1252 "max(1, 2, keystone=int)", # wrong keyword
1253 "max(1, 2, key=int, abc=int)", # two many keywords
1254 "max(1, 2, key=1)", # keyfunc is not callable
1255 ):
Tim Peters7f061872004-12-07 21:17:46 +00001256 try:
Georg Brandl7cae87c2006-09-06 06:51:57 +00001257 exec(stmt, globals())
Tim Peters7f061872004-12-07 21:17:46 +00001258 except TypeError:
1259 pass
1260 else:
1261 self.fail(stmt)
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001262
1263 self.assertEqual(max((1,), key=neg), 1) # one elem iterable
1264 self.assertEqual(max((1,2), key=neg), 1) # two elem iterable
1265 self.assertEqual(max(1, 2, key=neg), 1) # two elems
1266
1267 data = [random.randrange(200) for i in range(100)]
1268 keys = dict((elem, random.randrange(50)) for elem in data)
1269 f = keys.__getitem__
1270 self.assertEqual(max(data, key=f),
1271 sorted(reversed(data), key=f)[-1])
1272
Walter Dörwald919497e2003-01-19 16:23:59 +00001273 def test_min(self):
1274 self.assertEqual(min('123123'), '1')
1275 self.assertEqual(min(1, 2, 3), 1)
1276 self.assertEqual(min((1, 2, 3, 1, 2, 3)), 1)
1277 self.assertEqual(min([1, 2, 3, 1, 2, 3]), 1)
1278
Guido van Rossume2a383d2007-01-15 16:59:06 +00001279 self.assertEqual(min(1, 2, 3.0), 1)
1280 self.assertEqual(min(1, 2.0, 3), 1)
1281 self.assertEqual(min(1.0, 2, 3), 1.0)
Walter Dörwald919497e2003-01-19 16:23:59 +00001282
1283 self.assertRaises(TypeError, min)
1284 self.assertRaises(TypeError, min, 42)
1285 self.assertRaises(ValueError, min, ())
1286 class BadSeq:
1287 def __getitem__(self, index):
1288 raise ValueError
1289 self.assertRaises(ValueError, min, BadSeq())
1290 class BadNumber:
1291 def __cmp__(self, other):
1292 raise ValueError
Guido van Rossum47b9ff62006-08-24 00:41:19 +00001293 self.assertRaises(TypeError, min, (42, BadNumber()))
Walter Dörwald919497e2003-01-19 16:23:59 +00001294
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001295 for stmt in (
1296 "min(key=int)", # no args
1297 "min(1, key=int)", # single arg not iterable
1298 "min(1, 2, keystone=int)", # wrong keyword
1299 "min(1, 2, key=int, abc=int)", # two many keywords
1300 "min(1, 2, key=1)", # keyfunc is not callable
1301 ):
Tim Peters7f061872004-12-07 21:17:46 +00001302 try:
Georg Brandl7cae87c2006-09-06 06:51:57 +00001303 exec(stmt, globals())
Tim Peters7f061872004-12-07 21:17:46 +00001304 except TypeError:
1305 pass
1306 else:
1307 self.fail(stmt)
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001308
1309 self.assertEqual(min((1,), key=neg), 1) # one elem iterable
1310 self.assertEqual(min((1,2), key=neg), 2) # two elem iterable
1311 self.assertEqual(min(1, 2, key=neg), 2) # two elems
1312
1313 data = [random.randrange(200) for i in range(100)]
1314 keys = dict((elem, random.randrange(50)) for elem in data)
1315 f = keys.__getitem__
1316 self.assertEqual(min(data, key=f),
1317 sorted(data, key=f)[0])
1318
Georg Brandla18af4e2007-04-21 15:47:16 +00001319 def test_next(self):
1320 it = iter(range(2))
1321 self.assertEqual(next(it), 0)
1322 self.assertEqual(next(it), 1)
1323 self.assertRaises(StopIteration, next, it)
1324 self.assertRaises(StopIteration, next, it)
1325 self.assertEquals(next(it, 42), 42)
1326
1327 class Iter(object):
1328 def __iter__(self):
1329 return self
1330 def __next__(self):
1331 raise StopIteration
1332
1333 it = iter(Iter())
1334 self.assertEquals(next(it, 42), 42)
1335 self.assertRaises(StopIteration, next, it)
1336
1337 def gen():
1338 yield 1
1339 return
1340
1341 it = gen()
1342 self.assertEquals(next(it), 1)
1343 self.assertRaises(StopIteration, next, it)
1344 self.assertEquals(next(it, 42), 42)
1345
Walter Dörwald919497e2003-01-19 16:23:59 +00001346 def test_oct(self):
1347 self.assertEqual(oct(100), '0144')
Guido van Rossume2a383d2007-01-15 16:59:06 +00001348 self.assertEqual(oct(100), '0144')
Guido van Rossum6c9e1302003-11-29 23:52:13 +00001349 self.assertEqual(oct(-100), '-0144')
Guido van Rossume2a383d2007-01-15 16:59:06 +00001350 self.assertEqual(oct(-100), '-0144')
Walter Dörwald919497e2003-01-19 16:23:59 +00001351 self.assertRaises(TypeError, oct, ())
1352
1353 def write_testfile(self):
Guido van Rossuma88a0332007-02-26 16:59:55 +00001354 # NB the first 4 lines are also used to test input, below
Walter Dörwald919497e2003-01-19 16:23:59 +00001355 fp = open(TESTFN, 'w')
1356 try:
1357 fp.write('1+1\n')
1358 fp.write('1+1\n')
1359 fp.write('The quick brown fox jumps over the lazy dog')
1360 fp.write('.\n')
1361 fp.write('Dear John\n')
1362 fp.write('XXX'*100)
1363 fp.write('YYY'*100)
1364 finally:
1365 fp.close()
1366
1367 def test_open(self):
1368 self.write_testfile()
1369 fp = open(TESTFN, 'r')
1370 try:
1371 self.assertEqual(fp.readline(4), '1+1\n')
1372 self.assertEqual(fp.readline(4), '1+1\n')
1373 self.assertEqual(fp.readline(), 'The quick brown fox jumps over the lazy dog.\n')
1374 self.assertEqual(fp.readline(4), 'Dear')
1375 self.assertEqual(fp.readline(100), ' John\n')
1376 self.assertEqual(fp.read(300), 'XXX'*100)
1377 self.assertEqual(fp.read(1000), 'YYY'*100)
1378 finally:
1379 fp.close()
1380 unlink(TESTFN)
1381
1382 def test_ord(self):
1383 self.assertEqual(ord(' '), 32)
1384 self.assertEqual(ord('A'), 65)
1385 self.assertEqual(ord('a'), 97)
1386 if have_unicode:
Guido van Rossum84fc66d2007-05-03 17:18:26 +00001387 self.assertEqual(ord(chr(sys.maxunicode)), sys.maxunicode)
Walter Dörwald919497e2003-01-19 16:23:59 +00001388 self.assertRaises(TypeError, ord, 42)
Walter Dörwald4e41a4b2005-08-03 17:09:04 +00001389 if have_unicode:
Guido van Rossumef87d6e2007-05-02 19:09:54 +00001390 self.assertRaises(TypeError, ord, str("12"))
Walter Dörwald919497e2003-01-19 16:23:59 +00001391
1392 def test_pow(self):
1393 self.assertEqual(pow(0,0), 1)
1394 self.assertEqual(pow(0,1), 0)
1395 self.assertEqual(pow(1,0), 1)
1396 self.assertEqual(pow(1,1), 1)
1397
1398 self.assertEqual(pow(2,0), 1)
1399 self.assertEqual(pow(2,10), 1024)
1400 self.assertEqual(pow(2,20), 1024*1024)
1401 self.assertEqual(pow(2,30), 1024*1024*1024)
1402
1403 self.assertEqual(pow(-2,0), 1)
1404 self.assertEqual(pow(-2,1), -2)
1405 self.assertEqual(pow(-2,2), 4)
1406 self.assertEqual(pow(-2,3), -8)
1407
Guido van Rossume2a383d2007-01-15 16:59:06 +00001408 self.assertEqual(pow(0,0), 1)
1409 self.assertEqual(pow(0,1), 0)
1410 self.assertEqual(pow(1,0), 1)
1411 self.assertEqual(pow(1,1), 1)
Walter Dörwald919497e2003-01-19 16:23:59 +00001412
Guido van Rossume2a383d2007-01-15 16:59:06 +00001413 self.assertEqual(pow(2,0), 1)
1414 self.assertEqual(pow(2,10), 1024)
1415 self.assertEqual(pow(2,20), 1024*1024)
1416 self.assertEqual(pow(2,30), 1024*1024*1024)
Walter Dörwald919497e2003-01-19 16:23:59 +00001417
Guido van Rossume2a383d2007-01-15 16:59:06 +00001418 self.assertEqual(pow(-2,0), 1)
1419 self.assertEqual(pow(-2,1), -2)
1420 self.assertEqual(pow(-2,2), 4)
1421 self.assertEqual(pow(-2,3), -8)
Walter Dörwald919497e2003-01-19 16:23:59 +00001422
1423 self.assertAlmostEqual(pow(0.,0), 1.)
1424 self.assertAlmostEqual(pow(0.,1), 0.)
1425 self.assertAlmostEqual(pow(1.,0), 1.)
1426 self.assertAlmostEqual(pow(1.,1), 1.)
1427
1428 self.assertAlmostEqual(pow(2.,0), 1.)
1429 self.assertAlmostEqual(pow(2.,10), 1024.)
1430 self.assertAlmostEqual(pow(2.,20), 1024.*1024.)
1431 self.assertAlmostEqual(pow(2.,30), 1024.*1024.*1024.)
1432
1433 self.assertAlmostEqual(pow(-2.,0), 1.)
1434 self.assertAlmostEqual(pow(-2.,1), -2.)
1435 self.assertAlmostEqual(pow(-2.,2), 4.)
1436 self.assertAlmostEqual(pow(-2.,3), -8.)
1437
Guido van Rossume2a383d2007-01-15 16:59:06 +00001438 for x in 2, 2, 2.0:
1439 for y in 10, 10, 10.0:
1440 for z in 1000, 1000, 1000.0:
Walter Dörwald919497e2003-01-19 16:23:59 +00001441 if isinstance(x, float) or \
1442 isinstance(y, float) or \
1443 isinstance(z, float):
1444 self.assertRaises(TypeError, pow, x, y, z)
1445 else:
1446 self.assertAlmostEqual(pow(x, y, z), 24.0)
1447
1448 self.assertRaises(TypeError, pow, -1, -2, 3)
1449 self.assertRaises(ValueError, pow, 1, 2, 0)
Guido van Rossume2a383d2007-01-15 16:59:06 +00001450 self.assertRaises(TypeError, pow, -1, -2, 3)
1451 self.assertRaises(ValueError, pow, 1, 2, 0)
Walter Dörwald919497e2003-01-19 16:23:59 +00001452 self.assertRaises(ValueError, pow, -342.43, 0.234)
1453
1454 self.assertRaises(TypeError, pow)
1455
1456 def test_range(self):
1457 self.assertEqual(range(3), [0, 1, 2])
1458 self.assertEqual(range(1, 5), [1, 2, 3, 4])
1459 self.assertEqual(range(0), [])
1460 self.assertEqual(range(-3), [])
1461 self.assertEqual(range(1, 10, 3), [1, 4, 7])
1462 self.assertEqual(range(5, -5, -3), [5, 2, -1, -4])
1463
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001464 # Now test range() with longs
1465 self.assertEqual(range(-2**100), [])
1466 self.assertEqual(range(0, -2**100), [])
1467 self.assertEqual(range(0, 2**100, -1), [])
1468 self.assertEqual(range(0, 2**100, -1), [])
1469
Guido van Rossume2a383d2007-01-15 16:59:06 +00001470 a = int(10 * sys.maxint)
1471 b = int(100 * sys.maxint)
1472 c = int(50 * sys.maxint)
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001473
1474 self.assertEqual(range(a, a+2), [a, a+1])
Guido van Rossume2a383d2007-01-15 16:59:06 +00001475 self.assertEqual(range(a+2, a, -1), [a+2, a+1])
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001476 self.assertEqual(range(a+4, a, -2), [a+4, a+2])
1477
1478 seq = range(a, b, c)
1479 self.assert_(a in seq)
1480 self.assert_(b not in seq)
1481 self.assertEqual(len(seq), 2)
1482
1483 seq = range(b, a, -c)
1484 self.assert_(b in seq)
1485 self.assert_(a not in seq)
1486 self.assertEqual(len(seq), 2)
1487
1488 seq = range(-a, -b, -c)
1489 self.assert_(-a in seq)
1490 self.assert_(-b not in seq)
1491 self.assertEqual(len(seq), 2)
1492
Walter Dörwald919497e2003-01-19 16:23:59 +00001493 self.assertRaises(TypeError, range)
1494 self.assertRaises(TypeError, range, 1, 2, 3, 4)
1495 self.assertRaises(ValueError, range, 1, 2, 0)
Guido van Rossume2a383d2007-01-15 16:59:06 +00001496 self.assertRaises(ValueError, range, a, a + 1, int(0))
Neal Norwitzfcf44352005-11-27 20:37:43 +00001497
1498 class badzero(int):
Guido van Rossum47b9ff62006-08-24 00:41:19 +00001499 def __eq__(self, other):
Neal Norwitzfcf44352005-11-27 20:37:43 +00001500 raise RuntimeError
Guido van Rossum47b9ff62006-08-24 00:41:19 +00001501 __ne__ = __lt__ = __gt__ = __le__ = __ge__ = __eq__
1502
1503 # XXX This won't (but should!) raise RuntimeError if a is an int...
Neal Norwitzfcf44352005-11-27 20:37:43 +00001504 self.assertRaises(RuntimeError, range, a, a + 1, badzero(1))
Walter Dörwald919497e2003-01-19 16:23:59 +00001505
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001506 # Reject floats when it would require PyLongs to represent.
1507 # (smaller floats still accepted, but deprecated)
Tim Peters299b3df2003-04-15 14:40:03 +00001508 self.assertRaises(TypeError, range, 1e100, 1e101, 1e101)
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001509
Walter Dörwald357981e2003-04-15 18:59:28 +00001510 self.assertRaises(TypeError, range, 0, "spam")
1511 self.assertRaises(TypeError, range, 0, 42, "spam")
1512
1513 self.assertRaises(OverflowError, range, -sys.maxint, sys.maxint)
1514 self.assertRaises(OverflowError, range, 0, 2*sys.maxint)
1515
Guido van Rossuma88a0332007-02-26 16:59:55 +00001516 def test_input(self):
1517 self.write_testfile()
1518 fp = open(TESTFN, 'r')
1519 savestdin = sys.stdin
1520 savestdout = sys.stdout # Eats the echo
1521 try:
1522 sys.stdin = fp
1523 sys.stdout = BitBucket()
1524 self.assertEqual(input(), "1+1")
1525 self.assertEqual(input('testing\n'), "1+1")
1526 self.assertEqual(input(), 'The quick brown fox jumps over the lazy dog.')
1527 self.assertEqual(input('testing\n'), 'Dear John')
1528
1529 # SF 1535165: don't segfault on closed stdin
1530 # sys.stdout must be a regular file for triggering
1531 sys.stdout = savestdout
1532 sys.stdin.close()
1533 self.assertRaises(ValueError, input)
1534
1535 sys.stdout = BitBucket()
1536 sys.stdin = cStringIO.StringIO("NULL\0")
1537 self.assertRaises(TypeError, input, 42, 42)
1538 sys.stdin = cStringIO.StringIO(" 'whitespace'")
1539 self.assertEqual(input(), " 'whitespace'")
1540 sys.stdin = cStringIO.StringIO()
1541 self.assertRaises(EOFError, input)
1542
1543 del sys.stdout
1544 self.assertRaises(RuntimeError, input, 'prompt')
1545 del sys.stdin
1546 self.assertRaises(RuntimeError, input, 'prompt')
1547 finally:
1548 sys.stdin = savestdin
1549 sys.stdout = savestdout
1550 fp.close()
1551 unlink(TESTFN)
1552
Walter Dörwald919497e2003-01-19 16:23:59 +00001553 def test_reload(self):
1554 import marshal
1555 reload(marshal)
1556 import string
1557 reload(string)
1558 ## import sys
1559 ## self.assertRaises(ImportError, reload, sys)
1560
1561 def test_repr(self):
1562 self.assertEqual(repr(''), '\'\'')
1563 self.assertEqual(repr(0), '0')
Guido van Rossume2a383d2007-01-15 16:59:06 +00001564 self.assertEqual(repr(0), '0')
Walter Dörwald919497e2003-01-19 16:23:59 +00001565 self.assertEqual(repr(()), '()')
1566 self.assertEqual(repr([]), '[]')
1567 self.assertEqual(repr({}), '{}')
1568 a = []
1569 a.append(a)
1570 self.assertEqual(repr(a), '[[...]]')
1571 a = {}
1572 a[0] = a
1573 self.assertEqual(repr(a), '{0: {...}}')
1574
1575 def test_round(self):
1576 self.assertEqual(round(0.0), 0.0)
1577 self.assertEqual(round(1.0), 1.0)
1578 self.assertEqual(round(10.0), 10.0)
1579 self.assertEqual(round(1000000000.0), 1000000000.0)
1580 self.assertEqual(round(1e20), 1e20)
1581
1582 self.assertEqual(round(-1.0), -1.0)
1583 self.assertEqual(round(-10.0), -10.0)
1584 self.assertEqual(round(-1000000000.0), -1000000000.0)
1585 self.assertEqual(round(-1e20), -1e20)
1586
1587 self.assertEqual(round(0.1), 0.0)
1588 self.assertEqual(round(1.1), 1.0)
1589 self.assertEqual(round(10.1), 10.0)
1590 self.assertEqual(round(1000000000.1), 1000000000.0)
1591
1592 self.assertEqual(round(-1.1), -1.0)
1593 self.assertEqual(round(-10.1), -10.0)
1594 self.assertEqual(round(-1000000000.1), -1000000000.0)
1595
1596 self.assertEqual(round(0.9), 1.0)
1597 self.assertEqual(round(9.9), 10.0)
1598 self.assertEqual(round(999999999.9), 1000000000.0)
1599
1600 self.assertEqual(round(-0.9), -1.0)
1601 self.assertEqual(round(-9.9), -10.0)
1602 self.assertEqual(round(-999999999.9), -1000000000.0)
1603
1604 self.assertEqual(round(-8.0, -1), -10.0)
1605
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001606 # test new kwargs
1607 self.assertEqual(round(number=-8.0, ndigits=-1), -10.0)
1608
Walter Dörwald919497e2003-01-19 16:23:59 +00001609 self.assertRaises(TypeError, round)
1610
1611 def test_setattr(self):
Tim Petersf2715e02003-02-19 02:35:07 +00001612 setattr(sys, 'spam', 1)
1613 self.assertEqual(sys.spam, 1)
1614 self.assertRaises(TypeError, setattr, sys, 1, 'spam')
1615 self.assertRaises(TypeError, setattr)
Walter Dörwald919497e2003-01-19 16:23:59 +00001616
1617 def test_str(self):
1618 self.assertEqual(str(''), '')
1619 self.assertEqual(str(0), '0')
Guido van Rossume2a383d2007-01-15 16:59:06 +00001620 self.assertEqual(str(0), '0')
Walter Dörwald919497e2003-01-19 16:23:59 +00001621 self.assertEqual(str(()), '()')
1622 self.assertEqual(str([]), '[]')
1623 self.assertEqual(str({}), '{}')
1624 a = []
1625 a.append(a)
1626 self.assertEqual(str(a), '[[...]]')
1627 a = {}
1628 a[0] = a
1629 self.assertEqual(str(a), '{0: {...}}')
1630
Alex Martellia70b1912003-04-22 08:12:33 +00001631 def test_sum(self):
1632 self.assertEqual(sum([]), 0)
1633 self.assertEqual(sum(range(2,8)), 27)
1634 self.assertEqual(sum(iter(range(2,8))), 27)
1635 self.assertEqual(sum(Squares(10)), 285)
1636 self.assertEqual(sum(iter(Squares(10))), 285)
1637 self.assertEqual(sum([[1], [2], [3]], []), [1, 2, 3])
1638
1639 self.assertRaises(TypeError, sum)
1640 self.assertRaises(TypeError, sum, 42)
1641 self.assertRaises(TypeError, sum, ['a', 'b', 'c'])
1642 self.assertRaises(TypeError, sum, ['a', 'b', 'c'], '')
1643 self.assertRaises(TypeError, sum, [[1], [2], [3]])
1644 self.assertRaises(TypeError, sum, [{2:3}])
1645 self.assertRaises(TypeError, sum, [{2:3}]*2, {2:3})
1646
1647 class BadSeq:
1648 def __getitem__(self, index):
1649 raise ValueError
1650 self.assertRaises(ValueError, sum, BadSeq())
1651
Walter Dörwald919497e2003-01-19 16:23:59 +00001652 def test_tuple(self):
1653 self.assertEqual(tuple(()), ())
1654 t0_3 = (0, 1, 2, 3)
1655 t0_3_bis = tuple(t0_3)
1656 self.assert_(t0_3 is t0_3_bis)
1657 self.assertEqual(tuple([]), ())
1658 self.assertEqual(tuple([0, 1, 2, 3]), (0, 1, 2, 3))
1659 self.assertEqual(tuple(''), ())
1660 self.assertEqual(tuple('spam'), ('s', 'p', 'a', 'm'))
1661
1662 def test_type(self):
1663 self.assertEqual(type(''), type('123'))
1664 self.assertNotEqual(type(''), type(()))
1665
1666 def test_unichr(self):
1667 if have_unicode:
Guido van Rossum84fc66d2007-05-03 17:18:26 +00001668 self.assertEqual(chr(32), str(' '))
1669 self.assertEqual(chr(65), str('A'))
1670 self.assertEqual(chr(97), str('a'))
Walter Dörwald919497e2003-01-19 16:23:59 +00001671 self.assertEqual(
Guido van Rossum84fc66d2007-05-03 17:18:26 +00001672 chr(sys.maxunicode),
Guido van Rossumef87d6e2007-05-02 19:09:54 +00001673 str(('\\U%08x' % (sys.maxunicode)).encode("ascii"), 'unicode-escape')
Walter Dörwald919497e2003-01-19 16:23:59 +00001674 )
Guido van Rossum84fc66d2007-05-03 17:18:26 +00001675 self.assertRaises(ValueError, chr, sys.maxunicode+1)
1676 self.assertRaises(TypeError, chr)
Walter Dörwald919497e2003-01-19 16:23:59 +00001677
Guido van Rossumfee7b932005-01-16 00:21:28 +00001678 # We don't want self in vars(), so these are static methods
1679
1680 @staticmethod
Walter Dörwald919497e2003-01-19 16:23:59 +00001681 def get_vars_f0():
1682 return vars()
Walter Dörwald919497e2003-01-19 16:23:59 +00001683
Guido van Rossumfee7b932005-01-16 00:21:28 +00001684 @staticmethod
Walter Dörwald919497e2003-01-19 16:23:59 +00001685 def get_vars_f2():
1686 BuiltinTest.get_vars_f0()
1687 a = 1
1688 b = 2
1689 return vars()
Walter Dörwald919497e2003-01-19 16:23:59 +00001690
1691 def test_vars(self):
Raymond Hettingera690a992003-11-16 16:17:49 +00001692 self.assertEqual(set(vars()), set(dir()))
Walter Dörwald919497e2003-01-19 16:23:59 +00001693 import sys
Raymond Hettingera690a992003-11-16 16:17:49 +00001694 self.assertEqual(set(vars(sys)), set(dir(sys)))
Walter Dörwald919497e2003-01-19 16:23:59 +00001695 self.assertEqual(self.get_vars_f0(), {})
1696 self.assertEqual(self.get_vars_f2(), {'a': 1, 'b': 2})
1697 self.assertRaises(TypeError, vars, 42, 42)
1698 self.assertRaises(TypeError, vars, 42)
1699
1700 def test_zip(self):
1701 a = (1, 2, 3)
1702 b = (4, 5, 6)
1703 t = [(1, 4), (2, 5), (3, 6)]
Guido van Rossum801f0d72006-08-24 19:48:10 +00001704 self.assertEqual(list(zip(a, b)), t)
Walter Dörwald919497e2003-01-19 16:23:59 +00001705 b = [4, 5, 6]
Guido van Rossum801f0d72006-08-24 19:48:10 +00001706 self.assertEqual(list(zip(a, b)), t)
Walter Dörwald919497e2003-01-19 16:23:59 +00001707 b = (4, 5, 6, 7)
Guido van Rossum801f0d72006-08-24 19:48:10 +00001708 self.assertEqual(list(zip(a, b)), t)
Walter Dörwald919497e2003-01-19 16:23:59 +00001709 class I:
1710 def __getitem__(self, i):
1711 if i < 0 or i > 2: raise IndexError
1712 return i + 4
Guido van Rossum801f0d72006-08-24 19:48:10 +00001713 self.assertEqual(list(zip(a, I())), t)
1714 self.assertEqual(list(zip()), [])
1715 self.assertEqual(list(zip(*[])), [])
Walter Dörwald919497e2003-01-19 16:23:59 +00001716 self.assertRaises(TypeError, zip, None)
1717 class G:
1718 pass
1719 self.assertRaises(TypeError, zip, a, G())
1720
1721 # Make sure zip doesn't try to allocate a billion elements for the
1722 # result list when one of its arguments doesn't say how long it is.
1723 # A MemoryError is the most likely failure mode.
1724 class SequenceWithoutALength:
1725 def __getitem__(self, i):
1726 if i == 5:
1727 raise IndexError
1728 else:
1729 return i
1730 self.assertEqual(
Guido van Rossum801f0d72006-08-24 19:48:10 +00001731 list(zip(SequenceWithoutALength(), xrange(2**30))),
Walter Dörwald919497e2003-01-19 16:23:59 +00001732 list(enumerate(range(5)))
1733 )
1734
1735 class BadSeq:
1736 def __getitem__(self, i):
1737 if i == 5:
1738 raise ValueError
1739 else:
1740 return i
Guido van Rossum801f0d72006-08-24 19:48:10 +00001741 self.assertRaises(ValueError, list, zip(BadSeq(), BadSeq()))
Walter Dörwald919497e2003-01-19 16:23:59 +00001742
Raymond Hettinger64958a12003-12-17 20:43:33 +00001743class TestSorted(unittest.TestCase):
1744
1745 def test_basic(self):
1746 data = range(100)
1747 copy = data[:]
1748 random.shuffle(copy)
1749 self.assertEqual(data, sorted(copy))
1750 self.assertNotEqual(data, copy)
1751
1752 data.reverse()
1753 random.shuffle(copy)
Guido van Rossum47b9ff62006-08-24 00:41:19 +00001754 self.assertEqual(data, sorted(copy, cmp=lambda x, y: (x < y) - (x > y)))
Raymond Hettinger64958a12003-12-17 20:43:33 +00001755 self.assertNotEqual(data, copy)
1756 random.shuffle(copy)
1757 self.assertEqual(data, sorted(copy, key=lambda x: -x))
1758 self.assertNotEqual(data, copy)
1759 random.shuffle(copy)
1760 self.assertEqual(data, sorted(copy, reverse=1))
1761 self.assertNotEqual(data, copy)
1762
1763 def test_inputtypes(self):
1764 s = 'abracadabra'
Walter Dörwald4e41a4b2005-08-03 17:09:04 +00001765 types = [list, tuple]
1766 if have_unicode:
Guido van Rossumef87d6e2007-05-02 19:09:54 +00001767 types.insert(0, str)
Walter Dörwald4e41a4b2005-08-03 17:09:04 +00001768 for T in types:
Raymond Hettinger64958a12003-12-17 20:43:33 +00001769 self.assertEqual(sorted(s), sorted(T(s)))
1770
1771 s = ''.join(dict.fromkeys(s).keys()) # unique letters only
Walter Dörwald4e41a4b2005-08-03 17:09:04 +00001772 types = [set, frozenset, list, tuple, dict.fromkeys]
1773 if have_unicode:
Guido van Rossumef87d6e2007-05-02 19:09:54 +00001774 types.insert(0, str)
Walter Dörwald4e41a4b2005-08-03 17:09:04 +00001775 for T in types:
Raymond Hettinger64958a12003-12-17 20:43:33 +00001776 self.assertEqual(sorted(s), sorted(T(s)))
1777
1778 def test_baddecorator(self):
1779 data = 'The quick Brown fox Jumped over The lazy Dog'.split()
1780 self.assertRaises(TypeError, sorted, data, None, lambda x,y: 0)
1781
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001782def test_main(verbose=None):
1783 test_classes = (BuiltinTest, TestSorted)
1784
1785 run_unittest(*test_classes)
1786
1787 # verify reference counting
1788 if verbose and hasattr(sys, "gettotalrefcount"):
1789 import gc
1790 counts = [None] * 5
1791 for i in xrange(len(counts)):
1792 run_unittest(*test_classes)
1793 gc.collect()
1794 counts[i] = sys.gettotalrefcount()
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001795 print(counts)
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001796
Walter Dörwald919497e2003-01-19 16:23:59 +00001797
1798if __name__ == "__main__":
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001799 test_main(verbose=True)