blob: 036a9f274f9c435861ebf48d7b82dfe47e28c878 [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
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),
Walter Dörwald1f5947b2007-05-22 16:52:54 +000073 (' \t\t ', ValueError),
Guido van Rossumef87d6e2007-05-02 19:09:54 +000074 (str(b'\u0663\u0661\u0664 ','raw-unicode-escape'), 314),
Guido van Rossum84fc66d2007-05-03 17:18:26 +000075 (chr(0x200), ValueError),
Walter Dörwald919497e2003-01-19 16:23:59 +000076]
77
Raymond Hettinger96229b12005-03-11 06:49:40 +000078class TestFailingBool:
Jack Diederich4dafcc42006-11-28 19:15:13 +000079 def __bool__(self):
Raymond Hettinger96229b12005-03-11 06:49:40 +000080 raise RuntimeError
81
82class TestFailingIter:
83 def __iter__(self):
84 raise RuntimeError
85
Walter Dörwald919497e2003-01-19 16:23:59 +000086class BuiltinTest(unittest.TestCase):
87
88 def test_import(self):
89 __import__('sys')
90 __import__('time')
91 __import__('string')
Guido van Rossumd8faa362007-04-27 19:54:29 +000092 __import__(name='sys')
93 __import__(name='time', level=0)
Walter Dörwald919497e2003-01-19 16:23:59 +000094 self.assertRaises(ImportError, __import__, 'spamspam')
95 self.assertRaises(TypeError, __import__, 1, 2, 3, 4)
Thomas Wouters49fd7fa2006-04-21 10:40:58 +000096 self.assertRaises(ValueError, __import__, '')
Guido van Rossumd8faa362007-04-27 19:54:29 +000097 self.assertRaises(TypeError, __import__, 'sys', name='sys')
Walter Dörwald919497e2003-01-19 16:23:59 +000098
99 def test_abs(self):
100 # int
101 self.assertEqual(abs(0), 0)
102 self.assertEqual(abs(1234), 1234)
103 self.assertEqual(abs(-1234), 1234)
Thomas Wouters89f507f2006-12-13 04:49:30 +0000104 self.assertTrue(abs(-sys.maxint-1) > 0)
Walter Dörwald919497e2003-01-19 16:23:59 +0000105 # float
106 self.assertEqual(abs(0.0), 0.0)
107 self.assertEqual(abs(3.14), 3.14)
108 self.assertEqual(abs(-3.14), 3.14)
109 # long
Guido van Rossume2a383d2007-01-15 16:59:06 +0000110 self.assertEqual(abs(0), 0)
111 self.assertEqual(abs(1234), 1234)
112 self.assertEqual(abs(-1234), 1234)
Walter Dörwald919497e2003-01-19 16:23:59 +0000113 # str
114 self.assertRaises(TypeError, abs, 'a')
115
Raymond Hettinger96229b12005-03-11 06:49:40 +0000116 def test_all(self):
117 self.assertEqual(all([2, 4, 6]), True)
118 self.assertEqual(all([2, None, 6]), False)
119 self.assertRaises(RuntimeError, all, [2, TestFailingBool(), 6])
120 self.assertRaises(RuntimeError, all, TestFailingIter())
121 self.assertRaises(TypeError, all, 10) # Non-iterable
122 self.assertRaises(TypeError, all) # No args
123 self.assertRaises(TypeError, all, [2, 4, 6], []) # Too many args
124 self.assertEqual(all([]), True) # Empty iterator
125 S = [50, 60]
126 self.assertEqual(all(x > 42 for x in S), True)
127 S = [50, 40, 60]
128 self.assertEqual(all(x > 42 for x in S), False)
129
130 def test_any(self):
131 self.assertEqual(any([None, None, None]), False)
132 self.assertEqual(any([None, 4, None]), True)
133 self.assertRaises(RuntimeError, any, [None, TestFailingBool(), 6])
134 self.assertRaises(RuntimeError, all, TestFailingIter())
135 self.assertRaises(TypeError, any, 10) # Non-iterable
136 self.assertRaises(TypeError, any) # No args
137 self.assertRaises(TypeError, any, [2, 4, 6], []) # Too many args
138 self.assertEqual(any([]), False) # Empty iterator
139 S = [40, 60, 30]
140 self.assertEqual(any(x > 42 for x in S), True)
141 S = [10, 20, 30]
142 self.assertEqual(any(x > 42 for x in S), False)
143
Thomas Wouters89f507f2006-12-13 04:49:30 +0000144 def test_neg(self):
145 x = -sys.maxint-1
146 self.assert_(isinstance(x, int))
147 self.assertEqual(-x, sys.maxint+1)
148
Guido van Rossumd59da4b2007-05-22 18:11:13 +0000149 # XXX(nnorwitz): This test case for callable should probably be removed.
Walter Dörwald919497e2003-01-19 16:23:59 +0000150 def test_callable(self):
Guido van Rossumd59da4b2007-05-22 18:11:13 +0000151 self.assert_(hasattr(len, '__call__'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000152 def f(): pass
Guido van Rossumd59da4b2007-05-22 18:11:13 +0000153 self.assert_(hasattr(f, '__call__'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000154 class C:
155 def meth(self): pass
Guido van Rossumd59da4b2007-05-22 18:11:13 +0000156 self.assert_(hasattr(C, '__call__'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000157 x = C()
Guido van Rossumd59da4b2007-05-22 18:11:13 +0000158 self.assert_(hasattr(x.meth, '__call__'))
159 self.assert_(not hasattr(x, '__call__'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000160 class D(C):
161 def __call__(self): pass
162 y = D()
Guido van Rossumd59da4b2007-05-22 18:11:13 +0000163 self.assert_(hasattr(y, '__call__'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000164 y()
165
166 def test_chr(self):
167 self.assertEqual(chr(32), ' ')
168 self.assertEqual(chr(65), 'A')
169 self.assertEqual(chr(97), 'a')
170 self.assertEqual(chr(0xff), '\xff')
Guido van Rossum572dbf82007-04-27 23:53:51 +0000171 self.assertRaises(ValueError, chr, 1<<24)
Walter Dörwald1f5947b2007-05-22 16:52:54 +0000172 self.assertEqual(
173 chr(sys.maxunicode),
174 str(('\\U%08x' % (sys.maxunicode)).encode("ascii"), 'unicode-escape')
175 )
176 self.assertRaises(ValueError, chr, sys.maxunicode+1)
Walter Dörwald919497e2003-01-19 16:23:59 +0000177 self.assertRaises(TypeError, chr)
178
Guido van Rossum47b9ff62006-08-24 00:41:19 +0000179 def XXX_test_cmp(self):
180 # cmp() is no longer supported
Walter Dörwald919497e2003-01-19 16:23:59 +0000181 self.assertEqual(cmp(-1, 1), -1)
182 self.assertEqual(cmp(1, -1), 1)
183 self.assertEqual(cmp(1, 1), 0)
Armin Rigo2b3eb402003-10-28 12:05:48 +0000184 # verify that circular objects are not handled
Walter Dörwald919497e2003-01-19 16:23:59 +0000185 a = []; a.append(a)
186 b = []; b.append(b)
187 from UserList import UserList
188 c = UserList(); c.append(c)
Armin Rigo2b3eb402003-10-28 12:05:48 +0000189 self.assertRaises(RuntimeError, cmp, a, b)
190 self.assertRaises(RuntimeError, cmp, b, c)
191 self.assertRaises(RuntimeError, cmp, c, a)
192 self.assertRaises(RuntimeError, cmp, a, c)
193 # okay, now break the cycles
Walter Dörwald919497e2003-01-19 16:23:59 +0000194 a.pop(); b.pop(); c.pop()
195 self.assertRaises(TypeError, cmp)
196
Walter Dörwald919497e2003-01-19 16:23:59 +0000197 def test_compile(self):
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000198 compile('print(1)\n', '', 'exec')
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000199## bom = b'\xef\xbb\xbf'
200## compile(bom + b'print(1)\n', '', 'exec')
Guido van Rossumd8faa362007-04-27 19:54:29 +0000201 compile(source='pass', filename='?', mode='exec')
202 compile(dont_inherit=0, filename='tmp', source='0', mode='eval')
203 compile('pass', '?', dont_inherit=1, mode='exec')
Walter Dörwald919497e2003-01-19 16:23:59 +0000204 self.assertRaises(TypeError, compile)
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000205 self.assertRaises(ValueError, compile, 'print(42)\n', '<string>', 'badmode')
206 self.assertRaises(ValueError, compile, 'print(42)\n', '<string>', 'single', 0xff)
Neal Norwitzfcf44352005-11-27 20:37:43 +0000207 self.assertRaises(TypeError, compile, chr(0), 'f', 'exec')
Guido van Rossumd8faa362007-04-27 19:54:29 +0000208 self.assertRaises(TypeError, compile, 'pass', '?', 'exec',
209 mode='eval', source='0', filename='tmp')
Walter Dörwald1f5947b2007-05-22 16:52:54 +0000210 compile('print("\xe5")\n', '', 'exec')
211 self.assertRaises(TypeError, compile, chr(0), 'f', 'exec')
212 self.assertRaises(ValueError, compile, str('a = 1'), 'f', 'bad')
Guido van Rossumd8faa362007-04-27 19:54:29 +0000213
Walter Dörwald919497e2003-01-19 16:23:59 +0000214 def test_delattr(self):
215 import sys
216 sys.spam = 1
217 delattr(sys, 'spam')
218 self.assertRaises(TypeError, delattr)
219
220 def test_dir(self):
Georg Brandle32b4222007-03-10 22:13:27 +0000221 # dir(wrong number of arguments)
Walter Dörwald919497e2003-01-19 16:23:59 +0000222 self.assertRaises(TypeError, dir, 42, 42)
223
Georg Brandle32b4222007-03-10 22:13:27 +0000224 # dir() - local scope
225 local_var = 1
226 self.assert_('local_var' in dir())
227
228 # dir(module)
229 import sys
230 self.assert_('exit' in dir(sys))
231
232 # dir(module_with_invalid__dict__)
233 import types
234 class Foo(types.ModuleType):
235 __dict__ = 8
236 f = Foo("foo")
237 self.assertRaises(TypeError, dir, f)
238
239 # dir(type)
240 self.assert_("strip" in dir(str))
241 self.assert_("__mro__" not in dir(str))
242
243 # dir(obj)
244 class Foo(object):
245 def __init__(self):
246 self.x = 7
247 self.y = 8
248 self.z = 9
249 f = Foo()
250 self.assert_("y" in dir(f))
251
252 # dir(obj_no__dict__)
253 class Foo(object):
254 __slots__ = []
255 f = Foo()
256 self.assert_("__repr__" in dir(f))
257
258 # dir(obj_no__class__with__dict__)
259 # (an ugly trick to cause getattr(f, "__class__") to fail)
260 class Foo(object):
261 __slots__ = ["__class__", "__dict__"]
262 def __init__(self):
263 self.bar = "wow"
264 f = Foo()
265 self.assert_("__repr__" not in dir(f))
266 self.assert_("bar" in dir(f))
267
268 # dir(obj_using __dir__)
269 class Foo(object):
270 def __dir__(self):
271 return ["kan", "ga", "roo"]
272 f = Foo()
273 self.assert_(dir(f) == ["ga", "kan", "roo"])
274
275 # dir(obj__dir__not_list)
276 class Foo(object):
277 def __dir__(self):
278 return 7
279 f = Foo()
280 self.assertRaises(TypeError, dir, f)
281
Walter Dörwald919497e2003-01-19 16:23:59 +0000282 def test_divmod(self):
283 self.assertEqual(divmod(12, 7), (1, 5))
284 self.assertEqual(divmod(-12, 7), (-2, 2))
285 self.assertEqual(divmod(12, -7), (-2, -2))
286 self.assertEqual(divmod(-12, -7), (1, -5))
287
Guido van Rossume2a383d2007-01-15 16:59:06 +0000288 self.assertEqual(divmod(12, 7), (1, 5))
289 self.assertEqual(divmod(-12, 7), (-2, 2))
290 self.assertEqual(divmod(12, -7), (-2, -2))
291 self.assertEqual(divmod(-12, -7), (1, -5))
Walter Dörwald919497e2003-01-19 16:23:59 +0000292
Guido van Rossume2a383d2007-01-15 16:59:06 +0000293 self.assertEqual(divmod(12, 7), (1, 5))
294 self.assertEqual(divmod(-12, 7), (-2, 2))
295 self.assertEqual(divmod(12, -7), (-2, -2))
296 self.assertEqual(divmod(-12, -7), (1, -5))
Walter Dörwald919497e2003-01-19 16:23:59 +0000297
Raymond Hettinger5ea7e312004-09-30 07:47:20 +0000298 self.assertEqual(divmod(-sys.maxint-1, -1),
299 (sys.maxint+1, 0))
300
Walter Dörwald919497e2003-01-19 16:23:59 +0000301 self.assert_(not fcmp(divmod(3.25, 1.0), (3.0, 0.25)))
302 self.assert_(not fcmp(divmod(-3.25, 1.0), (-4.0, 0.75)))
303 self.assert_(not fcmp(divmod(3.25, -1.0), (-4.0, -0.75)))
304 self.assert_(not fcmp(divmod(-3.25, -1.0), (3.0, -0.25)))
305
306 self.assertRaises(TypeError, divmod)
307
308 def test_eval(self):
309 self.assertEqual(eval('1+1'), 2)
310 self.assertEqual(eval(' 1+1\n'), 2)
311 globals = {'a': 1, 'b': 2}
312 locals = {'b': 200, 'c': 300}
313 self.assertEqual(eval('a', globals) , 1)
314 self.assertEqual(eval('a', globals, locals), 1)
315 self.assertEqual(eval('b', globals, locals), 200)
316 self.assertEqual(eval('c', globals, locals), 300)
Walter Dörwald919497e2003-01-19 16:23:59 +0000317 globals = {'a': 1, 'b': 2}
318 locals = {'b': 200, 'c': 300}
Walter Dörwald1f5947b2007-05-22 16:52:54 +0000319## bom = b'\xef\xbb\xbf'
320## self.assertEqual(eval(bom + b'a', globals, locals), 1)
321 self.assertEqual(eval('"\xe5"', globals), "\xe5")
Walter Dörwald919497e2003-01-19 16:23:59 +0000322 self.assertRaises(TypeError, eval)
323 self.assertRaises(TypeError, eval, ())
324
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000325 def test_general_eval(self):
326 # Tests that general mappings can be used for the locals argument
327
328 class M:
329 "Test mapping interface versus possible calls from eval()."
330 def __getitem__(self, key):
331 if key == 'a':
332 return 12
333 raise KeyError
Guido van Rossumcd70eee2007-02-11 18:53:00 +0000334 def keys(self):
335 return list('xyz')
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000336
337 m = M()
338 g = globals()
339 self.assertEqual(eval('a', g, m), 12)
340 self.assertRaises(NameError, eval, 'b', g, m)
341 self.assertEqual(eval('dir()', g, m), list('xyz'))
342 self.assertEqual(eval('globals()', g, m), g)
343 self.assertEqual(eval('locals()', g, m), m)
Raymond Hettinger513ffe82004-07-06 13:44:41 +0000344 self.assertRaises(TypeError, eval, 'a', m)
Raymond Hettinger66bd2332004-08-02 08:30:07 +0000345 class A:
346 "Non-mapping"
347 pass
348 m = A()
349 self.assertRaises(TypeError, eval, 'a', g, m)
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000350
351 # Verify that dict subclasses work as well
352 class D(dict):
353 def __getitem__(self, key):
354 if key == 'a':
355 return 12
356 return dict.__getitem__(self, key)
Guido van Rossumcd70eee2007-02-11 18:53:00 +0000357 def keys(self):
358 return list('xyz')
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000359
360 d = D()
361 self.assertEqual(eval('a', g, d), 12)
362 self.assertRaises(NameError, eval, 'b', g, d)
363 self.assertEqual(eval('dir()', g, d), list('xyz'))
364 self.assertEqual(eval('globals()', g, d), g)
365 self.assertEqual(eval('locals()', g, d), d)
366
367 # Verify locals stores (used by list comps)
368 eval('[locals() for i in (2,3)]', g, d)
369 eval('[locals() for i in (2,3)]', g, UserDict.UserDict())
370
371 class SpreadSheet:
372 "Sample application showing nested, calculated lookups."
373 _cells = {}
374 def __setitem__(self, key, formula):
375 self._cells[key] = formula
Thomas Wouters73e5a5b2006-06-08 15:35:45 +0000376 def __getitem__(self, key):
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000377 return eval(self._cells[key], globals(), self)
378
379 ss = SpreadSheet()
380 ss['a1'] = '5'
381 ss['a2'] = 'a1*6'
382 ss['a3'] = 'a2*7'
383 self.assertEqual(ss['a3'], 210)
384
Raymond Hettinger2a7dede2004-08-07 04:55:30 +0000385 # Verify that dir() catches a non-list returned by eval
386 # SF bug #1004669
387 class C:
388 def __getitem__(self, item):
389 raise KeyError(item)
Guido van Rossumcd70eee2007-02-11 18:53:00 +0000390 def keys(self):
391 return 1 # used to be 'a' but that's no longer an error
Raymond Hettinger2a7dede2004-08-07 04:55:30 +0000392 self.assertRaises(TypeError, eval, 'dir()', globals(), C())
393
Walter Dörwald919497e2003-01-19 16:23:59 +0000394 # Done outside of the method test_z to get the correct scope
395 z = 0
396 f = open(TESTFN, 'w')
397 f.write('z = z+1\n')
398 f.write('z = z*2\n')
399 f.close()
400 execfile(TESTFN)
401
402 def test_execfile(self):
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +0000403 global numruns
404 if numruns:
405 return
406 numruns += 1
Tim Peters7f061872004-12-07 21:17:46 +0000407
Walter Dörwald919497e2003-01-19 16:23:59 +0000408 globals = {'a': 1, 'b': 2}
409 locals = {'b': 200, 'c': 300}
410
411 self.assertEqual(self.__class__.z, 2)
412 globals['z'] = 0
413 execfile(TESTFN, globals)
414 self.assertEqual(globals['z'], 2)
415 locals['z'] = 0
416 execfile(TESTFN, globals, locals)
417 self.assertEqual(locals['z'], 2)
Raymond Hettinger66bd2332004-08-02 08:30:07 +0000418
419 class M:
420 "Test mapping interface versus possible calls from execfile()."
421 def __init__(self):
422 self.z = 10
423 def __getitem__(self, key):
424 if key == 'z':
425 return self.z
426 raise KeyError
427 def __setitem__(self, key, value):
428 if key == 'z':
429 self.z = value
430 return
431 raise KeyError
432
433 locals = M()
434 locals['z'] = 0
435 execfile(TESTFN, globals, locals)
436 self.assertEqual(locals['z'], 2)
437
Walter Dörwald919497e2003-01-19 16:23:59 +0000438 unlink(TESTFN)
439 self.assertRaises(TypeError, execfile)
Neal Norwitzfcf44352005-11-27 20:37:43 +0000440 self.assertRaises(TypeError, execfile, TESTFN, {}, ())
Walter Dörwald919497e2003-01-19 16:23:59 +0000441 import os
442 self.assertRaises(IOError, execfile, os.curdir)
443 self.assertRaises(IOError, execfile, "I_dont_exist")
444
Georg Brandl7cae87c2006-09-06 06:51:57 +0000445 def test_exec(self):
446 g = {}
447 exec('z = 1', g)
448 if '__builtins__' in g:
449 del g['__builtins__']
450 self.assertEqual(g, {'z': 1})
451
Guido van Rossumef87d6e2007-05-02 19:09:54 +0000452 exec('z = 1+1', g)
Georg Brandl7cae87c2006-09-06 06:51:57 +0000453 if '__builtins__' in g:
454 del g['__builtins__']
455 self.assertEqual(g, {'z': 2})
456 g = {}
457 l = {}
458
459 import warnings
460 warnings.filterwarnings("ignore", "global statement", module="<string>")
461 exec('global a; a = 1; b = 2', g, l)
462 if '__builtins__' in g:
463 del g['__builtins__']
464 if '__builtins__' in l:
465 del l['__builtins__']
466 self.assertEqual((g, l), ({'a': 1}, {'b': 2}))
467
Walter Dörwald919497e2003-01-19 16:23:59 +0000468 def test_filter(self):
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000469 self.assertEqual(list(filter(lambda c: 'a' <= c <= 'z', 'Hello World')), list('elloorld'))
470 self.assertEqual(list(filter(None, [1, 'hello', [], [3], '', None, 9, 0])), [1, 'hello', [3], 9])
471 self.assertEqual(list(filter(lambda x: x > 0, [1, -3, 9, 0, 2])), [1, 9, 2])
472 self.assertEqual(list(filter(None, Squares(10))), [1, 4, 9, 16, 25, 36, 49, 64, 81])
473 self.assertEqual(list(filter(lambda x: x%2, Squares(10))), [1, 9, 25, 49, 81])
Walter Dörwald919497e2003-01-19 16:23:59 +0000474 def identity(item):
475 return 1
476 filter(identity, Squares(5))
477 self.assertRaises(TypeError, filter)
478 class BadSeq(object):
Tim Petersf2715e02003-02-19 02:35:07 +0000479 def __getitem__(self, index):
480 if index<4:
481 return 42
482 raise ValueError
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000483 self.assertRaises(ValueError, list, filter(lambda x: x, BadSeq()))
Walter Dörwald919497e2003-01-19 16:23:59 +0000484 def badfunc():
485 pass
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000486 self.assertRaises(TypeError, list, filter(badfunc, range(5)))
Walter Dörwald919497e2003-01-19 16:23:59 +0000487
Walter Dörwaldbf517072003-01-27 15:57:14 +0000488 # test bltinmodule.c::filtertuple()
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000489 self.assertEqual(list(filter(None, (1, 2))), [1, 2])
490 self.assertEqual(list(filter(lambda x: x>=3, (1, 2, 3, 4))), [3, 4])
491 self.assertRaises(TypeError, list, filter(42, (1, 2)))
Walter Dörwaldc3da83f2003-02-04 20:24:45 +0000492
Walter Dörwald919497e2003-01-19 16:23:59 +0000493 def test_float(self):
494 self.assertEqual(float(3.14), 3.14)
495 self.assertEqual(float(314), 314.0)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000496 self.assertEqual(float(314), 314.0)
Walter Dörwald919497e2003-01-19 16:23:59 +0000497 self.assertEqual(float(" 3.14 "), 3.14)
Neal Norwitze7214a12005-12-18 05:03:17 +0000498 self.assertRaises(ValueError, float, " 0x3.1 ")
499 self.assertRaises(ValueError, float, " -0x3.p-1 ")
Walter Dörwald1f5947b2007-05-22 16:52:54 +0000500 self.assertEqual(float(str(b" \u0663.\u0661\u0664 ",'raw-unicode-escape')), 3.14)
501 self.assertEqual(float("1"*10000), 1e10000) # Inf on both sides
Walter Dörwald919497e2003-01-19 16:23:59 +0000502
Thomas Wouters477c8d52006-05-27 19:21:47 +0000503 @run_with_locale('LC_NUMERIC', 'fr_FR', 'de_DE')
Neal Norwitz5898fa22005-11-22 05:17:40 +0000504 def test_float_with_comma(self):
505 # set locale to something that doesn't use '.' for the decimal point
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000506 # float must not accept the locale specific decimal point but
507 # it still has to accept the normal python syntac
Thomas Wouters477c8d52006-05-27 19:21:47 +0000508 import locale
509 if not locale.localeconv()['decimal_point'] == ',':
Neal Norwitz5898fa22005-11-22 05:17:40 +0000510 return
511
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000512 self.assertEqual(float(" 3.14 "), 3.14)
513 self.assertEqual(float("+3.14 "), 3.14)
514 self.assertEqual(float("-3.14 "), -3.14)
515 self.assertEqual(float(".14 "), .14)
516 self.assertEqual(float("3. "), 3.0)
517 self.assertEqual(float("3.e3 "), 3000.0)
518 self.assertEqual(float("3.2e3 "), 3200.0)
519 self.assertEqual(float("2.5e-1 "), 0.25)
520 self.assertEqual(float("5e-1"), 0.5)
521 self.assertRaises(ValueError, float, " 3,14 ")
522 self.assertRaises(ValueError, float, " +3,14 ")
523 self.assertRaises(ValueError, float, " -3,14 ")
Thomas Wouters477c8d52006-05-27 19:21:47 +0000524 self.assertRaises(ValueError, float, " 0x3.1 ")
525 self.assertRaises(ValueError, float, " -0x3.p-1 ")
526 self.assertEqual(float(" 25.e-1 "), 2.5)
527 self.assertEqual(fcmp(float(" .25e-1 "), .025), 0)
Neal Norwitz5898fa22005-11-22 05:17:40 +0000528
Brett Cannonc3647ac2005-04-26 03:45:26 +0000529 def test_floatconversion(self):
530 # Make sure that calls to __float__() work properly
531 class Foo0:
532 def __float__(self):
533 return 42.
534
535 class Foo1(object):
536 def __float__(self):
537 return 42.
538
539 class Foo2(float):
540 def __float__(self):
541 return 42.
542
543 class Foo3(float):
544 def __new__(cls, value=0.):
545 return float.__new__(cls, 2*value)
546
547 def __float__(self):
548 return self
549
550 class Foo4(float):
551 def __float__(self):
552 return 42
553
554 self.assertAlmostEqual(float(Foo0()), 42.)
555 self.assertAlmostEqual(float(Foo1()), 42.)
556 self.assertAlmostEqual(float(Foo2()), 42.)
557 self.assertAlmostEqual(float(Foo3(21)), 42.)
558 self.assertRaises(TypeError, float, Foo4(42))
559
Walter Dörwald919497e2003-01-19 16:23:59 +0000560 def test_getattr(self):
561 import sys
562 self.assert_(getattr(sys, 'stdout') is sys.stdout)
563 self.assertRaises(TypeError, getattr, sys, 1)
564 self.assertRaises(TypeError, getattr, sys, 1, "foo")
565 self.assertRaises(TypeError, getattr)
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000566 self.assertRaises(AttributeError, getattr, sys, chr(sys.maxunicode))
Walter Dörwald919497e2003-01-19 16:23:59 +0000567
568 def test_hasattr(self):
569 import sys
570 self.assert_(hasattr(sys, 'stdout'))
571 self.assertRaises(TypeError, hasattr, sys, 1)
572 self.assertRaises(TypeError, hasattr)
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000573 self.assertEqual(False, hasattr(sys, chr(sys.maxunicode)))
Walter Dörwald919497e2003-01-19 16:23:59 +0000574
575 def test_hash(self):
576 hash(None)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000577 self.assertEqual(hash(1), hash(1))
Walter Dörwald919497e2003-01-19 16:23:59 +0000578 self.assertEqual(hash(1), hash(1.0))
579 hash('spam')
Walter Dörwald1f5947b2007-05-22 16:52:54 +0000580 self.assertEqual(hash('spam'), hash(str8('spam')))
Walter Dörwald919497e2003-01-19 16:23:59 +0000581 hash((0,1,2,3))
582 def f(): pass
583 self.assertRaises(TypeError, hash, [])
584 self.assertRaises(TypeError, hash, {})
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000585 # Bug 1536021: Allow hash to return long objects
586 class X:
587 def __hash__(self):
588 return 2**100
589 self.assertEquals(type(hash(X())), int)
590 class Y(object):
591 def __hash__(self):
592 return 2**100
593 self.assertEquals(type(hash(Y())), int)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000594 class Z(int):
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000595 def __hash__(self):
596 return self
Guido van Rossume2a383d2007-01-15 16:59:06 +0000597 self.assertEquals(hash(Z(42)), hash(42))
Walter Dörwald919497e2003-01-19 16:23:59 +0000598
599 def test_hex(self):
600 self.assertEqual(hex(16), '0x10')
Guido van Rossume2a383d2007-01-15 16:59:06 +0000601 self.assertEqual(hex(16), '0x10')
Guido van Rossum6c9e1302003-11-29 23:52:13 +0000602 self.assertEqual(hex(-16), '-0x10')
Guido van Rossume2a383d2007-01-15 16:59:06 +0000603 self.assertEqual(hex(-16), '-0x10')
Walter Dörwald919497e2003-01-19 16:23:59 +0000604 self.assertRaises(TypeError, hex, {})
605
606 def test_id(self):
607 id(None)
608 id(1)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000609 id(1)
Walter Dörwald919497e2003-01-19 16:23:59 +0000610 id(1.0)
611 id('spam')
612 id((0,1,2,3))
613 id([0,1,2,3])
614 id({'spam': 1, 'eggs': 2, 'ham': 3})
615
Guido van Rossuma88a0332007-02-26 16:59:55 +0000616 # Test input() later, alphabetized as if it were raw_input
617
Walter Dörwald919497e2003-01-19 16:23:59 +0000618 def test_int(self):
619 self.assertEqual(int(314), 314)
620 self.assertEqual(int(3.14), 3)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000621 self.assertEqual(int(314), 314)
Walter Dörwald919497e2003-01-19 16:23:59 +0000622 # Check that conversion from float truncates towards zero
623 self.assertEqual(int(-3.14), -3)
624 self.assertEqual(int(3.9), 3)
625 self.assertEqual(int(-3.9), -3)
626 self.assertEqual(int(3.5), 3)
627 self.assertEqual(int(-3.5), -3)
628 # Different base:
Guido van Rossume2a383d2007-01-15 16:59:06 +0000629 self.assertEqual(int("10",16), 16)
Walter Dörwald919497e2003-01-19 16:23:59 +0000630 # Test conversion from strings and various anomalies
631 for s, v in L:
632 for sign in "", "+", "-":
633 for prefix in "", " ", "\t", " \t\t ":
634 ss = prefix + sign + s
635 vv = v
636 if sign == "-" and v is not ValueError:
637 vv = -v
638 try:
639 self.assertEqual(int(ss), vv)
640 except v:
641 pass
642
Walter Dörwald70a6b492004-02-12 17:35:32 +0000643 s = repr(-1-sys.maxint)
Thomas Wouters89f507f2006-12-13 04:49:30 +0000644 x = int(s)
645 self.assertEqual(x+1, -sys.maxint)
646 self.assert_(isinstance(x, int))
Walter Dörwald919497e2003-01-19 16:23:59 +0000647 # should return long
Thomas Wouters89f507f2006-12-13 04:49:30 +0000648 self.assertEqual(int(s[1:]), sys.maxint+1)
Walter Dörwald919497e2003-01-19 16:23:59 +0000649
650 # should return long
651 x = int(1e100)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000652 self.assert_(isinstance(x, int))
Walter Dörwald919497e2003-01-19 16:23:59 +0000653 x = int(-1e100)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000654 self.assert_(isinstance(x, int))
Walter Dörwald919497e2003-01-19 16:23:59 +0000655
656
657 # SF bug 434186: 0x80000000/2 != 0x80000000>>1.
658 # Worked by accident in Windows release build, but failed in debug build.
659 # Failed in all Linux builds.
660 x = -1-sys.maxint
661 self.assertEqual(x >> 1, x//2)
662
663 self.assertRaises(ValueError, int, '123\0')
664 self.assertRaises(ValueError, int, '53', 40)
665
Thomas Wouters89f507f2006-12-13 04:49:30 +0000666 # SF bug 1545497: embedded NULs were not detected with
667 # explicit base
668 self.assertRaises(ValueError, int, '123\0', 10)
669 self.assertRaises(ValueError, int, '123\x00 245', 20)
670
Walter Dörwald919497e2003-01-19 16:23:59 +0000671 x = int('1' * 600)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000672 self.assert_(isinstance(x, int))
Walter Dörwald919497e2003-01-19 16:23:59 +0000673
Walter Dörwald1f5947b2007-05-22 16:52:54 +0000674 x = int(chr(0x661) * 600)
675 self.assert_(isinstance(x, int))
Walter Dörwald919497e2003-01-19 16:23:59 +0000676
677 self.assertRaises(TypeError, int, 1, 12)
678
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000679 # tests with base 0
680 self.assertRaises(ValueError, int, ' 0123 ', 0) # old octal syntax
681 self.assertEqual(int('000', 0), 0)
682 self.assertEqual(int('0o123', 0), 83)
683 self.assertEqual(int('0x123', 0), 291)
684 self.assertEqual(int('0b100', 0), 4)
685 self.assertEqual(int(' 0O123 ', 0), 83)
686 self.assertEqual(int(' 0X123 ', 0), 291)
687 self.assertEqual(int(' 0B100 ', 0), 4)
688
689 # without base still base 10
690 self.assertEqual(int('0123'), 123)
691 self.assertEqual(int('0123', 10), 123)
692
693 # tests with prefix and base != 0
Neal Norwitz5898fa22005-11-22 05:17:40 +0000694 self.assertEqual(int('0x123', 16), 291)
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000695 self.assertEqual(int('0o123', 8), 83)
696 self.assertEqual(int('0b100', 2), 4)
697 self.assertEqual(int('0X123', 16), 291)
698 self.assertEqual(int('0O123', 8), 83)
699 self.assertEqual(int('0B100', 2), 4)
Walter Dörwald919497e2003-01-19 16:23:59 +0000700
Thomas Wouters477c8d52006-05-27 19:21:47 +0000701 # SF bug 1334662: int(string, base) wrong answers
702 # Various representations of 2**32 evaluated to 0
703 # rather than 2**32 in previous versions
704
Guido van Rossume2a383d2007-01-15 16:59:06 +0000705 self.assertEqual(int('100000000000000000000000000000000', 2), 4294967296)
706 self.assertEqual(int('102002022201221111211', 3), 4294967296)
707 self.assertEqual(int('10000000000000000', 4), 4294967296)
708 self.assertEqual(int('32244002423141', 5), 4294967296)
709 self.assertEqual(int('1550104015504', 6), 4294967296)
710 self.assertEqual(int('211301422354', 7), 4294967296)
711 self.assertEqual(int('40000000000', 8), 4294967296)
712 self.assertEqual(int('12068657454', 9), 4294967296)
713 self.assertEqual(int('4294967296', 10), 4294967296)
714 self.assertEqual(int('1904440554', 11), 4294967296)
715 self.assertEqual(int('9ba461594', 12), 4294967296)
716 self.assertEqual(int('535a79889', 13), 4294967296)
717 self.assertEqual(int('2ca5b7464', 14), 4294967296)
718 self.assertEqual(int('1a20dcd81', 15), 4294967296)
719 self.assertEqual(int('100000000', 16), 4294967296)
720 self.assertEqual(int('a7ffda91', 17), 4294967296)
721 self.assertEqual(int('704he7g4', 18), 4294967296)
722 self.assertEqual(int('4f5aff66', 19), 4294967296)
723 self.assertEqual(int('3723ai4g', 20), 4294967296)
724 self.assertEqual(int('281d55i4', 21), 4294967296)
725 self.assertEqual(int('1fj8b184', 22), 4294967296)
726 self.assertEqual(int('1606k7ic', 23), 4294967296)
727 self.assertEqual(int('mb994ag', 24), 4294967296)
728 self.assertEqual(int('hek2mgl', 25), 4294967296)
729 self.assertEqual(int('dnchbnm', 26), 4294967296)
730 self.assertEqual(int('b28jpdm', 27), 4294967296)
731 self.assertEqual(int('8pfgih4', 28), 4294967296)
732 self.assertEqual(int('76beigg', 29), 4294967296)
733 self.assertEqual(int('5qmcpqg', 30), 4294967296)
734 self.assertEqual(int('4q0jto4', 31), 4294967296)
735 self.assertEqual(int('4000000', 32), 4294967296)
736 self.assertEqual(int('3aokq94', 33), 4294967296)
737 self.assertEqual(int('2qhxjli', 34), 4294967296)
738 self.assertEqual(int('2br45qb', 35), 4294967296)
739 self.assertEqual(int('1z141z4', 36), 4294967296)
Thomas Wouters477c8d52006-05-27 19:21:47 +0000740
741 # SF bug 1334662: int(string, base) wrong answers
742 # Checks for proper evaluation of 2**32 + 1
Guido van Rossume2a383d2007-01-15 16:59:06 +0000743 self.assertEqual(int('100000000000000000000000000000001', 2), 4294967297)
744 self.assertEqual(int('102002022201221111212', 3), 4294967297)
745 self.assertEqual(int('10000000000000001', 4), 4294967297)
746 self.assertEqual(int('32244002423142', 5), 4294967297)
747 self.assertEqual(int('1550104015505', 6), 4294967297)
748 self.assertEqual(int('211301422355', 7), 4294967297)
749 self.assertEqual(int('40000000001', 8), 4294967297)
750 self.assertEqual(int('12068657455', 9), 4294967297)
751 self.assertEqual(int('4294967297', 10), 4294967297)
752 self.assertEqual(int('1904440555', 11), 4294967297)
753 self.assertEqual(int('9ba461595', 12), 4294967297)
754 self.assertEqual(int('535a7988a', 13), 4294967297)
755 self.assertEqual(int('2ca5b7465', 14), 4294967297)
756 self.assertEqual(int('1a20dcd82', 15), 4294967297)
757 self.assertEqual(int('100000001', 16), 4294967297)
758 self.assertEqual(int('a7ffda92', 17), 4294967297)
759 self.assertEqual(int('704he7g5', 18), 4294967297)
760 self.assertEqual(int('4f5aff67', 19), 4294967297)
761 self.assertEqual(int('3723ai4h', 20), 4294967297)
762 self.assertEqual(int('281d55i5', 21), 4294967297)
763 self.assertEqual(int('1fj8b185', 22), 4294967297)
764 self.assertEqual(int('1606k7id', 23), 4294967297)
765 self.assertEqual(int('mb994ah', 24), 4294967297)
766 self.assertEqual(int('hek2mgm', 25), 4294967297)
767 self.assertEqual(int('dnchbnn', 26), 4294967297)
768 self.assertEqual(int('b28jpdn', 27), 4294967297)
769 self.assertEqual(int('8pfgih5', 28), 4294967297)
770 self.assertEqual(int('76beigh', 29), 4294967297)
771 self.assertEqual(int('5qmcpqh', 30), 4294967297)
772 self.assertEqual(int('4q0jto5', 31), 4294967297)
773 self.assertEqual(int('4000001', 32), 4294967297)
774 self.assertEqual(int('3aokq95', 33), 4294967297)
775 self.assertEqual(int('2qhxjlj', 34), 4294967297)
776 self.assertEqual(int('2br45qc', 35), 4294967297)
777 self.assertEqual(int('1z141z5', 36), 4294967297)
Thomas Wouters477c8d52006-05-27 19:21:47 +0000778
Brett Cannonc3647ac2005-04-26 03:45:26 +0000779 def test_intconversion(self):
780 # Test __int__()
781 class Foo0:
782 def __int__(self):
783 return 42
784
785 class Foo1(object):
786 def __int__(self):
787 return 42
788
789 class Foo2(int):
790 def __int__(self):
791 return 42
792
793 class Foo3(int):
794 def __int__(self):
795 return self
796
797 class Foo4(int):
798 def __int__(self):
Guido van Rossume2a383d2007-01-15 16:59:06 +0000799 return 42
Brett Cannonc3647ac2005-04-26 03:45:26 +0000800
801 class Foo5(int):
802 def __int__(self):
803 return 42.
804
805 self.assertEqual(int(Foo0()), 42)
806 self.assertEqual(int(Foo1()), 42)
807 self.assertEqual(int(Foo2()), 42)
808 self.assertEqual(int(Foo3()), 0)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000809 self.assertEqual(int(Foo4()), 42)
Brett Cannonc3647ac2005-04-26 03:45:26 +0000810 self.assertRaises(TypeError, int, Foo5())
811
Walter Dörwald919497e2003-01-19 16:23:59 +0000812 def test_iter(self):
813 self.assertRaises(TypeError, iter)
814 self.assertRaises(TypeError, iter, 42, 42)
815 lists = [("1", "2"), ["1", "2"], "12"]
Walter Dörwald919497e2003-01-19 16:23:59 +0000816 for l in lists:
817 i = iter(l)
Georg Brandla18af4e2007-04-21 15:47:16 +0000818 self.assertEqual(next(i), '1')
819 self.assertEqual(next(i), '2')
820 self.assertRaises(StopIteration, next, i)
Walter Dörwald919497e2003-01-19 16:23:59 +0000821
822 def test_isinstance(self):
823 class C:
824 pass
825 class D(C):
826 pass
827 class E:
828 pass
829 c = C()
830 d = D()
831 e = E()
832 self.assert_(isinstance(c, C))
833 self.assert_(isinstance(d, C))
834 self.assert_(not isinstance(e, C))
835 self.assert_(not isinstance(c, D))
836 self.assert_(not isinstance('foo', E))
837 self.assertRaises(TypeError, isinstance, E, 'foo')
838 self.assertRaises(TypeError, isinstance)
839
840 def test_issubclass(self):
841 class C:
842 pass
843 class D(C):
844 pass
845 class E:
846 pass
847 c = C()
848 d = D()
849 e = E()
850 self.assert_(issubclass(D, C))
851 self.assert_(issubclass(C, C))
852 self.assert_(not issubclass(C, D))
853 self.assertRaises(TypeError, issubclass, 'foo', E)
854 self.assertRaises(TypeError, issubclass, E, 'foo')
855 self.assertRaises(TypeError, issubclass)
856
857 def test_len(self):
858 self.assertEqual(len('123'), 3)
859 self.assertEqual(len(()), 0)
860 self.assertEqual(len((1, 2, 3, 4)), 4)
861 self.assertEqual(len([1, 2, 3, 4]), 4)
862 self.assertEqual(len({}), 0)
863 self.assertEqual(len({'a':1, 'b': 2}), 2)
864 class BadSeq:
865 def __len__(self):
866 raise ValueError
867 self.assertRaises(ValueError, len, BadSeq())
868
869 def test_list(self):
870 self.assertEqual(list([]), [])
871 l0_3 = [0, 1, 2, 3]
872 l0_3_bis = list(l0_3)
873 self.assertEqual(l0_3, l0_3_bis)
874 self.assert_(l0_3 is not l0_3_bis)
875 self.assertEqual(list(()), [])
876 self.assertEqual(list((0, 1, 2, 3)), [0, 1, 2, 3])
877 self.assertEqual(list(''), [])
878 self.assertEqual(list('spam'), ['s', 'p', 'a', 'm'])
879
880 if sys.maxint == 0x7fffffff:
881 # This test can currently only work on 32-bit machines.
882 # XXX If/when PySequence_Length() returns a ssize_t, it should be
883 # XXX re-enabled.
884 # Verify clearing of bug #556025.
885 # This assumes that the max data size (sys.maxint) == max
886 # address size this also assumes that the address size is at
887 # least 4 bytes with 8 byte addresses, the bug is not well
888 # tested
889 #
890 # Note: This test is expected to SEGV under Cygwin 1.3.12 or
891 # earlier due to a newlib bug. See the following mailing list
892 # thread for the details:
893
894 # http://sources.redhat.com/ml/newlib/2002/msg00369.html
Guido van Rossum805365e2007-05-07 22:24:25 +0000895 self.assertRaises(MemoryError, list, range(sys.maxint // 2))
Walter Dörwald919497e2003-01-19 16:23:59 +0000896
Raymond Hettingeraa241e02004-09-26 19:24:20 +0000897 # This code used to segfault in Py2.4a3
898 x = []
899 x.extend(-y for y in x)
900 self.assertEqual(x, [])
901
Walter Dörwald919497e2003-01-19 16:23:59 +0000902 def test_long(self):
Guido van Rossume2a383d2007-01-15 16:59:06 +0000903 self.assertEqual(int(314), 314)
904 self.assertEqual(int(3.14), 3)
905 self.assertEqual(int(314), 314)
Walter Dörwald919497e2003-01-19 16:23:59 +0000906 # Check that conversion from float truncates towards zero
Guido van Rossume2a383d2007-01-15 16:59:06 +0000907 self.assertEqual(int(-3.14), -3)
908 self.assertEqual(int(3.9), 3)
909 self.assertEqual(int(-3.9), -3)
910 self.assertEqual(int(3.5), 3)
911 self.assertEqual(int(-3.5), -3)
912 self.assertEqual(int("-3"), -3)
Walter Dörwald919497e2003-01-19 16:23:59 +0000913 # Different base:
Guido van Rossume2a383d2007-01-15 16:59:06 +0000914 self.assertEqual(int("10",16), 16)
Walter Dörwald919497e2003-01-19 16:23:59 +0000915 # Check conversions from string (same test set as for int(), and then some)
916 LL = [
Guido van Rossume2a383d2007-01-15 16:59:06 +0000917 ('1' + '0'*20, 10**20),
918 ('1' + '0'*100, 10**100)
Walter Dörwald919497e2003-01-19 16:23:59 +0000919 ]
Walter Dörwald1f5947b2007-05-22 16:52:54 +0000920 for s, v in LL:
Walter Dörwald919497e2003-01-19 16:23:59 +0000921 for sign in "", "+", "-":
922 for prefix in "", " ", "\t", " \t\t ":
923 ss = prefix + sign + s
924 vv = v
925 if sign == "-" and v is not ValueError:
926 vv = -v
927 try:
Guido van Rossume2a383d2007-01-15 16:59:06 +0000928 self.assertEqual(int(ss), int(vv))
Walter Dörwald919497e2003-01-19 16:23:59 +0000929 except v:
930 pass
931
Guido van Rossume2a383d2007-01-15 16:59:06 +0000932 self.assertRaises(ValueError, int, '123\0')
933 self.assertRaises(ValueError, int, '53', 40)
934 self.assertRaises(TypeError, int, 1, 12)
Walter Dörwald919497e2003-01-19 16:23:59 +0000935
Guido van Rossumd8faa362007-04-27 19:54:29 +0000936 # SF patch #1638879: embedded NULs were not detected with
937 # explicit base
938 self.assertRaises(ValueError, int, '123\0', 10)
939 self.assertRaises(ValueError, int, '123\x00 245', 20)
940
Guido van Rossume2a383d2007-01-15 16:59:06 +0000941 self.assertEqual(int('100000000000000000000000000000000', 2),
Thomas Wouters477c8d52006-05-27 19:21:47 +0000942 4294967296)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000943 self.assertEqual(int('102002022201221111211', 3), 4294967296)
944 self.assertEqual(int('10000000000000000', 4), 4294967296)
945 self.assertEqual(int('32244002423141', 5), 4294967296)
946 self.assertEqual(int('1550104015504', 6), 4294967296)
947 self.assertEqual(int('211301422354', 7), 4294967296)
948 self.assertEqual(int('40000000000', 8), 4294967296)
949 self.assertEqual(int('12068657454', 9), 4294967296)
950 self.assertEqual(int('4294967296', 10), 4294967296)
951 self.assertEqual(int('1904440554', 11), 4294967296)
952 self.assertEqual(int('9ba461594', 12), 4294967296)
953 self.assertEqual(int('535a79889', 13), 4294967296)
954 self.assertEqual(int('2ca5b7464', 14), 4294967296)
955 self.assertEqual(int('1a20dcd81', 15), 4294967296)
956 self.assertEqual(int('100000000', 16), 4294967296)
957 self.assertEqual(int('a7ffda91', 17), 4294967296)
958 self.assertEqual(int('704he7g4', 18), 4294967296)
959 self.assertEqual(int('4f5aff66', 19), 4294967296)
960 self.assertEqual(int('3723ai4g', 20), 4294967296)
961 self.assertEqual(int('281d55i4', 21), 4294967296)
962 self.assertEqual(int('1fj8b184', 22), 4294967296)
963 self.assertEqual(int('1606k7ic', 23), 4294967296)
964 self.assertEqual(int('mb994ag', 24), 4294967296)
965 self.assertEqual(int('hek2mgl', 25), 4294967296)
966 self.assertEqual(int('dnchbnm', 26), 4294967296)
967 self.assertEqual(int('b28jpdm', 27), 4294967296)
968 self.assertEqual(int('8pfgih4', 28), 4294967296)
969 self.assertEqual(int('76beigg', 29), 4294967296)
970 self.assertEqual(int('5qmcpqg', 30), 4294967296)
971 self.assertEqual(int('4q0jto4', 31), 4294967296)
972 self.assertEqual(int('4000000', 32), 4294967296)
973 self.assertEqual(int('3aokq94', 33), 4294967296)
974 self.assertEqual(int('2qhxjli', 34), 4294967296)
975 self.assertEqual(int('2br45qb', 35), 4294967296)
976 self.assertEqual(int('1z141z4', 36), 4294967296)
Thomas Wouters477c8d52006-05-27 19:21:47 +0000977
Guido van Rossume2a383d2007-01-15 16:59:06 +0000978 self.assertEqual(int('100000000000000000000000000000001', 2),
Thomas Wouters477c8d52006-05-27 19:21:47 +0000979 4294967297)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000980 self.assertEqual(int('102002022201221111212', 3), 4294967297)
981 self.assertEqual(int('10000000000000001', 4), 4294967297)
982 self.assertEqual(int('32244002423142', 5), 4294967297)
983 self.assertEqual(int('1550104015505', 6), 4294967297)
984 self.assertEqual(int('211301422355', 7), 4294967297)
985 self.assertEqual(int('40000000001', 8), 4294967297)
986 self.assertEqual(int('12068657455', 9), 4294967297)
987 self.assertEqual(int('4294967297', 10), 4294967297)
988 self.assertEqual(int('1904440555', 11), 4294967297)
989 self.assertEqual(int('9ba461595', 12), 4294967297)
990 self.assertEqual(int('535a7988a', 13), 4294967297)
991 self.assertEqual(int('2ca5b7465', 14), 4294967297)
992 self.assertEqual(int('1a20dcd82', 15), 4294967297)
993 self.assertEqual(int('100000001', 16), 4294967297)
994 self.assertEqual(int('a7ffda92', 17), 4294967297)
995 self.assertEqual(int('704he7g5', 18), 4294967297)
996 self.assertEqual(int('4f5aff67', 19), 4294967297)
997 self.assertEqual(int('3723ai4h', 20), 4294967297)
998 self.assertEqual(int('281d55i5', 21), 4294967297)
999 self.assertEqual(int('1fj8b185', 22), 4294967297)
1000 self.assertEqual(int('1606k7id', 23), 4294967297)
1001 self.assertEqual(int('mb994ah', 24), 4294967297)
1002 self.assertEqual(int('hek2mgm', 25), 4294967297)
1003 self.assertEqual(int('dnchbnn', 26), 4294967297)
1004 self.assertEqual(int('b28jpdn', 27), 4294967297)
1005 self.assertEqual(int('8pfgih5', 28), 4294967297)
1006 self.assertEqual(int('76beigh', 29), 4294967297)
1007 self.assertEqual(int('5qmcpqh', 30), 4294967297)
1008 self.assertEqual(int('4q0jto5', 31), 4294967297)
1009 self.assertEqual(int('4000001', 32), 4294967297)
1010 self.assertEqual(int('3aokq95', 33), 4294967297)
1011 self.assertEqual(int('2qhxjlj', 34), 4294967297)
1012 self.assertEqual(int('2br45qc', 35), 4294967297)
1013 self.assertEqual(int('1z141z5', 36), 4294967297)
Thomas Wouters477c8d52006-05-27 19:21:47 +00001014
1015
Brett Cannonc3647ac2005-04-26 03:45:26 +00001016 def test_longconversion(self):
1017 # Test __long__()
1018 class Foo0:
1019 def __long__(self):
Guido van Rossume2a383d2007-01-15 16:59:06 +00001020 return 42
Brett Cannonc3647ac2005-04-26 03:45:26 +00001021
1022 class Foo1(object):
1023 def __long__(self):
Guido van Rossume2a383d2007-01-15 16:59:06 +00001024 return 42
Brett Cannonc3647ac2005-04-26 03:45:26 +00001025
Guido van Rossume2a383d2007-01-15 16:59:06 +00001026 class Foo2(int):
Brett Cannonc3647ac2005-04-26 03:45:26 +00001027 def __long__(self):
1028 return 42
1029
Guido van Rossume2a383d2007-01-15 16:59:06 +00001030 class Foo3(int):
1031 def __long__(self):
1032 return self
1033
1034 class Foo4(int):
1035 def __long__(self):
1036 return 42
1037
1038 class Foo5(int):
Brett Cannonc3647ac2005-04-26 03:45:26 +00001039 def __long__(self):
1040 return 42.
1041
Guido van Rossume2a383d2007-01-15 16:59:06 +00001042 self.assertEqual(int(Foo0()), 42)
1043 self.assertEqual(int(Foo1()), 42)
Guido van Rossumd8faa362007-04-27 19:54:29 +00001044 # XXX invokes __int__ now
Guido van Rossumddefaf32007-01-14 03:31:43 +00001045 # self.assertEqual(long(Foo2()), 42L)
Guido van Rossume2a383d2007-01-15 16:59:06 +00001046 self.assertEqual(int(Foo3()), 0)
Guido van Rossumd8faa362007-04-27 19:54:29 +00001047 # XXX likewise
Guido van Rossumddefaf32007-01-14 03:31:43 +00001048 # self.assertEqual(long(Foo4()), 42)
1049 # self.assertRaises(TypeError, long, Foo5())
Brett Cannonc3647ac2005-04-26 03:45:26 +00001050
Walter Dörwald919497e2003-01-19 16:23:59 +00001051 def test_map(self):
1052 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001053 list(map(None, 'hello')),
1054 [('h',), ('e',), ('l',), ('l',), ('o',)]
Walter Dörwald919497e2003-01-19 16:23:59 +00001055 )
1056 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001057 list(map(None, 'abcd', 'efg')),
1058 [('a', 'e'), ('b', 'f'), ('c', 'g')]
Walter Dörwald919497e2003-01-19 16:23:59 +00001059 )
1060 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001061 list(map(None, range(3))),
1062 [(0,), (1,), (2,)]
Walter Dörwald919497e2003-01-19 16:23:59 +00001063 )
1064 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001065 list(map(lambda x: x*x, range(1,4))),
Walter Dörwald919497e2003-01-19 16:23:59 +00001066 [1, 4, 9]
1067 )
1068 try:
1069 from math import sqrt
1070 except ImportError:
1071 def sqrt(x):
1072 return pow(x, 0.5)
1073 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001074 list(map(lambda x: list(map(sqrt, x)), [[16, 4], [81, 9]])),
Walter Dörwald919497e2003-01-19 16:23:59 +00001075 [[4.0, 2.0], [9.0, 3.0]]
1076 )
1077 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001078 list(map(lambda x, y: x+y, [1,3,2], [9,1,4])),
Walter Dörwald919497e2003-01-19 16:23:59 +00001079 [10, 4, 6]
1080 )
1081
1082 def plus(*v):
1083 accu = 0
1084 for i in v: accu = accu + i
1085 return accu
1086 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001087 list(map(plus, [1, 3, 7])),
Walter Dörwald919497e2003-01-19 16:23:59 +00001088 [1, 3, 7]
1089 )
1090 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001091 list(map(plus, [1, 3, 7], [4, 9, 2])),
Walter Dörwald919497e2003-01-19 16:23:59 +00001092 [1+4, 3+9, 7+2]
1093 )
1094 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001095 list(map(plus, [1, 3, 7], [4, 9, 2], [1, 1, 0])),
Walter Dörwald919497e2003-01-19 16:23:59 +00001096 [1+4+1, 3+9+1, 7+2+0]
1097 )
1098 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001099 list(map(None, Squares(10))),
1100 [(0,), (1,), (4,), (9,), (16,), (25,), (36,), (49,), (64,), (81,)]
1101 )
1102 self.assertEqual(
1103 list(map(int, Squares(10))),
Walter Dörwald919497e2003-01-19 16:23:59 +00001104 [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
1105 )
1106 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001107 list(map(None, Squares(3), Squares(2))),
1108 [(0,0), (1,1)]
Walter Dörwald919497e2003-01-19 16:23:59 +00001109 )
Guido van Rossum47b9ff62006-08-24 00:41:19 +00001110 def Max(a, b):
1111 if a is None:
1112 return b
1113 if b is None:
1114 return a
1115 return max(a, b)
Walter Dörwald919497e2003-01-19 16:23:59 +00001116 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001117 list(map(Max, Squares(3), Squares(2))),
1118 [0, 1]
Walter Dörwald919497e2003-01-19 16:23:59 +00001119 )
1120 self.assertRaises(TypeError, map)
1121 self.assertRaises(TypeError, map, lambda x: x, 42)
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001122 self.assertEqual(list(map(None, [42])), [(42,)])
Walter Dörwald919497e2003-01-19 16:23:59 +00001123 class BadSeq:
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001124 def __iter__(self):
Walter Dörwald919497e2003-01-19 16:23:59 +00001125 raise ValueError
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001126 yield None
1127 self.assertRaises(ValueError, list, map(lambda x: x, BadSeq()))
Neal Norwitzfcf44352005-11-27 20:37:43 +00001128 def badfunc(x):
1129 raise RuntimeError
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001130 self.assertRaises(RuntimeError, list, map(badfunc, range(5)))
Walter Dörwald919497e2003-01-19 16:23:59 +00001131
1132 def test_max(self):
1133 self.assertEqual(max('123123'), '3')
1134 self.assertEqual(max(1, 2, 3), 3)
1135 self.assertEqual(max((1, 2, 3, 1, 2, 3)), 3)
1136 self.assertEqual(max([1, 2, 3, 1, 2, 3]), 3)
1137
Guido van Rossume2a383d2007-01-15 16:59:06 +00001138 self.assertEqual(max(1, 2, 3.0), 3.0)
1139 self.assertEqual(max(1, 2.0, 3), 3)
1140 self.assertEqual(max(1.0, 2, 3), 3)
Walter Dörwald919497e2003-01-19 16:23:59 +00001141
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001142 for stmt in (
1143 "max(key=int)", # no args
1144 "max(1, key=int)", # single arg not iterable
1145 "max(1, 2, keystone=int)", # wrong keyword
1146 "max(1, 2, key=int, abc=int)", # two many keywords
1147 "max(1, 2, key=1)", # keyfunc is not callable
1148 ):
Tim Peters7f061872004-12-07 21:17:46 +00001149 try:
Georg Brandl7cae87c2006-09-06 06:51:57 +00001150 exec(stmt, globals())
Tim Peters7f061872004-12-07 21:17:46 +00001151 except TypeError:
1152 pass
1153 else:
1154 self.fail(stmt)
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001155
1156 self.assertEqual(max((1,), key=neg), 1) # one elem iterable
1157 self.assertEqual(max((1,2), key=neg), 1) # two elem iterable
1158 self.assertEqual(max(1, 2, key=neg), 1) # two elems
1159
1160 data = [random.randrange(200) for i in range(100)]
1161 keys = dict((elem, random.randrange(50)) for elem in data)
1162 f = keys.__getitem__
1163 self.assertEqual(max(data, key=f),
1164 sorted(reversed(data), key=f)[-1])
1165
Walter Dörwald919497e2003-01-19 16:23:59 +00001166 def test_min(self):
1167 self.assertEqual(min('123123'), '1')
1168 self.assertEqual(min(1, 2, 3), 1)
1169 self.assertEqual(min((1, 2, 3, 1, 2, 3)), 1)
1170 self.assertEqual(min([1, 2, 3, 1, 2, 3]), 1)
1171
Guido van Rossume2a383d2007-01-15 16:59:06 +00001172 self.assertEqual(min(1, 2, 3.0), 1)
1173 self.assertEqual(min(1, 2.0, 3), 1)
1174 self.assertEqual(min(1.0, 2, 3), 1.0)
Walter Dörwald919497e2003-01-19 16:23:59 +00001175
1176 self.assertRaises(TypeError, min)
1177 self.assertRaises(TypeError, min, 42)
1178 self.assertRaises(ValueError, min, ())
1179 class BadSeq:
1180 def __getitem__(self, index):
1181 raise ValueError
1182 self.assertRaises(ValueError, min, BadSeq())
1183 class BadNumber:
1184 def __cmp__(self, other):
1185 raise ValueError
Guido van Rossum47b9ff62006-08-24 00:41:19 +00001186 self.assertRaises(TypeError, min, (42, BadNumber()))
Walter Dörwald919497e2003-01-19 16:23:59 +00001187
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001188 for stmt in (
1189 "min(key=int)", # no args
1190 "min(1, key=int)", # single arg not iterable
1191 "min(1, 2, keystone=int)", # wrong keyword
1192 "min(1, 2, key=int, abc=int)", # two many keywords
1193 "min(1, 2, key=1)", # keyfunc is not callable
1194 ):
Tim Peters7f061872004-12-07 21:17:46 +00001195 try:
Georg Brandl7cae87c2006-09-06 06:51:57 +00001196 exec(stmt, globals())
Tim Peters7f061872004-12-07 21:17:46 +00001197 except TypeError:
1198 pass
1199 else:
1200 self.fail(stmt)
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001201
1202 self.assertEqual(min((1,), key=neg), 1) # one elem iterable
1203 self.assertEqual(min((1,2), key=neg), 2) # two elem iterable
1204 self.assertEqual(min(1, 2, key=neg), 2) # two elems
1205
1206 data = [random.randrange(200) for i in range(100)]
1207 keys = dict((elem, random.randrange(50)) for elem in data)
1208 f = keys.__getitem__
1209 self.assertEqual(min(data, key=f),
1210 sorted(data, key=f)[0])
1211
Georg Brandla18af4e2007-04-21 15:47:16 +00001212 def test_next(self):
1213 it = iter(range(2))
1214 self.assertEqual(next(it), 0)
1215 self.assertEqual(next(it), 1)
1216 self.assertRaises(StopIteration, next, it)
1217 self.assertRaises(StopIteration, next, it)
1218 self.assertEquals(next(it, 42), 42)
1219
1220 class Iter(object):
1221 def __iter__(self):
1222 return self
1223 def __next__(self):
1224 raise StopIteration
1225
1226 it = iter(Iter())
1227 self.assertEquals(next(it, 42), 42)
1228 self.assertRaises(StopIteration, next, it)
1229
1230 def gen():
1231 yield 1
1232 return
1233
1234 it = gen()
1235 self.assertEquals(next(it), 1)
1236 self.assertRaises(StopIteration, next, it)
1237 self.assertEquals(next(it, 42), 42)
1238
Walter Dörwald919497e2003-01-19 16:23:59 +00001239 def test_oct(self):
Guido van Rossumcd16bf62007-06-13 18:07:49 +00001240 self.assertEqual(oct(100), '0o144')
1241 self.assertEqual(oct(100), '0o144')
1242 self.assertEqual(oct(-100), '-0o144')
1243 self.assertEqual(oct(-100), '-0o144')
Walter Dörwald919497e2003-01-19 16:23:59 +00001244 self.assertRaises(TypeError, oct, ())
1245
1246 def write_testfile(self):
Guido van Rossuma88a0332007-02-26 16:59:55 +00001247 # NB the first 4 lines are also used to test input, below
Walter Dörwald919497e2003-01-19 16:23:59 +00001248 fp = open(TESTFN, 'w')
1249 try:
1250 fp.write('1+1\n')
1251 fp.write('1+1\n')
1252 fp.write('The quick brown fox jumps over the lazy dog')
1253 fp.write('.\n')
1254 fp.write('Dear John\n')
1255 fp.write('XXX'*100)
1256 fp.write('YYY'*100)
1257 finally:
1258 fp.close()
1259
1260 def test_open(self):
1261 self.write_testfile()
1262 fp = open(TESTFN, 'r')
1263 try:
1264 self.assertEqual(fp.readline(4), '1+1\n')
1265 self.assertEqual(fp.readline(4), '1+1\n')
1266 self.assertEqual(fp.readline(), 'The quick brown fox jumps over the lazy dog.\n')
1267 self.assertEqual(fp.readline(4), 'Dear')
1268 self.assertEqual(fp.readline(100), ' John\n')
1269 self.assertEqual(fp.read(300), 'XXX'*100)
1270 self.assertEqual(fp.read(1000), 'YYY'*100)
1271 finally:
1272 fp.close()
1273 unlink(TESTFN)
1274
1275 def test_ord(self):
1276 self.assertEqual(ord(' '), 32)
1277 self.assertEqual(ord('A'), 65)
1278 self.assertEqual(ord('a'), 97)
Guido van Rossumf9e91c92007-05-08 21:05:48 +00001279 self.assertEqual(ord('\x80'), 128)
1280 self.assertEqual(ord('\xff'), 255)
1281
1282 self.assertEqual(ord(b' '), 32)
1283 self.assertEqual(ord(b'A'), 65)
1284 self.assertEqual(ord(b'a'), 97)
1285 self.assertEqual(ord(b'\x80'), 128)
1286 self.assertEqual(ord(b'\xff'), 255)
1287
Walter Dörwald1f5947b2007-05-22 16:52:54 +00001288 self.assertEqual(ord(chr(sys.maxunicode)), sys.maxunicode)
Walter Dörwald919497e2003-01-19 16:23:59 +00001289 self.assertRaises(TypeError, ord, 42)
Walter Dörwald919497e2003-01-19 16:23:59 +00001290
1291 def test_pow(self):
1292 self.assertEqual(pow(0,0), 1)
1293 self.assertEqual(pow(0,1), 0)
1294 self.assertEqual(pow(1,0), 1)
1295 self.assertEqual(pow(1,1), 1)
1296
1297 self.assertEqual(pow(2,0), 1)
1298 self.assertEqual(pow(2,10), 1024)
1299 self.assertEqual(pow(2,20), 1024*1024)
1300 self.assertEqual(pow(2,30), 1024*1024*1024)
1301
1302 self.assertEqual(pow(-2,0), 1)
1303 self.assertEqual(pow(-2,1), -2)
1304 self.assertEqual(pow(-2,2), 4)
1305 self.assertEqual(pow(-2,3), -8)
1306
Guido van Rossume2a383d2007-01-15 16:59:06 +00001307 self.assertEqual(pow(0,0), 1)
1308 self.assertEqual(pow(0,1), 0)
1309 self.assertEqual(pow(1,0), 1)
1310 self.assertEqual(pow(1,1), 1)
Walter Dörwald919497e2003-01-19 16:23:59 +00001311
Guido van Rossume2a383d2007-01-15 16:59:06 +00001312 self.assertEqual(pow(2,0), 1)
1313 self.assertEqual(pow(2,10), 1024)
1314 self.assertEqual(pow(2,20), 1024*1024)
1315 self.assertEqual(pow(2,30), 1024*1024*1024)
Walter Dörwald919497e2003-01-19 16:23:59 +00001316
Guido van Rossume2a383d2007-01-15 16:59:06 +00001317 self.assertEqual(pow(-2,0), 1)
1318 self.assertEqual(pow(-2,1), -2)
1319 self.assertEqual(pow(-2,2), 4)
1320 self.assertEqual(pow(-2,3), -8)
Walter Dörwald919497e2003-01-19 16:23:59 +00001321
1322 self.assertAlmostEqual(pow(0.,0), 1.)
1323 self.assertAlmostEqual(pow(0.,1), 0.)
1324 self.assertAlmostEqual(pow(1.,0), 1.)
1325 self.assertAlmostEqual(pow(1.,1), 1.)
1326
1327 self.assertAlmostEqual(pow(2.,0), 1.)
1328 self.assertAlmostEqual(pow(2.,10), 1024.)
1329 self.assertAlmostEqual(pow(2.,20), 1024.*1024.)
1330 self.assertAlmostEqual(pow(2.,30), 1024.*1024.*1024.)
1331
1332 self.assertAlmostEqual(pow(-2.,0), 1.)
1333 self.assertAlmostEqual(pow(-2.,1), -2.)
1334 self.assertAlmostEqual(pow(-2.,2), 4.)
1335 self.assertAlmostEqual(pow(-2.,3), -8.)
1336
Guido van Rossume2a383d2007-01-15 16:59:06 +00001337 for x in 2, 2, 2.0:
1338 for y in 10, 10, 10.0:
1339 for z in 1000, 1000, 1000.0:
Walter Dörwald919497e2003-01-19 16:23:59 +00001340 if isinstance(x, float) or \
1341 isinstance(y, float) or \
1342 isinstance(z, float):
1343 self.assertRaises(TypeError, pow, x, y, z)
1344 else:
1345 self.assertAlmostEqual(pow(x, y, z), 24.0)
1346
1347 self.assertRaises(TypeError, pow, -1, -2, 3)
1348 self.assertRaises(ValueError, pow, 1, 2, 0)
Guido van Rossume2a383d2007-01-15 16:59:06 +00001349 self.assertRaises(TypeError, pow, -1, -2, 3)
1350 self.assertRaises(ValueError, pow, 1, 2, 0)
Walter Dörwald919497e2003-01-19 16:23:59 +00001351 self.assertRaises(ValueError, pow, -342.43, 0.234)
1352
1353 self.assertRaises(TypeError, pow)
1354
1355 def test_range(self):
Guido van Rossum805365e2007-05-07 22:24:25 +00001356 self.assertEqual(list(range(3)), [0, 1, 2])
1357 self.assertEqual(list(range(1, 5)), [1, 2, 3, 4])
1358 self.assertEqual(list(range(0)), [])
1359 self.assertEqual(list(range(-3)), [])
1360 self.assertEqual(list(range(1, 10, 3)), [1, 4, 7])
1361 #self.assertEqual(list(range(5, -5, -3)), [5, 2, -1, -4])
Walter Dörwald919497e2003-01-19 16:23:59 +00001362
Guido van Rossum805365e2007-05-07 22:24:25 +00001363 """ XXX(nnorwitz):
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001364 # Now test range() with longs
Guido van Rossum805365e2007-05-07 22:24:25 +00001365 self.assertEqual(list(range(-2**100)), [])
1366 self.assertEqual(list(range(0, -2**100)), [])
1367 self.assertEqual(list(range(0, 2**100, -1)), [])
1368 self.assertEqual(list(range(0, 2**100, -1)), [])
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001369
Guido van Rossume2a383d2007-01-15 16:59:06 +00001370 a = int(10 * sys.maxint)
1371 b = int(100 * sys.maxint)
1372 c = int(50 * sys.maxint)
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001373
Guido van Rossum805365e2007-05-07 22:24:25 +00001374 self.assertEqual(list(range(a, a+2)), [a, a+1])
1375 self.assertEqual(list(range(a+2, a, -1)), [a+2, a+1])
1376 self.assertEqual(list(range(a+4, a, -2)), [a+4, a+2])
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001377
Guido van Rossum805365e2007-05-07 22:24:25 +00001378 seq = list(range(a, b, c))
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001379 self.assert_(a in seq)
1380 self.assert_(b not in seq)
1381 self.assertEqual(len(seq), 2)
1382
Guido van Rossum805365e2007-05-07 22:24:25 +00001383 seq = list(range(b, a, -c))
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001384 self.assert_(b in seq)
1385 self.assert_(a not in seq)
1386 self.assertEqual(len(seq), 2)
1387
Guido van Rossum805365e2007-05-07 22:24:25 +00001388 seq = list(range(-a, -b, -c))
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001389 self.assert_(-a in seq)
1390 self.assert_(-b not in seq)
1391 self.assertEqual(len(seq), 2)
1392
Walter Dörwald919497e2003-01-19 16:23:59 +00001393 self.assertRaises(TypeError, range)
1394 self.assertRaises(TypeError, range, 1, 2, 3, 4)
1395 self.assertRaises(ValueError, range, 1, 2, 0)
Guido van Rossume2a383d2007-01-15 16:59:06 +00001396 self.assertRaises(ValueError, range, a, a + 1, int(0))
Neal Norwitzfcf44352005-11-27 20:37:43 +00001397
1398 class badzero(int):
Guido van Rossum47b9ff62006-08-24 00:41:19 +00001399 def __eq__(self, other):
Neal Norwitzfcf44352005-11-27 20:37:43 +00001400 raise RuntimeError
Guido van Rossum47b9ff62006-08-24 00:41:19 +00001401 __ne__ = __lt__ = __gt__ = __le__ = __ge__ = __eq__
1402
1403 # XXX This won't (but should!) raise RuntimeError if a is an int...
Neal Norwitzfcf44352005-11-27 20:37:43 +00001404 self.assertRaises(RuntimeError, range, a, a + 1, badzero(1))
Guido van Rossum805365e2007-05-07 22:24:25 +00001405 """
Walter Dörwald919497e2003-01-19 16:23:59 +00001406
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001407 # Reject floats when it would require PyLongs to represent.
1408 # (smaller floats still accepted, but deprecated)
Tim Peters299b3df2003-04-15 14:40:03 +00001409 self.assertRaises(TypeError, range, 1e100, 1e101, 1e101)
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001410
Walter Dörwald357981e2003-04-15 18:59:28 +00001411 self.assertRaises(TypeError, range, 0, "spam")
1412 self.assertRaises(TypeError, range, 0, 42, "spam")
1413
Guido van Rossum805365e2007-05-07 22:24:25 +00001414 #NEAL self.assertRaises(OverflowError, range, -sys.maxint, sys.maxint)
1415 #NEAL self.assertRaises(OverflowError, range, 0, 2*sys.maxint)
1416
1417 self.assertRaises(OverflowError, len, range(0, sys.maxint**10))
Walter Dörwald357981e2003-04-15 18:59:28 +00001418
Guido van Rossuma88a0332007-02-26 16:59:55 +00001419 def test_input(self):
1420 self.write_testfile()
1421 fp = open(TESTFN, 'r')
1422 savestdin = sys.stdin
1423 savestdout = sys.stdout # Eats the echo
1424 try:
1425 sys.stdin = fp
1426 sys.stdout = BitBucket()
1427 self.assertEqual(input(), "1+1")
1428 self.assertEqual(input('testing\n'), "1+1")
1429 self.assertEqual(input(), 'The quick brown fox jumps over the lazy dog.')
1430 self.assertEqual(input('testing\n'), 'Dear John')
1431
1432 # SF 1535165: don't segfault on closed stdin
1433 # sys.stdout must be a regular file for triggering
1434 sys.stdout = savestdout
1435 sys.stdin.close()
1436 self.assertRaises(ValueError, input)
1437
1438 sys.stdout = BitBucket()
1439 sys.stdin = cStringIO.StringIO("NULL\0")
1440 self.assertRaises(TypeError, input, 42, 42)
1441 sys.stdin = cStringIO.StringIO(" 'whitespace'")
1442 self.assertEqual(input(), " 'whitespace'")
1443 sys.stdin = cStringIO.StringIO()
1444 self.assertRaises(EOFError, input)
1445
1446 del sys.stdout
1447 self.assertRaises(RuntimeError, input, 'prompt')
1448 del sys.stdin
1449 self.assertRaises(RuntimeError, input, 'prompt')
1450 finally:
1451 sys.stdin = savestdin
1452 sys.stdout = savestdout
1453 fp.close()
1454 unlink(TESTFN)
1455
Walter Dörwald919497e2003-01-19 16:23:59 +00001456 def test_repr(self):
1457 self.assertEqual(repr(''), '\'\'')
1458 self.assertEqual(repr(0), '0')
Guido van Rossume2a383d2007-01-15 16:59:06 +00001459 self.assertEqual(repr(0), '0')
Walter Dörwald919497e2003-01-19 16:23:59 +00001460 self.assertEqual(repr(()), '()')
1461 self.assertEqual(repr([]), '[]')
1462 self.assertEqual(repr({}), '{}')
1463 a = []
1464 a.append(a)
1465 self.assertEqual(repr(a), '[[...]]')
1466 a = {}
1467 a[0] = a
1468 self.assertEqual(repr(a), '{0: {...}}')
1469
1470 def test_round(self):
1471 self.assertEqual(round(0.0), 0.0)
1472 self.assertEqual(round(1.0), 1.0)
1473 self.assertEqual(round(10.0), 10.0)
1474 self.assertEqual(round(1000000000.0), 1000000000.0)
1475 self.assertEqual(round(1e20), 1e20)
1476
1477 self.assertEqual(round(-1.0), -1.0)
1478 self.assertEqual(round(-10.0), -10.0)
1479 self.assertEqual(round(-1000000000.0), -1000000000.0)
1480 self.assertEqual(round(-1e20), -1e20)
1481
1482 self.assertEqual(round(0.1), 0.0)
1483 self.assertEqual(round(1.1), 1.0)
1484 self.assertEqual(round(10.1), 10.0)
1485 self.assertEqual(round(1000000000.1), 1000000000.0)
1486
1487 self.assertEqual(round(-1.1), -1.0)
1488 self.assertEqual(round(-10.1), -10.0)
1489 self.assertEqual(round(-1000000000.1), -1000000000.0)
1490
1491 self.assertEqual(round(0.9), 1.0)
1492 self.assertEqual(round(9.9), 10.0)
1493 self.assertEqual(round(999999999.9), 1000000000.0)
1494
1495 self.assertEqual(round(-0.9), -1.0)
1496 self.assertEqual(round(-9.9), -10.0)
1497 self.assertEqual(round(-999999999.9), -1000000000.0)
1498
1499 self.assertEqual(round(-8.0, -1), -10.0)
1500
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001501 # test new kwargs
1502 self.assertEqual(round(number=-8.0, ndigits=-1), -10.0)
1503
Walter Dörwald919497e2003-01-19 16:23:59 +00001504 self.assertRaises(TypeError, round)
1505
1506 def test_setattr(self):
Tim Petersf2715e02003-02-19 02:35:07 +00001507 setattr(sys, 'spam', 1)
1508 self.assertEqual(sys.spam, 1)
1509 self.assertRaises(TypeError, setattr, sys, 1, 'spam')
1510 self.assertRaises(TypeError, setattr)
Walter Dörwald919497e2003-01-19 16:23:59 +00001511
1512 def test_str(self):
1513 self.assertEqual(str(''), '')
1514 self.assertEqual(str(0), '0')
Guido van Rossume2a383d2007-01-15 16:59:06 +00001515 self.assertEqual(str(0), '0')
Walter Dörwald919497e2003-01-19 16:23:59 +00001516 self.assertEqual(str(()), '()')
1517 self.assertEqual(str([]), '[]')
1518 self.assertEqual(str({}), '{}')
1519 a = []
1520 a.append(a)
1521 self.assertEqual(str(a), '[[...]]')
1522 a = {}
1523 a[0] = a
1524 self.assertEqual(str(a), '{0: {...}}')
1525
Alex Martellia70b1912003-04-22 08:12:33 +00001526 def test_sum(self):
1527 self.assertEqual(sum([]), 0)
Guido van Rossum805365e2007-05-07 22:24:25 +00001528 self.assertEqual(sum(list(range(2,8))), 27)
1529 self.assertEqual(sum(iter(list(range(2,8)))), 27)
Alex Martellia70b1912003-04-22 08:12:33 +00001530 self.assertEqual(sum(Squares(10)), 285)
1531 self.assertEqual(sum(iter(Squares(10))), 285)
1532 self.assertEqual(sum([[1], [2], [3]], []), [1, 2, 3])
1533
1534 self.assertRaises(TypeError, sum)
1535 self.assertRaises(TypeError, sum, 42)
1536 self.assertRaises(TypeError, sum, ['a', 'b', 'c'])
1537 self.assertRaises(TypeError, sum, ['a', 'b', 'c'], '')
1538 self.assertRaises(TypeError, sum, [[1], [2], [3]])
1539 self.assertRaises(TypeError, sum, [{2:3}])
1540 self.assertRaises(TypeError, sum, [{2:3}]*2, {2:3})
1541
1542 class BadSeq:
1543 def __getitem__(self, index):
1544 raise ValueError
1545 self.assertRaises(ValueError, sum, BadSeq())
1546
Walter Dörwald919497e2003-01-19 16:23:59 +00001547 def test_tuple(self):
1548 self.assertEqual(tuple(()), ())
1549 t0_3 = (0, 1, 2, 3)
1550 t0_3_bis = tuple(t0_3)
1551 self.assert_(t0_3 is t0_3_bis)
1552 self.assertEqual(tuple([]), ())
1553 self.assertEqual(tuple([0, 1, 2, 3]), (0, 1, 2, 3))
1554 self.assertEqual(tuple(''), ())
1555 self.assertEqual(tuple('spam'), ('s', 'p', 'a', 'm'))
1556
1557 def test_type(self):
1558 self.assertEqual(type(''), type('123'))
1559 self.assertNotEqual(type(''), type(()))
1560
Guido van Rossumfee7b932005-01-16 00:21:28 +00001561 # We don't want self in vars(), so these are static methods
1562
1563 @staticmethod
Walter Dörwald919497e2003-01-19 16:23:59 +00001564 def get_vars_f0():
1565 return vars()
Walter Dörwald919497e2003-01-19 16:23:59 +00001566
Guido van Rossumfee7b932005-01-16 00:21:28 +00001567 @staticmethod
Walter Dörwald919497e2003-01-19 16:23:59 +00001568 def get_vars_f2():
1569 BuiltinTest.get_vars_f0()
1570 a = 1
1571 b = 2
1572 return vars()
Walter Dörwald919497e2003-01-19 16:23:59 +00001573
1574 def test_vars(self):
Raymond Hettingera690a992003-11-16 16:17:49 +00001575 self.assertEqual(set(vars()), set(dir()))
Walter Dörwald919497e2003-01-19 16:23:59 +00001576 import sys
Raymond Hettingera690a992003-11-16 16:17:49 +00001577 self.assertEqual(set(vars(sys)), set(dir(sys)))
Walter Dörwald919497e2003-01-19 16:23:59 +00001578 self.assertEqual(self.get_vars_f0(), {})
1579 self.assertEqual(self.get_vars_f2(), {'a': 1, 'b': 2})
1580 self.assertRaises(TypeError, vars, 42, 42)
1581 self.assertRaises(TypeError, vars, 42)
1582
1583 def test_zip(self):
1584 a = (1, 2, 3)
1585 b = (4, 5, 6)
1586 t = [(1, 4), (2, 5), (3, 6)]
Guido van Rossum801f0d72006-08-24 19:48:10 +00001587 self.assertEqual(list(zip(a, b)), t)
Walter Dörwald919497e2003-01-19 16:23:59 +00001588 b = [4, 5, 6]
Guido van Rossum801f0d72006-08-24 19:48:10 +00001589 self.assertEqual(list(zip(a, b)), t)
Walter Dörwald919497e2003-01-19 16:23:59 +00001590 b = (4, 5, 6, 7)
Guido van Rossum801f0d72006-08-24 19:48:10 +00001591 self.assertEqual(list(zip(a, b)), t)
Walter Dörwald919497e2003-01-19 16:23:59 +00001592 class I:
1593 def __getitem__(self, i):
1594 if i < 0 or i > 2: raise IndexError
1595 return i + 4
Guido van Rossum801f0d72006-08-24 19:48:10 +00001596 self.assertEqual(list(zip(a, I())), t)
1597 self.assertEqual(list(zip()), [])
1598 self.assertEqual(list(zip(*[])), [])
Walter Dörwald919497e2003-01-19 16:23:59 +00001599 self.assertRaises(TypeError, zip, None)
1600 class G:
1601 pass
1602 self.assertRaises(TypeError, zip, a, G())
1603
1604 # Make sure zip doesn't try to allocate a billion elements for the
1605 # result list when one of its arguments doesn't say how long it is.
1606 # A MemoryError is the most likely failure mode.
1607 class SequenceWithoutALength:
1608 def __getitem__(self, i):
1609 if i == 5:
1610 raise IndexError
1611 else:
1612 return i
1613 self.assertEqual(
Guido van Rossum805365e2007-05-07 22:24:25 +00001614 list(zip(SequenceWithoutALength(), range(2**30))),
Walter Dörwald919497e2003-01-19 16:23:59 +00001615 list(enumerate(range(5)))
1616 )
1617
1618 class BadSeq:
1619 def __getitem__(self, i):
1620 if i == 5:
1621 raise ValueError
1622 else:
1623 return i
Guido van Rossum801f0d72006-08-24 19:48:10 +00001624 self.assertRaises(ValueError, list, zip(BadSeq(), BadSeq()))
Walter Dörwald919497e2003-01-19 16:23:59 +00001625
Raymond Hettinger64958a12003-12-17 20:43:33 +00001626class TestSorted(unittest.TestCase):
1627
1628 def test_basic(self):
Guido van Rossum805365e2007-05-07 22:24:25 +00001629 data = list(range(100))
Raymond Hettinger64958a12003-12-17 20:43:33 +00001630 copy = data[:]
1631 random.shuffle(copy)
1632 self.assertEqual(data, sorted(copy))
1633 self.assertNotEqual(data, copy)
1634
1635 data.reverse()
1636 random.shuffle(copy)
Guido van Rossum47b9ff62006-08-24 00:41:19 +00001637 self.assertEqual(data, sorted(copy, cmp=lambda x, y: (x < y) - (x > y)))
Raymond Hettinger64958a12003-12-17 20:43:33 +00001638 self.assertNotEqual(data, copy)
1639 random.shuffle(copy)
1640 self.assertEqual(data, sorted(copy, key=lambda x: -x))
1641 self.assertNotEqual(data, copy)
1642 random.shuffle(copy)
1643 self.assertEqual(data, sorted(copy, reverse=1))
1644 self.assertNotEqual(data, copy)
1645
1646 def test_inputtypes(self):
1647 s = 'abracadabra'
Walter Dörwald1f5947b2007-05-22 16:52:54 +00001648 types = [list, tuple, str]
Walter Dörwald4e41a4b2005-08-03 17:09:04 +00001649 for T in types:
Raymond Hettinger64958a12003-12-17 20:43:33 +00001650 self.assertEqual(sorted(s), sorted(T(s)))
1651
Walter Dörwald1f5947b2007-05-22 16:52:54 +00001652 s = ''.join(set(s)) # unique letters only
1653 types = [str, set, frozenset, list, tuple, dict.fromkeys]
Walter Dörwald4e41a4b2005-08-03 17:09:04 +00001654 for T in types:
Raymond Hettinger64958a12003-12-17 20:43:33 +00001655 self.assertEqual(sorted(s), sorted(T(s)))
1656
1657 def test_baddecorator(self):
1658 data = 'The quick Brown fox Jumped over The lazy Dog'.split()
1659 self.assertRaises(TypeError, sorted, data, None, lambda x,y: 0)
1660
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001661def test_main(verbose=None):
1662 test_classes = (BuiltinTest, TestSorted)
1663
1664 run_unittest(*test_classes)
1665
1666 # verify reference counting
1667 if verbose and hasattr(sys, "gettotalrefcount"):
1668 import gc
1669 counts = [None] * 5
Guido van Rossum805365e2007-05-07 22:24:25 +00001670 for i in range(len(counts)):
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001671 run_unittest(*test_classes)
1672 gc.collect()
1673 counts[i] = sys.gettotalrefcount()
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001674 print(counts)
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001675
Walter Dörwald919497e2003-01-19 16:23:59 +00001676
1677if __name__ == "__main__":
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001678 test_main(verbose=True)