blob: c078b443c5b5850bf0b919bb3c59413217fa8ad4 [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
Victor Stinnerf86a5e82012-06-05 13:43:22 +02003import ast
4import builtins
Benjamin Peterson076e0312010-08-23 21:58:59 +00005import collections
6import io
Victor Stinnerf86a5e82012-06-05 13:43:22 +02007import locale
Antoine Pitrou0d776b12011-11-06 00:34:26 +01008import os
Kristján Valur Jónsson31668b82012-04-03 10:49:41 +00009import pickle
Victor Stinnerf86a5e82012-06-05 13:43:22 +020010import platform
11import random
12import sys
13import traceback
14import types
15import unittest
16import warnings
17from operator import neg
18from test.support import TESTFN, unlink, run_unittest, check_warnings
Serhiy Storchaka013bb912014-02-10 18:21:34 +020019from test.script_helper import assert_python_ok
Antoine Pitrou0d776b12011-11-06 00:34:26 +010020try:
Antoine Pitrou772add72011-11-06 02:37:42 +010021 import pty, signal
Antoine Pitrou0d776b12011-11-06 00:34:26 +010022except ImportError:
Antoine Pitrou772add72011-11-06 02:37:42 +010023 pty = signal = None
Guido van Rossum3bead091992-01-27 17:00:37 +000024
Guido van Rossum3bead091992-01-27 17:00:37 +000025
Walter Dörwald919497e2003-01-19 16:23:59 +000026class Squares:
Guido van Rossum3bead091992-01-27 17:00:37 +000027
Walter Dörwald919497e2003-01-19 16:23:59 +000028 def __init__(self, max):
29 self.max = max
30 self.sofar = []
31
32 def __len__(self): return len(self.sofar)
33
34 def __getitem__(self, i):
35 if not 0 <= i < self.max: raise IndexError
36 n = len(self.sofar)
37 while n <= i:
38 self.sofar.append(n*n)
39 n += 1
40 return self.sofar[i]
41
42class StrSquares:
43
44 def __init__(self, max):
45 self.max = max
46 self.sofar = []
47
48 def __len__(self):
49 return len(self.sofar)
50
51 def __getitem__(self, i):
52 if not 0 <= i < self.max:
53 raise IndexError
54 n = len(self.sofar)
55 while n <= i:
56 self.sofar.append(str(n*n))
57 n += 1
58 return self.sofar[i]
59
60class BitBucket:
61 def write(self, line):
62 pass
63
Facundo Batista2336bdd2008-01-19 19:12:01 +000064test_conv_no_sign = [
Walter Dörwald919497e2003-01-19 16:23:59 +000065 ('0', 0),
66 ('1', 1),
67 ('9', 9),
68 ('10', 10),
69 ('99', 99),
70 ('100', 100),
71 ('314', 314),
72 (' 314', 314),
73 ('314 ', 314),
74 (' \t\t 314 \t\t ', 314),
Christian Heimesa37d4c62007-12-04 23:02:19 +000075 (repr(sys.maxsize), sys.maxsize),
Walter Dörwald919497e2003-01-19 16:23:59 +000076 (' 1x', ValueError),
77 (' 1 ', 1),
78 (' 1\02 ', ValueError),
79 ('', ValueError),
80 (' ', ValueError),
Walter Dörwald1f5947b2007-05-22 16:52:54 +000081 (' \t\t ', ValueError),
Guido van Rossumef87d6e2007-05-02 19:09:54 +000082 (str(b'\u0663\u0661\u0664 ','raw-unicode-escape'), 314),
Guido van Rossum84fc66d2007-05-03 17:18:26 +000083 (chr(0x200), ValueError),
Walter Dörwald919497e2003-01-19 16:23:59 +000084]
85
Facundo Batista2336bdd2008-01-19 19:12:01 +000086test_conv_sign = [
87 ('0', 0),
88 ('1', 1),
89 ('9', 9),
90 ('10', 10),
91 ('99', 99),
92 ('100', 100),
93 ('314', 314),
94 (' 314', ValueError),
95 ('314 ', 314),
96 (' \t\t 314 \t\t ', ValueError),
97 (repr(sys.maxsize), sys.maxsize),
98 (' 1x', ValueError),
99 (' 1 ', ValueError),
100 (' 1\02 ', ValueError),
101 ('', ValueError),
102 (' ', ValueError),
103 (' \t\t ', ValueError),
104 (str(b'\u0663\u0661\u0664 ','raw-unicode-escape'), 314),
105 (chr(0x200), ValueError),
106]
107
Raymond Hettinger96229b12005-03-11 06:49:40 +0000108class TestFailingBool:
Jack Diederich4dafcc42006-11-28 19:15:13 +0000109 def __bool__(self):
Raymond Hettinger96229b12005-03-11 06:49:40 +0000110 raise RuntimeError
111
112class TestFailingIter:
113 def __iter__(self):
114 raise RuntimeError
115
Kristján Valur Jónsson31668b82012-04-03 10:49:41 +0000116def filter_char(arg):
117 return ord(arg) > ord("d")
118
119def map_char(arg):
120 return chr(ord(arg)+1)
121
Walter Dörwald919497e2003-01-19 16:23:59 +0000122class BuiltinTest(unittest.TestCase):
Kristján Valur Jónsson31668b82012-04-03 10:49:41 +0000123 # Helper to check picklability
124 def check_iter_pickle(self, it, seq):
125 itorg = it
126 d = pickle.dumps(it)
127 it = pickle.loads(d)
128 self.assertEqual(type(itorg), type(it))
129 self.assertEqual(list(it), seq)
130
131 #test the iterator after dropping one from it
132 it = pickle.loads(d)
133 try:
134 next(it)
135 except StopIteration:
136 return
137 d = pickle.dumps(it)
138 it = pickle.loads(d)
139 self.assertEqual(list(it), seq[1:])
Walter Dörwald919497e2003-01-19 16:23:59 +0000140
141 def test_import(self):
142 __import__('sys')
143 __import__('time')
144 __import__('string')
Guido van Rossumd8faa362007-04-27 19:54:29 +0000145 __import__(name='sys')
146 __import__(name='time', level=0)
Walter Dörwald919497e2003-01-19 16:23:59 +0000147 self.assertRaises(ImportError, __import__, 'spamspam')
148 self.assertRaises(TypeError, __import__, 1, 2, 3, 4)
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000149 self.assertRaises(ValueError, __import__, '')
Guido van Rossumd8faa362007-04-27 19:54:29 +0000150 self.assertRaises(TypeError, __import__, 'sys', name='sys')
Walter Dörwald919497e2003-01-19 16:23:59 +0000151
152 def test_abs(self):
153 # int
154 self.assertEqual(abs(0), 0)
155 self.assertEqual(abs(1234), 1234)
156 self.assertEqual(abs(-1234), 1234)
Christian Heimesa37d4c62007-12-04 23:02:19 +0000157 self.assertTrue(abs(-sys.maxsize-1) > 0)
Walter Dörwald919497e2003-01-19 16:23:59 +0000158 # float
159 self.assertEqual(abs(0.0), 0.0)
160 self.assertEqual(abs(3.14), 3.14)
161 self.assertEqual(abs(-3.14), 3.14)
Walter Dörwald919497e2003-01-19 16:23:59 +0000162 # str
163 self.assertRaises(TypeError, abs, 'a')
Mark Dickinsonfb3dc942010-05-25 19:06:24 +0000164 # bool
165 self.assertEqual(abs(True), 1)
166 self.assertEqual(abs(False), 0)
167 # other
168 self.assertRaises(TypeError, abs)
169 self.assertRaises(TypeError, abs, None)
170 class AbsClass(object):
171 def __abs__(self):
172 return -5
173 self.assertEqual(abs(AbsClass()), -5)
Walter Dörwald919497e2003-01-19 16:23:59 +0000174
Raymond Hettinger96229b12005-03-11 06:49:40 +0000175 def test_all(self):
176 self.assertEqual(all([2, 4, 6]), True)
177 self.assertEqual(all([2, None, 6]), False)
178 self.assertRaises(RuntimeError, all, [2, TestFailingBool(), 6])
179 self.assertRaises(RuntimeError, all, TestFailingIter())
180 self.assertRaises(TypeError, all, 10) # Non-iterable
181 self.assertRaises(TypeError, all) # No args
182 self.assertRaises(TypeError, all, [2, 4, 6], []) # Too many args
183 self.assertEqual(all([]), True) # Empty iterator
Ezio Melotti0f4377c2013-02-21 23:15:40 +0200184 self.assertEqual(all([0, TestFailingBool()]), False)# Short-circuit
Raymond Hettinger96229b12005-03-11 06:49:40 +0000185 S = [50, 60]
186 self.assertEqual(all(x > 42 for x in S), True)
187 S = [50, 40, 60]
188 self.assertEqual(all(x > 42 for x in S), False)
189
190 def test_any(self):
191 self.assertEqual(any([None, None, None]), False)
192 self.assertEqual(any([None, 4, None]), True)
193 self.assertRaises(RuntimeError, any, [None, TestFailingBool(), 6])
R David Murray1acaf0b2013-02-06 09:56:19 -0500194 self.assertRaises(RuntimeError, any, TestFailingIter())
Raymond Hettinger96229b12005-03-11 06:49:40 +0000195 self.assertRaises(TypeError, any, 10) # Non-iterable
196 self.assertRaises(TypeError, any) # No args
197 self.assertRaises(TypeError, any, [2, 4, 6], []) # Too many args
198 self.assertEqual(any([]), False) # Empty iterator
Ezio Melotti0f4377c2013-02-21 23:15:40 +0200199 self.assertEqual(any([1, TestFailingBool()]), True) # Short-circuit
Raymond Hettinger96229b12005-03-11 06:49:40 +0000200 S = [40, 60, 30]
201 self.assertEqual(any(x > 42 for x in S), True)
202 S = [10, 20, 30]
203 self.assertEqual(any(x > 42 for x in S), False)
204
Georg Brandl559e5d72008-06-11 18:37:52 +0000205 def test_ascii(self):
206 self.assertEqual(ascii(''), '\'\'')
207 self.assertEqual(ascii(0), '0')
Georg Brandl559e5d72008-06-11 18:37:52 +0000208 self.assertEqual(ascii(()), '()')
209 self.assertEqual(ascii([]), '[]')
210 self.assertEqual(ascii({}), '{}')
211 a = []
212 a.append(a)
213 self.assertEqual(ascii(a), '[[...]]')
214 a = {}
215 a[0] = a
216 self.assertEqual(ascii(a), '{0: {...}}')
Antoine Pitroue4a18922010-09-09 20:30:23 +0000217 # Advanced checks for unicode strings
218 def _check_uni(s):
219 self.assertEqual(ascii(s), repr(s))
220 _check_uni("'")
221 _check_uni('"')
222 _check_uni('"\'')
223 _check_uni('\0')
224 _check_uni('\r\n\t .')
225 # Unprintable non-ASCII characters
226 _check_uni('\x85')
227 _check_uni('\u1fff')
228 _check_uni('\U00012fff')
229 # Lone surrogates
230 _check_uni('\ud800')
231 _check_uni('\udfff')
232 # Issue #9804: surrogates should be joined even for printable
233 # wide characters (UCS-2 builds).
234 self.assertEqual(ascii('\U0001d121'), "'\\U0001d121'")
235 # All together
236 s = "'\0\"\n\r\t abcd\x85é\U00012fff\uD800\U0001D121xxx."
237 self.assertEqual(ascii(s),
238 r"""'\'\x00"\n\r\t abcd\x85\xe9\U00012fff\ud800\U0001d121xxx.'""")
Georg Brandl559e5d72008-06-11 18:37:52 +0000239
Thomas Wouters89f507f2006-12-13 04:49:30 +0000240 def test_neg(self):
Christian Heimesa37d4c62007-12-04 23:02:19 +0000241 x = -sys.maxsize-1
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000242 self.assertTrue(isinstance(x, int))
Christian Heimesa37d4c62007-12-04 23:02:19 +0000243 self.assertEqual(-x, sys.maxsize+1)
Thomas Wouters89f507f2006-12-13 04:49:30 +0000244
Walter Dörwald919497e2003-01-19 16:23:59 +0000245 def test_callable(self):
Antoine Pitroue71362d2010-11-27 22:00:11 +0000246 self.assertTrue(callable(len))
247 self.assertFalse(callable("a"))
248 self.assertTrue(callable(callable))
249 self.assertTrue(callable(lambda x, y: x + y))
250 self.assertFalse(callable(__builtins__))
Walter Dörwald919497e2003-01-19 16:23:59 +0000251 def f(): pass
Antoine Pitroue71362d2010-11-27 22:00:11 +0000252 self.assertTrue(callable(f))
253
254 class C1:
Walter Dörwald919497e2003-01-19 16:23:59 +0000255 def meth(self): pass
Antoine Pitroue71362d2010-11-27 22:00:11 +0000256 self.assertTrue(callable(C1))
257 c = C1()
258 self.assertTrue(callable(c.meth))
259 self.assertFalse(callable(c))
260
261 # __call__ is looked up on the class, not the instance
262 c.__call__ = None
263 self.assertFalse(callable(c))
264 c.__call__ = lambda self: 0
265 self.assertFalse(callable(c))
266 del c.__call__
267 self.assertFalse(callable(c))
268
269 class C2(object):
Walter Dörwald919497e2003-01-19 16:23:59 +0000270 def __call__(self): pass
Antoine Pitroue71362d2010-11-27 22:00:11 +0000271 c2 = C2()
272 self.assertTrue(callable(c2))
273 c2.__call__ = None
274 self.assertTrue(callable(c2))
275 class C3(C2): pass
276 c3 = C3()
277 self.assertTrue(callable(c3))
Walter Dörwald919497e2003-01-19 16:23:59 +0000278
279 def test_chr(self):
280 self.assertEqual(chr(32), ' ')
281 self.assertEqual(chr(65), 'A')
282 self.assertEqual(chr(97), 'a')
283 self.assertEqual(chr(0xff), '\xff')
Guido van Rossum572dbf82007-04-27 23:53:51 +0000284 self.assertRaises(ValueError, chr, 1<<24)
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000285 self.assertEqual(chr(sys.maxunicode),
Ezio Melottia9860ae2011-10-04 19:06:00 +0300286 str('\\U0010ffff'.encode("ascii"), 'unicode-escape'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000287 self.assertRaises(TypeError, chr)
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000288 self.assertEqual(chr(0x0000FFFF), "\U0000FFFF")
289 self.assertEqual(chr(0x00010000), "\U00010000")
290 self.assertEqual(chr(0x00010001), "\U00010001")
291 self.assertEqual(chr(0x000FFFFE), "\U000FFFFE")
292 self.assertEqual(chr(0x000FFFFF), "\U000FFFFF")
293 self.assertEqual(chr(0x00100000), "\U00100000")
294 self.assertEqual(chr(0x00100001), "\U00100001")
295 self.assertEqual(chr(0x0010FFFE), "\U0010FFFE")
296 self.assertEqual(chr(0x0010FFFF), "\U0010FFFF")
297 self.assertRaises(ValueError, chr, -1)
298 self.assertRaises(ValueError, chr, 0x00110000)
Amaury Forgeot d'Arc7888d082008-08-01 01:06:32 +0000299 self.assertRaises((OverflowError, ValueError), chr, 2**32)
Walter Dörwald919497e2003-01-19 16:23:59 +0000300
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000301 def test_cmp(self):
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000302 self.assertTrue(not hasattr(builtins, "cmp"))
Walter Dörwald919497e2003-01-19 16:23:59 +0000303
Walter Dörwald919497e2003-01-19 16:23:59 +0000304 def test_compile(self):
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000305 compile('print(1)\n', '', 'exec')
Amaury Forgeot d'Arcaf593462007-11-22 20:53:01 +0000306 bom = b'\xef\xbb\xbf'
307 compile(bom + b'print(1)\n', '', 'exec')
Guido van Rossumd8faa362007-04-27 19:54:29 +0000308 compile(source='pass', filename='?', mode='exec')
309 compile(dont_inherit=0, filename='tmp', source='0', mode='eval')
310 compile('pass', '?', dont_inherit=1, mode='exec')
Benjamin Peterson60320cb2008-09-26 21:49:22 +0000311 compile(memoryview(b"text"), "name", "exec")
Walter Dörwald919497e2003-01-19 16:23:59 +0000312 self.assertRaises(TypeError, compile)
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000313 self.assertRaises(ValueError, compile, 'print(42)\n', '<string>', 'badmode')
314 self.assertRaises(ValueError, compile, 'print(42)\n', '<string>', 'single', 0xff)
Neal Norwitzfcf44352005-11-27 20:37:43 +0000315 self.assertRaises(TypeError, compile, chr(0), 'f', 'exec')
Guido van Rossumd8faa362007-04-27 19:54:29 +0000316 self.assertRaises(TypeError, compile, 'pass', '?', 'exec',
317 mode='eval', source='0', filename='tmp')
Walter Dörwald1f5947b2007-05-22 16:52:54 +0000318 compile('print("\xe5")\n', '', 'exec')
319 self.assertRaises(TypeError, compile, chr(0), 'f', 'exec')
320 self.assertRaises(ValueError, compile, str('a = 1'), 'f', 'bad')
Guido van Rossumd8faa362007-04-27 19:54:29 +0000321
Georg Brandl8334fd92010-12-04 10:26:46 +0000322 # test the optimize argument
323
324 codestr = '''def f():
325 """doc"""
326 try:
327 assert False
328 except AssertionError:
329 return (True, f.__doc__)
330 else:
331 return (False, f.__doc__)
332 '''
333 def f(): """doc"""
334 values = [(-1, __debug__, f.__doc__),
335 (0, True, 'doc'),
336 (1, False, 'doc'),
337 (2, False, None)]
338 for optval, debugval, docstring in values:
339 # test both direct compilation and compilation via AST
340 codeobjs = []
341 codeobjs.append(compile(codestr, "<test>", "exec", optimize=optval))
342 tree = ast.parse(codestr)
343 codeobjs.append(compile(tree, "<test>", "exec", optimize=optval))
344 for code in codeobjs:
345 ns = {}
346 exec(code, ns)
347 rv = ns['f']()
348 self.assertEqual(rv, (debugval, docstring))
349
Walter Dörwald919497e2003-01-19 16:23:59 +0000350 def test_delattr(self):
Walter Dörwald919497e2003-01-19 16:23:59 +0000351 sys.spam = 1
352 delattr(sys, 'spam')
353 self.assertRaises(TypeError, delattr)
354
355 def test_dir(self):
Georg Brandle32b4222007-03-10 22:13:27 +0000356 # dir(wrong number of arguments)
Walter Dörwald919497e2003-01-19 16:23:59 +0000357 self.assertRaises(TypeError, dir, 42, 42)
358
Georg Brandle32b4222007-03-10 22:13:27 +0000359 # dir() - local scope
360 local_var = 1
Benjamin Peterson577473f2010-01-19 00:09:57 +0000361 self.assertIn('local_var', dir())
Georg Brandle32b4222007-03-10 22:13:27 +0000362
363 # dir(module)
Benjamin Peterson577473f2010-01-19 00:09:57 +0000364 self.assertIn('exit', dir(sys))
Georg Brandle32b4222007-03-10 22:13:27 +0000365
366 # dir(module_with_invalid__dict__)
Georg Brandle32b4222007-03-10 22:13:27 +0000367 class Foo(types.ModuleType):
368 __dict__ = 8
369 f = Foo("foo")
370 self.assertRaises(TypeError, dir, f)
371
372 # dir(type)
Benjamin Peterson577473f2010-01-19 00:09:57 +0000373 self.assertIn("strip", dir(str))
374 self.assertNotIn("__mro__", dir(str))
Georg Brandle32b4222007-03-10 22:13:27 +0000375
376 # dir(obj)
377 class Foo(object):
378 def __init__(self):
379 self.x = 7
380 self.y = 8
381 self.z = 9
382 f = Foo()
Benjamin Peterson577473f2010-01-19 00:09:57 +0000383 self.assertIn("y", dir(f))
Georg Brandle32b4222007-03-10 22:13:27 +0000384
385 # dir(obj_no__dict__)
386 class Foo(object):
387 __slots__ = []
388 f = Foo()
Benjamin Peterson577473f2010-01-19 00:09:57 +0000389 self.assertIn("__repr__", dir(f))
Georg Brandle32b4222007-03-10 22:13:27 +0000390
391 # dir(obj_no__class__with__dict__)
392 # (an ugly trick to cause getattr(f, "__class__") to fail)
393 class Foo(object):
394 __slots__ = ["__class__", "__dict__"]
395 def __init__(self):
396 self.bar = "wow"
397 f = Foo()
Benjamin Peterson577473f2010-01-19 00:09:57 +0000398 self.assertNotIn("__repr__", dir(f))
399 self.assertIn("bar", dir(f))
Georg Brandle32b4222007-03-10 22:13:27 +0000400
401 # dir(obj_using __dir__)
402 class Foo(object):
403 def __dir__(self):
404 return ["kan", "ga", "roo"]
405 f = Foo()
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000406 self.assertTrue(dir(f) == ["ga", "kan", "roo"])
Georg Brandle32b4222007-03-10 22:13:27 +0000407
Benjamin Peterson3bbb7222011-06-11 16:12:08 -0500408 # dir(obj__dir__tuple)
409 class Foo(object):
410 def __dir__(self):
411 return ("b", "c", "a")
412 res = dir(Foo())
413 self.assertIsInstance(res, list)
414 self.assertTrue(res == ["a", "b", "c"])
415
416 # dir(obj__dir__not_sequence)
Georg Brandle32b4222007-03-10 22:13:27 +0000417 class Foo(object):
418 def __dir__(self):
419 return 7
420 f = Foo()
421 self.assertRaises(TypeError, dir, f)
422
Collin Winter3eed7652007-08-14 17:53:54 +0000423 # dir(traceback)
424 try:
425 raise IndexError
426 except:
427 self.assertEqual(len(dir(sys.exc_info()[2])), 4)
428
Benjamin Petersondac9ace2011-05-25 09:33:37 -0500429 # test that object has a __dir__()
430 self.assertEqual(sorted([].__dir__()), dir([]))
Collin Winter3eed7652007-08-14 17:53:54 +0000431
Walter Dörwald919497e2003-01-19 16:23:59 +0000432 def test_divmod(self):
433 self.assertEqual(divmod(12, 7), (1, 5))
434 self.assertEqual(divmod(-12, 7), (-2, 2))
435 self.assertEqual(divmod(12, -7), (-2, -2))
436 self.assertEqual(divmod(-12, -7), (1, -5))
437
Mark Dickinson5c2db372009-12-05 20:28:34 +0000438 self.assertEqual(divmod(-sys.maxsize-1, -1), (sys.maxsize+1, 0))
Raymond Hettinger5ea7e312004-09-30 07:47:20 +0000439
Eli Bendersky67ebabd2011-02-25 10:14:17 +0000440 for num, denom, exp_result in [ (3.25, 1.0, (3.0, 0.25)),
441 (-3.25, 1.0, (-4.0, 0.75)),
442 (3.25, -1.0, (-4.0, -0.75)),
443 (-3.25, -1.0, (3.0, -0.25))]:
444 result = divmod(num, denom)
445 self.assertAlmostEqual(result[0], exp_result[0])
446 self.assertAlmostEqual(result[1], exp_result[1])
Walter Dörwald919497e2003-01-19 16:23:59 +0000447
448 self.assertRaises(TypeError, divmod)
449
450 def test_eval(self):
451 self.assertEqual(eval('1+1'), 2)
452 self.assertEqual(eval(' 1+1\n'), 2)
453 globals = {'a': 1, 'b': 2}
454 locals = {'b': 200, 'c': 300}
455 self.assertEqual(eval('a', globals) , 1)
456 self.assertEqual(eval('a', globals, locals), 1)
457 self.assertEqual(eval('b', globals, locals), 200)
458 self.assertEqual(eval('c', globals, locals), 300)
Walter Dörwald919497e2003-01-19 16:23:59 +0000459 globals = {'a': 1, 'b': 2}
460 locals = {'b': 200, 'c': 300}
Amaury Forgeot d'Arcaf593462007-11-22 20:53:01 +0000461 bom = b'\xef\xbb\xbf'
462 self.assertEqual(eval(bom + b'a', globals, locals), 1)
Walter Dörwald1f5947b2007-05-22 16:52:54 +0000463 self.assertEqual(eval('"\xe5"', globals), "\xe5")
Walter Dörwald919497e2003-01-19 16:23:59 +0000464 self.assertRaises(TypeError, eval)
465 self.assertRaises(TypeError, eval, ())
Amaury Forgeot d'Arcaf593462007-11-22 20:53:01 +0000466 self.assertRaises(SyntaxError, eval, bom[:2] + b'a')
Walter Dörwald919497e2003-01-19 16:23:59 +0000467
Benjamin Peterson92722792012-12-15 12:51:05 -0500468 class X:
469 def __getitem__(self, key):
470 raise ValueError
471 self.assertRaises(ValueError, eval, "foo", {}, X())
472
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000473 def test_general_eval(self):
474 # Tests that general mappings can be used for the locals argument
475
476 class M:
477 "Test mapping interface versus possible calls from eval()."
478 def __getitem__(self, key):
479 if key == 'a':
480 return 12
481 raise KeyError
Guido van Rossumcd70eee2007-02-11 18:53:00 +0000482 def keys(self):
483 return list('xyz')
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000484
485 m = M()
486 g = globals()
487 self.assertEqual(eval('a', g, m), 12)
488 self.assertRaises(NameError, eval, 'b', g, m)
489 self.assertEqual(eval('dir()', g, m), list('xyz'))
490 self.assertEqual(eval('globals()', g, m), g)
491 self.assertEqual(eval('locals()', g, m), m)
Raymond Hettinger513ffe82004-07-06 13:44:41 +0000492 self.assertRaises(TypeError, eval, 'a', m)
Raymond Hettinger66bd2332004-08-02 08:30:07 +0000493 class A:
494 "Non-mapping"
495 pass
496 m = A()
497 self.assertRaises(TypeError, eval, 'a', g, m)
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000498
499 # Verify that dict subclasses work as well
500 class D(dict):
501 def __getitem__(self, key):
502 if key == 'a':
503 return 12
504 return dict.__getitem__(self, key)
Guido van Rossumcd70eee2007-02-11 18:53:00 +0000505 def keys(self):
506 return list('xyz')
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000507
508 d = D()
509 self.assertEqual(eval('a', g, d), 12)
510 self.assertRaises(NameError, eval, 'b', g, d)
511 self.assertEqual(eval('dir()', g, d), list('xyz'))
512 self.assertEqual(eval('globals()', g, d), g)
513 self.assertEqual(eval('locals()', g, d), d)
514
515 # Verify locals stores (used by list comps)
516 eval('[locals() for i in (2,3)]', g, d)
Raymond Hettingerf80680d2008-02-06 00:07:11 +0000517 eval('[locals() for i in (2,3)]', g, collections.UserDict())
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000518
519 class SpreadSheet:
520 "Sample application showing nested, calculated lookups."
521 _cells = {}
522 def __setitem__(self, key, formula):
523 self._cells[key] = formula
Thomas Wouters73e5a5b2006-06-08 15:35:45 +0000524 def __getitem__(self, key):
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000525 return eval(self._cells[key], globals(), self)
526
527 ss = SpreadSheet()
528 ss['a1'] = '5'
529 ss['a2'] = 'a1*6'
530 ss['a3'] = 'a2*7'
531 self.assertEqual(ss['a3'], 210)
532
Raymond Hettinger2a7dede2004-08-07 04:55:30 +0000533 # Verify that dir() catches a non-list returned by eval
534 # SF bug #1004669
535 class C:
536 def __getitem__(self, item):
537 raise KeyError(item)
Guido van Rossumcd70eee2007-02-11 18:53:00 +0000538 def keys(self):
539 return 1 # used to be 'a' but that's no longer an error
Raymond Hettinger2a7dede2004-08-07 04:55:30 +0000540 self.assertRaises(TypeError, eval, 'dir()', globals(), C())
541
Georg Brandl7cae87c2006-09-06 06:51:57 +0000542 def test_exec(self):
543 g = {}
544 exec('z = 1', g)
545 if '__builtins__' in g:
546 del g['__builtins__']
547 self.assertEqual(g, {'z': 1})
548
Guido van Rossumef87d6e2007-05-02 19:09:54 +0000549 exec('z = 1+1', g)
Georg Brandl7cae87c2006-09-06 06:51:57 +0000550 if '__builtins__' in g:
551 del g['__builtins__']
552 self.assertEqual(g, {'z': 2})
553 g = {}
554 l = {}
555
Brett Cannon77628992010-03-20 20:59:33 +0000556 with check_warnings():
557 warnings.filterwarnings("ignore", "global statement",
558 module="<string>")
559 exec('global a; a = 1; b = 2', g, l)
Georg Brandl7cae87c2006-09-06 06:51:57 +0000560 if '__builtins__' in g:
561 del g['__builtins__']
562 if '__builtins__' in l:
563 del l['__builtins__']
564 self.assertEqual((g, l), ({'a': 1}, {'b': 2}))
565
Victor Stinnerb0b22422012-04-19 00:57:45 +0200566 def test_exec_globals(self):
567 code = compile("print('Hello World!')", "", "exec")
568 # no builtin function
569 self.assertRaisesRegex(NameError, "name 'print' is not defined",
570 exec, code, {'__builtins__': {}})
571 # __builtins__ must be a mapping type
572 self.assertRaises(TypeError,
573 exec, code, {'__builtins__': 123})
574
575 # no __build_class__ function
576 code = compile("class A: pass", "", "exec")
577 self.assertRaisesRegex(NameError, "__build_class__ not found",
578 exec, code, {'__builtins__': {}})
579
580 class frozendict_error(Exception):
581 pass
582
583 class frozendict(dict):
584 def __setitem__(self, key, value):
585 raise frozendict_error("frozendict is readonly")
586
587 # read-only builtins
Brett Cannon2f9f0562013-06-15 23:24:11 -0400588 if isinstance(__builtins__, types.ModuleType):
589 frozen_builtins = frozendict(__builtins__.__dict__)
590 else:
591 frozen_builtins = frozendict(__builtins__)
Victor Stinnerb0b22422012-04-19 00:57:45 +0200592 code = compile("__builtins__['superglobal']=2; print(superglobal)", "test", "exec")
593 self.assertRaises(frozendict_error,
594 exec, code, {'__builtins__': frozen_builtins})
595
596 # read-only globals
597 namespace = frozendict({})
598 code = compile("x=1", "test", "exec")
599 self.assertRaises(frozendict_error,
600 exec, code, namespace)
601
Amaury Forgeot d'Arc9ed77352008-04-04 23:25:27 +0000602 def test_exec_redirected(self):
603 savestdout = sys.stdout
604 sys.stdout = None # Whatever that cannot flush()
605 try:
606 # Used to raise SystemError('error return without exception set')
607 exec('a')
608 except NameError:
609 pass
610 finally:
611 sys.stdout = savestdout
612
Walter Dörwald919497e2003-01-19 16:23:59 +0000613 def test_filter(self):
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000614 self.assertEqual(list(filter(lambda c: 'a' <= c <= 'z', 'Hello World')), list('elloorld'))
615 self.assertEqual(list(filter(None, [1, 'hello', [], [3], '', None, 9, 0])), [1, 'hello', [3], 9])
616 self.assertEqual(list(filter(lambda x: x > 0, [1, -3, 9, 0, 2])), [1, 9, 2])
617 self.assertEqual(list(filter(None, Squares(10))), [1, 4, 9, 16, 25, 36, 49, 64, 81])
618 self.assertEqual(list(filter(lambda x: x%2, Squares(10))), [1, 9, 25, 49, 81])
Walter Dörwald919497e2003-01-19 16:23:59 +0000619 def identity(item):
620 return 1
621 filter(identity, Squares(5))
622 self.assertRaises(TypeError, filter)
623 class BadSeq(object):
Tim Petersf2715e02003-02-19 02:35:07 +0000624 def __getitem__(self, index):
625 if index<4:
626 return 42
627 raise ValueError
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000628 self.assertRaises(ValueError, list, filter(lambda x: x, BadSeq()))
Walter Dörwald919497e2003-01-19 16:23:59 +0000629 def badfunc():
630 pass
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000631 self.assertRaises(TypeError, list, filter(badfunc, range(5)))
Walter Dörwald919497e2003-01-19 16:23:59 +0000632
Walter Dörwaldbf517072003-01-27 15:57:14 +0000633 # test bltinmodule.c::filtertuple()
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000634 self.assertEqual(list(filter(None, (1, 2))), [1, 2])
635 self.assertEqual(list(filter(lambda x: x>=3, (1, 2, 3, 4))), [3, 4])
636 self.assertRaises(TypeError, list, filter(42, (1, 2)))
Walter Dörwaldc3da83f2003-02-04 20:24:45 +0000637
Kristján Valur Jónsson31668b82012-04-03 10:49:41 +0000638 def test_filter_pickle(self):
639 f1 = filter(filter_char, "abcdeabcde")
640 f2 = filter(filter_char, "abcdeabcde")
641 self.check_iter_pickle(f1, list(f2))
642
Walter Dörwald919497e2003-01-19 16:23:59 +0000643 def test_getattr(self):
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000644 self.assertTrue(getattr(sys, 'stdout') is sys.stdout)
Walter Dörwald919497e2003-01-19 16:23:59 +0000645 self.assertRaises(TypeError, getattr, sys, 1)
646 self.assertRaises(TypeError, getattr, sys, 1, "foo")
647 self.assertRaises(TypeError, getattr)
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000648 self.assertRaises(AttributeError, getattr, sys, chr(sys.maxunicode))
Victor Stinner624dbf62010-03-12 17:17:58 +0000649 # unicode surrogates are not encodable to the default encoding (utf8)
650 self.assertRaises(AttributeError, getattr, 1, "\uDAD1\uD51E")
Walter Dörwald919497e2003-01-19 16:23:59 +0000651
652 def test_hasattr(self):
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000653 self.assertTrue(hasattr(sys, 'stdout'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000654 self.assertRaises(TypeError, hasattr, sys, 1)
655 self.assertRaises(TypeError, hasattr)
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000656 self.assertEqual(False, hasattr(sys, chr(sys.maxunicode)))
Walter Dörwald919497e2003-01-19 16:23:59 +0000657
Benjamin Peterson17689992010-08-24 03:26:23 +0000658 # Check that hasattr propagates all exceptions outside of
659 # AttributeError.
Alexandre Vassalottieca20b62008-05-16 02:54:33 +0000660 class A:
661 def __getattr__(self, what):
Benjamin Peterson17689992010-08-24 03:26:23 +0000662 raise SystemExit
663 self.assertRaises(SystemExit, hasattr, A(), "b")
Alexandre Vassalottieca20b62008-05-16 02:54:33 +0000664 class B:
665 def __getattr__(self, what):
Benjamin Peterson17689992010-08-24 03:26:23 +0000666 raise ValueError
667 self.assertRaises(ValueError, hasattr, B(), "b")
Alexandre Vassalottieca20b62008-05-16 02:54:33 +0000668
Walter Dörwald919497e2003-01-19 16:23:59 +0000669 def test_hash(self):
670 hash(None)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000671 self.assertEqual(hash(1), hash(1))
Walter Dörwald919497e2003-01-19 16:23:59 +0000672 self.assertEqual(hash(1), hash(1.0))
673 hash('spam')
Guido van Rossum98297ee2007-11-06 21:34:58 +0000674 self.assertEqual(hash('spam'), hash(b'spam'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000675 hash((0,1,2,3))
676 def f(): pass
677 self.assertRaises(TypeError, hash, [])
678 self.assertRaises(TypeError, hash, {})
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000679 # Bug 1536021: Allow hash to return long objects
680 class X:
681 def __hash__(self):
682 return 2**100
Ezio Melottib3aedd42010-11-20 19:04:17 +0000683 self.assertEqual(type(hash(X())), int)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000684 class Z(int):
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000685 def __hash__(self):
686 return self
Ezio Melottib3aedd42010-11-20 19:04:17 +0000687 self.assertEqual(hash(Z(42)), hash(42))
Walter Dörwald919497e2003-01-19 16:23:59 +0000688
689 def test_hex(self):
690 self.assertEqual(hex(16), '0x10')
Guido van Rossume2a383d2007-01-15 16:59:06 +0000691 self.assertEqual(hex(-16), '-0x10')
Walter Dörwald919497e2003-01-19 16:23:59 +0000692 self.assertRaises(TypeError, hex, {})
693
694 def test_id(self):
695 id(None)
696 id(1)
Walter Dörwald919497e2003-01-19 16:23:59 +0000697 id(1.0)
698 id('spam')
699 id((0,1,2,3))
700 id([0,1,2,3])
701 id({'spam': 1, 'eggs': 2, 'ham': 3})
702
Guido van Rossuma88a0332007-02-26 16:59:55 +0000703 # Test input() later, alphabetized as if it were raw_input
704
Walter Dörwald919497e2003-01-19 16:23:59 +0000705 def test_iter(self):
706 self.assertRaises(TypeError, iter)
707 self.assertRaises(TypeError, iter, 42, 42)
708 lists = [("1", "2"), ["1", "2"], "12"]
Walter Dörwald919497e2003-01-19 16:23:59 +0000709 for l in lists:
710 i = iter(l)
Georg Brandla18af4e2007-04-21 15:47:16 +0000711 self.assertEqual(next(i), '1')
712 self.assertEqual(next(i), '2')
713 self.assertRaises(StopIteration, next, i)
Walter Dörwald919497e2003-01-19 16:23:59 +0000714
715 def test_isinstance(self):
716 class C:
717 pass
718 class D(C):
719 pass
720 class E:
721 pass
722 c = C()
723 d = D()
724 e = E()
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000725 self.assertTrue(isinstance(c, C))
726 self.assertTrue(isinstance(d, C))
727 self.assertTrue(not isinstance(e, C))
728 self.assertTrue(not isinstance(c, D))
729 self.assertTrue(not isinstance('foo', E))
Walter Dörwald919497e2003-01-19 16:23:59 +0000730 self.assertRaises(TypeError, isinstance, E, 'foo')
731 self.assertRaises(TypeError, isinstance)
732
733 def test_issubclass(self):
734 class C:
735 pass
736 class D(C):
737 pass
738 class E:
739 pass
740 c = C()
741 d = D()
742 e = E()
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000743 self.assertTrue(issubclass(D, C))
744 self.assertTrue(issubclass(C, C))
745 self.assertTrue(not issubclass(C, D))
Walter Dörwald919497e2003-01-19 16:23:59 +0000746 self.assertRaises(TypeError, issubclass, 'foo', E)
747 self.assertRaises(TypeError, issubclass, E, 'foo')
748 self.assertRaises(TypeError, issubclass)
749
750 def test_len(self):
751 self.assertEqual(len('123'), 3)
752 self.assertEqual(len(()), 0)
753 self.assertEqual(len((1, 2, 3, 4)), 4)
754 self.assertEqual(len([1, 2, 3, 4]), 4)
755 self.assertEqual(len({}), 0)
756 self.assertEqual(len({'a':1, 'b': 2}), 2)
757 class BadSeq:
758 def __len__(self):
759 raise ValueError
760 self.assertRaises(ValueError, len, BadSeq())
Benjamin Petersonee1ae7c2009-02-08 21:07:20 +0000761 class InvalidLen:
762 def __len__(self):
763 return None
764 self.assertRaises(TypeError, len, InvalidLen())
765 class FloatLen:
766 def __len__(self):
767 return 4.5
768 self.assertRaises(TypeError, len, FloatLen())
769 class HugeLen:
770 def __len__(self):
771 return sys.maxsize + 1
772 self.assertRaises(OverflowError, len, HugeLen())
Mark Dickinsonfb3dc942010-05-25 19:06:24 +0000773 class NoLenMethod(object): pass
774 self.assertRaises(TypeError, len, NoLenMethod())
Walter Dörwald919497e2003-01-19 16:23:59 +0000775
Walter Dörwald919497e2003-01-19 16:23:59 +0000776 def test_map(self):
777 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000778 list(map(lambda x: x*x, range(1,4))),
Walter Dörwald919497e2003-01-19 16:23:59 +0000779 [1, 4, 9]
780 )
781 try:
782 from math import sqrt
783 except ImportError:
784 def sqrt(x):
785 return pow(x, 0.5)
786 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000787 list(map(lambda x: list(map(sqrt, x)), [[16, 4], [81, 9]])),
Walter Dörwald919497e2003-01-19 16:23:59 +0000788 [[4.0, 2.0], [9.0, 3.0]]
789 )
790 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000791 list(map(lambda x, y: x+y, [1,3,2], [9,1,4])),
Walter Dörwald919497e2003-01-19 16:23:59 +0000792 [10, 4, 6]
793 )
794
795 def plus(*v):
796 accu = 0
797 for i in v: accu = accu + i
798 return accu
799 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000800 list(map(plus, [1, 3, 7])),
Walter Dörwald919497e2003-01-19 16:23:59 +0000801 [1, 3, 7]
802 )
803 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000804 list(map(plus, [1, 3, 7], [4, 9, 2])),
Walter Dörwald919497e2003-01-19 16:23:59 +0000805 [1+4, 3+9, 7+2]
806 )
807 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000808 list(map(plus, [1, 3, 7], [4, 9, 2], [1, 1, 0])),
Walter Dörwald919497e2003-01-19 16:23:59 +0000809 [1+4+1, 3+9+1, 7+2+0]
810 )
811 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000812 list(map(int, Squares(10))),
Walter Dörwald919497e2003-01-19 16:23:59 +0000813 [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
814 )
Guido van Rossum47b9ff62006-08-24 00:41:19 +0000815 def Max(a, b):
816 if a is None:
817 return b
818 if b is None:
819 return a
820 return max(a, b)
Walter Dörwald919497e2003-01-19 16:23:59 +0000821 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000822 list(map(Max, Squares(3), Squares(2))),
823 [0, 1]
Walter Dörwald919497e2003-01-19 16:23:59 +0000824 )
825 self.assertRaises(TypeError, map)
826 self.assertRaises(TypeError, map, lambda x: x, 42)
Walter Dörwald919497e2003-01-19 16:23:59 +0000827 class BadSeq:
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000828 def __iter__(self):
Walter Dörwald919497e2003-01-19 16:23:59 +0000829 raise ValueError
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000830 yield None
831 self.assertRaises(ValueError, list, map(lambda x: x, BadSeq()))
Neal Norwitzfcf44352005-11-27 20:37:43 +0000832 def badfunc(x):
833 raise RuntimeError
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000834 self.assertRaises(RuntimeError, list, map(badfunc, range(5)))
Walter Dörwald919497e2003-01-19 16:23:59 +0000835
Kristján Valur Jónsson31668b82012-04-03 10:49:41 +0000836 def test_map_pickle(self):
837 m1 = map(map_char, "Is this the real life?")
838 m2 = map(map_char, "Is this the real life?")
839 self.check_iter_pickle(m1, list(m2))
840
Walter Dörwald919497e2003-01-19 16:23:59 +0000841 def test_max(self):
842 self.assertEqual(max('123123'), '3')
843 self.assertEqual(max(1, 2, 3), 3)
844 self.assertEqual(max((1, 2, 3, 1, 2, 3)), 3)
845 self.assertEqual(max([1, 2, 3, 1, 2, 3]), 3)
846
Guido van Rossume2a383d2007-01-15 16:59:06 +0000847 self.assertEqual(max(1, 2, 3.0), 3.0)
848 self.assertEqual(max(1, 2.0, 3), 3)
849 self.assertEqual(max(1.0, 2, 3), 3)
Walter Dörwald919497e2003-01-19 16:23:59 +0000850
Raymond Hettinger4d6018f2013-06-24 22:43:02 -0700851 self.assertRaises(TypeError, max)
852 self.assertRaises(TypeError, max, 42)
853 self.assertRaises(ValueError, max, ())
854 class BadSeq:
855 def __getitem__(self, index):
856 raise ValueError
857 self.assertRaises(ValueError, max, BadSeq())
858
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +0000859 for stmt in (
860 "max(key=int)", # no args
Raymond Hettinger4d6018f2013-06-24 22:43:02 -0700861 "max(default=None)",
862 "max(1, 2, default=None)", # require container for default
863 "max(default=None, key=int)",
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +0000864 "max(1, key=int)", # single arg not iterable
865 "max(1, 2, keystone=int)", # wrong keyword
866 "max(1, 2, key=int, abc=int)", # two many keywords
867 "max(1, 2, key=1)", # keyfunc is not callable
868 ):
Tim Peters7f061872004-12-07 21:17:46 +0000869 try:
Georg Brandl7cae87c2006-09-06 06:51:57 +0000870 exec(stmt, globals())
Tim Peters7f061872004-12-07 21:17:46 +0000871 except TypeError:
872 pass
873 else:
874 self.fail(stmt)
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +0000875
876 self.assertEqual(max((1,), key=neg), 1) # one elem iterable
877 self.assertEqual(max((1,2), key=neg), 1) # two elem iterable
878 self.assertEqual(max(1, 2, key=neg), 1) # two elems
879
Raymond Hettinger4d6018f2013-06-24 22:43:02 -0700880 self.assertEqual(max((), default=None), None) # zero elem iterable
881 self.assertEqual(max((1,), default=None), 1) # one elem iterable
882 self.assertEqual(max((1,2), default=None), 2) # two elem iterable
883
884 self.assertEqual(max((), default=1, key=neg), 1)
885 self.assertEqual(max((1, 2), default=3, key=neg), 1)
886
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +0000887 data = [random.randrange(200) for i in range(100)]
888 keys = dict((elem, random.randrange(50)) for elem in data)
889 f = keys.__getitem__
890 self.assertEqual(max(data, key=f),
891 sorted(reversed(data), key=f)[-1])
892
Walter Dörwald919497e2003-01-19 16:23:59 +0000893 def test_min(self):
894 self.assertEqual(min('123123'), '1')
895 self.assertEqual(min(1, 2, 3), 1)
896 self.assertEqual(min((1, 2, 3, 1, 2, 3)), 1)
897 self.assertEqual(min([1, 2, 3, 1, 2, 3]), 1)
898
Guido van Rossume2a383d2007-01-15 16:59:06 +0000899 self.assertEqual(min(1, 2, 3.0), 1)
900 self.assertEqual(min(1, 2.0, 3), 1)
901 self.assertEqual(min(1.0, 2, 3), 1.0)
Walter Dörwald919497e2003-01-19 16:23:59 +0000902
903 self.assertRaises(TypeError, min)
904 self.assertRaises(TypeError, min, 42)
905 self.assertRaises(ValueError, min, ())
906 class BadSeq:
907 def __getitem__(self, index):
908 raise ValueError
909 self.assertRaises(ValueError, min, BadSeq())
Walter Dörwald919497e2003-01-19 16:23:59 +0000910
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +0000911 for stmt in (
912 "min(key=int)", # no args
Raymond Hettinger4d6018f2013-06-24 22:43:02 -0700913 "min(default=None)",
914 "min(1, 2, default=None)", # require container for default
915 "min(default=None, key=int)",
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +0000916 "min(1, key=int)", # single arg not iterable
917 "min(1, 2, keystone=int)", # wrong keyword
918 "min(1, 2, key=int, abc=int)", # two many keywords
919 "min(1, 2, key=1)", # keyfunc is not callable
920 ):
Tim Peters7f061872004-12-07 21:17:46 +0000921 try:
Georg Brandl7cae87c2006-09-06 06:51:57 +0000922 exec(stmt, globals())
Tim Peters7f061872004-12-07 21:17:46 +0000923 except TypeError:
924 pass
925 else:
926 self.fail(stmt)
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +0000927
928 self.assertEqual(min((1,), key=neg), 1) # one elem iterable
929 self.assertEqual(min((1,2), key=neg), 2) # two elem iterable
930 self.assertEqual(min(1, 2, key=neg), 2) # two elems
931
Raymond Hettinger4d6018f2013-06-24 22:43:02 -0700932 self.assertEqual(min((), default=None), None) # zero elem iterable
933 self.assertEqual(min((1,), default=None), 1) # one elem iterable
934 self.assertEqual(min((1,2), default=None), 1) # two elem iterable
935
936 self.assertEqual(min((), default=1, key=neg), 1)
937 self.assertEqual(min((1, 2), default=1, key=neg), 2)
938
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +0000939 data = [random.randrange(200) for i in range(100)]
940 keys = dict((elem, random.randrange(50)) for elem in data)
941 f = keys.__getitem__
942 self.assertEqual(min(data, key=f),
943 sorted(data, key=f)[0])
944
Georg Brandla18af4e2007-04-21 15:47:16 +0000945 def test_next(self):
946 it = iter(range(2))
947 self.assertEqual(next(it), 0)
948 self.assertEqual(next(it), 1)
949 self.assertRaises(StopIteration, next, it)
950 self.assertRaises(StopIteration, next, it)
Ezio Melottib3aedd42010-11-20 19:04:17 +0000951 self.assertEqual(next(it, 42), 42)
Georg Brandla18af4e2007-04-21 15:47:16 +0000952
953 class Iter(object):
954 def __iter__(self):
955 return self
956 def __next__(self):
957 raise StopIteration
958
959 it = iter(Iter())
Ezio Melottib3aedd42010-11-20 19:04:17 +0000960 self.assertEqual(next(it, 42), 42)
Georg Brandla18af4e2007-04-21 15:47:16 +0000961 self.assertRaises(StopIteration, next, it)
962
963 def gen():
964 yield 1
965 return
966
967 it = gen()
Ezio Melottib3aedd42010-11-20 19:04:17 +0000968 self.assertEqual(next(it), 1)
Georg Brandla18af4e2007-04-21 15:47:16 +0000969 self.assertRaises(StopIteration, next, it)
Ezio Melottib3aedd42010-11-20 19:04:17 +0000970 self.assertEqual(next(it, 42), 42)
Georg Brandla18af4e2007-04-21 15:47:16 +0000971
Walter Dörwald919497e2003-01-19 16:23:59 +0000972 def test_oct(self):
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000973 self.assertEqual(oct(100), '0o144')
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000974 self.assertEqual(oct(-100), '-0o144')
Walter Dörwald919497e2003-01-19 16:23:59 +0000975 self.assertRaises(TypeError, oct, ())
976
977 def write_testfile(self):
Guido van Rossuma88a0332007-02-26 16:59:55 +0000978 # NB the first 4 lines are also used to test input, below
Walter Dörwald919497e2003-01-19 16:23:59 +0000979 fp = open(TESTFN, 'w')
Victor Stinner82fb71d2013-08-22 01:58:12 +0200980 self.addCleanup(unlink, TESTFN)
981 with fp:
Walter Dörwald919497e2003-01-19 16:23:59 +0000982 fp.write('1+1\n')
Walter Dörwald919497e2003-01-19 16:23:59 +0000983 fp.write('The quick brown fox jumps over the lazy dog')
984 fp.write('.\n')
985 fp.write('Dear John\n')
986 fp.write('XXX'*100)
987 fp.write('YYY'*100)
Walter Dörwald919497e2003-01-19 16:23:59 +0000988
989 def test_open(self):
990 self.write_testfile()
991 fp = open(TESTFN, 'r')
Victor Stinner82fb71d2013-08-22 01:58:12 +0200992 with fp:
Walter Dörwald919497e2003-01-19 16:23:59 +0000993 self.assertEqual(fp.readline(4), '1+1\n')
Walter Dörwald919497e2003-01-19 16:23:59 +0000994 self.assertEqual(fp.readline(), 'The quick brown fox jumps over the lazy dog.\n')
995 self.assertEqual(fp.readline(4), 'Dear')
996 self.assertEqual(fp.readline(100), ' John\n')
997 self.assertEqual(fp.read(300), 'XXX'*100)
998 self.assertEqual(fp.read(1000), 'YYY'*100)
Walter Dörwald919497e2003-01-19 16:23:59 +0000999
Victor Stinnerf86a5e82012-06-05 13:43:22 +02001000 def test_open_default_encoding(self):
1001 old_environ = dict(os.environ)
1002 try:
1003 # try to get a user preferred encoding different than the current
1004 # locale encoding to check that open() uses the current locale
1005 # encoding and not the user preferred encoding
1006 for key in ('LC_ALL', 'LANG', 'LC_CTYPE'):
1007 if key in os.environ:
1008 del os.environ[key]
1009
1010 self.write_testfile()
1011 current_locale_encoding = locale.getpreferredencoding(False)
1012 fp = open(TESTFN, 'w')
Victor Stinner82fb71d2013-08-22 01:58:12 +02001013 with fp:
Victor Stinnerf86a5e82012-06-05 13:43:22 +02001014 self.assertEqual(fp.encoding, current_locale_encoding)
Victor Stinnerf86a5e82012-06-05 13:43:22 +02001015 finally:
1016 os.environ.clear()
1017 os.environ.update(old_environ)
1018
Victor Stinnerdaf45552013-08-28 00:53:59 +02001019 def test_open_non_inheritable(self):
1020 fileobj = open(__file__)
1021 with fileobj:
1022 self.assertFalse(os.get_inheritable(fileobj.fileno()))
1023
Walter Dörwald919497e2003-01-19 16:23:59 +00001024 def test_ord(self):
1025 self.assertEqual(ord(' '), 32)
1026 self.assertEqual(ord('A'), 65)
1027 self.assertEqual(ord('a'), 97)
Guido van Rossumf9e91c92007-05-08 21:05:48 +00001028 self.assertEqual(ord('\x80'), 128)
1029 self.assertEqual(ord('\xff'), 255)
1030
1031 self.assertEqual(ord(b' '), 32)
1032 self.assertEqual(ord(b'A'), 65)
1033 self.assertEqual(ord(b'a'), 97)
1034 self.assertEqual(ord(b'\x80'), 128)
1035 self.assertEqual(ord(b'\xff'), 255)
1036
Walter Dörwald1f5947b2007-05-22 16:52:54 +00001037 self.assertEqual(ord(chr(sys.maxunicode)), sys.maxunicode)
Walter Dörwald919497e2003-01-19 16:23:59 +00001038 self.assertRaises(TypeError, ord, 42)
Walter Dörwald919497e2003-01-19 16:23:59 +00001039
Guido van Rossum8ac004e2007-07-15 13:00:05 +00001040 self.assertEqual(ord(chr(0x10FFFF)), 0x10FFFF)
1041 self.assertEqual(ord("\U0000FFFF"), 0x0000FFFF)
1042 self.assertEqual(ord("\U00010000"), 0x00010000)
1043 self.assertEqual(ord("\U00010001"), 0x00010001)
1044 self.assertEqual(ord("\U000FFFFE"), 0x000FFFFE)
1045 self.assertEqual(ord("\U000FFFFF"), 0x000FFFFF)
1046 self.assertEqual(ord("\U00100000"), 0x00100000)
1047 self.assertEqual(ord("\U00100001"), 0x00100001)
1048 self.assertEqual(ord("\U0010FFFE"), 0x0010FFFE)
1049 self.assertEqual(ord("\U0010FFFF"), 0x0010FFFF)
1050
Walter Dörwald919497e2003-01-19 16:23:59 +00001051 def test_pow(self):
1052 self.assertEqual(pow(0,0), 1)
1053 self.assertEqual(pow(0,1), 0)
1054 self.assertEqual(pow(1,0), 1)
1055 self.assertEqual(pow(1,1), 1)
1056
1057 self.assertEqual(pow(2,0), 1)
1058 self.assertEqual(pow(2,10), 1024)
1059 self.assertEqual(pow(2,20), 1024*1024)
1060 self.assertEqual(pow(2,30), 1024*1024*1024)
1061
1062 self.assertEqual(pow(-2,0), 1)
1063 self.assertEqual(pow(-2,1), -2)
1064 self.assertEqual(pow(-2,2), 4)
1065 self.assertEqual(pow(-2,3), -8)
1066
Walter Dörwald919497e2003-01-19 16:23:59 +00001067 self.assertAlmostEqual(pow(0.,0), 1.)
1068 self.assertAlmostEqual(pow(0.,1), 0.)
1069 self.assertAlmostEqual(pow(1.,0), 1.)
1070 self.assertAlmostEqual(pow(1.,1), 1.)
1071
1072 self.assertAlmostEqual(pow(2.,0), 1.)
1073 self.assertAlmostEqual(pow(2.,10), 1024.)
1074 self.assertAlmostEqual(pow(2.,20), 1024.*1024.)
1075 self.assertAlmostEqual(pow(2.,30), 1024.*1024.*1024.)
1076
1077 self.assertAlmostEqual(pow(-2.,0), 1.)
1078 self.assertAlmostEqual(pow(-2.,1), -2.)
1079 self.assertAlmostEqual(pow(-2.,2), 4.)
1080 self.assertAlmostEqual(pow(-2.,3), -8.)
1081
Mark Dickinson5c2db372009-12-05 20:28:34 +00001082 for x in 2, 2.0:
1083 for y in 10, 10.0:
1084 for z in 1000, 1000.0:
Walter Dörwald919497e2003-01-19 16:23:59 +00001085 if isinstance(x, float) or \
1086 isinstance(y, float) or \
1087 isinstance(z, float):
1088 self.assertRaises(TypeError, pow, x, y, z)
1089 else:
1090 self.assertAlmostEqual(pow(x, y, z), 24.0)
1091
Jeffrey Yasskin3404b3c2007-09-07 15:15:49 +00001092 self.assertAlmostEqual(pow(-1, 0.5), 1j)
1093 self.assertAlmostEqual(pow(-1, 1/3), 0.5 + 0.8660254037844386j)
1094
Walter Dörwald919497e2003-01-19 16:23:59 +00001095 self.assertRaises(TypeError, pow, -1, -2, 3)
1096 self.assertRaises(ValueError, pow, 1, 2, 0)
Walter Dörwald919497e2003-01-19 16:23:59 +00001097
1098 self.assertRaises(TypeError, pow)
1099
Guido van Rossuma88a0332007-02-26 16:59:55 +00001100 def test_input(self):
1101 self.write_testfile()
1102 fp = open(TESTFN, 'r')
1103 savestdin = sys.stdin
1104 savestdout = sys.stdout # Eats the echo
1105 try:
1106 sys.stdin = fp
1107 sys.stdout = BitBucket()
1108 self.assertEqual(input(), "1+1")
Guido van Rossuma88a0332007-02-26 16:59:55 +00001109 self.assertEqual(input(), 'The quick brown fox jumps over the lazy dog.')
1110 self.assertEqual(input('testing\n'), 'Dear John')
1111
1112 # SF 1535165: don't segfault on closed stdin
1113 # sys.stdout must be a regular file for triggering
1114 sys.stdout = savestdout
1115 sys.stdin.close()
1116 self.assertRaises(ValueError, input)
1117
1118 sys.stdout = BitBucket()
Guido van Rossum34d19282007-08-09 01:03:29 +00001119 sys.stdin = io.StringIO("NULL\0")
Guido van Rossuma88a0332007-02-26 16:59:55 +00001120 self.assertRaises(TypeError, input, 42, 42)
Guido van Rossum34d19282007-08-09 01:03:29 +00001121 sys.stdin = io.StringIO(" 'whitespace'")
Guido van Rossuma88a0332007-02-26 16:59:55 +00001122 self.assertEqual(input(), " 'whitespace'")
Guido van Rossum34d19282007-08-09 01:03:29 +00001123 sys.stdin = io.StringIO()
Guido van Rossuma88a0332007-02-26 16:59:55 +00001124 self.assertRaises(EOFError, input)
1125
1126 del sys.stdout
1127 self.assertRaises(RuntimeError, input, 'prompt')
1128 del sys.stdin
1129 self.assertRaises(RuntimeError, input, 'prompt')
1130 finally:
1131 sys.stdin = savestdin
1132 sys.stdout = savestdout
1133 fp.close()
Guido van Rossuma88a0332007-02-26 16:59:55 +00001134
Antoine Pitrou772add72011-11-06 02:37:42 +01001135 @unittest.skipUnless(pty, "the pty and signal modules must be available")
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001136 def check_input_tty(self, prompt, terminal_input, stdio_encoding=None):
Antoine Pitrou1ce4b142011-11-06 03:03:18 +01001137 if not sys.stdin.isatty() or not sys.stdout.isatty():
1138 self.skipTest("stdin and stdout must be ttys")
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001139 r, w = os.pipe()
1140 try:
1141 pid, fd = pty.fork()
1142 except (OSError, AttributeError) as e:
1143 os.close(r)
1144 os.close(w)
1145 self.skipTest("pty.fork() raised {}".format(e))
1146 if pid == 0:
1147 # Child
Antoine Pitrou772add72011-11-06 02:37:42 +01001148 try:
1149 # Make sure we don't get stuck if there's a problem
1150 signal.alarm(2)
1151 os.close(r)
1152 # Check the error handlers are accounted for
1153 if stdio_encoding:
1154 sys.stdin = io.TextIOWrapper(sys.stdin.detach(),
1155 encoding=stdio_encoding,
1156 errors='surrogateescape')
1157 sys.stdout = io.TextIOWrapper(sys.stdout.detach(),
1158 encoding=stdio_encoding,
1159 errors='replace')
1160 with open(w, "w") as wpipe:
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001161 print("tty =", sys.stdin.isatty() and sys.stdout.isatty(), file=wpipe)
1162 print(ascii(input(prompt)), file=wpipe)
Antoine Pitrou772add72011-11-06 02:37:42 +01001163 except:
1164 traceback.print_exc()
1165 finally:
1166 # We don't want to return to unittest...
1167 os._exit(0)
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001168 # Parent
1169 os.close(w)
1170 os.write(fd, terminal_input + b"\r\n")
1171 # Get results from the pipe
1172 with open(r, "r") as rpipe:
1173 lines = []
1174 while True:
1175 line = rpipe.readline().strip()
Antoine Pitrou772add72011-11-06 02:37:42 +01001176 if line == "":
1177 # The other end was closed => the child exited
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001178 break
1179 lines.append(line)
Antoine Pitrou772add72011-11-06 02:37:42 +01001180 # Check the result was got and corresponds to the user's terminal input
1181 if len(lines) != 2:
1182 # Something went wrong, try to get at stderr
1183 with open(fd, "r", encoding="ascii", errors="ignore") as child_output:
1184 self.fail("got %d lines in pipe but expected 2, child output was:\n%s"
1185 % (len(lines), child_output.read()))
1186 os.close(fd)
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001187 # Check we did exercise the GNU readline path
1188 self.assertIn(lines[0], {'tty = True', 'tty = False'})
1189 if lines[0] != 'tty = True':
1190 self.skipTest("standard IO in should have been a tty")
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001191 input_result = eval(lines[1]) # ascii() -> eval() roundtrip
1192 if stdio_encoding:
1193 expected = terminal_input.decode(stdio_encoding, 'surrogateescape')
1194 else:
1195 expected = terminal_input.decode(sys.stdin.encoding) # what else?
1196 self.assertEqual(input_result, expected)
1197
1198 def test_input_tty(self):
1199 # Test input() functionality when wired to a tty (the code path
1200 # is different and invokes GNU readline if available).
1201 self.check_input_tty("prompt", b"quux")
1202
1203 def test_input_tty_non_ascii(self):
1204 # Check stdin/stdout encoding is used when invoking GNU readline
1205 self.check_input_tty("prompté", b"quux\xe9", "utf-8")
1206
1207 def test_input_tty_non_ascii_unicode_errors(self):
1208 # Check stdin/stdout error handler is used when invoking GNU readline
1209 self.check_input_tty("prompté", b"quux\xe9", "ascii")
1210
Andrew Svetlov8e42e8a2012-12-23 12:49:33 +02001211 # test_int(): see test_int.py for tests of built-in function int().
1212
Walter Dörwald919497e2003-01-19 16:23:59 +00001213 def test_repr(self):
1214 self.assertEqual(repr(''), '\'\'')
1215 self.assertEqual(repr(0), '0')
Walter Dörwald919497e2003-01-19 16:23:59 +00001216 self.assertEqual(repr(()), '()')
1217 self.assertEqual(repr([]), '[]')
1218 self.assertEqual(repr({}), '{}')
1219 a = []
1220 a.append(a)
1221 self.assertEqual(repr(a), '[[...]]')
1222 a = {}
1223 a[0] = a
1224 self.assertEqual(repr(a), '{0: {...}}')
1225
1226 def test_round(self):
1227 self.assertEqual(round(0.0), 0.0)
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001228 self.assertEqual(type(round(0.0)), int)
Walter Dörwald919497e2003-01-19 16:23:59 +00001229 self.assertEqual(round(1.0), 1.0)
1230 self.assertEqual(round(10.0), 10.0)
1231 self.assertEqual(round(1000000000.0), 1000000000.0)
1232 self.assertEqual(round(1e20), 1e20)
1233
1234 self.assertEqual(round(-1.0), -1.0)
1235 self.assertEqual(round(-10.0), -10.0)
1236 self.assertEqual(round(-1000000000.0), -1000000000.0)
1237 self.assertEqual(round(-1e20), -1e20)
1238
1239 self.assertEqual(round(0.1), 0.0)
1240 self.assertEqual(round(1.1), 1.0)
1241 self.assertEqual(round(10.1), 10.0)
1242 self.assertEqual(round(1000000000.1), 1000000000.0)
1243
1244 self.assertEqual(round(-1.1), -1.0)
1245 self.assertEqual(round(-10.1), -10.0)
1246 self.assertEqual(round(-1000000000.1), -1000000000.0)
1247
1248 self.assertEqual(round(0.9), 1.0)
1249 self.assertEqual(round(9.9), 10.0)
1250 self.assertEqual(round(999999999.9), 1000000000.0)
1251
1252 self.assertEqual(round(-0.9), -1.0)
1253 self.assertEqual(round(-9.9), -10.0)
1254 self.assertEqual(round(-999999999.9), -1000000000.0)
1255
1256 self.assertEqual(round(-8.0, -1), -10.0)
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001257 self.assertEqual(type(round(-8.0, -1)), float)
1258
1259 self.assertEqual(type(round(-8.0, 0)), float)
1260 self.assertEqual(type(round(-8.0, 1)), float)
1261
1262 # Check even / odd rounding behaviour
1263 self.assertEqual(round(5.5), 6)
1264 self.assertEqual(round(6.5), 6)
1265 self.assertEqual(round(-5.5), -6)
1266 self.assertEqual(round(-6.5), -6)
1267
1268 # Check behavior on ints
1269 self.assertEqual(round(0), 0)
1270 self.assertEqual(round(8), 8)
1271 self.assertEqual(round(-8), -8)
1272 self.assertEqual(type(round(0)), int)
Mark Dickinson1124e712009-01-28 21:25:58 +00001273 self.assertEqual(type(round(-8, -1)), int)
1274 self.assertEqual(type(round(-8, 0)), int)
1275 self.assertEqual(type(round(-8, 1)), int)
Walter Dörwald919497e2003-01-19 16:23:59 +00001276
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001277 # test new kwargs
1278 self.assertEqual(round(number=-8.0, ndigits=-1), -10.0)
1279
Walter Dörwald919497e2003-01-19 16:23:59 +00001280 self.assertRaises(TypeError, round)
1281
Alex Martelliae211f92007-08-22 23:21:33 +00001282 # test generic rounding delegation for reals
1283 class TestRound:
1284 def __round__(self):
1285 return 23
1286
1287 class TestNoRound:
1288 pass
1289
1290 self.assertEqual(round(TestRound()), 23)
1291
1292 self.assertRaises(TypeError, round, 1, 2, 3)
1293 self.assertRaises(TypeError, round, TestNoRound())
1294
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001295 t = TestNoRound()
1296 t.__round__ = lambda *args: args
1297 self.assertRaises(TypeError, round, t)
1298 self.assertRaises(TypeError, round, t, 0)
1299
Mark Dickinsonad731b92009-11-09 17:12:30 +00001300 # Some versions of glibc for alpha have a bug that affects
1301 # float -> integer rounding (floor, ceil, rint, round) for
1302 # values in the range [2**52, 2**53). See:
1303 #
1304 # http://sources.redhat.com/bugzilla/show_bug.cgi?id=5350
1305 #
1306 # We skip this test on Linux/alpha if it would fail.
1307 linux_alpha = (platform.system().startswith('Linux') and
1308 platform.machine().startswith('alpha'))
1309 system_round_bug = round(5e15+1) != 5e15+1
1310 @unittest.skipIf(linux_alpha and system_round_bug,
1311 "test will fail; failure is probably due to a "
1312 "buggy system round function")
1313 def test_round_large(self):
1314 # Issue #1869: integral floats should remain unchanged
1315 self.assertEqual(round(5e15-1), 5e15-1)
1316 self.assertEqual(round(5e15), 5e15)
1317 self.assertEqual(round(5e15+1), 5e15+1)
1318 self.assertEqual(round(5e15+2), 5e15+2)
1319 self.assertEqual(round(5e15+3), 5e15+3)
1320
Walter Dörwald919497e2003-01-19 16:23:59 +00001321 def test_setattr(self):
Tim Petersf2715e02003-02-19 02:35:07 +00001322 setattr(sys, 'spam', 1)
1323 self.assertEqual(sys.spam, 1)
1324 self.assertRaises(TypeError, setattr, sys, 1, 'spam')
1325 self.assertRaises(TypeError, setattr)
Walter Dörwald919497e2003-01-19 16:23:59 +00001326
Chris Jerdonek5fae0e52012-11-20 17:45:51 -08001327 # test_str(): see test_unicode.py and test_bytes.py for str() tests.
Walter Dörwald919497e2003-01-19 16:23:59 +00001328
Alex Martellia70b1912003-04-22 08:12:33 +00001329 def test_sum(self):
1330 self.assertEqual(sum([]), 0)
Guido van Rossum805365e2007-05-07 22:24:25 +00001331 self.assertEqual(sum(list(range(2,8))), 27)
1332 self.assertEqual(sum(iter(list(range(2,8)))), 27)
Alex Martellia70b1912003-04-22 08:12:33 +00001333 self.assertEqual(sum(Squares(10)), 285)
1334 self.assertEqual(sum(iter(Squares(10))), 285)
1335 self.assertEqual(sum([[1], [2], [3]], []), [1, 2, 3])
1336
1337 self.assertRaises(TypeError, sum)
1338 self.assertRaises(TypeError, sum, 42)
1339 self.assertRaises(TypeError, sum, ['a', 'b', 'c'])
1340 self.assertRaises(TypeError, sum, ['a', 'b', 'c'], '')
Benjamin Petersonce071ca2011-07-29 14:23:47 -05001341 self.assertRaises(TypeError, sum, [b'a', b'c'], b'')
1342 values = [bytearray(b'a'), bytearray(b'b')]
1343 self.assertRaises(TypeError, sum, values, bytearray(b''))
Alex Martellia70b1912003-04-22 08:12:33 +00001344 self.assertRaises(TypeError, sum, [[1], [2], [3]])
1345 self.assertRaises(TypeError, sum, [{2:3}])
1346 self.assertRaises(TypeError, sum, [{2:3}]*2, {2:3})
1347
1348 class BadSeq:
1349 def __getitem__(self, index):
1350 raise ValueError
1351 self.assertRaises(ValueError, sum, BadSeq())
1352
Mark Dickinson3a22b472009-10-17 21:48:16 +00001353 empty = []
1354 sum(([x] for x in range(10)), empty)
1355 self.assertEqual(empty, [])
1356
Walter Dörwald919497e2003-01-19 16:23:59 +00001357 def test_type(self):
1358 self.assertEqual(type(''), type('123'))
1359 self.assertNotEqual(type(''), type(()))
1360
Guido van Rossumfee7b932005-01-16 00:21:28 +00001361 # We don't want self in vars(), so these are static methods
1362
1363 @staticmethod
Walter Dörwald919497e2003-01-19 16:23:59 +00001364 def get_vars_f0():
1365 return vars()
Walter Dörwald919497e2003-01-19 16:23:59 +00001366
Guido van Rossumfee7b932005-01-16 00:21:28 +00001367 @staticmethod
Walter Dörwald919497e2003-01-19 16:23:59 +00001368 def get_vars_f2():
1369 BuiltinTest.get_vars_f0()
1370 a = 1
1371 b = 2
1372 return vars()
Walter Dörwald919497e2003-01-19 16:23:59 +00001373
Mark Dickinsonfb3dc942010-05-25 19:06:24 +00001374 class C_get_vars(object):
1375 def getDict(self):
1376 return {'a':2}
1377 __dict__ = property(fget=getDict)
1378
Walter Dörwald919497e2003-01-19 16:23:59 +00001379 def test_vars(self):
Raymond Hettingera690a992003-11-16 16:17:49 +00001380 self.assertEqual(set(vars()), set(dir()))
Raymond Hettingera690a992003-11-16 16:17:49 +00001381 self.assertEqual(set(vars(sys)), set(dir(sys)))
Walter Dörwald919497e2003-01-19 16:23:59 +00001382 self.assertEqual(self.get_vars_f0(), {})
1383 self.assertEqual(self.get_vars_f2(), {'a': 1, 'b': 2})
1384 self.assertRaises(TypeError, vars, 42, 42)
1385 self.assertRaises(TypeError, vars, 42)
Mark Dickinsonfb3dc942010-05-25 19:06:24 +00001386 self.assertEqual(vars(self.C_get_vars()), {'a':2})
Walter Dörwald919497e2003-01-19 16:23:59 +00001387
1388 def test_zip(self):
1389 a = (1, 2, 3)
1390 b = (4, 5, 6)
1391 t = [(1, 4), (2, 5), (3, 6)]
Guido van Rossum801f0d72006-08-24 19:48:10 +00001392 self.assertEqual(list(zip(a, b)), t)
Walter Dörwald919497e2003-01-19 16:23:59 +00001393 b = [4, 5, 6]
Guido van Rossum801f0d72006-08-24 19:48:10 +00001394 self.assertEqual(list(zip(a, b)), t)
Walter Dörwald919497e2003-01-19 16:23:59 +00001395 b = (4, 5, 6, 7)
Guido van Rossum801f0d72006-08-24 19:48:10 +00001396 self.assertEqual(list(zip(a, b)), t)
Walter Dörwald919497e2003-01-19 16:23:59 +00001397 class I:
1398 def __getitem__(self, i):
1399 if i < 0 or i > 2: raise IndexError
1400 return i + 4
Guido van Rossum801f0d72006-08-24 19:48:10 +00001401 self.assertEqual(list(zip(a, I())), t)
1402 self.assertEqual(list(zip()), [])
1403 self.assertEqual(list(zip(*[])), [])
Walter Dörwald919497e2003-01-19 16:23:59 +00001404 self.assertRaises(TypeError, zip, None)
1405 class G:
1406 pass
1407 self.assertRaises(TypeError, zip, a, G())
Alexander Belopolskye29e6bf2010-08-16 18:55:46 +00001408 self.assertRaises(RuntimeError, zip, a, TestFailingIter())
Walter Dörwald919497e2003-01-19 16:23:59 +00001409
1410 # Make sure zip doesn't try to allocate a billion elements for the
1411 # result list when one of its arguments doesn't say how long it is.
1412 # A MemoryError is the most likely failure mode.
1413 class SequenceWithoutALength:
1414 def __getitem__(self, i):
1415 if i == 5:
1416 raise IndexError
1417 else:
1418 return i
1419 self.assertEqual(
Guido van Rossum805365e2007-05-07 22:24:25 +00001420 list(zip(SequenceWithoutALength(), range(2**30))),
Walter Dörwald919497e2003-01-19 16:23:59 +00001421 list(enumerate(range(5)))
1422 )
1423
1424 class BadSeq:
1425 def __getitem__(self, i):
1426 if i == 5:
1427 raise ValueError
1428 else:
1429 return i
Guido van Rossum801f0d72006-08-24 19:48:10 +00001430 self.assertRaises(ValueError, list, zip(BadSeq(), BadSeq()))
Walter Dörwald919497e2003-01-19 16:23:59 +00001431
Kristján Valur Jónsson31668b82012-04-03 10:49:41 +00001432 def test_zip_pickle(self):
1433 a = (1, 2, 3)
1434 b = (4, 5, 6)
1435 t = [(1, 4), (2, 5), (3, 6)]
1436 z1 = zip(a, b)
1437 self.check_iter_pickle(z1, t)
1438
Eric Smithe4d63172010-09-13 20:48:43 +00001439 def test_format(self):
1440 # Test the basic machinery of the format() builtin. Don't test
1441 # the specifics of the various formatters
1442 self.assertEqual(format(3, ''), '3')
1443
1444 # Returns some classes to use for various tests. There's
1445 # an old-style version, and a new-style version
1446 def classes_new():
1447 class A(object):
1448 def __init__(self, x):
1449 self.x = x
1450 def __format__(self, format_spec):
1451 return str(self.x) + format_spec
1452 class DerivedFromA(A):
1453 pass
1454
1455 class Simple(object): pass
1456 class DerivedFromSimple(Simple):
1457 def __init__(self, x):
1458 self.x = x
1459 def __format__(self, format_spec):
1460 return str(self.x) + format_spec
1461 class DerivedFromSimple2(DerivedFromSimple): pass
1462 return A, DerivedFromA, DerivedFromSimple, DerivedFromSimple2
1463
1464 def class_test(A, DerivedFromA, DerivedFromSimple, DerivedFromSimple2):
1465 self.assertEqual(format(A(3), 'spec'), '3spec')
1466 self.assertEqual(format(DerivedFromA(4), 'spec'), '4spec')
1467 self.assertEqual(format(DerivedFromSimple(5), 'abc'), '5abc')
1468 self.assertEqual(format(DerivedFromSimple2(10), 'abcdef'),
1469 '10abcdef')
1470
1471 class_test(*classes_new())
1472
1473 def empty_format_spec(value):
1474 # test that:
1475 # format(x, '') == str(x)
1476 # format(x) == str(x)
1477 self.assertEqual(format(value, ""), str(value))
1478 self.assertEqual(format(value), str(value))
1479
1480 # for builtin types, format(x, "") == str(x)
1481 empty_format_spec(17**13)
1482 empty_format_spec(1.0)
1483 empty_format_spec(3.1415e104)
1484 empty_format_spec(-3.1415e104)
1485 empty_format_spec(3.1415e-104)
1486 empty_format_spec(-3.1415e-104)
1487 empty_format_spec(object)
1488 empty_format_spec(None)
1489
1490 # TypeError because self.__format__ returns the wrong type
1491 class BadFormatResult:
1492 def __format__(self, format_spec):
1493 return 1.0
1494 self.assertRaises(TypeError, format, BadFormatResult(), "")
1495
1496 # TypeError because format_spec is not unicode or str
1497 self.assertRaises(TypeError, format, object(), 4)
1498 self.assertRaises(TypeError, format, object(), object())
1499
1500 # tests for object.__format__ really belong elsewhere, but
1501 # there's no good place to put them
1502 x = object().__format__('')
1503 self.assertTrue(x.startswith('<object object at'))
1504
1505 # first argument to object.__format__ must be string
1506 self.assertRaises(TypeError, object().__format__, 3)
1507 self.assertRaises(TypeError, object().__format__, object())
1508 self.assertRaises(TypeError, object().__format__, None)
1509
1510 # --------------------------------------------------------------------
1511 # Issue #7994: object.__format__ with a non-empty format string is
Eric V. Smithb9cd3532011-03-12 10:08:48 -05001512 # deprecated
Andrew Svetlov2cd8ce42012-12-23 14:27:17 +02001513 def test_deprecated_format_string(obj, fmt_str, should_raise):
1514 if should_raise:
1515 self.assertRaises(TypeError, format, obj, fmt_str)
Eric Smithe4d63172010-09-13 20:48:43 +00001516 else:
Andrew Svetlov2cd8ce42012-12-23 14:27:17 +02001517 format(obj, fmt_str)
Eric Smithe4d63172010-09-13 20:48:43 +00001518
1519 fmt_strs = ['', 's']
1520
1521 class A:
1522 def __format__(self, fmt_str):
1523 return format('', fmt_str)
1524
1525 for fmt_str in fmt_strs:
1526 test_deprecated_format_string(A(), fmt_str, False)
1527
1528 class B:
1529 pass
1530
1531 class C(object):
1532 pass
1533
1534 for cls in [object, B, C]:
1535 for fmt_str in fmt_strs:
1536 test_deprecated_format_string(cls(), fmt_str, len(fmt_str) != 0)
1537 # --------------------------------------------------------------------
1538
1539 # make sure we can take a subclass of str as a format spec
1540 class DerivedFromStr(str): pass
1541 self.assertEqual(format(0, DerivedFromStr('10')), ' 0')
1542
Christian Heimes90c3d9b2008-02-23 13:18:03 +00001543 def test_bin(self):
1544 self.assertEqual(bin(0), '0b0')
1545 self.assertEqual(bin(1), '0b1')
1546 self.assertEqual(bin(-1), '-0b1')
1547 self.assertEqual(bin(2**65), '0b1' + '0' * 65)
1548 self.assertEqual(bin(2**65-1), '0b' + '1' * 65)
1549 self.assertEqual(bin(-(2**65)), '-0b1' + '0' * 65)
1550 self.assertEqual(bin(-(2**65-1)), '-0b' + '1' * 65)
1551
Georg Brandl953152f2009-07-22 12:03:59 +00001552 def test_bytearray_translate(self):
1553 x = bytearray(b"abc")
1554 self.assertRaises(ValueError, x.translate, b"1", 1)
1555 self.assertRaises(TypeError, x.translate, b"1"*256, 1)
1556
Benjamin Petersonc4607ae2011-07-29 18:19:43 -05001557 def test_construct_singletons(self):
Benjamin Peterson18d7d7a2011-07-29 18:27:44 -05001558 for const in None, Ellipsis, NotImplemented:
Benjamin Petersonc4607ae2011-07-29 18:19:43 -05001559 tp = type(const)
1560 self.assertIs(tp(), const)
1561 self.assertRaises(TypeError, tp, 1, 2)
1562 self.assertRaises(TypeError, tp, a=1, b=2)
1563
Raymond Hettinger64958a12003-12-17 20:43:33 +00001564class TestSorted(unittest.TestCase):
1565
1566 def test_basic(self):
Guido van Rossum805365e2007-05-07 22:24:25 +00001567 data = list(range(100))
Raymond Hettinger64958a12003-12-17 20:43:33 +00001568 copy = data[:]
1569 random.shuffle(copy)
1570 self.assertEqual(data, sorted(copy))
1571 self.assertNotEqual(data, copy)
1572
1573 data.reverse()
1574 random.shuffle(copy)
Raymond Hettinger64958a12003-12-17 20:43:33 +00001575 self.assertEqual(data, sorted(copy, key=lambda x: -x))
1576 self.assertNotEqual(data, copy)
1577 random.shuffle(copy)
1578 self.assertEqual(data, sorted(copy, reverse=1))
1579 self.assertNotEqual(data, copy)
1580
1581 def test_inputtypes(self):
1582 s = 'abracadabra'
Walter Dörwald1f5947b2007-05-22 16:52:54 +00001583 types = [list, tuple, str]
Walter Dörwald4e41a4b2005-08-03 17:09:04 +00001584 for T in types:
Raymond Hettinger64958a12003-12-17 20:43:33 +00001585 self.assertEqual(sorted(s), sorted(T(s)))
1586
Walter Dörwald1f5947b2007-05-22 16:52:54 +00001587 s = ''.join(set(s)) # unique letters only
1588 types = [str, set, frozenset, list, tuple, dict.fromkeys]
Walter Dörwald4e41a4b2005-08-03 17:09:04 +00001589 for T in types:
Raymond Hettinger64958a12003-12-17 20:43:33 +00001590 self.assertEqual(sorted(s), sorted(T(s)))
1591
1592 def test_baddecorator(self):
1593 data = 'The quick Brown fox Jumped over The lazy Dog'.split()
1594 self.assertRaises(TypeError, sorted, data, None, lambda x,y: 0)
1595
Serhiy Storchaka013bb912014-02-10 18:21:34 +02001596
1597class ShutdownTest(unittest.TestCase):
1598
1599 def test_cleanup(self):
1600 # Issue #19255: builtins are still available at shutdown
1601 code = """if 1:
1602 import builtins
1603 import sys
1604
1605 class C:
1606 def __del__(self):
1607 print("before")
1608 # Check that builtins still exist
1609 len(())
1610 print("after")
1611
1612 c = C()
1613 # Make this module survive until builtins and sys are cleaned
1614 builtins.here = sys.modules[__name__]
1615 sys.here = sys.modules[__name__]
1616 # Create a reference loop so that this module needs to go
1617 # through a GC phase.
1618 here = sys.modules[__name__]
1619 """
1620 rc, out, err = assert_python_ok("-c", code)
1621 self.assertEqual(["before", "after"], out.decode().splitlines())
1622
1623
Zachary Warea4b7a752013-11-24 01:19:09 -06001624def load_tests(loader, tests, pattern):
1625 from doctest import DocTestSuite
1626 tests.addTest(DocTestSuite(builtins))
1627 return tests
Walter Dörwald919497e2003-01-19 16:23:59 +00001628
1629if __name__ == "__main__":
Zachary Warea4b7a752013-11-24 01:19:09 -06001630 unittest.main()