blob: 41f13150c87c13421f098d9e4ca5cc99305a2dfc [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
Mark Dickinsonf2637242009-11-09 17:45:40 +00003import platform
Ezio Melottia65e2af2010-08-02 19:56:05 +00004import unittest
5import warnings
6from test.test_support import (fcmp, have_unicode, TESTFN, unlink,
7 run_unittest, _check_py3k_warnings, check_warnings)
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00008from operator import neg
Guido van Rossum3bead091992-01-27 17:00:37 +00009
Ezio Melottia65e2af2010-08-02 19:56:05 +000010import sys, cStringIO, random, UserDict
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +000011# count the number of test runs.
12# used to skip running test_execfile() multiple times
Georg Brandl23016272009-10-27 22:57:25 +000013# and to create unique strings to intern in test_intern()
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +000014numruns = 0
15
Walter Dörwald919497e2003-01-19 16:23:59 +000016class Squares:
Guido van Rossum3bead091992-01-27 17:00:37 +000017
Walter Dörwald919497e2003-01-19 16:23:59 +000018 def __init__(self, max):
19 self.max = max
20 self.sofar = []
21
22 def __len__(self): return len(self.sofar)
23
24 def __getitem__(self, i):
25 if not 0 <= i < self.max: raise IndexError
26 n = len(self.sofar)
27 while n <= i:
28 self.sofar.append(n*n)
29 n += 1
30 return self.sofar[i]
31
32class StrSquares:
33
34 def __init__(self, max):
35 self.max = max
36 self.sofar = []
37
38 def __len__(self):
39 return len(self.sofar)
40
41 def __getitem__(self, i):
42 if not 0 <= i < self.max:
43 raise IndexError
44 n = len(self.sofar)
45 while n <= i:
46 self.sofar.append(str(n*n))
47 n += 1
48 return self.sofar[i]
49
50class BitBucket:
51 def write(self, line):
52 pass
53
Walter Dörwald919497e2003-01-19 16:23:59 +000054
Raymond Hettinger96229b12005-03-11 06:49:40 +000055class TestFailingBool:
56 def __nonzero__(self):
57 raise RuntimeError
58
59class TestFailingIter:
60 def __iter__(self):
61 raise RuntimeError
62
Walter Dörwald919497e2003-01-19 16:23:59 +000063class BuiltinTest(unittest.TestCase):
64
65 def test_import(self):
66 __import__('sys')
67 __import__('time')
68 __import__('string')
Georg Brandl5240d742007-03-13 20:46:32 +000069 __import__(name='sys')
70 __import__(name='time', level=0)
Walter Dörwald919497e2003-01-19 16:23:59 +000071 self.assertRaises(ImportError, __import__, 'spamspam')
72 self.assertRaises(TypeError, __import__, 1, 2, 3, 4)
Thomas Wouters8ddab272006-04-04 16:17:02 +000073 self.assertRaises(ValueError, __import__, '')
Georg Brandl5240d742007-03-13 20:46:32 +000074 self.assertRaises(TypeError, __import__, 'sys', name='sys')
Walter Dörwald919497e2003-01-19 16:23:59 +000075
76 def test_abs(self):
77 # int
78 self.assertEqual(abs(0), 0)
79 self.assertEqual(abs(1234), 1234)
80 self.assertEqual(abs(-1234), 1234)
Martin v. Löwis820d6ac2006-10-04 05:47:34 +000081 self.assertTrue(abs(-sys.maxint-1) > 0)
Walter Dörwald919497e2003-01-19 16:23:59 +000082 # float
83 self.assertEqual(abs(0.0), 0.0)
84 self.assertEqual(abs(3.14), 3.14)
85 self.assertEqual(abs(-3.14), 3.14)
86 # long
87 self.assertEqual(abs(0L), 0L)
88 self.assertEqual(abs(1234L), 1234L)
89 self.assertEqual(abs(-1234L), 1234L)
90 # str
91 self.assertRaises(TypeError, abs, 'a')
92
Raymond Hettinger96229b12005-03-11 06:49:40 +000093 def test_all(self):
94 self.assertEqual(all([2, 4, 6]), True)
95 self.assertEqual(all([2, None, 6]), False)
96 self.assertRaises(RuntimeError, all, [2, TestFailingBool(), 6])
97 self.assertRaises(RuntimeError, all, TestFailingIter())
98 self.assertRaises(TypeError, all, 10) # Non-iterable
99 self.assertRaises(TypeError, all) # No args
100 self.assertRaises(TypeError, all, [2, 4, 6], []) # Too many args
101 self.assertEqual(all([]), True) # Empty iterator
102 S = [50, 60]
103 self.assertEqual(all(x > 42 for x in S), True)
104 S = [50, 40, 60]
105 self.assertEqual(all(x > 42 for x in S), False)
106
107 def test_any(self):
108 self.assertEqual(any([None, None, None]), False)
109 self.assertEqual(any([None, 4, None]), True)
110 self.assertRaises(RuntimeError, any, [None, TestFailingBool(), 6])
111 self.assertRaises(RuntimeError, all, TestFailingIter())
112 self.assertRaises(TypeError, any, 10) # Non-iterable
113 self.assertRaises(TypeError, any) # No args
114 self.assertRaises(TypeError, any, [2, 4, 6], []) # Too many args
115 self.assertEqual(any([]), False) # Empty iterator
116 S = [40, 60, 30]
117 self.assertEqual(any(x > 42 for x in S), True)
118 S = [10, 20, 30]
119 self.assertEqual(any(x > 42 for x in S), False)
120
Armin Rigo7ccbca92006-10-04 12:17:45 +0000121 def test_neg(self):
122 x = -sys.maxint-1
123 self.assert_(isinstance(x, int))
124 self.assertEqual(-x, sys.maxint+1)
125
Walter Dörwald919497e2003-01-19 16:23:59 +0000126 def test_apply(self):
127 def f0(*args):
128 self.assertEqual(args, ())
129 def f1(a1):
130 self.assertEqual(a1, 1)
131 def f2(a1, a2):
132 self.assertEqual(a1, 1)
133 self.assertEqual(a2, 2)
134 def f3(a1, a2, a3):
135 self.assertEqual(a1, 1)
136 self.assertEqual(a2, 2)
137 self.assertEqual(a3, 3)
138 apply(f0, ())
139 apply(f1, (1,))
140 apply(f2, (1, 2))
141 apply(f3, (1, 2, 3))
142
143 # A PyCFunction that takes only positional parameters should allow an
144 # empty keyword dictionary to pass without a complaint, but raise a
145 # TypeError if the dictionary is non-empty.
146 apply(id, (1,), {})
147 self.assertRaises(TypeError, apply, id, (1,), {"foo": 1})
148 self.assertRaises(TypeError, apply)
149 self.assertRaises(TypeError, apply, id, 42)
150 self.assertRaises(TypeError, apply, id, (42,), 42)
151
152 def test_callable(self):
153 self.assert_(callable(len))
154 def f(): pass
155 self.assert_(callable(f))
156 class C:
157 def meth(self): pass
158 self.assert_(callable(C))
159 x = C()
160 self.assert_(callable(x.meth))
161 self.assert_(not callable(x))
162 class D(C):
163 def __call__(self): pass
164 y = D()
165 self.assert_(callable(y))
166 y()
167
168 def test_chr(self):
169 self.assertEqual(chr(32), ' ')
170 self.assertEqual(chr(65), 'A')
171 self.assertEqual(chr(97), 'a')
172 self.assertEqual(chr(0xff), '\xff')
173 self.assertRaises(ValueError, chr, 256)
174 self.assertRaises(TypeError, chr)
175
176 def test_cmp(self):
177 self.assertEqual(cmp(-1, 1), -1)
178 self.assertEqual(cmp(1, -1), 1)
179 self.assertEqual(cmp(1, 1), 0)
Armin Rigo2b3eb402003-10-28 12:05:48 +0000180 # verify that circular objects are not handled
Walter Dörwald919497e2003-01-19 16:23:59 +0000181 a = []; a.append(a)
182 b = []; b.append(b)
183 from UserList import UserList
184 c = UserList(); c.append(c)
Armin Rigo2b3eb402003-10-28 12:05:48 +0000185 self.assertRaises(RuntimeError, cmp, a, b)
186 self.assertRaises(RuntimeError, cmp, b, c)
187 self.assertRaises(RuntimeError, cmp, c, a)
188 self.assertRaises(RuntimeError, cmp, a, c)
189 # okay, now break the cycles
Walter Dörwald919497e2003-01-19 16:23:59 +0000190 a.pop(); b.pop(); c.pop()
191 self.assertRaises(TypeError, cmp)
192
193 def test_coerce(self):
194 self.assert_(not fcmp(coerce(1, 1.1), (1.0, 1.1)))
195 self.assertEqual(coerce(1, 1L), (1L, 1L))
196 self.assert_(not fcmp(coerce(1L, 1.1), (1.0, 1.1)))
197 self.assertRaises(TypeError, coerce)
198 class BadNumber:
199 def __coerce__(self, other):
200 raise ValueError
201 self.assertRaises(ValueError, coerce, 42, BadNumber())
Neal Norwitzabcb0c02003-01-28 19:21:24 +0000202 self.assertRaises(OverflowError, coerce, 0.5, int("12345" * 1000))
Walter Dörwald919497e2003-01-19 16:23:59 +0000203
204 def test_compile(self):
205 compile('print 1\n', '', 'exec')
Just van Rossumf032f862003-02-09 20:38:48 +0000206 bom = '\xef\xbb\xbf'
207 compile(bom + 'print 1\n', '', 'exec')
Georg Brandl5240d742007-03-13 20:46:32 +0000208 compile(source='pass', filename='?', mode='exec')
209 compile(dont_inherit=0, filename='tmp', source='0', mode='eval')
210 compile('pass', '?', dont_inherit=1, mode='exec')
Walter Dörwald919497e2003-01-19 16:23:59 +0000211 self.assertRaises(TypeError, compile)
212 self.assertRaises(ValueError, compile, 'print 42\n', '<string>', 'badmode')
213 self.assertRaises(ValueError, compile, 'print 42\n', '<string>', 'single', 0xff)
Neal Norwitzfcf44352005-11-27 20:37:43 +0000214 self.assertRaises(TypeError, compile, chr(0), 'f', 'exec')
Georg Brandl5240d742007-03-13 20:46:32 +0000215 self.assertRaises(TypeError, compile, 'pass', '?', 'exec',
216 mode='eval', source='0', filename='tmp')
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000217 if have_unicode:
218 compile(unicode('print u"\xc3\xa5"\n', 'utf8'), '', 'exec')
Neal Norwitzfcf44352005-11-27 20:37:43 +0000219 self.assertRaises(TypeError, compile, unichr(0), 'f', 'exec')
220 self.assertRaises(ValueError, compile, unicode('a = 1'), 'f', 'bad')
Walter Dörwald919497e2003-01-19 16:23:59 +0000221
Georg Brandl5240d742007-03-13 20:46:32 +0000222
Walter Dörwald919497e2003-01-19 16:23:59 +0000223 def test_delattr(self):
224 import sys
225 sys.spam = 1
226 delattr(sys, 'spam')
227 self.assertRaises(TypeError, delattr)
228
229 def test_dir(self):
Georg Brandl871f1bc2007-03-12 13:17:36 +0000230 # dir(wrong number of arguments)
Walter Dörwald919497e2003-01-19 16:23:59 +0000231 self.assertRaises(TypeError, dir, 42, 42)
232
Georg Brandl871f1bc2007-03-12 13:17:36 +0000233 # dir() - local scope
234 local_var = 1
235 self.assert_('local_var' in dir())
236
237 # dir(module)
238 import sys
239 self.assert_('exit' in dir(sys))
240
241 # dir(module_with_invalid__dict__)
242 import types
243 class Foo(types.ModuleType):
244 __dict__ = 8
245 f = Foo("foo")
246 self.assertRaises(TypeError, dir, f)
247
248 # dir(type)
249 self.assert_("strip" in dir(str))
250 self.assert_("__mro__" not in dir(str))
251
252 # dir(obj)
253 class Foo(object):
254 def __init__(self):
255 self.x = 7
256 self.y = 8
257 self.z = 9
258 f = Foo()
259 self.assert_("y" in dir(f))
260
261 # dir(obj_no__dict__)
262 class Foo(object):
263 __slots__ = []
264 f = Foo()
265 self.assert_("__repr__" in dir(f))
266
267 # dir(obj_no__class__with__dict__)
268 # (an ugly trick to cause getattr(f, "__class__") to fail)
269 class Foo(object):
270 __slots__ = ["__class__", "__dict__"]
271 def __init__(self):
272 self.bar = "wow"
273 f = Foo()
274 self.assert_("__repr__" not in dir(f))
275 self.assert_("bar" in dir(f))
276
277 # dir(obj_using __dir__)
278 class Foo(object):
279 def __dir__(self):
280 return ["kan", "ga", "roo"]
281 f = Foo()
282 self.assert_(dir(f) == ["ga", "kan", "roo"])
283
284 # dir(obj__dir__not_list)
285 class Foo(object):
286 def __dir__(self):
287 return 7
288 f = Foo()
289 self.assertRaises(TypeError, dir, f)
290
Walter Dörwald919497e2003-01-19 16:23:59 +0000291 def test_divmod(self):
292 self.assertEqual(divmod(12, 7), (1, 5))
293 self.assertEqual(divmod(-12, 7), (-2, 2))
294 self.assertEqual(divmod(12, -7), (-2, -2))
295 self.assertEqual(divmod(-12, -7), (1, -5))
296
297 self.assertEqual(divmod(12L, 7L), (1L, 5L))
298 self.assertEqual(divmod(-12L, 7L), (-2L, 2L))
299 self.assertEqual(divmod(12L, -7L), (-2L, -2L))
300 self.assertEqual(divmod(-12L, -7L), (1L, -5L))
301
302 self.assertEqual(divmod(12, 7L), (1, 5L))
303 self.assertEqual(divmod(-12, 7L), (-2, 2L))
304 self.assertEqual(divmod(12L, -7), (-2L, -2))
305 self.assertEqual(divmod(-12L, -7), (1L, -5))
306
Raymond Hettinger5ea7e312004-09-30 07:47:20 +0000307 self.assertEqual(divmod(-sys.maxint-1, -1),
308 (sys.maxint+1, 0))
309
Walter Dörwald919497e2003-01-19 16:23:59 +0000310 self.assert_(not fcmp(divmod(3.25, 1.0), (3.0, 0.25)))
311 self.assert_(not fcmp(divmod(-3.25, 1.0), (-4.0, 0.75)))
312 self.assert_(not fcmp(divmod(3.25, -1.0), (-4.0, -0.75)))
313 self.assert_(not fcmp(divmod(-3.25, -1.0), (3.0, -0.25)))
314
315 self.assertRaises(TypeError, divmod)
316
317 def test_eval(self):
318 self.assertEqual(eval('1+1'), 2)
319 self.assertEqual(eval(' 1+1\n'), 2)
320 globals = {'a': 1, 'b': 2}
321 locals = {'b': 200, 'c': 300}
322 self.assertEqual(eval('a', globals) , 1)
323 self.assertEqual(eval('a', globals, locals), 1)
324 self.assertEqual(eval('b', globals, locals), 200)
325 self.assertEqual(eval('c', globals, locals), 300)
326 if have_unicode:
327 self.assertEqual(eval(unicode('1+1')), 2)
328 self.assertEqual(eval(unicode(' 1+1\n')), 2)
329 globals = {'a': 1, 'b': 2}
330 locals = {'b': 200, 'c': 300}
331 if have_unicode:
332 self.assertEqual(eval(unicode('a'), globals), 1)
333 self.assertEqual(eval(unicode('a'), globals, locals), 1)
334 self.assertEqual(eval(unicode('b'), globals, locals), 200)
335 self.assertEqual(eval(unicode('c'), globals, locals), 300)
Just van Rossumf032f862003-02-09 20:38:48 +0000336 bom = '\xef\xbb\xbf'
337 self.assertEqual(eval(bom + 'a', globals, locals), 1)
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000338 self.assertEqual(eval(unicode('u"\xc3\xa5"', 'utf8'), globals),
339 unicode('\xc3\xa5', 'utf8'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000340 self.assertRaises(TypeError, eval)
341 self.assertRaises(TypeError, eval, ())
342
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000343 def test_general_eval(self):
344 # Tests that general mappings can be used for the locals argument
345
346 class M:
347 "Test mapping interface versus possible calls from eval()."
348 def __getitem__(self, key):
349 if key == 'a':
350 return 12
351 raise KeyError
352 def keys(self):
353 return list('xyz')
354
355 m = M()
356 g = globals()
357 self.assertEqual(eval('a', g, m), 12)
358 self.assertRaises(NameError, eval, 'b', g, m)
359 self.assertEqual(eval('dir()', g, m), list('xyz'))
360 self.assertEqual(eval('globals()', g, m), g)
361 self.assertEqual(eval('locals()', g, m), m)
Raymond Hettinger513ffe82004-07-06 13:44:41 +0000362 self.assertRaises(TypeError, eval, 'a', m)
Raymond Hettinger66bd2332004-08-02 08:30:07 +0000363 class A:
364 "Non-mapping"
365 pass
366 m = A()
367 self.assertRaises(TypeError, eval, 'a', g, m)
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000368
369 # Verify that dict subclasses work as well
370 class D(dict):
371 def __getitem__(self, key):
372 if key == 'a':
373 return 12
374 return dict.__getitem__(self, key)
375 def keys(self):
376 return list('xyz')
377
378 d = D()
379 self.assertEqual(eval('a', g, d), 12)
380 self.assertRaises(NameError, eval, 'b', g, d)
381 self.assertEqual(eval('dir()', g, d), list('xyz'))
382 self.assertEqual(eval('globals()', g, d), g)
383 self.assertEqual(eval('locals()', g, d), d)
384
385 # Verify locals stores (used by list comps)
386 eval('[locals() for i in (2,3)]', g, d)
387 eval('[locals() for i in (2,3)]', g, UserDict.UserDict())
388
389 class SpreadSheet:
390 "Sample application showing nested, calculated lookups."
391 _cells = {}
392 def __setitem__(self, key, formula):
393 self._cells[key] = formula
Martin Blais215f13d2006-06-06 12:46:55 +0000394 def __getitem__(self, key):
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000395 return eval(self._cells[key], globals(), self)
396
397 ss = SpreadSheet()
398 ss['a1'] = '5'
399 ss['a2'] = 'a1*6'
400 ss['a3'] = 'a2*7'
401 self.assertEqual(ss['a3'], 210)
402
Raymond Hettinger2a7dede2004-08-07 04:55:30 +0000403 # Verify that dir() catches a non-list returned by eval
404 # SF bug #1004669
405 class C:
406 def __getitem__(self, item):
407 raise KeyError(item)
408 def keys(self):
409 return 'a'
410 self.assertRaises(TypeError, eval, 'dir()', globals(), C())
411
Walter Dörwald919497e2003-01-19 16:23:59 +0000412 # Done outside of the method test_z to get the correct scope
413 z = 0
414 f = open(TESTFN, 'w')
415 f.write('z = z+1\n')
416 f.write('z = z*2\n')
417 f.close()
Ezio Melottia65e2af2010-08-02 19:56:05 +0000418 with _check_py3k_warnings(("execfile.. not supported in 3.x",
419 DeprecationWarning)):
420 execfile(TESTFN)
Walter Dörwald919497e2003-01-19 16:23:59 +0000421
422 def test_execfile(self):
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +0000423 global numruns
424 if numruns:
425 return
426 numruns += 1
Tim Peters7f061872004-12-07 21:17:46 +0000427
Walter Dörwald919497e2003-01-19 16:23:59 +0000428 globals = {'a': 1, 'b': 2}
429 locals = {'b': 200, 'c': 300}
430
431 self.assertEqual(self.__class__.z, 2)
432 globals['z'] = 0
433 execfile(TESTFN, globals)
434 self.assertEqual(globals['z'], 2)
435 locals['z'] = 0
436 execfile(TESTFN, globals, locals)
437 self.assertEqual(locals['z'], 2)
Raymond Hettinger66bd2332004-08-02 08:30:07 +0000438
439 class M:
440 "Test mapping interface versus possible calls from execfile()."
441 def __init__(self):
442 self.z = 10
443 def __getitem__(self, key):
444 if key == 'z':
445 return self.z
446 raise KeyError
447 def __setitem__(self, key, value):
448 if key == 'z':
449 self.z = value
450 return
451 raise KeyError
452
453 locals = M()
454 locals['z'] = 0
455 execfile(TESTFN, globals, locals)
456 self.assertEqual(locals['z'], 2)
457
Walter Dörwald919497e2003-01-19 16:23:59 +0000458 unlink(TESTFN)
459 self.assertRaises(TypeError, execfile)
Neal Norwitzfcf44352005-11-27 20:37:43 +0000460 self.assertRaises(TypeError, execfile, TESTFN, {}, ())
Walter Dörwald919497e2003-01-19 16:23:59 +0000461 import os
462 self.assertRaises(IOError, execfile, os.curdir)
463 self.assertRaises(IOError, execfile, "I_dont_exist")
464
465 def test_filter(self):
466 self.assertEqual(filter(lambda c: 'a' <= c <= 'z', 'Hello World'), 'elloorld')
467 self.assertEqual(filter(None, [1, 'hello', [], [3], '', None, 9, 0]), [1, 'hello', [3], 9])
468 self.assertEqual(filter(lambda x: x > 0, [1, -3, 9, 0, 2]), [1, 9, 2])
469 self.assertEqual(filter(None, Squares(10)), [1, 4, 9, 16, 25, 36, 49, 64, 81])
470 self.assertEqual(filter(lambda x: x%2, Squares(10)), [1, 9, 25, 49, 81])
471 def identity(item):
472 return 1
473 filter(identity, Squares(5))
474 self.assertRaises(TypeError, filter)
475 class BadSeq(object):
Tim Petersf2715e02003-02-19 02:35:07 +0000476 def __getitem__(self, index):
477 if index<4:
478 return 42
479 raise ValueError
Walter Dörwald919497e2003-01-19 16:23:59 +0000480 self.assertRaises(ValueError, filter, lambda x: x, BadSeq())
481 def badfunc():
482 pass
483 self.assertRaises(TypeError, filter, badfunc, range(5))
484
Walter Dörwaldbf517072003-01-27 15:57:14 +0000485 # test bltinmodule.c::filtertuple()
Walter Dörwald919497e2003-01-19 16:23:59 +0000486 self.assertEqual(filter(None, (1, 2)), (1, 2))
487 self.assertEqual(filter(lambda x: x>=3, (1, 2, 3, 4)), (3, 4))
488 self.assertRaises(TypeError, filter, 42, (1, 2))
489
Walter Dörwaldbf517072003-01-27 15:57:14 +0000490 # test bltinmodule.c::filterstring()
Walter Dörwald919497e2003-01-19 16:23:59 +0000491 self.assertEqual(filter(None, "12"), "12")
492 self.assertEqual(filter(lambda x: x>="3", "1234"), "34")
493 self.assertRaises(TypeError, filter, 42, "12")
494 class badstr(str):
495 def __getitem__(self, index):
496 raise ValueError
497 self.assertRaises(ValueError, filter, lambda x: x >="3", badstr("1234"))
Walter Dörwaldbf517072003-01-27 15:57:14 +0000498
Walter Dörwald903f1e02003-02-04 16:28:00 +0000499 class badstr2(str):
500 def __getitem__(self, index):
501 return 42
502 self.assertRaises(TypeError, filter, lambda x: x >=42, badstr2("1234"))
503
504 class weirdstr(str):
505 def __getitem__(self, index):
506 return weirdstr(2*str.__getitem__(self, index))
507 self.assertEqual(filter(lambda x: x>="33", weirdstr("1234")), "3344")
508
Walter Dörwald5e61e242003-02-04 17:04:01 +0000509 class shiftstr(str):
510 def __getitem__(self, index):
511 return chr(ord(str.__getitem__(self, index))+1)
512 self.assertEqual(filter(lambda x: x>="3", shiftstr("1234")), "345")
513
Martin v. Löwis8afd7572003-01-25 22:46:11 +0000514 if have_unicode:
Walter Dörwaldbf517072003-01-27 15:57:14 +0000515 # test bltinmodule.c::filterunicode()
Martin v. Löwis8afd7572003-01-25 22:46:11 +0000516 self.assertEqual(filter(None, unicode("12")), unicode("12"))
517 self.assertEqual(filter(lambda x: x>="3", unicode("1234")), unicode("34"))
518 self.assertRaises(TypeError, filter, 42, unicode("12"))
519 self.assertRaises(ValueError, filter, lambda x: x >="3", badstr(unicode("1234")))
Walter Dörwald919497e2003-01-19 16:23:59 +0000520
Walter Dörwald903f1e02003-02-04 16:28:00 +0000521 class badunicode(unicode):
522 def __getitem__(self, index):
523 return 42
524 self.assertRaises(TypeError, filter, lambda x: x >=42, badunicode("1234"))
525
526 class weirdunicode(unicode):
527 def __getitem__(self, index):
528 return weirdunicode(2*unicode.__getitem__(self, index))
529 self.assertEqual(
530 filter(lambda x: x>=unicode("33"), weirdunicode("1234")), unicode("3344"))
531
Walter Dörwald5e61e242003-02-04 17:04:01 +0000532 class shiftunicode(unicode):
533 def __getitem__(self, index):
534 return unichr(ord(unicode.__getitem__(self, index))+1)
535 self.assertEqual(
536 filter(lambda x: x>=unicode("3"), shiftunicode("1234")),
537 unicode("345")
538 )
539
Walter Dörwaldc3da83f2003-02-04 20:24:45 +0000540 def test_filter_subclasses(self):
Walter Dörwaldc8cb5d92003-08-15 17:52:39 +0000541 # test that filter() never returns tuple, str or unicode subclasses
542 # and that the result always goes through __getitem__
543 funcs = (None, bool, lambda x: True)
Walter Dörwaldc3da83f2003-02-04 20:24:45 +0000544 class tuple2(tuple):
Walter Dörwald1918f772003-02-10 13:19:13 +0000545 def __getitem__(self, index):
546 return 2*tuple.__getitem__(self, index)
Walter Dörwaldc3da83f2003-02-04 20:24:45 +0000547 class str2(str):
Walter Dörwald1918f772003-02-10 13:19:13 +0000548 def __getitem__(self, index):
549 return 2*str.__getitem__(self, index)
Walter Dörwaldc3da83f2003-02-04 20:24:45 +0000550 inputs = {
Walter Dörwald8dd19322003-02-10 17:36:40 +0000551 tuple2: {(): (), (1, 2, 3): (2, 4, 6)},
Walter Dörwald1918f772003-02-10 13:19:13 +0000552 str2: {"": "", "123": "112233"}
Walter Dörwaldc3da83f2003-02-04 20:24:45 +0000553 }
554 if have_unicode:
555 class unicode2(unicode):
Walter Dörwald1918f772003-02-10 13:19:13 +0000556 def __getitem__(self, index):
557 return 2*unicode.__getitem__(self, index)
558 inputs[unicode2] = {
559 unicode(): unicode(),
560 unicode("123"): unicode("112233")
561 }
Walter Dörwaldc3da83f2003-02-04 20:24:45 +0000562
Walter Dörwald1918f772003-02-10 13:19:13 +0000563 for (cls, inps) in inputs.iteritems():
564 for (inp, exp) in inps.iteritems():
Tim Petersf2715e02003-02-19 02:35:07 +0000565 # make sure the output goes through __getitem__
566 # even if func is None
567 self.assertEqual(
568 filter(funcs[0], cls(inp)),
569 filter(funcs[1], cls(inp))
570 )
571 for func in funcs:
Walter Dörwald1918f772003-02-10 13:19:13 +0000572 outp = filter(func, cls(inp))
573 self.assertEqual(outp, exp)
574 self.assert_(not isinstance(outp, cls))
Walter Dörwaldc3da83f2003-02-04 20:24:45 +0000575
Walter Dörwald919497e2003-01-19 16:23:59 +0000576 def test_getattr(self):
577 import sys
578 self.assert_(getattr(sys, 'stdout') is sys.stdout)
579 self.assertRaises(TypeError, getattr, sys, 1)
580 self.assertRaises(TypeError, getattr, sys, 1, "foo")
581 self.assertRaises(TypeError, getattr)
Walter Dörwald4e41a4b2005-08-03 17:09:04 +0000582 if have_unicode:
583 self.assertRaises(UnicodeError, getattr, sys, unichr(sys.maxunicode))
Walter Dörwald919497e2003-01-19 16:23:59 +0000584
585 def test_hasattr(self):
586 import sys
587 self.assert_(hasattr(sys, 'stdout'))
588 self.assertRaises(TypeError, hasattr, sys, 1)
589 self.assertRaises(TypeError, hasattr)
Walter Dörwald4e41a4b2005-08-03 17:09:04 +0000590 if have_unicode:
591 self.assertRaises(UnicodeError, hasattr, sys, unichr(sys.maxunicode))
Walter Dörwald919497e2003-01-19 16:23:59 +0000592
Benjamin Petersonb9030f42008-05-12 00:41:23 +0000593 # Check that hasattr allows SystemExit and KeyboardInterrupts by
594 class A:
595 def __getattr__(self, what):
596 raise KeyboardInterrupt
597 self.assertRaises(KeyboardInterrupt, hasattr, A(), "b")
598 class B:
599 def __getattr__(self, what):
600 raise SystemExit
601 self.assertRaises(SystemExit, hasattr, B(), "b")
602
Walter Dörwald919497e2003-01-19 16:23:59 +0000603 def test_hash(self):
604 hash(None)
605 self.assertEqual(hash(1), hash(1L))
606 self.assertEqual(hash(1), hash(1.0))
607 hash('spam')
608 if have_unicode:
609 self.assertEqual(hash('spam'), hash(unicode('spam')))
610 hash((0,1,2,3))
611 def f(): pass
612 self.assertRaises(TypeError, hash, [])
613 self.assertRaises(TypeError, hash, {})
Martin v. Löwisab2f8f72006-08-09 07:57:39 +0000614 # Bug 1536021: Allow hash to return long objects
615 class X:
616 def __hash__(self):
617 return 2**100
618 self.assertEquals(type(hash(X())), int)
619 class Y(object):
620 def __hash__(self):
621 return 2**100
622 self.assertEquals(type(hash(Y())), int)
Armin Rigo51fc8c42006-08-09 14:55:26 +0000623 class Z(long):
624 def __hash__(self):
625 return self
626 self.assertEquals(hash(Z(42)), hash(42L))
Walter Dörwald919497e2003-01-19 16:23:59 +0000627
628 def test_hex(self):
629 self.assertEqual(hex(16), '0x10')
630 self.assertEqual(hex(16L), '0x10L')
Guido van Rossum6c9e1302003-11-29 23:52:13 +0000631 self.assertEqual(hex(-16), '-0x10')
Walter Dörwald919497e2003-01-19 16:23:59 +0000632 self.assertEqual(hex(-16L), '-0x10L')
633 self.assertRaises(TypeError, hex, {})
634
635 def test_id(self):
636 id(None)
637 id(1)
638 id(1L)
639 id(1.0)
640 id('spam')
641 id((0,1,2,3))
642 id([0,1,2,3])
643 id({'spam': 1, 'eggs': 2, 'ham': 3})
644
645 # Test input() later, together with raw_input
646
Walter Dörwald919497e2003-01-19 16:23:59 +0000647 def test_intern(self):
648 self.assertRaises(TypeError, intern)
Georg Brandl23016272009-10-27 22:57:25 +0000649 # This fails if the test is run twice with a constant string,
650 # therefore append the run counter
651 s = "never interned before " + str(numruns)
Walter Dörwald919497e2003-01-19 16:23:59 +0000652 self.assert_(intern(s) is s)
653 s2 = s.swapcase().swapcase()
654 self.assert_(intern(s2) is s)
655
Jeremy Hylton4c989dd2004-08-07 19:20:05 +0000656 # Subclasses of string can't be interned, because they
657 # provide too much opportunity for insane things to happen.
658 # We don't want them in the interned dict and if they aren't
659 # actually interned, we don't want to create the appearance
660 # that they are by allowing intern() to succeeed.
661 class S(str):
662 def __hash__(self):
663 return 123
664
665 self.assertRaises(TypeError, intern, S("abc"))
666
667 # It's still safe to pass these strings to routines that
668 # call intern internally, e.g. PyObject_SetAttr().
669 s = S("abc")
670 setattr(s, s, s)
671 self.assertEqual(getattr(s, s), s)
672
Walter Dörwald919497e2003-01-19 16:23:59 +0000673 def test_iter(self):
674 self.assertRaises(TypeError, iter)
675 self.assertRaises(TypeError, iter, 42, 42)
676 lists = [("1", "2"), ["1", "2"], "12"]
677 if have_unicode:
678 lists.append(unicode("12"))
679 for l in lists:
680 i = iter(l)
681 self.assertEqual(i.next(), '1')
682 self.assertEqual(i.next(), '2')
683 self.assertRaises(StopIteration, i.next)
684
685 def test_isinstance(self):
686 class C:
687 pass
688 class D(C):
689 pass
690 class E:
691 pass
692 c = C()
693 d = D()
694 e = E()
695 self.assert_(isinstance(c, C))
696 self.assert_(isinstance(d, C))
697 self.assert_(not isinstance(e, C))
698 self.assert_(not isinstance(c, D))
699 self.assert_(not isinstance('foo', E))
700 self.assertRaises(TypeError, isinstance, E, 'foo')
701 self.assertRaises(TypeError, isinstance)
702
703 def test_issubclass(self):
704 class C:
705 pass
706 class D(C):
707 pass
708 class E:
709 pass
710 c = C()
711 d = D()
712 e = E()
713 self.assert_(issubclass(D, C))
714 self.assert_(issubclass(C, C))
715 self.assert_(not issubclass(C, D))
716 self.assertRaises(TypeError, issubclass, 'foo', E)
717 self.assertRaises(TypeError, issubclass, E, 'foo')
718 self.assertRaises(TypeError, issubclass)
719
720 def test_len(self):
721 self.assertEqual(len('123'), 3)
722 self.assertEqual(len(()), 0)
723 self.assertEqual(len((1, 2, 3, 4)), 4)
724 self.assertEqual(len([1, 2, 3, 4]), 4)
725 self.assertEqual(len({}), 0)
726 self.assertEqual(len({'a':1, 'b': 2}), 2)
727 class BadSeq:
728 def __len__(self):
729 raise ValueError
730 self.assertRaises(ValueError, len, BadSeq())
731
Walter Dörwald919497e2003-01-19 16:23:59 +0000732 def test_map(self):
733 self.assertEqual(
734 map(None, 'hello world'),
735 ['h','e','l','l','o',' ','w','o','r','l','d']
736 )
737 self.assertEqual(
738 map(None, 'abcd', 'efg'),
739 [('a', 'e'), ('b', 'f'), ('c', 'g'), ('d', None)]
740 )
741 self.assertEqual(
742 map(None, range(10)),
743 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
744 )
745 self.assertEqual(
746 map(lambda x: x*x, range(1,4)),
747 [1, 4, 9]
748 )
749 try:
750 from math import sqrt
751 except ImportError:
752 def sqrt(x):
753 return pow(x, 0.5)
754 self.assertEqual(
755 map(lambda x: map(sqrt,x), [[16, 4], [81, 9]]),
756 [[4.0, 2.0], [9.0, 3.0]]
757 )
758 self.assertEqual(
759 map(lambda x, y: x+y, [1,3,2], [9,1,4]),
760 [10, 4, 6]
761 )
762
763 def plus(*v):
764 accu = 0
765 for i in v: accu = accu + i
766 return accu
767 self.assertEqual(
768 map(plus, [1, 3, 7]),
769 [1, 3, 7]
770 )
771 self.assertEqual(
772 map(plus, [1, 3, 7], [4, 9, 2]),
773 [1+4, 3+9, 7+2]
774 )
775 self.assertEqual(
776 map(plus, [1, 3, 7], [4, 9, 2], [1, 1, 0]),
777 [1+4+1, 3+9+1, 7+2+0]
778 )
779 self.assertEqual(
780 map(None, Squares(10)),
781 [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
782 )
783 self.assertEqual(
784 map(int, Squares(10)),
785 [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
786 )
787 self.assertEqual(
788 map(None, Squares(3), Squares(2)),
789 [(0,0), (1,1), (4,None)]
790 )
791 self.assertEqual(
792 map(max, Squares(3), Squares(2)),
793 [0, 1, 4]
794 )
795 self.assertRaises(TypeError, map)
796 self.assertRaises(TypeError, map, lambda x: x, 42)
797 self.assertEqual(map(None, [42]), [42])
798 class BadSeq:
799 def __getitem__(self, index):
800 raise ValueError
801 self.assertRaises(ValueError, map, lambda x: x, BadSeq())
Neal Norwitzfcf44352005-11-27 20:37:43 +0000802 def badfunc(x):
803 raise RuntimeError
804 self.assertRaises(RuntimeError, map, badfunc, range(5))
Walter Dörwald919497e2003-01-19 16:23:59 +0000805
806 def test_max(self):
807 self.assertEqual(max('123123'), '3')
808 self.assertEqual(max(1, 2, 3), 3)
809 self.assertEqual(max((1, 2, 3, 1, 2, 3)), 3)
810 self.assertEqual(max([1, 2, 3, 1, 2, 3]), 3)
811
812 self.assertEqual(max(1, 2L, 3.0), 3.0)
813 self.assertEqual(max(1L, 2.0, 3), 3)
814 self.assertEqual(max(1.0, 2, 3L), 3L)
815
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +0000816 for stmt in (
817 "max(key=int)", # no args
818 "max(1, key=int)", # single arg not iterable
819 "max(1, 2, keystone=int)", # wrong keyword
820 "max(1, 2, key=int, abc=int)", # two many keywords
821 "max(1, 2, key=1)", # keyfunc is not callable
822 ):
Tim Peters7f061872004-12-07 21:17:46 +0000823 try:
824 exec(stmt) in globals()
825 except TypeError:
826 pass
827 else:
828 self.fail(stmt)
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +0000829
830 self.assertEqual(max((1,), key=neg), 1) # one elem iterable
831 self.assertEqual(max((1,2), key=neg), 1) # two elem iterable
832 self.assertEqual(max(1, 2, key=neg), 1) # two elems
833
834 data = [random.randrange(200) for i in range(100)]
835 keys = dict((elem, random.randrange(50)) for elem in data)
836 f = keys.__getitem__
837 self.assertEqual(max(data, key=f),
838 sorted(reversed(data), key=f)[-1])
839
Walter Dörwald919497e2003-01-19 16:23:59 +0000840 def test_min(self):
841 self.assertEqual(min('123123'), '1')
842 self.assertEqual(min(1, 2, 3), 1)
843 self.assertEqual(min((1, 2, 3, 1, 2, 3)), 1)
844 self.assertEqual(min([1, 2, 3, 1, 2, 3]), 1)
845
846 self.assertEqual(min(1, 2L, 3.0), 1)
847 self.assertEqual(min(1L, 2.0, 3), 1L)
848 self.assertEqual(min(1.0, 2, 3L), 1.0)
849
850 self.assertRaises(TypeError, min)
851 self.assertRaises(TypeError, min, 42)
852 self.assertRaises(ValueError, min, ())
853 class BadSeq:
854 def __getitem__(self, index):
855 raise ValueError
856 self.assertRaises(ValueError, min, BadSeq())
857 class BadNumber:
858 def __cmp__(self, other):
859 raise ValueError
860 self.assertRaises(ValueError, min, (42, BadNumber()))
861
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +0000862 for stmt in (
863 "min(key=int)", # no args
864 "min(1, key=int)", # single arg not iterable
865 "min(1, 2, keystone=int)", # wrong keyword
866 "min(1, 2, key=int, abc=int)", # two many keywords
867 "min(1, 2, key=1)", # keyfunc is not callable
868 ):
Tim Peters7f061872004-12-07 21:17:46 +0000869 try:
870 exec(stmt) in globals()
871 except TypeError:
872 pass
873 else:
874 self.fail(stmt)
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +0000875
876 self.assertEqual(min((1,), key=neg), 1) # one elem iterable
877 self.assertEqual(min((1,2), key=neg), 2) # two elem iterable
878 self.assertEqual(min(1, 2, key=neg), 2) # two elems
879
880 data = [random.randrange(200) for i in range(100)]
881 keys = dict((elem, random.randrange(50)) for elem in data)
882 f = keys.__getitem__
883 self.assertEqual(min(data, key=f),
884 sorted(data, key=f)[0])
885
Georg Brandl28e08732008-04-30 19:47:09 +0000886 def test_next(self):
887 it = iter(range(2))
888 self.assertEqual(next(it), 0)
889 self.assertEqual(next(it), 1)
890 self.assertRaises(StopIteration, next, it)
891 self.assertRaises(StopIteration, next, it)
892 self.assertEquals(next(it, 42), 42)
893
894 class Iter(object):
895 def __iter__(self):
896 return self
897 def next(self):
898 raise StopIteration
899
900 it = iter(Iter())
901 self.assertEquals(next(it, 42), 42)
902 self.assertRaises(StopIteration, next, it)
903
904 def gen():
905 yield 1
906 return
907
908 it = gen()
909 self.assertEquals(next(it), 1)
910 self.assertRaises(StopIteration, next, it)
911 self.assertEquals(next(it, 42), 42)
912
Walter Dörwald919497e2003-01-19 16:23:59 +0000913 def test_oct(self):
914 self.assertEqual(oct(100), '0144')
915 self.assertEqual(oct(100L), '0144L')
Guido van Rossum6c9e1302003-11-29 23:52:13 +0000916 self.assertEqual(oct(-100), '-0144')
Walter Dörwald919497e2003-01-19 16:23:59 +0000917 self.assertEqual(oct(-100L), '-0144L')
918 self.assertRaises(TypeError, oct, ())
919
920 def write_testfile(self):
921 # NB the first 4 lines are also used to test input and raw_input, below
922 fp = open(TESTFN, 'w')
923 try:
924 fp.write('1+1\n')
925 fp.write('1+1\n')
926 fp.write('The quick brown fox jumps over the lazy dog')
927 fp.write('.\n')
928 fp.write('Dear John\n')
929 fp.write('XXX'*100)
930 fp.write('YYY'*100)
931 finally:
932 fp.close()
933
934 def test_open(self):
935 self.write_testfile()
936 fp = open(TESTFN, 'r')
937 try:
938 self.assertEqual(fp.readline(4), '1+1\n')
939 self.assertEqual(fp.readline(4), '1+1\n')
940 self.assertEqual(fp.readline(), 'The quick brown fox jumps over the lazy dog.\n')
941 self.assertEqual(fp.readline(4), 'Dear')
942 self.assertEqual(fp.readline(100), ' John\n')
943 self.assertEqual(fp.read(300), 'XXX'*100)
944 self.assertEqual(fp.read(1000), 'YYY'*100)
945 finally:
946 fp.close()
947 unlink(TESTFN)
948
949 def test_ord(self):
950 self.assertEqual(ord(' '), 32)
951 self.assertEqual(ord('A'), 65)
952 self.assertEqual(ord('a'), 97)
953 if have_unicode:
954 self.assertEqual(ord(unichr(sys.maxunicode)), sys.maxunicode)
955 self.assertRaises(TypeError, ord, 42)
Walter Dörwald4e41a4b2005-08-03 17:09:04 +0000956 if have_unicode:
957 self.assertRaises(TypeError, ord, unicode("12"))
Walter Dörwald919497e2003-01-19 16:23:59 +0000958
959 def test_pow(self):
960 self.assertEqual(pow(0,0), 1)
961 self.assertEqual(pow(0,1), 0)
962 self.assertEqual(pow(1,0), 1)
963 self.assertEqual(pow(1,1), 1)
964
965 self.assertEqual(pow(2,0), 1)
966 self.assertEqual(pow(2,10), 1024)
967 self.assertEqual(pow(2,20), 1024*1024)
968 self.assertEqual(pow(2,30), 1024*1024*1024)
969
970 self.assertEqual(pow(-2,0), 1)
971 self.assertEqual(pow(-2,1), -2)
972 self.assertEqual(pow(-2,2), 4)
973 self.assertEqual(pow(-2,3), -8)
974
975 self.assertEqual(pow(0L,0), 1)
976 self.assertEqual(pow(0L,1), 0)
977 self.assertEqual(pow(1L,0), 1)
978 self.assertEqual(pow(1L,1), 1)
979
980 self.assertEqual(pow(2L,0), 1)
981 self.assertEqual(pow(2L,10), 1024)
982 self.assertEqual(pow(2L,20), 1024*1024)
983 self.assertEqual(pow(2L,30), 1024*1024*1024)
984
985 self.assertEqual(pow(-2L,0), 1)
986 self.assertEqual(pow(-2L,1), -2)
987 self.assertEqual(pow(-2L,2), 4)
988 self.assertEqual(pow(-2L,3), -8)
989
990 self.assertAlmostEqual(pow(0.,0), 1.)
991 self.assertAlmostEqual(pow(0.,1), 0.)
992 self.assertAlmostEqual(pow(1.,0), 1.)
993 self.assertAlmostEqual(pow(1.,1), 1.)
994
995 self.assertAlmostEqual(pow(2.,0), 1.)
996 self.assertAlmostEqual(pow(2.,10), 1024.)
997 self.assertAlmostEqual(pow(2.,20), 1024.*1024.)
998 self.assertAlmostEqual(pow(2.,30), 1024.*1024.*1024.)
999
1000 self.assertAlmostEqual(pow(-2.,0), 1.)
1001 self.assertAlmostEqual(pow(-2.,1), -2.)
1002 self.assertAlmostEqual(pow(-2.,2), 4.)
1003 self.assertAlmostEqual(pow(-2.,3), -8.)
1004
1005 for x in 2, 2L, 2.0:
1006 for y in 10, 10L, 10.0:
1007 for z in 1000, 1000L, 1000.0:
1008 if isinstance(x, float) or \
1009 isinstance(y, float) or \
1010 isinstance(z, float):
1011 self.assertRaises(TypeError, pow, x, y, z)
1012 else:
1013 self.assertAlmostEqual(pow(x, y, z), 24.0)
1014
1015 self.assertRaises(TypeError, pow, -1, -2, 3)
1016 self.assertRaises(ValueError, pow, 1, 2, 0)
1017 self.assertRaises(TypeError, pow, -1L, -2L, 3L)
1018 self.assertRaises(ValueError, pow, 1L, 2L, 0L)
Jeffrey Yasskin9871d8f2008-01-05 08:47:13 +00001019 # Will return complex in 3.0:
1020 self.assertRaises(ValueError, pow, -342.43, 0.234)
Walter Dörwald919497e2003-01-19 16:23:59 +00001021
1022 self.assertRaises(TypeError, pow)
1023
1024 def test_range(self):
1025 self.assertEqual(range(3), [0, 1, 2])
1026 self.assertEqual(range(1, 5), [1, 2, 3, 4])
1027 self.assertEqual(range(0), [])
1028 self.assertEqual(range(-3), [])
1029 self.assertEqual(range(1, 10, 3), [1, 4, 7])
1030 self.assertEqual(range(5, -5, -3), [5, 2, -1, -4])
1031
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001032 # Now test range() with longs
1033 self.assertEqual(range(-2**100), [])
1034 self.assertEqual(range(0, -2**100), [])
1035 self.assertEqual(range(0, 2**100, -1), [])
1036 self.assertEqual(range(0, 2**100, -1), [])
1037
1038 a = long(10 * sys.maxint)
1039 b = long(100 * sys.maxint)
1040 c = long(50 * sys.maxint)
1041
1042 self.assertEqual(range(a, a+2), [a, a+1])
1043 self.assertEqual(range(a+2, a, -1L), [a+2, a+1])
1044 self.assertEqual(range(a+4, a, -2), [a+4, a+2])
1045
1046 seq = range(a, b, c)
1047 self.assert_(a in seq)
1048 self.assert_(b not in seq)
1049 self.assertEqual(len(seq), 2)
1050
1051 seq = range(b, a, -c)
1052 self.assert_(b in seq)
1053 self.assert_(a not in seq)
1054 self.assertEqual(len(seq), 2)
1055
1056 seq = range(-a, -b, -c)
1057 self.assert_(-a in seq)
1058 self.assert_(-b not in seq)
1059 self.assertEqual(len(seq), 2)
1060
Walter Dörwald919497e2003-01-19 16:23:59 +00001061 self.assertRaises(TypeError, range)
1062 self.assertRaises(TypeError, range, 1, 2, 3, 4)
1063 self.assertRaises(ValueError, range, 1, 2, 0)
Neal Norwitzfcf44352005-11-27 20:37:43 +00001064 self.assertRaises(ValueError, range, a, a + 1, long(0))
1065
1066 class badzero(int):
1067 def __cmp__(self, other):
1068 raise RuntimeError
Nick Coghlan48361f52008-08-11 15:45:58 +00001069 __hash__ = None # Invalid cmp makes this unhashable
Neal Norwitzfcf44352005-11-27 20:37:43 +00001070 self.assertRaises(RuntimeError, range, a, a + 1, badzero(1))
Walter Dörwald919497e2003-01-19 16:23:59 +00001071
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001072 # Reject floats when it would require PyLongs to represent.
1073 # (smaller floats still accepted, but deprecated)
Ezio Melottia65e2af2010-08-02 19:56:05 +00001074 with check_warnings() as w:
1075 warnings.simplefilter("always")
1076 self.assertRaises(TypeError, range, 1e100, 1e101, 1e101)
1077 self.assertEqual(w.category, DeprecationWarning)
Mark Dickinsone02c9d22010-05-07 13:23:18 +00001078 with check_warnings() as w:
1079 warnings.simplefilter("always")
1080 self.assertEqual(range(1.0), [0])
1081 self.assertEqual(w.category, DeprecationWarning)
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001082
Walter Dörwald357981e2003-04-15 18:59:28 +00001083 self.assertRaises(TypeError, range, 0, "spam")
1084 self.assertRaises(TypeError, range, 0, 42, "spam")
1085
1086 self.assertRaises(OverflowError, range, -sys.maxint, sys.maxint)
1087 self.assertRaises(OverflowError, range, 0, 2*sys.maxint)
1088
Mark Dickinsone02c9d22010-05-07 13:23:18 +00001089 bignum = 2*sys.maxint
1090 smallnum = 42
1091 # Old-style user-defined class with __int__ method
1092 class I0:
1093 def __init__(self, n):
1094 self.n = int(n)
1095 def __int__(self):
1096 return self.n
1097 self.assertEqual(range(I0(bignum), I0(bignum + 1)), [bignum])
1098 self.assertEqual(range(I0(smallnum), I0(smallnum + 1)), [smallnum])
1099
1100 # New-style user-defined class with __int__ method
1101 class I1(object):
1102 def __init__(self, n):
1103 self.n = int(n)
1104 def __int__(self):
1105 return self.n
1106 self.assertEqual(range(I1(bignum), I1(bignum + 1)), [bignum])
1107 self.assertEqual(range(I1(smallnum), I1(smallnum + 1)), [smallnum])
1108
1109 # New-style user-defined class with failing __int__ method
1110 class IX(object):
1111 def __int__(self):
1112 raise RuntimeError
1113 self.assertRaises(RuntimeError, range, IX())
1114
1115 # New-style user-defined class with invalid __int__ method
1116 class IN(object):
1117 def __int__(self):
1118 return "not a number"
1119 self.assertRaises(TypeError, range, IN())
1120
1121 # Exercise various combinations of bad arguments, to check
1122 # refcounting logic
Ezio Melottia65e2af2010-08-02 19:56:05 +00001123 with check_warnings():
1124 self.assertRaises(TypeError, range, 1e100)
Mark Dickinsone02c9d22010-05-07 13:23:18 +00001125
Ezio Melottia65e2af2010-08-02 19:56:05 +00001126 self.assertRaises(TypeError, range, 0, 1e100)
1127 self.assertRaises(TypeError, range, 1e100, 0)
1128 self.assertRaises(TypeError, range, 1e100, 1e100)
Mark Dickinsone02c9d22010-05-07 13:23:18 +00001129
Ezio Melottia65e2af2010-08-02 19:56:05 +00001130 self.assertRaises(TypeError, range, 0, 0, 1e100)
1131 self.assertRaises(TypeError, range, 0, 1e100, 1)
1132 self.assertRaises(TypeError, range, 0, 1e100, 1e100)
1133 self.assertRaises(TypeError, range, 1e100, 0, 1)
1134 self.assertRaises(TypeError, range, 1e100, 0, 1e100)
1135 self.assertRaises(TypeError, range, 1e100, 1e100, 1)
1136 self.assertRaises(TypeError, range, 1e100, 1e100, 1e100)
Mark Dickinsone02c9d22010-05-07 13:23:18 +00001137
Walter Dörwald919497e2003-01-19 16:23:59 +00001138 def test_input_and_raw_input(self):
1139 self.write_testfile()
1140 fp = open(TESTFN, 'r')
1141 savestdin = sys.stdin
1142 savestdout = sys.stdout # Eats the echo
1143 try:
1144 sys.stdin = fp
1145 sys.stdout = BitBucket()
1146 self.assertEqual(input(), 2)
1147 self.assertEqual(input('testing\n'), 2)
1148 self.assertEqual(raw_input(), 'The quick brown fox jumps over the lazy dog.')
1149 self.assertEqual(raw_input('testing\n'), 'Dear John')
Tim Peters8e24a962006-08-09 00:52:26 +00001150
Georg Brandl7e3ba2a2006-08-06 08:23:54 +00001151 # SF 1535165: don't segfault on closed stdin
1152 # sys.stdout must be a regular file for triggering
1153 sys.stdout = savestdout
1154 sys.stdin.close()
Georg Brandld336e982006-08-06 09:17:16 +00001155 self.assertRaises(ValueError, input)
Georg Brandl7e3ba2a2006-08-06 08:23:54 +00001156
1157 sys.stdout = BitBucket()
Walter Dörwald919497e2003-01-19 16:23:59 +00001158 sys.stdin = cStringIO.StringIO("NULL\0")
1159 self.assertRaises(TypeError, input, 42, 42)
1160 sys.stdin = cStringIO.StringIO(" 'whitespace'")
1161 self.assertEqual(input(), 'whitespace')
1162 sys.stdin = cStringIO.StringIO()
1163 self.assertRaises(EOFError, input)
Hye-Shik Changff83c2b2004-02-02 13:39:01 +00001164
1165 # SF 876178: make sure input() respect future options.
1166 sys.stdin = cStringIO.StringIO('1/2')
1167 sys.stdout = cStringIO.StringIO()
1168 exec compile('print input()', 'test_builtin_tmp', 'exec')
1169 sys.stdin.seek(0, 0)
1170 exec compile('from __future__ import division;print input()',
1171 'test_builtin_tmp', 'exec')
1172 sys.stdin.seek(0, 0)
1173 exec compile('print input()', 'test_builtin_tmp', 'exec')
Tim Petersb82cb8d2006-03-28 07:39:22 +00001174 # The result we expect depends on whether new division semantics
1175 # are already in effect.
1176 if 1/2 == 0:
1177 # This test was compiled with old semantics.
1178 expected = ['0', '0.5', '0']
1179 else:
1180 # This test was compiled with new semantics (e.g., -Qnew
1181 # was given on the command line.
1182 expected = ['0.5', '0.5', '0.5']
1183 self.assertEqual(sys.stdout.getvalue().splitlines(), expected)
Hye-Shik Changff83c2b2004-02-02 13:39:01 +00001184
Walter Dörwald919497e2003-01-19 16:23:59 +00001185 del sys.stdout
1186 self.assertRaises(RuntimeError, input, 'prompt')
1187 del sys.stdin
1188 self.assertRaises(RuntimeError, input, 'prompt')
1189 finally:
1190 sys.stdin = savestdin
1191 sys.stdout = savestdout
1192 fp.close()
1193 unlink(TESTFN)
1194
1195 def test_reduce(self):
1196 self.assertEqual(reduce(lambda x, y: x+y, ['a', 'b', 'c'], ''), 'abc')
1197 self.assertEqual(
1198 reduce(lambda x, y: x+y, [['a', 'c'], [], ['d', 'w']], []),
1199 ['a','c','d','w']
1200 )
1201 self.assertEqual(reduce(lambda x, y: x*y, range(2,8), 1), 5040)
1202 self.assertEqual(
1203 reduce(lambda x, y: x*y, range(2,21), 1L),
1204 2432902008176640000L
1205 )
1206 self.assertEqual(reduce(lambda x, y: x+y, Squares(10)), 285)
1207 self.assertEqual(reduce(lambda x, y: x+y, Squares(10), 0), 285)
1208 self.assertEqual(reduce(lambda x, y: x+y, Squares(0), 0), 0)
1209 self.assertRaises(TypeError, reduce)
1210 self.assertRaises(TypeError, reduce, 42, 42)
1211 self.assertRaises(TypeError, reduce, 42, 42, 42)
1212 self.assertEqual(reduce(42, "1"), "1") # func is never called with one item
1213 self.assertEqual(reduce(42, "", "1"), "1") # func is never called with one item
1214 self.assertRaises(TypeError, reduce, 42, (42, 42))
1215
1216 class BadSeq:
1217 def __getitem__(self, index):
1218 raise ValueError
1219 self.assertRaises(ValueError, reduce, 42, BadSeq())
1220
1221 def test_reload(self):
1222 import marshal
1223 reload(marshal)
1224 import string
1225 reload(string)
1226 ## import sys
1227 ## self.assertRaises(ImportError, reload, sys)
1228
1229 def test_repr(self):
1230 self.assertEqual(repr(''), '\'\'')
1231 self.assertEqual(repr(0), '0')
1232 self.assertEqual(repr(0L), '0L')
1233 self.assertEqual(repr(()), '()')
1234 self.assertEqual(repr([]), '[]')
1235 self.assertEqual(repr({}), '{}')
1236 a = []
1237 a.append(a)
1238 self.assertEqual(repr(a), '[[...]]')
1239 a = {}
1240 a[0] = a
1241 self.assertEqual(repr(a), '{0: {...}}')
1242
1243 def test_round(self):
1244 self.assertEqual(round(0.0), 0.0)
Jeffrey Yasskin2f3c16b2008-01-03 02:21:52 +00001245 self.assertEqual(type(round(0.0)), float) # Will be int in 3.0.
Walter Dörwald919497e2003-01-19 16:23:59 +00001246 self.assertEqual(round(1.0), 1.0)
1247 self.assertEqual(round(10.0), 10.0)
1248 self.assertEqual(round(1000000000.0), 1000000000.0)
1249 self.assertEqual(round(1e20), 1e20)
1250
1251 self.assertEqual(round(-1.0), -1.0)
1252 self.assertEqual(round(-10.0), -10.0)
1253 self.assertEqual(round(-1000000000.0), -1000000000.0)
1254 self.assertEqual(round(-1e20), -1e20)
1255
1256 self.assertEqual(round(0.1), 0.0)
1257 self.assertEqual(round(1.1), 1.0)
1258 self.assertEqual(round(10.1), 10.0)
1259 self.assertEqual(round(1000000000.1), 1000000000.0)
1260
1261 self.assertEqual(round(-1.1), -1.0)
1262 self.assertEqual(round(-10.1), -10.0)
1263 self.assertEqual(round(-1000000000.1), -1000000000.0)
1264
1265 self.assertEqual(round(0.9), 1.0)
1266 self.assertEqual(round(9.9), 10.0)
1267 self.assertEqual(round(999999999.9), 1000000000.0)
1268
1269 self.assertEqual(round(-0.9), -1.0)
1270 self.assertEqual(round(-9.9), -10.0)
1271 self.assertEqual(round(-999999999.9), -1000000000.0)
1272
1273 self.assertEqual(round(-8.0, -1), -10.0)
Jeffrey Yasskin2f3c16b2008-01-03 02:21:52 +00001274 self.assertEqual(type(round(-8.0, -1)), float)
1275
1276 self.assertEqual(type(round(-8.0, 0)), float)
1277 self.assertEqual(type(round(-8.0, 1)), float)
1278
Jeffrey Yasskin9871d8f2008-01-05 08:47:13 +00001279 # Check half rounding behaviour.
Jeffrey Yasskin2f3c16b2008-01-03 02:21:52 +00001280 self.assertEqual(round(5.5), 6)
Jeffrey Yasskin9871d8f2008-01-05 08:47:13 +00001281 self.assertEqual(round(6.5), 7)
Jeffrey Yasskin2f3c16b2008-01-03 02:21:52 +00001282 self.assertEqual(round(-5.5), -6)
Jeffrey Yasskin9871d8f2008-01-05 08:47:13 +00001283 self.assertEqual(round(-6.5), -7)
Jeffrey Yasskin2f3c16b2008-01-03 02:21:52 +00001284
1285 # Check behavior on ints
1286 self.assertEqual(round(0), 0)
1287 self.assertEqual(round(8), 8)
1288 self.assertEqual(round(-8), -8)
1289 self.assertEqual(type(round(0)), float) # Will be int in 3.0.
1290 self.assertEqual(type(round(-8, -1)), float)
1291 self.assertEqual(type(round(-8, 0)), float)
1292 self.assertEqual(type(round(-8, 1)), float)
Walter Dörwald919497e2003-01-19 16:23:59 +00001293
Georg Brandlccadf842006-03-31 18:54:53 +00001294 # test new kwargs
1295 self.assertEqual(round(number=-8.0, ndigits=-1), -10.0)
1296
Walter Dörwald919497e2003-01-19 16:23:59 +00001297 self.assertRaises(TypeError, round)
1298
Jeffrey Yasskin2f3c16b2008-01-03 02:21:52 +00001299 # test generic rounding delegation for reals
1300 class TestRound(object):
Jeffrey Yasskin9871d8f2008-01-05 08:47:13 +00001301 def __float__(self):
1302 return 23.0
Jeffrey Yasskin2f3c16b2008-01-03 02:21:52 +00001303
1304 class TestNoRound(object):
1305 pass
1306
1307 self.assertEqual(round(TestRound()), 23)
1308
1309 self.assertRaises(TypeError, round, 1, 2, 3)
Jeffrey Yasskin9871d8f2008-01-05 08:47:13 +00001310 self.assertRaises(TypeError, round, TestNoRound())
Jeffrey Yasskin2f3c16b2008-01-03 02:21:52 +00001311
1312 t = TestNoRound()
Jeffrey Yasskin9871d8f2008-01-05 08:47:13 +00001313 t.__float__ = lambda *args: args
1314 self.assertRaises(TypeError, round, t)
1315 self.assertRaises(TypeError, round, t, 0)
Jeffrey Yasskin2f3c16b2008-01-03 02:21:52 +00001316
Mark Dickinsonf2637242009-11-09 17:45:40 +00001317 def test_round_large(self):
1318 # Issue #1869: integral floats should remain unchanged
1319 self.assertEqual(round(5e15-1), 5e15-1)
1320 self.assertEqual(round(5e15), 5e15)
1321 self.assertEqual(round(5e15+1), 5e15+1)
1322 self.assertEqual(round(5e15+2), 5e15+2)
1323 self.assertEqual(round(5e15+3), 5e15+3)
1324
Walter Dörwald919497e2003-01-19 16:23:59 +00001325 def test_setattr(self):
Tim Petersf2715e02003-02-19 02:35:07 +00001326 setattr(sys, 'spam', 1)
1327 self.assertEqual(sys.spam, 1)
1328 self.assertRaises(TypeError, setattr, sys, 1, 'spam')
1329 self.assertRaises(TypeError, setattr)
Walter Dörwald919497e2003-01-19 16:23:59 +00001330
Alex Martellia70b1912003-04-22 08:12:33 +00001331 def test_sum(self):
1332 self.assertEqual(sum([]), 0)
1333 self.assertEqual(sum(range(2,8)), 27)
1334 self.assertEqual(sum(iter(range(2,8))), 27)
1335 self.assertEqual(sum(Squares(10)), 285)
1336 self.assertEqual(sum(iter(Squares(10))), 285)
1337 self.assertEqual(sum([[1], [2], [3]], []), [1, 2, 3])
1338
1339 self.assertRaises(TypeError, sum)
1340 self.assertRaises(TypeError, sum, 42)
1341 self.assertRaises(TypeError, sum, ['a', 'b', 'c'])
1342 self.assertRaises(TypeError, sum, ['a', 'b', 'c'], '')
1343 self.assertRaises(TypeError, sum, [[1], [2], [3]])
1344 self.assertRaises(TypeError, sum, [{2:3}])
1345 self.assertRaises(TypeError, sum, [{2:3}]*2, {2:3})
1346
1347 class BadSeq:
1348 def __getitem__(self, index):
1349 raise ValueError
1350 self.assertRaises(ValueError, sum, BadSeq())
1351
Walter Dörwald919497e2003-01-19 16:23:59 +00001352 def test_type(self):
1353 self.assertEqual(type(''), type('123'))
1354 self.assertNotEqual(type(''), type(()))
1355
1356 def test_unichr(self):
1357 if have_unicode:
1358 self.assertEqual(unichr(32), unicode(' '))
1359 self.assertEqual(unichr(65), unicode('A'))
1360 self.assertEqual(unichr(97), unicode('a'))
1361 self.assertEqual(
1362 unichr(sys.maxunicode),
1363 unicode('\\U%08x' % (sys.maxunicode), 'unicode-escape')
1364 )
1365 self.assertRaises(ValueError, unichr, sys.maxunicode+1)
1366 self.assertRaises(TypeError, unichr)
Amaury Forgeot d'Arc39fd6722008-07-31 21:28:03 +00001367 self.assertRaises((OverflowError, ValueError), unichr, 2**32)
Walter Dörwald919497e2003-01-19 16:23:59 +00001368
Guido van Rossumfee7b932005-01-16 00:21:28 +00001369 # We don't want self in vars(), so these are static methods
1370
1371 @staticmethod
Walter Dörwald919497e2003-01-19 16:23:59 +00001372 def get_vars_f0():
1373 return vars()
Walter Dörwald919497e2003-01-19 16:23:59 +00001374
Guido van Rossumfee7b932005-01-16 00:21:28 +00001375 @staticmethod
Walter Dörwald919497e2003-01-19 16:23:59 +00001376 def get_vars_f2():
1377 BuiltinTest.get_vars_f0()
1378 a = 1
1379 b = 2
1380 return vars()
Walter Dörwald919497e2003-01-19 16:23:59 +00001381
1382 def test_vars(self):
Raymond Hettingera690a992003-11-16 16:17:49 +00001383 self.assertEqual(set(vars()), set(dir()))
Walter Dörwald919497e2003-01-19 16:23:59 +00001384 import sys
Raymond Hettingera690a992003-11-16 16:17:49 +00001385 self.assertEqual(set(vars(sys)), set(dir(sys)))
Walter Dörwald919497e2003-01-19 16:23:59 +00001386 self.assertEqual(self.get_vars_f0(), {})
1387 self.assertEqual(self.get_vars_f2(), {'a': 1, 'b': 2})
1388 self.assertRaises(TypeError, vars, 42, 42)
1389 self.assertRaises(TypeError, vars, 42)
1390
1391 def test_zip(self):
1392 a = (1, 2, 3)
1393 b = (4, 5, 6)
1394 t = [(1, 4), (2, 5), (3, 6)]
1395 self.assertEqual(zip(a, b), t)
1396 b = [4, 5, 6]
1397 self.assertEqual(zip(a, b), t)
1398 b = (4, 5, 6, 7)
1399 self.assertEqual(zip(a, b), t)
1400 class I:
1401 def __getitem__(self, i):
1402 if i < 0 or i > 2: raise IndexError
1403 return i + 4
1404 self.assertEqual(zip(a, I()), t)
Raymond Hettingereaef6152003-08-02 07:42:57 +00001405 self.assertEqual(zip(), [])
1406 self.assertEqual(zip(*[]), [])
Walter Dörwald919497e2003-01-19 16:23:59 +00001407 self.assertRaises(TypeError, zip, None)
1408 class G:
1409 pass
1410 self.assertRaises(TypeError, zip, a, G())
1411
1412 # Make sure zip doesn't try to allocate a billion elements for the
1413 # result list when one of its arguments doesn't say how long it is.
1414 # A MemoryError is the most likely failure mode.
1415 class SequenceWithoutALength:
1416 def __getitem__(self, i):
1417 if i == 5:
1418 raise IndexError
1419 else:
1420 return i
1421 self.assertEqual(
1422 zip(SequenceWithoutALength(), xrange(2**30)),
1423 list(enumerate(range(5)))
1424 )
1425
1426 class BadSeq:
1427 def __getitem__(self, i):
1428 if i == 5:
1429 raise ValueError
1430 else:
1431 return i
1432 self.assertRaises(ValueError, zip, BadSeq(), BadSeq())
1433
Eric Smitha9f7d622008-02-17 19:46:49 +00001434 def test_format(self):
1435 # Test the basic machinery of the format() builtin. Don't test
1436 # the specifics of the various formatters
1437 self.assertEqual(format(3, ''), '3')
1438
1439 # Returns some classes to use for various tests. There's
1440 # an old-style version, and a new-style version
1441 def classes_new():
1442 class A(object):
1443 def __init__(self, x):
1444 self.x = x
1445 def __format__(self, format_spec):
1446 return str(self.x) + format_spec
1447 class DerivedFromA(A):
1448 pass
1449
1450 class Simple(object): pass
1451 class DerivedFromSimple(Simple):
1452 def __init__(self, x):
1453 self.x = x
1454 def __format__(self, format_spec):
1455 return str(self.x) + format_spec
1456 class DerivedFromSimple2(DerivedFromSimple): pass
1457 return A, DerivedFromA, DerivedFromSimple, DerivedFromSimple2
1458
1459 # In 3.0, classes_classic has the same meaning as classes_new
1460 def classes_classic():
1461 class A:
1462 def __init__(self, x):
1463 self.x = x
1464 def __format__(self, format_spec):
1465 return str(self.x) + format_spec
1466 class DerivedFromA(A):
1467 pass
1468
1469 class Simple: pass
1470 class DerivedFromSimple(Simple):
1471 def __init__(self, x):
1472 self.x = x
1473 def __format__(self, format_spec):
1474 return str(self.x) + format_spec
1475 class DerivedFromSimple2(DerivedFromSimple): pass
1476 return A, DerivedFromA, DerivedFromSimple, DerivedFromSimple2
1477
1478 def class_test(A, DerivedFromA, DerivedFromSimple, DerivedFromSimple2):
1479 self.assertEqual(format(A(3), 'spec'), '3spec')
1480 self.assertEqual(format(DerivedFromA(4), 'spec'), '4spec')
1481 self.assertEqual(format(DerivedFromSimple(5), 'abc'), '5abc')
1482 self.assertEqual(format(DerivedFromSimple2(10), 'abcdef'),
1483 '10abcdef')
1484
1485 class_test(*classes_new())
1486 class_test(*classes_classic())
1487
1488 def empty_format_spec(value):
1489 # test that:
1490 # format(x, '') == str(x)
1491 # format(x) == str(x)
1492 self.assertEqual(format(value, ""), str(value))
1493 self.assertEqual(format(value), str(value))
1494
1495 # for builtin types, format(x, "") == str(x)
1496 empty_format_spec(17**13)
1497 empty_format_spec(1.0)
1498 empty_format_spec(3.1415e104)
1499 empty_format_spec(-3.1415e104)
1500 empty_format_spec(3.1415e-104)
1501 empty_format_spec(-3.1415e-104)
1502 empty_format_spec(object)
1503 empty_format_spec(None)
1504
1505 # TypeError because self.__format__ returns the wrong type
1506 class BadFormatResult:
1507 def __format__(self, format_spec):
1508 return 1.0
1509 self.assertRaises(TypeError, format, BadFormatResult(), "")
1510
1511 # TypeError because format_spec is not unicode or str
1512 self.assertRaises(TypeError, format, object(), 4)
1513 self.assertRaises(TypeError, format, object(), object())
1514
1515 # tests for object.__format__ really belong elsewhere, but
1516 # there's no good place to put them
1517 x = object().__format__('')
1518 self.assert_(x.startswith('<object object at'))
1519
1520 # first argument to object.__format__ must be string
1521 self.assertRaises(TypeError, object().__format__, 3)
1522 self.assertRaises(TypeError, object().__format__, object())
1523 self.assertRaises(TypeError, object().__format__, None)
1524
1525 # make sure we can take a subclass of str as a format spec
1526 class DerivedFromStr(str): pass
1527 self.assertEqual(format(0, DerivedFromStr('10')), ' 0')
1528
Eric Smithfb0742f2008-02-22 17:43:17 +00001529 def test_bin(self):
1530 self.assertEqual(bin(0), '0b0')
1531 self.assertEqual(bin(1), '0b1')
1532 self.assertEqual(bin(-1), '-0b1')
1533 self.assertEqual(bin(2**65), '0b1' + '0' * 65)
1534 self.assertEqual(bin(2**65-1), '0b' + '1' * 65)
1535 self.assertEqual(bin(-(2**65)), '-0b1' + '0' * 65)
1536 self.assertEqual(bin(-(2**65-1)), '-0b' + '1' * 65)
1537
Georg Brandl11a81b22009-07-22 12:03:09 +00001538 def test_bytearray_translate(self):
1539 x = bytearray("abc")
1540 self.assertRaises(ValueError, x.translate, "1", 1)
1541 self.assertRaises(TypeError, x.translate, "1"*256, 1)
1542
Eric Smithce584d42008-02-21 20:17:08 +00001543class TestSorted(unittest.TestCase):
1544
1545 def test_basic(self):
1546 data = range(100)
1547 copy = data[:]
1548 random.shuffle(copy)
1549 self.assertEqual(data, sorted(copy))
1550 self.assertNotEqual(data, copy)
1551
1552 data.reverse()
1553 random.shuffle(copy)
1554 self.assertEqual(data, sorted(copy, cmp=lambda x, y: cmp(y,x)))
1555 self.assertNotEqual(data, copy)
1556 random.shuffle(copy)
1557 self.assertEqual(data, sorted(copy, key=lambda x: -x))
1558 self.assertNotEqual(data, copy)
1559 random.shuffle(copy)
1560 self.assertEqual(data, sorted(copy, reverse=1))
1561 self.assertNotEqual(data, copy)
1562
1563 def test_inputtypes(self):
1564 s = 'abracadabra'
1565 types = [list, tuple]
1566 if have_unicode:
1567 types.insert(0, unicode)
1568 for T in types:
1569 self.assertEqual(sorted(s), sorted(T(s)))
1570
1571 s = ''.join(dict.fromkeys(s).keys()) # unique letters only
1572 types = [set, frozenset, list, tuple, dict.fromkeys]
1573 if have_unicode:
1574 types.insert(0, unicode)
1575 for T in types:
1576 self.assertEqual(sorted(s), sorted(T(s)))
1577
1578 def test_baddecorator(self):
1579 data = 'The quick Brown fox Jumped over The lazy Dog'.split()
1580 self.assertRaises(TypeError, sorted, data, None, lambda x,y: 0)
1581
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001582def test_main(verbose=None):
1583 test_classes = (BuiltinTest, TestSorted)
1584
1585 run_unittest(*test_classes)
1586
1587 # verify reference counting
1588 if verbose and hasattr(sys, "gettotalrefcount"):
1589 import gc
1590 counts = [None] * 5
1591 for i in xrange(len(counts)):
1592 run_unittest(*test_classes)
1593 gc.collect()
1594 counts[i] = sys.gettotalrefcount()
1595 print counts
1596
Walter Dörwald919497e2003-01-19 16:23:59 +00001597
1598if __name__ == "__main__":
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001599 test_main(verbose=True)