blob: ef562db54c28e747fb83ca0b408403aa4853509d [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
Benjamin Petersonee8712c2008-05-20 21:35:26 +00003import test.support, unittest
4from test.support import fcmp, TESTFN, unlink, run_unittest, \
Walter Dörwald1f5947b2007-05-22 16:52:54 +00005 run_with_locale
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00006from operator import neg
Guido van Rossum3bead091992-01-27 17:00:37 +00007
Raymond Hettinger53dbe392008-02-12 20:03:09 +00008import sys, warnings, random, collections, io, fractions
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
Walter Dörwald919497e2003-01-19 16:23:59 +000014class Squares:
Guido van Rossum3bead091992-01-27 17:00:37 +000015
Walter Dörwald919497e2003-01-19 16:23:59 +000016 def __init__(self, max):
17 self.max = max
18 self.sofar = []
19
20 def __len__(self): return len(self.sofar)
21
22 def __getitem__(self, i):
23 if not 0 <= i < self.max: raise IndexError
24 n = len(self.sofar)
25 while n <= i:
26 self.sofar.append(n*n)
27 n += 1
28 return self.sofar[i]
29
30class StrSquares:
31
32 def __init__(self, max):
33 self.max = max
34 self.sofar = []
35
36 def __len__(self):
37 return len(self.sofar)
38
39 def __getitem__(self, i):
40 if not 0 <= i < self.max:
41 raise IndexError
42 n = len(self.sofar)
43 while n <= i:
44 self.sofar.append(str(n*n))
45 n += 1
46 return self.sofar[i]
47
48class BitBucket:
49 def write(self, line):
50 pass
51
Facundo Batista2336bdd2008-01-19 19:12:01 +000052test_conv_no_sign = [
Walter Dörwald919497e2003-01-19 16:23:59 +000053 ('0', 0),
54 ('1', 1),
55 ('9', 9),
56 ('10', 10),
57 ('99', 99),
58 ('100', 100),
59 ('314', 314),
60 (' 314', 314),
61 ('314 ', 314),
62 (' \t\t 314 \t\t ', 314),
Christian Heimesa37d4c62007-12-04 23:02:19 +000063 (repr(sys.maxsize), sys.maxsize),
Walter Dörwald919497e2003-01-19 16:23:59 +000064 (' 1x', ValueError),
65 (' 1 ', 1),
66 (' 1\02 ', ValueError),
67 ('', ValueError),
68 (' ', ValueError),
Walter Dörwald1f5947b2007-05-22 16:52:54 +000069 (' \t\t ', ValueError),
Guido van Rossumef87d6e2007-05-02 19:09:54 +000070 (str(b'\u0663\u0661\u0664 ','raw-unicode-escape'), 314),
Guido van Rossum84fc66d2007-05-03 17:18:26 +000071 (chr(0x200), ValueError),
Walter Dörwald919497e2003-01-19 16:23:59 +000072]
73
Facundo Batista2336bdd2008-01-19 19:12:01 +000074test_conv_sign = [
75 ('0', 0),
76 ('1', 1),
77 ('9', 9),
78 ('10', 10),
79 ('99', 99),
80 ('100', 100),
81 ('314', 314),
82 (' 314', ValueError),
83 ('314 ', 314),
84 (' \t\t 314 \t\t ', ValueError),
85 (repr(sys.maxsize), sys.maxsize),
86 (' 1x', ValueError),
87 (' 1 ', ValueError),
88 (' 1\02 ', ValueError),
89 ('', ValueError),
90 (' ', ValueError),
91 (' \t\t ', ValueError),
92 (str(b'\u0663\u0661\u0664 ','raw-unicode-escape'), 314),
93 (chr(0x200), ValueError),
94]
95
Raymond Hettinger96229b12005-03-11 06:49:40 +000096class TestFailingBool:
Jack Diederich4dafcc42006-11-28 19:15:13 +000097 def __bool__(self):
Raymond Hettinger96229b12005-03-11 06:49:40 +000098 raise RuntimeError
99
100class TestFailingIter:
101 def __iter__(self):
102 raise RuntimeError
103
Walter Dörwald919497e2003-01-19 16:23:59 +0000104class BuiltinTest(unittest.TestCase):
105
106 def test_import(self):
107 __import__('sys')
108 __import__('time')
109 __import__('string')
Guido van Rossumd8faa362007-04-27 19:54:29 +0000110 __import__(name='sys')
111 __import__(name='time', level=0)
Walter Dörwald919497e2003-01-19 16:23:59 +0000112 self.assertRaises(ImportError, __import__, 'spamspam')
113 self.assertRaises(TypeError, __import__, 1, 2, 3, 4)
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000114 self.assertRaises(ValueError, __import__, '')
Guido van Rossumd8faa362007-04-27 19:54:29 +0000115 self.assertRaises(TypeError, __import__, 'sys', name='sys')
Walter Dörwald919497e2003-01-19 16:23:59 +0000116
117 def test_abs(self):
118 # int
119 self.assertEqual(abs(0), 0)
120 self.assertEqual(abs(1234), 1234)
121 self.assertEqual(abs(-1234), 1234)
Christian Heimesa37d4c62007-12-04 23:02:19 +0000122 self.assertTrue(abs(-sys.maxsize-1) > 0)
Walter Dörwald919497e2003-01-19 16:23:59 +0000123 # float
124 self.assertEqual(abs(0.0), 0.0)
125 self.assertEqual(abs(3.14), 3.14)
126 self.assertEqual(abs(-3.14), 3.14)
127 # long
Guido van Rossume2a383d2007-01-15 16:59:06 +0000128 self.assertEqual(abs(0), 0)
129 self.assertEqual(abs(1234), 1234)
130 self.assertEqual(abs(-1234), 1234)
Walter Dörwald919497e2003-01-19 16:23:59 +0000131 # str
132 self.assertRaises(TypeError, abs, 'a')
133
Raymond Hettinger96229b12005-03-11 06:49:40 +0000134 def test_all(self):
135 self.assertEqual(all([2, 4, 6]), True)
136 self.assertEqual(all([2, None, 6]), False)
137 self.assertRaises(RuntimeError, all, [2, TestFailingBool(), 6])
138 self.assertRaises(RuntimeError, all, TestFailingIter())
139 self.assertRaises(TypeError, all, 10) # Non-iterable
140 self.assertRaises(TypeError, all) # No args
141 self.assertRaises(TypeError, all, [2, 4, 6], []) # Too many args
142 self.assertEqual(all([]), True) # Empty iterator
143 S = [50, 60]
144 self.assertEqual(all(x > 42 for x in S), True)
145 S = [50, 40, 60]
146 self.assertEqual(all(x > 42 for x in S), False)
147
148 def test_any(self):
149 self.assertEqual(any([None, None, None]), False)
150 self.assertEqual(any([None, 4, None]), True)
151 self.assertRaises(RuntimeError, any, [None, TestFailingBool(), 6])
152 self.assertRaises(RuntimeError, all, TestFailingIter())
153 self.assertRaises(TypeError, any, 10) # Non-iterable
154 self.assertRaises(TypeError, any) # No args
155 self.assertRaises(TypeError, any, [2, 4, 6], []) # Too many args
156 self.assertEqual(any([]), False) # Empty iterator
157 S = [40, 60, 30]
158 self.assertEqual(any(x > 42 for x in S), True)
159 S = [10, 20, 30]
160 self.assertEqual(any(x > 42 for x in S), False)
161
Thomas Wouters89f507f2006-12-13 04:49:30 +0000162 def test_neg(self):
Christian Heimesa37d4c62007-12-04 23:02:19 +0000163 x = -sys.maxsize-1
Thomas Wouters89f507f2006-12-13 04:49:30 +0000164 self.assert_(isinstance(x, int))
Christian Heimesa37d4c62007-12-04 23:02:19 +0000165 self.assertEqual(-x, sys.maxsize+1)
Thomas Wouters89f507f2006-12-13 04:49:30 +0000166
Guido van Rossumd59da4b2007-05-22 18:11:13 +0000167 # XXX(nnorwitz): This test case for callable should probably be removed.
Walter Dörwald919497e2003-01-19 16:23:59 +0000168 def test_callable(self):
Guido van Rossumd59da4b2007-05-22 18:11:13 +0000169 self.assert_(hasattr(len, '__call__'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000170 def f(): pass
Guido van Rossumd59da4b2007-05-22 18:11:13 +0000171 self.assert_(hasattr(f, '__call__'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000172 class C:
173 def meth(self): pass
Guido van Rossumd59da4b2007-05-22 18:11:13 +0000174 self.assert_(hasattr(C, '__call__'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000175 x = C()
Guido van Rossumd59da4b2007-05-22 18:11:13 +0000176 self.assert_(hasattr(x.meth, '__call__'))
177 self.assert_(not hasattr(x, '__call__'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000178 class D(C):
179 def __call__(self): pass
180 y = D()
Guido van Rossumd59da4b2007-05-22 18:11:13 +0000181 self.assert_(hasattr(y, '__call__'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000182 y()
183
184 def test_chr(self):
185 self.assertEqual(chr(32), ' ')
186 self.assertEqual(chr(65), 'A')
187 self.assertEqual(chr(97), 'a')
188 self.assertEqual(chr(0xff), '\xff')
Guido van Rossum572dbf82007-04-27 23:53:51 +0000189 self.assertRaises(ValueError, chr, 1<<24)
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000190 self.assertEqual(chr(sys.maxunicode),
191 str(('\\U%08x' % (sys.maxunicode)).encode("ascii"),
192 'unicode-escape'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000193 self.assertRaises(TypeError, chr)
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000194 self.assertEqual(chr(0x0000FFFF), "\U0000FFFF")
195 self.assertEqual(chr(0x00010000), "\U00010000")
196 self.assertEqual(chr(0x00010001), "\U00010001")
197 self.assertEqual(chr(0x000FFFFE), "\U000FFFFE")
198 self.assertEqual(chr(0x000FFFFF), "\U000FFFFF")
199 self.assertEqual(chr(0x00100000), "\U00100000")
200 self.assertEqual(chr(0x00100001), "\U00100001")
201 self.assertEqual(chr(0x0010FFFE), "\U0010FFFE")
202 self.assertEqual(chr(0x0010FFFF), "\U0010FFFF")
203 self.assertRaises(ValueError, chr, -1)
204 self.assertRaises(ValueError, chr, 0x00110000)
Walter Dörwald919497e2003-01-19 16:23:59 +0000205
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000206 def test_cmp(self):
Walter Dörwald919497e2003-01-19 16:23:59 +0000207 self.assertEqual(cmp(-1, 1), -1)
208 self.assertEqual(cmp(1, -1), 1)
209 self.assertEqual(cmp(1, 1), 0)
Armin Rigo2b3eb402003-10-28 12:05:48 +0000210 # verify that circular objects are not handled
Walter Dörwald919497e2003-01-19 16:23:59 +0000211 a = []; a.append(a)
212 b = []; b.append(b)
Raymond Hettinger53dbe392008-02-12 20:03:09 +0000213 from collections import UserList
Walter Dörwald919497e2003-01-19 16:23:59 +0000214 c = UserList(); c.append(c)
Armin Rigo2b3eb402003-10-28 12:05:48 +0000215 self.assertRaises(RuntimeError, cmp, a, b)
216 self.assertRaises(RuntimeError, cmp, b, c)
217 self.assertRaises(RuntimeError, cmp, c, a)
218 self.assertRaises(RuntimeError, cmp, a, c)
219 # okay, now break the cycles
Walter Dörwald919497e2003-01-19 16:23:59 +0000220 a.pop(); b.pop(); c.pop()
221 self.assertRaises(TypeError, cmp)
222
Walter Dörwald919497e2003-01-19 16:23:59 +0000223 def test_compile(self):
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000224 compile('print(1)\n', '', 'exec')
Amaury Forgeot d'Arcaf593462007-11-22 20:53:01 +0000225 bom = b'\xef\xbb\xbf'
226 compile(bom + b'print(1)\n', '', 'exec')
Guido van Rossumd8faa362007-04-27 19:54:29 +0000227 compile(source='pass', filename='?', mode='exec')
228 compile(dont_inherit=0, filename='tmp', source='0', mode='eval')
229 compile('pass', '?', dont_inherit=1, mode='exec')
Walter Dörwald919497e2003-01-19 16:23:59 +0000230 self.assertRaises(TypeError, compile)
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000231 self.assertRaises(ValueError, compile, 'print(42)\n', '<string>', 'badmode')
232 self.assertRaises(ValueError, compile, 'print(42)\n', '<string>', 'single', 0xff)
Neal Norwitzfcf44352005-11-27 20:37:43 +0000233 self.assertRaises(TypeError, compile, chr(0), 'f', 'exec')
Guido van Rossumd8faa362007-04-27 19:54:29 +0000234 self.assertRaises(TypeError, compile, 'pass', '?', 'exec',
235 mode='eval', source='0', filename='tmp')
Walter Dörwald1f5947b2007-05-22 16:52:54 +0000236 compile('print("\xe5")\n', '', 'exec')
237 self.assertRaises(TypeError, compile, chr(0), 'f', 'exec')
238 self.assertRaises(ValueError, compile, str('a = 1'), 'f', 'bad')
Guido van Rossumd8faa362007-04-27 19:54:29 +0000239
Walter Dörwald919497e2003-01-19 16:23:59 +0000240 def test_delattr(self):
241 import sys
242 sys.spam = 1
243 delattr(sys, 'spam')
244 self.assertRaises(TypeError, delattr)
245
246 def test_dir(self):
Georg Brandle32b4222007-03-10 22:13:27 +0000247 # dir(wrong number of arguments)
Walter Dörwald919497e2003-01-19 16:23:59 +0000248 self.assertRaises(TypeError, dir, 42, 42)
249
Georg Brandle32b4222007-03-10 22:13:27 +0000250 # dir() - local scope
251 local_var = 1
252 self.assert_('local_var' in dir())
253
254 # dir(module)
255 import sys
256 self.assert_('exit' in dir(sys))
257
258 # dir(module_with_invalid__dict__)
259 import types
260 class Foo(types.ModuleType):
261 __dict__ = 8
262 f = Foo("foo")
263 self.assertRaises(TypeError, dir, f)
264
265 # dir(type)
266 self.assert_("strip" in dir(str))
267 self.assert_("__mro__" not in dir(str))
268
269 # dir(obj)
270 class Foo(object):
271 def __init__(self):
272 self.x = 7
273 self.y = 8
274 self.z = 9
275 f = Foo()
276 self.assert_("y" in dir(f))
277
278 # dir(obj_no__dict__)
279 class Foo(object):
280 __slots__ = []
281 f = Foo()
282 self.assert_("__repr__" in dir(f))
283
284 # dir(obj_no__class__with__dict__)
285 # (an ugly trick to cause getattr(f, "__class__") to fail)
286 class Foo(object):
287 __slots__ = ["__class__", "__dict__"]
288 def __init__(self):
289 self.bar = "wow"
290 f = Foo()
291 self.assert_("__repr__" not in dir(f))
292 self.assert_("bar" in dir(f))
293
294 # dir(obj_using __dir__)
295 class Foo(object):
296 def __dir__(self):
297 return ["kan", "ga", "roo"]
298 f = Foo()
299 self.assert_(dir(f) == ["ga", "kan", "roo"])
300
301 # dir(obj__dir__not_list)
302 class Foo(object):
303 def __dir__(self):
304 return 7
305 f = Foo()
306 self.assertRaises(TypeError, dir, f)
307
Collin Winter3eed7652007-08-14 17:53:54 +0000308 # dir(traceback)
309 try:
310 raise IndexError
311 except:
312 self.assertEqual(len(dir(sys.exc_info()[2])), 4)
313
314
Walter Dörwald919497e2003-01-19 16:23:59 +0000315 def test_divmod(self):
316 self.assertEqual(divmod(12, 7), (1, 5))
317 self.assertEqual(divmod(-12, 7), (-2, 2))
318 self.assertEqual(divmod(12, -7), (-2, -2))
319 self.assertEqual(divmod(-12, -7), (1, -5))
320
Guido van Rossume2a383d2007-01-15 16:59:06 +0000321 self.assertEqual(divmod(12, 7), (1, 5))
322 self.assertEqual(divmod(-12, 7), (-2, 2))
323 self.assertEqual(divmod(12, -7), (-2, -2))
324 self.assertEqual(divmod(-12, -7), (1, -5))
Walter Dörwald919497e2003-01-19 16:23:59 +0000325
Guido van Rossume2a383d2007-01-15 16:59:06 +0000326 self.assertEqual(divmod(12, 7), (1, 5))
327 self.assertEqual(divmod(-12, 7), (-2, 2))
328 self.assertEqual(divmod(12, -7), (-2, -2))
329 self.assertEqual(divmod(-12, -7), (1, -5))
Walter Dörwald919497e2003-01-19 16:23:59 +0000330
Christian Heimesa37d4c62007-12-04 23:02:19 +0000331 self.assertEqual(divmod(-sys.maxsize-1, -1),
332 (sys.maxsize+1, 0))
Raymond Hettinger5ea7e312004-09-30 07:47:20 +0000333
Walter Dörwald919497e2003-01-19 16:23:59 +0000334 self.assert_(not fcmp(divmod(3.25, 1.0), (3.0, 0.25)))
335 self.assert_(not fcmp(divmod(-3.25, 1.0), (-4.0, 0.75)))
336 self.assert_(not fcmp(divmod(3.25, -1.0), (-4.0, -0.75)))
337 self.assert_(not fcmp(divmod(-3.25, -1.0), (3.0, -0.25)))
338
339 self.assertRaises(TypeError, divmod)
340
341 def test_eval(self):
342 self.assertEqual(eval('1+1'), 2)
343 self.assertEqual(eval(' 1+1\n'), 2)
344 globals = {'a': 1, 'b': 2}
345 locals = {'b': 200, 'c': 300}
346 self.assertEqual(eval('a', globals) , 1)
347 self.assertEqual(eval('a', globals, locals), 1)
348 self.assertEqual(eval('b', globals, locals), 200)
349 self.assertEqual(eval('c', globals, locals), 300)
Walter Dörwald919497e2003-01-19 16:23:59 +0000350 globals = {'a': 1, 'b': 2}
351 locals = {'b': 200, 'c': 300}
Amaury Forgeot d'Arcaf593462007-11-22 20:53:01 +0000352 bom = b'\xef\xbb\xbf'
353 self.assertEqual(eval(bom + b'a', globals, locals), 1)
Walter Dörwald1f5947b2007-05-22 16:52:54 +0000354 self.assertEqual(eval('"\xe5"', globals), "\xe5")
Walter Dörwald919497e2003-01-19 16:23:59 +0000355 self.assertRaises(TypeError, eval)
356 self.assertRaises(TypeError, eval, ())
Amaury Forgeot d'Arcaf593462007-11-22 20:53:01 +0000357 self.assertRaises(SyntaxError, eval, bom[:2] + b'a')
Walter Dörwald919497e2003-01-19 16:23:59 +0000358
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000359 def test_general_eval(self):
360 # Tests that general mappings can be used for the locals argument
361
362 class M:
363 "Test mapping interface versus possible calls from eval()."
364 def __getitem__(self, key):
365 if key == 'a':
366 return 12
367 raise KeyError
Guido van Rossumcd70eee2007-02-11 18:53:00 +0000368 def keys(self):
369 return list('xyz')
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000370
371 m = M()
372 g = globals()
373 self.assertEqual(eval('a', g, m), 12)
374 self.assertRaises(NameError, eval, 'b', g, m)
375 self.assertEqual(eval('dir()', g, m), list('xyz'))
376 self.assertEqual(eval('globals()', g, m), g)
377 self.assertEqual(eval('locals()', g, m), m)
Raymond Hettinger513ffe82004-07-06 13:44:41 +0000378 self.assertRaises(TypeError, eval, 'a', m)
Raymond Hettinger66bd2332004-08-02 08:30:07 +0000379 class A:
380 "Non-mapping"
381 pass
382 m = A()
383 self.assertRaises(TypeError, eval, 'a', g, m)
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000384
385 # Verify that dict subclasses work as well
386 class D(dict):
387 def __getitem__(self, key):
388 if key == 'a':
389 return 12
390 return dict.__getitem__(self, key)
Guido van Rossumcd70eee2007-02-11 18:53:00 +0000391 def keys(self):
392 return list('xyz')
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000393
394 d = D()
395 self.assertEqual(eval('a', g, d), 12)
396 self.assertRaises(NameError, eval, 'b', g, d)
397 self.assertEqual(eval('dir()', g, d), list('xyz'))
398 self.assertEqual(eval('globals()', g, d), g)
399 self.assertEqual(eval('locals()', g, d), d)
400
401 # Verify locals stores (used by list comps)
402 eval('[locals() for i in (2,3)]', g, d)
Raymond Hettingerf80680d2008-02-06 00:07:11 +0000403 eval('[locals() for i in (2,3)]', g, collections.UserDict())
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000404
405 class SpreadSheet:
406 "Sample application showing nested, calculated lookups."
407 _cells = {}
408 def __setitem__(self, key, formula):
409 self._cells[key] = formula
Thomas Wouters73e5a5b2006-06-08 15:35:45 +0000410 def __getitem__(self, key):
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000411 return eval(self._cells[key], globals(), self)
412
413 ss = SpreadSheet()
414 ss['a1'] = '5'
415 ss['a2'] = 'a1*6'
416 ss['a3'] = 'a2*7'
417 self.assertEqual(ss['a3'], 210)
418
Raymond Hettinger2a7dede2004-08-07 04:55:30 +0000419 # Verify that dir() catches a non-list returned by eval
420 # SF bug #1004669
421 class C:
422 def __getitem__(self, item):
423 raise KeyError(item)
Guido van Rossumcd70eee2007-02-11 18:53:00 +0000424 def keys(self):
425 return 1 # used to be 'a' but that's no longer an error
Raymond Hettinger2a7dede2004-08-07 04:55:30 +0000426 self.assertRaises(TypeError, eval, 'dir()', globals(), C())
427
Georg Brandl7cae87c2006-09-06 06:51:57 +0000428 def test_exec(self):
429 g = {}
430 exec('z = 1', g)
431 if '__builtins__' in g:
432 del g['__builtins__']
433 self.assertEqual(g, {'z': 1})
434
Guido van Rossumef87d6e2007-05-02 19:09:54 +0000435 exec('z = 1+1', g)
Georg Brandl7cae87c2006-09-06 06:51:57 +0000436 if '__builtins__' in g:
437 del g['__builtins__']
438 self.assertEqual(g, {'z': 2})
439 g = {}
440 l = {}
441
442 import warnings
443 warnings.filterwarnings("ignore", "global statement", module="<string>")
444 exec('global a; a = 1; b = 2', g, l)
445 if '__builtins__' in g:
446 del g['__builtins__']
447 if '__builtins__' in l:
448 del l['__builtins__']
449 self.assertEqual((g, l), ({'a': 1}, {'b': 2}))
450
Amaury Forgeot d'Arc9ed77352008-04-04 23:25:27 +0000451 def test_exec_redirected(self):
452 savestdout = sys.stdout
453 sys.stdout = None # Whatever that cannot flush()
454 try:
455 # Used to raise SystemError('error return without exception set')
456 exec('a')
457 except NameError:
458 pass
459 finally:
460 sys.stdout = savestdout
461
Walter Dörwald919497e2003-01-19 16:23:59 +0000462 def test_filter(self):
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000463 self.assertEqual(list(filter(lambda c: 'a' <= c <= 'z', 'Hello World')), list('elloorld'))
464 self.assertEqual(list(filter(None, [1, 'hello', [], [3], '', None, 9, 0])), [1, 'hello', [3], 9])
465 self.assertEqual(list(filter(lambda x: x > 0, [1, -3, 9, 0, 2])), [1, 9, 2])
466 self.assertEqual(list(filter(None, Squares(10))), [1, 4, 9, 16, 25, 36, 49, 64, 81])
467 self.assertEqual(list(filter(lambda x: x%2, Squares(10))), [1, 9, 25, 49, 81])
Walter Dörwald919497e2003-01-19 16:23:59 +0000468 def identity(item):
469 return 1
470 filter(identity, Squares(5))
471 self.assertRaises(TypeError, filter)
472 class BadSeq(object):
Tim Petersf2715e02003-02-19 02:35:07 +0000473 def __getitem__(self, index):
474 if index<4:
475 return 42
476 raise ValueError
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000477 self.assertRaises(ValueError, list, filter(lambda x: x, BadSeq()))
Walter Dörwald919497e2003-01-19 16:23:59 +0000478 def badfunc():
479 pass
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000480 self.assertRaises(TypeError, list, filter(badfunc, range(5)))
Walter Dörwald919497e2003-01-19 16:23:59 +0000481
Walter Dörwaldbf517072003-01-27 15:57:14 +0000482 # test bltinmodule.c::filtertuple()
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000483 self.assertEqual(list(filter(None, (1, 2))), [1, 2])
484 self.assertEqual(list(filter(lambda x: x>=3, (1, 2, 3, 4))), [3, 4])
485 self.assertRaises(TypeError, list, filter(42, (1, 2)))
Walter Dörwaldc3da83f2003-02-04 20:24:45 +0000486
Walter Dörwald919497e2003-01-19 16:23:59 +0000487 def test_getattr(self):
488 import sys
489 self.assert_(getattr(sys, 'stdout') is sys.stdout)
490 self.assertRaises(TypeError, getattr, sys, 1)
491 self.assertRaises(TypeError, getattr, sys, 1, "foo")
492 self.assertRaises(TypeError, getattr)
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000493 self.assertRaises(AttributeError, getattr, sys, chr(sys.maxunicode))
Walter Dörwald919497e2003-01-19 16:23:59 +0000494
495 def test_hasattr(self):
496 import sys
497 self.assert_(hasattr(sys, 'stdout'))
498 self.assertRaises(TypeError, hasattr, sys, 1)
499 self.assertRaises(TypeError, hasattr)
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000500 self.assertEqual(False, hasattr(sys, chr(sys.maxunicode)))
Walter Dörwald919497e2003-01-19 16:23:59 +0000501
Alexandre Vassalottieca20b62008-05-16 02:54:33 +0000502 # Check that hasattr allows SystemExit and KeyboardInterrupts by
503 class A:
504 def __getattr__(self, what):
505 raise KeyboardInterrupt
506 self.assertRaises(KeyboardInterrupt, hasattr, A(), "b")
507 class B:
508 def __getattr__(self, what):
509 raise SystemExit
510 self.assertRaises(SystemExit, hasattr, B(), "b")
511
Walter Dörwald919497e2003-01-19 16:23:59 +0000512 def test_hash(self):
513 hash(None)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000514 self.assertEqual(hash(1), hash(1))
Walter Dörwald919497e2003-01-19 16:23:59 +0000515 self.assertEqual(hash(1), hash(1.0))
516 hash('spam')
Guido van Rossum98297ee2007-11-06 21:34:58 +0000517 self.assertEqual(hash('spam'), hash(b'spam'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000518 hash((0,1,2,3))
519 def f(): pass
520 self.assertRaises(TypeError, hash, [])
521 self.assertRaises(TypeError, hash, {})
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000522 # Bug 1536021: Allow hash to return long objects
523 class X:
524 def __hash__(self):
525 return 2**100
526 self.assertEquals(type(hash(X())), int)
527 class Y(object):
528 def __hash__(self):
529 return 2**100
530 self.assertEquals(type(hash(Y())), int)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000531 class Z(int):
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000532 def __hash__(self):
533 return self
Guido van Rossume2a383d2007-01-15 16:59:06 +0000534 self.assertEquals(hash(Z(42)), hash(42))
Walter Dörwald919497e2003-01-19 16:23:59 +0000535
536 def test_hex(self):
537 self.assertEqual(hex(16), '0x10')
Guido van Rossume2a383d2007-01-15 16:59:06 +0000538 self.assertEqual(hex(16), '0x10')
Guido van Rossum6c9e1302003-11-29 23:52:13 +0000539 self.assertEqual(hex(-16), '-0x10')
Guido van Rossume2a383d2007-01-15 16:59:06 +0000540 self.assertEqual(hex(-16), '-0x10')
Walter Dörwald919497e2003-01-19 16:23:59 +0000541 self.assertRaises(TypeError, hex, {})
542
543 def test_id(self):
544 id(None)
545 id(1)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000546 id(1)
Walter Dörwald919497e2003-01-19 16:23:59 +0000547 id(1.0)
548 id('spam')
549 id((0,1,2,3))
550 id([0,1,2,3])
551 id({'spam': 1, 'eggs': 2, 'ham': 3})
552
Guido van Rossuma88a0332007-02-26 16:59:55 +0000553 # Test input() later, alphabetized as if it were raw_input
554
Walter Dörwald919497e2003-01-19 16:23:59 +0000555 def test_iter(self):
556 self.assertRaises(TypeError, iter)
557 self.assertRaises(TypeError, iter, 42, 42)
558 lists = [("1", "2"), ["1", "2"], "12"]
Walter Dörwald919497e2003-01-19 16:23:59 +0000559 for l in lists:
560 i = iter(l)
Georg Brandla18af4e2007-04-21 15:47:16 +0000561 self.assertEqual(next(i), '1')
562 self.assertEqual(next(i), '2')
563 self.assertRaises(StopIteration, next, i)
Walter Dörwald919497e2003-01-19 16:23:59 +0000564
565 def test_isinstance(self):
566 class C:
567 pass
568 class D(C):
569 pass
570 class E:
571 pass
572 c = C()
573 d = D()
574 e = E()
575 self.assert_(isinstance(c, C))
576 self.assert_(isinstance(d, C))
577 self.assert_(not isinstance(e, C))
578 self.assert_(not isinstance(c, D))
579 self.assert_(not isinstance('foo', E))
580 self.assertRaises(TypeError, isinstance, E, 'foo')
581 self.assertRaises(TypeError, isinstance)
582
583 def test_issubclass(self):
584 class C:
585 pass
586 class D(C):
587 pass
588 class E:
589 pass
590 c = C()
591 d = D()
592 e = E()
593 self.assert_(issubclass(D, C))
594 self.assert_(issubclass(C, C))
595 self.assert_(not issubclass(C, D))
596 self.assertRaises(TypeError, issubclass, 'foo', E)
597 self.assertRaises(TypeError, issubclass, E, 'foo')
598 self.assertRaises(TypeError, issubclass)
599
600 def test_len(self):
601 self.assertEqual(len('123'), 3)
602 self.assertEqual(len(()), 0)
603 self.assertEqual(len((1, 2, 3, 4)), 4)
604 self.assertEqual(len([1, 2, 3, 4]), 4)
605 self.assertEqual(len({}), 0)
606 self.assertEqual(len({'a':1, 'b': 2}), 2)
607 class BadSeq:
608 def __len__(self):
609 raise ValueError
610 self.assertRaises(ValueError, len, BadSeq())
611
Walter Dörwald919497e2003-01-19 16:23:59 +0000612 def test_map(self):
613 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000614 list(map(lambda x: x*x, range(1,4))),
Walter Dörwald919497e2003-01-19 16:23:59 +0000615 [1, 4, 9]
616 )
617 try:
618 from math import sqrt
619 except ImportError:
620 def sqrt(x):
621 return pow(x, 0.5)
622 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000623 list(map(lambda x: list(map(sqrt, x)), [[16, 4], [81, 9]])),
Walter Dörwald919497e2003-01-19 16:23:59 +0000624 [[4.0, 2.0], [9.0, 3.0]]
625 )
626 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000627 list(map(lambda x, y: x+y, [1,3,2], [9,1,4])),
Walter Dörwald919497e2003-01-19 16:23:59 +0000628 [10, 4, 6]
629 )
630
631 def plus(*v):
632 accu = 0
633 for i in v: accu = accu + i
634 return accu
635 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000636 list(map(plus, [1, 3, 7])),
Walter Dörwald919497e2003-01-19 16:23:59 +0000637 [1, 3, 7]
638 )
639 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000640 list(map(plus, [1, 3, 7], [4, 9, 2])),
Walter Dörwald919497e2003-01-19 16:23:59 +0000641 [1+4, 3+9, 7+2]
642 )
643 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000644 list(map(plus, [1, 3, 7], [4, 9, 2], [1, 1, 0])),
Walter Dörwald919497e2003-01-19 16:23:59 +0000645 [1+4+1, 3+9+1, 7+2+0]
646 )
647 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000648 list(map(int, Squares(10))),
Walter Dörwald919497e2003-01-19 16:23:59 +0000649 [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
650 )
Guido van Rossum47b9ff62006-08-24 00:41:19 +0000651 def Max(a, b):
652 if a is None:
653 return b
654 if b is None:
655 return a
656 return max(a, b)
Walter Dörwald919497e2003-01-19 16:23:59 +0000657 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000658 list(map(Max, Squares(3), Squares(2))),
659 [0, 1]
Walter Dörwald919497e2003-01-19 16:23:59 +0000660 )
661 self.assertRaises(TypeError, map)
662 self.assertRaises(TypeError, map, lambda x: x, 42)
Walter Dörwald919497e2003-01-19 16:23:59 +0000663 class BadSeq:
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000664 def __iter__(self):
Walter Dörwald919497e2003-01-19 16:23:59 +0000665 raise ValueError
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000666 yield None
667 self.assertRaises(ValueError, list, map(lambda x: x, BadSeq()))
Neal Norwitzfcf44352005-11-27 20:37:43 +0000668 def badfunc(x):
669 raise RuntimeError
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000670 self.assertRaises(RuntimeError, list, map(badfunc, range(5)))
Walter Dörwald919497e2003-01-19 16:23:59 +0000671
672 def test_max(self):
673 self.assertEqual(max('123123'), '3')
674 self.assertEqual(max(1, 2, 3), 3)
675 self.assertEqual(max((1, 2, 3, 1, 2, 3)), 3)
676 self.assertEqual(max([1, 2, 3, 1, 2, 3]), 3)
677
Guido van Rossume2a383d2007-01-15 16:59:06 +0000678 self.assertEqual(max(1, 2, 3.0), 3.0)
679 self.assertEqual(max(1, 2.0, 3), 3)
680 self.assertEqual(max(1.0, 2, 3), 3)
Walter Dörwald919497e2003-01-19 16:23:59 +0000681
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +0000682 for stmt in (
683 "max(key=int)", # no args
684 "max(1, key=int)", # single arg not iterable
685 "max(1, 2, keystone=int)", # wrong keyword
686 "max(1, 2, key=int, abc=int)", # two many keywords
687 "max(1, 2, key=1)", # keyfunc is not callable
688 ):
Tim Peters7f061872004-12-07 21:17:46 +0000689 try:
Georg Brandl7cae87c2006-09-06 06:51:57 +0000690 exec(stmt, globals())
Tim Peters7f061872004-12-07 21:17:46 +0000691 except TypeError:
692 pass
693 else:
694 self.fail(stmt)
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +0000695
696 self.assertEqual(max((1,), key=neg), 1) # one elem iterable
697 self.assertEqual(max((1,2), key=neg), 1) # two elem iterable
698 self.assertEqual(max(1, 2, key=neg), 1) # two elems
699
700 data = [random.randrange(200) for i in range(100)]
701 keys = dict((elem, random.randrange(50)) for elem in data)
702 f = keys.__getitem__
703 self.assertEqual(max(data, key=f),
704 sorted(reversed(data), key=f)[-1])
705
Walter Dörwald919497e2003-01-19 16:23:59 +0000706 def test_min(self):
707 self.assertEqual(min('123123'), '1')
708 self.assertEqual(min(1, 2, 3), 1)
709 self.assertEqual(min((1, 2, 3, 1, 2, 3)), 1)
710 self.assertEqual(min([1, 2, 3, 1, 2, 3]), 1)
711
Guido van Rossume2a383d2007-01-15 16:59:06 +0000712 self.assertEqual(min(1, 2, 3.0), 1)
713 self.assertEqual(min(1, 2.0, 3), 1)
714 self.assertEqual(min(1.0, 2, 3), 1.0)
Walter Dörwald919497e2003-01-19 16:23:59 +0000715
716 self.assertRaises(TypeError, min)
717 self.assertRaises(TypeError, min, 42)
718 self.assertRaises(ValueError, min, ())
719 class BadSeq:
720 def __getitem__(self, index):
721 raise ValueError
722 self.assertRaises(ValueError, min, BadSeq())
723 class BadNumber:
724 def __cmp__(self, other):
725 raise ValueError
Guido van Rossum47b9ff62006-08-24 00:41:19 +0000726 self.assertRaises(TypeError, min, (42, BadNumber()))
Walter Dörwald919497e2003-01-19 16:23:59 +0000727
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +0000728 for stmt in (
729 "min(key=int)", # no args
730 "min(1, key=int)", # single arg not iterable
731 "min(1, 2, keystone=int)", # wrong keyword
732 "min(1, 2, key=int, abc=int)", # two many keywords
733 "min(1, 2, key=1)", # keyfunc is not callable
734 ):
Tim Peters7f061872004-12-07 21:17:46 +0000735 try:
Georg Brandl7cae87c2006-09-06 06:51:57 +0000736 exec(stmt, globals())
Tim Peters7f061872004-12-07 21:17:46 +0000737 except TypeError:
738 pass
739 else:
740 self.fail(stmt)
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +0000741
742 self.assertEqual(min((1,), key=neg), 1) # one elem iterable
743 self.assertEqual(min((1,2), key=neg), 2) # two elem iterable
744 self.assertEqual(min(1, 2, key=neg), 2) # two elems
745
746 data = [random.randrange(200) for i in range(100)]
747 keys = dict((elem, random.randrange(50)) for elem in data)
748 f = keys.__getitem__
749 self.assertEqual(min(data, key=f),
750 sorted(data, key=f)[0])
751
Georg Brandla18af4e2007-04-21 15:47:16 +0000752 def test_next(self):
753 it = iter(range(2))
754 self.assertEqual(next(it), 0)
755 self.assertEqual(next(it), 1)
756 self.assertRaises(StopIteration, next, it)
757 self.assertRaises(StopIteration, next, it)
758 self.assertEquals(next(it, 42), 42)
759
760 class Iter(object):
761 def __iter__(self):
762 return self
763 def __next__(self):
764 raise StopIteration
765
766 it = iter(Iter())
767 self.assertEquals(next(it, 42), 42)
768 self.assertRaises(StopIteration, next, it)
769
770 def gen():
771 yield 1
772 return
773
774 it = gen()
775 self.assertEquals(next(it), 1)
776 self.assertRaises(StopIteration, next, it)
777 self.assertEquals(next(it, 42), 42)
778
Walter Dörwald919497e2003-01-19 16:23:59 +0000779 def test_oct(self):
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000780 self.assertEqual(oct(100), '0o144')
781 self.assertEqual(oct(100), '0o144')
782 self.assertEqual(oct(-100), '-0o144')
783 self.assertEqual(oct(-100), '-0o144')
Walter Dörwald919497e2003-01-19 16:23:59 +0000784 self.assertRaises(TypeError, oct, ())
785
786 def write_testfile(self):
Guido van Rossuma88a0332007-02-26 16:59:55 +0000787 # NB the first 4 lines are also used to test input, below
Walter Dörwald919497e2003-01-19 16:23:59 +0000788 fp = open(TESTFN, 'w')
789 try:
790 fp.write('1+1\n')
791 fp.write('1+1\n')
792 fp.write('The quick brown fox jumps over the lazy dog')
793 fp.write('.\n')
794 fp.write('Dear John\n')
795 fp.write('XXX'*100)
796 fp.write('YYY'*100)
797 finally:
798 fp.close()
799
800 def test_open(self):
801 self.write_testfile()
802 fp = open(TESTFN, 'r')
803 try:
804 self.assertEqual(fp.readline(4), '1+1\n')
805 self.assertEqual(fp.readline(4), '1+1\n')
806 self.assertEqual(fp.readline(), 'The quick brown fox jumps over the lazy dog.\n')
807 self.assertEqual(fp.readline(4), 'Dear')
808 self.assertEqual(fp.readline(100), ' John\n')
809 self.assertEqual(fp.read(300), 'XXX'*100)
810 self.assertEqual(fp.read(1000), 'YYY'*100)
811 finally:
812 fp.close()
813 unlink(TESTFN)
814
815 def test_ord(self):
816 self.assertEqual(ord(' '), 32)
817 self.assertEqual(ord('A'), 65)
818 self.assertEqual(ord('a'), 97)
Guido van Rossumf9e91c92007-05-08 21:05:48 +0000819 self.assertEqual(ord('\x80'), 128)
820 self.assertEqual(ord('\xff'), 255)
821
822 self.assertEqual(ord(b' '), 32)
823 self.assertEqual(ord(b'A'), 65)
824 self.assertEqual(ord(b'a'), 97)
825 self.assertEqual(ord(b'\x80'), 128)
826 self.assertEqual(ord(b'\xff'), 255)
827
Walter Dörwald1f5947b2007-05-22 16:52:54 +0000828 self.assertEqual(ord(chr(sys.maxunicode)), sys.maxunicode)
Walter Dörwald919497e2003-01-19 16:23:59 +0000829 self.assertRaises(TypeError, ord, 42)
Walter Dörwald919497e2003-01-19 16:23:59 +0000830
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000831 self.assertEqual(ord(chr(0x10FFFF)), 0x10FFFF)
832 self.assertEqual(ord("\U0000FFFF"), 0x0000FFFF)
833 self.assertEqual(ord("\U00010000"), 0x00010000)
834 self.assertEqual(ord("\U00010001"), 0x00010001)
835 self.assertEqual(ord("\U000FFFFE"), 0x000FFFFE)
836 self.assertEqual(ord("\U000FFFFF"), 0x000FFFFF)
837 self.assertEqual(ord("\U00100000"), 0x00100000)
838 self.assertEqual(ord("\U00100001"), 0x00100001)
839 self.assertEqual(ord("\U0010FFFE"), 0x0010FFFE)
840 self.assertEqual(ord("\U0010FFFF"), 0x0010FFFF)
841
Walter Dörwald919497e2003-01-19 16:23:59 +0000842 def test_pow(self):
843 self.assertEqual(pow(0,0), 1)
844 self.assertEqual(pow(0,1), 0)
845 self.assertEqual(pow(1,0), 1)
846 self.assertEqual(pow(1,1), 1)
847
848 self.assertEqual(pow(2,0), 1)
849 self.assertEqual(pow(2,10), 1024)
850 self.assertEqual(pow(2,20), 1024*1024)
851 self.assertEqual(pow(2,30), 1024*1024*1024)
852
853 self.assertEqual(pow(-2,0), 1)
854 self.assertEqual(pow(-2,1), -2)
855 self.assertEqual(pow(-2,2), 4)
856 self.assertEqual(pow(-2,3), -8)
857
Guido van Rossume2a383d2007-01-15 16:59:06 +0000858 self.assertEqual(pow(0,0), 1)
859 self.assertEqual(pow(0,1), 0)
860 self.assertEqual(pow(1,0), 1)
861 self.assertEqual(pow(1,1), 1)
Walter Dörwald919497e2003-01-19 16:23:59 +0000862
Guido van Rossume2a383d2007-01-15 16:59:06 +0000863 self.assertEqual(pow(2,0), 1)
864 self.assertEqual(pow(2,10), 1024)
865 self.assertEqual(pow(2,20), 1024*1024)
866 self.assertEqual(pow(2,30), 1024*1024*1024)
Walter Dörwald919497e2003-01-19 16:23:59 +0000867
Guido van Rossume2a383d2007-01-15 16:59:06 +0000868 self.assertEqual(pow(-2,0), 1)
869 self.assertEqual(pow(-2,1), -2)
870 self.assertEqual(pow(-2,2), 4)
871 self.assertEqual(pow(-2,3), -8)
Walter Dörwald919497e2003-01-19 16:23:59 +0000872
873 self.assertAlmostEqual(pow(0.,0), 1.)
874 self.assertAlmostEqual(pow(0.,1), 0.)
875 self.assertAlmostEqual(pow(1.,0), 1.)
876 self.assertAlmostEqual(pow(1.,1), 1.)
877
878 self.assertAlmostEqual(pow(2.,0), 1.)
879 self.assertAlmostEqual(pow(2.,10), 1024.)
880 self.assertAlmostEqual(pow(2.,20), 1024.*1024.)
881 self.assertAlmostEqual(pow(2.,30), 1024.*1024.*1024.)
882
883 self.assertAlmostEqual(pow(-2.,0), 1.)
884 self.assertAlmostEqual(pow(-2.,1), -2.)
885 self.assertAlmostEqual(pow(-2.,2), 4.)
886 self.assertAlmostEqual(pow(-2.,3), -8.)
887
Guido van Rossume2a383d2007-01-15 16:59:06 +0000888 for x in 2, 2, 2.0:
889 for y in 10, 10, 10.0:
890 for z in 1000, 1000, 1000.0:
Walter Dörwald919497e2003-01-19 16:23:59 +0000891 if isinstance(x, float) or \
892 isinstance(y, float) or \
893 isinstance(z, float):
894 self.assertRaises(TypeError, pow, x, y, z)
895 else:
896 self.assertAlmostEqual(pow(x, y, z), 24.0)
897
Jeffrey Yasskin3404b3c2007-09-07 15:15:49 +0000898 self.assertAlmostEqual(pow(-1, 0.5), 1j)
899 self.assertAlmostEqual(pow(-1, 1/3), 0.5 + 0.8660254037844386j)
900
Walter Dörwald919497e2003-01-19 16:23:59 +0000901 self.assertRaises(TypeError, pow, -1, -2, 3)
902 self.assertRaises(ValueError, pow, 1, 2, 0)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000903 self.assertRaises(TypeError, pow, -1, -2, 3)
904 self.assertRaises(ValueError, pow, 1, 2, 0)
Walter Dörwald919497e2003-01-19 16:23:59 +0000905
906 self.assertRaises(TypeError, pow)
907
908 def test_range(self):
Guido van Rossum805365e2007-05-07 22:24:25 +0000909 self.assertEqual(list(range(3)), [0, 1, 2])
910 self.assertEqual(list(range(1, 5)), [1, 2, 3, 4])
911 self.assertEqual(list(range(0)), [])
912 self.assertEqual(list(range(-3)), [])
913 self.assertEqual(list(range(1, 10, 3)), [1, 4, 7])
914 #self.assertEqual(list(range(5, -5, -3)), [5, 2, -1, -4])
Walter Dörwald919497e2003-01-19 16:23:59 +0000915
Guido van Rossum805365e2007-05-07 22:24:25 +0000916 """ XXX(nnorwitz):
Guido van Rossumefbbb1c2003-04-11 18:43:06 +0000917 # Now test range() with longs
Guido van Rossum805365e2007-05-07 22:24:25 +0000918 self.assertEqual(list(range(-2**100)), [])
919 self.assertEqual(list(range(0, -2**100)), [])
920 self.assertEqual(list(range(0, 2**100, -1)), [])
921 self.assertEqual(list(range(0, 2**100, -1)), [])
Guido van Rossumefbbb1c2003-04-11 18:43:06 +0000922
Christian Heimesa37d4c62007-12-04 23:02:19 +0000923 a = int(10 * sys.maxsize)
924 b = int(100 * sys.maxsize)
925 c = int(50 * sys.maxsize)
Guido van Rossumefbbb1c2003-04-11 18:43:06 +0000926
Guido van Rossum805365e2007-05-07 22:24:25 +0000927 self.assertEqual(list(range(a, a+2)), [a, a+1])
928 self.assertEqual(list(range(a+2, a, -1)), [a+2, a+1])
929 self.assertEqual(list(range(a+4, a, -2)), [a+4, a+2])
Guido van Rossumefbbb1c2003-04-11 18:43:06 +0000930
Guido van Rossum805365e2007-05-07 22:24:25 +0000931 seq = list(range(a, b, c))
Guido van Rossumefbbb1c2003-04-11 18:43:06 +0000932 self.assert_(a in seq)
933 self.assert_(b not in seq)
934 self.assertEqual(len(seq), 2)
935
Guido van Rossum805365e2007-05-07 22:24:25 +0000936 seq = list(range(b, a, -c))
Guido van Rossumefbbb1c2003-04-11 18:43:06 +0000937 self.assert_(b in seq)
938 self.assert_(a not in seq)
939 self.assertEqual(len(seq), 2)
940
Guido van Rossum805365e2007-05-07 22:24:25 +0000941 seq = list(range(-a, -b, -c))
Guido van Rossumefbbb1c2003-04-11 18:43:06 +0000942 self.assert_(-a in seq)
943 self.assert_(-b not in seq)
944 self.assertEqual(len(seq), 2)
945
Walter Dörwald919497e2003-01-19 16:23:59 +0000946 self.assertRaises(TypeError, range)
947 self.assertRaises(TypeError, range, 1, 2, 3, 4)
948 self.assertRaises(ValueError, range, 1, 2, 0)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000949 self.assertRaises(ValueError, range, a, a + 1, int(0))
Neal Norwitzfcf44352005-11-27 20:37:43 +0000950
951 class badzero(int):
Guido van Rossum47b9ff62006-08-24 00:41:19 +0000952 def __eq__(self, other):
Neal Norwitzfcf44352005-11-27 20:37:43 +0000953 raise RuntimeError
Guido van Rossum47b9ff62006-08-24 00:41:19 +0000954 __ne__ = __lt__ = __gt__ = __le__ = __ge__ = __eq__
955
956 # XXX This won't (but should!) raise RuntimeError if a is an int...
Neal Norwitzfcf44352005-11-27 20:37:43 +0000957 self.assertRaises(RuntimeError, range, a, a + 1, badzero(1))
Guido van Rossum805365e2007-05-07 22:24:25 +0000958 """
Walter Dörwald919497e2003-01-19 16:23:59 +0000959
Guido van Rossumefbbb1c2003-04-11 18:43:06 +0000960 # Reject floats when it would require PyLongs to represent.
961 # (smaller floats still accepted, but deprecated)
Tim Peters299b3df2003-04-15 14:40:03 +0000962 self.assertRaises(TypeError, range, 1e100, 1e101, 1e101)
Guido van Rossumefbbb1c2003-04-11 18:43:06 +0000963
Walter Dörwald357981e2003-04-15 18:59:28 +0000964 self.assertRaises(TypeError, range, 0, "spam")
965 self.assertRaises(TypeError, range, 0, 42, "spam")
966
Christian Heimesa37d4c62007-12-04 23:02:19 +0000967 #NEAL self.assertRaises(OverflowError, range, -sys.maxsize, sys.maxsize)
968 #NEAL self.assertRaises(OverflowError, range, 0, 2*sys.maxsize)
Guido van Rossum805365e2007-05-07 22:24:25 +0000969
Christian Heimesa37d4c62007-12-04 23:02:19 +0000970 self.assertRaises(OverflowError, len, range(0, sys.maxsize**10))
Walter Dörwald357981e2003-04-15 18:59:28 +0000971
Guido van Rossuma88a0332007-02-26 16:59:55 +0000972 def test_input(self):
973 self.write_testfile()
974 fp = open(TESTFN, 'r')
975 savestdin = sys.stdin
976 savestdout = sys.stdout # Eats the echo
977 try:
978 sys.stdin = fp
979 sys.stdout = BitBucket()
980 self.assertEqual(input(), "1+1")
981 self.assertEqual(input('testing\n'), "1+1")
982 self.assertEqual(input(), 'The quick brown fox jumps over the lazy dog.')
983 self.assertEqual(input('testing\n'), 'Dear John')
984
985 # SF 1535165: don't segfault on closed stdin
986 # sys.stdout must be a regular file for triggering
987 sys.stdout = savestdout
988 sys.stdin.close()
989 self.assertRaises(ValueError, input)
990
991 sys.stdout = BitBucket()
Guido van Rossum34d19282007-08-09 01:03:29 +0000992 sys.stdin = io.StringIO("NULL\0")
Guido van Rossuma88a0332007-02-26 16:59:55 +0000993 self.assertRaises(TypeError, input, 42, 42)
Guido van Rossum34d19282007-08-09 01:03:29 +0000994 sys.stdin = io.StringIO(" 'whitespace'")
Guido van Rossuma88a0332007-02-26 16:59:55 +0000995 self.assertEqual(input(), " 'whitespace'")
Guido van Rossum34d19282007-08-09 01:03:29 +0000996 sys.stdin = io.StringIO()
Guido van Rossuma88a0332007-02-26 16:59:55 +0000997 self.assertRaises(EOFError, input)
998
999 del sys.stdout
1000 self.assertRaises(RuntimeError, input, 'prompt')
1001 del sys.stdin
1002 self.assertRaises(RuntimeError, input, 'prompt')
1003 finally:
1004 sys.stdin = savestdin
1005 sys.stdout = savestdout
1006 fp.close()
1007 unlink(TESTFN)
1008
Walter Dörwald919497e2003-01-19 16:23:59 +00001009 def test_repr(self):
1010 self.assertEqual(repr(''), '\'\'')
1011 self.assertEqual(repr(0), '0')
Guido van Rossume2a383d2007-01-15 16:59:06 +00001012 self.assertEqual(repr(0), '0')
Walter Dörwald919497e2003-01-19 16:23:59 +00001013 self.assertEqual(repr(()), '()')
1014 self.assertEqual(repr([]), '[]')
1015 self.assertEqual(repr({}), '{}')
1016 a = []
1017 a.append(a)
1018 self.assertEqual(repr(a), '[[...]]')
1019 a = {}
1020 a[0] = a
1021 self.assertEqual(repr(a), '{0: {...}}')
1022
1023 def test_round(self):
1024 self.assertEqual(round(0.0), 0.0)
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001025 self.assertEqual(type(round(0.0)), int)
Walter Dörwald919497e2003-01-19 16:23:59 +00001026 self.assertEqual(round(1.0), 1.0)
1027 self.assertEqual(round(10.0), 10.0)
1028 self.assertEqual(round(1000000000.0), 1000000000.0)
1029 self.assertEqual(round(1e20), 1e20)
1030
1031 self.assertEqual(round(-1.0), -1.0)
1032 self.assertEqual(round(-10.0), -10.0)
1033 self.assertEqual(round(-1000000000.0), -1000000000.0)
1034 self.assertEqual(round(-1e20), -1e20)
1035
1036 self.assertEqual(round(0.1), 0.0)
1037 self.assertEqual(round(1.1), 1.0)
1038 self.assertEqual(round(10.1), 10.0)
1039 self.assertEqual(round(1000000000.1), 1000000000.0)
1040
1041 self.assertEqual(round(-1.1), -1.0)
1042 self.assertEqual(round(-10.1), -10.0)
1043 self.assertEqual(round(-1000000000.1), -1000000000.0)
1044
1045 self.assertEqual(round(0.9), 1.0)
1046 self.assertEqual(round(9.9), 10.0)
1047 self.assertEqual(round(999999999.9), 1000000000.0)
1048
1049 self.assertEqual(round(-0.9), -1.0)
1050 self.assertEqual(round(-9.9), -10.0)
1051 self.assertEqual(round(-999999999.9), -1000000000.0)
1052
1053 self.assertEqual(round(-8.0, -1), -10.0)
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001054 self.assertEqual(type(round(-8.0, -1)), float)
1055
1056 self.assertEqual(type(round(-8.0, 0)), float)
1057 self.assertEqual(type(round(-8.0, 1)), float)
1058
1059 # Check even / odd rounding behaviour
1060 self.assertEqual(round(5.5), 6)
1061 self.assertEqual(round(6.5), 6)
1062 self.assertEqual(round(-5.5), -6)
1063 self.assertEqual(round(-6.5), -6)
1064
1065 # Check behavior on ints
1066 self.assertEqual(round(0), 0)
1067 self.assertEqual(round(8), 8)
1068 self.assertEqual(round(-8), -8)
1069 self.assertEqual(type(round(0)), int)
1070 self.assertEqual(type(round(-8, -1)), float)
1071 self.assertEqual(type(round(-8, 0)), float)
1072 self.assertEqual(type(round(-8, 1)), float)
Walter Dörwald919497e2003-01-19 16:23:59 +00001073
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001074 # test new kwargs
1075 self.assertEqual(round(number=-8.0, ndigits=-1), -10.0)
1076
Walter Dörwald919497e2003-01-19 16:23:59 +00001077 self.assertRaises(TypeError, round)
1078
Alex Martelliae211f92007-08-22 23:21:33 +00001079 # test generic rounding delegation for reals
1080 class TestRound:
1081 def __round__(self):
1082 return 23
1083
1084 class TestNoRound:
1085 pass
1086
1087 self.assertEqual(round(TestRound()), 23)
1088
1089 self.assertRaises(TypeError, round, 1, 2, 3)
1090 self.assertRaises(TypeError, round, TestNoRound())
1091
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001092 t = TestNoRound()
1093 t.__round__ = lambda *args: args
1094 self.assertRaises(TypeError, round, t)
1095 self.assertRaises(TypeError, round, t, 0)
1096
Walter Dörwald919497e2003-01-19 16:23:59 +00001097 def test_setattr(self):
Tim Petersf2715e02003-02-19 02:35:07 +00001098 setattr(sys, 'spam', 1)
1099 self.assertEqual(sys.spam, 1)
1100 self.assertRaises(TypeError, setattr, sys, 1, 'spam')
1101 self.assertRaises(TypeError, setattr)
Walter Dörwald919497e2003-01-19 16:23:59 +00001102
Walter Dörwald919497e2003-01-19 16:23:59 +00001103
Alex Martellia70b1912003-04-22 08:12:33 +00001104 def test_sum(self):
1105 self.assertEqual(sum([]), 0)
Guido van Rossum805365e2007-05-07 22:24:25 +00001106 self.assertEqual(sum(list(range(2,8))), 27)
1107 self.assertEqual(sum(iter(list(range(2,8)))), 27)
Alex Martellia70b1912003-04-22 08:12:33 +00001108 self.assertEqual(sum(Squares(10)), 285)
1109 self.assertEqual(sum(iter(Squares(10))), 285)
1110 self.assertEqual(sum([[1], [2], [3]], []), [1, 2, 3])
1111
1112 self.assertRaises(TypeError, sum)
1113 self.assertRaises(TypeError, sum, 42)
1114 self.assertRaises(TypeError, sum, ['a', 'b', 'c'])
1115 self.assertRaises(TypeError, sum, ['a', 'b', 'c'], '')
1116 self.assertRaises(TypeError, sum, [[1], [2], [3]])
1117 self.assertRaises(TypeError, sum, [{2:3}])
1118 self.assertRaises(TypeError, sum, [{2:3}]*2, {2:3})
1119
1120 class BadSeq:
1121 def __getitem__(self, index):
1122 raise ValueError
1123 self.assertRaises(ValueError, sum, BadSeq())
1124
Walter Dörwald919497e2003-01-19 16:23:59 +00001125 def test_type(self):
1126 self.assertEqual(type(''), type('123'))
1127 self.assertNotEqual(type(''), type(()))
1128
Guido van Rossumfee7b932005-01-16 00:21:28 +00001129 # We don't want self in vars(), so these are static methods
1130
1131 @staticmethod
Walter Dörwald919497e2003-01-19 16:23:59 +00001132 def get_vars_f0():
1133 return vars()
Walter Dörwald919497e2003-01-19 16:23:59 +00001134
Guido van Rossumfee7b932005-01-16 00:21:28 +00001135 @staticmethod
Walter Dörwald919497e2003-01-19 16:23:59 +00001136 def get_vars_f2():
1137 BuiltinTest.get_vars_f0()
1138 a = 1
1139 b = 2
1140 return vars()
Walter Dörwald919497e2003-01-19 16:23:59 +00001141
1142 def test_vars(self):
Raymond Hettingera690a992003-11-16 16:17:49 +00001143 self.assertEqual(set(vars()), set(dir()))
Walter Dörwald919497e2003-01-19 16:23:59 +00001144 import sys
Raymond Hettingera690a992003-11-16 16:17:49 +00001145 self.assertEqual(set(vars(sys)), set(dir(sys)))
Walter Dörwald919497e2003-01-19 16:23:59 +00001146 self.assertEqual(self.get_vars_f0(), {})
1147 self.assertEqual(self.get_vars_f2(), {'a': 1, 'b': 2})
1148 self.assertRaises(TypeError, vars, 42, 42)
1149 self.assertRaises(TypeError, vars, 42)
1150
1151 def test_zip(self):
1152 a = (1, 2, 3)
1153 b = (4, 5, 6)
1154 t = [(1, 4), (2, 5), (3, 6)]
Guido van Rossum801f0d72006-08-24 19:48:10 +00001155 self.assertEqual(list(zip(a, b)), t)
Walter Dörwald919497e2003-01-19 16:23:59 +00001156 b = [4, 5, 6]
Guido van Rossum801f0d72006-08-24 19:48:10 +00001157 self.assertEqual(list(zip(a, b)), t)
Walter Dörwald919497e2003-01-19 16:23:59 +00001158 b = (4, 5, 6, 7)
Guido van Rossum801f0d72006-08-24 19:48:10 +00001159 self.assertEqual(list(zip(a, b)), t)
Walter Dörwald919497e2003-01-19 16:23:59 +00001160 class I:
1161 def __getitem__(self, i):
1162 if i < 0 or i > 2: raise IndexError
1163 return i + 4
Guido van Rossum801f0d72006-08-24 19:48:10 +00001164 self.assertEqual(list(zip(a, I())), t)
1165 self.assertEqual(list(zip()), [])
1166 self.assertEqual(list(zip(*[])), [])
Walter Dörwald919497e2003-01-19 16:23:59 +00001167 self.assertRaises(TypeError, zip, None)
1168 class G:
1169 pass
1170 self.assertRaises(TypeError, zip, a, G())
1171
1172 # Make sure zip doesn't try to allocate a billion elements for the
1173 # result list when one of its arguments doesn't say how long it is.
1174 # A MemoryError is the most likely failure mode.
1175 class SequenceWithoutALength:
1176 def __getitem__(self, i):
1177 if i == 5:
1178 raise IndexError
1179 else:
1180 return i
1181 self.assertEqual(
Guido van Rossum805365e2007-05-07 22:24:25 +00001182 list(zip(SequenceWithoutALength(), range(2**30))),
Walter Dörwald919497e2003-01-19 16:23:59 +00001183 list(enumerate(range(5)))
1184 )
1185
1186 class BadSeq:
1187 def __getitem__(self, i):
1188 if i == 5:
1189 raise ValueError
1190 else:
1191 return i
Guido van Rossum801f0d72006-08-24 19:48:10 +00001192 self.assertRaises(ValueError, list, zip(BadSeq(), BadSeq()))
Walter Dörwald919497e2003-01-19 16:23:59 +00001193
Christian Heimes90c3d9b2008-02-23 13:18:03 +00001194 def test_bin(self):
1195 self.assertEqual(bin(0), '0b0')
1196 self.assertEqual(bin(1), '0b1')
1197 self.assertEqual(bin(-1), '-0b1')
1198 self.assertEqual(bin(2**65), '0b1' + '0' * 65)
1199 self.assertEqual(bin(2**65-1), '0b' + '1' * 65)
1200 self.assertEqual(bin(-(2**65)), '-0b1' + '0' * 65)
1201 self.assertEqual(bin(-(2**65-1)), '-0b' + '1' * 65)
1202
Raymond Hettinger64958a12003-12-17 20:43:33 +00001203class TestSorted(unittest.TestCase):
1204
1205 def test_basic(self):
Guido van Rossum805365e2007-05-07 22:24:25 +00001206 data = list(range(100))
Raymond Hettinger64958a12003-12-17 20:43:33 +00001207 copy = data[:]
1208 random.shuffle(copy)
1209 self.assertEqual(data, sorted(copy))
1210 self.assertNotEqual(data, copy)
1211
1212 data.reverse()
1213 random.shuffle(copy)
Raymond Hettinger64958a12003-12-17 20:43:33 +00001214 self.assertEqual(data, sorted(copy, key=lambda x: -x))
1215 self.assertNotEqual(data, copy)
1216 random.shuffle(copy)
1217 self.assertEqual(data, sorted(copy, reverse=1))
1218 self.assertNotEqual(data, copy)
1219
1220 def test_inputtypes(self):
1221 s = 'abracadabra'
Walter Dörwald1f5947b2007-05-22 16:52:54 +00001222 types = [list, tuple, str]
Walter Dörwald4e41a4b2005-08-03 17:09:04 +00001223 for T in types:
Raymond Hettinger64958a12003-12-17 20:43:33 +00001224 self.assertEqual(sorted(s), sorted(T(s)))
1225
Walter Dörwald1f5947b2007-05-22 16:52:54 +00001226 s = ''.join(set(s)) # unique letters only
1227 types = [str, set, frozenset, list, tuple, dict.fromkeys]
Walter Dörwald4e41a4b2005-08-03 17:09:04 +00001228 for T in types:
Raymond Hettinger64958a12003-12-17 20:43:33 +00001229 self.assertEqual(sorted(s), sorted(T(s)))
1230
1231 def test_baddecorator(self):
1232 data = 'The quick Brown fox Jumped over The lazy Dog'.split()
1233 self.assertRaises(TypeError, sorted, data, None, lambda x,y: 0)
1234
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001235def test_main(verbose=None):
1236 test_classes = (BuiltinTest, TestSorted)
1237
1238 run_unittest(*test_classes)
1239
1240 # verify reference counting
1241 if verbose and hasattr(sys, "gettotalrefcount"):
1242 import gc
1243 counts = [None] * 5
Guido van Rossum805365e2007-05-07 22:24:25 +00001244 for i in range(len(counts)):
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001245 run_unittest(*test_classes)
1246 gc.collect()
1247 counts[i] = sys.gettotalrefcount()
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001248 print(counts)
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001249
Walter Dörwald919497e2003-01-19 16:23:59 +00001250
1251if __name__ == "__main__":
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001252 test_main(verbose=True)