blob: b6de524e6c36d7f5b0c41bb1574f6698d88392a5 [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 Dickinsona8fd66d2009-11-09 17:03:34 +00003import platform
Georg Brandla4f46e12010-02-07 17:03:15 +00004import unittest
Georg Brandlde9b6242006-04-30 11:13:56 +00005from test.test_support import fcmp, have_unicode, TESTFN, unlink, \
Florent Xicluna07627882010-03-21 01:14:24 +00006 run_unittest, check_py3k_warnings
Eric Smithd44b2fc2010-04-02 12:30:56 +00007import warnings
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00008from operator import neg
Guido van Rossum3bead091992-01-27 17:00:37 +00009
Florent Xicluna07627882010-03-21 01:14:24 +000010import sys, cStringIO, random, UserDict
Guido van Rossum3bead091992-01-27 17:00:37 +000011
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +000012# count the number of test runs.
13# used to skip running test_execfile() multiple times
Georg Brandl4e1be942009-10-27 22:56:09 +000014# and to create unique strings to intern in test_intern()
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +000015numruns = 0
16
Walter Dörwald919497e2003-01-19 16:23:59 +000017class Squares:
Guido van Rossum3bead091992-01-27 17:00:37 +000018
Walter Dörwald919497e2003-01-19 16:23:59 +000019 def __init__(self, max):
20 self.max = max
21 self.sofar = []
22
23 def __len__(self): return len(self.sofar)
24
25 def __getitem__(self, i):
26 if not 0 <= i < self.max: raise IndexError
27 n = len(self.sofar)
28 while n <= i:
29 self.sofar.append(n*n)
30 n += 1
31 return self.sofar[i]
32
33class StrSquares:
34
35 def __init__(self, max):
36 self.max = max
37 self.sofar = []
38
39 def __len__(self):
40 return len(self.sofar)
41
42 def __getitem__(self, i):
43 if not 0 <= i < self.max:
44 raise IndexError
45 n = len(self.sofar)
46 while n <= i:
47 self.sofar.append(str(n*n))
48 n += 1
49 return self.sofar[i]
50
51class BitBucket:
52 def write(self, line):
53 pass
54
Walter Dörwald919497e2003-01-19 16:23:59 +000055
Raymond Hettinger96229b12005-03-11 06:49:40 +000056class TestFailingBool:
57 def __nonzero__(self):
58 raise RuntimeError
59
60class TestFailingIter:
61 def __iter__(self):
62 raise RuntimeError
63
Walter Dörwald919497e2003-01-19 16:23:59 +000064class BuiltinTest(unittest.TestCase):
65
66 def test_import(self):
67 __import__('sys')
68 __import__('time')
69 __import__('string')
Georg Brandl5240d742007-03-13 20:46:32 +000070 __import__(name='sys')
71 __import__(name='time', level=0)
Walter Dörwald919497e2003-01-19 16:23:59 +000072 self.assertRaises(ImportError, __import__, 'spamspam')
73 self.assertRaises(TypeError, __import__, 1, 2, 3, 4)
Thomas Wouters8ddab272006-04-04 16:17:02 +000074 self.assertRaises(ValueError, __import__, '')
Georg Brandl5240d742007-03-13 20:46:32 +000075 self.assertRaises(TypeError, __import__, 'sys', name='sys')
Walter Dörwald919497e2003-01-19 16:23:59 +000076
77 def test_abs(self):
78 # int
79 self.assertEqual(abs(0), 0)
80 self.assertEqual(abs(1234), 1234)
81 self.assertEqual(abs(-1234), 1234)
Martin v. Löwis820d6ac2006-10-04 05:47:34 +000082 self.assertTrue(abs(-sys.maxint-1) > 0)
Walter Dörwald919497e2003-01-19 16:23:59 +000083 # float
84 self.assertEqual(abs(0.0), 0.0)
85 self.assertEqual(abs(3.14), 3.14)
86 self.assertEqual(abs(-3.14), 3.14)
87 # long
88 self.assertEqual(abs(0L), 0L)
89 self.assertEqual(abs(1234L), 1234L)
90 self.assertEqual(abs(-1234L), 1234L)
91 # str
92 self.assertRaises(TypeError, abs, 'a')
Mark Dickinson20665592010-05-25 19:01:08 +000093 # bool
94 self.assertEqual(abs(True), 1)
95 self.assertEqual(abs(False), 0)
96 # other
97 self.assertRaises(TypeError, abs)
98 self.assertRaises(TypeError, abs, None)
99 class AbsClass(object):
100 def __abs__(self):
101 return -5
102 self.assertEqual(abs(AbsClass()), -5)
Walter Dörwald919497e2003-01-19 16:23:59 +0000103
Raymond Hettinger96229b12005-03-11 06:49:40 +0000104 def test_all(self):
105 self.assertEqual(all([2, 4, 6]), True)
106 self.assertEqual(all([2, None, 6]), False)
107 self.assertRaises(RuntimeError, all, [2, TestFailingBool(), 6])
108 self.assertRaises(RuntimeError, all, TestFailingIter())
109 self.assertRaises(TypeError, all, 10) # Non-iterable
110 self.assertRaises(TypeError, all) # No args
111 self.assertRaises(TypeError, all, [2, 4, 6], []) # Too many args
112 self.assertEqual(all([]), True) # Empty iterator
Ezio Melotti7d0eb4b2013-02-21 23:15:40 +0200113 self.assertEqual(all([0, TestFailingBool()]), False)# Short-circuit
Raymond Hettinger96229b12005-03-11 06:49:40 +0000114 S = [50, 60]
115 self.assertEqual(all(x > 42 for x in S), True)
116 S = [50, 40, 60]
117 self.assertEqual(all(x > 42 for x in S), False)
118
119 def test_any(self):
120 self.assertEqual(any([None, None, None]), False)
121 self.assertEqual(any([None, 4, None]), True)
122 self.assertRaises(RuntimeError, any, [None, TestFailingBool(), 6])
R David Murray9b3085c2013-02-06 10:06:10 -0500123 self.assertRaises(RuntimeError, any, TestFailingIter())
Raymond Hettinger96229b12005-03-11 06:49:40 +0000124 self.assertRaises(TypeError, any, 10) # Non-iterable
125 self.assertRaises(TypeError, any) # No args
126 self.assertRaises(TypeError, any, [2, 4, 6], []) # Too many args
127 self.assertEqual(any([]), False) # Empty iterator
Ezio Melotti7d0eb4b2013-02-21 23:15:40 +0200128 self.assertEqual(any([1, TestFailingBool()]), True) # Short-circuit
Raymond Hettinger96229b12005-03-11 06:49:40 +0000129 S = [40, 60, 30]
130 self.assertEqual(any(x > 42 for x in S), True)
131 S = [10, 20, 30]
132 self.assertEqual(any(x > 42 for x in S), False)
133
Armin Rigo7ccbca92006-10-04 12:17:45 +0000134 def test_neg(self):
135 x = -sys.maxint-1
Benjamin Peterson5c8da862009-06-30 22:57:08 +0000136 self.assertTrue(isinstance(x, int))
Armin Rigo7ccbca92006-10-04 12:17:45 +0000137 self.assertEqual(-x, sys.maxint+1)
138
Walter Dörwald919497e2003-01-19 16:23:59 +0000139 def test_apply(self):
140 def f0(*args):
141 self.assertEqual(args, ())
142 def f1(a1):
143 self.assertEqual(a1, 1)
144 def f2(a1, a2):
145 self.assertEqual(a1, 1)
146 self.assertEqual(a2, 2)
147 def f3(a1, a2, a3):
148 self.assertEqual(a1, 1)
149 self.assertEqual(a2, 2)
150 self.assertEqual(a3, 3)
151 apply(f0, ())
152 apply(f1, (1,))
153 apply(f2, (1, 2))
154 apply(f3, (1, 2, 3))
155
156 # A PyCFunction that takes only positional parameters should allow an
157 # empty keyword dictionary to pass without a complaint, but raise a
158 # TypeError if the dictionary is non-empty.
159 apply(id, (1,), {})
160 self.assertRaises(TypeError, apply, id, (1,), {"foo": 1})
161 self.assertRaises(TypeError, apply)
162 self.assertRaises(TypeError, apply, id, 42)
163 self.assertRaises(TypeError, apply, id, (42,), 42)
164
165 def test_callable(self):
Benjamin Peterson5c8da862009-06-30 22:57:08 +0000166 self.assertTrue(callable(len))
Mark Dickinson20665592010-05-25 19:01:08 +0000167 self.assertFalse(callable("a"))
168 self.assertTrue(callable(callable))
169 self.assertTrue(callable(lambda x, y: x + y))
170 self.assertFalse(callable(__builtins__))
Walter Dörwald919497e2003-01-19 16:23:59 +0000171 def f(): pass
Benjamin Peterson5c8da862009-06-30 22:57:08 +0000172 self.assertTrue(callable(f))
Mark Dickinson20665592010-05-25 19:01:08 +0000173
174 class Classic:
Walter Dörwald919497e2003-01-19 16:23:59 +0000175 def meth(self): pass
Mark Dickinson20665592010-05-25 19:01:08 +0000176 self.assertTrue(callable(Classic))
177 c = Classic()
178 self.assertTrue(callable(c.meth))
179 self.assertFalse(callable(c))
180
181 class NewStyle(object):
182 def meth(self): pass
183 self.assertTrue(callable(NewStyle))
184 n = NewStyle()
185 self.assertTrue(callable(n.meth))
186 self.assertFalse(callable(n))
187
188 # Classic and new-style classes evaluate __call__() differently
189 c.__call__ = None
190 self.assertTrue(callable(c))
191 del c.__call__
192 self.assertFalse(callable(c))
193 n.__call__ = None
194 self.assertFalse(callable(n))
195 del n.__call__
196 self.assertFalse(callable(n))
197
198 class N2(object):
Walter Dörwald919497e2003-01-19 16:23:59 +0000199 def __call__(self): pass
Mark Dickinson20665592010-05-25 19:01:08 +0000200 n2 = N2()
201 self.assertTrue(callable(n2))
202 class N3(N2): pass
203 n3 = N3()
204 self.assertTrue(callable(n3))
Walter Dörwald919497e2003-01-19 16:23:59 +0000205
206 def test_chr(self):
207 self.assertEqual(chr(32), ' ')
208 self.assertEqual(chr(65), 'A')
209 self.assertEqual(chr(97), 'a')
210 self.assertEqual(chr(0xff), '\xff')
211 self.assertRaises(ValueError, chr, 256)
212 self.assertRaises(TypeError, chr)
213
214 def test_cmp(self):
215 self.assertEqual(cmp(-1, 1), -1)
216 self.assertEqual(cmp(1, -1), 1)
217 self.assertEqual(cmp(1, 1), 0)
Armin Rigo2b3eb402003-10-28 12:05:48 +0000218 # verify that circular objects are not handled
Walter Dörwald919497e2003-01-19 16:23:59 +0000219 a = []; a.append(a)
220 b = []; b.append(b)
221 from UserList import UserList
222 c = UserList(); c.append(c)
Armin Rigo2b3eb402003-10-28 12:05:48 +0000223 self.assertRaises(RuntimeError, cmp, a, b)
224 self.assertRaises(RuntimeError, cmp, b, c)
225 self.assertRaises(RuntimeError, cmp, c, a)
226 self.assertRaises(RuntimeError, cmp, a, c)
227 # okay, now break the cycles
Walter Dörwald919497e2003-01-19 16:23:59 +0000228 a.pop(); b.pop(); c.pop()
229 self.assertRaises(TypeError, cmp)
230
231 def test_coerce(self):
Benjamin Peterson5c8da862009-06-30 22:57:08 +0000232 self.assertTrue(not fcmp(coerce(1, 1.1), (1.0, 1.1)))
Walter Dörwald919497e2003-01-19 16:23:59 +0000233 self.assertEqual(coerce(1, 1L), (1L, 1L))
Benjamin Peterson5c8da862009-06-30 22:57:08 +0000234 self.assertTrue(not fcmp(coerce(1L, 1.1), (1.0, 1.1)))
Walter Dörwald919497e2003-01-19 16:23:59 +0000235 self.assertRaises(TypeError, coerce)
236 class BadNumber:
237 def __coerce__(self, other):
238 raise ValueError
239 self.assertRaises(ValueError, coerce, 42, BadNumber())
Neal Norwitzabcb0c02003-01-28 19:21:24 +0000240 self.assertRaises(OverflowError, coerce, 0.5, int("12345" * 1000))
Walter Dörwald919497e2003-01-19 16:23:59 +0000241
242 def test_compile(self):
243 compile('print 1\n', '', 'exec')
Just van Rossumf032f862003-02-09 20:38:48 +0000244 bom = '\xef\xbb\xbf'
245 compile(bom + 'print 1\n', '', 'exec')
Georg Brandl5240d742007-03-13 20:46:32 +0000246 compile(source='pass', filename='?', mode='exec')
247 compile(dont_inherit=0, filename='tmp', source='0', mode='eval')
248 compile('pass', '?', dont_inherit=1, mode='exec')
Walter Dörwald919497e2003-01-19 16:23:59 +0000249 self.assertRaises(TypeError, compile)
250 self.assertRaises(ValueError, compile, 'print 42\n', '<string>', 'badmode')
251 self.assertRaises(ValueError, compile, 'print 42\n', '<string>', 'single', 0xff)
Neal Norwitzfcf44352005-11-27 20:37:43 +0000252 self.assertRaises(TypeError, compile, chr(0), 'f', 'exec')
Georg Brandl5240d742007-03-13 20:46:32 +0000253 self.assertRaises(TypeError, compile, 'pass', '?', 'exec',
254 mode='eval', source='0', filename='tmp')
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000255 if have_unicode:
256 compile(unicode('print u"\xc3\xa5"\n', 'utf8'), '', 'exec')
Neal Norwitzfcf44352005-11-27 20:37:43 +0000257 self.assertRaises(TypeError, compile, unichr(0), 'f', 'exec')
258 self.assertRaises(ValueError, compile, unicode('a = 1'), 'f', 'bad')
Walter Dörwald919497e2003-01-19 16:23:59 +0000259
Georg Brandl5240d742007-03-13 20:46:32 +0000260
Walter Dörwald919497e2003-01-19 16:23:59 +0000261 def test_delattr(self):
262 import sys
263 sys.spam = 1
264 delattr(sys, 'spam')
265 self.assertRaises(TypeError, delattr)
266
267 def test_dir(self):
Georg Brandl871f1bc2007-03-12 13:17:36 +0000268 # dir(wrong number of arguments)
Walter Dörwald919497e2003-01-19 16:23:59 +0000269 self.assertRaises(TypeError, dir, 42, 42)
270
Georg Brandl871f1bc2007-03-12 13:17:36 +0000271 # dir() - local scope
272 local_var = 1
Ezio Melottiaa980582010-01-23 23:04:36 +0000273 self.assertIn('local_var', dir())
Georg Brandl871f1bc2007-03-12 13:17:36 +0000274
275 # dir(module)
276 import sys
Ezio Melottiaa980582010-01-23 23:04:36 +0000277 self.assertIn('exit', dir(sys))
Georg Brandl871f1bc2007-03-12 13:17:36 +0000278
279 # dir(module_with_invalid__dict__)
280 import types
281 class Foo(types.ModuleType):
282 __dict__ = 8
283 f = Foo("foo")
284 self.assertRaises(TypeError, dir, f)
285
286 # dir(type)
Ezio Melottiaa980582010-01-23 23:04:36 +0000287 self.assertIn("strip", dir(str))
288 self.assertNotIn("__mro__", dir(str))
Georg Brandl871f1bc2007-03-12 13:17:36 +0000289
290 # dir(obj)
291 class Foo(object):
292 def __init__(self):
293 self.x = 7
294 self.y = 8
295 self.z = 9
296 f = Foo()
Ezio Melottiaa980582010-01-23 23:04:36 +0000297 self.assertIn("y", dir(f))
Georg Brandl871f1bc2007-03-12 13:17:36 +0000298
299 # dir(obj_no__dict__)
300 class Foo(object):
301 __slots__ = []
302 f = Foo()
Ezio Melottiaa980582010-01-23 23:04:36 +0000303 self.assertIn("__repr__", dir(f))
Georg Brandl871f1bc2007-03-12 13:17:36 +0000304
305 # dir(obj_no__class__with__dict__)
306 # (an ugly trick to cause getattr(f, "__class__") to fail)
307 class Foo(object):
308 __slots__ = ["__class__", "__dict__"]
309 def __init__(self):
310 self.bar = "wow"
311 f = Foo()
Ezio Melottiaa980582010-01-23 23:04:36 +0000312 self.assertNotIn("__repr__", dir(f))
313 self.assertIn("bar", dir(f))
Georg Brandl871f1bc2007-03-12 13:17:36 +0000314
315 # dir(obj_using __dir__)
316 class Foo(object):
317 def __dir__(self):
318 return ["kan", "ga", "roo"]
319 f = Foo()
Benjamin Peterson5c8da862009-06-30 22:57:08 +0000320 self.assertTrue(dir(f) == ["ga", "kan", "roo"])
Georg Brandl871f1bc2007-03-12 13:17:36 +0000321
322 # dir(obj__dir__not_list)
323 class Foo(object):
324 def __dir__(self):
325 return 7
326 f = Foo()
327 self.assertRaises(TypeError, dir, f)
328
Walter Dörwald919497e2003-01-19 16:23:59 +0000329 def test_divmod(self):
330 self.assertEqual(divmod(12, 7), (1, 5))
331 self.assertEqual(divmod(-12, 7), (-2, 2))
332 self.assertEqual(divmod(12, -7), (-2, -2))
333 self.assertEqual(divmod(-12, -7), (1, -5))
334
335 self.assertEqual(divmod(12L, 7L), (1L, 5L))
336 self.assertEqual(divmod(-12L, 7L), (-2L, 2L))
337 self.assertEqual(divmod(12L, -7L), (-2L, -2L))
338 self.assertEqual(divmod(-12L, -7L), (1L, -5L))
339
340 self.assertEqual(divmod(12, 7L), (1, 5L))
341 self.assertEqual(divmod(-12, 7L), (-2, 2L))
342 self.assertEqual(divmod(12L, -7), (-2L, -2))
343 self.assertEqual(divmod(-12L, -7), (1L, -5))
344
Raymond Hettinger5ea7e312004-09-30 07:47:20 +0000345 self.assertEqual(divmod(-sys.maxint-1, -1),
346 (sys.maxint+1, 0))
347
Benjamin Peterson5c8da862009-06-30 22:57:08 +0000348 self.assertTrue(not fcmp(divmod(3.25, 1.0), (3.0, 0.25)))
349 self.assertTrue(not fcmp(divmod(-3.25, 1.0), (-4.0, 0.75)))
350 self.assertTrue(not fcmp(divmod(3.25, -1.0), (-4.0, -0.75)))
351 self.assertTrue(not fcmp(divmod(-3.25, -1.0), (3.0, -0.25)))
Walter Dörwald919497e2003-01-19 16:23:59 +0000352
353 self.assertRaises(TypeError, divmod)
354
355 def test_eval(self):
356 self.assertEqual(eval('1+1'), 2)
357 self.assertEqual(eval(' 1+1\n'), 2)
358 globals = {'a': 1, 'b': 2}
359 locals = {'b': 200, 'c': 300}
360 self.assertEqual(eval('a', globals) , 1)
361 self.assertEqual(eval('a', globals, locals), 1)
362 self.assertEqual(eval('b', globals, locals), 200)
363 self.assertEqual(eval('c', globals, locals), 300)
364 if have_unicode:
365 self.assertEqual(eval(unicode('1+1')), 2)
366 self.assertEqual(eval(unicode(' 1+1\n')), 2)
367 globals = {'a': 1, 'b': 2}
368 locals = {'b': 200, 'c': 300}
369 if have_unicode:
370 self.assertEqual(eval(unicode('a'), globals), 1)
371 self.assertEqual(eval(unicode('a'), globals, locals), 1)
372 self.assertEqual(eval(unicode('b'), globals, locals), 200)
373 self.assertEqual(eval(unicode('c'), globals, locals), 300)
Just van Rossumf032f862003-02-09 20:38:48 +0000374 bom = '\xef\xbb\xbf'
375 self.assertEqual(eval(bom + 'a', globals, locals), 1)
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000376 self.assertEqual(eval(unicode('u"\xc3\xa5"', 'utf8'), globals),
377 unicode('\xc3\xa5', 'utf8'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000378 self.assertRaises(TypeError, eval)
379 self.assertRaises(TypeError, eval, ())
380
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000381 def test_general_eval(self):
382 # Tests that general mappings can be used for the locals argument
383
384 class M:
385 "Test mapping interface versus possible calls from eval()."
386 def __getitem__(self, key):
387 if key == 'a':
388 return 12
389 raise KeyError
390 def keys(self):
391 return list('xyz')
392
393 m = M()
394 g = globals()
395 self.assertEqual(eval('a', g, m), 12)
396 self.assertRaises(NameError, eval, 'b', g, m)
397 self.assertEqual(eval('dir()', g, m), list('xyz'))
398 self.assertEqual(eval('globals()', g, m), g)
399 self.assertEqual(eval('locals()', g, m), m)
Raymond Hettinger513ffe82004-07-06 13:44:41 +0000400 self.assertRaises(TypeError, eval, 'a', m)
Raymond Hettinger66bd2332004-08-02 08:30:07 +0000401 class A:
402 "Non-mapping"
403 pass
404 m = A()
405 self.assertRaises(TypeError, eval, 'a', g, m)
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000406
407 # Verify that dict subclasses work as well
408 class D(dict):
409 def __getitem__(self, key):
410 if key == 'a':
411 return 12
412 return dict.__getitem__(self, key)
413 def keys(self):
414 return list('xyz')
415
416 d = D()
417 self.assertEqual(eval('a', g, d), 12)
418 self.assertRaises(NameError, eval, 'b', g, d)
419 self.assertEqual(eval('dir()', g, d), list('xyz'))
420 self.assertEqual(eval('globals()', g, d), g)
421 self.assertEqual(eval('locals()', g, d), d)
422
423 # Verify locals stores (used by list comps)
424 eval('[locals() for i in (2,3)]', g, d)
425 eval('[locals() for i in (2,3)]', g, UserDict.UserDict())
426
427 class SpreadSheet:
428 "Sample application showing nested, calculated lookups."
429 _cells = {}
430 def __setitem__(self, key, formula):
431 self._cells[key] = formula
Martin Blais215f13d2006-06-06 12:46:55 +0000432 def __getitem__(self, key):
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000433 return eval(self._cells[key], globals(), self)
434
435 ss = SpreadSheet()
436 ss['a1'] = '5'
437 ss['a2'] = 'a1*6'
438 ss['a3'] = 'a2*7'
439 self.assertEqual(ss['a3'], 210)
440
Raymond Hettinger2a7dede2004-08-07 04:55:30 +0000441 # Verify that dir() catches a non-list returned by eval
442 # SF bug #1004669
443 class C:
444 def __getitem__(self, item):
445 raise KeyError(item)
446 def keys(self):
447 return 'a'
448 self.assertRaises(TypeError, eval, 'dir()', globals(), C())
449
Walter Dörwald919497e2003-01-19 16:23:59 +0000450 # Done outside of the method test_z to get the correct scope
451 z = 0
452 f = open(TESTFN, 'w')
453 f.write('z = z+1\n')
454 f.write('z = z*2\n')
455 f.close()
Florent Xicluna07627882010-03-21 01:14:24 +0000456 with check_py3k_warnings(("execfile.. not supported in 3.x",
457 DeprecationWarning)):
458 execfile(TESTFN)
Walter Dörwald919497e2003-01-19 16:23:59 +0000459
460 def test_execfile(self):
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +0000461 global numruns
462 if numruns:
463 return
464 numruns += 1
Tim Peters7f061872004-12-07 21:17:46 +0000465
Walter Dörwald919497e2003-01-19 16:23:59 +0000466 globals = {'a': 1, 'b': 2}
467 locals = {'b': 200, 'c': 300}
468
469 self.assertEqual(self.__class__.z, 2)
470 globals['z'] = 0
471 execfile(TESTFN, globals)
472 self.assertEqual(globals['z'], 2)
473 locals['z'] = 0
474 execfile(TESTFN, globals, locals)
475 self.assertEqual(locals['z'], 2)
Raymond Hettinger66bd2332004-08-02 08:30:07 +0000476
477 class M:
478 "Test mapping interface versus possible calls from execfile()."
479 def __init__(self):
480 self.z = 10
481 def __getitem__(self, key):
482 if key == 'z':
483 return self.z
484 raise KeyError
485 def __setitem__(self, key, value):
486 if key == 'z':
487 self.z = value
488 return
489 raise KeyError
490
491 locals = M()
492 locals['z'] = 0
493 execfile(TESTFN, globals, locals)
494 self.assertEqual(locals['z'], 2)
495
Walter Dörwald919497e2003-01-19 16:23:59 +0000496 unlink(TESTFN)
497 self.assertRaises(TypeError, execfile)
Neal Norwitzfcf44352005-11-27 20:37:43 +0000498 self.assertRaises(TypeError, execfile, TESTFN, {}, ())
Walter Dörwald919497e2003-01-19 16:23:59 +0000499 import os
500 self.assertRaises(IOError, execfile, os.curdir)
501 self.assertRaises(IOError, execfile, "I_dont_exist")
502
503 def test_filter(self):
504 self.assertEqual(filter(lambda c: 'a' <= c <= 'z', 'Hello World'), 'elloorld')
505 self.assertEqual(filter(None, [1, 'hello', [], [3], '', None, 9, 0]), [1, 'hello', [3], 9])
506 self.assertEqual(filter(lambda x: x > 0, [1, -3, 9, 0, 2]), [1, 9, 2])
507 self.assertEqual(filter(None, Squares(10)), [1, 4, 9, 16, 25, 36, 49, 64, 81])
508 self.assertEqual(filter(lambda x: x%2, Squares(10)), [1, 9, 25, 49, 81])
509 def identity(item):
510 return 1
511 filter(identity, Squares(5))
512 self.assertRaises(TypeError, filter)
513 class BadSeq(object):
Tim Petersf2715e02003-02-19 02:35:07 +0000514 def __getitem__(self, index):
515 if index<4:
516 return 42
517 raise ValueError
Walter Dörwald919497e2003-01-19 16:23:59 +0000518 self.assertRaises(ValueError, filter, lambda x: x, BadSeq())
519 def badfunc():
520 pass
521 self.assertRaises(TypeError, filter, badfunc, range(5))
522
Walter Dörwaldbf517072003-01-27 15:57:14 +0000523 # test bltinmodule.c::filtertuple()
Walter Dörwald919497e2003-01-19 16:23:59 +0000524 self.assertEqual(filter(None, (1, 2)), (1, 2))
525 self.assertEqual(filter(lambda x: x>=3, (1, 2, 3, 4)), (3, 4))
526 self.assertRaises(TypeError, filter, 42, (1, 2))
527
Walter Dörwaldbf517072003-01-27 15:57:14 +0000528 # test bltinmodule.c::filterstring()
Walter Dörwald919497e2003-01-19 16:23:59 +0000529 self.assertEqual(filter(None, "12"), "12")
530 self.assertEqual(filter(lambda x: x>="3", "1234"), "34")
531 self.assertRaises(TypeError, filter, 42, "12")
532 class badstr(str):
533 def __getitem__(self, index):
534 raise ValueError
535 self.assertRaises(ValueError, filter, lambda x: x >="3", badstr("1234"))
Walter Dörwaldbf517072003-01-27 15:57:14 +0000536
Walter Dörwald903f1e02003-02-04 16:28:00 +0000537 class badstr2(str):
538 def __getitem__(self, index):
539 return 42
540 self.assertRaises(TypeError, filter, lambda x: x >=42, badstr2("1234"))
541
542 class weirdstr(str):
543 def __getitem__(self, index):
544 return weirdstr(2*str.__getitem__(self, index))
545 self.assertEqual(filter(lambda x: x>="33", weirdstr("1234")), "3344")
546
Walter Dörwald5e61e242003-02-04 17:04:01 +0000547 class shiftstr(str):
548 def __getitem__(self, index):
549 return chr(ord(str.__getitem__(self, index))+1)
550 self.assertEqual(filter(lambda x: x>="3", shiftstr("1234")), "345")
551
Martin v. Löwis8afd7572003-01-25 22:46:11 +0000552 if have_unicode:
Walter Dörwaldbf517072003-01-27 15:57:14 +0000553 # test bltinmodule.c::filterunicode()
Martin v. Löwis8afd7572003-01-25 22:46:11 +0000554 self.assertEqual(filter(None, unicode("12")), unicode("12"))
555 self.assertEqual(filter(lambda x: x>="3", unicode("1234")), unicode("34"))
556 self.assertRaises(TypeError, filter, 42, unicode("12"))
557 self.assertRaises(ValueError, filter, lambda x: x >="3", badstr(unicode("1234")))
Walter Dörwald919497e2003-01-19 16:23:59 +0000558
Walter Dörwald903f1e02003-02-04 16:28:00 +0000559 class badunicode(unicode):
560 def __getitem__(self, index):
561 return 42
562 self.assertRaises(TypeError, filter, lambda x: x >=42, badunicode("1234"))
563
564 class weirdunicode(unicode):
565 def __getitem__(self, index):
566 return weirdunicode(2*unicode.__getitem__(self, index))
567 self.assertEqual(
568 filter(lambda x: x>=unicode("33"), weirdunicode("1234")), unicode("3344"))
569
Walter Dörwald5e61e242003-02-04 17:04:01 +0000570 class shiftunicode(unicode):
571 def __getitem__(self, index):
572 return unichr(ord(unicode.__getitem__(self, index))+1)
573 self.assertEqual(
574 filter(lambda x: x>=unicode("3"), shiftunicode("1234")),
575 unicode("345")
576 )
577
Walter Dörwaldc3da83f2003-02-04 20:24:45 +0000578 def test_filter_subclasses(self):
Walter Dörwaldc8cb5d92003-08-15 17:52:39 +0000579 # test that filter() never returns tuple, str or unicode subclasses
580 # and that the result always goes through __getitem__
581 funcs = (None, bool, lambda x: True)
Walter Dörwaldc3da83f2003-02-04 20:24:45 +0000582 class tuple2(tuple):
Walter Dörwald1918f772003-02-10 13:19:13 +0000583 def __getitem__(self, index):
584 return 2*tuple.__getitem__(self, index)
Walter Dörwaldc3da83f2003-02-04 20:24:45 +0000585 class str2(str):
Walter Dörwald1918f772003-02-10 13:19:13 +0000586 def __getitem__(self, index):
587 return 2*str.__getitem__(self, index)
Walter Dörwaldc3da83f2003-02-04 20:24:45 +0000588 inputs = {
Walter Dörwald8dd19322003-02-10 17:36:40 +0000589 tuple2: {(): (), (1, 2, 3): (2, 4, 6)},
Walter Dörwald1918f772003-02-10 13:19:13 +0000590 str2: {"": "", "123": "112233"}
Walter Dörwaldc3da83f2003-02-04 20:24:45 +0000591 }
592 if have_unicode:
593 class unicode2(unicode):
Walter Dörwald1918f772003-02-10 13:19:13 +0000594 def __getitem__(self, index):
595 return 2*unicode.__getitem__(self, index)
596 inputs[unicode2] = {
597 unicode(): unicode(),
598 unicode("123"): unicode("112233")
599 }
Walter Dörwaldc3da83f2003-02-04 20:24:45 +0000600
Walter Dörwald1918f772003-02-10 13:19:13 +0000601 for (cls, inps) in inputs.iteritems():
602 for (inp, exp) in inps.iteritems():
Tim Petersf2715e02003-02-19 02:35:07 +0000603 # make sure the output goes through __getitem__
604 # even if func is None
605 self.assertEqual(
606 filter(funcs[0], cls(inp)),
607 filter(funcs[1], cls(inp))
608 )
609 for func in funcs:
Walter Dörwald1918f772003-02-10 13:19:13 +0000610 outp = filter(func, cls(inp))
611 self.assertEqual(outp, exp)
Benjamin Peterson5c8da862009-06-30 22:57:08 +0000612 self.assertTrue(not isinstance(outp, cls))
Walter Dörwaldc3da83f2003-02-04 20:24:45 +0000613
Walter Dörwald919497e2003-01-19 16:23:59 +0000614 def test_getattr(self):
615 import sys
Benjamin Peterson5c8da862009-06-30 22:57:08 +0000616 self.assertTrue(getattr(sys, 'stdout') is sys.stdout)
Walter Dörwald919497e2003-01-19 16:23:59 +0000617 self.assertRaises(TypeError, getattr, sys, 1)
618 self.assertRaises(TypeError, getattr, sys, 1, "foo")
619 self.assertRaises(TypeError, getattr)
Walter Dörwald4e41a4b2005-08-03 17:09:04 +0000620 if have_unicode:
621 self.assertRaises(UnicodeError, getattr, sys, unichr(sys.maxunicode))
Walter Dörwald919497e2003-01-19 16:23:59 +0000622
623 def test_hasattr(self):
624 import sys
Benjamin Peterson5c8da862009-06-30 22:57:08 +0000625 self.assertTrue(hasattr(sys, 'stdout'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000626 self.assertRaises(TypeError, hasattr, sys, 1)
627 self.assertRaises(TypeError, hasattr)
Walter Dörwald4e41a4b2005-08-03 17:09:04 +0000628 if have_unicode:
629 self.assertRaises(UnicodeError, hasattr, sys, unichr(sys.maxunicode))
Walter Dörwald919497e2003-01-19 16:23:59 +0000630
Benjamin Petersonb9030f42008-05-12 00:41:23 +0000631 # Check that hasattr allows SystemExit and KeyboardInterrupts by
632 class A:
633 def __getattr__(self, what):
634 raise KeyboardInterrupt
635 self.assertRaises(KeyboardInterrupt, hasattr, A(), "b")
636 class B:
637 def __getattr__(self, what):
638 raise SystemExit
639 self.assertRaises(SystemExit, hasattr, B(), "b")
640
Walter Dörwald919497e2003-01-19 16:23:59 +0000641 def test_hash(self):
642 hash(None)
643 self.assertEqual(hash(1), hash(1L))
644 self.assertEqual(hash(1), hash(1.0))
645 hash('spam')
646 if have_unicode:
647 self.assertEqual(hash('spam'), hash(unicode('spam')))
648 hash((0,1,2,3))
649 def f(): pass
650 self.assertRaises(TypeError, hash, [])
651 self.assertRaises(TypeError, hash, {})
Martin v. Löwisab2f8f72006-08-09 07:57:39 +0000652 # Bug 1536021: Allow hash to return long objects
653 class X:
654 def __hash__(self):
655 return 2**100
Ezio Melotti2623a372010-11-21 13:34:58 +0000656 self.assertEqual(type(hash(X())), int)
Martin v. Löwisab2f8f72006-08-09 07:57:39 +0000657 class Y(object):
658 def __hash__(self):
659 return 2**100
Ezio Melotti2623a372010-11-21 13:34:58 +0000660 self.assertEqual(type(hash(Y())), int)
Armin Rigo51fc8c42006-08-09 14:55:26 +0000661 class Z(long):
662 def __hash__(self):
663 return self
Ezio Melotti2623a372010-11-21 13:34:58 +0000664 self.assertEqual(hash(Z(42)), hash(42L))
Walter Dörwald919497e2003-01-19 16:23:59 +0000665
666 def test_hex(self):
667 self.assertEqual(hex(16), '0x10')
668 self.assertEqual(hex(16L), '0x10L')
Guido van Rossum6c9e1302003-11-29 23:52:13 +0000669 self.assertEqual(hex(-16), '-0x10')
Walter Dörwald919497e2003-01-19 16:23:59 +0000670 self.assertEqual(hex(-16L), '-0x10L')
671 self.assertRaises(TypeError, hex, {})
672
673 def test_id(self):
674 id(None)
675 id(1)
676 id(1L)
677 id(1.0)
678 id('spam')
679 id((0,1,2,3))
680 id([0,1,2,3])
681 id({'spam': 1, 'eggs': 2, 'ham': 3})
682
683 # Test input() later, together with raw_input
684
Andrew Svetlovcddcafa2012-12-23 12:44:04 +0200685 # test_int(): see test_int.py for int() tests.
686
Walter Dörwald919497e2003-01-19 16:23:59 +0000687 def test_intern(self):
688 self.assertRaises(TypeError, intern)
Georg Brandl4e1be942009-10-27 22:56:09 +0000689 # This fails if the test is run twice with a constant string,
690 # therefore append the run counter
691 s = "never interned before " + str(numruns)
Benjamin Peterson5c8da862009-06-30 22:57:08 +0000692 self.assertTrue(intern(s) is s)
Walter Dörwald919497e2003-01-19 16:23:59 +0000693 s2 = s.swapcase().swapcase()
Benjamin Peterson5c8da862009-06-30 22:57:08 +0000694 self.assertTrue(intern(s2) is s)
Walter Dörwald919497e2003-01-19 16:23:59 +0000695
Jeremy Hylton4c989dd2004-08-07 19:20:05 +0000696 # Subclasses of string can't be interned, because they
697 # provide too much opportunity for insane things to happen.
698 # We don't want them in the interned dict and if they aren't
699 # actually interned, we don't want to create the appearance
Ezio Melottic2077b02011-03-16 12:34:31 +0200700 # that they are by allowing intern() to succeed.
Jeremy Hylton4c989dd2004-08-07 19:20:05 +0000701 class S(str):
702 def __hash__(self):
703 return 123
704
705 self.assertRaises(TypeError, intern, S("abc"))
706
707 # It's still safe to pass these strings to routines that
708 # call intern internally, e.g. PyObject_SetAttr().
709 s = S("abc")
710 setattr(s, s, s)
711 self.assertEqual(getattr(s, s), s)
712
Walter Dörwald919497e2003-01-19 16:23:59 +0000713 def test_iter(self):
714 self.assertRaises(TypeError, iter)
715 self.assertRaises(TypeError, iter, 42, 42)
716 lists = [("1", "2"), ["1", "2"], "12"]
717 if have_unicode:
718 lists.append(unicode("12"))
719 for l in lists:
720 i = iter(l)
721 self.assertEqual(i.next(), '1')
722 self.assertEqual(i.next(), '2')
723 self.assertRaises(StopIteration, i.next)
724
725 def test_isinstance(self):
726 class C:
727 pass
728 class D(C):
729 pass
730 class E:
731 pass
732 c = C()
733 d = D()
734 e = E()
Benjamin Peterson5c8da862009-06-30 22:57:08 +0000735 self.assertTrue(isinstance(c, C))
736 self.assertTrue(isinstance(d, C))
737 self.assertTrue(not isinstance(e, C))
738 self.assertTrue(not isinstance(c, D))
739 self.assertTrue(not isinstance('foo', E))
Walter Dörwald919497e2003-01-19 16:23:59 +0000740 self.assertRaises(TypeError, isinstance, E, 'foo')
741 self.assertRaises(TypeError, isinstance)
742
743 def test_issubclass(self):
744 class C:
745 pass
746 class D(C):
747 pass
748 class E:
749 pass
750 c = C()
751 d = D()
752 e = E()
Benjamin Peterson5c8da862009-06-30 22:57:08 +0000753 self.assertTrue(issubclass(D, C))
754 self.assertTrue(issubclass(C, C))
755 self.assertTrue(not issubclass(C, D))
Walter Dörwald919497e2003-01-19 16:23:59 +0000756 self.assertRaises(TypeError, issubclass, 'foo', E)
757 self.assertRaises(TypeError, issubclass, E, 'foo')
758 self.assertRaises(TypeError, issubclass)
759
760 def test_len(self):
761 self.assertEqual(len('123'), 3)
762 self.assertEqual(len(()), 0)
763 self.assertEqual(len((1, 2, 3, 4)), 4)
764 self.assertEqual(len([1, 2, 3, 4]), 4)
765 self.assertEqual(len({}), 0)
766 self.assertEqual(len({'a':1, 'b': 2}), 2)
767 class BadSeq:
768 def __len__(self):
769 raise ValueError
770 self.assertRaises(ValueError, len, BadSeq())
Mark Dickinson20665592010-05-25 19:01:08 +0000771 self.assertRaises(TypeError, len, 2)
772 class ClassicStyle: pass
773 class NewStyle(object): pass
774 self.assertRaises(AttributeError, len, ClassicStyle())
775 self.assertRaises(TypeError, len, NewStyle())
Walter Dörwald919497e2003-01-19 16:23:59 +0000776
Walter Dörwald919497e2003-01-19 16:23:59 +0000777 def test_map(self):
778 self.assertEqual(
779 map(None, 'hello world'),
780 ['h','e','l','l','o',' ','w','o','r','l','d']
781 )
782 self.assertEqual(
783 map(None, 'abcd', 'efg'),
784 [('a', 'e'), ('b', 'f'), ('c', 'g'), ('d', None)]
785 )
786 self.assertEqual(
787 map(None, range(10)),
788 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
789 )
790 self.assertEqual(
791 map(lambda x: x*x, range(1,4)),
792 [1, 4, 9]
793 )
794 try:
795 from math import sqrt
796 except ImportError:
797 def sqrt(x):
798 return pow(x, 0.5)
799 self.assertEqual(
800 map(lambda x: map(sqrt,x), [[16, 4], [81, 9]]),
801 [[4.0, 2.0], [9.0, 3.0]]
802 )
803 self.assertEqual(
804 map(lambda x, y: x+y, [1,3,2], [9,1,4]),
805 [10, 4, 6]
806 )
807
808 def plus(*v):
809 accu = 0
810 for i in v: accu = accu + i
811 return accu
812 self.assertEqual(
813 map(plus, [1, 3, 7]),
814 [1, 3, 7]
815 )
816 self.assertEqual(
817 map(plus, [1, 3, 7], [4, 9, 2]),
818 [1+4, 3+9, 7+2]
819 )
820 self.assertEqual(
821 map(plus, [1, 3, 7], [4, 9, 2], [1, 1, 0]),
822 [1+4+1, 3+9+1, 7+2+0]
823 )
824 self.assertEqual(
825 map(None, Squares(10)),
826 [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
827 )
828 self.assertEqual(
829 map(int, Squares(10)),
830 [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
831 )
832 self.assertEqual(
833 map(None, Squares(3), Squares(2)),
834 [(0,0), (1,1), (4,None)]
835 )
836 self.assertEqual(
837 map(max, Squares(3), Squares(2)),
838 [0, 1, 4]
839 )
840 self.assertRaises(TypeError, map)
841 self.assertRaises(TypeError, map, lambda x: x, 42)
842 self.assertEqual(map(None, [42]), [42])
843 class BadSeq:
844 def __getitem__(self, index):
845 raise ValueError
846 self.assertRaises(ValueError, map, lambda x: x, BadSeq())
Neal Norwitzfcf44352005-11-27 20:37:43 +0000847 def badfunc(x):
848 raise RuntimeError
849 self.assertRaises(RuntimeError, map, badfunc, range(5))
Walter Dörwald919497e2003-01-19 16:23:59 +0000850
851 def test_max(self):
852 self.assertEqual(max('123123'), '3')
853 self.assertEqual(max(1, 2, 3), 3)
854 self.assertEqual(max((1, 2, 3, 1, 2, 3)), 3)
855 self.assertEqual(max([1, 2, 3, 1, 2, 3]), 3)
856
857 self.assertEqual(max(1, 2L, 3.0), 3.0)
858 self.assertEqual(max(1L, 2.0, 3), 3)
859 self.assertEqual(max(1.0, 2, 3L), 3L)
860
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +0000861 for stmt in (
862 "max(key=int)", # no args
863 "max(1, key=int)", # single arg not iterable
864 "max(1, 2, keystone=int)", # wrong keyword
865 "max(1, 2, key=int, abc=int)", # two many keywords
866 "max(1, 2, key=1)", # keyfunc is not callable
867 ):
Tim Peters7f061872004-12-07 21:17:46 +0000868 try:
869 exec(stmt) in globals()
870 except TypeError:
871 pass
872 else:
873 self.fail(stmt)
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +0000874
875 self.assertEqual(max((1,), key=neg), 1) # one elem iterable
876 self.assertEqual(max((1,2), key=neg), 1) # two elem iterable
877 self.assertEqual(max(1, 2, key=neg), 1) # two elems
878
879 data = [random.randrange(200) for i in range(100)]
880 keys = dict((elem, random.randrange(50)) for elem in data)
881 f = keys.__getitem__
882 self.assertEqual(max(data, key=f),
883 sorted(reversed(data), key=f)[-1])
884
Walter Dörwald919497e2003-01-19 16:23:59 +0000885 def test_min(self):
886 self.assertEqual(min('123123'), '1')
887 self.assertEqual(min(1, 2, 3), 1)
888 self.assertEqual(min((1, 2, 3, 1, 2, 3)), 1)
889 self.assertEqual(min([1, 2, 3, 1, 2, 3]), 1)
890
891 self.assertEqual(min(1, 2L, 3.0), 1)
892 self.assertEqual(min(1L, 2.0, 3), 1L)
893 self.assertEqual(min(1.0, 2, 3L), 1.0)
894
895 self.assertRaises(TypeError, min)
896 self.assertRaises(TypeError, min, 42)
897 self.assertRaises(ValueError, min, ())
898 class BadSeq:
899 def __getitem__(self, index):
900 raise ValueError
901 self.assertRaises(ValueError, min, BadSeq())
902 class BadNumber:
903 def __cmp__(self, other):
904 raise ValueError
905 self.assertRaises(ValueError, min, (42, BadNumber()))
906
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +0000907 for stmt in (
908 "min(key=int)", # no args
909 "min(1, key=int)", # single arg not iterable
910 "min(1, 2, keystone=int)", # wrong keyword
911 "min(1, 2, key=int, abc=int)", # two many keywords
912 "min(1, 2, key=1)", # keyfunc is not callable
913 ):
Tim Peters7f061872004-12-07 21:17:46 +0000914 try:
915 exec(stmt) in globals()
916 except TypeError:
917 pass
918 else:
919 self.fail(stmt)
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +0000920
921 self.assertEqual(min((1,), key=neg), 1) # one elem iterable
922 self.assertEqual(min((1,2), key=neg), 2) # two elem iterable
923 self.assertEqual(min(1, 2, key=neg), 2) # two elems
924
925 data = [random.randrange(200) for i in range(100)]
926 keys = dict((elem, random.randrange(50)) for elem in data)
927 f = keys.__getitem__
928 self.assertEqual(min(data, key=f),
929 sorted(data, key=f)[0])
930
Georg Brandl28e08732008-04-30 19:47:09 +0000931 def test_next(self):
932 it = iter(range(2))
933 self.assertEqual(next(it), 0)
934 self.assertEqual(next(it), 1)
935 self.assertRaises(StopIteration, next, it)
936 self.assertRaises(StopIteration, next, it)
Ezio Melotti2623a372010-11-21 13:34:58 +0000937 self.assertEqual(next(it, 42), 42)
Georg Brandl28e08732008-04-30 19:47:09 +0000938
939 class Iter(object):
940 def __iter__(self):
941 return self
942 def next(self):
943 raise StopIteration
944
945 it = iter(Iter())
Ezio Melotti2623a372010-11-21 13:34:58 +0000946 self.assertEqual(next(it, 42), 42)
Georg Brandl28e08732008-04-30 19:47:09 +0000947 self.assertRaises(StopIteration, next, it)
948
949 def gen():
950 yield 1
951 return
952
953 it = gen()
Ezio Melotti2623a372010-11-21 13:34:58 +0000954 self.assertEqual(next(it), 1)
Georg Brandl28e08732008-04-30 19:47:09 +0000955 self.assertRaises(StopIteration, next, it)
Ezio Melotti2623a372010-11-21 13:34:58 +0000956 self.assertEqual(next(it, 42), 42)
Georg Brandl28e08732008-04-30 19:47:09 +0000957
Walter Dörwald919497e2003-01-19 16:23:59 +0000958 def test_oct(self):
959 self.assertEqual(oct(100), '0144')
960 self.assertEqual(oct(100L), '0144L')
Guido van Rossum6c9e1302003-11-29 23:52:13 +0000961 self.assertEqual(oct(-100), '-0144')
Walter Dörwald919497e2003-01-19 16:23:59 +0000962 self.assertEqual(oct(-100L), '-0144L')
963 self.assertRaises(TypeError, oct, ())
964
965 def write_testfile(self):
966 # NB the first 4 lines are also used to test input and raw_input, below
967 fp = open(TESTFN, 'w')
968 try:
969 fp.write('1+1\n')
970 fp.write('1+1\n')
971 fp.write('The quick brown fox jumps over the lazy dog')
972 fp.write('.\n')
973 fp.write('Dear John\n')
974 fp.write('XXX'*100)
975 fp.write('YYY'*100)
976 finally:
977 fp.close()
978
979 def test_open(self):
980 self.write_testfile()
981 fp = open(TESTFN, 'r')
982 try:
983 self.assertEqual(fp.readline(4), '1+1\n')
984 self.assertEqual(fp.readline(4), '1+1\n')
985 self.assertEqual(fp.readline(), 'The quick brown fox jumps over the lazy dog.\n')
986 self.assertEqual(fp.readline(4), 'Dear')
987 self.assertEqual(fp.readline(100), ' John\n')
988 self.assertEqual(fp.read(300), 'XXX'*100)
989 self.assertEqual(fp.read(1000), 'YYY'*100)
990 finally:
991 fp.close()
992 unlink(TESTFN)
993
994 def test_ord(self):
995 self.assertEqual(ord(' '), 32)
996 self.assertEqual(ord('A'), 65)
997 self.assertEqual(ord('a'), 97)
998 if have_unicode:
999 self.assertEqual(ord(unichr(sys.maxunicode)), sys.maxunicode)
1000 self.assertRaises(TypeError, ord, 42)
Walter Dörwald4e41a4b2005-08-03 17:09:04 +00001001 if have_unicode:
1002 self.assertRaises(TypeError, ord, unicode("12"))
Walter Dörwald919497e2003-01-19 16:23:59 +00001003
1004 def test_pow(self):
1005 self.assertEqual(pow(0,0), 1)
1006 self.assertEqual(pow(0,1), 0)
1007 self.assertEqual(pow(1,0), 1)
1008 self.assertEqual(pow(1,1), 1)
1009
1010 self.assertEqual(pow(2,0), 1)
1011 self.assertEqual(pow(2,10), 1024)
1012 self.assertEqual(pow(2,20), 1024*1024)
1013 self.assertEqual(pow(2,30), 1024*1024*1024)
1014
1015 self.assertEqual(pow(-2,0), 1)
1016 self.assertEqual(pow(-2,1), -2)
1017 self.assertEqual(pow(-2,2), 4)
1018 self.assertEqual(pow(-2,3), -8)
1019
1020 self.assertEqual(pow(0L,0), 1)
1021 self.assertEqual(pow(0L,1), 0)
1022 self.assertEqual(pow(1L,0), 1)
1023 self.assertEqual(pow(1L,1), 1)
1024
1025 self.assertEqual(pow(2L,0), 1)
1026 self.assertEqual(pow(2L,10), 1024)
1027 self.assertEqual(pow(2L,20), 1024*1024)
1028 self.assertEqual(pow(2L,30), 1024*1024*1024)
1029
1030 self.assertEqual(pow(-2L,0), 1)
1031 self.assertEqual(pow(-2L,1), -2)
1032 self.assertEqual(pow(-2L,2), 4)
1033 self.assertEqual(pow(-2L,3), -8)
1034
1035 self.assertAlmostEqual(pow(0.,0), 1.)
1036 self.assertAlmostEqual(pow(0.,1), 0.)
1037 self.assertAlmostEqual(pow(1.,0), 1.)
1038 self.assertAlmostEqual(pow(1.,1), 1.)
1039
1040 self.assertAlmostEqual(pow(2.,0), 1.)
1041 self.assertAlmostEqual(pow(2.,10), 1024.)
1042 self.assertAlmostEqual(pow(2.,20), 1024.*1024.)
1043 self.assertAlmostEqual(pow(2.,30), 1024.*1024.*1024.)
1044
1045 self.assertAlmostEqual(pow(-2.,0), 1.)
1046 self.assertAlmostEqual(pow(-2.,1), -2.)
1047 self.assertAlmostEqual(pow(-2.,2), 4.)
1048 self.assertAlmostEqual(pow(-2.,3), -8.)
1049
1050 for x in 2, 2L, 2.0:
1051 for y in 10, 10L, 10.0:
1052 for z in 1000, 1000L, 1000.0:
1053 if isinstance(x, float) or \
1054 isinstance(y, float) or \
1055 isinstance(z, float):
1056 self.assertRaises(TypeError, pow, x, y, z)
1057 else:
1058 self.assertAlmostEqual(pow(x, y, z), 24.0)
1059
1060 self.assertRaises(TypeError, pow, -1, -2, 3)
1061 self.assertRaises(ValueError, pow, 1, 2, 0)
1062 self.assertRaises(TypeError, pow, -1L, -2L, 3L)
1063 self.assertRaises(ValueError, pow, 1L, 2L, 0L)
Jeffrey Yasskin9871d8f2008-01-05 08:47:13 +00001064 # Will return complex in 3.0:
1065 self.assertRaises(ValueError, pow, -342.43, 0.234)
Walter Dörwald919497e2003-01-19 16:23:59 +00001066
1067 self.assertRaises(TypeError, pow)
1068
1069 def test_range(self):
1070 self.assertEqual(range(3), [0, 1, 2])
1071 self.assertEqual(range(1, 5), [1, 2, 3, 4])
1072 self.assertEqual(range(0), [])
1073 self.assertEqual(range(-3), [])
1074 self.assertEqual(range(1, 10, 3), [1, 4, 7])
1075 self.assertEqual(range(5, -5, -3), [5, 2, -1, -4])
1076
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001077 # Now test range() with longs
1078 self.assertEqual(range(-2**100), [])
1079 self.assertEqual(range(0, -2**100), [])
1080 self.assertEqual(range(0, 2**100, -1), [])
1081 self.assertEqual(range(0, 2**100, -1), [])
1082
1083 a = long(10 * sys.maxint)
1084 b = long(100 * sys.maxint)
1085 c = long(50 * sys.maxint)
1086
1087 self.assertEqual(range(a, a+2), [a, a+1])
1088 self.assertEqual(range(a+2, a, -1L), [a+2, a+1])
1089 self.assertEqual(range(a+4, a, -2), [a+4, a+2])
1090
1091 seq = range(a, b, c)
Ezio Melottiaa980582010-01-23 23:04:36 +00001092 self.assertIn(a, seq)
1093 self.assertNotIn(b, seq)
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001094 self.assertEqual(len(seq), 2)
1095
1096 seq = range(b, a, -c)
Ezio Melottiaa980582010-01-23 23:04:36 +00001097 self.assertIn(b, seq)
1098 self.assertNotIn(a, seq)
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001099 self.assertEqual(len(seq), 2)
1100
1101 seq = range(-a, -b, -c)
Ezio Melottiaa980582010-01-23 23:04:36 +00001102 self.assertIn(-a, seq)
1103 self.assertNotIn(-b, seq)
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001104 self.assertEqual(len(seq), 2)
1105
Walter Dörwald919497e2003-01-19 16:23:59 +00001106 self.assertRaises(TypeError, range)
1107 self.assertRaises(TypeError, range, 1, 2, 3, 4)
1108 self.assertRaises(ValueError, range, 1, 2, 0)
Neal Norwitzfcf44352005-11-27 20:37:43 +00001109 self.assertRaises(ValueError, range, a, a + 1, long(0))
1110
1111 class badzero(int):
1112 def __cmp__(self, other):
1113 raise RuntimeError
Nick Coghlan48361f52008-08-11 15:45:58 +00001114 __hash__ = None # Invalid cmp makes this unhashable
Neal Norwitzfcf44352005-11-27 20:37:43 +00001115 self.assertRaises(RuntimeError, range, a, a + 1, badzero(1))
Walter Dörwald919497e2003-01-19 16:23:59 +00001116
Mark Dickinson481ab892010-05-05 22:42:51 +00001117 # Reject floats.
1118 self.assertRaises(TypeError, range, 1., 1., 1.)
Tim Peters299b3df2003-04-15 14:40:03 +00001119 self.assertRaises(TypeError, range, 1e100, 1e101, 1e101)
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001120
Walter Dörwald357981e2003-04-15 18:59:28 +00001121 self.assertRaises(TypeError, range, 0, "spam")
1122 self.assertRaises(TypeError, range, 0, 42, "spam")
1123
1124 self.assertRaises(OverflowError, range, -sys.maxint, sys.maxint)
1125 self.assertRaises(OverflowError, range, 0, 2*sys.maxint)
1126
Mark Dickinsona8d26682010-05-04 16:18:25 +00001127 bignum = 2*sys.maxint
1128 smallnum = 42
1129 # Old-style user-defined class with __int__ method
1130 class I0:
1131 def __init__(self, n):
1132 self.n = int(n)
1133 def __int__(self):
1134 return self.n
1135 self.assertEqual(range(I0(bignum), I0(bignum + 1)), [bignum])
1136 self.assertEqual(range(I0(smallnum), I0(smallnum + 1)), [smallnum])
1137
1138 # New-style user-defined class with __int__ method
1139 class I1(object):
1140 def __init__(self, n):
1141 self.n = int(n)
1142 def __int__(self):
1143 return self.n
1144 self.assertEqual(range(I1(bignum), I1(bignum + 1)), [bignum])
1145 self.assertEqual(range(I1(smallnum), I1(smallnum + 1)), [smallnum])
1146
1147 # New-style user-defined class with failing __int__ method
1148 class IX(object):
1149 def __int__(self):
1150 raise RuntimeError
1151 self.assertRaises(RuntimeError, range, IX())
1152
1153 # New-style user-defined class with invalid __int__ method
1154 class IN(object):
1155 def __int__(self):
1156 return "not a number"
1157 self.assertRaises(TypeError, range, IN())
1158
1159 # Exercise various combinations of bad arguments, to check
1160 # refcounting logic
1161 self.assertRaises(TypeError, range, 0.0)
1162
1163 self.assertRaises(TypeError, range, 0, 0.0)
1164 self.assertRaises(TypeError, range, 0.0, 0)
1165 self.assertRaises(TypeError, range, 0.0, 0.0)
1166
1167 self.assertRaises(TypeError, range, 0, 0, 1.0)
1168 self.assertRaises(TypeError, range, 0, 0.0, 1)
1169 self.assertRaises(TypeError, range, 0, 0.0, 1.0)
1170 self.assertRaises(TypeError, range, 0.0, 0, 1)
1171 self.assertRaises(TypeError, range, 0.0, 0, 1.0)
1172 self.assertRaises(TypeError, range, 0.0, 0.0, 1)
1173 self.assertRaises(TypeError, range, 0.0, 0.0, 1.0)
1174
1175
1176
Walter Dörwald919497e2003-01-19 16:23:59 +00001177 def test_input_and_raw_input(self):
1178 self.write_testfile()
1179 fp = open(TESTFN, 'r')
1180 savestdin = sys.stdin
1181 savestdout = sys.stdout # Eats the echo
1182 try:
1183 sys.stdin = fp
1184 sys.stdout = BitBucket()
1185 self.assertEqual(input(), 2)
1186 self.assertEqual(input('testing\n'), 2)
1187 self.assertEqual(raw_input(), 'The quick brown fox jumps over the lazy dog.')
1188 self.assertEqual(raw_input('testing\n'), 'Dear John')
Tim Peters8e24a962006-08-09 00:52:26 +00001189
Georg Brandl7e3ba2a2006-08-06 08:23:54 +00001190 # SF 1535165: don't segfault on closed stdin
1191 # sys.stdout must be a regular file for triggering
1192 sys.stdout = savestdout
1193 sys.stdin.close()
Georg Brandld336e982006-08-06 09:17:16 +00001194 self.assertRaises(ValueError, input)
Georg Brandl7e3ba2a2006-08-06 08:23:54 +00001195
1196 sys.stdout = BitBucket()
Walter Dörwald919497e2003-01-19 16:23:59 +00001197 sys.stdin = cStringIO.StringIO("NULL\0")
1198 self.assertRaises(TypeError, input, 42, 42)
1199 sys.stdin = cStringIO.StringIO(" 'whitespace'")
1200 self.assertEqual(input(), 'whitespace')
1201 sys.stdin = cStringIO.StringIO()
1202 self.assertRaises(EOFError, input)
Hye-Shik Changff83c2b2004-02-02 13:39:01 +00001203
1204 # SF 876178: make sure input() respect future options.
1205 sys.stdin = cStringIO.StringIO('1/2')
1206 sys.stdout = cStringIO.StringIO()
1207 exec compile('print input()', 'test_builtin_tmp', 'exec')
1208 sys.stdin.seek(0, 0)
1209 exec compile('from __future__ import division;print input()',
1210 'test_builtin_tmp', 'exec')
1211 sys.stdin.seek(0, 0)
1212 exec compile('print input()', 'test_builtin_tmp', 'exec')
Tim Petersb82cb8d2006-03-28 07:39:22 +00001213 # The result we expect depends on whether new division semantics
1214 # are already in effect.
1215 if 1/2 == 0:
1216 # This test was compiled with old semantics.
1217 expected = ['0', '0.5', '0']
1218 else:
1219 # This test was compiled with new semantics (e.g., -Qnew
1220 # was given on the command line.
1221 expected = ['0.5', '0.5', '0.5']
1222 self.assertEqual(sys.stdout.getvalue().splitlines(), expected)
Hye-Shik Changff83c2b2004-02-02 13:39:01 +00001223
Walter Dörwald919497e2003-01-19 16:23:59 +00001224 del sys.stdout
1225 self.assertRaises(RuntimeError, input, 'prompt')
1226 del sys.stdin
1227 self.assertRaises(RuntimeError, input, 'prompt')
1228 finally:
1229 sys.stdin = savestdin
1230 sys.stdout = savestdout
1231 fp.close()
1232 unlink(TESTFN)
1233
1234 def test_reduce(self):
Mark Dickinson20665592010-05-25 19:01:08 +00001235 add = lambda x, y: x+y
1236 self.assertEqual(reduce(add, ['a', 'b', 'c'], ''), 'abc')
Walter Dörwald919497e2003-01-19 16:23:59 +00001237 self.assertEqual(
Mark Dickinson20665592010-05-25 19:01:08 +00001238 reduce(add, [['a', 'c'], [], ['d', 'w']], []),
Walter Dörwald919497e2003-01-19 16:23:59 +00001239 ['a','c','d','w']
1240 )
1241 self.assertEqual(reduce(lambda x, y: x*y, range(2,8), 1), 5040)
1242 self.assertEqual(
1243 reduce(lambda x, y: x*y, range(2,21), 1L),
1244 2432902008176640000L
1245 )
Mark Dickinson20665592010-05-25 19:01:08 +00001246 self.assertEqual(reduce(add, Squares(10)), 285)
1247 self.assertEqual(reduce(add, Squares(10), 0), 285)
1248 self.assertEqual(reduce(add, Squares(0), 0), 0)
Walter Dörwald919497e2003-01-19 16:23:59 +00001249 self.assertRaises(TypeError, reduce)
Mark Dickinson20665592010-05-25 19:01:08 +00001250 self.assertRaises(TypeError, reduce, 42)
Walter Dörwald919497e2003-01-19 16:23:59 +00001251 self.assertRaises(TypeError, reduce, 42, 42)
1252 self.assertRaises(TypeError, reduce, 42, 42, 42)
Mark Dickinson20665592010-05-25 19:01:08 +00001253 self.assertRaises(TypeError, reduce, None, range(5))
1254 self.assertRaises(TypeError, reduce, add, 42)
Walter Dörwald919497e2003-01-19 16:23:59 +00001255 self.assertEqual(reduce(42, "1"), "1") # func is never called with one item
1256 self.assertEqual(reduce(42, "", "1"), "1") # func is never called with one item
1257 self.assertRaises(TypeError, reduce, 42, (42, 42))
Mark Dickinson20665592010-05-25 19:01:08 +00001258 self.assertRaises(TypeError, reduce, add, []) # arg 2 must not be empty sequence with no initial value
1259 self.assertRaises(TypeError, reduce, add, "")
1260 self.assertRaises(TypeError, reduce, add, ())
1261 self.assertEqual(reduce(add, [], None), None)
1262 self.assertEqual(reduce(add, [], 42), 42)
Walter Dörwald919497e2003-01-19 16:23:59 +00001263
1264 class BadSeq:
1265 def __getitem__(self, index):
1266 raise ValueError
1267 self.assertRaises(ValueError, reduce, 42, BadSeq())
1268
1269 def test_reload(self):
1270 import marshal
1271 reload(marshal)
1272 import string
1273 reload(string)
1274 ## import sys
1275 ## self.assertRaises(ImportError, reload, sys)
1276
1277 def test_repr(self):
1278 self.assertEqual(repr(''), '\'\'')
1279 self.assertEqual(repr(0), '0')
1280 self.assertEqual(repr(0L), '0L')
1281 self.assertEqual(repr(()), '()')
1282 self.assertEqual(repr([]), '[]')
1283 self.assertEqual(repr({}), '{}')
1284 a = []
1285 a.append(a)
1286 self.assertEqual(repr(a), '[[...]]')
1287 a = {}
1288 a[0] = a
1289 self.assertEqual(repr(a), '{0: {...}}')
1290
1291 def test_round(self):
1292 self.assertEqual(round(0.0), 0.0)
Jeffrey Yasskin2f3c16b2008-01-03 02:21:52 +00001293 self.assertEqual(type(round(0.0)), float) # Will be int in 3.0.
Walter Dörwald919497e2003-01-19 16:23:59 +00001294 self.assertEqual(round(1.0), 1.0)
1295 self.assertEqual(round(10.0), 10.0)
1296 self.assertEqual(round(1000000000.0), 1000000000.0)
1297 self.assertEqual(round(1e20), 1e20)
1298
1299 self.assertEqual(round(-1.0), -1.0)
1300 self.assertEqual(round(-10.0), -10.0)
1301 self.assertEqual(round(-1000000000.0), -1000000000.0)
1302 self.assertEqual(round(-1e20), -1e20)
1303
1304 self.assertEqual(round(0.1), 0.0)
1305 self.assertEqual(round(1.1), 1.0)
1306 self.assertEqual(round(10.1), 10.0)
1307 self.assertEqual(round(1000000000.1), 1000000000.0)
1308
1309 self.assertEqual(round(-1.1), -1.0)
1310 self.assertEqual(round(-10.1), -10.0)
1311 self.assertEqual(round(-1000000000.1), -1000000000.0)
1312
1313 self.assertEqual(round(0.9), 1.0)
1314 self.assertEqual(round(9.9), 10.0)
1315 self.assertEqual(round(999999999.9), 1000000000.0)
1316
1317 self.assertEqual(round(-0.9), -1.0)
1318 self.assertEqual(round(-9.9), -10.0)
1319 self.assertEqual(round(-999999999.9), -1000000000.0)
1320
1321 self.assertEqual(round(-8.0, -1), -10.0)
Jeffrey Yasskin2f3c16b2008-01-03 02:21:52 +00001322 self.assertEqual(type(round(-8.0, -1)), float)
1323
1324 self.assertEqual(type(round(-8.0, 0)), float)
1325 self.assertEqual(type(round(-8.0, 1)), float)
1326
Jeffrey Yasskin9871d8f2008-01-05 08:47:13 +00001327 # Check half rounding behaviour.
Jeffrey Yasskin2f3c16b2008-01-03 02:21:52 +00001328 self.assertEqual(round(5.5), 6)
Jeffrey Yasskin9871d8f2008-01-05 08:47:13 +00001329 self.assertEqual(round(6.5), 7)
Jeffrey Yasskin2f3c16b2008-01-03 02:21:52 +00001330 self.assertEqual(round(-5.5), -6)
Jeffrey Yasskin9871d8f2008-01-05 08:47:13 +00001331 self.assertEqual(round(-6.5), -7)
Jeffrey Yasskin2f3c16b2008-01-03 02:21:52 +00001332
1333 # Check behavior on ints
1334 self.assertEqual(round(0), 0)
1335 self.assertEqual(round(8), 8)
1336 self.assertEqual(round(-8), -8)
1337 self.assertEqual(type(round(0)), float) # Will be int in 3.0.
1338 self.assertEqual(type(round(-8, -1)), float)
1339 self.assertEqual(type(round(-8, 0)), float)
1340 self.assertEqual(type(round(-8, 1)), float)
Walter Dörwald919497e2003-01-19 16:23:59 +00001341
Georg Brandlccadf842006-03-31 18:54:53 +00001342 # test new kwargs
1343 self.assertEqual(round(number=-8.0, ndigits=-1), -10.0)
1344
Walter Dörwald919497e2003-01-19 16:23:59 +00001345 self.assertRaises(TypeError, round)
1346
Jeffrey Yasskin2f3c16b2008-01-03 02:21:52 +00001347 # test generic rounding delegation for reals
1348 class TestRound(object):
Jeffrey Yasskin9871d8f2008-01-05 08:47:13 +00001349 def __float__(self):
1350 return 23.0
Jeffrey Yasskin2f3c16b2008-01-03 02:21:52 +00001351
1352 class TestNoRound(object):
1353 pass
1354
1355 self.assertEqual(round(TestRound()), 23)
1356
1357 self.assertRaises(TypeError, round, 1, 2, 3)
Jeffrey Yasskin9871d8f2008-01-05 08:47:13 +00001358 self.assertRaises(TypeError, round, TestNoRound())
Jeffrey Yasskin2f3c16b2008-01-03 02:21:52 +00001359
1360 t = TestNoRound()
Jeffrey Yasskin9871d8f2008-01-05 08:47:13 +00001361 t.__float__ = lambda *args: args
1362 self.assertRaises(TypeError, round, t)
1363 self.assertRaises(TypeError, round, t, 0)
Jeffrey Yasskin2f3c16b2008-01-03 02:21:52 +00001364
Mark Dickinsona8fd66d2009-11-09 17:03:34 +00001365 # Some versions of glibc for alpha have a bug that affects
1366 # float -> integer rounding (floor, ceil, rint, round) for
1367 # values in the range [2**52, 2**53). See:
1368 #
1369 # http://sources.redhat.com/bugzilla/show_bug.cgi?id=5350
1370 #
1371 # We skip this test on Linux/alpha if it would fail.
1372 linux_alpha = (platform.system().startswith('Linux') and
1373 platform.machine().startswith('alpha'))
1374 system_round_bug = round(5e15+1) != 5e15+1
1375 @unittest.skipIf(linux_alpha and system_round_bug,
1376 "test will fail; failure is probably due to a "
1377 "buggy system round function")
1378 def test_round_large(self):
1379 # Issue #1869: integral floats should remain unchanged
1380 self.assertEqual(round(5e15-1), 5e15-1)
1381 self.assertEqual(round(5e15), 5e15)
1382 self.assertEqual(round(5e15+1), 5e15+1)
1383 self.assertEqual(round(5e15+2), 5e15+2)
1384 self.assertEqual(round(5e15+3), 5e15+3)
1385
Walter Dörwald919497e2003-01-19 16:23:59 +00001386 def test_setattr(self):
Tim Petersf2715e02003-02-19 02:35:07 +00001387 setattr(sys, 'spam', 1)
1388 self.assertEqual(sys.spam, 1)
1389 self.assertRaises(TypeError, setattr, sys, 1, 'spam')
1390 self.assertRaises(TypeError, setattr)
Walter Dörwald919497e2003-01-19 16:23:59 +00001391
Alex Martellia70b1912003-04-22 08:12:33 +00001392 def test_sum(self):
1393 self.assertEqual(sum([]), 0)
1394 self.assertEqual(sum(range(2,8)), 27)
1395 self.assertEqual(sum(iter(range(2,8))), 27)
1396 self.assertEqual(sum(Squares(10)), 285)
1397 self.assertEqual(sum(iter(Squares(10))), 285)
1398 self.assertEqual(sum([[1], [2], [3]], []), [1, 2, 3])
1399
1400 self.assertRaises(TypeError, sum)
1401 self.assertRaises(TypeError, sum, 42)
1402 self.assertRaises(TypeError, sum, ['a', 'b', 'c'])
1403 self.assertRaises(TypeError, sum, ['a', 'b', 'c'], '')
1404 self.assertRaises(TypeError, sum, [[1], [2], [3]])
1405 self.assertRaises(TypeError, sum, [{2:3}])
1406 self.assertRaises(TypeError, sum, [{2:3}]*2, {2:3})
1407
1408 class BadSeq:
1409 def __getitem__(self, index):
1410 raise ValueError
1411 self.assertRaises(ValueError, sum, BadSeq())
1412
Mark Dickinsonbfd2dc72009-10-17 21:46:32 +00001413 empty = []
1414 sum(([x] for x in range(10)), empty)
1415 self.assertEqual(empty, [])
1416
Walter Dörwald919497e2003-01-19 16:23:59 +00001417 def test_type(self):
1418 self.assertEqual(type(''), type('123'))
1419 self.assertNotEqual(type(''), type(()))
1420
1421 def test_unichr(self):
1422 if have_unicode:
1423 self.assertEqual(unichr(32), unicode(' '))
1424 self.assertEqual(unichr(65), unicode('A'))
1425 self.assertEqual(unichr(97), unicode('a'))
1426 self.assertEqual(
1427 unichr(sys.maxunicode),
1428 unicode('\\U%08x' % (sys.maxunicode), 'unicode-escape')
1429 )
1430 self.assertRaises(ValueError, unichr, sys.maxunicode+1)
1431 self.assertRaises(TypeError, unichr)
Amaury Forgeot d'Arc39fd6722008-07-31 21:28:03 +00001432 self.assertRaises((OverflowError, ValueError), unichr, 2**32)
Walter Dörwald919497e2003-01-19 16:23:59 +00001433
Guido van Rossumfee7b932005-01-16 00:21:28 +00001434 # We don't want self in vars(), so these are static methods
1435
1436 @staticmethod
Walter Dörwald919497e2003-01-19 16:23:59 +00001437 def get_vars_f0():
1438 return vars()
Walter Dörwald919497e2003-01-19 16:23:59 +00001439
Guido van Rossumfee7b932005-01-16 00:21:28 +00001440 @staticmethod
Walter Dörwald919497e2003-01-19 16:23:59 +00001441 def get_vars_f2():
1442 BuiltinTest.get_vars_f0()
1443 a = 1
1444 b = 2
1445 return vars()
Walter Dörwald919497e2003-01-19 16:23:59 +00001446
Mark Dickinson20665592010-05-25 19:01:08 +00001447 class C_get_vars(object):
1448 def getDict(self):
1449 return {'a':2}
1450 __dict__ = property(fget=getDict)
1451
Walter Dörwald919497e2003-01-19 16:23:59 +00001452 def test_vars(self):
Raymond Hettingera690a992003-11-16 16:17:49 +00001453 self.assertEqual(set(vars()), set(dir()))
Walter Dörwald919497e2003-01-19 16:23:59 +00001454 import sys
Raymond Hettingera690a992003-11-16 16:17:49 +00001455 self.assertEqual(set(vars(sys)), set(dir(sys)))
Walter Dörwald919497e2003-01-19 16:23:59 +00001456 self.assertEqual(self.get_vars_f0(), {})
1457 self.assertEqual(self.get_vars_f2(), {'a': 1, 'b': 2})
1458 self.assertRaises(TypeError, vars, 42, 42)
1459 self.assertRaises(TypeError, vars, 42)
Mark Dickinson20665592010-05-25 19:01:08 +00001460 self.assertEqual(vars(self.C_get_vars()), {'a':2})
Walter Dörwald919497e2003-01-19 16:23:59 +00001461
1462 def test_zip(self):
1463 a = (1, 2, 3)
1464 b = (4, 5, 6)
1465 t = [(1, 4), (2, 5), (3, 6)]
1466 self.assertEqual(zip(a, b), t)
1467 b = [4, 5, 6]
1468 self.assertEqual(zip(a, b), t)
1469 b = (4, 5, 6, 7)
1470 self.assertEqual(zip(a, b), t)
1471 class I:
1472 def __getitem__(self, i):
1473 if i < 0 or i > 2: raise IndexError
1474 return i + 4
1475 self.assertEqual(zip(a, I()), t)
Raymond Hettingereaef6152003-08-02 07:42:57 +00001476 self.assertEqual(zip(), [])
1477 self.assertEqual(zip(*[]), [])
Walter Dörwald919497e2003-01-19 16:23:59 +00001478 self.assertRaises(TypeError, zip, None)
1479 class G:
1480 pass
1481 self.assertRaises(TypeError, zip, a, G())
1482
1483 # Make sure zip doesn't try to allocate a billion elements for the
1484 # result list when one of its arguments doesn't say how long it is.
1485 # A MemoryError is the most likely failure mode.
1486 class SequenceWithoutALength:
1487 def __getitem__(self, i):
1488 if i == 5:
1489 raise IndexError
1490 else:
1491 return i
1492 self.assertEqual(
1493 zip(SequenceWithoutALength(), xrange(2**30)),
1494 list(enumerate(range(5)))
1495 )
1496
1497 class BadSeq:
1498 def __getitem__(self, i):
1499 if i == 5:
1500 raise ValueError
1501 else:
1502 return i
1503 self.assertRaises(ValueError, zip, BadSeq(), BadSeq())
1504
Eric Smitha9f7d622008-02-17 19:46:49 +00001505 def test_format(self):
1506 # Test the basic machinery of the format() builtin. Don't test
1507 # the specifics of the various formatters
1508 self.assertEqual(format(3, ''), '3')
1509
1510 # Returns some classes to use for various tests. There's
1511 # an old-style version, and a new-style version
1512 def classes_new():
1513 class A(object):
1514 def __init__(self, x):
1515 self.x = x
1516 def __format__(self, format_spec):
1517 return str(self.x) + format_spec
1518 class DerivedFromA(A):
1519 pass
1520
1521 class Simple(object): pass
1522 class DerivedFromSimple(Simple):
1523 def __init__(self, x):
1524 self.x = x
1525 def __format__(self, format_spec):
1526 return str(self.x) + format_spec
1527 class DerivedFromSimple2(DerivedFromSimple): pass
1528 return A, DerivedFromA, DerivedFromSimple, DerivedFromSimple2
1529
1530 # In 3.0, classes_classic has the same meaning as classes_new
1531 def classes_classic():
1532 class A:
1533 def __init__(self, x):
1534 self.x = x
1535 def __format__(self, format_spec):
1536 return str(self.x) + format_spec
1537 class DerivedFromA(A):
1538 pass
1539
1540 class Simple: pass
1541 class DerivedFromSimple(Simple):
1542 def __init__(self, x):
1543 self.x = x
1544 def __format__(self, format_spec):
1545 return str(self.x) + format_spec
1546 class DerivedFromSimple2(DerivedFromSimple): pass
1547 return A, DerivedFromA, DerivedFromSimple, DerivedFromSimple2
1548
1549 def class_test(A, DerivedFromA, DerivedFromSimple, DerivedFromSimple2):
1550 self.assertEqual(format(A(3), 'spec'), '3spec')
1551 self.assertEqual(format(DerivedFromA(4), 'spec'), '4spec')
1552 self.assertEqual(format(DerivedFromSimple(5), 'abc'), '5abc')
1553 self.assertEqual(format(DerivedFromSimple2(10), 'abcdef'),
1554 '10abcdef')
1555
1556 class_test(*classes_new())
1557 class_test(*classes_classic())
1558
1559 def empty_format_spec(value):
1560 # test that:
1561 # format(x, '') == str(x)
1562 # format(x) == str(x)
1563 self.assertEqual(format(value, ""), str(value))
1564 self.assertEqual(format(value), str(value))
1565
1566 # for builtin types, format(x, "") == str(x)
1567 empty_format_spec(17**13)
1568 empty_format_spec(1.0)
1569 empty_format_spec(3.1415e104)
1570 empty_format_spec(-3.1415e104)
1571 empty_format_spec(3.1415e-104)
1572 empty_format_spec(-3.1415e-104)
1573 empty_format_spec(object)
1574 empty_format_spec(None)
1575
1576 # TypeError because self.__format__ returns the wrong type
1577 class BadFormatResult:
1578 def __format__(self, format_spec):
1579 return 1.0
1580 self.assertRaises(TypeError, format, BadFormatResult(), "")
1581
1582 # TypeError because format_spec is not unicode or str
1583 self.assertRaises(TypeError, format, object(), 4)
1584 self.assertRaises(TypeError, format, object(), object())
1585
1586 # tests for object.__format__ really belong elsewhere, but
1587 # there's no good place to put them
1588 x = object().__format__('')
Benjamin Peterson5c8da862009-06-30 22:57:08 +00001589 self.assertTrue(x.startswith('<object object at'))
Eric Smitha9f7d622008-02-17 19:46:49 +00001590
1591 # first argument to object.__format__ must be string
1592 self.assertRaises(TypeError, object().__format__, 3)
1593 self.assertRaises(TypeError, object().__format__, object())
1594 self.assertRaises(TypeError, object().__format__, None)
1595
Eric Smithd44b2fc2010-04-02 12:30:56 +00001596 # --------------------------------------------------------------------
1597 # Issue #7994: object.__format__ with a non-empty format string is
1598 # pending deprecated
1599 def test_deprecated_format_string(obj, fmt_str, should_raise_warning):
1600 with warnings.catch_warnings(record=True) as w:
1601 warnings.simplefilter("always", PendingDeprecationWarning)
1602 format(obj, fmt_str)
1603 if should_raise_warning:
1604 self.assertEqual(len(w), 1)
1605 self.assertIsInstance(w[0].message, PendingDeprecationWarning)
1606 self.assertIn('object.__format__ with a non-empty format '
1607 'string', str(w[0].message))
1608 else:
1609 self.assertEqual(len(w), 0)
1610
1611 fmt_strs = ['', 's', u'', u's']
1612
1613 class A:
1614 def __format__(self, fmt_str):
1615 return format('', fmt_str)
1616
1617 for fmt_str in fmt_strs:
1618 test_deprecated_format_string(A(), fmt_str, False)
1619
1620 class B:
1621 pass
1622
1623 class C(object):
1624 pass
1625
1626 for cls in [object, B, C]:
1627 for fmt_str in fmt_strs:
1628 test_deprecated_format_string(cls(), fmt_str, len(fmt_str) != 0)
1629 # --------------------------------------------------------------------
1630
Eric Smitha9f7d622008-02-17 19:46:49 +00001631 # make sure we can take a subclass of str as a format spec
1632 class DerivedFromStr(str): pass
1633 self.assertEqual(format(0, DerivedFromStr('10')), ' 0')
1634
Eric Smithfb0742f2008-02-22 17:43:17 +00001635 def test_bin(self):
1636 self.assertEqual(bin(0), '0b0')
1637 self.assertEqual(bin(1), '0b1')
1638 self.assertEqual(bin(-1), '-0b1')
1639 self.assertEqual(bin(2**65), '0b1' + '0' * 65)
1640 self.assertEqual(bin(2**65-1), '0b' + '1' * 65)
1641 self.assertEqual(bin(-(2**65)), '-0b1' + '0' * 65)
1642 self.assertEqual(bin(-(2**65-1)), '-0b' + '1' * 65)
1643
Georg Brandlec812ca2009-07-22 11:57:15 +00001644 def test_bytearray_translate(self):
1645 x = bytearray("abc")
1646 self.assertRaises(ValueError, x.translate, "1", 1)
1647 self.assertRaises(TypeError, x.translate, "1"*256, 1)
1648
Eric Smithce584d42008-02-21 20:17:08 +00001649class TestSorted(unittest.TestCase):
1650
1651 def test_basic(self):
1652 data = range(100)
1653 copy = data[:]
1654 random.shuffle(copy)
1655 self.assertEqual(data, sorted(copy))
1656 self.assertNotEqual(data, copy)
1657
1658 data.reverse()
1659 random.shuffle(copy)
1660 self.assertEqual(data, sorted(copy, cmp=lambda x, y: cmp(y,x)))
1661 self.assertNotEqual(data, copy)
1662 random.shuffle(copy)
1663 self.assertEqual(data, sorted(copy, key=lambda x: -x))
1664 self.assertNotEqual(data, copy)
1665 random.shuffle(copy)
1666 self.assertEqual(data, sorted(copy, reverse=1))
1667 self.assertNotEqual(data, copy)
1668
1669 def test_inputtypes(self):
1670 s = 'abracadabra'
1671 types = [list, tuple]
1672 if have_unicode:
1673 types.insert(0, unicode)
1674 for T in types:
1675 self.assertEqual(sorted(s), sorted(T(s)))
1676
1677 s = ''.join(dict.fromkeys(s).keys()) # unique letters only
1678 types = [set, frozenset, list, tuple, dict.fromkeys]
1679 if have_unicode:
1680 types.insert(0, unicode)
1681 for T in types:
1682 self.assertEqual(sorted(s), sorted(T(s)))
1683
1684 def test_baddecorator(self):
1685 data = 'The quick Brown fox Jumped over The lazy Dog'.split()
1686 self.assertRaises(TypeError, sorted, data, None, lambda x,y: 0)
1687
Florent Xicluna07627882010-03-21 01:14:24 +00001688def _run_unittest(*args):
1689 with check_py3k_warnings(
1690 (".+ not supported in 3.x", DeprecationWarning),
1691 (".+ is renamed to imp.reload", DeprecationWarning),
1692 ("classic int division", DeprecationWarning)):
1693 run_unittest(*args)
1694
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001695def test_main(verbose=None):
1696 test_classes = (BuiltinTest, TestSorted)
1697
Florent Xicluna07627882010-03-21 01:14:24 +00001698 _run_unittest(*test_classes)
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001699
1700 # verify reference counting
1701 if verbose and hasattr(sys, "gettotalrefcount"):
1702 import gc
1703 counts = [None] * 5
1704 for i in xrange(len(counts)):
Florent Xicluna07627882010-03-21 01:14:24 +00001705 _run_unittest(*test_classes)
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001706 gc.collect()
1707 counts[i] = sys.gettotalrefcount()
1708 print counts
1709
Walter Dörwald919497e2003-01-19 16:23:59 +00001710
1711if __name__ == "__main__":
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001712 test_main(verbose=True)