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