blob: d8e604158c7bcab9878bf8178bf2a6c8e8f919ff [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
Georg Brandlde9b6242006-04-30 11:13:56 +00004from test.test_support import fcmp, have_unicode, TESTFN, unlink, \
5 run_unittest, run_with_locale
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00006from operator import neg
Guido van Rossum3bead091992-01-27 17:00:37 +00007
Mark Dickinsond058cd22008-02-10 21:29:51 +00008import sys, warnings, cStringIO, random, fractions, 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
Georg Brandl23016272009-10-27 22:57:25 +000016# and to create unique strings to intern in test_intern()
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +000017numruns = 0
18
Walter Dörwald919497e2003-01-19 16:23:59 +000019class Squares:
Guido van Rossum3bead091992-01-27 17:00:37 +000020
Walter Dörwald919497e2003-01-19 16:23:59 +000021 def __init__(self, max):
22 self.max = max
23 self.sofar = []
24
25 def __len__(self): return len(self.sofar)
26
27 def __getitem__(self, i):
28 if not 0 <= i < self.max: raise IndexError
29 n = len(self.sofar)
30 while n <= i:
31 self.sofar.append(n*n)
32 n += 1
33 return self.sofar[i]
34
35class StrSquares:
36
37 def __init__(self, max):
38 self.max = max
39 self.sofar = []
40
41 def __len__(self):
42 return len(self.sofar)
43
44 def __getitem__(self, i):
45 if not 0 <= i < self.max:
46 raise IndexError
47 n = len(self.sofar)
48 while n <= i:
49 self.sofar.append(str(n*n))
50 n += 1
51 return self.sofar[i]
52
53class BitBucket:
54 def write(self, line):
55 pass
56
Walter Dörwald919497e2003-01-19 16:23:59 +000057
Raymond Hettinger96229b12005-03-11 06:49:40 +000058class TestFailingBool:
59 def __nonzero__(self):
60 raise RuntimeError
61
62class TestFailingIter:
63 def __iter__(self):
64 raise RuntimeError
65
Walter Dörwald919497e2003-01-19 16:23:59 +000066class BuiltinTest(unittest.TestCase):
67
68 def test_import(self):
69 __import__('sys')
70 __import__('time')
71 __import__('string')
Georg Brandl5240d742007-03-13 20:46:32 +000072 __import__(name='sys')
73 __import__(name='time', level=0)
Walter Dörwald919497e2003-01-19 16:23:59 +000074 self.assertRaises(ImportError, __import__, 'spamspam')
75 self.assertRaises(TypeError, __import__, 1, 2, 3, 4)
Thomas Wouters8ddab272006-04-04 16:17:02 +000076 self.assertRaises(ValueError, __import__, '')
Georg Brandl5240d742007-03-13 20:46:32 +000077 self.assertRaises(TypeError, __import__, 'sys', name='sys')
Walter Dörwald919497e2003-01-19 16:23:59 +000078
79 def test_abs(self):
80 # int
81 self.assertEqual(abs(0), 0)
82 self.assertEqual(abs(1234), 1234)
83 self.assertEqual(abs(-1234), 1234)
Martin v. Löwis820d6ac2006-10-04 05:47:34 +000084 self.assertTrue(abs(-sys.maxint-1) > 0)
Walter Dörwald919497e2003-01-19 16:23:59 +000085 # float
86 self.assertEqual(abs(0.0), 0.0)
87 self.assertEqual(abs(3.14), 3.14)
88 self.assertEqual(abs(-3.14), 3.14)
89 # long
90 self.assertEqual(abs(0L), 0L)
91 self.assertEqual(abs(1234L), 1234L)
92 self.assertEqual(abs(-1234L), 1234L)
93 # str
94 self.assertRaises(TypeError, abs, 'a')
95
Raymond Hettinger96229b12005-03-11 06:49:40 +000096 def test_all(self):
97 self.assertEqual(all([2, 4, 6]), True)
98 self.assertEqual(all([2, None, 6]), False)
99 self.assertRaises(RuntimeError, all, [2, TestFailingBool(), 6])
100 self.assertRaises(RuntimeError, all, TestFailingIter())
101 self.assertRaises(TypeError, all, 10) # Non-iterable
102 self.assertRaises(TypeError, all) # No args
103 self.assertRaises(TypeError, all, [2, 4, 6], []) # Too many args
104 self.assertEqual(all([]), True) # Empty iterator
105 S = [50, 60]
106 self.assertEqual(all(x > 42 for x in S), True)
107 S = [50, 40, 60]
108 self.assertEqual(all(x > 42 for x in S), False)
109
110 def test_any(self):
111 self.assertEqual(any([None, None, None]), False)
112 self.assertEqual(any([None, 4, None]), True)
113 self.assertRaises(RuntimeError, any, [None, TestFailingBool(), 6])
114 self.assertRaises(RuntimeError, all, TestFailingIter())
115 self.assertRaises(TypeError, any, 10) # Non-iterable
116 self.assertRaises(TypeError, any) # No args
117 self.assertRaises(TypeError, any, [2, 4, 6], []) # Too many args
118 self.assertEqual(any([]), False) # Empty iterator
119 S = [40, 60, 30]
120 self.assertEqual(any(x > 42 for x in S), True)
121 S = [10, 20, 30]
122 self.assertEqual(any(x > 42 for x in S), False)
123
Armin Rigo7ccbca92006-10-04 12:17:45 +0000124 def test_neg(self):
125 x = -sys.maxint-1
126 self.assert_(isinstance(x, int))
127 self.assertEqual(-x, sys.maxint+1)
128
Walter Dörwald919497e2003-01-19 16:23:59 +0000129 def test_apply(self):
130 def f0(*args):
131 self.assertEqual(args, ())
132 def f1(a1):
133 self.assertEqual(a1, 1)
134 def f2(a1, a2):
135 self.assertEqual(a1, 1)
136 self.assertEqual(a2, 2)
137 def f3(a1, a2, a3):
138 self.assertEqual(a1, 1)
139 self.assertEqual(a2, 2)
140 self.assertEqual(a3, 3)
141 apply(f0, ())
142 apply(f1, (1,))
143 apply(f2, (1, 2))
144 apply(f3, (1, 2, 3))
145
146 # A PyCFunction that takes only positional parameters should allow an
147 # empty keyword dictionary to pass without a complaint, but raise a
148 # TypeError if the dictionary is non-empty.
149 apply(id, (1,), {})
150 self.assertRaises(TypeError, apply, id, (1,), {"foo": 1})
151 self.assertRaises(TypeError, apply)
152 self.assertRaises(TypeError, apply, id, 42)
153 self.assertRaises(TypeError, apply, id, (42,), 42)
154
155 def test_callable(self):
156 self.assert_(callable(len))
157 def f(): pass
158 self.assert_(callable(f))
159 class C:
160 def meth(self): pass
161 self.assert_(callable(C))
162 x = C()
163 self.assert_(callable(x.meth))
164 self.assert_(not callable(x))
165 class D(C):
166 def __call__(self): pass
167 y = D()
168 self.assert_(callable(y))
169 y()
170
171 def test_chr(self):
172 self.assertEqual(chr(32), ' ')
173 self.assertEqual(chr(65), 'A')
174 self.assertEqual(chr(97), 'a')
175 self.assertEqual(chr(0xff), '\xff')
176 self.assertRaises(ValueError, chr, 256)
177 self.assertRaises(TypeError, chr)
178
179 def test_cmp(self):
180 self.assertEqual(cmp(-1, 1), -1)
181 self.assertEqual(cmp(1, -1), 1)
182 self.assertEqual(cmp(1, 1), 0)
Armin Rigo2b3eb402003-10-28 12:05:48 +0000183 # verify that circular objects are not handled
Walter Dörwald919497e2003-01-19 16:23:59 +0000184 a = []; a.append(a)
185 b = []; b.append(b)
186 from UserList import UserList
187 c = UserList(); c.append(c)
Armin Rigo2b3eb402003-10-28 12:05:48 +0000188 self.assertRaises(RuntimeError, cmp, a, b)
189 self.assertRaises(RuntimeError, cmp, b, c)
190 self.assertRaises(RuntimeError, cmp, c, a)
191 self.assertRaises(RuntimeError, cmp, a, c)
192 # okay, now break the cycles
Walter Dörwald919497e2003-01-19 16:23:59 +0000193 a.pop(); b.pop(); c.pop()
194 self.assertRaises(TypeError, cmp)
195
196 def test_coerce(self):
197 self.assert_(not fcmp(coerce(1, 1.1), (1.0, 1.1)))
198 self.assertEqual(coerce(1, 1L), (1L, 1L))
199 self.assert_(not fcmp(coerce(1L, 1.1), (1.0, 1.1)))
200 self.assertRaises(TypeError, coerce)
201 class BadNumber:
202 def __coerce__(self, other):
203 raise ValueError
204 self.assertRaises(ValueError, coerce, 42, BadNumber())
Neal Norwitzabcb0c02003-01-28 19:21:24 +0000205 self.assertRaises(OverflowError, coerce, 0.5, int("12345" * 1000))
Walter Dörwald919497e2003-01-19 16:23:59 +0000206
207 def test_compile(self):
208 compile('print 1\n', '', 'exec')
Just van Rossumf032f862003-02-09 20:38:48 +0000209 bom = '\xef\xbb\xbf'
210 compile(bom + 'print 1\n', '', 'exec')
Georg Brandl5240d742007-03-13 20:46:32 +0000211 compile(source='pass', filename='?', mode='exec')
212 compile(dont_inherit=0, filename='tmp', source='0', mode='eval')
213 compile('pass', '?', dont_inherit=1, mode='exec')
Walter Dörwald919497e2003-01-19 16:23:59 +0000214 self.assertRaises(TypeError, compile)
215 self.assertRaises(ValueError, compile, 'print 42\n', '<string>', 'badmode')
216 self.assertRaises(ValueError, compile, 'print 42\n', '<string>', 'single', 0xff)
Neal Norwitzfcf44352005-11-27 20:37:43 +0000217 self.assertRaises(TypeError, compile, chr(0), 'f', 'exec')
Georg Brandl5240d742007-03-13 20:46:32 +0000218 self.assertRaises(TypeError, compile, 'pass', '?', 'exec',
219 mode='eval', source='0', filename='tmp')
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000220 if have_unicode:
221 compile(unicode('print u"\xc3\xa5"\n', 'utf8'), '', 'exec')
Neal Norwitzfcf44352005-11-27 20:37:43 +0000222 self.assertRaises(TypeError, compile, unichr(0), 'f', 'exec')
223 self.assertRaises(ValueError, compile, unicode('a = 1'), 'f', 'bad')
Walter Dörwald919497e2003-01-19 16:23:59 +0000224
Georg Brandl5240d742007-03-13 20:46:32 +0000225
Walter Dörwald919497e2003-01-19 16:23:59 +0000226 def test_delattr(self):
227 import sys
228 sys.spam = 1
229 delattr(sys, 'spam')
230 self.assertRaises(TypeError, delattr)
231
232 def test_dir(self):
Georg Brandl871f1bc2007-03-12 13:17:36 +0000233 # dir(wrong number of arguments)
Walter Dörwald919497e2003-01-19 16:23:59 +0000234 self.assertRaises(TypeError, dir, 42, 42)
235
Georg Brandl871f1bc2007-03-12 13:17:36 +0000236 # dir() - local scope
237 local_var = 1
238 self.assert_('local_var' in dir())
239
240 # dir(module)
241 import sys
242 self.assert_('exit' in dir(sys))
243
244 # dir(module_with_invalid__dict__)
245 import types
246 class Foo(types.ModuleType):
247 __dict__ = 8
248 f = Foo("foo")
249 self.assertRaises(TypeError, dir, f)
250
251 # dir(type)
252 self.assert_("strip" in dir(str))
253 self.assert_("__mro__" not in dir(str))
254
255 # dir(obj)
256 class Foo(object):
257 def __init__(self):
258 self.x = 7
259 self.y = 8
260 self.z = 9
261 f = Foo()
262 self.assert_("y" in dir(f))
263
264 # dir(obj_no__dict__)
265 class Foo(object):
266 __slots__ = []
267 f = Foo()
268 self.assert_("__repr__" in dir(f))
269
270 # dir(obj_no__class__with__dict__)
271 # (an ugly trick to cause getattr(f, "__class__") to fail)
272 class Foo(object):
273 __slots__ = ["__class__", "__dict__"]
274 def __init__(self):
275 self.bar = "wow"
276 f = Foo()
277 self.assert_("__repr__" not in dir(f))
278 self.assert_("bar" in dir(f))
279
280 # dir(obj_using __dir__)
281 class Foo(object):
282 def __dir__(self):
283 return ["kan", "ga", "roo"]
284 f = Foo()
285 self.assert_(dir(f) == ["ga", "kan", "roo"])
286
287 # dir(obj__dir__not_list)
288 class Foo(object):
289 def __dir__(self):
290 return 7
291 f = Foo()
292 self.assertRaises(TypeError, dir, f)
293
Walter Dörwald919497e2003-01-19 16:23:59 +0000294 def test_divmod(self):
295 self.assertEqual(divmod(12, 7), (1, 5))
296 self.assertEqual(divmod(-12, 7), (-2, 2))
297 self.assertEqual(divmod(12, -7), (-2, -2))
298 self.assertEqual(divmod(-12, -7), (1, -5))
299
300 self.assertEqual(divmod(12L, 7L), (1L, 5L))
301 self.assertEqual(divmod(-12L, 7L), (-2L, 2L))
302 self.assertEqual(divmod(12L, -7L), (-2L, -2L))
303 self.assertEqual(divmod(-12L, -7L), (1L, -5L))
304
305 self.assertEqual(divmod(12, 7L), (1, 5L))
306 self.assertEqual(divmod(-12, 7L), (-2, 2L))
307 self.assertEqual(divmod(12L, -7), (-2L, -2))
308 self.assertEqual(divmod(-12L, -7), (1L, -5))
309
Raymond Hettinger5ea7e312004-09-30 07:47:20 +0000310 self.assertEqual(divmod(-sys.maxint-1, -1),
311 (sys.maxint+1, 0))
312
Walter Dörwald919497e2003-01-19 16:23:59 +0000313 self.assert_(not fcmp(divmod(3.25, 1.0), (3.0, 0.25)))
314 self.assert_(not fcmp(divmod(-3.25, 1.0), (-4.0, 0.75)))
315 self.assert_(not fcmp(divmod(3.25, -1.0), (-4.0, -0.75)))
316 self.assert_(not fcmp(divmod(-3.25, -1.0), (3.0, -0.25)))
317
318 self.assertRaises(TypeError, divmod)
319
320 def test_eval(self):
321 self.assertEqual(eval('1+1'), 2)
322 self.assertEqual(eval(' 1+1\n'), 2)
323 globals = {'a': 1, 'b': 2}
324 locals = {'b': 200, 'c': 300}
325 self.assertEqual(eval('a', globals) , 1)
326 self.assertEqual(eval('a', globals, locals), 1)
327 self.assertEqual(eval('b', globals, locals), 200)
328 self.assertEqual(eval('c', globals, locals), 300)
329 if have_unicode:
330 self.assertEqual(eval(unicode('1+1')), 2)
331 self.assertEqual(eval(unicode(' 1+1\n')), 2)
332 globals = {'a': 1, 'b': 2}
333 locals = {'b': 200, 'c': 300}
334 if have_unicode:
335 self.assertEqual(eval(unicode('a'), globals), 1)
336 self.assertEqual(eval(unicode('a'), globals, locals), 1)
337 self.assertEqual(eval(unicode('b'), globals, locals), 200)
338 self.assertEqual(eval(unicode('c'), globals, locals), 300)
Just van Rossumf032f862003-02-09 20:38:48 +0000339 bom = '\xef\xbb\xbf'
340 self.assertEqual(eval(bom + 'a', globals, locals), 1)
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000341 self.assertEqual(eval(unicode('u"\xc3\xa5"', 'utf8'), globals),
342 unicode('\xc3\xa5', 'utf8'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000343 self.assertRaises(TypeError, eval)
344 self.assertRaises(TypeError, eval, ())
345
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000346 def test_general_eval(self):
347 # Tests that general mappings can be used for the locals argument
348
349 class M:
350 "Test mapping interface versus possible calls from eval()."
351 def __getitem__(self, key):
352 if key == 'a':
353 return 12
354 raise KeyError
355 def keys(self):
356 return list('xyz')
357
358 m = M()
359 g = globals()
360 self.assertEqual(eval('a', g, m), 12)
361 self.assertRaises(NameError, eval, 'b', g, m)
362 self.assertEqual(eval('dir()', g, m), list('xyz'))
363 self.assertEqual(eval('globals()', g, m), g)
364 self.assertEqual(eval('locals()', g, m), m)
Raymond Hettinger513ffe82004-07-06 13:44:41 +0000365 self.assertRaises(TypeError, eval, 'a', m)
Raymond Hettinger66bd2332004-08-02 08:30:07 +0000366 class A:
367 "Non-mapping"
368 pass
369 m = A()
370 self.assertRaises(TypeError, eval, 'a', g, m)
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000371
372 # Verify that dict subclasses work as well
373 class D(dict):
374 def __getitem__(self, key):
375 if key == 'a':
376 return 12
377 return dict.__getitem__(self, key)
378 def keys(self):
379 return list('xyz')
380
381 d = D()
382 self.assertEqual(eval('a', g, d), 12)
383 self.assertRaises(NameError, eval, 'b', g, d)
384 self.assertEqual(eval('dir()', g, d), list('xyz'))
385 self.assertEqual(eval('globals()', g, d), g)
386 self.assertEqual(eval('locals()', g, d), d)
387
388 # Verify locals stores (used by list comps)
389 eval('[locals() for i in (2,3)]', g, d)
390 eval('[locals() for i in (2,3)]', g, UserDict.UserDict())
391
392 class SpreadSheet:
393 "Sample application showing nested, calculated lookups."
394 _cells = {}
395 def __setitem__(self, key, formula):
396 self._cells[key] = formula
Martin Blais215f13d2006-06-06 12:46:55 +0000397 def __getitem__(self, key):
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000398 return eval(self._cells[key], globals(), self)
399
400 ss = SpreadSheet()
401 ss['a1'] = '5'
402 ss['a2'] = 'a1*6'
403 ss['a3'] = 'a2*7'
404 self.assertEqual(ss['a3'], 210)
405
Raymond Hettinger2a7dede2004-08-07 04:55:30 +0000406 # Verify that dir() catches a non-list returned by eval
407 # SF bug #1004669
408 class C:
409 def __getitem__(self, item):
410 raise KeyError(item)
411 def keys(self):
412 return 'a'
413 self.assertRaises(TypeError, eval, 'dir()', globals(), C())
414
Walter Dörwald919497e2003-01-19 16:23:59 +0000415 # Done outside of the method test_z to get the correct scope
416 z = 0
417 f = open(TESTFN, 'w')
418 f.write('z = z+1\n')
419 f.write('z = z*2\n')
420 f.close()
421 execfile(TESTFN)
422
423 def test_execfile(self):
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +0000424 global numruns
425 if numruns:
426 return
427 numruns += 1
Tim Peters7f061872004-12-07 21:17:46 +0000428
Walter Dörwald919497e2003-01-19 16:23:59 +0000429 globals = {'a': 1, 'b': 2}
430 locals = {'b': 200, 'c': 300}
431
432 self.assertEqual(self.__class__.z, 2)
433 globals['z'] = 0
434 execfile(TESTFN, globals)
435 self.assertEqual(globals['z'], 2)
436 locals['z'] = 0
437 execfile(TESTFN, globals, locals)
438 self.assertEqual(locals['z'], 2)
Raymond Hettinger66bd2332004-08-02 08:30:07 +0000439
440 class M:
441 "Test mapping interface versus possible calls from execfile()."
442 def __init__(self):
443 self.z = 10
444 def __getitem__(self, key):
445 if key == 'z':
446 return self.z
447 raise KeyError
448 def __setitem__(self, key, value):
449 if key == 'z':
450 self.z = value
451 return
452 raise KeyError
453
454 locals = M()
455 locals['z'] = 0
456 execfile(TESTFN, globals, locals)
457 self.assertEqual(locals['z'], 2)
458
Walter Dörwald919497e2003-01-19 16:23:59 +0000459 unlink(TESTFN)
460 self.assertRaises(TypeError, execfile)
Neal Norwitzfcf44352005-11-27 20:37:43 +0000461 self.assertRaises(TypeError, execfile, TESTFN, {}, ())
Walter Dörwald919497e2003-01-19 16:23:59 +0000462 import os
463 self.assertRaises(IOError, execfile, os.curdir)
464 self.assertRaises(IOError, execfile, "I_dont_exist")
465
466 def test_filter(self):
467 self.assertEqual(filter(lambda c: 'a' <= c <= 'z', 'Hello World'), 'elloorld')
468 self.assertEqual(filter(None, [1, 'hello', [], [3], '', None, 9, 0]), [1, 'hello', [3], 9])
469 self.assertEqual(filter(lambda x: x > 0, [1, -3, 9, 0, 2]), [1, 9, 2])
470 self.assertEqual(filter(None, Squares(10)), [1, 4, 9, 16, 25, 36, 49, 64, 81])
471 self.assertEqual(filter(lambda x: x%2, Squares(10)), [1, 9, 25, 49, 81])
472 def identity(item):
473 return 1
474 filter(identity, Squares(5))
475 self.assertRaises(TypeError, filter)
476 class BadSeq(object):
Tim Petersf2715e02003-02-19 02:35:07 +0000477 def __getitem__(self, index):
478 if index<4:
479 return 42
480 raise ValueError
Walter Dörwald919497e2003-01-19 16:23:59 +0000481 self.assertRaises(ValueError, filter, lambda x: x, BadSeq())
482 def badfunc():
483 pass
484 self.assertRaises(TypeError, filter, badfunc, range(5))
485
Walter Dörwaldbf517072003-01-27 15:57:14 +0000486 # test bltinmodule.c::filtertuple()
Walter Dörwald919497e2003-01-19 16:23:59 +0000487 self.assertEqual(filter(None, (1, 2)), (1, 2))
488 self.assertEqual(filter(lambda x: x>=3, (1, 2, 3, 4)), (3, 4))
489 self.assertRaises(TypeError, filter, 42, (1, 2))
490
Walter Dörwaldbf517072003-01-27 15:57:14 +0000491 # test bltinmodule.c::filterstring()
Walter Dörwald919497e2003-01-19 16:23:59 +0000492 self.assertEqual(filter(None, "12"), "12")
493 self.assertEqual(filter(lambda x: x>="3", "1234"), "34")
494 self.assertRaises(TypeError, filter, 42, "12")
495 class badstr(str):
496 def __getitem__(self, index):
497 raise ValueError
498 self.assertRaises(ValueError, filter, lambda x: x >="3", badstr("1234"))
Walter Dörwaldbf517072003-01-27 15:57:14 +0000499
Walter Dörwald903f1e02003-02-04 16:28:00 +0000500 class badstr2(str):
501 def __getitem__(self, index):
502 return 42
503 self.assertRaises(TypeError, filter, lambda x: x >=42, badstr2("1234"))
504
505 class weirdstr(str):
506 def __getitem__(self, index):
507 return weirdstr(2*str.__getitem__(self, index))
508 self.assertEqual(filter(lambda x: x>="33", weirdstr("1234")), "3344")
509
Walter Dörwald5e61e242003-02-04 17:04:01 +0000510 class shiftstr(str):
511 def __getitem__(self, index):
512 return chr(ord(str.__getitem__(self, index))+1)
513 self.assertEqual(filter(lambda x: x>="3", shiftstr("1234")), "345")
514
Martin v. Löwis8afd7572003-01-25 22:46:11 +0000515 if have_unicode:
Walter Dörwaldbf517072003-01-27 15:57:14 +0000516 # test bltinmodule.c::filterunicode()
Martin v. Löwis8afd7572003-01-25 22:46:11 +0000517 self.assertEqual(filter(None, unicode("12")), unicode("12"))
518 self.assertEqual(filter(lambda x: x>="3", unicode("1234")), unicode("34"))
519 self.assertRaises(TypeError, filter, 42, unicode("12"))
520 self.assertRaises(ValueError, filter, lambda x: x >="3", badstr(unicode("1234")))
Walter Dörwald919497e2003-01-19 16:23:59 +0000521
Walter Dörwald903f1e02003-02-04 16:28:00 +0000522 class badunicode(unicode):
523 def __getitem__(self, index):
524 return 42
525 self.assertRaises(TypeError, filter, lambda x: x >=42, badunicode("1234"))
526
527 class weirdunicode(unicode):
528 def __getitem__(self, index):
529 return weirdunicode(2*unicode.__getitem__(self, index))
530 self.assertEqual(
531 filter(lambda x: x>=unicode("33"), weirdunicode("1234")), unicode("3344"))
532
Walter Dörwald5e61e242003-02-04 17:04:01 +0000533 class shiftunicode(unicode):
534 def __getitem__(self, index):
535 return unichr(ord(unicode.__getitem__(self, index))+1)
536 self.assertEqual(
537 filter(lambda x: x>=unicode("3"), shiftunicode("1234")),
538 unicode("345")
539 )
540
Walter Dörwaldc3da83f2003-02-04 20:24:45 +0000541 def test_filter_subclasses(self):
Walter Dörwaldc8cb5d92003-08-15 17:52:39 +0000542 # test that filter() never returns tuple, str or unicode subclasses
543 # and that the result always goes through __getitem__
544 funcs = (None, bool, lambda x: True)
Walter Dörwaldc3da83f2003-02-04 20:24:45 +0000545 class tuple2(tuple):
Walter Dörwald1918f772003-02-10 13:19:13 +0000546 def __getitem__(self, index):
547 return 2*tuple.__getitem__(self, index)
Walter Dörwaldc3da83f2003-02-04 20:24:45 +0000548 class str2(str):
Walter Dörwald1918f772003-02-10 13:19:13 +0000549 def __getitem__(self, index):
550 return 2*str.__getitem__(self, index)
Walter Dörwaldc3da83f2003-02-04 20:24:45 +0000551 inputs = {
Walter Dörwald8dd19322003-02-10 17:36:40 +0000552 tuple2: {(): (), (1, 2, 3): (2, 4, 6)},
Walter Dörwald1918f772003-02-10 13:19:13 +0000553 str2: {"": "", "123": "112233"}
Walter Dörwaldc3da83f2003-02-04 20:24:45 +0000554 }
555 if have_unicode:
556 class unicode2(unicode):
Walter Dörwald1918f772003-02-10 13:19:13 +0000557 def __getitem__(self, index):
558 return 2*unicode.__getitem__(self, index)
559 inputs[unicode2] = {
560 unicode(): unicode(),
561 unicode("123"): unicode("112233")
562 }
Walter Dörwaldc3da83f2003-02-04 20:24:45 +0000563
Walter Dörwald1918f772003-02-10 13:19:13 +0000564 for (cls, inps) in inputs.iteritems():
565 for (inp, exp) in inps.iteritems():
Tim Petersf2715e02003-02-19 02:35:07 +0000566 # make sure the output goes through __getitem__
567 # even if func is None
568 self.assertEqual(
569 filter(funcs[0], cls(inp)),
570 filter(funcs[1], cls(inp))
571 )
572 for func in funcs:
Walter Dörwald1918f772003-02-10 13:19:13 +0000573 outp = filter(func, cls(inp))
574 self.assertEqual(outp, exp)
575 self.assert_(not isinstance(outp, cls))
Walter Dörwaldc3da83f2003-02-04 20:24:45 +0000576
Walter Dörwald919497e2003-01-19 16:23:59 +0000577 def test_getattr(self):
578 import sys
579 self.assert_(getattr(sys, 'stdout') is sys.stdout)
580 self.assertRaises(TypeError, getattr, sys, 1)
581 self.assertRaises(TypeError, getattr, sys, 1, "foo")
582 self.assertRaises(TypeError, getattr)
Walter Dörwald4e41a4b2005-08-03 17:09:04 +0000583 if have_unicode:
584 self.assertRaises(UnicodeError, getattr, sys, unichr(sys.maxunicode))
Walter Dörwald919497e2003-01-19 16:23:59 +0000585
586 def test_hasattr(self):
587 import sys
588 self.assert_(hasattr(sys, 'stdout'))
589 self.assertRaises(TypeError, hasattr, sys, 1)
590 self.assertRaises(TypeError, hasattr)
Walter Dörwald4e41a4b2005-08-03 17:09:04 +0000591 if have_unicode:
592 self.assertRaises(UnicodeError, hasattr, sys, unichr(sys.maxunicode))
Walter Dörwald919497e2003-01-19 16:23:59 +0000593
Benjamin Petersonb9030f42008-05-12 00:41:23 +0000594 # Check that hasattr allows SystemExit and KeyboardInterrupts by
595 class A:
596 def __getattr__(self, what):
597 raise KeyboardInterrupt
598 self.assertRaises(KeyboardInterrupt, hasattr, A(), "b")
599 class B:
600 def __getattr__(self, what):
601 raise SystemExit
602 self.assertRaises(SystemExit, hasattr, B(), "b")
603
Walter Dörwald919497e2003-01-19 16:23:59 +0000604 def test_hash(self):
605 hash(None)
606 self.assertEqual(hash(1), hash(1L))
607 self.assertEqual(hash(1), hash(1.0))
608 hash('spam')
609 if have_unicode:
610 self.assertEqual(hash('spam'), hash(unicode('spam')))
611 hash((0,1,2,3))
612 def f(): pass
613 self.assertRaises(TypeError, hash, [])
614 self.assertRaises(TypeError, hash, {})
Martin v. Löwisab2f8f72006-08-09 07:57:39 +0000615 # Bug 1536021: Allow hash to return long objects
616 class X:
617 def __hash__(self):
618 return 2**100
619 self.assertEquals(type(hash(X())), int)
620 class Y(object):
621 def __hash__(self):
622 return 2**100
623 self.assertEquals(type(hash(Y())), int)
Armin Rigo51fc8c42006-08-09 14:55:26 +0000624 class Z(long):
625 def __hash__(self):
626 return self
627 self.assertEquals(hash(Z(42)), hash(42L))
Walter Dörwald919497e2003-01-19 16:23:59 +0000628
629 def test_hex(self):
630 self.assertEqual(hex(16), '0x10')
631 self.assertEqual(hex(16L), '0x10L')
Guido van Rossum6c9e1302003-11-29 23:52:13 +0000632 self.assertEqual(hex(-16), '-0x10')
Walter Dörwald919497e2003-01-19 16:23:59 +0000633 self.assertEqual(hex(-16L), '-0x10L')
634 self.assertRaises(TypeError, hex, {})
635
636 def test_id(self):
637 id(None)
638 id(1)
639 id(1L)
640 id(1.0)
641 id('spam')
642 id((0,1,2,3))
643 id([0,1,2,3])
644 id({'spam': 1, 'eggs': 2, 'ham': 3})
645
646 # Test input() later, together with raw_input
647
Walter Dörwald919497e2003-01-19 16:23:59 +0000648 def test_intern(self):
649 self.assertRaises(TypeError, intern)
Georg Brandl23016272009-10-27 22:57:25 +0000650 # This fails if the test is run twice with a constant string,
651 # therefore append the run counter
652 s = "never interned before " + str(numruns)
Walter Dörwald919497e2003-01-19 16:23:59 +0000653 self.assert_(intern(s) is s)
654 s2 = s.swapcase().swapcase()
655 self.assert_(intern(s2) is s)
656
Jeremy Hylton4c989dd2004-08-07 19:20:05 +0000657 # Subclasses of string can't be interned, because they
658 # provide too much opportunity for insane things to happen.
659 # We don't want them in the interned dict and if they aren't
660 # actually interned, we don't want to create the appearance
661 # that they are by allowing intern() to succeeed.
662 class S(str):
663 def __hash__(self):
664 return 123
665
666 self.assertRaises(TypeError, intern, S("abc"))
667
668 # It's still safe to pass these strings to routines that
669 # call intern internally, e.g. PyObject_SetAttr().
670 s = S("abc")
671 setattr(s, s, s)
672 self.assertEqual(getattr(s, s), s)
673
Walter Dörwald919497e2003-01-19 16:23:59 +0000674 def test_iter(self):
675 self.assertRaises(TypeError, iter)
676 self.assertRaises(TypeError, iter, 42, 42)
677 lists = [("1", "2"), ["1", "2"], "12"]
678 if have_unicode:
679 lists.append(unicode("12"))
680 for l in lists:
681 i = iter(l)
682 self.assertEqual(i.next(), '1')
683 self.assertEqual(i.next(), '2')
684 self.assertRaises(StopIteration, i.next)
685
686 def test_isinstance(self):
687 class C:
688 pass
689 class D(C):
690 pass
691 class E:
692 pass
693 c = C()
694 d = D()
695 e = E()
696 self.assert_(isinstance(c, C))
697 self.assert_(isinstance(d, C))
698 self.assert_(not isinstance(e, C))
699 self.assert_(not isinstance(c, D))
700 self.assert_(not isinstance('foo', E))
701 self.assertRaises(TypeError, isinstance, E, 'foo')
702 self.assertRaises(TypeError, isinstance)
703
704 def test_issubclass(self):
705 class C:
706 pass
707 class D(C):
708 pass
709 class E:
710 pass
711 c = C()
712 d = D()
713 e = E()
714 self.assert_(issubclass(D, C))
715 self.assert_(issubclass(C, C))
716 self.assert_(not issubclass(C, D))
717 self.assertRaises(TypeError, issubclass, 'foo', E)
718 self.assertRaises(TypeError, issubclass, E, 'foo')
719 self.assertRaises(TypeError, issubclass)
720
721 def test_len(self):
722 self.assertEqual(len('123'), 3)
723 self.assertEqual(len(()), 0)
724 self.assertEqual(len((1, 2, 3, 4)), 4)
725 self.assertEqual(len([1, 2, 3, 4]), 4)
726 self.assertEqual(len({}), 0)
727 self.assertEqual(len({'a':1, 'b': 2}), 2)
728 class BadSeq:
729 def __len__(self):
730 raise ValueError
731 self.assertRaises(ValueError, len, BadSeq())
732
Walter Dörwald919497e2003-01-19 16:23:59 +0000733 def test_map(self):
734 self.assertEqual(
735 map(None, 'hello world'),
736 ['h','e','l','l','o',' ','w','o','r','l','d']
737 )
738 self.assertEqual(
739 map(None, 'abcd', 'efg'),
740 [('a', 'e'), ('b', 'f'), ('c', 'g'), ('d', None)]
741 )
742 self.assertEqual(
743 map(None, range(10)),
744 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
745 )
746 self.assertEqual(
747 map(lambda x: x*x, range(1,4)),
748 [1, 4, 9]
749 )
750 try:
751 from math import sqrt
752 except ImportError:
753 def sqrt(x):
754 return pow(x, 0.5)
755 self.assertEqual(
756 map(lambda x: map(sqrt,x), [[16, 4], [81, 9]]),
757 [[4.0, 2.0], [9.0, 3.0]]
758 )
759 self.assertEqual(
760 map(lambda x, y: x+y, [1,3,2], [9,1,4]),
761 [10, 4, 6]
762 )
763
764 def plus(*v):
765 accu = 0
766 for i in v: accu = accu + i
767 return accu
768 self.assertEqual(
769 map(plus, [1, 3, 7]),
770 [1, 3, 7]
771 )
772 self.assertEqual(
773 map(plus, [1, 3, 7], [4, 9, 2]),
774 [1+4, 3+9, 7+2]
775 )
776 self.assertEqual(
777 map(plus, [1, 3, 7], [4, 9, 2], [1, 1, 0]),
778 [1+4+1, 3+9+1, 7+2+0]
779 )
780 self.assertEqual(
781 map(None, Squares(10)),
782 [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
783 )
784 self.assertEqual(
785 map(int, Squares(10)),
786 [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
787 )
788 self.assertEqual(
789 map(None, Squares(3), Squares(2)),
790 [(0,0), (1,1), (4,None)]
791 )
792 self.assertEqual(
793 map(max, Squares(3), Squares(2)),
794 [0, 1, 4]
795 )
796 self.assertRaises(TypeError, map)
797 self.assertRaises(TypeError, map, lambda x: x, 42)
798 self.assertEqual(map(None, [42]), [42])
799 class BadSeq:
800 def __getitem__(self, index):
801 raise ValueError
802 self.assertRaises(ValueError, map, lambda x: x, BadSeq())
Neal Norwitzfcf44352005-11-27 20:37:43 +0000803 def badfunc(x):
804 raise RuntimeError
805 self.assertRaises(RuntimeError, map, badfunc, range(5))
Walter Dörwald919497e2003-01-19 16:23:59 +0000806
807 def test_max(self):
808 self.assertEqual(max('123123'), '3')
809 self.assertEqual(max(1, 2, 3), 3)
810 self.assertEqual(max((1, 2, 3, 1, 2, 3)), 3)
811 self.assertEqual(max([1, 2, 3, 1, 2, 3]), 3)
812
813 self.assertEqual(max(1, 2L, 3.0), 3.0)
814 self.assertEqual(max(1L, 2.0, 3), 3)
815 self.assertEqual(max(1.0, 2, 3L), 3L)
816
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +0000817 for stmt in (
818 "max(key=int)", # no args
819 "max(1, key=int)", # single arg not iterable
820 "max(1, 2, keystone=int)", # wrong keyword
821 "max(1, 2, key=int, abc=int)", # two many keywords
822 "max(1, 2, key=1)", # keyfunc is not callable
823 ):
Tim Peters7f061872004-12-07 21:17:46 +0000824 try:
825 exec(stmt) in globals()
826 except TypeError:
827 pass
828 else:
829 self.fail(stmt)
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +0000830
831 self.assertEqual(max((1,), key=neg), 1) # one elem iterable
832 self.assertEqual(max((1,2), key=neg), 1) # two elem iterable
833 self.assertEqual(max(1, 2, key=neg), 1) # two elems
834
835 data = [random.randrange(200) for i in range(100)]
836 keys = dict((elem, random.randrange(50)) for elem in data)
837 f = keys.__getitem__
838 self.assertEqual(max(data, key=f),
839 sorted(reversed(data), key=f)[-1])
840
Walter Dörwald919497e2003-01-19 16:23:59 +0000841 def test_min(self):
842 self.assertEqual(min('123123'), '1')
843 self.assertEqual(min(1, 2, 3), 1)
844 self.assertEqual(min((1, 2, 3, 1, 2, 3)), 1)
845 self.assertEqual(min([1, 2, 3, 1, 2, 3]), 1)
846
847 self.assertEqual(min(1, 2L, 3.0), 1)
848 self.assertEqual(min(1L, 2.0, 3), 1L)
849 self.assertEqual(min(1.0, 2, 3L), 1.0)
850
851 self.assertRaises(TypeError, min)
852 self.assertRaises(TypeError, min, 42)
853 self.assertRaises(ValueError, min, ())
854 class BadSeq:
855 def __getitem__(self, index):
856 raise ValueError
857 self.assertRaises(ValueError, min, BadSeq())
858 class BadNumber:
859 def __cmp__(self, other):
860 raise ValueError
861 self.assertRaises(ValueError, min, (42, BadNumber()))
862
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +0000863 for stmt in (
864 "min(key=int)", # no args
865 "min(1, key=int)", # single arg not iterable
866 "min(1, 2, keystone=int)", # wrong keyword
867 "min(1, 2, key=int, abc=int)", # two many keywords
868 "min(1, 2, key=1)", # keyfunc is not callable
869 ):
Tim Peters7f061872004-12-07 21:17:46 +0000870 try:
871 exec(stmt) in globals()
872 except TypeError:
873 pass
874 else:
875 self.fail(stmt)
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +0000876
877 self.assertEqual(min((1,), key=neg), 1) # one elem iterable
878 self.assertEqual(min((1,2), key=neg), 2) # two elem iterable
879 self.assertEqual(min(1, 2, key=neg), 2) # two elems
880
881 data = [random.randrange(200) for i in range(100)]
882 keys = dict((elem, random.randrange(50)) for elem in data)
883 f = keys.__getitem__
884 self.assertEqual(min(data, key=f),
885 sorted(data, key=f)[0])
886
Georg Brandl28e08732008-04-30 19:47:09 +0000887 def test_next(self):
888 it = iter(range(2))
889 self.assertEqual(next(it), 0)
890 self.assertEqual(next(it), 1)
891 self.assertRaises(StopIteration, next, it)
892 self.assertRaises(StopIteration, next, it)
893 self.assertEquals(next(it, 42), 42)
894
895 class Iter(object):
896 def __iter__(self):
897 return self
898 def next(self):
899 raise StopIteration
900
901 it = iter(Iter())
902 self.assertEquals(next(it, 42), 42)
903 self.assertRaises(StopIteration, next, it)
904
905 def gen():
906 yield 1
907 return
908
909 it = gen()
910 self.assertEquals(next(it), 1)
911 self.assertRaises(StopIteration, next, it)
912 self.assertEquals(next(it, 42), 42)
913
Walter Dörwald919497e2003-01-19 16:23:59 +0000914 def test_oct(self):
915 self.assertEqual(oct(100), '0144')
916 self.assertEqual(oct(100L), '0144L')
Guido van Rossum6c9e1302003-11-29 23:52:13 +0000917 self.assertEqual(oct(-100), '-0144')
Walter Dörwald919497e2003-01-19 16:23:59 +0000918 self.assertEqual(oct(-100L), '-0144L')
919 self.assertRaises(TypeError, oct, ())
920
921 def write_testfile(self):
922 # NB the first 4 lines are also used to test input and raw_input, below
923 fp = open(TESTFN, 'w')
924 try:
925 fp.write('1+1\n')
926 fp.write('1+1\n')
927 fp.write('The quick brown fox jumps over the lazy dog')
928 fp.write('.\n')
929 fp.write('Dear John\n')
930 fp.write('XXX'*100)
931 fp.write('YYY'*100)
932 finally:
933 fp.close()
934
935 def test_open(self):
936 self.write_testfile()
937 fp = open(TESTFN, 'r')
938 try:
939 self.assertEqual(fp.readline(4), '1+1\n')
940 self.assertEqual(fp.readline(4), '1+1\n')
941 self.assertEqual(fp.readline(), 'The quick brown fox jumps over the lazy dog.\n')
942 self.assertEqual(fp.readline(4), 'Dear')
943 self.assertEqual(fp.readline(100), ' John\n')
944 self.assertEqual(fp.read(300), 'XXX'*100)
945 self.assertEqual(fp.read(1000), 'YYY'*100)
946 finally:
947 fp.close()
948 unlink(TESTFN)
949
950 def test_ord(self):
951 self.assertEqual(ord(' '), 32)
952 self.assertEqual(ord('A'), 65)
953 self.assertEqual(ord('a'), 97)
954 if have_unicode:
955 self.assertEqual(ord(unichr(sys.maxunicode)), sys.maxunicode)
956 self.assertRaises(TypeError, ord, 42)
Walter Dörwald4e41a4b2005-08-03 17:09:04 +0000957 if have_unicode:
958 self.assertRaises(TypeError, ord, unicode("12"))
Walter Dörwald919497e2003-01-19 16:23:59 +0000959
960 def test_pow(self):
961 self.assertEqual(pow(0,0), 1)
962 self.assertEqual(pow(0,1), 0)
963 self.assertEqual(pow(1,0), 1)
964 self.assertEqual(pow(1,1), 1)
965
966 self.assertEqual(pow(2,0), 1)
967 self.assertEqual(pow(2,10), 1024)
968 self.assertEqual(pow(2,20), 1024*1024)
969 self.assertEqual(pow(2,30), 1024*1024*1024)
970
971 self.assertEqual(pow(-2,0), 1)
972 self.assertEqual(pow(-2,1), -2)
973 self.assertEqual(pow(-2,2), 4)
974 self.assertEqual(pow(-2,3), -8)
975
976 self.assertEqual(pow(0L,0), 1)
977 self.assertEqual(pow(0L,1), 0)
978 self.assertEqual(pow(1L,0), 1)
979 self.assertEqual(pow(1L,1), 1)
980
981 self.assertEqual(pow(2L,0), 1)
982 self.assertEqual(pow(2L,10), 1024)
983 self.assertEqual(pow(2L,20), 1024*1024)
984 self.assertEqual(pow(2L,30), 1024*1024*1024)
985
986 self.assertEqual(pow(-2L,0), 1)
987 self.assertEqual(pow(-2L,1), -2)
988 self.assertEqual(pow(-2L,2), 4)
989 self.assertEqual(pow(-2L,3), -8)
990
991 self.assertAlmostEqual(pow(0.,0), 1.)
992 self.assertAlmostEqual(pow(0.,1), 0.)
993 self.assertAlmostEqual(pow(1.,0), 1.)
994 self.assertAlmostEqual(pow(1.,1), 1.)
995
996 self.assertAlmostEqual(pow(2.,0), 1.)
997 self.assertAlmostEqual(pow(2.,10), 1024.)
998 self.assertAlmostEqual(pow(2.,20), 1024.*1024.)
999 self.assertAlmostEqual(pow(2.,30), 1024.*1024.*1024.)
1000
1001 self.assertAlmostEqual(pow(-2.,0), 1.)
1002 self.assertAlmostEqual(pow(-2.,1), -2.)
1003 self.assertAlmostEqual(pow(-2.,2), 4.)
1004 self.assertAlmostEqual(pow(-2.,3), -8.)
1005
1006 for x in 2, 2L, 2.0:
1007 for y in 10, 10L, 10.0:
1008 for z in 1000, 1000L, 1000.0:
1009 if isinstance(x, float) or \
1010 isinstance(y, float) or \
1011 isinstance(z, float):
1012 self.assertRaises(TypeError, pow, x, y, z)
1013 else:
1014 self.assertAlmostEqual(pow(x, y, z), 24.0)
1015
1016 self.assertRaises(TypeError, pow, -1, -2, 3)
1017 self.assertRaises(ValueError, pow, 1, 2, 0)
1018 self.assertRaises(TypeError, pow, -1L, -2L, 3L)
1019 self.assertRaises(ValueError, pow, 1L, 2L, 0L)
Jeffrey Yasskin9871d8f2008-01-05 08:47:13 +00001020 # Will return complex in 3.0:
1021 self.assertRaises(ValueError, pow, -342.43, 0.234)
Walter Dörwald919497e2003-01-19 16:23:59 +00001022
1023 self.assertRaises(TypeError, pow)
1024
1025 def test_range(self):
1026 self.assertEqual(range(3), [0, 1, 2])
1027 self.assertEqual(range(1, 5), [1, 2, 3, 4])
1028 self.assertEqual(range(0), [])
1029 self.assertEqual(range(-3), [])
1030 self.assertEqual(range(1, 10, 3), [1, 4, 7])
1031 self.assertEqual(range(5, -5, -3), [5, 2, -1, -4])
1032
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001033 # Now test range() with longs
1034 self.assertEqual(range(-2**100), [])
1035 self.assertEqual(range(0, -2**100), [])
1036 self.assertEqual(range(0, 2**100, -1), [])
1037 self.assertEqual(range(0, 2**100, -1), [])
1038
1039 a = long(10 * sys.maxint)
1040 b = long(100 * sys.maxint)
1041 c = long(50 * sys.maxint)
1042
1043 self.assertEqual(range(a, a+2), [a, a+1])
1044 self.assertEqual(range(a+2, a, -1L), [a+2, a+1])
1045 self.assertEqual(range(a+4, a, -2), [a+4, a+2])
1046
1047 seq = range(a, b, c)
1048 self.assert_(a in seq)
1049 self.assert_(b not in seq)
1050 self.assertEqual(len(seq), 2)
1051
1052 seq = range(b, a, -c)
1053 self.assert_(b in seq)
1054 self.assert_(a not in seq)
1055 self.assertEqual(len(seq), 2)
1056
1057 seq = range(-a, -b, -c)
1058 self.assert_(-a in seq)
1059 self.assert_(-b not in seq)
1060 self.assertEqual(len(seq), 2)
1061
Walter Dörwald919497e2003-01-19 16:23:59 +00001062 self.assertRaises(TypeError, range)
1063 self.assertRaises(TypeError, range, 1, 2, 3, 4)
1064 self.assertRaises(ValueError, range, 1, 2, 0)
Neal Norwitzfcf44352005-11-27 20:37:43 +00001065 self.assertRaises(ValueError, range, a, a + 1, long(0))
1066
1067 class badzero(int):
1068 def __cmp__(self, other):
1069 raise RuntimeError
Nick Coghlan48361f52008-08-11 15:45:58 +00001070 __hash__ = None # Invalid cmp makes this unhashable
Neal Norwitzfcf44352005-11-27 20:37:43 +00001071 self.assertRaises(RuntimeError, range, a, a + 1, badzero(1))
Walter Dörwald919497e2003-01-19 16:23:59 +00001072
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001073 # Reject floats when it would require PyLongs to represent.
1074 # (smaller floats still accepted, but deprecated)
Tim Peters299b3df2003-04-15 14:40:03 +00001075 self.assertRaises(TypeError, range, 1e100, 1e101, 1e101)
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001076
Walter Dörwald357981e2003-04-15 18:59:28 +00001077 self.assertRaises(TypeError, range, 0, "spam")
1078 self.assertRaises(TypeError, range, 0, 42, "spam")
1079
1080 self.assertRaises(OverflowError, range, -sys.maxint, sys.maxint)
1081 self.assertRaises(OverflowError, range, 0, 2*sys.maxint)
1082
Walter Dörwald919497e2003-01-19 16:23:59 +00001083 def test_input_and_raw_input(self):
1084 self.write_testfile()
1085 fp = open(TESTFN, 'r')
1086 savestdin = sys.stdin
1087 savestdout = sys.stdout # Eats the echo
1088 try:
1089 sys.stdin = fp
1090 sys.stdout = BitBucket()
1091 self.assertEqual(input(), 2)
1092 self.assertEqual(input('testing\n'), 2)
1093 self.assertEqual(raw_input(), 'The quick brown fox jumps over the lazy dog.')
1094 self.assertEqual(raw_input('testing\n'), 'Dear John')
Tim Peters8e24a962006-08-09 00:52:26 +00001095
Georg Brandl7e3ba2a2006-08-06 08:23:54 +00001096 # SF 1535165: don't segfault on closed stdin
1097 # sys.stdout must be a regular file for triggering
1098 sys.stdout = savestdout
1099 sys.stdin.close()
Georg Brandld336e982006-08-06 09:17:16 +00001100 self.assertRaises(ValueError, input)
Georg Brandl7e3ba2a2006-08-06 08:23:54 +00001101
1102 sys.stdout = BitBucket()
Walter Dörwald919497e2003-01-19 16:23:59 +00001103 sys.stdin = cStringIO.StringIO("NULL\0")
1104 self.assertRaises(TypeError, input, 42, 42)
1105 sys.stdin = cStringIO.StringIO(" 'whitespace'")
1106 self.assertEqual(input(), 'whitespace')
1107 sys.stdin = cStringIO.StringIO()
1108 self.assertRaises(EOFError, input)
Hye-Shik Changff83c2b2004-02-02 13:39:01 +00001109
1110 # SF 876178: make sure input() respect future options.
1111 sys.stdin = cStringIO.StringIO('1/2')
1112 sys.stdout = cStringIO.StringIO()
1113 exec compile('print input()', 'test_builtin_tmp', 'exec')
1114 sys.stdin.seek(0, 0)
1115 exec compile('from __future__ import division;print input()',
1116 'test_builtin_tmp', 'exec')
1117 sys.stdin.seek(0, 0)
1118 exec compile('print input()', 'test_builtin_tmp', 'exec')
Tim Petersb82cb8d2006-03-28 07:39:22 +00001119 # The result we expect depends on whether new division semantics
1120 # are already in effect.
1121 if 1/2 == 0:
1122 # This test was compiled with old semantics.
1123 expected = ['0', '0.5', '0']
1124 else:
1125 # This test was compiled with new semantics (e.g., -Qnew
1126 # was given on the command line.
1127 expected = ['0.5', '0.5', '0.5']
1128 self.assertEqual(sys.stdout.getvalue().splitlines(), expected)
Hye-Shik Changff83c2b2004-02-02 13:39:01 +00001129
Walter Dörwald919497e2003-01-19 16:23:59 +00001130 del sys.stdout
1131 self.assertRaises(RuntimeError, input, 'prompt')
1132 del sys.stdin
1133 self.assertRaises(RuntimeError, input, 'prompt')
1134 finally:
1135 sys.stdin = savestdin
1136 sys.stdout = savestdout
1137 fp.close()
1138 unlink(TESTFN)
1139
1140 def test_reduce(self):
1141 self.assertEqual(reduce(lambda x, y: x+y, ['a', 'b', 'c'], ''), 'abc')
1142 self.assertEqual(
1143 reduce(lambda x, y: x+y, [['a', 'c'], [], ['d', 'w']], []),
1144 ['a','c','d','w']
1145 )
1146 self.assertEqual(reduce(lambda x, y: x*y, range(2,8), 1), 5040)
1147 self.assertEqual(
1148 reduce(lambda x, y: x*y, range(2,21), 1L),
1149 2432902008176640000L
1150 )
1151 self.assertEqual(reduce(lambda x, y: x+y, Squares(10)), 285)
1152 self.assertEqual(reduce(lambda x, y: x+y, Squares(10), 0), 285)
1153 self.assertEqual(reduce(lambda x, y: x+y, Squares(0), 0), 0)
1154 self.assertRaises(TypeError, reduce)
1155 self.assertRaises(TypeError, reduce, 42, 42)
1156 self.assertRaises(TypeError, reduce, 42, 42, 42)
1157 self.assertEqual(reduce(42, "1"), "1") # func is never called with one item
1158 self.assertEqual(reduce(42, "", "1"), "1") # func is never called with one item
1159 self.assertRaises(TypeError, reduce, 42, (42, 42))
1160
1161 class BadSeq:
1162 def __getitem__(self, index):
1163 raise ValueError
1164 self.assertRaises(ValueError, reduce, 42, BadSeq())
1165
1166 def test_reload(self):
1167 import marshal
1168 reload(marshal)
1169 import string
1170 reload(string)
1171 ## import sys
1172 ## self.assertRaises(ImportError, reload, sys)
1173
1174 def test_repr(self):
1175 self.assertEqual(repr(''), '\'\'')
1176 self.assertEqual(repr(0), '0')
1177 self.assertEqual(repr(0L), '0L')
1178 self.assertEqual(repr(()), '()')
1179 self.assertEqual(repr([]), '[]')
1180 self.assertEqual(repr({}), '{}')
1181 a = []
1182 a.append(a)
1183 self.assertEqual(repr(a), '[[...]]')
1184 a = {}
1185 a[0] = a
1186 self.assertEqual(repr(a), '{0: {...}}')
1187
1188 def test_round(self):
1189 self.assertEqual(round(0.0), 0.0)
Jeffrey Yasskin2f3c16b2008-01-03 02:21:52 +00001190 self.assertEqual(type(round(0.0)), float) # Will be int in 3.0.
Walter Dörwald919497e2003-01-19 16:23:59 +00001191 self.assertEqual(round(1.0), 1.0)
1192 self.assertEqual(round(10.0), 10.0)
1193 self.assertEqual(round(1000000000.0), 1000000000.0)
1194 self.assertEqual(round(1e20), 1e20)
1195
1196 self.assertEqual(round(-1.0), -1.0)
1197 self.assertEqual(round(-10.0), -10.0)
1198 self.assertEqual(round(-1000000000.0), -1000000000.0)
1199 self.assertEqual(round(-1e20), -1e20)
1200
1201 self.assertEqual(round(0.1), 0.0)
1202 self.assertEqual(round(1.1), 1.0)
1203 self.assertEqual(round(10.1), 10.0)
1204 self.assertEqual(round(1000000000.1), 1000000000.0)
1205
1206 self.assertEqual(round(-1.1), -1.0)
1207 self.assertEqual(round(-10.1), -10.0)
1208 self.assertEqual(round(-1000000000.1), -1000000000.0)
1209
1210 self.assertEqual(round(0.9), 1.0)
1211 self.assertEqual(round(9.9), 10.0)
1212 self.assertEqual(round(999999999.9), 1000000000.0)
1213
1214 self.assertEqual(round(-0.9), -1.0)
1215 self.assertEqual(round(-9.9), -10.0)
1216 self.assertEqual(round(-999999999.9), -1000000000.0)
1217
1218 self.assertEqual(round(-8.0, -1), -10.0)
Jeffrey Yasskin2f3c16b2008-01-03 02:21:52 +00001219 self.assertEqual(type(round(-8.0, -1)), float)
1220
1221 self.assertEqual(type(round(-8.0, 0)), float)
1222 self.assertEqual(type(round(-8.0, 1)), float)
1223
Jeffrey Yasskin9871d8f2008-01-05 08:47:13 +00001224 # Check half rounding behaviour.
Jeffrey Yasskin2f3c16b2008-01-03 02:21:52 +00001225 self.assertEqual(round(5.5), 6)
Jeffrey Yasskin9871d8f2008-01-05 08:47:13 +00001226 self.assertEqual(round(6.5), 7)
Jeffrey Yasskin2f3c16b2008-01-03 02:21:52 +00001227 self.assertEqual(round(-5.5), -6)
Jeffrey Yasskin9871d8f2008-01-05 08:47:13 +00001228 self.assertEqual(round(-6.5), -7)
Jeffrey Yasskin2f3c16b2008-01-03 02:21:52 +00001229
1230 # Check behavior on ints
1231 self.assertEqual(round(0), 0)
1232 self.assertEqual(round(8), 8)
1233 self.assertEqual(round(-8), -8)
1234 self.assertEqual(type(round(0)), float) # Will be int in 3.0.
1235 self.assertEqual(type(round(-8, -1)), float)
1236 self.assertEqual(type(round(-8, 0)), float)
1237 self.assertEqual(type(round(-8, 1)), float)
Walter Dörwald919497e2003-01-19 16:23:59 +00001238
Georg Brandlccadf842006-03-31 18:54:53 +00001239 # test new kwargs
1240 self.assertEqual(round(number=-8.0, ndigits=-1), -10.0)
1241
Walter Dörwald919497e2003-01-19 16:23:59 +00001242 self.assertRaises(TypeError, round)
1243
Jeffrey Yasskin2f3c16b2008-01-03 02:21:52 +00001244 # test generic rounding delegation for reals
1245 class TestRound(object):
Jeffrey Yasskin9871d8f2008-01-05 08:47:13 +00001246 def __float__(self):
1247 return 23.0
Jeffrey Yasskin2f3c16b2008-01-03 02:21:52 +00001248
1249 class TestNoRound(object):
1250 pass
1251
1252 self.assertEqual(round(TestRound()), 23)
1253
1254 self.assertRaises(TypeError, round, 1, 2, 3)
Jeffrey Yasskin9871d8f2008-01-05 08:47:13 +00001255 self.assertRaises(TypeError, round, TestNoRound())
Jeffrey Yasskin2f3c16b2008-01-03 02:21:52 +00001256
1257 t = TestNoRound()
Jeffrey Yasskin9871d8f2008-01-05 08:47:13 +00001258 t.__float__ = lambda *args: args
1259 self.assertRaises(TypeError, round, t)
1260 self.assertRaises(TypeError, round, t, 0)
Jeffrey Yasskin2f3c16b2008-01-03 02:21:52 +00001261
Walter Dörwald919497e2003-01-19 16:23:59 +00001262 def test_setattr(self):
Tim Petersf2715e02003-02-19 02:35:07 +00001263 setattr(sys, 'spam', 1)
1264 self.assertEqual(sys.spam, 1)
1265 self.assertRaises(TypeError, setattr, sys, 1, 'spam')
1266 self.assertRaises(TypeError, setattr)
Walter Dörwald919497e2003-01-19 16:23:59 +00001267
Alex Martellia70b1912003-04-22 08:12:33 +00001268 def test_sum(self):
1269 self.assertEqual(sum([]), 0)
1270 self.assertEqual(sum(range(2,8)), 27)
1271 self.assertEqual(sum(iter(range(2,8))), 27)
1272 self.assertEqual(sum(Squares(10)), 285)
1273 self.assertEqual(sum(iter(Squares(10))), 285)
1274 self.assertEqual(sum([[1], [2], [3]], []), [1, 2, 3])
1275
1276 self.assertRaises(TypeError, sum)
1277 self.assertRaises(TypeError, sum, 42)
1278 self.assertRaises(TypeError, sum, ['a', 'b', 'c'])
1279 self.assertRaises(TypeError, sum, ['a', 'b', 'c'], '')
1280 self.assertRaises(TypeError, sum, [[1], [2], [3]])
1281 self.assertRaises(TypeError, sum, [{2:3}])
1282 self.assertRaises(TypeError, sum, [{2:3}]*2, {2:3})
1283
1284 class BadSeq:
1285 def __getitem__(self, index):
1286 raise ValueError
1287 self.assertRaises(ValueError, sum, BadSeq())
1288
Walter Dörwald919497e2003-01-19 16:23:59 +00001289 def test_type(self):
1290 self.assertEqual(type(''), type('123'))
1291 self.assertNotEqual(type(''), type(()))
1292
1293 def test_unichr(self):
1294 if have_unicode:
1295 self.assertEqual(unichr(32), unicode(' '))
1296 self.assertEqual(unichr(65), unicode('A'))
1297 self.assertEqual(unichr(97), unicode('a'))
1298 self.assertEqual(
1299 unichr(sys.maxunicode),
1300 unicode('\\U%08x' % (sys.maxunicode), 'unicode-escape')
1301 )
1302 self.assertRaises(ValueError, unichr, sys.maxunicode+1)
1303 self.assertRaises(TypeError, unichr)
Amaury Forgeot d'Arc39fd6722008-07-31 21:28:03 +00001304 self.assertRaises((OverflowError, ValueError), unichr, 2**32)
Walter Dörwald919497e2003-01-19 16:23:59 +00001305
Guido van Rossumfee7b932005-01-16 00:21:28 +00001306 # We don't want self in vars(), so these are static methods
1307
1308 @staticmethod
Walter Dörwald919497e2003-01-19 16:23:59 +00001309 def get_vars_f0():
1310 return vars()
Walter Dörwald919497e2003-01-19 16:23:59 +00001311
Guido van Rossumfee7b932005-01-16 00:21:28 +00001312 @staticmethod
Walter Dörwald919497e2003-01-19 16:23:59 +00001313 def get_vars_f2():
1314 BuiltinTest.get_vars_f0()
1315 a = 1
1316 b = 2
1317 return vars()
Walter Dörwald919497e2003-01-19 16:23:59 +00001318
1319 def test_vars(self):
Raymond Hettingera690a992003-11-16 16:17:49 +00001320 self.assertEqual(set(vars()), set(dir()))
Walter Dörwald919497e2003-01-19 16:23:59 +00001321 import sys
Raymond Hettingera690a992003-11-16 16:17:49 +00001322 self.assertEqual(set(vars(sys)), set(dir(sys)))
Walter Dörwald919497e2003-01-19 16:23:59 +00001323 self.assertEqual(self.get_vars_f0(), {})
1324 self.assertEqual(self.get_vars_f2(), {'a': 1, 'b': 2})
1325 self.assertRaises(TypeError, vars, 42, 42)
1326 self.assertRaises(TypeError, vars, 42)
1327
1328 def test_zip(self):
1329 a = (1, 2, 3)
1330 b = (4, 5, 6)
1331 t = [(1, 4), (2, 5), (3, 6)]
1332 self.assertEqual(zip(a, b), t)
1333 b = [4, 5, 6]
1334 self.assertEqual(zip(a, b), t)
1335 b = (4, 5, 6, 7)
1336 self.assertEqual(zip(a, b), t)
1337 class I:
1338 def __getitem__(self, i):
1339 if i < 0 or i > 2: raise IndexError
1340 return i + 4
1341 self.assertEqual(zip(a, I()), t)
Raymond Hettingereaef6152003-08-02 07:42:57 +00001342 self.assertEqual(zip(), [])
1343 self.assertEqual(zip(*[]), [])
Walter Dörwald919497e2003-01-19 16:23:59 +00001344 self.assertRaises(TypeError, zip, None)
1345 class G:
1346 pass
1347 self.assertRaises(TypeError, zip, a, G())
1348
1349 # Make sure zip doesn't try to allocate a billion elements for the
1350 # result list when one of its arguments doesn't say how long it is.
1351 # A MemoryError is the most likely failure mode.
1352 class SequenceWithoutALength:
1353 def __getitem__(self, i):
1354 if i == 5:
1355 raise IndexError
1356 else:
1357 return i
1358 self.assertEqual(
1359 zip(SequenceWithoutALength(), xrange(2**30)),
1360 list(enumerate(range(5)))
1361 )
1362
1363 class BadSeq:
1364 def __getitem__(self, i):
1365 if i == 5:
1366 raise ValueError
1367 else:
1368 return i
1369 self.assertRaises(ValueError, zip, BadSeq(), BadSeq())
1370
Eric Smitha9f7d622008-02-17 19:46:49 +00001371 def test_format(self):
1372 # Test the basic machinery of the format() builtin. Don't test
1373 # the specifics of the various formatters
1374 self.assertEqual(format(3, ''), '3')
1375
1376 # Returns some classes to use for various tests. There's
1377 # an old-style version, and a new-style version
1378 def classes_new():
1379 class A(object):
1380 def __init__(self, x):
1381 self.x = x
1382 def __format__(self, format_spec):
1383 return str(self.x) + format_spec
1384 class DerivedFromA(A):
1385 pass
1386
1387 class Simple(object): pass
1388 class DerivedFromSimple(Simple):
1389 def __init__(self, x):
1390 self.x = x
1391 def __format__(self, format_spec):
1392 return str(self.x) + format_spec
1393 class DerivedFromSimple2(DerivedFromSimple): pass
1394 return A, DerivedFromA, DerivedFromSimple, DerivedFromSimple2
1395
1396 # In 3.0, classes_classic has the same meaning as classes_new
1397 def classes_classic():
1398 class A:
1399 def __init__(self, x):
1400 self.x = x
1401 def __format__(self, format_spec):
1402 return str(self.x) + format_spec
1403 class DerivedFromA(A):
1404 pass
1405
1406 class Simple: pass
1407 class DerivedFromSimple(Simple):
1408 def __init__(self, x):
1409 self.x = x
1410 def __format__(self, format_spec):
1411 return str(self.x) + format_spec
1412 class DerivedFromSimple2(DerivedFromSimple): pass
1413 return A, DerivedFromA, DerivedFromSimple, DerivedFromSimple2
1414
1415 def class_test(A, DerivedFromA, DerivedFromSimple, DerivedFromSimple2):
1416 self.assertEqual(format(A(3), 'spec'), '3spec')
1417 self.assertEqual(format(DerivedFromA(4), 'spec'), '4spec')
1418 self.assertEqual(format(DerivedFromSimple(5), 'abc'), '5abc')
1419 self.assertEqual(format(DerivedFromSimple2(10), 'abcdef'),
1420 '10abcdef')
1421
1422 class_test(*classes_new())
1423 class_test(*classes_classic())
1424
1425 def empty_format_spec(value):
1426 # test that:
1427 # format(x, '') == str(x)
1428 # format(x) == str(x)
1429 self.assertEqual(format(value, ""), str(value))
1430 self.assertEqual(format(value), str(value))
1431
1432 # for builtin types, format(x, "") == str(x)
1433 empty_format_spec(17**13)
1434 empty_format_spec(1.0)
1435 empty_format_spec(3.1415e104)
1436 empty_format_spec(-3.1415e104)
1437 empty_format_spec(3.1415e-104)
1438 empty_format_spec(-3.1415e-104)
1439 empty_format_spec(object)
1440 empty_format_spec(None)
1441
1442 # TypeError because self.__format__ returns the wrong type
1443 class BadFormatResult:
1444 def __format__(self, format_spec):
1445 return 1.0
1446 self.assertRaises(TypeError, format, BadFormatResult(), "")
1447
1448 # TypeError because format_spec is not unicode or str
1449 self.assertRaises(TypeError, format, object(), 4)
1450 self.assertRaises(TypeError, format, object(), object())
1451
1452 # tests for object.__format__ really belong elsewhere, but
1453 # there's no good place to put them
1454 x = object().__format__('')
1455 self.assert_(x.startswith('<object object at'))
1456
1457 # first argument to object.__format__ must be string
1458 self.assertRaises(TypeError, object().__format__, 3)
1459 self.assertRaises(TypeError, object().__format__, object())
1460 self.assertRaises(TypeError, object().__format__, None)
1461
1462 # make sure we can take a subclass of str as a format spec
1463 class DerivedFromStr(str): pass
1464 self.assertEqual(format(0, DerivedFromStr('10')), ' 0')
1465
Eric Smithfb0742f2008-02-22 17:43:17 +00001466 def test_bin(self):
1467 self.assertEqual(bin(0), '0b0')
1468 self.assertEqual(bin(1), '0b1')
1469 self.assertEqual(bin(-1), '-0b1')
1470 self.assertEqual(bin(2**65), '0b1' + '0' * 65)
1471 self.assertEqual(bin(2**65-1), '0b' + '1' * 65)
1472 self.assertEqual(bin(-(2**65)), '-0b1' + '0' * 65)
1473 self.assertEqual(bin(-(2**65-1)), '-0b' + '1' * 65)
1474
Georg Brandl11a81b22009-07-22 12:03:09 +00001475 def test_bytearray_translate(self):
1476 x = bytearray("abc")
1477 self.assertRaises(ValueError, x.translate, "1", 1)
1478 self.assertRaises(TypeError, x.translate, "1"*256, 1)
1479
Eric Smithce584d42008-02-21 20:17:08 +00001480class TestSorted(unittest.TestCase):
1481
1482 def test_basic(self):
1483 data = range(100)
1484 copy = data[:]
1485 random.shuffle(copy)
1486 self.assertEqual(data, sorted(copy))
1487 self.assertNotEqual(data, copy)
1488
1489 data.reverse()
1490 random.shuffle(copy)
1491 self.assertEqual(data, sorted(copy, cmp=lambda x, y: cmp(y,x)))
1492 self.assertNotEqual(data, copy)
1493 random.shuffle(copy)
1494 self.assertEqual(data, sorted(copy, key=lambda x: -x))
1495 self.assertNotEqual(data, copy)
1496 random.shuffle(copy)
1497 self.assertEqual(data, sorted(copy, reverse=1))
1498 self.assertNotEqual(data, copy)
1499
1500 def test_inputtypes(self):
1501 s = 'abracadabra'
1502 types = [list, tuple]
1503 if have_unicode:
1504 types.insert(0, unicode)
1505 for T in types:
1506 self.assertEqual(sorted(s), sorted(T(s)))
1507
1508 s = ''.join(dict.fromkeys(s).keys()) # unique letters only
1509 types = [set, frozenset, list, tuple, dict.fromkeys]
1510 if have_unicode:
1511 types.insert(0, unicode)
1512 for T in types:
1513 self.assertEqual(sorted(s), sorted(T(s)))
1514
1515 def test_baddecorator(self):
1516 data = 'The quick Brown fox Jumped over The lazy Dog'.split()
1517 self.assertRaises(TypeError, sorted, data, None, lambda x,y: 0)
1518
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001519def test_main(verbose=None):
1520 test_classes = (BuiltinTest, TestSorted)
1521
1522 run_unittest(*test_classes)
1523
1524 # verify reference counting
1525 if verbose and hasattr(sys, "gettotalrefcount"):
1526 import gc
1527 counts = [None] * 5
1528 for i in xrange(len(counts)):
1529 run_unittest(*test_classes)
1530 gc.collect()
1531 counts[i] = sys.gettotalrefcount()
1532 print counts
1533
Walter Dörwald919497e2003-01-19 16:23:59 +00001534
1535if __name__ == "__main__":
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001536 test_main(verbose=True)