blob: a2fde023e3120beb53e7896aa822d6be129307c4 [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):
469 self.assertEqual(filter(lambda c: 'a' <= c <= 'z', 'Hello World'), 'elloorld')
470 self.assertEqual(filter(None, [1, 'hello', [], [3], '', None, 9, 0]), [1, 'hello', [3], 9])
471 self.assertEqual(filter(lambda x: x > 0, [1, -3, 9, 0, 2]), [1, 9, 2])
472 self.assertEqual(filter(None, Squares(10)), [1, 4, 9, 16, 25, 36, 49, 64, 81])
473 self.assertEqual(filter(lambda x: x%2, Squares(10)), [1, 9, 25, 49, 81])
474 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
Walter Dörwald919497e2003-01-19 16:23:59 +0000483 self.assertRaises(ValueError, filter, lambda x: x, BadSeq())
484 def badfunc():
485 pass
486 self.assertRaises(TypeError, filter, badfunc, range(5))
487
Walter Dörwaldbf517072003-01-27 15:57:14 +0000488 # test bltinmodule.c::filtertuple()
Walter Dörwald919497e2003-01-19 16:23:59 +0000489 self.assertEqual(filter(None, (1, 2)), (1, 2))
490 self.assertEqual(filter(lambda x: x>=3, (1, 2, 3, 4)), (3, 4))
491 self.assertRaises(TypeError, filter, 42, (1, 2))
492
Walter Dörwald1f5947b2007-05-22 16:52:54 +0000493 # test bltinmodule.c::filterunicode()
Walter Dörwald919497e2003-01-19 16:23:59 +0000494 self.assertEqual(filter(None, "12"), "12")
495 self.assertEqual(filter(lambda x: x>="3", "1234"), "34")
496 self.assertRaises(TypeError, filter, 42, "12")
497 class badstr(str):
498 def __getitem__(self, index):
499 raise ValueError
500 self.assertRaises(ValueError, filter, lambda x: x >="3", badstr("1234"))
Walter Dörwaldbf517072003-01-27 15:57:14 +0000501
Walter Dörwald903f1e02003-02-04 16:28:00 +0000502 class badstr2(str):
503 def __getitem__(self, index):
504 return 42
505 self.assertRaises(TypeError, filter, lambda x: x >=42, badstr2("1234"))
506
507 class weirdstr(str):
508 def __getitem__(self, index):
509 return weirdstr(2*str.__getitem__(self, index))
510 self.assertEqual(filter(lambda x: x>="33", weirdstr("1234")), "3344")
511
Walter Dörwald5e61e242003-02-04 17:04:01 +0000512 class shiftstr(str):
513 def __getitem__(self, index):
514 return chr(ord(str.__getitem__(self, index))+1)
515 self.assertEqual(filter(lambda x: x>="3", shiftstr("1234")), "345")
516
Walter Dörwaldc3da83f2003-02-04 20:24:45 +0000517 def test_filter_subclasses(self):
Walter Dörwald1f5947b2007-05-22 16:52:54 +0000518 # test that filter() never returns tuple or str subclasses
Walter Dörwaldc8cb5d92003-08-15 17:52:39 +0000519 # and that the result always goes through __getitem__
520 funcs = (None, bool, lambda x: True)
Walter Dörwaldc3da83f2003-02-04 20:24:45 +0000521 class tuple2(tuple):
Walter Dörwald1918f772003-02-10 13:19:13 +0000522 def __getitem__(self, index):
523 return 2*tuple.__getitem__(self, index)
Walter Dörwaldc3da83f2003-02-04 20:24:45 +0000524 class str2(str):
Walter Dörwald1918f772003-02-10 13:19:13 +0000525 def __getitem__(self, index):
526 return 2*str.__getitem__(self, index)
Walter Dörwaldc3da83f2003-02-04 20:24:45 +0000527 inputs = {
Walter Dörwald8dd19322003-02-10 17:36:40 +0000528 tuple2: {(): (), (1, 2, 3): (2, 4, 6)},
Walter Dörwald1918f772003-02-10 13:19:13 +0000529 str2: {"": "", "123": "112233"}
Walter Dörwaldc3da83f2003-02-04 20:24:45 +0000530 }
Walter Dörwaldc3da83f2003-02-04 20:24:45 +0000531
Guido van Rossumcc2b0162007-02-11 06:12:03 +0000532 for (cls, inps) in inputs.items():
533 for (inp, exp) in inps.items():
Tim Petersf2715e02003-02-19 02:35:07 +0000534 # make sure the output goes through __getitem__
535 # even if func is None
536 self.assertEqual(
537 filter(funcs[0], cls(inp)),
538 filter(funcs[1], cls(inp))
539 )
540 for func in funcs:
Walter Dörwald1918f772003-02-10 13:19:13 +0000541 outp = filter(func, cls(inp))
542 self.assertEqual(outp, exp)
543 self.assert_(not isinstance(outp, cls))
Walter Dörwaldc3da83f2003-02-04 20:24:45 +0000544
Walter Dörwald919497e2003-01-19 16:23:59 +0000545 def test_float(self):
546 self.assertEqual(float(3.14), 3.14)
547 self.assertEqual(float(314), 314.0)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000548 self.assertEqual(float(314), 314.0)
Walter Dörwald919497e2003-01-19 16:23:59 +0000549 self.assertEqual(float(" 3.14 "), 3.14)
Neal Norwitze7214a12005-12-18 05:03:17 +0000550 self.assertRaises(ValueError, float, " 0x3.1 ")
551 self.assertRaises(ValueError, float, " -0x3.p-1 ")
Walter Dörwald1f5947b2007-05-22 16:52:54 +0000552 self.assertEqual(float(str(b" \u0663.\u0661\u0664 ",'raw-unicode-escape')), 3.14)
553 self.assertEqual(float("1"*10000), 1e10000) # Inf on both sides
Walter Dörwald919497e2003-01-19 16:23:59 +0000554
Thomas Wouters477c8d52006-05-27 19:21:47 +0000555 @run_with_locale('LC_NUMERIC', 'fr_FR', 'de_DE')
Neal Norwitz5898fa22005-11-22 05:17:40 +0000556 def test_float_with_comma(self):
557 # set locale to something that doesn't use '.' for the decimal point
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000558 # float must not accept the locale specific decimal point but
559 # it still has to accept the normal python syntac
Thomas Wouters477c8d52006-05-27 19:21:47 +0000560 import locale
561 if not locale.localeconv()['decimal_point'] == ',':
Neal Norwitz5898fa22005-11-22 05:17:40 +0000562 return
563
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000564 self.assertEqual(float(" 3.14 "), 3.14)
565 self.assertEqual(float("+3.14 "), 3.14)
566 self.assertEqual(float("-3.14 "), -3.14)
567 self.assertEqual(float(".14 "), .14)
568 self.assertEqual(float("3. "), 3.0)
569 self.assertEqual(float("3.e3 "), 3000.0)
570 self.assertEqual(float("3.2e3 "), 3200.0)
571 self.assertEqual(float("2.5e-1 "), 0.25)
572 self.assertEqual(float("5e-1"), 0.5)
573 self.assertRaises(ValueError, float, " 3,14 ")
574 self.assertRaises(ValueError, float, " +3,14 ")
575 self.assertRaises(ValueError, float, " -3,14 ")
Thomas Wouters477c8d52006-05-27 19:21:47 +0000576 self.assertRaises(ValueError, float, " 0x3.1 ")
577 self.assertRaises(ValueError, float, " -0x3.p-1 ")
578 self.assertEqual(float(" 25.e-1 "), 2.5)
579 self.assertEqual(fcmp(float(" .25e-1 "), .025), 0)
Neal Norwitz5898fa22005-11-22 05:17:40 +0000580
Brett Cannonc3647ac2005-04-26 03:45:26 +0000581 def test_floatconversion(self):
582 # Make sure that calls to __float__() work properly
583 class Foo0:
584 def __float__(self):
585 return 42.
586
587 class Foo1(object):
588 def __float__(self):
589 return 42.
590
591 class Foo2(float):
592 def __float__(self):
593 return 42.
594
595 class Foo3(float):
596 def __new__(cls, value=0.):
597 return float.__new__(cls, 2*value)
598
599 def __float__(self):
600 return self
601
602 class Foo4(float):
603 def __float__(self):
604 return 42
605
606 self.assertAlmostEqual(float(Foo0()), 42.)
607 self.assertAlmostEqual(float(Foo1()), 42.)
608 self.assertAlmostEqual(float(Foo2()), 42.)
609 self.assertAlmostEqual(float(Foo3(21)), 42.)
610 self.assertRaises(TypeError, float, Foo4(42))
611
Walter Dörwald919497e2003-01-19 16:23:59 +0000612 def test_getattr(self):
613 import sys
614 self.assert_(getattr(sys, 'stdout') is sys.stdout)
615 self.assertRaises(TypeError, getattr, sys, 1)
616 self.assertRaises(TypeError, getattr, sys, 1, "foo")
617 self.assertRaises(TypeError, getattr)
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000618 self.assertRaises(AttributeError, getattr, sys, chr(sys.maxunicode))
Walter Dörwald919497e2003-01-19 16:23:59 +0000619
620 def test_hasattr(self):
621 import sys
622 self.assert_(hasattr(sys, 'stdout'))
623 self.assertRaises(TypeError, hasattr, sys, 1)
624 self.assertRaises(TypeError, hasattr)
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000625 self.assertEqual(False, hasattr(sys, chr(sys.maxunicode)))
Walter Dörwald919497e2003-01-19 16:23:59 +0000626
627 def test_hash(self):
628 hash(None)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000629 self.assertEqual(hash(1), hash(1))
Walter Dörwald919497e2003-01-19 16:23:59 +0000630 self.assertEqual(hash(1), hash(1.0))
631 hash('spam')
Walter Dörwald1f5947b2007-05-22 16:52:54 +0000632 self.assertEqual(hash('spam'), hash(str8('spam')))
Walter Dörwald919497e2003-01-19 16:23:59 +0000633 hash((0,1,2,3))
634 def f(): pass
635 self.assertRaises(TypeError, hash, [])
636 self.assertRaises(TypeError, hash, {})
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000637 # Bug 1536021: Allow hash to return long objects
638 class X:
639 def __hash__(self):
640 return 2**100
641 self.assertEquals(type(hash(X())), int)
642 class Y(object):
643 def __hash__(self):
644 return 2**100
645 self.assertEquals(type(hash(Y())), int)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000646 class Z(int):
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000647 def __hash__(self):
648 return self
Guido van Rossume2a383d2007-01-15 16:59:06 +0000649 self.assertEquals(hash(Z(42)), hash(42))
Walter Dörwald919497e2003-01-19 16:23:59 +0000650
651 def test_hex(self):
652 self.assertEqual(hex(16), '0x10')
Guido van Rossume2a383d2007-01-15 16:59:06 +0000653 self.assertEqual(hex(16), '0x10')
Guido van Rossum6c9e1302003-11-29 23:52:13 +0000654 self.assertEqual(hex(-16), '-0x10')
Guido van Rossume2a383d2007-01-15 16:59:06 +0000655 self.assertEqual(hex(-16), '-0x10')
Walter Dörwald919497e2003-01-19 16:23:59 +0000656 self.assertRaises(TypeError, hex, {})
657
658 def test_id(self):
659 id(None)
660 id(1)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000661 id(1)
Walter Dörwald919497e2003-01-19 16:23:59 +0000662 id(1.0)
663 id('spam')
664 id((0,1,2,3))
665 id([0,1,2,3])
666 id({'spam': 1, 'eggs': 2, 'ham': 3})
667
Guido van Rossuma88a0332007-02-26 16:59:55 +0000668 # Test input() later, alphabetized as if it were raw_input
669
Walter Dörwald919497e2003-01-19 16:23:59 +0000670 def test_int(self):
671 self.assertEqual(int(314), 314)
672 self.assertEqual(int(3.14), 3)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000673 self.assertEqual(int(314), 314)
Walter Dörwald919497e2003-01-19 16:23:59 +0000674 # Check that conversion from float truncates towards zero
675 self.assertEqual(int(-3.14), -3)
676 self.assertEqual(int(3.9), 3)
677 self.assertEqual(int(-3.9), -3)
678 self.assertEqual(int(3.5), 3)
679 self.assertEqual(int(-3.5), -3)
680 # Different base:
Guido van Rossume2a383d2007-01-15 16:59:06 +0000681 self.assertEqual(int("10",16), 16)
Walter Dörwald919497e2003-01-19 16:23:59 +0000682 # Test conversion from strings and various anomalies
683 for s, v in L:
684 for sign in "", "+", "-":
685 for prefix in "", " ", "\t", " \t\t ":
686 ss = prefix + sign + s
687 vv = v
688 if sign == "-" and v is not ValueError:
689 vv = -v
690 try:
691 self.assertEqual(int(ss), vv)
692 except v:
693 pass
694
Walter Dörwald70a6b492004-02-12 17:35:32 +0000695 s = repr(-1-sys.maxint)
Thomas Wouters89f507f2006-12-13 04:49:30 +0000696 x = int(s)
697 self.assertEqual(x+1, -sys.maxint)
698 self.assert_(isinstance(x, int))
Walter Dörwald919497e2003-01-19 16:23:59 +0000699 # should return long
Thomas Wouters89f507f2006-12-13 04:49:30 +0000700 self.assertEqual(int(s[1:]), sys.maxint+1)
Walter Dörwald919497e2003-01-19 16:23:59 +0000701
702 # should return long
703 x = int(1e100)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000704 self.assert_(isinstance(x, int))
Walter Dörwald919497e2003-01-19 16:23:59 +0000705 x = int(-1e100)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000706 self.assert_(isinstance(x, int))
Walter Dörwald919497e2003-01-19 16:23:59 +0000707
708
709 # SF bug 434186: 0x80000000/2 != 0x80000000>>1.
710 # Worked by accident in Windows release build, but failed in debug build.
711 # Failed in all Linux builds.
712 x = -1-sys.maxint
713 self.assertEqual(x >> 1, x//2)
714
715 self.assertRaises(ValueError, int, '123\0')
716 self.assertRaises(ValueError, int, '53', 40)
717
Thomas Wouters89f507f2006-12-13 04:49:30 +0000718 # SF bug 1545497: embedded NULs were not detected with
719 # explicit base
720 self.assertRaises(ValueError, int, '123\0', 10)
721 self.assertRaises(ValueError, int, '123\x00 245', 20)
722
Walter Dörwald919497e2003-01-19 16:23:59 +0000723 x = int('1' * 600)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000724 self.assert_(isinstance(x, int))
Walter Dörwald919497e2003-01-19 16:23:59 +0000725
Walter Dörwald1f5947b2007-05-22 16:52:54 +0000726 x = int(chr(0x661) * 600)
727 self.assert_(isinstance(x, int))
Walter Dörwald919497e2003-01-19 16:23:59 +0000728
729 self.assertRaises(TypeError, int, 1, 12)
730
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000731 # tests with base 0
732 self.assertRaises(ValueError, int, ' 0123 ', 0) # old octal syntax
733 self.assertEqual(int('000', 0), 0)
734 self.assertEqual(int('0o123', 0), 83)
735 self.assertEqual(int('0x123', 0), 291)
736 self.assertEqual(int('0b100', 0), 4)
737 self.assertEqual(int(' 0O123 ', 0), 83)
738 self.assertEqual(int(' 0X123 ', 0), 291)
739 self.assertEqual(int(' 0B100 ', 0), 4)
740
741 # without base still base 10
742 self.assertEqual(int('0123'), 123)
743 self.assertEqual(int('0123', 10), 123)
744
745 # tests with prefix and base != 0
Neal Norwitz5898fa22005-11-22 05:17:40 +0000746 self.assertEqual(int('0x123', 16), 291)
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000747 self.assertEqual(int('0o123', 8), 83)
748 self.assertEqual(int('0b100', 2), 4)
749 self.assertEqual(int('0X123', 16), 291)
750 self.assertEqual(int('0O123', 8), 83)
751 self.assertEqual(int('0B100', 2), 4)
Walter Dörwald919497e2003-01-19 16:23:59 +0000752
Thomas Wouters477c8d52006-05-27 19:21:47 +0000753 # SF bug 1334662: int(string, base) wrong answers
754 # Various representations of 2**32 evaluated to 0
755 # rather than 2**32 in previous versions
756
Guido van Rossume2a383d2007-01-15 16:59:06 +0000757 self.assertEqual(int('100000000000000000000000000000000', 2), 4294967296)
758 self.assertEqual(int('102002022201221111211', 3), 4294967296)
759 self.assertEqual(int('10000000000000000', 4), 4294967296)
760 self.assertEqual(int('32244002423141', 5), 4294967296)
761 self.assertEqual(int('1550104015504', 6), 4294967296)
762 self.assertEqual(int('211301422354', 7), 4294967296)
763 self.assertEqual(int('40000000000', 8), 4294967296)
764 self.assertEqual(int('12068657454', 9), 4294967296)
765 self.assertEqual(int('4294967296', 10), 4294967296)
766 self.assertEqual(int('1904440554', 11), 4294967296)
767 self.assertEqual(int('9ba461594', 12), 4294967296)
768 self.assertEqual(int('535a79889', 13), 4294967296)
769 self.assertEqual(int('2ca5b7464', 14), 4294967296)
770 self.assertEqual(int('1a20dcd81', 15), 4294967296)
771 self.assertEqual(int('100000000', 16), 4294967296)
772 self.assertEqual(int('a7ffda91', 17), 4294967296)
773 self.assertEqual(int('704he7g4', 18), 4294967296)
774 self.assertEqual(int('4f5aff66', 19), 4294967296)
775 self.assertEqual(int('3723ai4g', 20), 4294967296)
776 self.assertEqual(int('281d55i4', 21), 4294967296)
777 self.assertEqual(int('1fj8b184', 22), 4294967296)
778 self.assertEqual(int('1606k7ic', 23), 4294967296)
779 self.assertEqual(int('mb994ag', 24), 4294967296)
780 self.assertEqual(int('hek2mgl', 25), 4294967296)
781 self.assertEqual(int('dnchbnm', 26), 4294967296)
782 self.assertEqual(int('b28jpdm', 27), 4294967296)
783 self.assertEqual(int('8pfgih4', 28), 4294967296)
784 self.assertEqual(int('76beigg', 29), 4294967296)
785 self.assertEqual(int('5qmcpqg', 30), 4294967296)
786 self.assertEqual(int('4q0jto4', 31), 4294967296)
787 self.assertEqual(int('4000000', 32), 4294967296)
788 self.assertEqual(int('3aokq94', 33), 4294967296)
789 self.assertEqual(int('2qhxjli', 34), 4294967296)
790 self.assertEqual(int('2br45qb', 35), 4294967296)
791 self.assertEqual(int('1z141z4', 36), 4294967296)
Thomas Wouters477c8d52006-05-27 19:21:47 +0000792
793 # SF bug 1334662: int(string, base) wrong answers
794 # Checks for proper evaluation of 2**32 + 1
Guido van Rossume2a383d2007-01-15 16:59:06 +0000795 self.assertEqual(int('100000000000000000000000000000001', 2), 4294967297)
796 self.assertEqual(int('102002022201221111212', 3), 4294967297)
797 self.assertEqual(int('10000000000000001', 4), 4294967297)
798 self.assertEqual(int('32244002423142', 5), 4294967297)
799 self.assertEqual(int('1550104015505', 6), 4294967297)
800 self.assertEqual(int('211301422355', 7), 4294967297)
801 self.assertEqual(int('40000000001', 8), 4294967297)
802 self.assertEqual(int('12068657455', 9), 4294967297)
803 self.assertEqual(int('4294967297', 10), 4294967297)
804 self.assertEqual(int('1904440555', 11), 4294967297)
805 self.assertEqual(int('9ba461595', 12), 4294967297)
806 self.assertEqual(int('535a7988a', 13), 4294967297)
807 self.assertEqual(int('2ca5b7465', 14), 4294967297)
808 self.assertEqual(int('1a20dcd82', 15), 4294967297)
809 self.assertEqual(int('100000001', 16), 4294967297)
810 self.assertEqual(int('a7ffda92', 17), 4294967297)
811 self.assertEqual(int('704he7g5', 18), 4294967297)
812 self.assertEqual(int('4f5aff67', 19), 4294967297)
813 self.assertEqual(int('3723ai4h', 20), 4294967297)
814 self.assertEqual(int('281d55i5', 21), 4294967297)
815 self.assertEqual(int('1fj8b185', 22), 4294967297)
816 self.assertEqual(int('1606k7id', 23), 4294967297)
817 self.assertEqual(int('mb994ah', 24), 4294967297)
818 self.assertEqual(int('hek2mgm', 25), 4294967297)
819 self.assertEqual(int('dnchbnn', 26), 4294967297)
820 self.assertEqual(int('b28jpdn', 27), 4294967297)
821 self.assertEqual(int('8pfgih5', 28), 4294967297)
822 self.assertEqual(int('76beigh', 29), 4294967297)
823 self.assertEqual(int('5qmcpqh', 30), 4294967297)
824 self.assertEqual(int('4q0jto5', 31), 4294967297)
825 self.assertEqual(int('4000001', 32), 4294967297)
826 self.assertEqual(int('3aokq95', 33), 4294967297)
827 self.assertEqual(int('2qhxjlj', 34), 4294967297)
828 self.assertEqual(int('2br45qc', 35), 4294967297)
829 self.assertEqual(int('1z141z5', 36), 4294967297)
Thomas Wouters477c8d52006-05-27 19:21:47 +0000830
Brett Cannonc3647ac2005-04-26 03:45:26 +0000831 def test_intconversion(self):
832 # Test __int__()
833 class Foo0:
834 def __int__(self):
835 return 42
836
837 class Foo1(object):
838 def __int__(self):
839 return 42
840
841 class Foo2(int):
842 def __int__(self):
843 return 42
844
845 class Foo3(int):
846 def __int__(self):
847 return self
848
849 class Foo4(int):
850 def __int__(self):
Guido van Rossume2a383d2007-01-15 16:59:06 +0000851 return 42
Brett Cannonc3647ac2005-04-26 03:45:26 +0000852
853 class Foo5(int):
854 def __int__(self):
855 return 42.
856
857 self.assertEqual(int(Foo0()), 42)
858 self.assertEqual(int(Foo1()), 42)
859 self.assertEqual(int(Foo2()), 42)
860 self.assertEqual(int(Foo3()), 0)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000861 self.assertEqual(int(Foo4()), 42)
Brett Cannonc3647ac2005-04-26 03:45:26 +0000862 self.assertRaises(TypeError, int, Foo5())
863
Walter Dörwald919497e2003-01-19 16:23:59 +0000864 def test_iter(self):
865 self.assertRaises(TypeError, iter)
866 self.assertRaises(TypeError, iter, 42, 42)
867 lists = [("1", "2"), ["1", "2"], "12"]
Walter Dörwald919497e2003-01-19 16:23:59 +0000868 for l in lists:
869 i = iter(l)
Georg Brandla18af4e2007-04-21 15:47:16 +0000870 self.assertEqual(next(i), '1')
871 self.assertEqual(next(i), '2')
872 self.assertRaises(StopIteration, next, i)
Walter Dörwald919497e2003-01-19 16:23:59 +0000873
874 def test_isinstance(self):
875 class C:
876 pass
877 class D(C):
878 pass
879 class E:
880 pass
881 c = C()
882 d = D()
883 e = E()
884 self.assert_(isinstance(c, C))
885 self.assert_(isinstance(d, C))
886 self.assert_(not isinstance(e, C))
887 self.assert_(not isinstance(c, D))
888 self.assert_(not isinstance('foo', E))
889 self.assertRaises(TypeError, isinstance, E, 'foo')
890 self.assertRaises(TypeError, isinstance)
891
892 def test_issubclass(self):
893 class C:
894 pass
895 class D(C):
896 pass
897 class E:
898 pass
899 c = C()
900 d = D()
901 e = E()
902 self.assert_(issubclass(D, C))
903 self.assert_(issubclass(C, C))
904 self.assert_(not issubclass(C, D))
905 self.assertRaises(TypeError, issubclass, 'foo', E)
906 self.assertRaises(TypeError, issubclass, E, 'foo')
907 self.assertRaises(TypeError, issubclass)
908
909 def test_len(self):
910 self.assertEqual(len('123'), 3)
911 self.assertEqual(len(()), 0)
912 self.assertEqual(len((1, 2, 3, 4)), 4)
913 self.assertEqual(len([1, 2, 3, 4]), 4)
914 self.assertEqual(len({}), 0)
915 self.assertEqual(len({'a':1, 'b': 2}), 2)
916 class BadSeq:
917 def __len__(self):
918 raise ValueError
919 self.assertRaises(ValueError, len, BadSeq())
920
921 def test_list(self):
922 self.assertEqual(list([]), [])
923 l0_3 = [0, 1, 2, 3]
924 l0_3_bis = list(l0_3)
925 self.assertEqual(l0_3, l0_3_bis)
926 self.assert_(l0_3 is not l0_3_bis)
927 self.assertEqual(list(()), [])
928 self.assertEqual(list((0, 1, 2, 3)), [0, 1, 2, 3])
929 self.assertEqual(list(''), [])
930 self.assertEqual(list('spam'), ['s', 'p', 'a', 'm'])
931
932 if sys.maxint == 0x7fffffff:
933 # This test can currently only work on 32-bit machines.
934 # XXX If/when PySequence_Length() returns a ssize_t, it should be
935 # XXX re-enabled.
936 # Verify clearing of bug #556025.
937 # This assumes that the max data size (sys.maxint) == max
938 # address size this also assumes that the address size is at
939 # least 4 bytes with 8 byte addresses, the bug is not well
940 # tested
941 #
942 # Note: This test is expected to SEGV under Cygwin 1.3.12 or
943 # earlier due to a newlib bug. See the following mailing list
944 # thread for the details:
945
946 # http://sources.redhat.com/ml/newlib/2002/msg00369.html
Guido van Rossum805365e2007-05-07 22:24:25 +0000947 self.assertRaises(MemoryError, list, range(sys.maxint // 2))
Walter Dörwald919497e2003-01-19 16:23:59 +0000948
Raymond Hettingeraa241e02004-09-26 19:24:20 +0000949 # This code used to segfault in Py2.4a3
950 x = []
951 x.extend(-y for y in x)
952 self.assertEqual(x, [])
953
Walter Dörwald919497e2003-01-19 16:23:59 +0000954 def test_long(self):
Guido van Rossume2a383d2007-01-15 16:59:06 +0000955 self.assertEqual(int(314), 314)
956 self.assertEqual(int(3.14), 3)
957 self.assertEqual(int(314), 314)
Walter Dörwald919497e2003-01-19 16:23:59 +0000958 # Check that conversion from float truncates towards zero
Guido van Rossume2a383d2007-01-15 16:59:06 +0000959 self.assertEqual(int(-3.14), -3)
960 self.assertEqual(int(3.9), 3)
961 self.assertEqual(int(-3.9), -3)
962 self.assertEqual(int(3.5), 3)
963 self.assertEqual(int(-3.5), -3)
964 self.assertEqual(int("-3"), -3)
Walter Dörwald919497e2003-01-19 16:23:59 +0000965 # Different base:
Guido van Rossume2a383d2007-01-15 16:59:06 +0000966 self.assertEqual(int("10",16), 16)
Walter Dörwald919497e2003-01-19 16:23:59 +0000967 # Check conversions from string (same test set as for int(), and then some)
968 LL = [
Guido van Rossume2a383d2007-01-15 16:59:06 +0000969 ('1' + '0'*20, 10**20),
970 ('1' + '0'*100, 10**100)
Walter Dörwald919497e2003-01-19 16:23:59 +0000971 ]
Walter Dörwald1f5947b2007-05-22 16:52:54 +0000972 for s, v in LL:
Walter Dörwald919497e2003-01-19 16:23:59 +0000973 for sign in "", "+", "-":
974 for prefix in "", " ", "\t", " \t\t ":
975 ss = prefix + sign + s
976 vv = v
977 if sign == "-" and v is not ValueError:
978 vv = -v
979 try:
Guido van Rossume2a383d2007-01-15 16:59:06 +0000980 self.assertEqual(int(ss), int(vv))
Walter Dörwald919497e2003-01-19 16:23:59 +0000981 except v:
982 pass
983
Guido van Rossume2a383d2007-01-15 16:59:06 +0000984 self.assertRaises(ValueError, int, '123\0')
985 self.assertRaises(ValueError, int, '53', 40)
986 self.assertRaises(TypeError, int, 1, 12)
Walter Dörwald919497e2003-01-19 16:23:59 +0000987
Guido van Rossumd8faa362007-04-27 19:54:29 +0000988 # SF patch #1638879: embedded NULs were not detected with
989 # explicit base
990 self.assertRaises(ValueError, int, '123\0', 10)
991 self.assertRaises(ValueError, int, '123\x00 245', 20)
992
Guido van Rossume2a383d2007-01-15 16:59:06 +0000993 self.assertEqual(int('100000000000000000000000000000000', 2),
Thomas Wouters477c8d52006-05-27 19:21:47 +0000994 4294967296)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000995 self.assertEqual(int('102002022201221111211', 3), 4294967296)
996 self.assertEqual(int('10000000000000000', 4), 4294967296)
997 self.assertEqual(int('32244002423141', 5), 4294967296)
998 self.assertEqual(int('1550104015504', 6), 4294967296)
999 self.assertEqual(int('211301422354', 7), 4294967296)
1000 self.assertEqual(int('40000000000', 8), 4294967296)
1001 self.assertEqual(int('12068657454', 9), 4294967296)
1002 self.assertEqual(int('4294967296', 10), 4294967296)
1003 self.assertEqual(int('1904440554', 11), 4294967296)
1004 self.assertEqual(int('9ba461594', 12), 4294967296)
1005 self.assertEqual(int('535a79889', 13), 4294967296)
1006 self.assertEqual(int('2ca5b7464', 14), 4294967296)
1007 self.assertEqual(int('1a20dcd81', 15), 4294967296)
1008 self.assertEqual(int('100000000', 16), 4294967296)
1009 self.assertEqual(int('a7ffda91', 17), 4294967296)
1010 self.assertEqual(int('704he7g4', 18), 4294967296)
1011 self.assertEqual(int('4f5aff66', 19), 4294967296)
1012 self.assertEqual(int('3723ai4g', 20), 4294967296)
1013 self.assertEqual(int('281d55i4', 21), 4294967296)
1014 self.assertEqual(int('1fj8b184', 22), 4294967296)
1015 self.assertEqual(int('1606k7ic', 23), 4294967296)
1016 self.assertEqual(int('mb994ag', 24), 4294967296)
1017 self.assertEqual(int('hek2mgl', 25), 4294967296)
1018 self.assertEqual(int('dnchbnm', 26), 4294967296)
1019 self.assertEqual(int('b28jpdm', 27), 4294967296)
1020 self.assertEqual(int('8pfgih4', 28), 4294967296)
1021 self.assertEqual(int('76beigg', 29), 4294967296)
1022 self.assertEqual(int('5qmcpqg', 30), 4294967296)
1023 self.assertEqual(int('4q0jto4', 31), 4294967296)
1024 self.assertEqual(int('4000000', 32), 4294967296)
1025 self.assertEqual(int('3aokq94', 33), 4294967296)
1026 self.assertEqual(int('2qhxjli', 34), 4294967296)
1027 self.assertEqual(int('2br45qb', 35), 4294967296)
1028 self.assertEqual(int('1z141z4', 36), 4294967296)
Thomas Wouters477c8d52006-05-27 19:21:47 +00001029
Guido van Rossume2a383d2007-01-15 16:59:06 +00001030 self.assertEqual(int('100000000000000000000000000000001', 2),
Thomas Wouters477c8d52006-05-27 19:21:47 +00001031 4294967297)
Guido van Rossume2a383d2007-01-15 16:59:06 +00001032 self.assertEqual(int('102002022201221111212', 3), 4294967297)
1033 self.assertEqual(int('10000000000000001', 4), 4294967297)
1034 self.assertEqual(int('32244002423142', 5), 4294967297)
1035 self.assertEqual(int('1550104015505', 6), 4294967297)
1036 self.assertEqual(int('211301422355', 7), 4294967297)
1037 self.assertEqual(int('40000000001', 8), 4294967297)
1038 self.assertEqual(int('12068657455', 9), 4294967297)
1039 self.assertEqual(int('4294967297', 10), 4294967297)
1040 self.assertEqual(int('1904440555', 11), 4294967297)
1041 self.assertEqual(int('9ba461595', 12), 4294967297)
1042 self.assertEqual(int('535a7988a', 13), 4294967297)
1043 self.assertEqual(int('2ca5b7465', 14), 4294967297)
1044 self.assertEqual(int('1a20dcd82', 15), 4294967297)
1045 self.assertEqual(int('100000001', 16), 4294967297)
1046 self.assertEqual(int('a7ffda92', 17), 4294967297)
1047 self.assertEqual(int('704he7g5', 18), 4294967297)
1048 self.assertEqual(int('4f5aff67', 19), 4294967297)
1049 self.assertEqual(int('3723ai4h', 20), 4294967297)
1050 self.assertEqual(int('281d55i5', 21), 4294967297)
1051 self.assertEqual(int('1fj8b185', 22), 4294967297)
1052 self.assertEqual(int('1606k7id', 23), 4294967297)
1053 self.assertEqual(int('mb994ah', 24), 4294967297)
1054 self.assertEqual(int('hek2mgm', 25), 4294967297)
1055 self.assertEqual(int('dnchbnn', 26), 4294967297)
1056 self.assertEqual(int('b28jpdn', 27), 4294967297)
1057 self.assertEqual(int('8pfgih5', 28), 4294967297)
1058 self.assertEqual(int('76beigh', 29), 4294967297)
1059 self.assertEqual(int('5qmcpqh', 30), 4294967297)
1060 self.assertEqual(int('4q0jto5', 31), 4294967297)
1061 self.assertEqual(int('4000001', 32), 4294967297)
1062 self.assertEqual(int('3aokq95', 33), 4294967297)
1063 self.assertEqual(int('2qhxjlj', 34), 4294967297)
1064 self.assertEqual(int('2br45qc', 35), 4294967297)
1065 self.assertEqual(int('1z141z5', 36), 4294967297)
Thomas Wouters477c8d52006-05-27 19:21:47 +00001066
1067
Brett Cannonc3647ac2005-04-26 03:45:26 +00001068 def test_longconversion(self):
1069 # Test __long__()
1070 class Foo0:
1071 def __long__(self):
Guido van Rossume2a383d2007-01-15 16:59:06 +00001072 return 42
Brett Cannonc3647ac2005-04-26 03:45:26 +00001073
1074 class Foo1(object):
1075 def __long__(self):
Guido van Rossume2a383d2007-01-15 16:59:06 +00001076 return 42
Brett Cannonc3647ac2005-04-26 03:45:26 +00001077
Guido van Rossume2a383d2007-01-15 16:59:06 +00001078 class Foo2(int):
Brett Cannonc3647ac2005-04-26 03:45:26 +00001079 def __long__(self):
1080 return 42
1081
Guido van Rossume2a383d2007-01-15 16:59:06 +00001082 class Foo3(int):
1083 def __long__(self):
1084 return self
1085
1086 class Foo4(int):
1087 def __long__(self):
1088 return 42
1089
1090 class Foo5(int):
Brett Cannonc3647ac2005-04-26 03:45:26 +00001091 def __long__(self):
1092 return 42.
1093
Guido van Rossume2a383d2007-01-15 16:59:06 +00001094 self.assertEqual(int(Foo0()), 42)
1095 self.assertEqual(int(Foo1()), 42)
Guido van Rossumd8faa362007-04-27 19:54:29 +00001096 # XXX invokes __int__ now
Guido van Rossumddefaf32007-01-14 03:31:43 +00001097 # self.assertEqual(long(Foo2()), 42L)
Guido van Rossume2a383d2007-01-15 16:59:06 +00001098 self.assertEqual(int(Foo3()), 0)
Guido van Rossumd8faa362007-04-27 19:54:29 +00001099 # XXX likewise
Guido van Rossumddefaf32007-01-14 03:31:43 +00001100 # self.assertEqual(long(Foo4()), 42)
1101 # self.assertRaises(TypeError, long, Foo5())
Brett Cannonc3647ac2005-04-26 03:45:26 +00001102
Walter Dörwald919497e2003-01-19 16:23:59 +00001103 def test_map(self):
1104 self.assertEqual(
1105 map(None, 'hello world'),
1106 ['h','e','l','l','o',' ','w','o','r','l','d']
1107 )
1108 self.assertEqual(
1109 map(None, 'abcd', 'efg'),
1110 [('a', 'e'), ('b', 'f'), ('c', 'g'), ('d', None)]
1111 )
1112 self.assertEqual(
1113 map(None, range(10)),
1114 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
1115 )
1116 self.assertEqual(
1117 map(lambda x: x*x, range(1,4)),
1118 [1, 4, 9]
1119 )
1120 try:
1121 from math import sqrt
1122 except ImportError:
1123 def sqrt(x):
1124 return pow(x, 0.5)
1125 self.assertEqual(
1126 map(lambda x: map(sqrt,x), [[16, 4], [81, 9]]),
1127 [[4.0, 2.0], [9.0, 3.0]]
1128 )
1129 self.assertEqual(
1130 map(lambda x, y: x+y, [1,3,2], [9,1,4]),
1131 [10, 4, 6]
1132 )
1133
1134 def plus(*v):
1135 accu = 0
1136 for i in v: accu = accu + i
1137 return accu
1138 self.assertEqual(
1139 map(plus, [1, 3, 7]),
1140 [1, 3, 7]
1141 )
1142 self.assertEqual(
1143 map(plus, [1, 3, 7], [4, 9, 2]),
1144 [1+4, 3+9, 7+2]
1145 )
1146 self.assertEqual(
1147 map(plus, [1, 3, 7], [4, 9, 2], [1, 1, 0]),
1148 [1+4+1, 3+9+1, 7+2+0]
1149 )
1150 self.assertEqual(
1151 map(None, Squares(10)),
1152 [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
1153 )
1154 self.assertEqual(
1155 map(int, Squares(10)),
1156 [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
1157 )
1158 self.assertEqual(
1159 map(None, Squares(3), Squares(2)),
1160 [(0,0), (1,1), (4,None)]
1161 )
Guido van Rossum47b9ff62006-08-24 00:41:19 +00001162 def Max(a, b):
1163 if a is None:
1164 return b
1165 if b is None:
1166 return a
1167 return max(a, b)
Walter Dörwald919497e2003-01-19 16:23:59 +00001168 self.assertEqual(
Guido van Rossum47b9ff62006-08-24 00:41:19 +00001169 map(Max, Squares(3), Squares(2)),
Walter Dörwald919497e2003-01-19 16:23:59 +00001170 [0, 1, 4]
1171 )
1172 self.assertRaises(TypeError, map)
1173 self.assertRaises(TypeError, map, lambda x: x, 42)
1174 self.assertEqual(map(None, [42]), [42])
1175 class BadSeq:
1176 def __getitem__(self, index):
1177 raise ValueError
1178 self.assertRaises(ValueError, map, lambda x: x, BadSeq())
Neal Norwitzfcf44352005-11-27 20:37:43 +00001179 def badfunc(x):
1180 raise RuntimeError
1181 self.assertRaises(RuntimeError, map, badfunc, range(5))
Walter Dörwald919497e2003-01-19 16:23:59 +00001182
1183 def test_max(self):
1184 self.assertEqual(max('123123'), '3')
1185 self.assertEqual(max(1, 2, 3), 3)
1186 self.assertEqual(max((1, 2, 3, 1, 2, 3)), 3)
1187 self.assertEqual(max([1, 2, 3, 1, 2, 3]), 3)
1188
Guido van Rossume2a383d2007-01-15 16:59:06 +00001189 self.assertEqual(max(1, 2, 3.0), 3.0)
1190 self.assertEqual(max(1, 2.0, 3), 3)
1191 self.assertEqual(max(1.0, 2, 3), 3)
Walter Dörwald919497e2003-01-19 16:23:59 +00001192
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001193 for stmt in (
1194 "max(key=int)", # no args
1195 "max(1, key=int)", # single arg not iterable
1196 "max(1, 2, keystone=int)", # wrong keyword
1197 "max(1, 2, key=int, abc=int)", # two many keywords
1198 "max(1, 2, key=1)", # keyfunc is not callable
1199 ):
Tim Peters7f061872004-12-07 21:17:46 +00001200 try:
Georg Brandl7cae87c2006-09-06 06:51:57 +00001201 exec(stmt, globals())
Tim Peters7f061872004-12-07 21:17:46 +00001202 except TypeError:
1203 pass
1204 else:
1205 self.fail(stmt)
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001206
1207 self.assertEqual(max((1,), key=neg), 1) # one elem iterable
1208 self.assertEqual(max((1,2), key=neg), 1) # two elem iterable
1209 self.assertEqual(max(1, 2, key=neg), 1) # two elems
1210
1211 data = [random.randrange(200) for i in range(100)]
1212 keys = dict((elem, random.randrange(50)) for elem in data)
1213 f = keys.__getitem__
1214 self.assertEqual(max(data, key=f),
1215 sorted(reversed(data), key=f)[-1])
1216
Walter Dörwald919497e2003-01-19 16:23:59 +00001217 def test_min(self):
1218 self.assertEqual(min('123123'), '1')
1219 self.assertEqual(min(1, 2, 3), 1)
1220 self.assertEqual(min((1, 2, 3, 1, 2, 3)), 1)
1221 self.assertEqual(min([1, 2, 3, 1, 2, 3]), 1)
1222
Guido van Rossume2a383d2007-01-15 16:59:06 +00001223 self.assertEqual(min(1, 2, 3.0), 1)
1224 self.assertEqual(min(1, 2.0, 3), 1)
1225 self.assertEqual(min(1.0, 2, 3), 1.0)
Walter Dörwald919497e2003-01-19 16:23:59 +00001226
1227 self.assertRaises(TypeError, min)
1228 self.assertRaises(TypeError, min, 42)
1229 self.assertRaises(ValueError, min, ())
1230 class BadSeq:
1231 def __getitem__(self, index):
1232 raise ValueError
1233 self.assertRaises(ValueError, min, BadSeq())
1234 class BadNumber:
1235 def __cmp__(self, other):
1236 raise ValueError
Guido van Rossum47b9ff62006-08-24 00:41:19 +00001237 self.assertRaises(TypeError, min, (42, BadNumber()))
Walter Dörwald919497e2003-01-19 16:23:59 +00001238
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001239 for stmt in (
1240 "min(key=int)", # no args
1241 "min(1, key=int)", # single arg not iterable
1242 "min(1, 2, keystone=int)", # wrong keyword
1243 "min(1, 2, key=int, abc=int)", # two many keywords
1244 "min(1, 2, key=1)", # keyfunc is not callable
1245 ):
Tim Peters7f061872004-12-07 21:17:46 +00001246 try:
Georg Brandl7cae87c2006-09-06 06:51:57 +00001247 exec(stmt, globals())
Tim Peters7f061872004-12-07 21:17:46 +00001248 except TypeError:
1249 pass
1250 else:
1251 self.fail(stmt)
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001252
1253 self.assertEqual(min((1,), key=neg), 1) # one elem iterable
1254 self.assertEqual(min((1,2), key=neg), 2) # two elem iterable
1255 self.assertEqual(min(1, 2, key=neg), 2) # two elems
1256
1257 data = [random.randrange(200) for i in range(100)]
1258 keys = dict((elem, random.randrange(50)) for elem in data)
1259 f = keys.__getitem__
1260 self.assertEqual(min(data, key=f),
1261 sorted(data, key=f)[0])
1262
Georg Brandla18af4e2007-04-21 15:47:16 +00001263 def test_next(self):
1264 it = iter(range(2))
1265 self.assertEqual(next(it), 0)
1266 self.assertEqual(next(it), 1)
1267 self.assertRaises(StopIteration, next, it)
1268 self.assertRaises(StopIteration, next, it)
1269 self.assertEquals(next(it, 42), 42)
1270
1271 class Iter(object):
1272 def __iter__(self):
1273 return self
1274 def __next__(self):
1275 raise StopIteration
1276
1277 it = iter(Iter())
1278 self.assertEquals(next(it, 42), 42)
1279 self.assertRaises(StopIteration, next, it)
1280
1281 def gen():
1282 yield 1
1283 return
1284
1285 it = gen()
1286 self.assertEquals(next(it), 1)
1287 self.assertRaises(StopIteration, next, it)
1288 self.assertEquals(next(it, 42), 42)
1289
Walter Dörwald919497e2003-01-19 16:23:59 +00001290 def test_oct(self):
Guido van Rossumcd16bf62007-06-13 18:07:49 +00001291 self.assertEqual(oct(100), '0o144')
1292 self.assertEqual(oct(100), '0o144')
1293 self.assertEqual(oct(-100), '-0o144')
1294 self.assertEqual(oct(-100), '-0o144')
Walter Dörwald919497e2003-01-19 16:23:59 +00001295 self.assertRaises(TypeError, oct, ())
1296
1297 def write_testfile(self):
Guido van Rossuma88a0332007-02-26 16:59:55 +00001298 # NB the first 4 lines are also used to test input, below
Walter Dörwald919497e2003-01-19 16:23:59 +00001299 fp = open(TESTFN, 'w')
1300 try:
1301 fp.write('1+1\n')
1302 fp.write('1+1\n')
1303 fp.write('The quick brown fox jumps over the lazy dog')
1304 fp.write('.\n')
1305 fp.write('Dear John\n')
1306 fp.write('XXX'*100)
1307 fp.write('YYY'*100)
1308 finally:
1309 fp.close()
1310
1311 def test_open(self):
1312 self.write_testfile()
1313 fp = open(TESTFN, 'r')
1314 try:
1315 self.assertEqual(fp.readline(4), '1+1\n')
1316 self.assertEqual(fp.readline(4), '1+1\n')
1317 self.assertEqual(fp.readline(), 'The quick brown fox jumps over the lazy dog.\n')
1318 self.assertEqual(fp.readline(4), 'Dear')
1319 self.assertEqual(fp.readline(100), ' John\n')
1320 self.assertEqual(fp.read(300), 'XXX'*100)
1321 self.assertEqual(fp.read(1000), 'YYY'*100)
1322 finally:
1323 fp.close()
1324 unlink(TESTFN)
1325
1326 def test_ord(self):
1327 self.assertEqual(ord(' '), 32)
1328 self.assertEqual(ord('A'), 65)
1329 self.assertEqual(ord('a'), 97)
Guido van Rossumf9e91c92007-05-08 21:05:48 +00001330 self.assertEqual(ord('\x80'), 128)
1331 self.assertEqual(ord('\xff'), 255)
1332
1333 self.assertEqual(ord(b' '), 32)
1334 self.assertEqual(ord(b'A'), 65)
1335 self.assertEqual(ord(b'a'), 97)
1336 self.assertEqual(ord(b'\x80'), 128)
1337 self.assertEqual(ord(b'\xff'), 255)
1338
Walter Dörwald1f5947b2007-05-22 16:52:54 +00001339 self.assertEqual(ord(chr(sys.maxunicode)), sys.maxunicode)
Walter Dörwald919497e2003-01-19 16:23:59 +00001340 self.assertRaises(TypeError, ord, 42)
Walter Dörwald919497e2003-01-19 16:23:59 +00001341
1342 def test_pow(self):
1343 self.assertEqual(pow(0,0), 1)
1344 self.assertEqual(pow(0,1), 0)
1345 self.assertEqual(pow(1,0), 1)
1346 self.assertEqual(pow(1,1), 1)
1347
1348 self.assertEqual(pow(2,0), 1)
1349 self.assertEqual(pow(2,10), 1024)
1350 self.assertEqual(pow(2,20), 1024*1024)
1351 self.assertEqual(pow(2,30), 1024*1024*1024)
1352
1353 self.assertEqual(pow(-2,0), 1)
1354 self.assertEqual(pow(-2,1), -2)
1355 self.assertEqual(pow(-2,2), 4)
1356 self.assertEqual(pow(-2,3), -8)
1357
Guido van Rossume2a383d2007-01-15 16:59:06 +00001358 self.assertEqual(pow(0,0), 1)
1359 self.assertEqual(pow(0,1), 0)
1360 self.assertEqual(pow(1,0), 1)
1361 self.assertEqual(pow(1,1), 1)
Walter Dörwald919497e2003-01-19 16:23:59 +00001362
Guido van Rossume2a383d2007-01-15 16:59:06 +00001363 self.assertEqual(pow(2,0), 1)
1364 self.assertEqual(pow(2,10), 1024)
1365 self.assertEqual(pow(2,20), 1024*1024)
1366 self.assertEqual(pow(2,30), 1024*1024*1024)
Walter Dörwald919497e2003-01-19 16:23:59 +00001367
Guido van Rossume2a383d2007-01-15 16:59:06 +00001368 self.assertEqual(pow(-2,0), 1)
1369 self.assertEqual(pow(-2,1), -2)
1370 self.assertEqual(pow(-2,2), 4)
1371 self.assertEqual(pow(-2,3), -8)
Walter Dörwald919497e2003-01-19 16:23:59 +00001372
1373 self.assertAlmostEqual(pow(0.,0), 1.)
1374 self.assertAlmostEqual(pow(0.,1), 0.)
1375 self.assertAlmostEqual(pow(1.,0), 1.)
1376 self.assertAlmostEqual(pow(1.,1), 1.)
1377
1378 self.assertAlmostEqual(pow(2.,0), 1.)
1379 self.assertAlmostEqual(pow(2.,10), 1024.)
1380 self.assertAlmostEqual(pow(2.,20), 1024.*1024.)
1381 self.assertAlmostEqual(pow(2.,30), 1024.*1024.*1024.)
1382
1383 self.assertAlmostEqual(pow(-2.,0), 1.)
1384 self.assertAlmostEqual(pow(-2.,1), -2.)
1385 self.assertAlmostEqual(pow(-2.,2), 4.)
1386 self.assertAlmostEqual(pow(-2.,3), -8.)
1387
Guido van Rossume2a383d2007-01-15 16:59:06 +00001388 for x in 2, 2, 2.0:
1389 for y in 10, 10, 10.0:
1390 for z in 1000, 1000, 1000.0:
Walter Dörwald919497e2003-01-19 16:23:59 +00001391 if isinstance(x, float) or \
1392 isinstance(y, float) or \
1393 isinstance(z, float):
1394 self.assertRaises(TypeError, pow, x, y, z)
1395 else:
1396 self.assertAlmostEqual(pow(x, y, z), 24.0)
1397
1398 self.assertRaises(TypeError, pow, -1, -2, 3)
1399 self.assertRaises(ValueError, pow, 1, 2, 0)
Guido van Rossume2a383d2007-01-15 16:59:06 +00001400 self.assertRaises(TypeError, pow, -1, -2, 3)
1401 self.assertRaises(ValueError, pow, 1, 2, 0)
Walter Dörwald919497e2003-01-19 16:23:59 +00001402 self.assertRaises(ValueError, pow, -342.43, 0.234)
1403
1404 self.assertRaises(TypeError, pow)
1405
1406 def test_range(self):
Guido van Rossum805365e2007-05-07 22:24:25 +00001407 self.assertEqual(list(range(3)), [0, 1, 2])
1408 self.assertEqual(list(range(1, 5)), [1, 2, 3, 4])
1409 self.assertEqual(list(range(0)), [])
1410 self.assertEqual(list(range(-3)), [])
1411 self.assertEqual(list(range(1, 10, 3)), [1, 4, 7])
1412 #self.assertEqual(list(range(5, -5, -3)), [5, 2, -1, -4])
Walter Dörwald919497e2003-01-19 16:23:59 +00001413
Guido van Rossum805365e2007-05-07 22:24:25 +00001414 """ XXX(nnorwitz):
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001415 # Now test range() with longs
Guido van Rossum805365e2007-05-07 22:24:25 +00001416 self.assertEqual(list(range(-2**100)), [])
1417 self.assertEqual(list(range(0, -2**100)), [])
1418 self.assertEqual(list(range(0, 2**100, -1)), [])
1419 self.assertEqual(list(range(0, 2**100, -1)), [])
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001420
Guido van Rossume2a383d2007-01-15 16:59:06 +00001421 a = int(10 * sys.maxint)
1422 b = int(100 * sys.maxint)
1423 c = int(50 * sys.maxint)
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001424
Guido van Rossum805365e2007-05-07 22:24:25 +00001425 self.assertEqual(list(range(a, a+2)), [a, a+1])
1426 self.assertEqual(list(range(a+2, a, -1)), [a+2, a+1])
1427 self.assertEqual(list(range(a+4, a, -2)), [a+4, a+2])
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001428
Guido van Rossum805365e2007-05-07 22:24:25 +00001429 seq = list(range(a, b, c))
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001430 self.assert_(a in seq)
1431 self.assert_(b not in seq)
1432 self.assertEqual(len(seq), 2)
1433
Guido van Rossum805365e2007-05-07 22:24:25 +00001434 seq = list(range(b, a, -c))
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001435 self.assert_(b in seq)
1436 self.assert_(a not in seq)
1437 self.assertEqual(len(seq), 2)
1438
Guido van Rossum805365e2007-05-07 22:24:25 +00001439 seq = list(range(-a, -b, -c))
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001440 self.assert_(-a in seq)
1441 self.assert_(-b not in seq)
1442 self.assertEqual(len(seq), 2)
1443
Walter Dörwald919497e2003-01-19 16:23:59 +00001444 self.assertRaises(TypeError, range)
1445 self.assertRaises(TypeError, range, 1, 2, 3, 4)
1446 self.assertRaises(ValueError, range, 1, 2, 0)
Guido van Rossume2a383d2007-01-15 16:59:06 +00001447 self.assertRaises(ValueError, range, a, a + 1, int(0))
Neal Norwitzfcf44352005-11-27 20:37:43 +00001448
1449 class badzero(int):
Guido van Rossum47b9ff62006-08-24 00:41:19 +00001450 def __eq__(self, other):
Neal Norwitzfcf44352005-11-27 20:37:43 +00001451 raise RuntimeError
Guido van Rossum47b9ff62006-08-24 00:41:19 +00001452 __ne__ = __lt__ = __gt__ = __le__ = __ge__ = __eq__
1453
1454 # XXX This won't (but should!) raise RuntimeError if a is an int...
Neal Norwitzfcf44352005-11-27 20:37:43 +00001455 self.assertRaises(RuntimeError, range, a, a + 1, badzero(1))
Guido van Rossum805365e2007-05-07 22:24:25 +00001456 """
Walter Dörwald919497e2003-01-19 16:23:59 +00001457
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001458 # Reject floats when it would require PyLongs to represent.
1459 # (smaller floats still accepted, but deprecated)
Tim Peters299b3df2003-04-15 14:40:03 +00001460 self.assertRaises(TypeError, range, 1e100, 1e101, 1e101)
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001461
Walter Dörwald357981e2003-04-15 18:59:28 +00001462 self.assertRaises(TypeError, range, 0, "spam")
1463 self.assertRaises(TypeError, range, 0, 42, "spam")
1464
Guido van Rossum805365e2007-05-07 22:24:25 +00001465 #NEAL self.assertRaises(OverflowError, range, -sys.maxint, sys.maxint)
1466 #NEAL self.assertRaises(OverflowError, range, 0, 2*sys.maxint)
1467
1468 self.assertRaises(OverflowError, len, range(0, sys.maxint**10))
Walter Dörwald357981e2003-04-15 18:59:28 +00001469
Guido van Rossuma88a0332007-02-26 16:59:55 +00001470 def test_input(self):
1471 self.write_testfile()
1472 fp = open(TESTFN, 'r')
1473 savestdin = sys.stdin
1474 savestdout = sys.stdout # Eats the echo
1475 try:
1476 sys.stdin = fp
1477 sys.stdout = BitBucket()
1478 self.assertEqual(input(), "1+1")
1479 self.assertEqual(input('testing\n'), "1+1")
1480 self.assertEqual(input(), 'The quick brown fox jumps over the lazy dog.')
1481 self.assertEqual(input('testing\n'), 'Dear John')
1482
1483 # SF 1535165: don't segfault on closed stdin
1484 # sys.stdout must be a regular file for triggering
1485 sys.stdout = savestdout
1486 sys.stdin.close()
1487 self.assertRaises(ValueError, input)
1488
1489 sys.stdout = BitBucket()
1490 sys.stdin = cStringIO.StringIO("NULL\0")
1491 self.assertRaises(TypeError, input, 42, 42)
1492 sys.stdin = cStringIO.StringIO(" 'whitespace'")
1493 self.assertEqual(input(), " 'whitespace'")
1494 sys.stdin = cStringIO.StringIO()
1495 self.assertRaises(EOFError, input)
1496
1497 del sys.stdout
1498 self.assertRaises(RuntimeError, input, 'prompt')
1499 del sys.stdin
1500 self.assertRaises(RuntimeError, input, 'prompt')
1501 finally:
1502 sys.stdin = savestdin
1503 sys.stdout = savestdout
1504 fp.close()
1505 unlink(TESTFN)
1506
Walter Dörwald919497e2003-01-19 16:23:59 +00001507 def test_repr(self):
1508 self.assertEqual(repr(''), '\'\'')
1509 self.assertEqual(repr(0), '0')
Guido van Rossume2a383d2007-01-15 16:59:06 +00001510 self.assertEqual(repr(0), '0')
Walter Dörwald919497e2003-01-19 16:23:59 +00001511 self.assertEqual(repr(()), '()')
1512 self.assertEqual(repr([]), '[]')
1513 self.assertEqual(repr({}), '{}')
1514 a = []
1515 a.append(a)
1516 self.assertEqual(repr(a), '[[...]]')
1517 a = {}
1518 a[0] = a
1519 self.assertEqual(repr(a), '{0: {...}}')
1520
1521 def test_round(self):
1522 self.assertEqual(round(0.0), 0.0)
1523 self.assertEqual(round(1.0), 1.0)
1524 self.assertEqual(round(10.0), 10.0)
1525 self.assertEqual(round(1000000000.0), 1000000000.0)
1526 self.assertEqual(round(1e20), 1e20)
1527
1528 self.assertEqual(round(-1.0), -1.0)
1529 self.assertEqual(round(-10.0), -10.0)
1530 self.assertEqual(round(-1000000000.0), -1000000000.0)
1531 self.assertEqual(round(-1e20), -1e20)
1532
1533 self.assertEqual(round(0.1), 0.0)
1534 self.assertEqual(round(1.1), 1.0)
1535 self.assertEqual(round(10.1), 10.0)
1536 self.assertEqual(round(1000000000.1), 1000000000.0)
1537
1538 self.assertEqual(round(-1.1), -1.0)
1539 self.assertEqual(round(-10.1), -10.0)
1540 self.assertEqual(round(-1000000000.1), -1000000000.0)
1541
1542 self.assertEqual(round(0.9), 1.0)
1543 self.assertEqual(round(9.9), 10.0)
1544 self.assertEqual(round(999999999.9), 1000000000.0)
1545
1546 self.assertEqual(round(-0.9), -1.0)
1547 self.assertEqual(round(-9.9), -10.0)
1548 self.assertEqual(round(-999999999.9), -1000000000.0)
1549
1550 self.assertEqual(round(-8.0, -1), -10.0)
1551
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001552 # test new kwargs
1553 self.assertEqual(round(number=-8.0, ndigits=-1), -10.0)
1554
Walter Dörwald919497e2003-01-19 16:23:59 +00001555 self.assertRaises(TypeError, round)
1556
1557 def test_setattr(self):
Tim Petersf2715e02003-02-19 02:35:07 +00001558 setattr(sys, 'spam', 1)
1559 self.assertEqual(sys.spam, 1)
1560 self.assertRaises(TypeError, setattr, sys, 1, 'spam')
1561 self.assertRaises(TypeError, setattr)
Walter Dörwald919497e2003-01-19 16:23:59 +00001562
1563 def test_str(self):
1564 self.assertEqual(str(''), '')
1565 self.assertEqual(str(0), '0')
Guido van Rossume2a383d2007-01-15 16:59:06 +00001566 self.assertEqual(str(0), '0')
Walter Dörwald919497e2003-01-19 16:23:59 +00001567 self.assertEqual(str(()), '()')
1568 self.assertEqual(str([]), '[]')
1569 self.assertEqual(str({}), '{}')
1570 a = []
1571 a.append(a)
1572 self.assertEqual(str(a), '[[...]]')
1573 a = {}
1574 a[0] = a
1575 self.assertEqual(str(a), '{0: {...}}')
1576
Alex Martellia70b1912003-04-22 08:12:33 +00001577 def test_sum(self):
1578 self.assertEqual(sum([]), 0)
Guido van Rossum805365e2007-05-07 22:24:25 +00001579 self.assertEqual(sum(list(range(2,8))), 27)
1580 self.assertEqual(sum(iter(list(range(2,8)))), 27)
Alex Martellia70b1912003-04-22 08:12:33 +00001581 self.assertEqual(sum(Squares(10)), 285)
1582 self.assertEqual(sum(iter(Squares(10))), 285)
1583 self.assertEqual(sum([[1], [2], [3]], []), [1, 2, 3])
1584
1585 self.assertRaises(TypeError, sum)
1586 self.assertRaises(TypeError, sum, 42)
1587 self.assertRaises(TypeError, sum, ['a', 'b', 'c'])
1588 self.assertRaises(TypeError, sum, ['a', 'b', 'c'], '')
1589 self.assertRaises(TypeError, sum, [[1], [2], [3]])
1590 self.assertRaises(TypeError, sum, [{2:3}])
1591 self.assertRaises(TypeError, sum, [{2:3}]*2, {2:3})
1592
1593 class BadSeq:
1594 def __getitem__(self, index):
1595 raise ValueError
1596 self.assertRaises(ValueError, sum, BadSeq())
1597
Walter Dörwald919497e2003-01-19 16:23:59 +00001598 def test_tuple(self):
1599 self.assertEqual(tuple(()), ())
1600 t0_3 = (0, 1, 2, 3)
1601 t0_3_bis = tuple(t0_3)
1602 self.assert_(t0_3 is t0_3_bis)
1603 self.assertEqual(tuple([]), ())
1604 self.assertEqual(tuple([0, 1, 2, 3]), (0, 1, 2, 3))
1605 self.assertEqual(tuple(''), ())
1606 self.assertEqual(tuple('spam'), ('s', 'p', 'a', 'm'))
1607
1608 def test_type(self):
1609 self.assertEqual(type(''), type('123'))
1610 self.assertNotEqual(type(''), type(()))
1611
Guido van Rossumfee7b932005-01-16 00:21:28 +00001612 # We don't want self in vars(), so these are static methods
1613
1614 @staticmethod
Walter Dörwald919497e2003-01-19 16:23:59 +00001615 def get_vars_f0():
1616 return vars()
Walter Dörwald919497e2003-01-19 16:23:59 +00001617
Guido van Rossumfee7b932005-01-16 00:21:28 +00001618 @staticmethod
Walter Dörwald919497e2003-01-19 16:23:59 +00001619 def get_vars_f2():
1620 BuiltinTest.get_vars_f0()
1621 a = 1
1622 b = 2
1623 return vars()
Walter Dörwald919497e2003-01-19 16:23:59 +00001624
1625 def test_vars(self):
Raymond Hettingera690a992003-11-16 16:17:49 +00001626 self.assertEqual(set(vars()), set(dir()))
Walter Dörwald919497e2003-01-19 16:23:59 +00001627 import sys
Raymond Hettingera690a992003-11-16 16:17:49 +00001628 self.assertEqual(set(vars(sys)), set(dir(sys)))
Walter Dörwald919497e2003-01-19 16:23:59 +00001629 self.assertEqual(self.get_vars_f0(), {})
1630 self.assertEqual(self.get_vars_f2(), {'a': 1, 'b': 2})
1631 self.assertRaises(TypeError, vars, 42, 42)
1632 self.assertRaises(TypeError, vars, 42)
1633
1634 def test_zip(self):
1635 a = (1, 2, 3)
1636 b = (4, 5, 6)
1637 t = [(1, 4), (2, 5), (3, 6)]
Guido van Rossum801f0d72006-08-24 19:48:10 +00001638 self.assertEqual(list(zip(a, b)), t)
Walter Dörwald919497e2003-01-19 16:23:59 +00001639 b = [4, 5, 6]
Guido van Rossum801f0d72006-08-24 19:48:10 +00001640 self.assertEqual(list(zip(a, b)), t)
Walter Dörwald919497e2003-01-19 16:23:59 +00001641 b = (4, 5, 6, 7)
Guido van Rossum801f0d72006-08-24 19:48:10 +00001642 self.assertEqual(list(zip(a, b)), t)
Walter Dörwald919497e2003-01-19 16:23:59 +00001643 class I:
1644 def __getitem__(self, i):
1645 if i < 0 or i > 2: raise IndexError
1646 return i + 4
Guido van Rossum801f0d72006-08-24 19:48:10 +00001647 self.assertEqual(list(zip(a, I())), t)
1648 self.assertEqual(list(zip()), [])
1649 self.assertEqual(list(zip(*[])), [])
Walter Dörwald919497e2003-01-19 16:23:59 +00001650 self.assertRaises(TypeError, zip, None)
1651 class G:
1652 pass
1653 self.assertRaises(TypeError, zip, a, G())
1654
1655 # Make sure zip doesn't try to allocate a billion elements for the
1656 # result list when one of its arguments doesn't say how long it is.
1657 # A MemoryError is the most likely failure mode.
1658 class SequenceWithoutALength:
1659 def __getitem__(self, i):
1660 if i == 5:
1661 raise IndexError
1662 else:
1663 return i
1664 self.assertEqual(
Guido van Rossum805365e2007-05-07 22:24:25 +00001665 list(zip(SequenceWithoutALength(), range(2**30))),
Walter Dörwald919497e2003-01-19 16:23:59 +00001666 list(enumerate(range(5)))
1667 )
1668
1669 class BadSeq:
1670 def __getitem__(self, i):
1671 if i == 5:
1672 raise ValueError
1673 else:
1674 return i
Guido van Rossum801f0d72006-08-24 19:48:10 +00001675 self.assertRaises(ValueError, list, zip(BadSeq(), BadSeq()))
Walter Dörwald919497e2003-01-19 16:23:59 +00001676
Raymond Hettinger64958a12003-12-17 20:43:33 +00001677class TestSorted(unittest.TestCase):
1678
1679 def test_basic(self):
Guido van Rossum805365e2007-05-07 22:24:25 +00001680 data = list(range(100))
Raymond Hettinger64958a12003-12-17 20:43:33 +00001681 copy = data[:]
1682 random.shuffle(copy)
1683 self.assertEqual(data, sorted(copy))
1684 self.assertNotEqual(data, copy)
1685
1686 data.reverse()
1687 random.shuffle(copy)
Guido van Rossum47b9ff62006-08-24 00:41:19 +00001688 self.assertEqual(data, sorted(copy, cmp=lambda x, y: (x < y) - (x > y)))
Raymond Hettinger64958a12003-12-17 20:43:33 +00001689 self.assertNotEqual(data, copy)
1690 random.shuffle(copy)
1691 self.assertEqual(data, sorted(copy, key=lambda x: -x))
1692 self.assertNotEqual(data, copy)
1693 random.shuffle(copy)
1694 self.assertEqual(data, sorted(copy, reverse=1))
1695 self.assertNotEqual(data, copy)
1696
1697 def test_inputtypes(self):
1698 s = 'abracadabra'
Walter Dörwald1f5947b2007-05-22 16:52:54 +00001699 types = [list, tuple, str]
Walter Dörwald4e41a4b2005-08-03 17:09:04 +00001700 for T in types:
Raymond Hettinger64958a12003-12-17 20:43:33 +00001701 self.assertEqual(sorted(s), sorted(T(s)))
1702
Walter Dörwald1f5947b2007-05-22 16:52:54 +00001703 s = ''.join(set(s)) # unique letters only
1704 types = [str, set, frozenset, list, tuple, dict.fromkeys]
Walter Dörwald4e41a4b2005-08-03 17:09:04 +00001705 for T in types:
Raymond Hettinger64958a12003-12-17 20:43:33 +00001706 self.assertEqual(sorted(s), sorted(T(s)))
1707
1708 def test_baddecorator(self):
1709 data = 'The quick Brown fox Jumped over The lazy Dog'.split()
1710 self.assertRaises(TypeError, sorted, data, None, lambda x,y: 0)
1711
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001712def test_main(verbose=None):
1713 test_classes = (BuiltinTest, TestSorted)
1714
1715 run_unittest(*test_classes)
1716
1717 # verify reference counting
1718 if verbose and hasattr(sys, "gettotalrefcount"):
1719 import gc
1720 counts = [None] * 5
Guido van Rossum805365e2007-05-07 22:24:25 +00001721 for i in range(len(counts)):
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001722 run_unittest(*test_classes)
1723 gc.collect()
1724 counts[i] = sys.gettotalrefcount()
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001725 print(counts)
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001726
Walter Dörwald919497e2003-01-19 16:23:59 +00001727
1728if __name__ == "__main__":
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001729 test_main(verbose=True)