blob: d1d2bd00e015097247c77341d698900a3ced71c0 [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
Walter Dörwald919497e2003-01-19 16:23:59 +00004import test.test_support, unittest
Georg Brandlde9b6242006-04-30 11:13:56 +00005from test.test_support import fcmp, have_unicode, TESTFN, unlink, \
Mark Dickinsone02c9d22010-05-07 13:23:18 +00006 run_unittest, run_with_locale, check_warnings
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00007from operator import neg
Guido van Rossum3bead091992-01-27 17:00:37 +00008
Mark Dickinsond058cd22008-02-10 21:29:51 +00009import sys, warnings, cStringIO, random, fractions, UserDict
Walter Dörwald919497e2003-01-19 16:23:59 +000010warnings.filterwarnings("ignore", "hex../oct.. of negative int",
11 FutureWarning, __name__)
Guido van Rossumefbbb1c2003-04-11 18:43:06 +000012warnings.filterwarnings("ignore", "integer argument expected",
13 DeprecationWarning, "unittest")
Guido van Rossum3bead091992-01-27 17:00:37 +000014
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +000015# count the number of test runs.
16# used to skip running test_execfile() multiple times
Georg Brandl23016272009-10-27 22:57:25 +000017# and to create unique strings to intern in test_intern()
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +000018numruns = 0
19
Walter Dörwald919497e2003-01-19 16:23:59 +000020class Squares:
Guido van Rossum3bead091992-01-27 17:00:37 +000021
Walter Dörwald919497e2003-01-19 16:23:59 +000022 def __init__(self, max):
23 self.max = max
24 self.sofar = []
25
26 def __len__(self): return len(self.sofar)
27
28 def __getitem__(self, i):
29 if not 0 <= i < self.max: raise IndexError
30 n = len(self.sofar)
31 while n <= i:
32 self.sofar.append(n*n)
33 n += 1
34 return self.sofar[i]
35
36class StrSquares:
37
38 def __init__(self, max):
39 self.max = max
40 self.sofar = []
41
42 def __len__(self):
43 return len(self.sofar)
44
45 def __getitem__(self, i):
46 if not 0 <= i < self.max:
47 raise IndexError
48 n = len(self.sofar)
49 while n <= i:
50 self.sofar.append(str(n*n))
51 n += 1
52 return self.sofar[i]
53
54class BitBucket:
55 def write(self, line):
56 pass
57
Walter Dörwald919497e2003-01-19 16:23:59 +000058
Raymond Hettinger96229b12005-03-11 06:49:40 +000059class TestFailingBool:
60 def __nonzero__(self):
61 raise RuntimeError
62
63class TestFailingIter:
64 def __iter__(self):
65 raise RuntimeError
66
Walter Dörwald919497e2003-01-19 16:23:59 +000067class BuiltinTest(unittest.TestCase):
68
69 def test_import(self):
70 __import__('sys')
71 __import__('time')
72 __import__('string')
Georg Brandl5240d742007-03-13 20:46:32 +000073 __import__(name='sys')
74 __import__(name='time', level=0)
Walter Dörwald919497e2003-01-19 16:23:59 +000075 self.assertRaises(ImportError, __import__, 'spamspam')
76 self.assertRaises(TypeError, __import__, 1, 2, 3, 4)
Thomas Wouters8ddab272006-04-04 16:17:02 +000077 self.assertRaises(ValueError, __import__, '')
Georg Brandl5240d742007-03-13 20:46:32 +000078 self.assertRaises(TypeError, __import__, 'sys', name='sys')
Walter Dörwald919497e2003-01-19 16:23:59 +000079
80 def test_abs(self):
81 # int
82 self.assertEqual(abs(0), 0)
83 self.assertEqual(abs(1234), 1234)
84 self.assertEqual(abs(-1234), 1234)
Martin v. Löwis820d6ac2006-10-04 05:47:34 +000085 self.assertTrue(abs(-sys.maxint-1) > 0)
Walter Dörwald919497e2003-01-19 16:23:59 +000086 # float
87 self.assertEqual(abs(0.0), 0.0)
88 self.assertEqual(abs(3.14), 3.14)
89 self.assertEqual(abs(-3.14), 3.14)
90 # long
91 self.assertEqual(abs(0L), 0L)
92 self.assertEqual(abs(1234L), 1234L)
93 self.assertEqual(abs(-1234L), 1234L)
94 # str
95 self.assertRaises(TypeError, abs, 'a')
96
Raymond Hettinger96229b12005-03-11 06:49:40 +000097 def test_all(self):
98 self.assertEqual(all([2, 4, 6]), True)
99 self.assertEqual(all([2, None, 6]), False)
100 self.assertRaises(RuntimeError, all, [2, TestFailingBool(), 6])
101 self.assertRaises(RuntimeError, all, TestFailingIter())
102 self.assertRaises(TypeError, all, 10) # Non-iterable
103 self.assertRaises(TypeError, all) # No args
104 self.assertRaises(TypeError, all, [2, 4, 6], []) # Too many args
105 self.assertEqual(all([]), True) # Empty iterator
106 S = [50, 60]
107 self.assertEqual(all(x > 42 for x in S), True)
108 S = [50, 40, 60]
109 self.assertEqual(all(x > 42 for x in S), False)
110
111 def test_any(self):
112 self.assertEqual(any([None, None, None]), False)
113 self.assertEqual(any([None, 4, None]), True)
114 self.assertRaises(RuntimeError, any, [None, TestFailingBool(), 6])
115 self.assertRaises(RuntimeError, all, TestFailingIter())
116 self.assertRaises(TypeError, any, 10) # Non-iterable
117 self.assertRaises(TypeError, any) # No args
118 self.assertRaises(TypeError, any, [2, 4, 6], []) # Too many args
119 self.assertEqual(any([]), False) # Empty iterator
120 S = [40, 60, 30]
121 self.assertEqual(any(x > 42 for x in S), True)
122 S = [10, 20, 30]
123 self.assertEqual(any(x > 42 for x in S), False)
124
Armin Rigo7ccbca92006-10-04 12:17:45 +0000125 def test_neg(self):
126 x = -sys.maxint-1
127 self.assert_(isinstance(x, int))
128 self.assertEqual(-x, sys.maxint+1)
129
Walter Dörwald919497e2003-01-19 16:23:59 +0000130 def test_apply(self):
131 def f0(*args):
132 self.assertEqual(args, ())
133 def f1(a1):
134 self.assertEqual(a1, 1)
135 def f2(a1, a2):
136 self.assertEqual(a1, 1)
137 self.assertEqual(a2, 2)
138 def f3(a1, a2, a3):
139 self.assertEqual(a1, 1)
140 self.assertEqual(a2, 2)
141 self.assertEqual(a3, 3)
142 apply(f0, ())
143 apply(f1, (1,))
144 apply(f2, (1, 2))
145 apply(f3, (1, 2, 3))
146
147 # A PyCFunction that takes only positional parameters should allow an
148 # empty keyword dictionary to pass without a complaint, but raise a
149 # TypeError if the dictionary is non-empty.
150 apply(id, (1,), {})
151 self.assertRaises(TypeError, apply, id, (1,), {"foo": 1})
152 self.assertRaises(TypeError, apply)
153 self.assertRaises(TypeError, apply, id, 42)
154 self.assertRaises(TypeError, apply, id, (42,), 42)
155
156 def test_callable(self):
157 self.assert_(callable(len))
158 def f(): pass
159 self.assert_(callable(f))
160 class C:
161 def meth(self): pass
162 self.assert_(callable(C))
163 x = C()
164 self.assert_(callable(x.meth))
165 self.assert_(not callable(x))
166 class D(C):
167 def __call__(self): pass
168 y = D()
169 self.assert_(callable(y))
170 y()
171
172 def test_chr(self):
173 self.assertEqual(chr(32), ' ')
174 self.assertEqual(chr(65), 'A')
175 self.assertEqual(chr(97), 'a')
176 self.assertEqual(chr(0xff), '\xff')
177 self.assertRaises(ValueError, chr, 256)
178 self.assertRaises(TypeError, chr)
179
180 def test_cmp(self):
181 self.assertEqual(cmp(-1, 1), -1)
182 self.assertEqual(cmp(1, -1), 1)
183 self.assertEqual(cmp(1, 1), 0)
Armin Rigo2b3eb402003-10-28 12:05:48 +0000184 # verify that circular objects are not handled
Walter Dörwald919497e2003-01-19 16:23:59 +0000185 a = []; a.append(a)
186 b = []; b.append(b)
187 from UserList import UserList
188 c = UserList(); c.append(c)
Armin Rigo2b3eb402003-10-28 12:05:48 +0000189 self.assertRaises(RuntimeError, cmp, a, b)
190 self.assertRaises(RuntimeError, cmp, b, c)
191 self.assertRaises(RuntimeError, cmp, c, a)
192 self.assertRaises(RuntimeError, cmp, a, c)
193 # okay, now break the cycles
Walter Dörwald919497e2003-01-19 16:23:59 +0000194 a.pop(); b.pop(); c.pop()
195 self.assertRaises(TypeError, cmp)
196
197 def test_coerce(self):
198 self.assert_(not fcmp(coerce(1, 1.1), (1.0, 1.1)))
199 self.assertEqual(coerce(1, 1L), (1L, 1L))
200 self.assert_(not fcmp(coerce(1L, 1.1), (1.0, 1.1)))
201 self.assertRaises(TypeError, coerce)
202 class BadNumber:
203 def __coerce__(self, other):
204 raise ValueError
205 self.assertRaises(ValueError, coerce, 42, BadNumber())
Neal Norwitzabcb0c02003-01-28 19:21:24 +0000206 self.assertRaises(OverflowError, coerce, 0.5, int("12345" * 1000))
Walter Dörwald919497e2003-01-19 16:23:59 +0000207
208 def test_compile(self):
209 compile('print 1\n', '', 'exec')
Just van Rossumf032f862003-02-09 20:38:48 +0000210 bom = '\xef\xbb\xbf'
211 compile(bom + 'print 1\n', '', 'exec')
Georg Brandl5240d742007-03-13 20:46:32 +0000212 compile(source='pass', filename='?', mode='exec')
213 compile(dont_inherit=0, filename='tmp', source='0', mode='eval')
214 compile('pass', '?', dont_inherit=1, mode='exec')
Walter Dörwald919497e2003-01-19 16:23:59 +0000215 self.assertRaises(TypeError, compile)
216 self.assertRaises(ValueError, compile, 'print 42\n', '<string>', 'badmode')
217 self.assertRaises(ValueError, compile, 'print 42\n', '<string>', 'single', 0xff)
Neal Norwitzfcf44352005-11-27 20:37:43 +0000218 self.assertRaises(TypeError, compile, chr(0), 'f', 'exec')
Georg Brandl5240d742007-03-13 20:46:32 +0000219 self.assertRaises(TypeError, compile, 'pass', '?', 'exec',
220 mode='eval', source='0', filename='tmp')
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000221 if have_unicode:
222 compile(unicode('print u"\xc3\xa5"\n', 'utf8'), '', 'exec')
Neal Norwitzfcf44352005-11-27 20:37:43 +0000223 self.assertRaises(TypeError, compile, unichr(0), 'f', 'exec')
224 self.assertRaises(ValueError, compile, unicode('a = 1'), 'f', 'bad')
Walter Dörwald919497e2003-01-19 16:23:59 +0000225
Georg Brandl5240d742007-03-13 20:46:32 +0000226
Walter Dörwald919497e2003-01-19 16:23:59 +0000227 def test_delattr(self):
228 import sys
229 sys.spam = 1
230 delattr(sys, 'spam')
231 self.assertRaises(TypeError, delattr)
232
233 def test_dir(self):
Georg Brandl871f1bc2007-03-12 13:17:36 +0000234 # dir(wrong number of arguments)
Walter Dörwald919497e2003-01-19 16:23:59 +0000235 self.assertRaises(TypeError, dir, 42, 42)
236
Georg Brandl871f1bc2007-03-12 13:17:36 +0000237 # dir() - local scope
238 local_var = 1
239 self.assert_('local_var' in dir())
240
241 # dir(module)
242 import sys
243 self.assert_('exit' in dir(sys))
244
245 # dir(module_with_invalid__dict__)
246 import types
247 class Foo(types.ModuleType):
248 __dict__ = 8
249 f = Foo("foo")
250 self.assertRaises(TypeError, dir, f)
251
252 # dir(type)
253 self.assert_("strip" in dir(str))
254 self.assert_("__mro__" not in dir(str))
255
256 # dir(obj)
257 class Foo(object):
258 def __init__(self):
259 self.x = 7
260 self.y = 8
261 self.z = 9
262 f = Foo()
263 self.assert_("y" in dir(f))
264
265 # dir(obj_no__dict__)
266 class Foo(object):
267 __slots__ = []
268 f = Foo()
269 self.assert_("__repr__" in dir(f))
270
271 # dir(obj_no__class__with__dict__)
272 # (an ugly trick to cause getattr(f, "__class__") to fail)
273 class Foo(object):
274 __slots__ = ["__class__", "__dict__"]
275 def __init__(self):
276 self.bar = "wow"
277 f = Foo()
278 self.assert_("__repr__" not in dir(f))
279 self.assert_("bar" in dir(f))
280
281 # dir(obj_using __dir__)
282 class Foo(object):
283 def __dir__(self):
284 return ["kan", "ga", "roo"]
285 f = Foo()
286 self.assert_(dir(f) == ["ga", "kan", "roo"])
287
288 # dir(obj__dir__not_list)
289 class Foo(object):
290 def __dir__(self):
291 return 7
292 f = Foo()
293 self.assertRaises(TypeError, dir, f)
294
Walter Dörwald919497e2003-01-19 16:23:59 +0000295 def test_divmod(self):
296 self.assertEqual(divmod(12, 7), (1, 5))
297 self.assertEqual(divmod(-12, 7), (-2, 2))
298 self.assertEqual(divmod(12, -7), (-2, -2))
299 self.assertEqual(divmod(-12, -7), (1, -5))
300
301 self.assertEqual(divmod(12L, 7L), (1L, 5L))
302 self.assertEqual(divmod(-12L, 7L), (-2L, 2L))
303 self.assertEqual(divmod(12L, -7L), (-2L, -2L))
304 self.assertEqual(divmod(-12L, -7L), (1L, -5L))
305
306 self.assertEqual(divmod(12, 7L), (1, 5L))
307 self.assertEqual(divmod(-12, 7L), (-2, 2L))
308 self.assertEqual(divmod(12L, -7), (-2L, -2))
309 self.assertEqual(divmod(-12L, -7), (1L, -5))
310
Raymond Hettinger5ea7e312004-09-30 07:47:20 +0000311 self.assertEqual(divmod(-sys.maxint-1, -1),
312 (sys.maxint+1, 0))
313
Walter Dörwald919497e2003-01-19 16:23:59 +0000314 self.assert_(not fcmp(divmod(3.25, 1.0), (3.0, 0.25)))
315 self.assert_(not fcmp(divmod(-3.25, 1.0), (-4.0, 0.75)))
316 self.assert_(not fcmp(divmod(3.25, -1.0), (-4.0, -0.75)))
317 self.assert_(not fcmp(divmod(-3.25, -1.0), (3.0, -0.25)))
318
319 self.assertRaises(TypeError, divmod)
320
321 def test_eval(self):
322 self.assertEqual(eval('1+1'), 2)
323 self.assertEqual(eval(' 1+1\n'), 2)
324 globals = {'a': 1, 'b': 2}
325 locals = {'b': 200, 'c': 300}
326 self.assertEqual(eval('a', globals) , 1)
327 self.assertEqual(eval('a', globals, locals), 1)
328 self.assertEqual(eval('b', globals, locals), 200)
329 self.assertEqual(eval('c', globals, locals), 300)
330 if have_unicode:
331 self.assertEqual(eval(unicode('1+1')), 2)
332 self.assertEqual(eval(unicode(' 1+1\n')), 2)
333 globals = {'a': 1, 'b': 2}
334 locals = {'b': 200, 'c': 300}
335 if have_unicode:
336 self.assertEqual(eval(unicode('a'), globals), 1)
337 self.assertEqual(eval(unicode('a'), globals, locals), 1)
338 self.assertEqual(eval(unicode('b'), globals, locals), 200)
339 self.assertEqual(eval(unicode('c'), globals, locals), 300)
Just van Rossumf032f862003-02-09 20:38:48 +0000340 bom = '\xef\xbb\xbf'
341 self.assertEqual(eval(bom + 'a', globals, locals), 1)
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000342 self.assertEqual(eval(unicode('u"\xc3\xa5"', 'utf8'), globals),
343 unicode('\xc3\xa5', 'utf8'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000344 self.assertRaises(TypeError, eval)
345 self.assertRaises(TypeError, eval, ())
346
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000347 def test_general_eval(self):
348 # Tests that general mappings can be used for the locals argument
349
350 class M:
351 "Test mapping interface versus possible calls from eval()."
352 def __getitem__(self, key):
353 if key == 'a':
354 return 12
355 raise KeyError
356 def keys(self):
357 return list('xyz')
358
359 m = M()
360 g = globals()
361 self.assertEqual(eval('a', g, m), 12)
362 self.assertRaises(NameError, eval, 'b', g, m)
363 self.assertEqual(eval('dir()', g, m), list('xyz'))
364 self.assertEqual(eval('globals()', g, m), g)
365 self.assertEqual(eval('locals()', g, m), m)
Raymond Hettinger513ffe82004-07-06 13:44:41 +0000366 self.assertRaises(TypeError, eval, 'a', m)
Raymond Hettinger66bd2332004-08-02 08:30:07 +0000367 class A:
368 "Non-mapping"
369 pass
370 m = A()
371 self.assertRaises(TypeError, eval, 'a', g, m)
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000372
373 # Verify that dict subclasses work as well
374 class D(dict):
375 def __getitem__(self, key):
376 if key == 'a':
377 return 12
378 return dict.__getitem__(self, key)
379 def keys(self):
380 return list('xyz')
381
382 d = D()
383 self.assertEqual(eval('a', g, d), 12)
384 self.assertRaises(NameError, eval, 'b', g, d)
385 self.assertEqual(eval('dir()', g, d), list('xyz'))
386 self.assertEqual(eval('globals()', g, d), g)
387 self.assertEqual(eval('locals()', g, d), d)
388
389 # Verify locals stores (used by list comps)
390 eval('[locals() for i in (2,3)]', g, d)
391 eval('[locals() for i in (2,3)]', g, UserDict.UserDict())
392
393 class SpreadSheet:
394 "Sample application showing nested, calculated lookups."
395 _cells = {}
396 def __setitem__(self, key, formula):
397 self._cells[key] = formula
Martin Blais215f13d2006-06-06 12:46:55 +0000398 def __getitem__(self, key):
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000399 return eval(self._cells[key], globals(), self)
400
401 ss = SpreadSheet()
402 ss['a1'] = '5'
403 ss['a2'] = 'a1*6'
404 ss['a3'] = 'a2*7'
405 self.assertEqual(ss['a3'], 210)
406
Raymond Hettinger2a7dede2004-08-07 04:55:30 +0000407 # Verify that dir() catches a non-list returned by eval
408 # SF bug #1004669
409 class C:
410 def __getitem__(self, item):
411 raise KeyError(item)
412 def keys(self):
413 return 'a'
414 self.assertRaises(TypeError, eval, 'dir()', globals(), C())
415
Walter Dörwald919497e2003-01-19 16:23:59 +0000416 # Done outside of the method test_z to get the correct scope
417 z = 0
418 f = open(TESTFN, 'w')
419 f.write('z = z+1\n')
420 f.write('z = z*2\n')
421 f.close()
422 execfile(TESTFN)
423
424 def test_execfile(self):
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +0000425 global numruns
426 if numruns:
427 return
428 numruns += 1
Tim Peters7f061872004-12-07 21:17:46 +0000429
Walter Dörwald919497e2003-01-19 16:23:59 +0000430 globals = {'a': 1, 'b': 2}
431 locals = {'b': 200, 'c': 300}
432
433 self.assertEqual(self.__class__.z, 2)
434 globals['z'] = 0
435 execfile(TESTFN, globals)
436 self.assertEqual(globals['z'], 2)
437 locals['z'] = 0
438 execfile(TESTFN, globals, locals)
439 self.assertEqual(locals['z'], 2)
Raymond Hettinger66bd2332004-08-02 08:30:07 +0000440
441 class M:
442 "Test mapping interface versus possible calls from execfile()."
443 def __init__(self):
444 self.z = 10
445 def __getitem__(self, key):
446 if key == 'z':
447 return self.z
448 raise KeyError
449 def __setitem__(self, key, value):
450 if key == 'z':
451 self.z = value
452 return
453 raise KeyError
454
455 locals = M()
456 locals['z'] = 0
457 execfile(TESTFN, globals, locals)
458 self.assertEqual(locals['z'], 2)
459
Walter Dörwald919497e2003-01-19 16:23:59 +0000460 unlink(TESTFN)
461 self.assertRaises(TypeError, execfile)
Neal Norwitzfcf44352005-11-27 20:37:43 +0000462 self.assertRaises(TypeError, execfile, TESTFN, {}, ())
Walter Dörwald919497e2003-01-19 16:23:59 +0000463 import os
464 self.assertRaises(IOError, execfile, os.curdir)
465 self.assertRaises(IOError, execfile, "I_dont_exist")
466
467 def test_filter(self):
468 self.assertEqual(filter(lambda c: 'a' <= c <= 'z', 'Hello World'), 'elloorld')
469 self.assertEqual(filter(None, [1, 'hello', [], [3], '', None, 9, 0]), [1, 'hello', [3], 9])
470 self.assertEqual(filter(lambda x: x > 0, [1, -3, 9, 0, 2]), [1, 9, 2])
471 self.assertEqual(filter(None, Squares(10)), [1, 4, 9, 16, 25, 36, 49, 64, 81])
472 self.assertEqual(filter(lambda x: x%2, Squares(10)), [1, 9, 25, 49, 81])
473 def identity(item):
474 return 1
475 filter(identity, Squares(5))
476 self.assertRaises(TypeError, filter)
477 class BadSeq(object):
Tim Petersf2715e02003-02-19 02:35:07 +0000478 def __getitem__(self, index):
479 if index<4:
480 return 42
481 raise ValueError
Walter Dörwald919497e2003-01-19 16:23:59 +0000482 self.assertRaises(ValueError, filter, lambda x: x, BadSeq())
483 def badfunc():
484 pass
485 self.assertRaises(TypeError, filter, badfunc, range(5))
486
Walter Dörwaldbf517072003-01-27 15:57:14 +0000487 # test bltinmodule.c::filtertuple()
Walter Dörwald919497e2003-01-19 16:23:59 +0000488 self.assertEqual(filter(None, (1, 2)), (1, 2))
489 self.assertEqual(filter(lambda x: x>=3, (1, 2, 3, 4)), (3, 4))
490 self.assertRaises(TypeError, filter, 42, (1, 2))
491
Walter Dörwaldbf517072003-01-27 15:57:14 +0000492 # test bltinmodule.c::filterstring()
Walter Dörwald919497e2003-01-19 16:23:59 +0000493 self.assertEqual(filter(None, "12"), "12")
494 self.assertEqual(filter(lambda x: x>="3", "1234"), "34")
495 self.assertRaises(TypeError, filter, 42, "12")
496 class badstr(str):
497 def __getitem__(self, index):
498 raise ValueError
499 self.assertRaises(ValueError, filter, lambda x: x >="3", badstr("1234"))
Walter Dörwaldbf517072003-01-27 15:57:14 +0000500
Walter Dörwald903f1e02003-02-04 16:28:00 +0000501 class badstr2(str):
502 def __getitem__(self, index):
503 return 42
504 self.assertRaises(TypeError, filter, lambda x: x >=42, badstr2("1234"))
505
506 class weirdstr(str):
507 def __getitem__(self, index):
508 return weirdstr(2*str.__getitem__(self, index))
509 self.assertEqual(filter(lambda x: x>="33", weirdstr("1234")), "3344")
510
Walter Dörwald5e61e242003-02-04 17:04:01 +0000511 class shiftstr(str):
512 def __getitem__(self, index):
513 return chr(ord(str.__getitem__(self, index))+1)
514 self.assertEqual(filter(lambda x: x>="3", shiftstr("1234")), "345")
515
Martin v. Löwis8afd7572003-01-25 22:46:11 +0000516 if have_unicode:
Walter Dörwaldbf517072003-01-27 15:57:14 +0000517 # test bltinmodule.c::filterunicode()
Martin v. Löwis8afd7572003-01-25 22:46:11 +0000518 self.assertEqual(filter(None, unicode("12")), unicode("12"))
519 self.assertEqual(filter(lambda x: x>="3", unicode("1234")), unicode("34"))
520 self.assertRaises(TypeError, filter, 42, unicode("12"))
521 self.assertRaises(ValueError, filter, lambda x: x >="3", badstr(unicode("1234")))
Walter Dörwald919497e2003-01-19 16:23:59 +0000522
Walter Dörwald903f1e02003-02-04 16:28:00 +0000523 class badunicode(unicode):
524 def __getitem__(self, index):
525 return 42
526 self.assertRaises(TypeError, filter, lambda x: x >=42, badunicode("1234"))
527
528 class weirdunicode(unicode):
529 def __getitem__(self, index):
530 return weirdunicode(2*unicode.__getitem__(self, index))
531 self.assertEqual(
532 filter(lambda x: x>=unicode("33"), weirdunicode("1234")), unicode("3344"))
533
Walter Dörwald5e61e242003-02-04 17:04:01 +0000534 class shiftunicode(unicode):
535 def __getitem__(self, index):
536 return unichr(ord(unicode.__getitem__(self, index))+1)
537 self.assertEqual(
538 filter(lambda x: x>=unicode("3"), shiftunicode("1234")),
539 unicode("345")
540 )
541
Walter Dörwaldc3da83f2003-02-04 20:24:45 +0000542 def test_filter_subclasses(self):
Walter Dörwaldc8cb5d92003-08-15 17:52:39 +0000543 # test that filter() never returns tuple, str or unicode subclasses
544 # and that the result always goes through __getitem__
545 funcs = (None, bool, lambda x: True)
Walter Dörwaldc3da83f2003-02-04 20:24:45 +0000546 class tuple2(tuple):
Walter Dörwald1918f772003-02-10 13:19:13 +0000547 def __getitem__(self, index):
548 return 2*tuple.__getitem__(self, index)
Walter Dörwaldc3da83f2003-02-04 20:24:45 +0000549 class str2(str):
Walter Dörwald1918f772003-02-10 13:19:13 +0000550 def __getitem__(self, index):
551 return 2*str.__getitem__(self, index)
Walter Dörwaldc3da83f2003-02-04 20:24:45 +0000552 inputs = {
Walter Dörwald8dd19322003-02-10 17:36:40 +0000553 tuple2: {(): (), (1, 2, 3): (2, 4, 6)},
Walter Dörwald1918f772003-02-10 13:19:13 +0000554 str2: {"": "", "123": "112233"}
Walter Dörwaldc3da83f2003-02-04 20:24:45 +0000555 }
556 if have_unicode:
557 class unicode2(unicode):
Walter Dörwald1918f772003-02-10 13:19:13 +0000558 def __getitem__(self, index):
559 return 2*unicode.__getitem__(self, index)
560 inputs[unicode2] = {
561 unicode(): unicode(),
562 unicode("123"): unicode("112233")
563 }
Walter Dörwaldc3da83f2003-02-04 20:24:45 +0000564
Walter Dörwald1918f772003-02-10 13:19:13 +0000565 for (cls, inps) in inputs.iteritems():
566 for (inp, exp) in inps.iteritems():
Tim Petersf2715e02003-02-19 02:35:07 +0000567 # make sure the output goes through __getitem__
568 # even if func is None
569 self.assertEqual(
570 filter(funcs[0], cls(inp)),
571 filter(funcs[1], cls(inp))
572 )
573 for func in funcs:
Walter Dörwald1918f772003-02-10 13:19:13 +0000574 outp = filter(func, cls(inp))
575 self.assertEqual(outp, exp)
576 self.assert_(not isinstance(outp, cls))
Walter Dörwaldc3da83f2003-02-04 20:24:45 +0000577
Walter Dörwald919497e2003-01-19 16:23:59 +0000578 def test_getattr(self):
579 import sys
580 self.assert_(getattr(sys, 'stdout') is sys.stdout)
581 self.assertRaises(TypeError, getattr, sys, 1)
582 self.assertRaises(TypeError, getattr, sys, 1, "foo")
583 self.assertRaises(TypeError, getattr)
Walter Dörwald4e41a4b2005-08-03 17:09:04 +0000584 if have_unicode:
585 self.assertRaises(UnicodeError, getattr, sys, unichr(sys.maxunicode))
Walter Dörwald919497e2003-01-19 16:23:59 +0000586
587 def test_hasattr(self):
588 import sys
589 self.assert_(hasattr(sys, 'stdout'))
590 self.assertRaises(TypeError, hasattr, sys, 1)
591 self.assertRaises(TypeError, hasattr)
Walter Dörwald4e41a4b2005-08-03 17:09:04 +0000592 if have_unicode:
593 self.assertRaises(UnicodeError, hasattr, sys, unichr(sys.maxunicode))
Walter Dörwald919497e2003-01-19 16:23:59 +0000594
Benjamin Petersonb9030f42008-05-12 00:41:23 +0000595 # Check that hasattr allows SystemExit and KeyboardInterrupts by
596 class A:
597 def __getattr__(self, what):
598 raise KeyboardInterrupt
599 self.assertRaises(KeyboardInterrupt, hasattr, A(), "b")
600 class B:
601 def __getattr__(self, what):
602 raise SystemExit
603 self.assertRaises(SystemExit, hasattr, B(), "b")
604
Walter Dörwald919497e2003-01-19 16:23:59 +0000605 def test_hash(self):
606 hash(None)
607 self.assertEqual(hash(1), hash(1L))
608 self.assertEqual(hash(1), hash(1.0))
609 hash('spam')
610 if have_unicode:
611 self.assertEqual(hash('spam'), hash(unicode('spam')))
612 hash((0,1,2,3))
613 def f(): pass
614 self.assertRaises(TypeError, hash, [])
615 self.assertRaises(TypeError, hash, {})
Martin v. Löwisab2f8f72006-08-09 07:57:39 +0000616 # Bug 1536021: Allow hash to return long objects
617 class X:
618 def __hash__(self):
619 return 2**100
620 self.assertEquals(type(hash(X())), int)
621 class Y(object):
622 def __hash__(self):
623 return 2**100
624 self.assertEquals(type(hash(Y())), int)
Armin Rigo51fc8c42006-08-09 14:55:26 +0000625 class Z(long):
626 def __hash__(self):
627 return self
628 self.assertEquals(hash(Z(42)), hash(42L))
Walter Dörwald919497e2003-01-19 16:23:59 +0000629
630 def test_hex(self):
631 self.assertEqual(hex(16), '0x10')
632 self.assertEqual(hex(16L), '0x10L')
Guido van Rossum6c9e1302003-11-29 23:52:13 +0000633 self.assertEqual(hex(-16), '-0x10')
Walter Dörwald919497e2003-01-19 16:23:59 +0000634 self.assertEqual(hex(-16L), '-0x10L')
635 self.assertRaises(TypeError, hex, {})
636
637 def test_id(self):
638 id(None)
639 id(1)
640 id(1L)
641 id(1.0)
642 id('spam')
643 id((0,1,2,3))
644 id([0,1,2,3])
645 id({'spam': 1, 'eggs': 2, 'ham': 3})
646
647 # Test input() later, together with raw_input
648
Walter Dörwald919497e2003-01-19 16:23:59 +0000649 def test_intern(self):
650 self.assertRaises(TypeError, intern)
Georg Brandl23016272009-10-27 22:57:25 +0000651 # This fails if the test is run twice with a constant string,
652 # therefore append the run counter
653 s = "never interned before " + str(numruns)
Walter Dörwald919497e2003-01-19 16:23:59 +0000654 self.assert_(intern(s) is s)
655 s2 = s.swapcase().swapcase()
656 self.assert_(intern(s2) is s)
657
Jeremy Hylton4c989dd2004-08-07 19:20:05 +0000658 # Subclasses of string can't be interned, because they
659 # provide too much opportunity for insane things to happen.
660 # We don't want them in the interned dict and if they aren't
661 # actually interned, we don't want to create the appearance
662 # that they are by allowing intern() to succeeed.
663 class S(str):
664 def __hash__(self):
665 return 123
666
667 self.assertRaises(TypeError, intern, S("abc"))
668
669 # It's still safe to pass these strings to routines that
670 # call intern internally, e.g. PyObject_SetAttr().
671 s = S("abc")
672 setattr(s, s, s)
673 self.assertEqual(getattr(s, s), s)
674
Walter Dörwald919497e2003-01-19 16:23:59 +0000675 def test_iter(self):
676 self.assertRaises(TypeError, iter)
677 self.assertRaises(TypeError, iter, 42, 42)
678 lists = [("1", "2"), ["1", "2"], "12"]
679 if have_unicode:
680 lists.append(unicode("12"))
681 for l in lists:
682 i = iter(l)
683 self.assertEqual(i.next(), '1')
684 self.assertEqual(i.next(), '2')
685 self.assertRaises(StopIteration, i.next)
686
687 def test_isinstance(self):
688 class C:
689 pass
690 class D(C):
691 pass
692 class E:
693 pass
694 c = C()
695 d = D()
696 e = E()
697 self.assert_(isinstance(c, C))
698 self.assert_(isinstance(d, C))
699 self.assert_(not isinstance(e, C))
700 self.assert_(not isinstance(c, D))
701 self.assert_(not isinstance('foo', E))
702 self.assertRaises(TypeError, isinstance, E, 'foo')
703 self.assertRaises(TypeError, isinstance)
704
705 def test_issubclass(self):
706 class C:
707 pass
708 class D(C):
709 pass
710 class E:
711 pass
712 c = C()
713 d = D()
714 e = E()
715 self.assert_(issubclass(D, C))
716 self.assert_(issubclass(C, C))
717 self.assert_(not issubclass(C, D))
718 self.assertRaises(TypeError, issubclass, 'foo', E)
719 self.assertRaises(TypeError, issubclass, E, 'foo')
720 self.assertRaises(TypeError, issubclass)
721
722 def test_len(self):
723 self.assertEqual(len('123'), 3)
724 self.assertEqual(len(()), 0)
725 self.assertEqual(len((1, 2, 3, 4)), 4)
726 self.assertEqual(len([1, 2, 3, 4]), 4)
727 self.assertEqual(len({}), 0)
728 self.assertEqual(len({'a':1, 'b': 2}), 2)
729 class BadSeq:
730 def __len__(self):
731 raise ValueError
732 self.assertRaises(ValueError, len, BadSeq())
733
Walter Dörwald919497e2003-01-19 16:23:59 +0000734 def test_map(self):
735 self.assertEqual(
736 map(None, 'hello world'),
737 ['h','e','l','l','o',' ','w','o','r','l','d']
738 )
739 self.assertEqual(
740 map(None, 'abcd', 'efg'),
741 [('a', 'e'), ('b', 'f'), ('c', 'g'), ('d', None)]
742 )
743 self.assertEqual(
744 map(None, range(10)),
745 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
746 )
747 self.assertEqual(
748 map(lambda x: x*x, range(1,4)),
749 [1, 4, 9]
750 )
751 try:
752 from math import sqrt
753 except ImportError:
754 def sqrt(x):
755 return pow(x, 0.5)
756 self.assertEqual(
757 map(lambda x: map(sqrt,x), [[16, 4], [81, 9]]),
758 [[4.0, 2.0], [9.0, 3.0]]
759 )
760 self.assertEqual(
761 map(lambda x, y: x+y, [1,3,2], [9,1,4]),
762 [10, 4, 6]
763 )
764
765 def plus(*v):
766 accu = 0
767 for i in v: accu = accu + i
768 return accu
769 self.assertEqual(
770 map(plus, [1, 3, 7]),
771 [1, 3, 7]
772 )
773 self.assertEqual(
774 map(plus, [1, 3, 7], [4, 9, 2]),
775 [1+4, 3+9, 7+2]
776 )
777 self.assertEqual(
778 map(plus, [1, 3, 7], [4, 9, 2], [1, 1, 0]),
779 [1+4+1, 3+9+1, 7+2+0]
780 )
781 self.assertEqual(
782 map(None, Squares(10)),
783 [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
784 )
785 self.assertEqual(
786 map(int, Squares(10)),
787 [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
788 )
789 self.assertEqual(
790 map(None, Squares(3), Squares(2)),
791 [(0,0), (1,1), (4,None)]
792 )
793 self.assertEqual(
794 map(max, Squares(3), Squares(2)),
795 [0, 1, 4]
796 )
797 self.assertRaises(TypeError, map)
798 self.assertRaises(TypeError, map, lambda x: x, 42)
799 self.assertEqual(map(None, [42]), [42])
800 class BadSeq:
801 def __getitem__(self, index):
802 raise ValueError
803 self.assertRaises(ValueError, map, lambda x: x, BadSeq())
Neal Norwitzfcf44352005-11-27 20:37:43 +0000804 def badfunc(x):
805 raise RuntimeError
806 self.assertRaises(RuntimeError, map, badfunc, range(5))
Walter Dörwald919497e2003-01-19 16:23:59 +0000807
808 def test_max(self):
809 self.assertEqual(max('123123'), '3')
810 self.assertEqual(max(1, 2, 3), 3)
811 self.assertEqual(max((1, 2, 3, 1, 2, 3)), 3)
812 self.assertEqual(max([1, 2, 3, 1, 2, 3]), 3)
813
814 self.assertEqual(max(1, 2L, 3.0), 3.0)
815 self.assertEqual(max(1L, 2.0, 3), 3)
816 self.assertEqual(max(1.0, 2, 3L), 3L)
817
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +0000818 for stmt in (
819 "max(key=int)", # no args
820 "max(1, key=int)", # single arg not iterable
821 "max(1, 2, keystone=int)", # wrong keyword
822 "max(1, 2, key=int, abc=int)", # two many keywords
823 "max(1, 2, key=1)", # keyfunc is not callable
824 ):
Tim Peters7f061872004-12-07 21:17:46 +0000825 try:
826 exec(stmt) in globals()
827 except TypeError:
828 pass
829 else:
830 self.fail(stmt)
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +0000831
832 self.assertEqual(max((1,), key=neg), 1) # one elem iterable
833 self.assertEqual(max((1,2), key=neg), 1) # two elem iterable
834 self.assertEqual(max(1, 2, key=neg), 1) # two elems
835
836 data = [random.randrange(200) for i in range(100)]
837 keys = dict((elem, random.randrange(50)) for elem in data)
838 f = keys.__getitem__
839 self.assertEqual(max(data, key=f),
840 sorted(reversed(data), key=f)[-1])
841
Walter Dörwald919497e2003-01-19 16:23:59 +0000842 def test_min(self):
843 self.assertEqual(min('123123'), '1')
844 self.assertEqual(min(1, 2, 3), 1)
845 self.assertEqual(min((1, 2, 3, 1, 2, 3)), 1)
846 self.assertEqual(min([1, 2, 3, 1, 2, 3]), 1)
847
848 self.assertEqual(min(1, 2L, 3.0), 1)
849 self.assertEqual(min(1L, 2.0, 3), 1L)
850 self.assertEqual(min(1.0, 2, 3L), 1.0)
851
852 self.assertRaises(TypeError, min)
853 self.assertRaises(TypeError, min, 42)
854 self.assertRaises(ValueError, min, ())
855 class BadSeq:
856 def __getitem__(self, index):
857 raise ValueError
858 self.assertRaises(ValueError, min, BadSeq())
859 class BadNumber:
860 def __cmp__(self, other):
861 raise ValueError
862 self.assertRaises(ValueError, min, (42, BadNumber()))
863
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +0000864 for stmt in (
865 "min(key=int)", # no args
866 "min(1, key=int)", # single arg not iterable
867 "min(1, 2, keystone=int)", # wrong keyword
868 "min(1, 2, key=int, abc=int)", # two many keywords
869 "min(1, 2, key=1)", # keyfunc is not callable
870 ):
Tim Peters7f061872004-12-07 21:17:46 +0000871 try:
872 exec(stmt) in globals()
873 except TypeError:
874 pass
875 else:
876 self.fail(stmt)
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +0000877
878 self.assertEqual(min((1,), key=neg), 1) # one elem iterable
879 self.assertEqual(min((1,2), key=neg), 2) # two elem iterable
880 self.assertEqual(min(1, 2, key=neg), 2) # two elems
881
882 data = [random.randrange(200) for i in range(100)]
883 keys = dict((elem, random.randrange(50)) for elem in data)
884 f = keys.__getitem__
885 self.assertEqual(min(data, key=f),
886 sorted(data, key=f)[0])
887
Georg Brandl28e08732008-04-30 19:47:09 +0000888 def test_next(self):
889 it = iter(range(2))
890 self.assertEqual(next(it), 0)
891 self.assertEqual(next(it), 1)
892 self.assertRaises(StopIteration, next, it)
893 self.assertRaises(StopIteration, next, it)
894 self.assertEquals(next(it, 42), 42)
895
896 class Iter(object):
897 def __iter__(self):
898 return self
899 def next(self):
900 raise StopIteration
901
902 it = iter(Iter())
903 self.assertEquals(next(it, 42), 42)
904 self.assertRaises(StopIteration, next, it)
905
906 def gen():
907 yield 1
908 return
909
910 it = gen()
911 self.assertEquals(next(it), 1)
912 self.assertRaises(StopIteration, next, it)
913 self.assertEquals(next(it, 42), 42)
914
Walter Dörwald919497e2003-01-19 16:23:59 +0000915 def test_oct(self):
916 self.assertEqual(oct(100), '0144')
917 self.assertEqual(oct(100L), '0144L')
Guido van Rossum6c9e1302003-11-29 23:52:13 +0000918 self.assertEqual(oct(-100), '-0144')
Walter Dörwald919497e2003-01-19 16:23:59 +0000919 self.assertEqual(oct(-100L), '-0144L')
920 self.assertRaises(TypeError, oct, ())
921
922 def write_testfile(self):
923 # NB the first 4 lines are also used to test input and raw_input, below
924 fp = open(TESTFN, 'w')
925 try:
926 fp.write('1+1\n')
927 fp.write('1+1\n')
928 fp.write('The quick brown fox jumps over the lazy dog')
929 fp.write('.\n')
930 fp.write('Dear John\n')
931 fp.write('XXX'*100)
932 fp.write('YYY'*100)
933 finally:
934 fp.close()
935
936 def test_open(self):
937 self.write_testfile()
938 fp = open(TESTFN, 'r')
939 try:
940 self.assertEqual(fp.readline(4), '1+1\n')
941 self.assertEqual(fp.readline(4), '1+1\n')
942 self.assertEqual(fp.readline(), 'The quick brown fox jumps over the lazy dog.\n')
943 self.assertEqual(fp.readline(4), 'Dear')
944 self.assertEqual(fp.readline(100), ' John\n')
945 self.assertEqual(fp.read(300), 'XXX'*100)
946 self.assertEqual(fp.read(1000), 'YYY'*100)
947 finally:
948 fp.close()
949 unlink(TESTFN)
950
951 def test_ord(self):
952 self.assertEqual(ord(' '), 32)
953 self.assertEqual(ord('A'), 65)
954 self.assertEqual(ord('a'), 97)
955 if have_unicode:
956 self.assertEqual(ord(unichr(sys.maxunicode)), sys.maxunicode)
957 self.assertRaises(TypeError, ord, 42)
Walter Dörwald4e41a4b2005-08-03 17:09:04 +0000958 if have_unicode:
959 self.assertRaises(TypeError, ord, unicode("12"))
Walter Dörwald919497e2003-01-19 16:23:59 +0000960
961 def test_pow(self):
962 self.assertEqual(pow(0,0), 1)
963 self.assertEqual(pow(0,1), 0)
964 self.assertEqual(pow(1,0), 1)
965 self.assertEqual(pow(1,1), 1)
966
967 self.assertEqual(pow(2,0), 1)
968 self.assertEqual(pow(2,10), 1024)
969 self.assertEqual(pow(2,20), 1024*1024)
970 self.assertEqual(pow(2,30), 1024*1024*1024)
971
972 self.assertEqual(pow(-2,0), 1)
973 self.assertEqual(pow(-2,1), -2)
974 self.assertEqual(pow(-2,2), 4)
975 self.assertEqual(pow(-2,3), -8)
976
977 self.assertEqual(pow(0L,0), 1)
978 self.assertEqual(pow(0L,1), 0)
979 self.assertEqual(pow(1L,0), 1)
980 self.assertEqual(pow(1L,1), 1)
981
982 self.assertEqual(pow(2L,0), 1)
983 self.assertEqual(pow(2L,10), 1024)
984 self.assertEqual(pow(2L,20), 1024*1024)
985 self.assertEqual(pow(2L,30), 1024*1024*1024)
986
987 self.assertEqual(pow(-2L,0), 1)
988 self.assertEqual(pow(-2L,1), -2)
989 self.assertEqual(pow(-2L,2), 4)
990 self.assertEqual(pow(-2L,3), -8)
991
992 self.assertAlmostEqual(pow(0.,0), 1.)
993 self.assertAlmostEqual(pow(0.,1), 0.)
994 self.assertAlmostEqual(pow(1.,0), 1.)
995 self.assertAlmostEqual(pow(1.,1), 1.)
996
997 self.assertAlmostEqual(pow(2.,0), 1.)
998 self.assertAlmostEqual(pow(2.,10), 1024.)
999 self.assertAlmostEqual(pow(2.,20), 1024.*1024.)
1000 self.assertAlmostEqual(pow(2.,30), 1024.*1024.*1024.)
1001
1002 self.assertAlmostEqual(pow(-2.,0), 1.)
1003 self.assertAlmostEqual(pow(-2.,1), -2.)
1004 self.assertAlmostEqual(pow(-2.,2), 4.)
1005 self.assertAlmostEqual(pow(-2.,3), -8.)
1006
1007 for x in 2, 2L, 2.0:
1008 for y in 10, 10L, 10.0:
1009 for z in 1000, 1000L, 1000.0:
1010 if isinstance(x, float) or \
1011 isinstance(y, float) or \
1012 isinstance(z, float):
1013 self.assertRaises(TypeError, pow, x, y, z)
1014 else:
1015 self.assertAlmostEqual(pow(x, y, z), 24.0)
1016
1017 self.assertRaises(TypeError, pow, -1, -2, 3)
1018 self.assertRaises(ValueError, pow, 1, 2, 0)
1019 self.assertRaises(TypeError, pow, -1L, -2L, 3L)
1020 self.assertRaises(ValueError, pow, 1L, 2L, 0L)
Jeffrey Yasskin9871d8f2008-01-05 08:47:13 +00001021 # Will return complex in 3.0:
1022 self.assertRaises(ValueError, pow, -342.43, 0.234)
Walter Dörwald919497e2003-01-19 16:23:59 +00001023
1024 self.assertRaises(TypeError, pow)
1025
1026 def test_range(self):
1027 self.assertEqual(range(3), [0, 1, 2])
1028 self.assertEqual(range(1, 5), [1, 2, 3, 4])
1029 self.assertEqual(range(0), [])
1030 self.assertEqual(range(-3), [])
1031 self.assertEqual(range(1, 10, 3), [1, 4, 7])
1032 self.assertEqual(range(5, -5, -3), [5, 2, -1, -4])
1033
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001034 # Now test range() with longs
1035 self.assertEqual(range(-2**100), [])
1036 self.assertEqual(range(0, -2**100), [])
1037 self.assertEqual(range(0, 2**100, -1), [])
1038 self.assertEqual(range(0, 2**100, -1), [])
1039
1040 a = long(10 * sys.maxint)
1041 b = long(100 * sys.maxint)
1042 c = long(50 * sys.maxint)
1043
1044 self.assertEqual(range(a, a+2), [a, a+1])
1045 self.assertEqual(range(a+2, a, -1L), [a+2, a+1])
1046 self.assertEqual(range(a+4, a, -2), [a+4, a+2])
1047
1048 seq = range(a, b, c)
1049 self.assert_(a in seq)
1050 self.assert_(b not in seq)
1051 self.assertEqual(len(seq), 2)
1052
1053 seq = range(b, a, -c)
1054 self.assert_(b in seq)
1055 self.assert_(a not in seq)
1056 self.assertEqual(len(seq), 2)
1057
1058 seq = range(-a, -b, -c)
1059 self.assert_(-a in seq)
1060 self.assert_(-b not in seq)
1061 self.assertEqual(len(seq), 2)
1062
Walter Dörwald919497e2003-01-19 16:23:59 +00001063 self.assertRaises(TypeError, range)
1064 self.assertRaises(TypeError, range, 1, 2, 3, 4)
1065 self.assertRaises(ValueError, range, 1, 2, 0)
Neal Norwitzfcf44352005-11-27 20:37:43 +00001066 self.assertRaises(ValueError, range, a, a + 1, long(0))
1067
1068 class badzero(int):
1069 def __cmp__(self, other):
1070 raise RuntimeError
Nick Coghlan48361f52008-08-11 15:45:58 +00001071 __hash__ = None # Invalid cmp makes this unhashable
Neal Norwitzfcf44352005-11-27 20:37:43 +00001072 self.assertRaises(RuntimeError, range, a, a + 1, badzero(1))
Walter Dörwald919497e2003-01-19 16:23:59 +00001073
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001074 # Reject floats when it would require PyLongs to represent.
1075 # (smaller floats still accepted, but deprecated)
Tim Peters299b3df2003-04-15 14:40:03 +00001076 self.assertRaises(TypeError, range, 1e100, 1e101, 1e101)
Mark Dickinsone02c9d22010-05-07 13:23:18 +00001077 with check_warnings() as w:
1078 warnings.simplefilter("always")
1079 self.assertEqual(range(1.0), [0])
1080 self.assertEqual(w.category, DeprecationWarning)
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001081
Walter Dörwald357981e2003-04-15 18:59:28 +00001082 self.assertRaises(TypeError, range, 0, "spam")
1083 self.assertRaises(TypeError, range, 0, 42, "spam")
1084
1085 self.assertRaises(OverflowError, range, -sys.maxint, sys.maxint)
1086 self.assertRaises(OverflowError, range, 0, 2*sys.maxint)
1087
Mark Dickinsone02c9d22010-05-07 13:23:18 +00001088 bignum = 2*sys.maxint
1089 smallnum = 42
1090 # Old-style user-defined class with __int__ method
1091 class I0:
1092 def __init__(self, n):
1093 self.n = int(n)
1094 def __int__(self):
1095 return self.n
1096 self.assertEqual(range(I0(bignum), I0(bignum + 1)), [bignum])
1097 self.assertEqual(range(I0(smallnum), I0(smallnum + 1)), [smallnum])
1098
1099 # New-style user-defined class with __int__ method
1100 class I1(object):
1101 def __init__(self, n):
1102 self.n = int(n)
1103 def __int__(self):
1104 return self.n
1105 self.assertEqual(range(I1(bignum), I1(bignum + 1)), [bignum])
1106 self.assertEqual(range(I1(smallnum), I1(smallnum + 1)), [smallnum])
1107
1108 # New-style user-defined class with failing __int__ method
1109 class IX(object):
1110 def __int__(self):
1111 raise RuntimeError
1112 self.assertRaises(RuntimeError, range, IX())
1113
1114 # New-style user-defined class with invalid __int__ method
1115 class IN(object):
1116 def __int__(self):
1117 return "not a number"
1118 self.assertRaises(TypeError, range, IN())
1119
1120 # Exercise various combinations of bad arguments, to check
1121 # refcounting logic
1122 self.assertRaises(TypeError, range, 1e100)
1123
1124 self.assertRaises(TypeError, range, 0, 1e100)
1125 self.assertRaises(TypeError, range, 1e100, 0)
1126 self.assertRaises(TypeError, range, 1e100, 1e100)
1127
1128 self.assertRaises(TypeError, range, 0, 0, 1e100)
1129 self.assertRaises(TypeError, range, 0, 1e100, 1)
1130 self.assertRaises(TypeError, range, 0, 1e100, 1e100)
1131 self.assertRaises(TypeError, range, 1e100, 0, 1)
1132 self.assertRaises(TypeError, range, 1e100, 0, 1e100)
1133 self.assertRaises(TypeError, range, 1e100, 1e100, 1)
1134 self.assertRaises(TypeError, range, 1e100, 1e100, 1e100)
1135
Walter Dörwald919497e2003-01-19 16:23:59 +00001136 def test_input_and_raw_input(self):
1137 self.write_testfile()
1138 fp = open(TESTFN, 'r')
1139 savestdin = sys.stdin
1140 savestdout = sys.stdout # Eats the echo
1141 try:
1142 sys.stdin = fp
1143 sys.stdout = BitBucket()
1144 self.assertEqual(input(), 2)
1145 self.assertEqual(input('testing\n'), 2)
1146 self.assertEqual(raw_input(), 'The quick brown fox jumps over the lazy dog.')
1147 self.assertEqual(raw_input('testing\n'), 'Dear John')
Tim Peters8e24a962006-08-09 00:52:26 +00001148
Georg Brandl7e3ba2a2006-08-06 08:23:54 +00001149 # SF 1535165: don't segfault on closed stdin
1150 # sys.stdout must be a regular file for triggering
1151 sys.stdout = savestdout
1152 sys.stdin.close()
Georg Brandld336e982006-08-06 09:17:16 +00001153 self.assertRaises(ValueError, input)
Georg Brandl7e3ba2a2006-08-06 08:23:54 +00001154
1155 sys.stdout = BitBucket()
Walter Dörwald919497e2003-01-19 16:23:59 +00001156 sys.stdin = cStringIO.StringIO("NULL\0")
1157 self.assertRaises(TypeError, input, 42, 42)
1158 sys.stdin = cStringIO.StringIO(" 'whitespace'")
1159 self.assertEqual(input(), 'whitespace')
1160 sys.stdin = cStringIO.StringIO()
1161 self.assertRaises(EOFError, input)
Hye-Shik Changff83c2b2004-02-02 13:39:01 +00001162
1163 # SF 876178: make sure input() respect future options.
1164 sys.stdin = cStringIO.StringIO('1/2')
1165 sys.stdout = cStringIO.StringIO()
1166 exec compile('print input()', 'test_builtin_tmp', 'exec')
1167 sys.stdin.seek(0, 0)
1168 exec compile('from __future__ import division;print input()',
1169 'test_builtin_tmp', 'exec')
1170 sys.stdin.seek(0, 0)
1171 exec compile('print input()', 'test_builtin_tmp', 'exec')
Tim Petersb82cb8d2006-03-28 07:39:22 +00001172 # The result we expect depends on whether new division semantics
1173 # are already in effect.
1174 if 1/2 == 0:
1175 # This test was compiled with old semantics.
1176 expected = ['0', '0.5', '0']
1177 else:
1178 # This test was compiled with new semantics (e.g., -Qnew
1179 # was given on the command line.
1180 expected = ['0.5', '0.5', '0.5']
1181 self.assertEqual(sys.stdout.getvalue().splitlines(), expected)
Hye-Shik Changff83c2b2004-02-02 13:39:01 +00001182
Walter Dörwald919497e2003-01-19 16:23:59 +00001183 del sys.stdout
1184 self.assertRaises(RuntimeError, input, 'prompt')
1185 del sys.stdin
1186 self.assertRaises(RuntimeError, input, 'prompt')
1187 finally:
1188 sys.stdin = savestdin
1189 sys.stdout = savestdout
1190 fp.close()
1191 unlink(TESTFN)
1192
1193 def test_reduce(self):
1194 self.assertEqual(reduce(lambda x, y: x+y, ['a', 'b', 'c'], ''), 'abc')
1195 self.assertEqual(
1196 reduce(lambda x, y: x+y, [['a', 'c'], [], ['d', 'w']], []),
1197 ['a','c','d','w']
1198 )
1199 self.assertEqual(reduce(lambda x, y: x*y, range(2,8), 1), 5040)
1200 self.assertEqual(
1201 reduce(lambda x, y: x*y, range(2,21), 1L),
1202 2432902008176640000L
1203 )
1204 self.assertEqual(reduce(lambda x, y: x+y, Squares(10)), 285)
1205 self.assertEqual(reduce(lambda x, y: x+y, Squares(10), 0), 285)
1206 self.assertEqual(reduce(lambda x, y: x+y, Squares(0), 0), 0)
1207 self.assertRaises(TypeError, reduce)
1208 self.assertRaises(TypeError, reduce, 42, 42)
1209 self.assertRaises(TypeError, reduce, 42, 42, 42)
1210 self.assertEqual(reduce(42, "1"), "1") # func is never called with one item
1211 self.assertEqual(reduce(42, "", "1"), "1") # func is never called with one item
1212 self.assertRaises(TypeError, reduce, 42, (42, 42))
1213
1214 class BadSeq:
1215 def __getitem__(self, index):
1216 raise ValueError
1217 self.assertRaises(ValueError, reduce, 42, BadSeq())
1218
1219 def test_reload(self):
1220 import marshal
1221 reload(marshal)
1222 import string
1223 reload(string)
1224 ## import sys
1225 ## self.assertRaises(ImportError, reload, sys)
1226
1227 def test_repr(self):
1228 self.assertEqual(repr(''), '\'\'')
1229 self.assertEqual(repr(0), '0')
1230 self.assertEqual(repr(0L), '0L')
1231 self.assertEqual(repr(()), '()')
1232 self.assertEqual(repr([]), '[]')
1233 self.assertEqual(repr({}), '{}')
1234 a = []
1235 a.append(a)
1236 self.assertEqual(repr(a), '[[...]]')
1237 a = {}
1238 a[0] = a
1239 self.assertEqual(repr(a), '{0: {...}}')
1240
1241 def test_round(self):
1242 self.assertEqual(round(0.0), 0.0)
Jeffrey Yasskin2f3c16b2008-01-03 02:21:52 +00001243 self.assertEqual(type(round(0.0)), float) # Will be int in 3.0.
Walter Dörwald919497e2003-01-19 16:23:59 +00001244 self.assertEqual(round(1.0), 1.0)
1245 self.assertEqual(round(10.0), 10.0)
1246 self.assertEqual(round(1000000000.0), 1000000000.0)
1247 self.assertEqual(round(1e20), 1e20)
1248
1249 self.assertEqual(round(-1.0), -1.0)
1250 self.assertEqual(round(-10.0), -10.0)
1251 self.assertEqual(round(-1000000000.0), -1000000000.0)
1252 self.assertEqual(round(-1e20), -1e20)
1253
1254 self.assertEqual(round(0.1), 0.0)
1255 self.assertEqual(round(1.1), 1.0)
1256 self.assertEqual(round(10.1), 10.0)
1257 self.assertEqual(round(1000000000.1), 1000000000.0)
1258
1259 self.assertEqual(round(-1.1), -1.0)
1260 self.assertEqual(round(-10.1), -10.0)
1261 self.assertEqual(round(-1000000000.1), -1000000000.0)
1262
1263 self.assertEqual(round(0.9), 1.0)
1264 self.assertEqual(round(9.9), 10.0)
1265 self.assertEqual(round(999999999.9), 1000000000.0)
1266
1267 self.assertEqual(round(-0.9), -1.0)
1268 self.assertEqual(round(-9.9), -10.0)
1269 self.assertEqual(round(-999999999.9), -1000000000.0)
1270
1271 self.assertEqual(round(-8.0, -1), -10.0)
Jeffrey Yasskin2f3c16b2008-01-03 02:21:52 +00001272 self.assertEqual(type(round(-8.0, -1)), float)
1273
1274 self.assertEqual(type(round(-8.0, 0)), float)
1275 self.assertEqual(type(round(-8.0, 1)), float)
1276
Jeffrey Yasskin9871d8f2008-01-05 08:47:13 +00001277 # Check half rounding behaviour.
Jeffrey Yasskin2f3c16b2008-01-03 02:21:52 +00001278 self.assertEqual(round(5.5), 6)
Jeffrey Yasskin9871d8f2008-01-05 08:47:13 +00001279 self.assertEqual(round(6.5), 7)
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
1283 # Check behavior on ints
1284 self.assertEqual(round(0), 0)
1285 self.assertEqual(round(8), 8)
1286 self.assertEqual(round(-8), -8)
1287 self.assertEqual(type(round(0)), float) # Will be int in 3.0.
1288 self.assertEqual(type(round(-8, -1)), float)
1289 self.assertEqual(type(round(-8, 0)), float)
1290 self.assertEqual(type(round(-8, 1)), float)
Walter Dörwald919497e2003-01-19 16:23:59 +00001291
Georg Brandlccadf842006-03-31 18:54:53 +00001292 # test new kwargs
1293 self.assertEqual(round(number=-8.0, ndigits=-1), -10.0)
1294
Walter Dörwald919497e2003-01-19 16:23:59 +00001295 self.assertRaises(TypeError, round)
1296
Jeffrey Yasskin2f3c16b2008-01-03 02:21:52 +00001297 # test generic rounding delegation for reals
1298 class TestRound(object):
Jeffrey Yasskin9871d8f2008-01-05 08:47:13 +00001299 def __float__(self):
1300 return 23.0
Jeffrey Yasskin2f3c16b2008-01-03 02:21:52 +00001301
1302 class TestNoRound(object):
1303 pass
1304
1305 self.assertEqual(round(TestRound()), 23)
1306
1307 self.assertRaises(TypeError, round, 1, 2, 3)
Jeffrey Yasskin9871d8f2008-01-05 08:47:13 +00001308 self.assertRaises(TypeError, round, TestNoRound())
Jeffrey Yasskin2f3c16b2008-01-03 02:21:52 +00001309
1310 t = TestNoRound()
Jeffrey Yasskin9871d8f2008-01-05 08:47:13 +00001311 t.__float__ = lambda *args: args
1312 self.assertRaises(TypeError, round, t)
1313 self.assertRaises(TypeError, round, t, 0)
Jeffrey Yasskin2f3c16b2008-01-03 02:21:52 +00001314
Mark Dickinsonf2637242009-11-09 17:45:40 +00001315 def test_round_large(self):
1316 # Issue #1869: integral floats should remain unchanged
1317 self.assertEqual(round(5e15-1), 5e15-1)
1318 self.assertEqual(round(5e15), 5e15)
1319 self.assertEqual(round(5e15+1), 5e15+1)
1320 self.assertEqual(round(5e15+2), 5e15+2)
1321 self.assertEqual(round(5e15+3), 5e15+3)
1322
Walter Dörwald919497e2003-01-19 16:23:59 +00001323 def test_setattr(self):
Tim Petersf2715e02003-02-19 02:35:07 +00001324 setattr(sys, 'spam', 1)
1325 self.assertEqual(sys.spam, 1)
1326 self.assertRaises(TypeError, setattr, sys, 1, 'spam')
1327 self.assertRaises(TypeError, setattr)
Walter Dörwald919497e2003-01-19 16:23:59 +00001328
Alex Martellia70b1912003-04-22 08:12:33 +00001329 def test_sum(self):
1330 self.assertEqual(sum([]), 0)
1331 self.assertEqual(sum(range(2,8)), 27)
1332 self.assertEqual(sum(iter(range(2,8))), 27)
1333 self.assertEqual(sum(Squares(10)), 285)
1334 self.assertEqual(sum(iter(Squares(10))), 285)
1335 self.assertEqual(sum([[1], [2], [3]], []), [1, 2, 3])
1336
1337 self.assertRaises(TypeError, sum)
1338 self.assertRaises(TypeError, sum, 42)
1339 self.assertRaises(TypeError, sum, ['a', 'b', 'c'])
1340 self.assertRaises(TypeError, sum, ['a', 'b', 'c'], '')
1341 self.assertRaises(TypeError, sum, [[1], [2], [3]])
1342 self.assertRaises(TypeError, sum, [{2:3}])
1343 self.assertRaises(TypeError, sum, [{2:3}]*2, {2:3})
1344
1345 class BadSeq:
1346 def __getitem__(self, index):
1347 raise ValueError
1348 self.assertRaises(ValueError, sum, BadSeq())
1349
Walter Dörwald919497e2003-01-19 16:23:59 +00001350 def test_type(self):
1351 self.assertEqual(type(''), type('123'))
1352 self.assertNotEqual(type(''), type(()))
1353
1354 def test_unichr(self):
1355 if have_unicode:
1356 self.assertEqual(unichr(32), unicode(' '))
1357 self.assertEqual(unichr(65), unicode('A'))
1358 self.assertEqual(unichr(97), unicode('a'))
1359 self.assertEqual(
1360 unichr(sys.maxunicode),
1361 unicode('\\U%08x' % (sys.maxunicode), 'unicode-escape')
1362 )
1363 self.assertRaises(ValueError, unichr, sys.maxunicode+1)
1364 self.assertRaises(TypeError, unichr)
Amaury Forgeot d'Arc39fd6722008-07-31 21:28:03 +00001365 self.assertRaises((OverflowError, ValueError), unichr, 2**32)
Walter Dörwald919497e2003-01-19 16:23:59 +00001366
Guido van Rossumfee7b932005-01-16 00:21:28 +00001367 # We don't want self in vars(), so these are static methods
1368
1369 @staticmethod
Walter Dörwald919497e2003-01-19 16:23:59 +00001370 def get_vars_f0():
1371 return vars()
Walter Dörwald919497e2003-01-19 16:23:59 +00001372
Guido van Rossumfee7b932005-01-16 00:21:28 +00001373 @staticmethod
Walter Dörwald919497e2003-01-19 16:23:59 +00001374 def get_vars_f2():
1375 BuiltinTest.get_vars_f0()
1376 a = 1
1377 b = 2
1378 return vars()
Walter Dörwald919497e2003-01-19 16:23:59 +00001379
1380 def test_vars(self):
Raymond Hettingera690a992003-11-16 16:17:49 +00001381 self.assertEqual(set(vars()), set(dir()))
Walter Dörwald919497e2003-01-19 16:23:59 +00001382 import sys
Raymond Hettingera690a992003-11-16 16:17:49 +00001383 self.assertEqual(set(vars(sys)), set(dir(sys)))
Walter Dörwald919497e2003-01-19 16:23:59 +00001384 self.assertEqual(self.get_vars_f0(), {})
1385 self.assertEqual(self.get_vars_f2(), {'a': 1, 'b': 2})
1386 self.assertRaises(TypeError, vars, 42, 42)
1387 self.assertRaises(TypeError, vars, 42)
1388
1389 def test_zip(self):
1390 a = (1, 2, 3)
1391 b = (4, 5, 6)
1392 t = [(1, 4), (2, 5), (3, 6)]
1393 self.assertEqual(zip(a, b), t)
1394 b = [4, 5, 6]
1395 self.assertEqual(zip(a, b), t)
1396 b = (4, 5, 6, 7)
1397 self.assertEqual(zip(a, b), t)
1398 class I:
1399 def __getitem__(self, i):
1400 if i < 0 or i > 2: raise IndexError
1401 return i + 4
1402 self.assertEqual(zip(a, I()), t)
Raymond Hettingereaef6152003-08-02 07:42:57 +00001403 self.assertEqual(zip(), [])
1404 self.assertEqual(zip(*[]), [])
Walter Dörwald919497e2003-01-19 16:23:59 +00001405 self.assertRaises(TypeError, zip, None)
1406 class G:
1407 pass
1408 self.assertRaises(TypeError, zip, a, G())
1409
1410 # Make sure zip doesn't try to allocate a billion elements for the
1411 # result list when one of its arguments doesn't say how long it is.
1412 # A MemoryError is the most likely failure mode.
1413 class SequenceWithoutALength:
1414 def __getitem__(self, i):
1415 if i == 5:
1416 raise IndexError
1417 else:
1418 return i
1419 self.assertEqual(
1420 zip(SequenceWithoutALength(), xrange(2**30)),
1421 list(enumerate(range(5)))
1422 )
1423
1424 class BadSeq:
1425 def __getitem__(self, i):
1426 if i == 5:
1427 raise ValueError
1428 else:
1429 return i
1430 self.assertRaises(ValueError, zip, BadSeq(), BadSeq())
1431
Eric Smitha9f7d622008-02-17 19:46:49 +00001432 def test_format(self):
1433 # Test the basic machinery of the format() builtin. Don't test
1434 # the specifics of the various formatters
1435 self.assertEqual(format(3, ''), '3')
1436
1437 # Returns some classes to use for various tests. There's
1438 # an old-style version, and a new-style version
1439 def classes_new():
1440 class A(object):
1441 def __init__(self, x):
1442 self.x = x
1443 def __format__(self, format_spec):
1444 return str(self.x) + format_spec
1445 class DerivedFromA(A):
1446 pass
1447
1448 class Simple(object): pass
1449 class DerivedFromSimple(Simple):
1450 def __init__(self, x):
1451 self.x = x
1452 def __format__(self, format_spec):
1453 return str(self.x) + format_spec
1454 class DerivedFromSimple2(DerivedFromSimple): pass
1455 return A, DerivedFromA, DerivedFromSimple, DerivedFromSimple2
1456
1457 # In 3.0, classes_classic has the same meaning as classes_new
1458 def classes_classic():
1459 class A:
1460 def __init__(self, x):
1461 self.x = x
1462 def __format__(self, format_spec):
1463 return str(self.x) + format_spec
1464 class DerivedFromA(A):
1465 pass
1466
1467 class Simple: pass
1468 class DerivedFromSimple(Simple):
1469 def __init__(self, x):
1470 self.x = x
1471 def __format__(self, format_spec):
1472 return str(self.x) + format_spec
1473 class DerivedFromSimple2(DerivedFromSimple): pass
1474 return A, DerivedFromA, DerivedFromSimple, DerivedFromSimple2
1475
1476 def class_test(A, DerivedFromA, DerivedFromSimple, DerivedFromSimple2):
1477 self.assertEqual(format(A(3), 'spec'), '3spec')
1478 self.assertEqual(format(DerivedFromA(4), 'spec'), '4spec')
1479 self.assertEqual(format(DerivedFromSimple(5), 'abc'), '5abc')
1480 self.assertEqual(format(DerivedFromSimple2(10), 'abcdef'),
1481 '10abcdef')
1482
1483 class_test(*classes_new())
1484 class_test(*classes_classic())
1485
1486 def empty_format_spec(value):
1487 # test that:
1488 # format(x, '') == str(x)
1489 # format(x) == str(x)
1490 self.assertEqual(format(value, ""), str(value))
1491 self.assertEqual(format(value), str(value))
1492
1493 # for builtin types, format(x, "") == str(x)
1494 empty_format_spec(17**13)
1495 empty_format_spec(1.0)
1496 empty_format_spec(3.1415e104)
1497 empty_format_spec(-3.1415e104)
1498 empty_format_spec(3.1415e-104)
1499 empty_format_spec(-3.1415e-104)
1500 empty_format_spec(object)
1501 empty_format_spec(None)
1502
1503 # TypeError because self.__format__ returns the wrong type
1504 class BadFormatResult:
1505 def __format__(self, format_spec):
1506 return 1.0
1507 self.assertRaises(TypeError, format, BadFormatResult(), "")
1508
1509 # TypeError because format_spec is not unicode or str
1510 self.assertRaises(TypeError, format, object(), 4)
1511 self.assertRaises(TypeError, format, object(), object())
1512
1513 # tests for object.__format__ really belong elsewhere, but
1514 # there's no good place to put them
1515 x = object().__format__('')
1516 self.assert_(x.startswith('<object object at'))
1517
1518 # first argument to object.__format__ must be string
1519 self.assertRaises(TypeError, object().__format__, 3)
1520 self.assertRaises(TypeError, object().__format__, object())
1521 self.assertRaises(TypeError, object().__format__, None)
1522
1523 # make sure we can take a subclass of str as a format spec
1524 class DerivedFromStr(str): pass
1525 self.assertEqual(format(0, DerivedFromStr('10')), ' 0')
1526
Eric Smithfb0742f2008-02-22 17:43:17 +00001527 def test_bin(self):
1528 self.assertEqual(bin(0), '0b0')
1529 self.assertEqual(bin(1), '0b1')
1530 self.assertEqual(bin(-1), '-0b1')
1531 self.assertEqual(bin(2**65), '0b1' + '0' * 65)
1532 self.assertEqual(bin(2**65-1), '0b' + '1' * 65)
1533 self.assertEqual(bin(-(2**65)), '-0b1' + '0' * 65)
1534 self.assertEqual(bin(-(2**65-1)), '-0b' + '1' * 65)
1535
Georg Brandl11a81b22009-07-22 12:03:09 +00001536 def test_bytearray_translate(self):
1537 x = bytearray("abc")
1538 self.assertRaises(ValueError, x.translate, "1", 1)
1539 self.assertRaises(TypeError, x.translate, "1"*256, 1)
1540
Eric Smithce584d42008-02-21 20:17:08 +00001541class TestSorted(unittest.TestCase):
1542
1543 def test_basic(self):
1544 data = range(100)
1545 copy = data[:]
1546 random.shuffle(copy)
1547 self.assertEqual(data, sorted(copy))
1548 self.assertNotEqual(data, copy)
1549
1550 data.reverse()
1551 random.shuffle(copy)
1552 self.assertEqual(data, sorted(copy, cmp=lambda x, y: cmp(y,x)))
1553 self.assertNotEqual(data, copy)
1554 random.shuffle(copy)
1555 self.assertEqual(data, sorted(copy, key=lambda x: -x))
1556 self.assertNotEqual(data, copy)
1557 random.shuffle(copy)
1558 self.assertEqual(data, sorted(copy, reverse=1))
1559 self.assertNotEqual(data, copy)
1560
1561 def test_inputtypes(self):
1562 s = 'abracadabra'
1563 types = [list, tuple]
1564 if have_unicode:
1565 types.insert(0, unicode)
1566 for T in types:
1567 self.assertEqual(sorted(s), sorted(T(s)))
1568
1569 s = ''.join(dict.fromkeys(s).keys()) # unique letters only
1570 types = [set, frozenset, list, tuple, dict.fromkeys]
1571 if have_unicode:
1572 types.insert(0, unicode)
1573 for T in types:
1574 self.assertEqual(sorted(s), sorted(T(s)))
1575
1576 def test_baddecorator(self):
1577 data = 'The quick Brown fox Jumped over The lazy Dog'.split()
1578 self.assertRaises(TypeError, sorted, data, None, lambda x,y: 0)
1579
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001580def test_main(verbose=None):
1581 test_classes = (BuiltinTest, TestSorted)
1582
1583 run_unittest(*test_classes)
1584
1585 # verify reference counting
1586 if verbose and hasattr(sys, "gettotalrefcount"):
1587 import gc
1588 counts = [None] * 5
1589 for i in xrange(len(counts)):
1590 run_unittest(*test_classes)
1591 gc.collect()
1592 counts[i] = sys.gettotalrefcount()
1593 print counts
1594
Walter Dörwald919497e2003-01-19 16:23:59 +00001595
1596if __name__ == "__main__":
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001597 test_main(verbose=True)