blob: 0560045d034206720b6ab08a94bbf397bfc0bd41 [file] [log] [blame]
Walter Dörwald919497e2003-01-19 16:23:59 +00001# Python test set -- built-in functions
Guido van Rossum3bead091992-01-27 17:00:37 +00002
Walter Dörwald919497e2003-01-19 16:23:59 +00003import test.test_support, unittest
Walter Dörwald1f5947b2007-05-22 16:52:54 +00004from test.test_support import fcmp, TESTFN, unlink, run_unittest, \
5 run_with_locale
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00006from operator import neg
Guido van Rossum3bead091992-01-27 17:00:37 +00007
Guido van Rossum34d19282007-08-09 01:03:29 +00008import sys, warnings, random, UserDict, io
Walter Dörwald919497e2003-01-19 16:23:59 +00009warnings.filterwarnings("ignore", "hex../oct.. of negative int",
10 FutureWarning, __name__)
Guido van Rossumefbbb1c2003-04-11 18:43:06 +000011warnings.filterwarnings("ignore", "integer argument expected",
12 DeprecationWarning, "unittest")
Guido van Rossum3bead091992-01-27 17:00:37 +000013
Walter Dörwald919497e2003-01-19 16:23:59 +000014class Squares:
Guido van Rossum3bead091992-01-27 17:00:37 +000015
Walter Dörwald919497e2003-01-19 16:23:59 +000016 def __init__(self, max):
17 self.max = max
18 self.sofar = []
19
20 def __len__(self): return len(self.sofar)
21
22 def __getitem__(self, i):
23 if not 0 <= i < self.max: raise IndexError
24 n = len(self.sofar)
25 while n <= i:
26 self.sofar.append(n*n)
27 n += 1
28 return self.sofar[i]
29
30class StrSquares:
31
32 def __init__(self, max):
33 self.max = max
34 self.sofar = []
35
36 def __len__(self):
37 return len(self.sofar)
38
39 def __getitem__(self, i):
40 if not 0 <= i < self.max:
41 raise IndexError
42 n = len(self.sofar)
43 while n <= i:
44 self.sofar.append(str(n*n))
45 n += 1
46 return self.sofar[i]
47
48class BitBucket:
49 def write(self, line):
50 pass
51
52L = [
53 ('0', 0),
54 ('1', 1),
55 ('9', 9),
56 ('10', 10),
57 ('99', 99),
58 ('100', 100),
59 ('314', 314),
60 (' 314', 314),
61 ('314 ', 314),
62 (' \t\t 314 \t\t ', 314),
Walter Dörwald70a6b492004-02-12 17:35:32 +000063 (repr(sys.maxint), sys.maxint),
Walter Dörwald919497e2003-01-19 16:23:59 +000064 (' 1x', ValueError),
65 (' 1 ', 1),
66 (' 1\02 ', ValueError),
67 ('', ValueError),
68 (' ', ValueError),
Walter Dörwald1f5947b2007-05-22 16:52:54 +000069 (' \t\t ', ValueError),
Guido van Rossumef87d6e2007-05-02 19:09:54 +000070 (str(b'\u0663\u0661\u0664 ','raw-unicode-escape'), 314),
Guido van Rossum84fc66d2007-05-03 17:18:26 +000071 (chr(0x200), ValueError),
Walter Dörwald919497e2003-01-19 16:23:59 +000072]
73
Raymond Hettinger96229b12005-03-11 06:49:40 +000074class TestFailingBool:
Jack Diederich4dafcc42006-11-28 19:15:13 +000075 def __bool__(self):
Raymond Hettinger96229b12005-03-11 06:49:40 +000076 raise RuntimeError
77
78class TestFailingIter:
79 def __iter__(self):
80 raise RuntimeError
81
Walter Dörwald919497e2003-01-19 16:23:59 +000082class BuiltinTest(unittest.TestCase):
83
84 def test_import(self):
85 __import__('sys')
86 __import__('time')
87 __import__('string')
Guido van Rossumd8faa362007-04-27 19:54:29 +000088 __import__(name='sys')
89 __import__(name='time', level=0)
Walter Dörwald919497e2003-01-19 16:23:59 +000090 self.assertRaises(ImportError, __import__, 'spamspam')
91 self.assertRaises(TypeError, __import__, 1, 2, 3, 4)
Thomas Wouters49fd7fa2006-04-21 10:40:58 +000092 self.assertRaises(ValueError, __import__, '')
Guido van Rossumd8faa362007-04-27 19:54:29 +000093 self.assertRaises(TypeError, __import__, 'sys', name='sys')
Walter Dörwald919497e2003-01-19 16:23:59 +000094
95 def test_abs(self):
96 # int
97 self.assertEqual(abs(0), 0)
98 self.assertEqual(abs(1234), 1234)
99 self.assertEqual(abs(-1234), 1234)
Thomas Wouters89f507f2006-12-13 04:49:30 +0000100 self.assertTrue(abs(-sys.maxint-1) > 0)
Walter Dörwald919497e2003-01-19 16:23:59 +0000101 # float
102 self.assertEqual(abs(0.0), 0.0)
103 self.assertEqual(abs(3.14), 3.14)
104 self.assertEqual(abs(-3.14), 3.14)
105 # long
Guido van Rossume2a383d2007-01-15 16:59:06 +0000106 self.assertEqual(abs(0), 0)
107 self.assertEqual(abs(1234), 1234)
108 self.assertEqual(abs(-1234), 1234)
Walter Dörwald919497e2003-01-19 16:23:59 +0000109 # str
110 self.assertRaises(TypeError, abs, 'a')
111
Raymond Hettinger96229b12005-03-11 06:49:40 +0000112 def test_all(self):
113 self.assertEqual(all([2, 4, 6]), True)
114 self.assertEqual(all([2, None, 6]), False)
115 self.assertRaises(RuntimeError, all, [2, TestFailingBool(), 6])
116 self.assertRaises(RuntimeError, all, TestFailingIter())
117 self.assertRaises(TypeError, all, 10) # Non-iterable
118 self.assertRaises(TypeError, all) # No args
119 self.assertRaises(TypeError, all, [2, 4, 6], []) # Too many args
120 self.assertEqual(all([]), True) # Empty iterator
121 S = [50, 60]
122 self.assertEqual(all(x > 42 for x in S), True)
123 S = [50, 40, 60]
124 self.assertEqual(all(x > 42 for x in S), False)
125
126 def test_any(self):
127 self.assertEqual(any([None, None, None]), False)
128 self.assertEqual(any([None, 4, None]), True)
129 self.assertRaises(RuntimeError, any, [None, TestFailingBool(), 6])
130 self.assertRaises(RuntimeError, all, TestFailingIter())
131 self.assertRaises(TypeError, any, 10) # Non-iterable
132 self.assertRaises(TypeError, any) # No args
133 self.assertRaises(TypeError, any, [2, 4, 6], []) # Too many args
134 self.assertEqual(any([]), False) # Empty iterator
135 S = [40, 60, 30]
136 self.assertEqual(any(x > 42 for x in S), True)
137 S = [10, 20, 30]
138 self.assertEqual(any(x > 42 for x in S), False)
139
Thomas Wouters89f507f2006-12-13 04:49:30 +0000140 def test_neg(self):
141 x = -sys.maxint-1
142 self.assert_(isinstance(x, int))
143 self.assertEqual(-x, sys.maxint+1)
144
Guido van Rossumd59da4b2007-05-22 18:11:13 +0000145 # XXX(nnorwitz): This test case for callable should probably be removed.
Walter Dörwald919497e2003-01-19 16:23:59 +0000146 def test_callable(self):
Guido van Rossumd59da4b2007-05-22 18:11:13 +0000147 self.assert_(hasattr(len, '__call__'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000148 def f(): pass
Guido van Rossumd59da4b2007-05-22 18:11:13 +0000149 self.assert_(hasattr(f, '__call__'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000150 class C:
151 def meth(self): pass
Guido van Rossumd59da4b2007-05-22 18:11:13 +0000152 self.assert_(hasattr(C, '__call__'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000153 x = C()
Guido van Rossumd59da4b2007-05-22 18:11:13 +0000154 self.assert_(hasattr(x.meth, '__call__'))
155 self.assert_(not hasattr(x, '__call__'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000156 class D(C):
157 def __call__(self): pass
158 y = D()
Guido van Rossumd59da4b2007-05-22 18:11:13 +0000159 self.assert_(hasattr(y, '__call__'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000160 y()
161
162 def test_chr(self):
163 self.assertEqual(chr(32), ' ')
164 self.assertEqual(chr(65), 'A')
165 self.assertEqual(chr(97), 'a')
166 self.assertEqual(chr(0xff), '\xff')
Guido van Rossum572dbf82007-04-27 23:53:51 +0000167 self.assertRaises(ValueError, chr, 1<<24)
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000168 self.assertEqual(chr(sys.maxunicode),
169 str(('\\U%08x' % (sys.maxunicode)).encode("ascii"),
170 'unicode-escape'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000171 self.assertRaises(TypeError, chr)
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000172 self.assertEqual(chr(0x0000FFFF), "\U0000FFFF")
173 self.assertEqual(chr(0x00010000), "\U00010000")
174 self.assertEqual(chr(0x00010001), "\U00010001")
175 self.assertEqual(chr(0x000FFFFE), "\U000FFFFE")
176 self.assertEqual(chr(0x000FFFFF), "\U000FFFFF")
177 self.assertEqual(chr(0x00100000), "\U00100000")
178 self.assertEqual(chr(0x00100001), "\U00100001")
179 self.assertEqual(chr(0x0010FFFE), "\U0010FFFE")
180 self.assertEqual(chr(0x0010FFFF), "\U0010FFFF")
181 self.assertRaises(ValueError, chr, -1)
182 self.assertRaises(ValueError, chr, 0x00110000)
Walter Dörwald919497e2003-01-19 16:23:59 +0000183
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000184 def test_cmp(self):
Walter Dörwald919497e2003-01-19 16:23:59 +0000185 self.assertEqual(cmp(-1, 1), -1)
186 self.assertEqual(cmp(1, -1), 1)
187 self.assertEqual(cmp(1, 1), 0)
Armin Rigo2b3eb402003-10-28 12:05:48 +0000188 # verify that circular objects are not handled
Walter Dörwald919497e2003-01-19 16:23:59 +0000189 a = []; a.append(a)
190 b = []; b.append(b)
191 from UserList import UserList
192 c = UserList(); c.append(c)
Armin Rigo2b3eb402003-10-28 12:05:48 +0000193 self.assertRaises(RuntimeError, cmp, a, b)
194 self.assertRaises(RuntimeError, cmp, b, c)
195 self.assertRaises(RuntimeError, cmp, c, a)
196 self.assertRaises(RuntimeError, cmp, a, c)
197 # okay, now break the cycles
Walter Dörwald919497e2003-01-19 16:23:59 +0000198 a.pop(); b.pop(); c.pop()
199 self.assertRaises(TypeError, cmp)
200
Walter Dörwald919497e2003-01-19 16:23:59 +0000201 def test_compile(self):
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000202 compile('print(1)\n', '', 'exec')
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000203## bom = b'\xef\xbb\xbf'
204## compile(bom + b'print(1)\n', '', 'exec')
Guido van Rossumd8faa362007-04-27 19:54:29 +0000205 compile(source='pass', filename='?', mode='exec')
206 compile(dont_inherit=0, filename='tmp', source='0', mode='eval')
207 compile('pass', '?', dont_inherit=1, mode='exec')
Walter Dörwald919497e2003-01-19 16:23:59 +0000208 self.assertRaises(TypeError, compile)
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000209 self.assertRaises(ValueError, compile, 'print(42)\n', '<string>', 'badmode')
210 self.assertRaises(ValueError, compile, 'print(42)\n', '<string>', 'single', 0xff)
Neal Norwitzfcf44352005-11-27 20:37:43 +0000211 self.assertRaises(TypeError, compile, chr(0), 'f', 'exec')
Guido van Rossumd8faa362007-04-27 19:54:29 +0000212 self.assertRaises(TypeError, compile, 'pass', '?', 'exec',
213 mode='eval', source='0', filename='tmp')
Walter Dörwald1f5947b2007-05-22 16:52:54 +0000214 compile('print("\xe5")\n', '', 'exec')
215 self.assertRaises(TypeError, compile, chr(0), 'f', 'exec')
216 self.assertRaises(ValueError, compile, str('a = 1'), 'f', 'bad')
Guido van Rossumd8faa362007-04-27 19:54:29 +0000217
Walter Dörwald919497e2003-01-19 16:23:59 +0000218 def test_delattr(self):
219 import sys
220 sys.spam = 1
221 delattr(sys, 'spam')
222 self.assertRaises(TypeError, delattr)
223
224 def test_dir(self):
Georg Brandle32b4222007-03-10 22:13:27 +0000225 # dir(wrong number of arguments)
Walter Dörwald919497e2003-01-19 16:23:59 +0000226 self.assertRaises(TypeError, dir, 42, 42)
227
Georg Brandle32b4222007-03-10 22:13:27 +0000228 # dir() - local scope
229 local_var = 1
230 self.assert_('local_var' in dir())
231
232 # dir(module)
233 import sys
234 self.assert_('exit' in dir(sys))
235
236 # dir(module_with_invalid__dict__)
237 import types
238 class Foo(types.ModuleType):
239 __dict__ = 8
240 f = Foo("foo")
241 self.assertRaises(TypeError, dir, f)
242
243 # dir(type)
244 self.assert_("strip" in dir(str))
245 self.assert_("__mro__" not in dir(str))
246
247 # dir(obj)
248 class Foo(object):
249 def __init__(self):
250 self.x = 7
251 self.y = 8
252 self.z = 9
253 f = Foo()
254 self.assert_("y" in dir(f))
255
256 # dir(obj_no__dict__)
257 class Foo(object):
258 __slots__ = []
259 f = Foo()
260 self.assert_("__repr__" in dir(f))
261
262 # dir(obj_no__class__with__dict__)
263 # (an ugly trick to cause getattr(f, "__class__") to fail)
264 class Foo(object):
265 __slots__ = ["__class__", "__dict__"]
266 def __init__(self):
267 self.bar = "wow"
268 f = Foo()
269 self.assert_("__repr__" not in dir(f))
270 self.assert_("bar" in dir(f))
271
272 # dir(obj_using __dir__)
273 class Foo(object):
274 def __dir__(self):
275 return ["kan", "ga", "roo"]
276 f = Foo()
277 self.assert_(dir(f) == ["ga", "kan", "roo"])
278
279 # dir(obj__dir__not_list)
280 class Foo(object):
281 def __dir__(self):
282 return 7
283 f = Foo()
284 self.assertRaises(TypeError, dir, f)
285
Collin Winter3eed7652007-08-14 17:53:54 +0000286 # dir(traceback)
287 try:
288 raise IndexError
289 except:
290 self.assertEqual(len(dir(sys.exc_info()[2])), 4)
291
292
Walter Dörwald919497e2003-01-19 16:23:59 +0000293 def test_divmod(self):
294 self.assertEqual(divmod(12, 7), (1, 5))
295 self.assertEqual(divmod(-12, 7), (-2, 2))
296 self.assertEqual(divmod(12, -7), (-2, -2))
297 self.assertEqual(divmod(-12, -7), (1, -5))
298
Guido van Rossume2a383d2007-01-15 16:59:06 +0000299 self.assertEqual(divmod(12, 7), (1, 5))
300 self.assertEqual(divmod(-12, 7), (-2, 2))
301 self.assertEqual(divmod(12, -7), (-2, -2))
302 self.assertEqual(divmod(-12, -7), (1, -5))
Walter Dörwald919497e2003-01-19 16:23:59 +0000303
Guido van Rossume2a383d2007-01-15 16:59:06 +0000304 self.assertEqual(divmod(12, 7), (1, 5))
305 self.assertEqual(divmod(-12, 7), (-2, 2))
306 self.assertEqual(divmod(12, -7), (-2, -2))
307 self.assertEqual(divmod(-12, -7), (1, -5))
Walter Dörwald919497e2003-01-19 16:23:59 +0000308
Raymond Hettinger5ea7e312004-09-30 07:47:20 +0000309 self.assertEqual(divmod(-sys.maxint-1, -1),
310 (sys.maxint+1, 0))
311
Walter Dörwald919497e2003-01-19 16:23:59 +0000312 self.assert_(not fcmp(divmod(3.25, 1.0), (3.0, 0.25)))
313 self.assert_(not fcmp(divmod(-3.25, 1.0), (-4.0, 0.75)))
314 self.assert_(not fcmp(divmod(3.25, -1.0), (-4.0, -0.75)))
315 self.assert_(not fcmp(divmod(-3.25, -1.0), (3.0, -0.25)))
316
317 self.assertRaises(TypeError, divmod)
318
319 def test_eval(self):
320 self.assertEqual(eval('1+1'), 2)
321 self.assertEqual(eval(' 1+1\n'), 2)
322 globals = {'a': 1, 'b': 2}
323 locals = {'b': 200, 'c': 300}
324 self.assertEqual(eval('a', globals) , 1)
325 self.assertEqual(eval('a', globals, locals), 1)
326 self.assertEqual(eval('b', globals, locals), 200)
327 self.assertEqual(eval('c', globals, locals), 300)
Walter Dörwald919497e2003-01-19 16:23:59 +0000328 globals = {'a': 1, 'b': 2}
329 locals = {'b': 200, 'c': 300}
Walter Dörwald1f5947b2007-05-22 16:52:54 +0000330## bom = b'\xef\xbb\xbf'
331## self.assertEqual(eval(bom + b'a', globals, locals), 1)
332 self.assertEqual(eval('"\xe5"', globals), "\xe5")
Walter Dörwald919497e2003-01-19 16:23:59 +0000333 self.assertRaises(TypeError, eval)
334 self.assertRaises(TypeError, eval, ())
335
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000336 def test_general_eval(self):
337 # Tests that general mappings can be used for the locals argument
338
339 class M:
340 "Test mapping interface versus possible calls from eval()."
341 def __getitem__(self, key):
342 if key == 'a':
343 return 12
344 raise KeyError
Guido van Rossumcd70eee2007-02-11 18:53:00 +0000345 def keys(self):
346 return list('xyz')
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000347
348 m = M()
349 g = globals()
350 self.assertEqual(eval('a', g, m), 12)
351 self.assertRaises(NameError, eval, 'b', g, m)
352 self.assertEqual(eval('dir()', g, m), list('xyz'))
353 self.assertEqual(eval('globals()', g, m), g)
354 self.assertEqual(eval('locals()', g, m), m)
Raymond Hettinger513ffe82004-07-06 13:44:41 +0000355 self.assertRaises(TypeError, eval, 'a', m)
Raymond Hettinger66bd2332004-08-02 08:30:07 +0000356 class A:
357 "Non-mapping"
358 pass
359 m = A()
360 self.assertRaises(TypeError, eval, 'a', g, m)
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000361
362 # Verify that dict subclasses work as well
363 class D(dict):
364 def __getitem__(self, key):
365 if key == 'a':
366 return 12
367 return dict.__getitem__(self, key)
Guido van Rossumcd70eee2007-02-11 18:53:00 +0000368 def keys(self):
369 return list('xyz')
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000370
371 d = D()
372 self.assertEqual(eval('a', g, d), 12)
373 self.assertRaises(NameError, eval, 'b', g, d)
374 self.assertEqual(eval('dir()', g, d), list('xyz'))
375 self.assertEqual(eval('globals()', g, d), g)
376 self.assertEqual(eval('locals()', g, d), d)
377
378 # Verify locals stores (used by list comps)
379 eval('[locals() for i in (2,3)]', g, d)
380 eval('[locals() for i in (2,3)]', g, UserDict.UserDict())
381
382 class SpreadSheet:
383 "Sample application showing nested, calculated lookups."
384 _cells = {}
385 def __setitem__(self, key, formula):
386 self._cells[key] = formula
Thomas Wouters73e5a5b2006-06-08 15:35:45 +0000387 def __getitem__(self, key):
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000388 return eval(self._cells[key], globals(), self)
389
390 ss = SpreadSheet()
391 ss['a1'] = '5'
392 ss['a2'] = 'a1*6'
393 ss['a3'] = 'a2*7'
394 self.assertEqual(ss['a3'], 210)
395
Raymond Hettinger2a7dede2004-08-07 04:55:30 +0000396 # Verify that dir() catches a non-list returned by eval
397 # SF bug #1004669
398 class C:
399 def __getitem__(self, item):
400 raise KeyError(item)
Guido van Rossumcd70eee2007-02-11 18:53:00 +0000401 def keys(self):
402 return 1 # used to be 'a' but that's no longer an error
Raymond Hettinger2a7dede2004-08-07 04:55:30 +0000403 self.assertRaises(TypeError, eval, 'dir()', globals(), C())
404
Georg Brandl7cae87c2006-09-06 06:51:57 +0000405 def test_exec(self):
406 g = {}
407 exec('z = 1', g)
408 if '__builtins__' in g:
409 del g['__builtins__']
410 self.assertEqual(g, {'z': 1})
411
Guido van Rossumef87d6e2007-05-02 19:09:54 +0000412 exec('z = 1+1', g)
Georg Brandl7cae87c2006-09-06 06:51:57 +0000413 if '__builtins__' in g:
414 del g['__builtins__']
415 self.assertEqual(g, {'z': 2})
416 g = {}
417 l = {}
418
419 import warnings
420 warnings.filterwarnings("ignore", "global statement", module="<string>")
421 exec('global a; a = 1; b = 2', g, l)
422 if '__builtins__' in g:
423 del g['__builtins__']
424 if '__builtins__' in l:
425 del l['__builtins__']
426 self.assertEqual((g, l), ({'a': 1}, {'b': 2}))
427
Walter Dörwald919497e2003-01-19 16:23:59 +0000428 def test_filter(self):
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000429 self.assertEqual(list(filter(lambda c: 'a' <= c <= 'z', 'Hello World')), list('elloorld'))
430 self.assertEqual(list(filter(None, [1, 'hello', [], [3], '', None, 9, 0])), [1, 'hello', [3], 9])
431 self.assertEqual(list(filter(lambda x: x > 0, [1, -3, 9, 0, 2])), [1, 9, 2])
432 self.assertEqual(list(filter(None, Squares(10))), [1, 4, 9, 16, 25, 36, 49, 64, 81])
433 self.assertEqual(list(filter(lambda x: x%2, Squares(10))), [1, 9, 25, 49, 81])
Walter Dörwald919497e2003-01-19 16:23:59 +0000434 def identity(item):
435 return 1
436 filter(identity, Squares(5))
437 self.assertRaises(TypeError, filter)
438 class BadSeq(object):
Tim Petersf2715e02003-02-19 02:35:07 +0000439 def __getitem__(self, index):
440 if index<4:
441 return 42
442 raise ValueError
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000443 self.assertRaises(ValueError, list, filter(lambda x: x, BadSeq()))
Walter Dörwald919497e2003-01-19 16:23:59 +0000444 def badfunc():
445 pass
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000446 self.assertRaises(TypeError, list, filter(badfunc, range(5)))
Walter Dörwald919497e2003-01-19 16:23:59 +0000447
Walter Dörwaldbf517072003-01-27 15:57:14 +0000448 # test bltinmodule.c::filtertuple()
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000449 self.assertEqual(list(filter(None, (1, 2))), [1, 2])
450 self.assertEqual(list(filter(lambda x: x>=3, (1, 2, 3, 4))), [3, 4])
451 self.assertRaises(TypeError, list, filter(42, (1, 2)))
Walter Dörwaldc3da83f2003-02-04 20:24:45 +0000452
Walter Dörwald919497e2003-01-19 16:23:59 +0000453 def test_float(self):
454 self.assertEqual(float(3.14), 3.14)
455 self.assertEqual(float(314), 314.0)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000456 self.assertEqual(float(314), 314.0)
Walter Dörwald919497e2003-01-19 16:23:59 +0000457 self.assertEqual(float(" 3.14 "), 3.14)
Neal Norwitze7214a12005-12-18 05:03:17 +0000458 self.assertRaises(ValueError, float, " 0x3.1 ")
459 self.assertRaises(ValueError, float, " -0x3.p-1 ")
Walter Dörwald1f5947b2007-05-22 16:52:54 +0000460 self.assertEqual(float(str(b" \u0663.\u0661\u0664 ",'raw-unicode-escape')), 3.14)
461 self.assertEqual(float("1"*10000), 1e10000) # Inf on both sides
Walter Dörwald919497e2003-01-19 16:23:59 +0000462
Thomas Wouters477c8d52006-05-27 19:21:47 +0000463 @run_with_locale('LC_NUMERIC', 'fr_FR', 'de_DE')
Neal Norwitz5898fa22005-11-22 05:17:40 +0000464 def test_float_with_comma(self):
465 # set locale to something that doesn't use '.' for the decimal point
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000466 # float must not accept the locale specific decimal point but
467 # it still has to accept the normal python syntac
Thomas Wouters477c8d52006-05-27 19:21:47 +0000468 import locale
469 if not locale.localeconv()['decimal_point'] == ',':
Neal Norwitz5898fa22005-11-22 05:17:40 +0000470 return
471
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000472 self.assertEqual(float(" 3.14 "), 3.14)
473 self.assertEqual(float("+3.14 "), 3.14)
474 self.assertEqual(float("-3.14 "), -3.14)
475 self.assertEqual(float(".14 "), .14)
476 self.assertEqual(float("3. "), 3.0)
477 self.assertEqual(float("3.e3 "), 3000.0)
478 self.assertEqual(float("3.2e3 "), 3200.0)
479 self.assertEqual(float("2.5e-1 "), 0.25)
480 self.assertEqual(float("5e-1"), 0.5)
481 self.assertRaises(ValueError, float, " 3,14 ")
482 self.assertRaises(ValueError, float, " +3,14 ")
483 self.assertRaises(ValueError, float, " -3,14 ")
Thomas Wouters477c8d52006-05-27 19:21:47 +0000484 self.assertRaises(ValueError, float, " 0x3.1 ")
485 self.assertRaises(ValueError, float, " -0x3.p-1 ")
486 self.assertEqual(float(" 25.e-1 "), 2.5)
487 self.assertEqual(fcmp(float(" .25e-1 "), .025), 0)
Neal Norwitz5898fa22005-11-22 05:17:40 +0000488
Brett Cannonc3647ac2005-04-26 03:45:26 +0000489 def test_floatconversion(self):
490 # Make sure that calls to __float__() work properly
491 class Foo0:
492 def __float__(self):
493 return 42.
494
495 class Foo1(object):
496 def __float__(self):
497 return 42.
498
499 class Foo2(float):
500 def __float__(self):
501 return 42.
502
503 class Foo3(float):
504 def __new__(cls, value=0.):
505 return float.__new__(cls, 2*value)
506
507 def __float__(self):
508 return self
509
510 class Foo4(float):
511 def __float__(self):
512 return 42
513
514 self.assertAlmostEqual(float(Foo0()), 42.)
515 self.assertAlmostEqual(float(Foo1()), 42.)
516 self.assertAlmostEqual(float(Foo2()), 42.)
517 self.assertAlmostEqual(float(Foo3(21)), 42.)
518 self.assertRaises(TypeError, float, Foo4(42))
519
Eric Smith8c663262007-08-25 02:26:07 +0000520 def test_format(self):
521 class A:
522 def __init__(self, x):
523 self.x = x
524 def __format__(self, format_spec):
525 return str(self.x) + format_spec
526
527 # class that returns a bad type from __format__
528 class H:
529 def __format__(self, format_spec):
530 return 1.0
531
532 self.assertEqual(format(3, ''), '3')
533 self.assertEqual(format(A(3), 'spec'), '3spec')
534
535 # for builtin types, format(x, "") == str(x)
536 self.assertEqual(format(17**13, ""), str(17**13))
537 self.assertEqual(format(1.0, ""), str(1.0))
538 self.assertEqual(format(3.1415e104, ""), str(3.1415e104))
539 self.assertEqual(format(-3.1415e104, ""), str(-3.1415e104))
540 self.assertEqual(format(3.1415e-104, ""), str(3.1415e-104))
541 self.assertEqual(format(-3.1415e-104, ""), str(-3.1415e-104))
542 self.assertEqual(format(object, ""), str(object))
543
544 #self.assertRaises(TypeError, format, H(), "")
545
Walter Dörwald919497e2003-01-19 16:23:59 +0000546 def test_getattr(self):
547 import sys
548 self.assert_(getattr(sys, 'stdout') is sys.stdout)
549 self.assertRaises(TypeError, getattr, sys, 1)
550 self.assertRaises(TypeError, getattr, sys, 1, "foo")
551 self.assertRaises(TypeError, getattr)
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000552 self.assertRaises(AttributeError, getattr, sys, chr(sys.maxunicode))
Walter Dörwald919497e2003-01-19 16:23:59 +0000553
554 def test_hasattr(self):
555 import sys
556 self.assert_(hasattr(sys, 'stdout'))
557 self.assertRaises(TypeError, hasattr, sys, 1)
558 self.assertRaises(TypeError, hasattr)
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000559 self.assertEqual(False, hasattr(sys, chr(sys.maxunicode)))
Walter Dörwald919497e2003-01-19 16:23:59 +0000560
561 def test_hash(self):
562 hash(None)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000563 self.assertEqual(hash(1), hash(1))
Walter Dörwald919497e2003-01-19 16:23:59 +0000564 self.assertEqual(hash(1), hash(1.0))
565 hash('spam')
Walter Dörwald1f5947b2007-05-22 16:52:54 +0000566 self.assertEqual(hash('spam'), hash(str8('spam')))
Walter Dörwald919497e2003-01-19 16:23:59 +0000567 hash((0,1,2,3))
568 def f(): pass
569 self.assertRaises(TypeError, hash, [])
570 self.assertRaises(TypeError, hash, {})
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000571 # Bug 1536021: Allow hash to return long objects
572 class X:
573 def __hash__(self):
574 return 2**100
575 self.assertEquals(type(hash(X())), int)
576 class Y(object):
577 def __hash__(self):
578 return 2**100
579 self.assertEquals(type(hash(Y())), int)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000580 class Z(int):
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000581 def __hash__(self):
582 return self
Guido van Rossume2a383d2007-01-15 16:59:06 +0000583 self.assertEquals(hash(Z(42)), hash(42))
Walter Dörwald919497e2003-01-19 16:23:59 +0000584
585 def test_hex(self):
586 self.assertEqual(hex(16), '0x10')
Guido van Rossume2a383d2007-01-15 16:59:06 +0000587 self.assertEqual(hex(16), '0x10')
Guido van Rossum6c9e1302003-11-29 23:52:13 +0000588 self.assertEqual(hex(-16), '-0x10')
Guido van Rossume2a383d2007-01-15 16:59:06 +0000589 self.assertEqual(hex(-16), '-0x10')
Walter Dörwald919497e2003-01-19 16:23:59 +0000590 self.assertRaises(TypeError, hex, {})
591
592 def test_id(self):
593 id(None)
594 id(1)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000595 id(1)
Walter Dörwald919497e2003-01-19 16:23:59 +0000596 id(1.0)
597 id('spam')
598 id((0,1,2,3))
599 id([0,1,2,3])
600 id({'spam': 1, 'eggs': 2, 'ham': 3})
601
Guido van Rossuma88a0332007-02-26 16:59:55 +0000602 # Test input() later, alphabetized as if it were raw_input
603
Walter Dörwald919497e2003-01-19 16:23:59 +0000604 def test_int(self):
605 self.assertEqual(int(314), 314)
606 self.assertEqual(int(3.14), 3)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000607 self.assertEqual(int(314), 314)
Walter Dörwald919497e2003-01-19 16:23:59 +0000608 # Check that conversion from float truncates towards zero
609 self.assertEqual(int(-3.14), -3)
610 self.assertEqual(int(3.9), 3)
611 self.assertEqual(int(-3.9), -3)
612 self.assertEqual(int(3.5), 3)
613 self.assertEqual(int(-3.5), -3)
614 # Different base:
Guido van Rossume2a383d2007-01-15 16:59:06 +0000615 self.assertEqual(int("10",16), 16)
Walter Dörwald919497e2003-01-19 16:23:59 +0000616 # Test conversion from strings and various anomalies
617 for s, v in L:
618 for sign in "", "+", "-":
619 for prefix in "", " ", "\t", " \t\t ":
620 ss = prefix + sign + s
621 vv = v
622 if sign == "-" and v is not ValueError:
623 vv = -v
624 try:
625 self.assertEqual(int(ss), vv)
626 except v:
627 pass
628
Walter Dörwald70a6b492004-02-12 17:35:32 +0000629 s = repr(-1-sys.maxint)
Thomas Wouters89f507f2006-12-13 04:49:30 +0000630 x = int(s)
631 self.assertEqual(x+1, -sys.maxint)
632 self.assert_(isinstance(x, int))
Walter Dörwald919497e2003-01-19 16:23:59 +0000633 # should return long
Thomas Wouters89f507f2006-12-13 04:49:30 +0000634 self.assertEqual(int(s[1:]), sys.maxint+1)
Walter Dörwald919497e2003-01-19 16:23:59 +0000635
636 # should return long
637 x = int(1e100)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000638 self.assert_(isinstance(x, int))
Walter Dörwald919497e2003-01-19 16:23:59 +0000639 x = int(-1e100)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000640 self.assert_(isinstance(x, int))
Walter Dörwald919497e2003-01-19 16:23:59 +0000641
642
643 # SF bug 434186: 0x80000000/2 != 0x80000000>>1.
644 # Worked by accident in Windows release build, but failed in debug build.
645 # Failed in all Linux builds.
646 x = -1-sys.maxint
647 self.assertEqual(x >> 1, x//2)
648
649 self.assertRaises(ValueError, int, '123\0')
650 self.assertRaises(ValueError, int, '53', 40)
651
Thomas Wouters89f507f2006-12-13 04:49:30 +0000652 # SF bug 1545497: embedded NULs were not detected with
653 # explicit base
654 self.assertRaises(ValueError, int, '123\0', 10)
655 self.assertRaises(ValueError, int, '123\x00 245', 20)
656
Walter Dörwald919497e2003-01-19 16:23:59 +0000657 x = int('1' * 600)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000658 self.assert_(isinstance(x, int))
Walter Dörwald919497e2003-01-19 16:23:59 +0000659
Walter Dörwald1f5947b2007-05-22 16:52:54 +0000660 x = int(chr(0x661) * 600)
661 self.assert_(isinstance(x, int))
Walter Dörwald919497e2003-01-19 16:23:59 +0000662
663 self.assertRaises(TypeError, int, 1, 12)
664
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000665 # tests with base 0
666 self.assertRaises(ValueError, int, ' 0123 ', 0) # old octal syntax
667 self.assertEqual(int('000', 0), 0)
668 self.assertEqual(int('0o123', 0), 83)
669 self.assertEqual(int('0x123', 0), 291)
670 self.assertEqual(int('0b100', 0), 4)
671 self.assertEqual(int(' 0O123 ', 0), 83)
672 self.assertEqual(int(' 0X123 ', 0), 291)
673 self.assertEqual(int(' 0B100 ', 0), 4)
674
675 # without base still base 10
676 self.assertEqual(int('0123'), 123)
677 self.assertEqual(int('0123', 10), 123)
678
679 # tests with prefix and base != 0
Neal Norwitz5898fa22005-11-22 05:17:40 +0000680 self.assertEqual(int('0x123', 16), 291)
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000681 self.assertEqual(int('0o123', 8), 83)
682 self.assertEqual(int('0b100', 2), 4)
683 self.assertEqual(int('0X123', 16), 291)
684 self.assertEqual(int('0O123', 8), 83)
685 self.assertEqual(int('0B100', 2), 4)
Walter Dörwald919497e2003-01-19 16:23:59 +0000686
Thomas Wouters477c8d52006-05-27 19:21:47 +0000687 # SF bug 1334662: int(string, base) wrong answers
688 # Various representations of 2**32 evaluated to 0
689 # rather than 2**32 in previous versions
690
Guido van Rossume2a383d2007-01-15 16:59:06 +0000691 self.assertEqual(int('100000000000000000000000000000000', 2), 4294967296)
692 self.assertEqual(int('102002022201221111211', 3), 4294967296)
693 self.assertEqual(int('10000000000000000', 4), 4294967296)
694 self.assertEqual(int('32244002423141', 5), 4294967296)
695 self.assertEqual(int('1550104015504', 6), 4294967296)
696 self.assertEqual(int('211301422354', 7), 4294967296)
697 self.assertEqual(int('40000000000', 8), 4294967296)
698 self.assertEqual(int('12068657454', 9), 4294967296)
699 self.assertEqual(int('4294967296', 10), 4294967296)
700 self.assertEqual(int('1904440554', 11), 4294967296)
701 self.assertEqual(int('9ba461594', 12), 4294967296)
702 self.assertEqual(int('535a79889', 13), 4294967296)
703 self.assertEqual(int('2ca5b7464', 14), 4294967296)
704 self.assertEqual(int('1a20dcd81', 15), 4294967296)
705 self.assertEqual(int('100000000', 16), 4294967296)
706 self.assertEqual(int('a7ffda91', 17), 4294967296)
707 self.assertEqual(int('704he7g4', 18), 4294967296)
708 self.assertEqual(int('4f5aff66', 19), 4294967296)
709 self.assertEqual(int('3723ai4g', 20), 4294967296)
710 self.assertEqual(int('281d55i4', 21), 4294967296)
711 self.assertEqual(int('1fj8b184', 22), 4294967296)
712 self.assertEqual(int('1606k7ic', 23), 4294967296)
713 self.assertEqual(int('mb994ag', 24), 4294967296)
714 self.assertEqual(int('hek2mgl', 25), 4294967296)
715 self.assertEqual(int('dnchbnm', 26), 4294967296)
716 self.assertEqual(int('b28jpdm', 27), 4294967296)
717 self.assertEqual(int('8pfgih4', 28), 4294967296)
718 self.assertEqual(int('76beigg', 29), 4294967296)
719 self.assertEqual(int('5qmcpqg', 30), 4294967296)
720 self.assertEqual(int('4q0jto4', 31), 4294967296)
721 self.assertEqual(int('4000000', 32), 4294967296)
722 self.assertEqual(int('3aokq94', 33), 4294967296)
723 self.assertEqual(int('2qhxjli', 34), 4294967296)
724 self.assertEqual(int('2br45qb', 35), 4294967296)
725 self.assertEqual(int('1z141z4', 36), 4294967296)
Thomas Wouters477c8d52006-05-27 19:21:47 +0000726
727 # SF bug 1334662: int(string, base) wrong answers
728 # Checks for proper evaluation of 2**32 + 1
Guido van Rossume2a383d2007-01-15 16:59:06 +0000729 self.assertEqual(int('100000000000000000000000000000001', 2), 4294967297)
730 self.assertEqual(int('102002022201221111212', 3), 4294967297)
731 self.assertEqual(int('10000000000000001', 4), 4294967297)
732 self.assertEqual(int('32244002423142', 5), 4294967297)
733 self.assertEqual(int('1550104015505', 6), 4294967297)
734 self.assertEqual(int('211301422355', 7), 4294967297)
735 self.assertEqual(int('40000000001', 8), 4294967297)
736 self.assertEqual(int('12068657455', 9), 4294967297)
737 self.assertEqual(int('4294967297', 10), 4294967297)
738 self.assertEqual(int('1904440555', 11), 4294967297)
739 self.assertEqual(int('9ba461595', 12), 4294967297)
740 self.assertEqual(int('535a7988a', 13), 4294967297)
741 self.assertEqual(int('2ca5b7465', 14), 4294967297)
742 self.assertEqual(int('1a20dcd82', 15), 4294967297)
743 self.assertEqual(int('100000001', 16), 4294967297)
744 self.assertEqual(int('a7ffda92', 17), 4294967297)
745 self.assertEqual(int('704he7g5', 18), 4294967297)
746 self.assertEqual(int('4f5aff67', 19), 4294967297)
747 self.assertEqual(int('3723ai4h', 20), 4294967297)
748 self.assertEqual(int('281d55i5', 21), 4294967297)
749 self.assertEqual(int('1fj8b185', 22), 4294967297)
750 self.assertEqual(int('1606k7id', 23), 4294967297)
751 self.assertEqual(int('mb994ah', 24), 4294967297)
752 self.assertEqual(int('hek2mgm', 25), 4294967297)
753 self.assertEqual(int('dnchbnn', 26), 4294967297)
754 self.assertEqual(int('b28jpdn', 27), 4294967297)
755 self.assertEqual(int('8pfgih5', 28), 4294967297)
756 self.assertEqual(int('76beigh', 29), 4294967297)
757 self.assertEqual(int('5qmcpqh', 30), 4294967297)
758 self.assertEqual(int('4q0jto5', 31), 4294967297)
759 self.assertEqual(int('4000001', 32), 4294967297)
760 self.assertEqual(int('3aokq95', 33), 4294967297)
761 self.assertEqual(int('2qhxjlj', 34), 4294967297)
762 self.assertEqual(int('2br45qc', 35), 4294967297)
763 self.assertEqual(int('1z141z5', 36), 4294967297)
Thomas Wouters477c8d52006-05-27 19:21:47 +0000764
Brett Cannonc3647ac2005-04-26 03:45:26 +0000765 def test_intconversion(self):
766 # Test __int__()
767 class Foo0:
768 def __int__(self):
769 return 42
770
771 class Foo1(object):
772 def __int__(self):
773 return 42
774
775 class Foo2(int):
776 def __int__(self):
777 return 42
778
779 class Foo3(int):
780 def __int__(self):
781 return self
782
783 class Foo4(int):
784 def __int__(self):
Guido van Rossume2a383d2007-01-15 16:59:06 +0000785 return 42
Brett Cannonc3647ac2005-04-26 03:45:26 +0000786
787 class Foo5(int):
788 def __int__(self):
789 return 42.
790
791 self.assertEqual(int(Foo0()), 42)
792 self.assertEqual(int(Foo1()), 42)
793 self.assertEqual(int(Foo2()), 42)
794 self.assertEqual(int(Foo3()), 0)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000795 self.assertEqual(int(Foo4()), 42)
Brett Cannonc3647ac2005-04-26 03:45:26 +0000796 self.assertRaises(TypeError, int, Foo5())
797
Walter Dörwald919497e2003-01-19 16:23:59 +0000798 def test_iter(self):
799 self.assertRaises(TypeError, iter)
800 self.assertRaises(TypeError, iter, 42, 42)
801 lists = [("1", "2"), ["1", "2"], "12"]
Walter Dörwald919497e2003-01-19 16:23:59 +0000802 for l in lists:
803 i = iter(l)
Georg Brandla18af4e2007-04-21 15:47:16 +0000804 self.assertEqual(next(i), '1')
805 self.assertEqual(next(i), '2')
806 self.assertRaises(StopIteration, next, i)
Walter Dörwald919497e2003-01-19 16:23:59 +0000807
808 def test_isinstance(self):
809 class C:
810 pass
811 class D(C):
812 pass
813 class E:
814 pass
815 c = C()
816 d = D()
817 e = E()
818 self.assert_(isinstance(c, C))
819 self.assert_(isinstance(d, C))
820 self.assert_(not isinstance(e, C))
821 self.assert_(not isinstance(c, D))
822 self.assert_(not isinstance('foo', E))
823 self.assertRaises(TypeError, isinstance, E, 'foo')
824 self.assertRaises(TypeError, isinstance)
825
826 def test_issubclass(self):
827 class C:
828 pass
829 class D(C):
830 pass
831 class E:
832 pass
833 c = C()
834 d = D()
835 e = E()
836 self.assert_(issubclass(D, C))
837 self.assert_(issubclass(C, C))
838 self.assert_(not issubclass(C, D))
839 self.assertRaises(TypeError, issubclass, 'foo', E)
840 self.assertRaises(TypeError, issubclass, E, 'foo')
841 self.assertRaises(TypeError, issubclass)
842
843 def test_len(self):
844 self.assertEqual(len('123'), 3)
845 self.assertEqual(len(()), 0)
846 self.assertEqual(len((1, 2, 3, 4)), 4)
847 self.assertEqual(len([1, 2, 3, 4]), 4)
848 self.assertEqual(len({}), 0)
849 self.assertEqual(len({'a':1, 'b': 2}), 2)
850 class BadSeq:
851 def __len__(self):
852 raise ValueError
853 self.assertRaises(ValueError, len, BadSeq())
854
855 def test_list(self):
856 self.assertEqual(list([]), [])
857 l0_3 = [0, 1, 2, 3]
858 l0_3_bis = list(l0_3)
859 self.assertEqual(l0_3, l0_3_bis)
860 self.assert_(l0_3 is not l0_3_bis)
861 self.assertEqual(list(()), [])
862 self.assertEqual(list((0, 1, 2, 3)), [0, 1, 2, 3])
863 self.assertEqual(list(''), [])
864 self.assertEqual(list('spam'), ['s', 'p', 'a', 'm'])
865
866 if sys.maxint == 0x7fffffff:
867 # This test can currently only work on 32-bit machines.
868 # XXX If/when PySequence_Length() returns a ssize_t, it should be
869 # XXX re-enabled.
870 # Verify clearing of bug #556025.
871 # This assumes that the max data size (sys.maxint) == max
872 # address size this also assumes that the address size is at
873 # least 4 bytes with 8 byte addresses, the bug is not well
874 # tested
875 #
876 # Note: This test is expected to SEGV under Cygwin 1.3.12 or
877 # earlier due to a newlib bug. See the following mailing list
878 # thread for the details:
879
880 # http://sources.redhat.com/ml/newlib/2002/msg00369.html
Guido van Rossum805365e2007-05-07 22:24:25 +0000881 self.assertRaises(MemoryError, list, range(sys.maxint // 2))
Walter Dörwald919497e2003-01-19 16:23:59 +0000882
Raymond Hettingeraa241e02004-09-26 19:24:20 +0000883 # This code used to segfault in Py2.4a3
884 x = []
885 x.extend(-y for y in x)
886 self.assertEqual(x, [])
887
Walter Dörwald919497e2003-01-19 16:23:59 +0000888 def test_long(self):
Guido van Rossume2a383d2007-01-15 16:59:06 +0000889 self.assertEqual(int(314), 314)
890 self.assertEqual(int(3.14), 3)
891 self.assertEqual(int(314), 314)
Walter Dörwald919497e2003-01-19 16:23:59 +0000892 # Check that conversion from float truncates towards zero
Guido van Rossume2a383d2007-01-15 16:59:06 +0000893 self.assertEqual(int(-3.14), -3)
894 self.assertEqual(int(3.9), 3)
895 self.assertEqual(int(-3.9), -3)
896 self.assertEqual(int(3.5), 3)
897 self.assertEqual(int(-3.5), -3)
898 self.assertEqual(int("-3"), -3)
Walter Dörwald919497e2003-01-19 16:23:59 +0000899 # Different base:
Guido van Rossume2a383d2007-01-15 16:59:06 +0000900 self.assertEqual(int("10",16), 16)
Walter Dörwald919497e2003-01-19 16:23:59 +0000901 # Check conversions from string (same test set as for int(), and then some)
902 LL = [
Guido van Rossume2a383d2007-01-15 16:59:06 +0000903 ('1' + '0'*20, 10**20),
904 ('1' + '0'*100, 10**100)
Walter Dörwald919497e2003-01-19 16:23:59 +0000905 ]
Walter Dörwald1f5947b2007-05-22 16:52:54 +0000906 for s, v in LL:
Walter Dörwald919497e2003-01-19 16:23:59 +0000907 for sign in "", "+", "-":
908 for prefix in "", " ", "\t", " \t\t ":
909 ss = prefix + sign + s
910 vv = v
911 if sign == "-" and v is not ValueError:
912 vv = -v
913 try:
Guido van Rossume2a383d2007-01-15 16:59:06 +0000914 self.assertEqual(int(ss), int(vv))
Walter Dörwald919497e2003-01-19 16:23:59 +0000915 except v:
916 pass
917
Guido van Rossume2a383d2007-01-15 16:59:06 +0000918 self.assertRaises(ValueError, int, '123\0')
919 self.assertRaises(ValueError, int, '53', 40)
920 self.assertRaises(TypeError, int, 1, 12)
Walter Dörwald919497e2003-01-19 16:23:59 +0000921
Guido van Rossumd8faa362007-04-27 19:54:29 +0000922 # SF patch #1638879: embedded NULs were not detected with
923 # explicit base
924 self.assertRaises(ValueError, int, '123\0', 10)
925 self.assertRaises(ValueError, int, '123\x00 245', 20)
926
Guido van Rossume2a383d2007-01-15 16:59:06 +0000927 self.assertEqual(int('100000000000000000000000000000000', 2),
Thomas Wouters477c8d52006-05-27 19:21:47 +0000928 4294967296)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000929 self.assertEqual(int('102002022201221111211', 3), 4294967296)
930 self.assertEqual(int('10000000000000000', 4), 4294967296)
931 self.assertEqual(int('32244002423141', 5), 4294967296)
932 self.assertEqual(int('1550104015504', 6), 4294967296)
933 self.assertEqual(int('211301422354', 7), 4294967296)
934 self.assertEqual(int('40000000000', 8), 4294967296)
935 self.assertEqual(int('12068657454', 9), 4294967296)
936 self.assertEqual(int('4294967296', 10), 4294967296)
937 self.assertEqual(int('1904440554', 11), 4294967296)
938 self.assertEqual(int('9ba461594', 12), 4294967296)
939 self.assertEqual(int('535a79889', 13), 4294967296)
940 self.assertEqual(int('2ca5b7464', 14), 4294967296)
941 self.assertEqual(int('1a20dcd81', 15), 4294967296)
942 self.assertEqual(int('100000000', 16), 4294967296)
943 self.assertEqual(int('a7ffda91', 17), 4294967296)
944 self.assertEqual(int('704he7g4', 18), 4294967296)
945 self.assertEqual(int('4f5aff66', 19), 4294967296)
946 self.assertEqual(int('3723ai4g', 20), 4294967296)
947 self.assertEqual(int('281d55i4', 21), 4294967296)
948 self.assertEqual(int('1fj8b184', 22), 4294967296)
949 self.assertEqual(int('1606k7ic', 23), 4294967296)
950 self.assertEqual(int('mb994ag', 24), 4294967296)
951 self.assertEqual(int('hek2mgl', 25), 4294967296)
952 self.assertEqual(int('dnchbnm', 26), 4294967296)
953 self.assertEqual(int('b28jpdm', 27), 4294967296)
954 self.assertEqual(int('8pfgih4', 28), 4294967296)
955 self.assertEqual(int('76beigg', 29), 4294967296)
956 self.assertEqual(int('5qmcpqg', 30), 4294967296)
957 self.assertEqual(int('4q0jto4', 31), 4294967296)
958 self.assertEqual(int('4000000', 32), 4294967296)
959 self.assertEqual(int('3aokq94', 33), 4294967296)
960 self.assertEqual(int('2qhxjli', 34), 4294967296)
961 self.assertEqual(int('2br45qb', 35), 4294967296)
962 self.assertEqual(int('1z141z4', 36), 4294967296)
Thomas Wouters477c8d52006-05-27 19:21:47 +0000963
Guido van Rossume2a383d2007-01-15 16:59:06 +0000964 self.assertEqual(int('100000000000000000000000000000001', 2),
Thomas Wouters477c8d52006-05-27 19:21:47 +0000965 4294967297)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000966 self.assertEqual(int('102002022201221111212', 3), 4294967297)
967 self.assertEqual(int('10000000000000001', 4), 4294967297)
968 self.assertEqual(int('32244002423142', 5), 4294967297)
969 self.assertEqual(int('1550104015505', 6), 4294967297)
970 self.assertEqual(int('211301422355', 7), 4294967297)
971 self.assertEqual(int('40000000001', 8), 4294967297)
972 self.assertEqual(int('12068657455', 9), 4294967297)
973 self.assertEqual(int('4294967297', 10), 4294967297)
974 self.assertEqual(int('1904440555', 11), 4294967297)
975 self.assertEqual(int('9ba461595', 12), 4294967297)
976 self.assertEqual(int('535a7988a', 13), 4294967297)
977 self.assertEqual(int('2ca5b7465', 14), 4294967297)
978 self.assertEqual(int('1a20dcd82', 15), 4294967297)
979 self.assertEqual(int('100000001', 16), 4294967297)
980 self.assertEqual(int('a7ffda92', 17), 4294967297)
981 self.assertEqual(int('704he7g5', 18), 4294967297)
982 self.assertEqual(int('4f5aff67', 19), 4294967297)
983 self.assertEqual(int('3723ai4h', 20), 4294967297)
984 self.assertEqual(int('281d55i5', 21), 4294967297)
985 self.assertEqual(int('1fj8b185', 22), 4294967297)
986 self.assertEqual(int('1606k7id', 23), 4294967297)
987 self.assertEqual(int('mb994ah', 24), 4294967297)
988 self.assertEqual(int('hek2mgm', 25), 4294967297)
989 self.assertEqual(int('dnchbnn', 26), 4294967297)
990 self.assertEqual(int('b28jpdn', 27), 4294967297)
991 self.assertEqual(int('8pfgih5', 28), 4294967297)
992 self.assertEqual(int('76beigh', 29), 4294967297)
993 self.assertEqual(int('5qmcpqh', 30), 4294967297)
994 self.assertEqual(int('4q0jto5', 31), 4294967297)
995 self.assertEqual(int('4000001', 32), 4294967297)
996 self.assertEqual(int('3aokq95', 33), 4294967297)
997 self.assertEqual(int('2qhxjlj', 34), 4294967297)
998 self.assertEqual(int('2br45qc', 35), 4294967297)
999 self.assertEqual(int('1z141z5', 36), 4294967297)
Thomas Wouters477c8d52006-05-27 19:21:47 +00001000
1001
Brett Cannonc3647ac2005-04-26 03:45:26 +00001002 def test_longconversion(self):
1003 # Test __long__()
1004 class Foo0:
1005 def __long__(self):
Guido van Rossume2a383d2007-01-15 16:59:06 +00001006 return 42
Brett Cannonc3647ac2005-04-26 03:45:26 +00001007
1008 class Foo1(object):
1009 def __long__(self):
Guido van Rossume2a383d2007-01-15 16:59:06 +00001010 return 42
Brett Cannonc3647ac2005-04-26 03:45:26 +00001011
Guido van Rossume2a383d2007-01-15 16:59:06 +00001012 class Foo2(int):
Brett Cannonc3647ac2005-04-26 03:45:26 +00001013 def __long__(self):
1014 return 42
1015
Guido van Rossume2a383d2007-01-15 16:59:06 +00001016 class Foo3(int):
1017 def __long__(self):
1018 return self
1019
1020 class Foo4(int):
1021 def __long__(self):
1022 return 42
1023
1024 class Foo5(int):
Brett Cannonc3647ac2005-04-26 03:45:26 +00001025 def __long__(self):
1026 return 42.
1027
Guido van Rossume2a383d2007-01-15 16:59:06 +00001028 self.assertEqual(int(Foo0()), 42)
1029 self.assertEqual(int(Foo1()), 42)
Guido van Rossumd8faa362007-04-27 19:54:29 +00001030 # XXX invokes __int__ now
Guido van Rossumddefaf32007-01-14 03:31:43 +00001031 # self.assertEqual(long(Foo2()), 42L)
Guido van Rossume2a383d2007-01-15 16:59:06 +00001032 self.assertEqual(int(Foo3()), 0)
Guido van Rossumd8faa362007-04-27 19:54:29 +00001033 # XXX likewise
Guido van Rossumddefaf32007-01-14 03:31:43 +00001034 # self.assertEqual(long(Foo4()), 42)
1035 # self.assertRaises(TypeError, long, Foo5())
Brett Cannonc3647ac2005-04-26 03:45:26 +00001036
Walter Dörwald919497e2003-01-19 16:23:59 +00001037 def test_map(self):
1038 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001039 list(map(None, 'hello')),
1040 [('h',), ('e',), ('l',), ('l',), ('o',)]
Walter Dörwald919497e2003-01-19 16:23:59 +00001041 )
1042 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001043 list(map(None, 'abcd', 'efg')),
1044 [('a', 'e'), ('b', 'f'), ('c', 'g')]
Walter Dörwald919497e2003-01-19 16:23:59 +00001045 )
1046 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001047 list(map(None, range(3))),
1048 [(0,), (1,), (2,)]
Walter Dörwald919497e2003-01-19 16:23:59 +00001049 )
1050 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001051 list(map(lambda x: x*x, range(1,4))),
Walter Dörwald919497e2003-01-19 16:23:59 +00001052 [1, 4, 9]
1053 )
1054 try:
1055 from math import sqrt
1056 except ImportError:
1057 def sqrt(x):
1058 return pow(x, 0.5)
1059 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001060 list(map(lambda x: list(map(sqrt, x)), [[16, 4], [81, 9]])),
Walter Dörwald919497e2003-01-19 16:23:59 +00001061 [[4.0, 2.0], [9.0, 3.0]]
1062 )
1063 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001064 list(map(lambda x, y: x+y, [1,3,2], [9,1,4])),
Walter Dörwald919497e2003-01-19 16:23:59 +00001065 [10, 4, 6]
1066 )
1067
1068 def plus(*v):
1069 accu = 0
1070 for i in v: accu = accu + i
1071 return accu
1072 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001073 list(map(plus, [1, 3, 7])),
Walter Dörwald919497e2003-01-19 16:23:59 +00001074 [1, 3, 7]
1075 )
1076 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001077 list(map(plus, [1, 3, 7], [4, 9, 2])),
Walter Dörwald919497e2003-01-19 16:23:59 +00001078 [1+4, 3+9, 7+2]
1079 )
1080 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001081 list(map(plus, [1, 3, 7], [4, 9, 2], [1, 1, 0])),
Walter Dörwald919497e2003-01-19 16:23:59 +00001082 [1+4+1, 3+9+1, 7+2+0]
1083 )
1084 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001085 list(map(None, Squares(10))),
1086 [(0,), (1,), (4,), (9,), (16,), (25,), (36,), (49,), (64,), (81,)]
1087 )
1088 self.assertEqual(
1089 list(map(int, Squares(10))),
Walter Dörwald919497e2003-01-19 16:23:59 +00001090 [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
1091 )
1092 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001093 list(map(None, Squares(3), Squares(2))),
1094 [(0,0), (1,1)]
Walter Dörwald919497e2003-01-19 16:23:59 +00001095 )
Guido van Rossum47b9ff62006-08-24 00:41:19 +00001096 def Max(a, b):
1097 if a is None:
1098 return b
1099 if b is None:
1100 return a
1101 return max(a, b)
Walter Dörwald919497e2003-01-19 16:23:59 +00001102 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001103 list(map(Max, Squares(3), Squares(2))),
1104 [0, 1]
Walter Dörwald919497e2003-01-19 16:23:59 +00001105 )
1106 self.assertRaises(TypeError, map)
1107 self.assertRaises(TypeError, map, lambda x: x, 42)
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001108 self.assertEqual(list(map(None, [42])), [(42,)])
Walter Dörwald919497e2003-01-19 16:23:59 +00001109 class BadSeq:
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001110 def __iter__(self):
Walter Dörwald919497e2003-01-19 16:23:59 +00001111 raise ValueError
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001112 yield None
1113 self.assertRaises(ValueError, list, map(lambda x: x, BadSeq()))
Neal Norwitzfcf44352005-11-27 20:37:43 +00001114 def badfunc(x):
1115 raise RuntimeError
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001116 self.assertRaises(RuntimeError, list, map(badfunc, range(5)))
Walter Dörwald919497e2003-01-19 16:23:59 +00001117
1118 def test_max(self):
1119 self.assertEqual(max('123123'), '3')
1120 self.assertEqual(max(1, 2, 3), 3)
1121 self.assertEqual(max((1, 2, 3, 1, 2, 3)), 3)
1122 self.assertEqual(max([1, 2, 3, 1, 2, 3]), 3)
1123
Guido van Rossume2a383d2007-01-15 16:59:06 +00001124 self.assertEqual(max(1, 2, 3.0), 3.0)
1125 self.assertEqual(max(1, 2.0, 3), 3)
1126 self.assertEqual(max(1.0, 2, 3), 3)
Walter Dörwald919497e2003-01-19 16:23:59 +00001127
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001128 for stmt in (
1129 "max(key=int)", # no args
1130 "max(1, key=int)", # single arg not iterable
1131 "max(1, 2, keystone=int)", # wrong keyword
1132 "max(1, 2, key=int, abc=int)", # two many keywords
1133 "max(1, 2, key=1)", # keyfunc is not callable
1134 ):
Tim Peters7f061872004-12-07 21:17:46 +00001135 try:
Georg Brandl7cae87c2006-09-06 06:51:57 +00001136 exec(stmt, globals())
Tim Peters7f061872004-12-07 21:17:46 +00001137 except TypeError:
1138 pass
1139 else:
1140 self.fail(stmt)
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001141
1142 self.assertEqual(max((1,), key=neg), 1) # one elem iterable
1143 self.assertEqual(max((1,2), key=neg), 1) # two elem iterable
1144 self.assertEqual(max(1, 2, key=neg), 1) # two elems
1145
1146 data = [random.randrange(200) for i in range(100)]
1147 keys = dict((elem, random.randrange(50)) for elem in data)
1148 f = keys.__getitem__
1149 self.assertEqual(max(data, key=f),
1150 sorted(reversed(data), key=f)[-1])
1151
Walter Dörwald919497e2003-01-19 16:23:59 +00001152 def test_min(self):
1153 self.assertEqual(min('123123'), '1')
1154 self.assertEqual(min(1, 2, 3), 1)
1155 self.assertEqual(min((1, 2, 3, 1, 2, 3)), 1)
1156 self.assertEqual(min([1, 2, 3, 1, 2, 3]), 1)
1157
Guido van Rossume2a383d2007-01-15 16:59:06 +00001158 self.assertEqual(min(1, 2, 3.0), 1)
1159 self.assertEqual(min(1, 2.0, 3), 1)
1160 self.assertEqual(min(1.0, 2, 3), 1.0)
Walter Dörwald919497e2003-01-19 16:23:59 +00001161
1162 self.assertRaises(TypeError, min)
1163 self.assertRaises(TypeError, min, 42)
1164 self.assertRaises(ValueError, min, ())
1165 class BadSeq:
1166 def __getitem__(self, index):
1167 raise ValueError
1168 self.assertRaises(ValueError, min, BadSeq())
1169 class BadNumber:
1170 def __cmp__(self, other):
1171 raise ValueError
Guido van Rossum47b9ff62006-08-24 00:41:19 +00001172 self.assertRaises(TypeError, min, (42, BadNumber()))
Walter Dörwald919497e2003-01-19 16:23:59 +00001173
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001174 for stmt in (
1175 "min(key=int)", # no args
1176 "min(1, key=int)", # single arg not iterable
1177 "min(1, 2, keystone=int)", # wrong keyword
1178 "min(1, 2, key=int, abc=int)", # two many keywords
1179 "min(1, 2, key=1)", # keyfunc is not callable
1180 ):
Tim Peters7f061872004-12-07 21:17:46 +00001181 try:
Georg Brandl7cae87c2006-09-06 06:51:57 +00001182 exec(stmt, globals())
Tim Peters7f061872004-12-07 21:17:46 +00001183 except TypeError:
1184 pass
1185 else:
1186 self.fail(stmt)
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001187
1188 self.assertEqual(min((1,), key=neg), 1) # one elem iterable
1189 self.assertEqual(min((1,2), key=neg), 2) # two elem iterable
1190 self.assertEqual(min(1, 2, key=neg), 2) # two elems
1191
1192 data = [random.randrange(200) for i in range(100)]
1193 keys = dict((elem, random.randrange(50)) for elem in data)
1194 f = keys.__getitem__
1195 self.assertEqual(min(data, key=f),
1196 sorted(data, key=f)[0])
1197
Georg Brandla18af4e2007-04-21 15:47:16 +00001198 def test_next(self):
1199 it = iter(range(2))
1200 self.assertEqual(next(it), 0)
1201 self.assertEqual(next(it), 1)
1202 self.assertRaises(StopIteration, next, it)
1203 self.assertRaises(StopIteration, next, it)
1204 self.assertEquals(next(it, 42), 42)
1205
1206 class Iter(object):
1207 def __iter__(self):
1208 return self
1209 def __next__(self):
1210 raise StopIteration
1211
1212 it = iter(Iter())
1213 self.assertEquals(next(it, 42), 42)
1214 self.assertRaises(StopIteration, next, it)
1215
1216 def gen():
1217 yield 1
1218 return
1219
1220 it = gen()
1221 self.assertEquals(next(it), 1)
1222 self.assertRaises(StopIteration, next, it)
1223 self.assertEquals(next(it, 42), 42)
1224
Walter Dörwald919497e2003-01-19 16:23:59 +00001225 def test_oct(self):
Guido van Rossumcd16bf62007-06-13 18:07:49 +00001226 self.assertEqual(oct(100), '0o144')
1227 self.assertEqual(oct(100), '0o144')
1228 self.assertEqual(oct(-100), '-0o144')
1229 self.assertEqual(oct(-100), '-0o144')
Walter Dörwald919497e2003-01-19 16:23:59 +00001230 self.assertRaises(TypeError, oct, ())
1231
1232 def write_testfile(self):
Guido van Rossuma88a0332007-02-26 16:59:55 +00001233 # NB the first 4 lines are also used to test input, below
Walter Dörwald919497e2003-01-19 16:23:59 +00001234 fp = open(TESTFN, 'w')
1235 try:
1236 fp.write('1+1\n')
1237 fp.write('1+1\n')
1238 fp.write('The quick brown fox jumps over the lazy dog')
1239 fp.write('.\n')
1240 fp.write('Dear John\n')
1241 fp.write('XXX'*100)
1242 fp.write('YYY'*100)
1243 finally:
1244 fp.close()
1245
1246 def test_open(self):
1247 self.write_testfile()
1248 fp = open(TESTFN, 'r')
1249 try:
1250 self.assertEqual(fp.readline(4), '1+1\n')
1251 self.assertEqual(fp.readline(4), '1+1\n')
1252 self.assertEqual(fp.readline(), 'The quick brown fox jumps over the lazy dog.\n')
1253 self.assertEqual(fp.readline(4), 'Dear')
1254 self.assertEqual(fp.readline(100), ' John\n')
1255 self.assertEqual(fp.read(300), 'XXX'*100)
1256 self.assertEqual(fp.read(1000), 'YYY'*100)
1257 finally:
1258 fp.close()
1259 unlink(TESTFN)
1260
1261 def test_ord(self):
1262 self.assertEqual(ord(' '), 32)
1263 self.assertEqual(ord('A'), 65)
1264 self.assertEqual(ord('a'), 97)
Guido van Rossumf9e91c92007-05-08 21:05:48 +00001265 self.assertEqual(ord('\x80'), 128)
1266 self.assertEqual(ord('\xff'), 255)
1267
1268 self.assertEqual(ord(b' '), 32)
1269 self.assertEqual(ord(b'A'), 65)
1270 self.assertEqual(ord(b'a'), 97)
1271 self.assertEqual(ord(b'\x80'), 128)
1272 self.assertEqual(ord(b'\xff'), 255)
1273
Walter Dörwald1f5947b2007-05-22 16:52:54 +00001274 self.assertEqual(ord(chr(sys.maxunicode)), sys.maxunicode)
Walter Dörwald919497e2003-01-19 16:23:59 +00001275 self.assertRaises(TypeError, ord, 42)
Walter Dörwald919497e2003-01-19 16:23:59 +00001276
Guido van Rossum8ac004e2007-07-15 13:00:05 +00001277 self.assertEqual(ord(chr(0x10FFFF)), 0x10FFFF)
1278 self.assertEqual(ord("\U0000FFFF"), 0x0000FFFF)
1279 self.assertEqual(ord("\U00010000"), 0x00010000)
1280 self.assertEqual(ord("\U00010001"), 0x00010001)
1281 self.assertEqual(ord("\U000FFFFE"), 0x000FFFFE)
1282 self.assertEqual(ord("\U000FFFFF"), 0x000FFFFF)
1283 self.assertEqual(ord("\U00100000"), 0x00100000)
1284 self.assertEqual(ord("\U00100001"), 0x00100001)
1285 self.assertEqual(ord("\U0010FFFE"), 0x0010FFFE)
1286 self.assertEqual(ord("\U0010FFFF"), 0x0010FFFF)
1287
Walter Dörwald919497e2003-01-19 16:23:59 +00001288 def test_pow(self):
1289 self.assertEqual(pow(0,0), 1)
1290 self.assertEqual(pow(0,1), 0)
1291 self.assertEqual(pow(1,0), 1)
1292 self.assertEqual(pow(1,1), 1)
1293
1294 self.assertEqual(pow(2,0), 1)
1295 self.assertEqual(pow(2,10), 1024)
1296 self.assertEqual(pow(2,20), 1024*1024)
1297 self.assertEqual(pow(2,30), 1024*1024*1024)
1298
1299 self.assertEqual(pow(-2,0), 1)
1300 self.assertEqual(pow(-2,1), -2)
1301 self.assertEqual(pow(-2,2), 4)
1302 self.assertEqual(pow(-2,3), -8)
1303
Guido van Rossume2a383d2007-01-15 16:59:06 +00001304 self.assertEqual(pow(0,0), 1)
1305 self.assertEqual(pow(0,1), 0)
1306 self.assertEqual(pow(1,0), 1)
1307 self.assertEqual(pow(1,1), 1)
Walter Dörwald919497e2003-01-19 16:23:59 +00001308
Guido van Rossume2a383d2007-01-15 16:59:06 +00001309 self.assertEqual(pow(2,0), 1)
1310 self.assertEqual(pow(2,10), 1024)
1311 self.assertEqual(pow(2,20), 1024*1024)
1312 self.assertEqual(pow(2,30), 1024*1024*1024)
Walter Dörwald919497e2003-01-19 16:23:59 +00001313
Guido van Rossume2a383d2007-01-15 16:59:06 +00001314 self.assertEqual(pow(-2,0), 1)
1315 self.assertEqual(pow(-2,1), -2)
1316 self.assertEqual(pow(-2,2), 4)
1317 self.assertEqual(pow(-2,3), -8)
Walter Dörwald919497e2003-01-19 16:23:59 +00001318
1319 self.assertAlmostEqual(pow(0.,0), 1.)
1320 self.assertAlmostEqual(pow(0.,1), 0.)
1321 self.assertAlmostEqual(pow(1.,0), 1.)
1322 self.assertAlmostEqual(pow(1.,1), 1.)
1323
1324 self.assertAlmostEqual(pow(2.,0), 1.)
1325 self.assertAlmostEqual(pow(2.,10), 1024.)
1326 self.assertAlmostEqual(pow(2.,20), 1024.*1024.)
1327 self.assertAlmostEqual(pow(2.,30), 1024.*1024.*1024.)
1328
1329 self.assertAlmostEqual(pow(-2.,0), 1.)
1330 self.assertAlmostEqual(pow(-2.,1), -2.)
1331 self.assertAlmostEqual(pow(-2.,2), 4.)
1332 self.assertAlmostEqual(pow(-2.,3), -8.)
1333
Guido van Rossume2a383d2007-01-15 16:59:06 +00001334 for x in 2, 2, 2.0:
1335 for y in 10, 10, 10.0:
1336 for z in 1000, 1000, 1000.0:
Walter Dörwald919497e2003-01-19 16:23:59 +00001337 if isinstance(x, float) or \
1338 isinstance(y, float) or \
1339 isinstance(z, float):
1340 self.assertRaises(TypeError, pow, x, y, z)
1341 else:
1342 self.assertAlmostEqual(pow(x, y, z), 24.0)
1343
1344 self.assertRaises(TypeError, pow, -1, -2, 3)
1345 self.assertRaises(ValueError, pow, 1, 2, 0)
Guido van Rossume2a383d2007-01-15 16:59:06 +00001346 self.assertRaises(TypeError, pow, -1, -2, 3)
1347 self.assertRaises(ValueError, pow, 1, 2, 0)
Walter Dörwald919497e2003-01-19 16:23:59 +00001348 self.assertRaises(ValueError, pow, -342.43, 0.234)
1349
1350 self.assertRaises(TypeError, pow)
1351
1352 def test_range(self):
Guido van Rossum805365e2007-05-07 22:24:25 +00001353 self.assertEqual(list(range(3)), [0, 1, 2])
1354 self.assertEqual(list(range(1, 5)), [1, 2, 3, 4])
1355 self.assertEqual(list(range(0)), [])
1356 self.assertEqual(list(range(-3)), [])
1357 self.assertEqual(list(range(1, 10, 3)), [1, 4, 7])
1358 #self.assertEqual(list(range(5, -5, -3)), [5, 2, -1, -4])
Walter Dörwald919497e2003-01-19 16:23:59 +00001359
Guido van Rossum805365e2007-05-07 22:24:25 +00001360 """ XXX(nnorwitz):
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001361 # Now test range() with longs
Guido van Rossum805365e2007-05-07 22:24:25 +00001362 self.assertEqual(list(range(-2**100)), [])
1363 self.assertEqual(list(range(0, -2**100)), [])
1364 self.assertEqual(list(range(0, 2**100, -1)), [])
1365 self.assertEqual(list(range(0, 2**100, -1)), [])
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001366
Guido van Rossume2a383d2007-01-15 16:59:06 +00001367 a = int(10 * sys.maxint)
1368 b = int(100 * sys.maxint)
1369 c = int(50 * sys.maxint)
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001370
Guido van Rossum805365e2007-05-07 22:24:25 +00001371 self.assertEqual(list(range(a, a+2)), [a, a+1])
1372 self.assertEqual(list(range(a+2, a, -1)), [a+2, a+1])
1373 self.assertEqual(list(range(a+4, a, -2)), [a+4, a+2])
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001374
Guido van Rossum805365e2007-05-07 22:24:25 +00001375 seq = list(range(a, b, c))
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001376 self.assert_(a in seq)
1377 self.assert_(b not in seq)
1378 self.assertEqual(len(seq), 2)
1379
Guido van Rossum805365e2007-05-07 22:24:25 +00001380 seq = list(range(b, a, -c))
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001381 self.assert_(b in seq)
1382 self.assert_(a not in seq)
1383 self.assertEqual(len(seq), 2)
1384
Guido van Rossum805365e2007-05-07 22:24:25 +00001385 seq = list(range(-a, -b, -c))
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001386 self.assert_(-a in seq)
1387 self.assert_(-b not in seq)
1388 self.assertEqual(len(seq), 2)
1389
Walter Dörwald919497e2003-01-19 16:23:59 +00001390 self.assertRaises(TypeError, range)
1391 self.assertRaises(TypeError, range, 1, 2, 3, 4)
1392 self.assertRaises(ValueError, range, 1, 2, 0)
Guido van Rossume2a383d2007-01-15 16:59:06 +00001393 self.assertRaises(ValueError, range, a, a + 1, int(0))
Neal Norwitzfcf44352005-11-27 20:37:43 +00001394
1395 class badzero(int):
Guido van Rossum47b9ff62006-08-24 00:41:19 +00001396 def __eq__(self, other):
Neal Norwitzfcf44352005-11-27 20:37:43 +00001397 raise RuntimeError
Guido van Rossum47b9ff62006-08-24 00:41:19 +00001398 __ne__ = __lt__ = __gt__ = __le__ = __ge__ = __eq__
1399
1400 # XXX This won't (but should!) raise RuntimeError if a is an int...
Neal Norwitzfcf44352005-11-27 20:37:43 +00001401 self.assertRaises(RuntimeError, range, a, a + 1, badzero(1))
Guido van Rossum805365e2007-05-07 22:24:25 +00001402 """
Walter Dörwald919497e2003-01-19 16:23:59 +00001403
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001404 # Reject floats when it would require PyLongs to represent.
1405 # (smaller floats still accepted, but deprecated)
Tim Peters299b3df2003-04-15 14:40:03 +00001406 self.assertRaises(TypeError, range, 1e100, 1e101, 1e101)
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001407
Walter Dörwald357981e2003-04-15 18:59:28 +00001408 self.assertRaises(TypeError, range, 0, "spam")
1409 self.assertRaises(TypeError, range, 0, 42, "spam")
1410
Guido van Rossum805365e2007-05-07 22:24:25 +00001411 #NEAL self.assertRaises(OverflowError, range, -sys.maxint, sys.maxint)
1412 #NEAL self.assertRaises(OverflowError, range, 0, 2*sys.maxint)
1413
1414 self.assertRaises(OverflowError, len, range(0, sys.maxint**10))
Walter Dörwald357981e2003-04-15 18:59:28 +00001415
Guido van Rossuma88a0332007-02-26 16:59:55 +00001416 def test_input(self):
1417 self.write_testfile()
1418 fp = open(TESTFN, 'r')
1419 savestdin = sys.stdin
1420 savestdout = sys.stdout # Eats the echo
1421 try:
1422 sys.stdin = fp
1423 sys.stdout = BitBucket()
1424 self.assertEqual(input(), "1+1")
1425 self.assertEqual(input('testing\n'), "1+1")
1426 self.assertEqual(input(), 'The quick brown fox jumps over the lazy dog.')
1427 self.assertEqual(input('testing\n'), 'Dear John')
1428
1429 # SF 1535165: don't segfault on closed stdin
1430 # sys.stdout must be a regular file for triggering
1431 sys.stdout = savestdout
1432 sys.stdin.close()
1433 self.assertRaises(ValueError, input)
1434
1435 sys.stdout = BitBucket()
Guido van Rossum34d19282007-08-09 01:03:29 +00001436 sys.stdin = io.StringIO("NULL\0")
Guido van Rossuma88a0332007-02-26 16:59:55 +00001437 self.assertRaises(TypeError, input, 42, 42)
Guido van Rossum34d19282007-08-09 01:03:29 +00001438 sys.stdin = io.StringIO(" 'whitespace'")
Guido van Rossuma88a0332007-02-26 16:59:55 +00001439 self.assertEqual(input(), " 'whitespace'")
Guido van Rossum34d19282007-08-09 01:03:29 +00001440 sys.stdin = io.StringIO()
Guido van Rossuma88a0332007-02-26 16:59:55 +00001441 self.assertRaises(EOFError, input)
1442
1443 del sys.stdout
1444 self.assertRaises(RuntimeError, input, 'prompt')
1445 del sys.stdin
1446 self.assertRaises(RuntimeError, input, 'prompt')
1447 finally:
1448 sys.stdin = savestdin
1449 sys.stdout = savestdout
1450 fp.close()
1451 unlink(TESTFN)
1452
Walter Dörwald919497e2003-01-19 16:23:59 +00001453 def test_repr(self):
1454 self.assertEqual(repr(''), '\'\'')
1455 self.assertEqual(repr(0), '0')
Guido van Rossume2a383d2007-01-15 16:59:06 +00001456 self.assertEqual(repr(0), '0')
Walter Dörwald919497e2003-01-19 16:23:59 +00001457 self.assertEqual(repr(()), '()')
1458 self.assertEqual(repr([]), '[]')
1459 self.assertEqual(repr({}), '{}')
1460 a = []
1461 a.append(a)
1462 self.assertEqual(repr(a), '[[...]]')
1463 a = {}
1464 a[0] = a
1465 self.assertEqual(repr(a), '{0: {...}}')
1466
1467 def test_round(self):
1468 self.assertEqual(round(0.0), 0.0)
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001469 self.assertEqual(type(round(0.0)), int)
Walter Dörwald919497e2003-01-19 16:23:59 +00001470 self.assertEqual(round(1.0), 1.0)
1471 self.assertEqual(round(10.0), 10.0)
1472 self.assertEqual(round(1000000000.0), 1000000000.0)
1473 self.assertEqual(round(1e20), 1e20)
1474
1475 self.assertEqual(round(-1.0), -1.0)
1476 self.assertEqual(round(-10.0), -10.0)
1477 self.assertEqual(round(-1000000000.0), -1000000000.0)
1478 self.assertEqual(round(-1e20), -1e20)
1479
1480 self.assertEqual(round(0.1), 0.0)
1481 self.assertEqual(round(1.1), 1.0)
1482 self.assertEqual(round(10.1), 10.0)
1483 self.assertEqual(round(1000000000.1), 1000000000.0)
1484
1485 self.assertEqual(round(-1.1), -1.0)
1486 self.assertEqual(round(-10.1), -10.0)
1487 self.assertEqual(round(-1000000000.1), -1000000000.0)
1488
1489 self.assertEqual(round(0.9), 1.0)
1490 self.assertEqual(round(9.9), 10.0)
1491 self.assertEqual(round(999999999.9), 1000000000.0)
1492
1493 self.assertEqual(round(-0.9), -1.0)
1494 self.assertEqual(round(-9.9), -10.0)
1495 self.assertEqual(round(-999999999.9), -1000000000.0)
1496
1497 self.assertEqual(round(-8.0, -1), -10.0)
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001498 self.assertEqual(type(round(-8.0, -1)), float)
1499
1500 self.assertEqual(type(round(-8.0, 0)), float)
1501 self.assertEqual(type(round(-8.0, 1)), float)
1502
1503 # Check even / odd rounding behaviour
1504 self.assertEqual(round(5.5), 6)
1505 self.assertEqual(round(6.5), 6)
1506 self.assertEqual(round(-5.5), -6)
1507 self.assertEqual(round(-6.5), -6)
1508
1509 # Check behavior on ints
1510 self.assertEqual(round(0), 0)
1511 self.assertEqual(round(8), 8)
1512 self.assertEqual(round(-8), -8)
1513 self.assertEqual(type(round(0)), int)
1514 self.assertEqual(type(round(-8, -1)), float)
1515 self.assertEqual(type(round(-8, 0)), float)
1516 self.assertEqual(type(round(-8, 1)), float)
Walter Dörwald919497e2003-01-19 16:23:59 +00001517
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001518 # test new kwargs
1519 self.assertEqual(round(number=-8.0, ndigits=-1), -10.0)
1520
Walter Dörwald919497e2003-01-19 16:23:59 +00001521 self.assertRaises(TypeError, round)
1522
Alex Martelliae211f92007-08-22 23:21:33 +00001523 # test generic rounding delegation for reals
1524 class TestRound:
1525 def __round__(self):
1526 return 23
1527
1528 class TestNoRound:
1529 pass
1530
1531 self.assertEqual(round(TestRound()), 23)
1532
1533 self.assertRaises(TypeError, round, 1, 2, 3)
1534 self.assertRaises(TypeError, round, TestNoRound())
1535
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001536 t = TestNoRound()
1537 t.__round__ = lambda *args: args
1538 self.assertRaises(TypeError, round, t)
1539 self.assertRaises(TypeError, round, t, 0)
1540
Walter Dörwald919497e2003-01-19 16:23:59 +00001541 def test_setattr(self):
Tim Petersf2715e02003-02-19 02:35:07 +00001542 setattr(sys, 'spam', 1)
1543 self.assertEqual(sys.spam, 1)
1544 self.assertRaises(TypeError, setattr, sys, 1, 'spam')
1545 self.assertRaises(TypeError, setattr)
Walter Dörwald919497e2003-01-19 16:23:59 +00001546
1547 def test_str(self):
1548 self.assertEqual(str(''), '')
1549 self.assertEqual(str(0), '0')
Guido van Rossume2a383d2007-01-15 16:59:06 +00001550 self.assertEqual(str(0), '0')
Walter Dörwald919497e2003-01-19 16:23:59 +00001551 self.assertEqual(str(()), '()')
1552 self.assertEqual(str([]), '[]')
1553 self.assertEqual(str({}), '{}')
1554 a = []
1555 a.append(a)
1556 self.assertEqual(str(a), '[[...]]')
1557 a = {}
1558 a[0] = a
1559 self.assertEqual(str(a), '{0: {...}}')
1560
Alex Martellia70b1912003-04-22 08:12:33 +00001561 def test_sum(self):
1562 self.assertEqual(sum([]), 0)
Guido van Rossum805365e2007-05-07 22:24:25 +00001563 self.assertEqual(sum(list(range(2,8))), 27)
1564 self.assertEqual(sum(iter(list(range(2,8)))), 27)
Alex Martellia70b1912003-04-22 08:12:33 +00001565 self.assertEqual(sum(Squares(10)), 285)
1566 self.assertEqual(sum(iter(Squares(10))), 285)
1567 self.assertEqual(sum([[1], [2], [3]], []), [1, 2, 3])
1568
1569 self.assertRaises(TypeError, sum)
1570 self.assertRaises(TypeError, sum, 42)
1571 self.assertRaises(TypeError, sum, ['a', 'b', 'c'])
1572 self.assertRaises(TypeError, sum, ['a', 'b', 'c'], '')
1573 self.assertRaises(TypeError, sum, [[1], [2], [3]])
1574 self.assertRaises(TypeError, sum, [{2:3}])
1575 self.assertRaises(TypeError, sum, [{2:3}]*2, {2:3})
1576
1577 class BadSeq:
1578 def __getitem__(self, index):
1579 raise ValueError
1580 self.assertRaises(ValueError, sum, BadSeq())
1581
Alex Martelli86d8b342007-08-22 22:39:42 +00001582 def test_trunc(self):
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001583
1584 self.assertEqual(trunc(1), 1)
1585 self.assertEqual(trunc(-1), -1)
1586 self.assertEqual(type(trunc(1)), int)
1587 self.assertEqual(type(trunc(1.5)), int)
1588 self.assertEqual(trunc(1.5), 1)
1589 self.assertEqual(trunc(-1.5), -1)
1590 self.assertEqual(trunc(1.999999), 1)
1591 self.assertEqual(trunc(-1.999999), -1)
1592 self.assertEqual(trunc(-0.999999), -0)
1593 self.assertEqual(trunc(-100.999), -100)
1594
Alex Martelli86d8b342007-08-22 22:39:42 +00001595 class TestTrunc:
1596 def __trunc__(self):
1597 return 23
1598
1599 class TestNoTrunc:
1600 pass
1601
1602 self.assertEqual(trunc(TestTrunc()), 23)
1603
1604 self.assertRaises(TypeError, trunc)
1605 self.assertRaises(TypeError, trunc, 1, 2)
1606 self.assertRaises(TypeError, trunc, TestNoTrunc())
1607
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001608 t = TestNoTrunc()
1609 t.__trunc__ = lambda *args: args
1610 self.assertRaises(TypeError, trunc, t)
1611 self.assertRaises(TypeError, trunc, t, 0)
1612
Walter Dörwald919497e2003-01-19 16:23:59 +00001613 def test_tuple(self):
1614 self.assertEqual(tuple(()), ())
1615 t0_3 = (0, 1, 2, 3)
1616 t0_3_bis = tuple(t0_3)
1617 self.assert_(t0_3 is t0_3_bis)
1618 self.assertEqual(tuple([]), ())
1619 self.assertEqual(tuple([0, 1, 2, 3]), (0, 1, 2, 3))
1620 self.assertEqual(tuple(''), ())
1621 self.assertEqual(tuple('spam'), ('s', 'p', 'a', 'm'))
1622
1623 def test_type(self):
1624 self.assertEqual(type(''), type('123'))
1625 self.assertNotEqual(type(''), type(()))
1626
Guido van Rossumfee7b932005-01-16 00:21:28 +00001627 # We don't want self in vars(), so these are static methods
1628
1629 @staticmethod
Walter Dörwald919497e2003-01-19 16:23:59 +00001630 def get_vars_f0():
1631 return vars()
Walter Dörwald919497e2003-01-19 16:23:59 +00001632
Guido van Rossumfee7b932005-01-16 00:21:28 +00001633 @staticmethod
Walter Dörwald919497e2003-01-19 16:23:59 +00001634 def get_vars_f2():
1635 BuiltinTest.get_vars_f0()
1636 a = 1
1637 b = 2
1638 return vars()
Walter Dörwald919497e2003-01-19 16:23:59 +00001639
1640 def test_vars(self):
Raymond Hettingera690a992003-11-16 16:17:49 +00001641 self.assertEqual(set(vars()), set(dir()))
Walter Dörwald919497e2003-01-19 16:23:59 +00001642 import sys
Raymond Hettingera690a992003-11-16 16:17:49 +00001643 self.assertEqual(set(vars(sys)), set(dir(sys)))
Walter Dörwald919497e2003-01-19 16:23:59 +00001644 self.assertEqual(self.get_vars_f0(), {})
1645 self.assertEqual(self.get_vars_f2(), {'a': 1, 'b': 2})
1646 self.assertRaises(TypeError, vars, 42, 42)
1647 self.assertRaises(TypeError, vars, 42)
1648
1649 def test_zip(self):
1650 a = (1, 2, 3)
1651 b = (4, 5, 6)
1652 t = [(1, 4), (2, 5), (3, 6)]
Guido van Rossum801f0d72006-08-24 19:48:10 +00001653 self.assertEqual(list(zip(a, b)), t)
Walter Dörwald919497e2003-01-19 16:23:59 +00001654 b = [4, 5, 6]
Guido van Rossum801f0d72006-08-24 19:48:10 +00001655 self.assertEqual(list(zip(a, b)), t)
Walter Dörwald919497e2003-01-19 16:23:59 +00001656 b = (4, 5, 6, 7)
Guido van Rossum801f0d72006-08-24 19:48:10 +00001657 self.assertEqual(list(zip(a, b)), t)
Walter Dörwald919497e2003-01-19 16:23:59 +00001658 class I:
1659 def __getitem__(self, i):
1660 if i < 0 or i > 2: raise IndexError
1661 return i + 4
Guido van Rossum801f0d72006-08-24 19:48:10 +00001662 self.assertEqual(list(zip(a, I())), t)
1663 self.assertEqual(list(zip()), [])
1664 self.assertEqual(list(zip(*[])), [])
Walter Dörwald919497e2003-01-19 16:23:59 +00001665 self.assertRaises(TypeError, zip, None)
1666 class G:
1667 pass
1668 self.assertRaises(TypeError, zip, a, G())
1669
1670 # Make sure zip doesn't try to allocate a billion elements for the
1671 # result list when one of its arguments doesn't say how long it is.
1672 # A MemoryError is the most likely failure mode.
1673 class SequenceWithoutALength:
1674 def __getitem__(self, i):
1675 if i == 5:
1676 raise IndexError
1677 else:
1678 return i
1679 self.assertEqual(
Guido van Rossum805365e2007-05-07 22:24:25 +00001680 list(zip(SequenceWithoutALength(), range(2**30))),
Walter Dörwald919497e2003-01-19 16:23:59 +00001681 list(enumerate(range(5)))
1682 )
1683
1684 class BadSeq:
1685 def __getitem__(self, i):
1686 if i == 5:
1687 raise ValueError
1688 else:
1689 return i
Guido van Rossum801f0d72006-08-24 19:48:10 +00001690 self.assertRaises(ValueError, list, zip(BadSeq(), BadSeq()))
Walter Dörwald919497e2003-01-19 16:23:59 +00001691
Raymond Hettinger64958a12003-12-17 20:43:33 +00001692class TestSorted(unittest.TestCase):
1693
1694 def test_basic(self):
Guido van Rossum805365e2007-05-07 22:24:25 +00001695 data = list(range(100))
Raymond Hettinger64958a12003-12-17 20:43:33 +00001696 copy = data[:]
1697 random.shuffle(copy)
1698 self.assertEqual(data, sorted(copy))
1699 self.assertNotEqual(data, copy)
1700
1701 data.reverse()
1702 random.shuffle(copy)
Guido van Rossum47b9ff62006-08-24 00:41:19 +00001703 self.assertEqual(data, sorted(copy, cmp=lambda x, y: (x < y) - (x > y)))
Raymond Hettinger64958a12003-12-17 20:43:33 +00001704 self.assertNotEqual(data, copy)
1705 random.shuffle(copy)
1706 self.assertEqual(data, sorted(copy, key=lambda x: -x))
1707 self.assertNotEqual(data, copy)
1708 random.shuffle(copy)
1709 self.assertEqual(data, sorted(copy, reverse=1))
1710 self.assertNotEqual(data, copy)
1711
1712 def test_inputtypes(self):
1713 s = 'abracadabra'
Walter Dörwald1f5947b2007-05-22 16:52:54 +00001714 types = [list, tuple, str]
Walter Dörwald4e41a4b2005-08-03 17:09:04 +00001715 for T in types:
Raymond Hettinger64958a12003-12-17 20:43:33 +00001716 self.assertEqual(sorted(s), sorted(T(s)))
1717
Walter Dörwald1f5947b2007-05-22 16:52:54 +00001718 s = ''.join(set(s)) # unique letters only
1719 types = [str, set, frozenset, list, tuple, dict.fromkeys]
Walter Dörwald4e41a4b2005-08-03 17:09:04 +00001720 for T in types:
Raymond Hettinger64958a12003-12-17 20:43:33 +00001721 self.assertEqual(sorted(s), sorted(T(s)))
1722
1723 def test_baddecorator(self):
1724 data = 'The quick Brown fox Jumped over The lazy Dog'.split()
1725 self.assertRaises(TypeError, sorted, data, None, lambda x,y: 0)
1726
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001727def test_main(verbose=None):
1728 test_classes = (BuiltinTest, TestSorted)
1729
1730 run_unittest(*test_classes)
1731
1732 # verify reference counting
1733 if verbose and hasattr(sys, "gettotalrefcount"):
1734 import gc
1735 counts = [None] * 5
Guido van Rossum805365e2007-05-07 22:24:25 +00001736 for i in range(len(counts)):
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001737 run_unittest(*test_classes)
1738 gc.collect()
1739 counts[i] = sys.gettotalrefcount()
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001740 print(counts)
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001741
Walter Dörwald919497e2003-01-19 16:23:59 +00001742
1743if __name__ == "__main__":
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001744 test_main(verbose=True)