blob: acbc29ce155c0cf1bacf2aaa37cbfd68575bc043 [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
Antoine Pitrou0d776b12011-11-06 00:34:26 +010019try:
Antoine Pitrou772add72011-11-06 02:37:42 +010020 import pty, signal
Antoine Pitrou0d776b12011-11-06 00:34:26 +010021except ImportError:
Antoine Pitrou772add72011-11-06 02:37:42 +010022 pty = signal = None
Guido van Rossum3bead091992-01-27 17:00:37 +000023
Guido van Rossum3bead091992-01-27 17:00:37 +000024
Walter Dörwald919497e2003-01-19 16:23:59 +000025class Squares:
Guido van Rossum3bead091992-01-27 17:00:37 +000026
Walter Dörwald919497e2003-01-19 16:23:59 +000027 def __init__(self, max):
28 self.max = max
29 self.sofar = []
30
31 def __len__(self): return len(self.sofar)
32
33 def __getitem__(self, i):
34 if not 0 <= i < self.max: raise IndexError
35 n = len(self.sofar)
36 while n <= i:
37 self.sofar.append(n*n)
38 n += 1
39 return self.sofar[i]
40
41class StrSquares:
42
43 def __init__(self, max):
44 self.max = max
45 self.sofar = []
46
47 def __len__(self):
48 return len(self.sofar)
49
50 def __getitem__(self, i):
51 if not 0 <= i < self.max:
52 raise IndexError
53 n = len(self.sofar)
54 while n <= i:
55 self.sofar.append(str(n*n))
56 n += 1
57 return self.sofar[i]
58
59class BitBucket:
60 def write(self, line):
61 pass
62
Facundo Batista2336bdd2008-01-19 19:12:01 +000063test_conv_no_sign = [
Walter Dörwald919497e2003-01-19 16:23:59 +000064 ('0', 0),
65 ('1', 1),
66 ('9', 9),
67 ('10', 10),
68 ('99', 99),
69 ('100', 100),
70 ('314', 314),
71 (' 314', 314),
72 ('314 ', 314),
73 (' \t\t 314 \t\t ', 314),
Christian Heimesa37d4c62007-12-04 23:02:19 +000074 (repr(sys.maxsize), sys.maxsize),
Walter Dörwald919497e2003-01-19 16:23:59 +000075 (' 1x', ValueError),
76 (' 1 ', 1),
77 (' 1\02 ', ValueError),
78 ('', ValueError),
79 (' ', ValueError),
Walter Dörwald1f5947b2007-05-22 16:52:54 +000080 (' \t\t ', ValueError),
Guido van Rossumef87d6e2007-05-02 19:09:54 +000081 (str(b'\u0663\u0661\u0664 ','raw-unicode-escape'), 314),
Guido van Rossum84fc66d2007-05-03 17:18:26 +000082 (chr(0x200), ValueError),
Walter Dörwald919497e2003-01-19 16:23:59 +000083]
84
Facundo Batista2336bdd2008-01-19 19:12:01 +000085test_conv_sign = [
86 ('0', 0),
87 ('1', 1),
88 ('9', 9),
89 ('10', 10),
90 ('99', 99),
91 ('100', 100),
92 ('314', 314),
93 (' 314', ValueError),
94 ('314 ', 314),
95 (' \t\t 314 \t\t ', ValueError),
96 (repr(sys.maxsize), sys.maxsize),
97 (' 1x', ValueError),
98 (' 1 ', ValueError),
99 (' 1\02 ', ValueError),
100 ('', ValueError),
101 (' ', ValueError),
102 (' \t\t ', ValueError),
103 (str(b'\u0663\u0661\u0664 ','raw-unicode-escape'), 314),
104 (chr(0x200), ValueError),
105]
106
Raymond Hettinger96229b12005-03-11 06:49:40 +0000107class TestFailingBool:
Jack Diederich4dafcc42006-11-28 19:15:13 +0000108 def __bool__(self):
Raymond Hettinger96229b12005-03-11 06:49:40 +0000109 raise RuntimeError
110
111class TestFailingIter:
112 def __iter__(self):
113 raise RuntimeError
114
Kristján Valur Jónsson31668b82012-04-03 10:49:41 +0000115def filter_char(arg):
116 return ord(arg) > ord("d")
117
118def map_char(arg):
119 return chr(ord(arg)+1)
120
Walter Dörwald919497e2003-01-19 16:23:59 +0000121class BuiltinTest(unittest.TestCase):
Kristján Valur Jónsson31668b82012-04-03 10:49:41 +0000122 # Helper to check picklability
123 def check_iter_pickle(self, it, seq):
124 itorg = it
125 d = pickle.dumps(it)
126 it = pickle.loads(d)
127 self.assertEqual(type(itorg), type(it))
128 self.assertEqual(list(it), seq)
129
130 #test the iterator after dropping one from it
131 it = pickle.loads(d)
132 try:
133 next(it)
134 except StopIteration:
135 return
136 d = pickle.dumps(it)
137 it = pickle.loads(d)
138 self.assertEqual(list(it), seq[1:])
Walter Dörwald919497e2003-01-19 16:23:59 +0000139
140 def test_import(self):
141 __import__('sys')
142 __import__('time')
143 __import__('string')
Guido van Rossumd8faa362007-04-27 19:54:29 +0000144 __import__(name='sys')
145 __import__(name='time', level=0)
Walter Dörwald919497e2003-01-19 16:23:59 +0000146 self.assertRaises(ImportError, __import__, 'spamspam')
147 self.assertRaises(TypeError, __import__, 1, 2, 3, 4)
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000148 self.assertRaises(ValueError, __import__, '')
Guido van Rossumd8faa362007-04-27 19:54:29 +0000149 self.assertRaises(TypeError, __import__, 'sys', name='sys')
Walter Dörwald919497e2003-01-19 16:23:59 +0000150
151 def test_abs(self):
152 # int
153 self.assertEqual(abs(0), 0)
154 self.assertEqual(abs(1234), 1234)
155 self.assertEqual(abs(-1234), 1234)
Christian Heimesa37d4c62007-12-04 23:02:19 +0000156 self.assertTrue(abs(-sys.maxsize-1) > 0)
Walter Dörwald919497e2003-01-19 16:23:59 +0000157 # float
158 self.assertEqual(abs(0.0), 0.0)
159 self.assertEqual(abs(3.14), 3.14)
160 self.assertEqual(abs(-3.14), 3.14)
Walter Dörwald919497e2003-01-19 16:23:59 +0000161 # str
162 self.assertRaises(TypeError, abs, 'a')
Mark Dickinsonfb3dc942010-05-25 19:06:24 +0000163 # bool
164 self.assertEqual(abs(True), 1)
165 self.assertEqual(abs(False), 0)
166 # other
167 self.assertRaises(TypeError, abs)
168 self.assertRaises(TypeError, abs, None)
169 class AbsClass(object):
170 def __abs__(self):
171 return -5
172 self.assertEqual(abs(AbsClass()), -5)
Walter Dörwald919497e2003-01-19 16:23:59 +0000173
Raymond Hettinger96229b12005-03-11 06:49:40 +0000174 def test_all(self):
175 self.assertEqual(all([2, 4, 6]), True)
176 self.assertEqual(all([2, None, 6]), False)
177 self.assertRaises(RuntimeError, all, [2, TestFailingBool(), 6])
178 self.assertRaises(RuntimeError, all, TestFailingIter())
179 self.assertRaises(TypeError, all, 10) # Non-iterable
180 self.assertRaises(TypeError, all) # No args
181 self.assertRaises(TypeError, all, [2, 4, 6], []) # Too many args
182 self.assertEqual(all([]), True) # Empty iterator
Ezio Melotti0f4377c2013-02-21 23:15:40 +0200183 self.assertEqual(all([0, TestFailingBool()]), False)# Short-circuit
Raymond Hettinger96229b12005-03-11 06:49:40 +0000184 S = [50, 60]
185 self.assertEqual(all(x > 42 for x in S), True)
186 S = [50, 40, 60]
187 self.assertEqual(all(x > 42 for x in S), False)
188
189 def test_any(self):
190 self.assertEqual(any([None, None, None]), False)
191 self.assertEqual(any([None, 4, None]), True)
192 self.assertRaises(RuntimeError, any, [None, TestFailingBool(), 6])
R David Murray1acaf0b2013-02-06 09:56:19 -0500193 self.assertRaises(RuntimeError, any, TestFailingIter())
Raymond Hettinger96229b12005-03-11 06:49:40 +0000194 self.assertRaises(TypeError, any, 10) # Non-iterable
195 self.assertRaises(TypeError, any) # No args
196 self.assertRaises(TypeError, any, [2, 4, 6], []) # Too many args
197 self.assertEqual(any([]), False) # Empty iterator
Ezio Melotti0f4377c2013-02-21 23:15:40 +0200198 self.assertEqual(any([1, TestFailingBool()]), True) # Short-circuit
Raymond Hettinger96229b12005-03-11 06:49:40 +0000199 S = [40, 60, 30]
200 self.assertEqual(any(x > 42 for x in S), True)
201 S = [10, 20, 30]
202 self.assertEqual(any(x > 42 for x in S), False)
203
Georg Brandl559e5d72008-06-11 18:37:52 +0000204 def test_ascii(self):
205 self.assertEqual(ascii(''), '\'\'')
206 self.assertEqual(ascii(0), '0')
Georg Brandl559e5d72008-06-11 18:37:52 +0000207 self.assertEqual(ascii(()), '()')
208 self.assertEqual(ascii([]), '[]')
209 self.assertEqual(ascii({}), '{}')
210 a = []
211 a.append(a)
212 self.assertEqual(ascii(a), '[[...]]')
213 a = {}
214 a[0] = a
215 self.assertEqual(ascii(a), '{0: {...}}')
Antoine Pitroue4a18922010-09-09 20:30:23 +0000216 # Advanced checks for unicode strings
217 def _check_uni(s):
218 self.assertEqual(ascii(s), repr(s))
219 _check_uni("'")
220 _check_uni('"')
221 _check_uni('"\'')
222 _check_uni('\0')
223 _check_uni('\r\n\t .')
224 # Unprintable non-ASCII characters
225 _check_uni('\x85')
226 _check_uni('\u1fff')
227 _check_uni('\U00012fff')
228 # Lone surrogates
229 _check_uni('\ud800')
230 _check_uni('\udfff')
231 # Issue #9804: surrogates should be joined even for printable
232 # wide characters (UCS-2 builds).
233 self.assertEqual(ascii('\U0001d121'), "'\\U0001d121'")
234 # All together
235 s = "'\0\"\n\r\t abcd\x85é\U00012fff\uD800\U0001D121xxx."
236 self.assertEqual(ascii(s),
237 r"""'\'\x00"\n\r\t abcd\x85\xe9\U00012fff\ud800\U0001d121xxx.'""")
Georg Brandl559e5d72008-06-11 18:37:52 +0000238
Thomas Wouters89f507f2006-12-13 04:49:30 +0000239 def test_neg(self):
Christian Heimesa37d4c62007-12-04 23:02:19 +0000240 x = -sys.maxsize-1
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000241 self.assertTrue(isinstance(x, int))
Christian Heimesa37d4c62007-12-04 23:02:19 +0000242 self.assertEqual(-x, sys.maxsize+1)
Thomas Wouters89f507f2006-12-13 04:49:30 +0000243
Walter Dörwald919497e2003-01-19 16:23:59 +0000244 def test_callable(self):
Antoine Pitroue71362d2010-11-27 22:00:11 +0000245 self.assertTrue(callable(len))
246 self.assertFalse(callable("a"))
247 self.assertTrue(callable(callable))
248 self.assertTrue(callable(lambda x, y: x + y))
249 self.assertFalse(callable(__builtins__))
Walter Dörwald919497e2003-01-19 16:23:59 +0000250 def f(): pass
Antoine Pitroue71362d2010-11-27 22:00:11 +0000251 self.assertTrue(callable(f))
252
253 class C1:
Walter Dörwald919497e2003-01-19 16:23:59 +0000254 def meth(self): pass
Antoine Pitroue71362d2010-11-27 22:00:11 +0000255 self.assertTrue(callable(C1))
256 c = C1()
257 self.assertTrue(callable(c.meth))
258 self.assertFalse(callable(c))
259
260 # __call__ is looked up on the class, not the instance
261 c.__call__ = None
262 self.assertFalse(callable(c))
263 c.__call__ = lambda self: 0
264 self.assertFalse(callable(c))
265 del c.__call__
266 self.assertFalse(callable(c))
267
268 class C2(object):
Walter Dörwald919497e2003-01-19 16:23:59 +0000269 def __call__(self): pass
Antoine Pitroue71362d2010-11-27 22:00:11 +0000270 c2 = C2()
271 self.assertTrue(callable(c2))
272 c2.__call__ = None
273 self.assertTrue(callable(c2))
274 class C3(C2): pass
275 c3 = C3()
276 self.assertTrue(callable(c3))
Walter Dörwald919497e2003-01-19 16:23:59 +0000277
278 def test_chr(self):
279 self.assertEqual(chr(32), ' ')
280 self.assertEqual(chr(65), 'A')
281 self.assertEqual(chr(97), 'a')
282 self.assertEqual(chr(0xff), '\xff')
Guido van Rossum572dbf82007-04-27 23:53:51 +0000283 self.assertRaises(ValueError, chr, 1<<24)
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000284 self.assertEqual(chr(sys.maxunicode),
Ezio Melottia9860ae2011-10-04 19:06:00 +0300285 str('\\U0010ffff'.encode("ascii"), 'unicode-escape'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000286 self.assertRaises(TypeError, chr)
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000287 self.assertEqual(chr(0x0000FFFF), "\U0000FFFF")
288 self.assertEqual(chr(0x00010000), "\U00010000")
289 self.assertEqual(chr(0x00010001), "\U00010001")
290 self.assertEqual(chr(0x000FFFFE), "\U000FFFFE")
291 self.assertEqual(chr(0x000FFFFF), "\U000FFFFF")
292 self.assertEqual(chr(0x00100000), "\U00100000")
293 self.assertEqual(chr(0x00100001), "\U00100001")
294 self.assertEqual(chr(0x0010FFFE), "\U0010FFFE")
295 self.assertEqual(chr(0x0010FFFF), "\U0010FFFF")
296 self.assertRaises(ValueError, chr, -1)
297 self.assertRaises(ValueError, chr, 0x00110000)
Amaury Forgeot d'Arc7888d082008-08-01 01:06:32 +0000298 self.assertRaises((OverflowError, ValueError), chr, 2**32)
Walter Dörwald919497e2003-01-19 16:23:59 +0000299
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000300 def test_cmp(self):
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000301 self.assertTrue(not hasattr(builtins, "cmp"))
Walter Dörwald919497e2003-01-19 16:23:59 +0000302
Walter Dörwald919497e2003-01-19 16:23:59 +0000303 def test_compile(self):
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000304 compile('print(1)\n', '', 'exec')
Amaury Forgeot d'Arcaf593462007-11-22 20:53:01 +0000305 bom = b'\xef\xbb\xbf'
306 compile(bom + b'print(1)\n', '', 'exec')
Guido van Rossumd8faa362007-04-27 19:54:29 +0000307 compile(source='pass', filename='?', mode='exec')
308 compile(dont_inherit=0, filename='tmp', source='0', mode='eval')
309 compile('pass', '?', dont_inherit=1, mode='exec')
Benjamin Peterson60320cb2008-09-26 21:49:22 +0000310 compile(memoryview(b"text"), "name", "exec")
Walter Dörwald919497e2003-01-19 16:23:59 +0000311 self.assertRaises(TypeError, compile)
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000312 self.assertRaises(ValueError, compile, 'print(42)\n', '<string>', 'badmode')
313 self.assertRaises(ValueError, compile, 'print(42)\n', '<string>', 'single', 0xff)
Neal Norwitzfcf44352005-11-27 20:37:43 +0000314 self.assertRaises(TypeError, compile, chr(0), 'f', 'exec')
Guido van Rossumd8faa362007-04-27 19:54:29 +0000315 self.assertRaises(TypeError, compile, 'pass', '?', 'exec',
316 mode='eval', source='0', filename='tmp')
Walter Dörwald1f5947b2007-05-22 16:52:54 +0000317 compile('print("\xe5")\n', '', 'exec')
318 self.assertRaises(TypeError, compile, chr(0), 'f', 'exec')
319 self.assertRaises(ValueError, compile, str('a = 1'), 'f', 'bad')
Guido van Rossumd8faa362007-04-27 19:54:29 +0000320
Georg Brandl8334fd92010-12-04 10:26:46 +0000321 # test the optimize argument
322
323 codestr = '''def f():
324 """doc"""
325 try:
326 assert False
327 except AssertionError:
328 return (True, f.__doc__)
329 else:
330 return (False, f.__doc__)
331 '''
332 def f(): """doc"""
333 values = [(-1, __debug__, f.__doc__),
334 (0, True, 'doc'),
335 (1, False, 'doc'),
336 (2, False, None)]
337 for optval, debugval, docstring in values:
338 # test both direct compilation and compilation via AST
339 codeobjs = []
340 codeobjs.append(compile(codestr, "<test>", "exec", optimize=optval))
341 tree = ast.parse(codestr)
342 codeobjs.append(compile(tree, "<test>", "exec", optimize=optval))
343 for code in codeobjs:
344 ns = {}
345 exec(code, ns)
346 rv = ns['f']()
347 self.assertEqual(rv, (debugval, docstring))
348
Walter Dörwald919497e2003-01-19 16:23:59 +0000349 def test_delattr(self):
Walter Dörwald919497e2003-01-19 16:23:59 +0000350 sys.spam = 1
351 delattr(sys, 'spam')
352 self.assertRaises(TypeError, delattr)
353
354 def test_dir(self):
Georg Brandle32b4222007-03-10 22:13:27 +0000355 # dir(wrong number of arguments)
Walter Dörwald919497e2003-01-19 16:23:59 +0000356 self.assertRaises(TypeError, dir, 42, 42)
357
Georg Brandle32b4222007-03-10 22:13:27 +0000358 # dir() - local scope
359 local_var = 1
Benjamin Peterson577473f2010-01-19 00:09:57 +0000360 self.assertIn('local_var', dir())
Georg Brandle32b4222007-03-10 22:13:27 +0000361
362 # dir(module)
Benjamin Peterson577473f2010-01-19 00:09:57 +0000363 self.assertIn('exit', dir(sys))
Georg Brandle32b4222007-03-10 22:13:27 +0000364
365 # dir(module_with_invalid__dict__)
Georg Brandle32b4222007-03-10 22:13:27 +0000366 class Foo(types.ModuleType):
367 __dict__ = 8
368 f = Foo("foo")
369 self.assertRaises(TypeError, dir, f)
370
371 # dir(type)
Benjamin Peterson577473f2010-01-19 00:09:57 +0000372 self.assertIn("strip", dir(str))
373 self.assertNotIn("__mro__", dir(str))
Georg Brandle32b4222007-03-10 22:13:27 +0000374
375 # dir(obj)
376 class Foo(object):
377 def __init__(self):
378 self.x = 7
379 self.y = 8
380 self.z = 9
381 f = Foo()
Benjamin Peterson577473f2010-01-19 00:09:57 +0000382 self.assertIn("y", dir(f))
Georg Brandle32b4222007-03-10 22:13:27 +0000383
384 # dir(obj_no__dict__)
385 class Foo(object):
386 __slots__ = []
387 f = Foo()
Benjamin Peterson577473f2010-01-19 00:09:57 +0000388 self.assertIn("__repr__", dir(f))
Georg Brandle32b4222007-03-10 22:13:27 +0000389
390 # dir(obj_no__class__with__dict__)
391 # (an ugly trick to cause getattr(f, "__class__") to fail)
392 class Foo(object):
393 __slots__ = ["__class__", "__dict__"]
394 def __init__(self):
395 self.bar = "wow"
396 f = Foo()
Benjamin Peterson577473f2010-01-19 00:09:57 +0000397 self.assertNotIn("__repr__", dir(f))
398 self.assertIn("bar", dir(f))
Georg Brandle32b4222007-03-10 22:13:27 +0000399
400 # dir(obj_using __dir__)
401 class Foo(object):
402 def __dir__(self):
403 return ["kan", "ga", "roo"]
404 f = Foo()
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000405 self.assertTrue(dir(f) == ["ga", "kan", "roo"])
Georg Brandle32b4222007-03-10 22:13:27 +0000406
Benjamin Peterson3bbb7222011-06-11 16:12:08 -0500407 # dir(obj__dir__tuple)
408 class Foo(object):
409 def __dir__(self):
410 return ("b", "c", "a")
411 res = dir(Foo())
412 self.assertIsInstance(res, list)
413 self.assertTrue(res == ["a", "b", "c"])
414
415 # dir(obj__dir__not_sequence)
Georg Brandle32b4222007-03-10 22:13:27 +0000416 class Foo(object):
417 def __dir__(self):
418 return 7
419 f = Foo()
420 self.assertRaises(TypeError, dir, f)
421
Collin Winter3eed7652007-08-14 17:53:54 +0000422 # dir(traceback)
423 try:
424 raise IndexError
425 except:
426 self.assertEqual(len(dir(sys.exc_info()[2])), 4)
427
Benjamin Petersondac9ace2011-05-25 09:33:37 -0500428 # test that object has a __dir__()
429 self.assertEqual(sorted([].__dir__()), dir([]))
Collin Winter3eed7652007-08-14 17:53:54 +0000430
Walter Dörwald919497e2003-01-19 16:23:59 +0000431 def test_divmod(self):
432 self.assertEqual(divmod(12, 7), (1, 5))
433 self.assertEqual(divmod(-12, 7), (-2, 2))
434 self.assertEqual(divmod(12, -7), (-2, -2))
435 self.assertEqual(divmod(-12, -7), (1, -5))
436
Mark Dickinson5c2db372009-12-05 20:28:34 +0000437 self.assertEqual(divmod(-sys.maxsize-1, -1), (sys.maxsize+1, 0))
Raymond Hettinger5ea7e312004-09-30 07:47:20 +0000438
Eli Bendersky67ebabd2011-02-25 10:14:17 +0000439 for num, denom, exp_result in [ (3.25, 1.0, (3.0, 0.25)),
440 (-3.25, 1.0, (-4.0, 0.75)),
441 (3.25, -1.0, (-4.0, -0.75)),
442 (-3.25, -1.0, (3.0, -0.25))]:
443 result = divmod(num, denom)
444 self.assertAlmostEqual(result[0], exp_result[0])
445 self.assertAlmostEqual(result[1], exp_result[1])
Walter Dörwald919497e2003-01-19 16:23:59 +0000446
447 self.assertRaises(TypeError, divmod)
448
449 def test_eval(self):
450 self.assertEqual(eval('1+1'), 2)
451 self.assertEqual(eval(' 1+1\n'), 2)
452 globals = {'a': 1, 'b': 2}
453 locals = {'b': 200, 'c': 300}
454 self.assertEqual(eval('a', globals) , 1)
455 self.assertEqual(eval('a', globals, locals), 1)
456 self.assertEqual(eval('b', globals, locals), 200)
457 self.assertEqual(eval('c', globals, locals), 300)
Walter Dörwald919497e2003-01-19 16:23:59 +0000458 globals = {'a': 1, 'b': 2}
459 locals = {'b': 200, 'c': 300}
Amaury Forgeot d'Arcaf593462007-11-22 20:53:01 +0000460 bom = b'\xef\xbb\xbf'
461 self.assertEqual(eval(bom + b'a', globals, locals), 1)
Walter Dörwald1f5947b2007-05-22 16:52:54 +0000462 self.assertEqual(eval('"\xe5"', globals), "\xe5")
Walter Dörwald919497e2003-01-19 16:23:59 +0000463 self.assertRaises(TypeError, eval)
464 self.assertRaises(TypeError, eval, ())
Amaury Forgeot d'Arcaf593462007-11-22 20:53:01 +0000465 self.assertRaises(SyntaxError, eval, bom[:2] + b'a')
Walter Dörwald919497e2003-01-19 16:23:59 +0000466
Benjamin Peterson92722792012-12-15 12:51:05 -0500467 class X:
468 def __getitem__(self, key):
469 raise ValueError
470 self.assertRaises(ValueError, eval, "foo", {}, X())
471
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000472 def test_general_eval(self):
473 # Tests that general mappings can be used for the locals argument
474
475 class M:
476 "Test mapping interface versus possible calls from eval()."
477 def __getitem__(self, key):
478 if key == 'a':
479 return 12
480 raise KeyError
Guido van Rossumcd70eee2007-02-11 18:53:00 +0000481 def keys(self):
482 return list('xyz')
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000483
484 m = M()
485 g = globals()
486 self.assertEqual(eval('a', g, m), 12)
487 self.assertRaises(NameError, eval, 'b', g, m)
488 self.assertEqual(eval('dir()', g, m), list('xyz'))
489 self.assertEqual(eval('globals()', g, m), g)
490 self.assertEqual(eval('locals()', g, m), m)
Raymond Hettinger513ffe82004-07-06 13:44:41 +0000491 self.assertRaises(TypeError, eval, 'a', m)
Raymond Hettinger66bd2332004-08-02 08:30:07 +0000492 class A:
493 "Non-mapping"
494 pass
495 m = A()
496 self.assertRaises(TypeError, eval, 'a', g, m)
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000497
498 # Verify that dict subclasses work as well
499 class D(dict):
500 def __getitem__(self, key):
501 if key == 'a':
502 return 12
503 return dict.__getitem__(self, key)
Guido van Rossumcd70eee2007-02-11 18:53:00 +0000504 def keys(self):
505 return list('xyz')
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000506
507 d = D()
508 self.assertEqual(eval('a', g, d), 12)
509 self.assertRaises(NameError, eval, 'b', g, d)
510 self.assertEqual(eval('dir()', g, d), list('xyz'))
511 self.assertEqual(eval('globals()', g, d), g)
512 self.assertEqual(eval('locals()', g, d), d)
513
514 # Verify locals stores (used by list comps)
515 eval('[locals() for i in (2,3)]', g, d)
Raymond Hettingerf80680d2008-02-06 00:07:11 +0000516 eval('[locals() for i in (2,3)]', g, collections.UserDict())
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000517
518 class SpreadSheet:
519 "Sample application showing nested, calculated lookups."
520 _cells = {}
521 def __setitem__(self, key, formula):
522 self._cells[key] = formula
Thomas Wouters73e5a5b2006-06-08 15:35:45 +0000523 def __getitem__(self, key):
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000524 return eval(self._cells[key], globals(), self)
525
526 ss = SpreadSheet()
527 ss['a1'] = '5'
528 ss['a2'] = 'a1*6'
529 ss['a3'] = 'a2*7'
530 self.assertEqual(ss['a3'], 210)
531
Raymond Hettinger2a7dede2004-08-07 04:55:30 +0000532 # Verify that dir() catches a non-list returned by eval
533 # SF bug #1004669
534 class C:
535 def __getitem__(self, item):
536 raise KeyError(item)
Guido van Rossumcd70eee2007-02-11 18:53:00 +0000537 def keys(self):
538 return 1 # used to be 'a' but that's no longer an error
Raymond Hettinger2a7dede2004-08-07 04:55:30 +0000539 self.assertRaises(TypeError, eval, 'dir()', globals(), C())
540
Georg Brandl7cae87c2006-09-06 06:51:57 +0000541 def test_exec(self):
542 g = {}
543 exec('z = 1', g)
544 if '__builtins__' in g:
545 del g['__builtins__']
546 self.assertEqual(g, {'z': 1})
547
Guido van Rossumef87d6e2007-05-02 19:09:54 +0000548 exec('z = 1+1', g)
Georg Brandl7cae87c2006-09-06 06:51:57 +0000549 if '__builtins__' in g:
550 del g['__builtins__']
551 self.assertEqual(g, {'z': 2})
552 g = {}
553 l = {}
554
Brett Cannon77628992010-03-20 20:59:33 +0000555 with check_warnings():
556 warnings.filterwarnings("ignore", "global statement",
557 module="<string>")
558 exec('global a; a = 1; b = 2', g, l)
Georg Brandl7cae87c2006-09-06 06:51:57 +0000559 if '__builtins__' in g:
560 del g['__builtins__']
561 if '__builtins__' in l:
562 del l['__builtins__']
563 self.assertEqual((g, l), ({'a': 1}, {'b': 2}))
564
Victor Stinnerb0b22422012-04-19 00:57:45 +0200565 def test_exec_globals(self):
566 code = compile("print('Hello World!')", "", "exec")
567 # no builtin function
568 self.assertRaisesRegex(NameError, "name 'print' is not defined",
569 exec, code, {'__builtins__': {}})
570 # __builtins__ must be a mapping type
571 self.assertRaises(TypeError,
572 exec, code, {'__builtins__': 123})
573
574 # no __build_class__ function
575 code = compile("class A: pass", "", "exec")
576 self.assertRaisesRegex(NameError, "__build_class__ not found",
577 exec, code, {'__builtins__': {}})
578
579 class frozendict_error(Exception):
580 pass
581
582 class frozendict(dict):
583 def __setitem__(self, key, value):
584 raise frozendict_error("frozendict is readonly")
585
586 # read-only builtins
Brett Cannon2f9f0562013-06-15 23:24:11 -0400587 if isinstance(__builtins__, types.ModuleType):
588 frozen_builtins = frozendict(__builtins__.__dict__)
589 else:
590 frozen_builtins = frozendict(__builtins__)
Victor Stinnerb0b22422012-04-19 00:57:45 +0200591 code = compile("__builtins__['superglobal']=2; print(superglobal)", "test", "exec")
592 self.assertRaises(frozendict_error,
593 exec, code, {'__builtins__': frozen_builtins})
594
595 # read-only globals
596 namespace = frozendict({})
597 code = compile("x=1", "test", "exec")
598 self.assertRaises(frozendict_error,
599 exec, code, namespace)
600
Amaury Forgeot d'Arc9ed77352008-04-04 23:25:27 +0000601 def test_exec_redirected(self):
602 savestdout = sys.stdout
603 sys.stdout = None # Whatever that cannot flush()
604 try:
605 # Used to raise SystemError('error return without exception set')
606 exec('a')
607 except NameError:
608 pass
609 finally:
610 sys.stdout = savestdout
611
Walter Dörwald919497e2003-01-19 16:23:59 +0000612 def test_filter(self):
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000613 self.assertEqual(list(filter(lambda c: 'a' <= c <= 'z', 'Hello World')), list('elloorld'))
614 self.assertEqual(list(filter(None, [1, 'hello', [], [3], '', None, 9, 0])), [1, 'hello', [3], 9])
615 self.assertEqual(list(filter(lambda x: x > 0, [1, -3, 9, 0, 2])), [1, 9, 2])
616 self.assertEqual(list(filter(None, Squares(10))), [1, 4, 9, 16, 25, 36, 49, 64, 81])
617 self.assertEqual(list(filter(lambda x: x%2, Squares(10))), [1, 9, 25, 49, 81])
Walter Dörwald919497e2003-01-19 16:23:59 +0000618 def identity(item):
619 return 1
620 filter(identity, Squares(5))
621 self.assertRaises(TypeError, filter)
622 class BadSeq(object):
Tim Petersf2715e02003-02-19 02:35:07 +0000623 def __getitem__(self, index):
624 if index<4:
625 return 42
626 raise ValueError
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000627 self.assertRaises(ValueError, list, filter(lambda x: x, BadSeq()))
Walter Dörwald919497e2003-01-19 16:23:59 +0000628 def badfunc():
629 pass
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000630 self.assertRaises(TypeError, list, filter(badfunc, range(5)))
Walter Dörwald919497e2003-01-19 16:23:59 +0000631
Walter Dörwaldbf517072003-01-27 15:57:14 +0000632 # test bltinmodule.c::filtertuple()
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000633 self.assertEqual(list(filter(None, (1, 2))), [1, 2])
634 self.assertEqual(list(filter(lambda x: x>=3, (1, 2, 3, 4))), [3, 4])
635 self.assertRaises(TypeError, list, filter(42, (1, 2)))
Walter Dörwaldc3da83f2003-02-04 20:24:45 +0000636
Kristján Valur Jónsson31668b82012-04-03 10:49:41 +0000637 def test_filter_pickle(self):
638 f1 = filter(filter_char, "abcdeabcde")
639 f2 = filter(filter_char, "abcdeabcde")
640 self.check_iter_pickle(f1, list(f2))
641
Walter Dörwald919497e2003-01-19 16:23:59 +0000642 def test_getattr(self):
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000643 self.assertTrue(getattr(sys, 'stdout') is sys.stdout)
Walter Dörwald919497e2003-01-19 16:23:59 +0000644 self.assertRaises(TypeError, getattr, sys, 1)
645 self.assertRaises(TypeError, getattr, sys, 1, "foo")
646 self.assertRaises(TypeError, getattr)
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000647 self.assertRaises(AttributeError, getattr, sys, chr(sys.maxunicode))
Victor Stinner624dbf62010-03-12 17:17:58 +0000648 # unicode surrogates are not encodable to the default encoding (utf8)
649 self.assertRaises(AttributeError, getattr, 1, "\uDAD1\uD51E")
Walter Dörwald919497e2003-01-19 16:23:59 +0000650
651 def test_hasattr(self):
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000652 self.assertTrue(hasattr(sys, 'stdout'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000653 self.assertRaises(TypeError, hasattr, sys, 1)
654 self.assertRaises(TypeError, hasattr)
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000655 self.assertEqual(False, hasattr(sys, chr(sys.maxunicode)))
Walter Dörwald919497e2003-01-19 16:23:59 +0000656
Benjamin Peterson17689992010-08-24 03:26:23 +0000657 # Check that hasattr propagates all exceptions outside of
658 # AttributeError.
Alexandre Vassalottieca20b62008-05-16 02:54:33 +0000659 class A:
660 def __getattr__(self, what):
Benjamin Peterson17689992010-08-24 03:26:23 +0000661 raise SystemExit
662 self.assertRaises(SystemExit, hasattr, A(), "b")
Alexandre Vassalottieca20b62008-05-16 02:54:33 +0000663 class B:
664 def __getattr__(self, what):
Benjamin Peterson17689992010-08-24 03:26:23 +0000665 raise ValueError
666 self.assertRaises(ValueError, hasattr, B(), "b")
Alexandre Vassalottieca20b62008-05-16 02:54:33 +0000667
Walter Dörwald919497e2003-01-19 16:23:59 +0000668 def test_hash(self):
669 hash(None)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000670 self.assertEqual(hash(1), hash(1))
Walter Dörwald919497e2003-01-19 16:23:59 +0000671 self.assertEqual(hash(1), hash(1.0))
672 hash('spam')
Guido van Rossum98297ee2007-11-06 21:34:58 +0000673 self.assertEqual(hash('spam'), hash(b'spam'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000674 hash((0,1,2,3))
675 def f(): pass
676 self.assertRaises(TypeError, hash, [])
677 self.assertRaises(TypeError, hash, {})
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000678 # Bug 1536021: Allow hash to return long objects
679 class X:
680 def __hash__(self):
681 return 2**100
Ezio Melottib3aedd42010-11-20 19:04:17 +0000682 self.assertEqual(type(hash(X())), int)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000683 class Z(int):
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000684 def __hash__(self):
685 return self
Ezio Melottib3aedd42010-11-20 19:04:17 +0000686 self.assertEqual(hash(Z(42)), hash(42))
Walter Dörwald919497e2003-01-19 16:23:59 +0000687
688 def test_hex(self):
689 self.assertEqual(hex(16), '0x10')
Guido van Rossume2a383d2007-01-15 16:59:06 +0000690 self.assertEqual(hex(-16), '-0x10')
Walter Dörwald919497e2003-01-19 16:23:59 +0000691 self.assertRaises(TypeError, hex, {})
692
693 def test_id(self):
694 id(None)
695 id(1)
Walter Dörwald919497e2003-01-19 16:23:59 +0000696 id(1.0)
697 id('spam')
698 id((0,1,2,3))
699 id([0,1,2,3])
700 id({'spam': 1, 'eggs': 2, 'ham': 3})
701
Guido van Rossuma88a0332007-02-26 16:59:55 +0000702 # Test input() later, alphabetized as if it were raw_input
703
Walter Dörwald919497e2003-01-19 16:23:59 +0000704 def test_iter(self):
705 self.assertRaises(TypeError, iter)
706 self.assertRaises(TypeError, iter, 42, 42)
707 lists = [("1", "2"), ["1", "2"], "12"]
Walter Dörwald919497e2003-01-19 16:23:59 +0000708 for l in lists:
709 i = iter(l)
Georg Brandla18af4e2007-04-21 15:47:16 +0000710 self.assertEqual(next(i), '1')
711 self.assertEqual(next(i), '2')
712 self.assertRaises(StopIteration, next, i)
Walter Dörwald919497e2003-01-19 16:23:59 +0000713
714 def test_isinstance(self):
715 class C:
716 pass
717 class D(C):
718 pass
719 class E:
720 pass
721 c = C()
722 d = D()
723 e = E()
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000724 self.assertTrue(isinstance(c, C))
725 self.assertTrue(isinstance(d, C))
726 self.assertTrue(not isinstance(e, C))
727 self.assertTrue(not isinstance(c, D))
728 self.assertTrue(not isinstance('foo', E))
Walter Dörwald919497e2003-01-19 16:23:59 +0000729 self.assertRaises(TypeError, isinstance, E, 'foo')
730 self.assertRaises(TypeError, isinstance)
731
732 def test_issubclass(self):
733 class C:
734 pass
735 class D(C):
736 pass
737 class E:
738 pass
739 c = C()
740 d = D()
741 e = E()
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000742 self.assertTrue(issubclass(D, C))
743 self.assertTrue(issubclass(C, C))
744 self.assertTrue(not issubclass(C, D))
Walter Dörwald919497e2003-01-19 16:23:59 +0000745 self.assertRaises(TypeError, issubclass, 'foo', E)
746 self.assertRaises(TypeError, issubclass, E, 'foo')
747 self.assertRaises(TypeError, issubclass)
748
749 def test_len(self):
750 self.assertEqual(len('123'), 3)
751 self.assertEqual(len(()), 0)
752 self.assertEqual(len((1, 2, 3, 4)), 4)
753 self.assertEqual(len([1, 2, 3, 4]), 4)
754 self.assertEqual(len({}), 0)
755 self.assertEqual(len({'a':1, 'b': 2}), 2)
756 class BadSeq:
757 def __len__(self):
758 raise ValueError
759 self.assertRaises(ValueError, len, BadSeq())
Benjamin Petersonee1ae7c2009-02-08 21:07:20 +0000760 class InvalidLen:
761 def __len__(self):
762 return None
763 self.assertRaises(TypeError, len, InvalidLen())
764 class FloatLen:
765 def __len__(self):
766 return 4.5
767 self.assertRaises(TypeError, len, FloatLen())
768 class HugeLen:
769 def __len__(self):
770 return sys.maxsize + 1
771 self.assertRaises(OverflowError, len, HugeLen())
Mark Dickinsonfb3dc942010-05-25 19:06:24 +0000772 class NoLenMethod(object): pass
773 self.assertRaises(TypeError, len, NoLenMethod())
Walter Dörwald919497e2003-01-19 16:23:59 +0000774
Walter Dörwald919497e2003-01-19 16:23:59 +0000775 def test_map(self):
776 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000777 list(map(lambda x: x*x, range(1,4))),
Walter Dörwald919497e2003-01-19 16:23:59 +0000778 [1, 4, 9]
779 )
780 try:
781 from math import sqrt
782 except ImportError:
783 def sqrt(x):
784 return pow(x, 0.5)
785 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000786 list(map(lambda x: list(map(sqrt, x)), [[16, 4], [81, 9]])),
Walter Dörwald919497e2003-01-19 16:23:59 +0000787 [[4.0, 2.0], [9.0, 3.0]]
788 )
789 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000790 list(map(lambda x, y: x+y, [1,3,2], [9,1,4])),
Walter Dörwald919497e2003-01-19 16:23:59 +0000791 [10, 4, 6]
792 )
793
794 def plus(*v):
795 accu = 0
796 for i in v: accu = accu + i
797 return accu
798 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000799 list(map(plus, [1, 3, 7])),
Walter Dörwald919497e2003-01-19 16:23:59 +0000800 [1, 3, 7]
801 )
802 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000803 list(map(plus, [1, 3, 7], [4, 9, 2])),
Walter Dörwald919497e2003-01-19 16:23:59 +0000804 [1+4, 3+9, 7+2]
805 )
806 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000807 list(map(plus, [1, 3, 7], [4, 9, 2], [1, 1, 0])),
Walter Dörwald919497e2003-01-19 16:23:59 +0000808 [1+4+1, 3+9+1, 7+2+0]
809 )
810 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000811 list(map(int, Squares(10))),
Walter Dörwald919497e2003-01-19 16:23:59 +0000812 [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
813 )
Guido van Rossum47b9ff62006-08-24 00:41:19 +0000814 def Max(a, b):
815 if a is None:
816 return b
817 if b is None:
818 return a
819 return max(a, b)
Walter Dörwald919497e2003-01-19 16:23:59 +0000820 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000821 list(map(Max, Squares(3), Squares(2))),
822 [0, 1]
Walter Dörwald919497e2003-01-19 16:23:59 +0000823 )
824 self.assertRaises(TypeError, map)
825 self.assertRaises(TypeError, map, lambda x: x, 42)
Walter Dörwald919497e2003-01-19 16:23:59 +0000826 class BadSeq:
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000827 def __iter__(self):
Walter Dörwald919497e2003-01-19 16:23:59 +0000828 raise ValueError
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000829 yield None
830 self.assertRaises(ValueError, list, map(lambda x: x, BadSeq()))
Neal Norwitzfcf44352005-11-27 20:37:43 +0000831 def badfunc(x):
832 raise RuntimeError
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000833 self.assertRaises(RuntimeError, list, map(badfunc, range(5)))
Walter Dörwald919497e2003-01-19 16:23:59 +0000834
Kristján Valur Jónsson31668b82012-04-03 10:49:41 +0000835 def test_map_pickle(self):
836 m1 = map(map_char, "Is this the real life?")
837 m2 = map(map_char, "Is this the real life?")
838 self.check_iter_pickle(m1, list(m2))
839
Walter Dörwald919497e2003-01-19 16:23:59 +0000840 def test_max(self):
841 self.assertEqual(max('123123'), '3')
842 self.assertEqual(max(1, 2, 3), 3)
843 self.assertEqual(max((1, 2, 3, 1, 2, 3)), 3)
844 self.assertEqual(max([1, 2, 3, 1, 2, 3]), 3)
845
Guido van Rossume2a383d2007-01-15 16:59:06 +0000846 self.assertEqual(max(1, 2, 3.0), 3.0)
847 self.assertEqual(max(1, 2.0, 3), 3)
848 self.assertEqual(max(1.0, 2, 3), 3)
Walter Dörwald919497e2003-01-19 16:23:59 +0000849
Raymond Hettinger4d6018f2013-06-24 22:43:02 -0700850 self.assertRaises(TypeError, max)
851 self.assertRaises(TypeError, max, 42)
852 self.assertRaises(ValueError, max, ())
853 class BadSeq:
854 def __getitem__(self, index):
855 raise ValueError
856 self.assertRaises(ValueError, max, BadSeq())
857
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +0000858 for stmt in (
859 "max(key=int)", # no args
Raymond Hettinger4d6018f2013-06-24 22:43:02 -0700860 "max(default=None)",
861 "max(1, 2, default=None)", # require container for default
862 "max(default=None, key=int)",
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +0000863 "max(1, key=int)", # single arg not iterable
864 "max(1, 2, keystone=int)", # wrong keyword
865 "max(1, 2, key=int, abc=int)", # two many keywords
866 "max(1, 2, key=1)", # keyfunc is not callable
867 ):
Tim Peters7f061872004-12-07 21:17:46 +0000868 try:
Georg Brandl7cae87c2006-09-06 06:51:57 +0000869 exec(stmt, globals())
Tim Peters7f061872004-12-07 21:17:46 +0000870 except TypeError:
871 pass
872 else:
873 self.fail(stmt)
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +0000874
875 self.assertEqual(max((1,), key=neg), 1) # one elem iterable
876 self.assertEqual(max((1,2), key=neg), 1) # two elem iterable
877 self.assertEqual(max(1, 2, key=neg), 1) # two elems
878
Raymond Hettinger4d6018f2013-06-24 22:43:02 -0700879 self.assertEqual(max((), default=None), None) # zero elem iterable
880 self.assertEqual(max((1,), default=None), 1) # one elem iterable
881 self.assertEqual(max((1,2), default=None), 2) # two elem iterable
882
883 self.assertEqual(max((), default=1, key=neg), 1)
884 self.assertEqual(max((1, 2), default=3, key=neg), 1)
885
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +0000886 data = [random.randrange(200) for i in range(100)]
887 keys = dict((elem, random.randrange(50)) for elem in data)
888 f = keys.__getitem__
889 self.assertEqual(max(data, key=f),
890 sorted(reversed(data), key=f)[-1])
891
Walter Dörwald919497e2003-01-19 16:23:59 +0000892 def test_min(self):
893 self.assertEqual(min('123123'), '1')
894 self.assertEqual(min(1, 2, 3), 1)
895 self.assertEqual(min((1, 2, 3, 1, 2, 3)), 1)
896 self.assertEqual(min([1, 2, 3, 1, 2, 3]), 1)
897
Guido van Rossume2a383d2007-01-15 16:59:06 +0000898 self.assertEqual(min(1, 2, 3.0), 1)
899 self.assertEqual(min(1, 2.0, 3), 1)
900 self.assertEqual(min(1.0, 2, 3), 1.0)
Walter Dörwald919497e2003-01-19 16:23:59 +0000901
902 self.assertRaises(TypeError, min)
903 self.assertRaises(TypeError, min, 42)
904 self.assertRaises(ValueError, min, ())
905 class BadSeq:
906 def __getitem__(self, index):
907 raise ValueError
908 self.assertRaises(ValueError, min, BadSeq())
Walter Dörwald919497e2003-01-19 16:23:59 +0000909
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +0000910 for stmt in (
911 "min(key=int)", # no args
Raymond Hettinger4d6018f2013-06-24 22:43:02 -0700912 "min(default=None)",
913 "min(1, 2, default=None)", # require container for default
914 "min(default=None, key=int)",
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +0000915 "min(1, key=int)", # single arg not iterable
916 "min(1, 2, keystone=int)", # wrong keyword
917 "min(1, 2, key=int, abc=int)", # two many keywords
918 "min(1, 2, key=1)", # keyfunc is not callable
919 ):
Tim Peters7f061872004-12-07 21:17:46 +0000920 try:
Georg Brandl7cae87c2006-09-06 06:51:57 +0000921 exec(stmt, globals())
Tim Peters7f061872004-12-07 21:17:46 +0000922 except TypeError:
923 pass
924 else:
925 self.fail(stmt)
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +0000926
927 self.assertEqual(min((1,), key=neg), 1) # one elem iterable
928 self.assertEqual(min((1,2), key=neg), 2) # two elem iterable
929 self.assertEqual(min(1, 2, key=neg), 2) # two elems
930
Raymond Hettinger4d6018f2013-06-24 22:43:02 -0700931 self.assertEqual(min((), default=None), None) # zero elem iterable
932 self.assertEqual(min((1,), default=None), 1) # one elem iterable
933 self.assertEqual(min((1,2), default=None), 1) # two elem iterable
934
935 self.assertEqual(min((), default=1, key=neg), 1)
936 self.assertEqual(min((1, 2), default=1, key=neg), 2)
937
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +0000938 data = [random.randrange(200) for i in range(100)]
939 keys = dict((elem, random.randrange(50)) for elem in data)
940 f = keys.__getitem__
941 self.assertEqual(min(data, key=f),
942 sorted(data, key=f)[0])
943
Georg Brandla18af4e2007-04-21 15:47:16 +0000944 def test_next(self):
945 it = iter(range(2))
946 self.assertEqual(next(it), 0)
947 self.assertEqual(next(it), 1)
948 self.assertRaises(StopIteration, next, it)
949 self.assertRaises(StopIteration, next, it)
Ezio Melottib3aedd42010-11-20 19:04:17 +0000950 self.assertEqual(next(it, 42), 42)
Georg Brandla18af4e2007-04-21 15:47:16 +0000951
952 class Iter(object):
953 def __iter__(self):
954 return self
955 def __next__(self):
956 raise StopIteration
957
958 it = iter(Iter())
Ezio Melottib3aedd42010-11-20 19:04:17 +0000959 self.assertEqual(next(it, 42), 42)
Georg Brandla18af4e2007-04-21 15:47:16 +0000960 self.assertRaises(StopIteration, next, it)
961
962 def gen():
963 yield 1
964 return
965
966 it = gen()
Ezio Melottib3aedd42010-11-20 19:04:17 +0000967 self.assertEqual(next(it), 1)
Georg Brandla18af4e2007-04-21 15:47:16 +0000968 self.assertRaises(StopIteration, next, it)
Ezio Melottib3aedd42010-11-20 19:04:17 +0000969 self.assertEqual(next(it, 42), 42)
Georg Brandla18af4e2007-04-21 15:47:16 +0000970
Walter Dörwald919497e2003-01-19 16:23:59 +0000971 def test_oct(self):
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000972 self.assertEqual(oct(100), '0o144')
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000973 self.assertEqual(oct(-100), '-0o144')
Walter Dörwald919497e2003-01-19 16:23:59 +0000974 self.assertRaises(TypeError, oct, ())
975
976 def write_testfile(self):
Guido van Rossuma88a0332007-02-26 16:59:55 +0000977 # NB the first 4 lines are also used to test input, below
Walter Dörwald919497e2003-01-19 16:23:59 +0000978 fp = open(TESTFN, 'w')
979 try:
980 fp.write('1+1\n')
Walter Dörwald919497e2003-01-19 16:23:59 +0000981 fp.write('The quick brown fox jumps over the lazy dog')
982 fp.write('.\n')
983 fp.write('Dear John\n')
984 fp.write('XXX'*100)
985 fp.write('YYY'*100)
986 finally:
987 fp.close()
988
989 def test_open(self):
990 self.write_testfile()
991 fp = open(TESTFN, 'r')
992 try:
993 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)
999 finally:
1000 fp.close()
Florent Xicluna3f4ce632012-07-08 12:08:45 +02001001 unlink(TESTFN)
Walter Dörwald919497e2003-01-19 16:23:59 +00001002
Victor Stinnerf86a5e82012-06-05 13:43:22 +02001003 def test_open_default_encoding(self):
1004 old_environ = dict(os.environ)
1005 try:
1006 # try to get a user preferred encoding different than the current
1007 # locale encoding to check that open() uses the current locale
1008 # encoding and not the user preferred encoding
1009 for key in ('LC_ALL', 'LANG', 'LC_CTYPE'):
1010 if key in os.environ:
1011 del os.environ[key]
1012
1013 self.write_testfile()
1014 current_locale_encoding = locale.getpreferredencoding(False)
1015 fp = open(TESTFN, 'w')
1016 try:
1017 self.assertEqual(fp.encoding, current_locale_encoding)
1018 finally:
1019 fp.close()
Florent Xicluna3f4ce632012-07-08 12:08:45 +02001020 unlink(TESTFN)
Victor Stinnerf86a5e82012-06-05 13:43:22 +02001021 finally:
1022 os.environ.clear()
1023 os.environ.update(old_environ)
1024
Walter Dörwald919497e2003-01-19 16:23:59 +00001025 def test_ord(self):
1026 self.assertEqual(ord(' '), 32)
1027 self.assertEqual(ord('A'), 65)
1028 self.assertEqual(ord('a'), 97)
Guido van Rossumf9e91c92007-05-08 21:05:48 +00001029 self.assertEqual(ord('\x80'), 128)
1030 self.assertEqual(ord('\xff'), 255)
1031
1032 self.assertEqual(ord(b' '), 32)
1033 self.assertEqual(ord(b'A'), 65)
1034 self.assertEqual(ord(b'a'), 97)
1035 self.assertEqual(ord(b'\x80'), 128)
1036 self.assertEqual(ord(b'\xff'), 255)
1037
Walter Dörwald1f5947b2007-05-22 16:52:54 +00001038 self.assertEqual(ord(chr(sys.maxunicode)), sys.maxunicode)
Walter Dörwald919497e2003-01-19 16:23:59 +00001039 self.assertRaises(TypeError, ord, 42)
Walter Dörwald919497e2003-01-19 16:23:59 +00001040
Guido van Rossum8ac004e2007-07-15 13:00:05 +00001041 self.assertEqual(ord(chr(0x10FFFF)), 0x10FFFF)
1042 self.assertEqual(ord("\U0000FFFF"), 0x0000FFFF)
1043 self.assertEqual(ord("\U00010000"), 0x00010000)
1044 self.assertEqual(ord("\U00010001"), 0x00010001)
1045 self.assertEqual(ord("\U000FFFFE"), 0x000FFFFE)
1046 self.assertEqual(ord("\U000FFFFF"), 0x000FFFFF)
1047 self.assertEqual(ord("\U00100000"), 0x00100000)
1048 self.assertEqual(ord("\U00100001"), 0x00100001)
1049 self.assertEqual(ord("\U0010FFFE"), 0x0010FFFE)
1050 self.assertEqual(ord("\U0010FFFF"), 0x0010FFFF)
1051
Walter Dörwald919497e2003-01-19 16:23:59 +00001052 def test_pow(self):
1053 self.assertEqual(pow(0,0), 1)
1054 self.assertEqual(pow(0,1), 0)
1055 self.assertEqual(pow(1,0), 1)
1056 self.assertEqual(pow(1,1), 1)
1057
1058 self.assertEqual(pow(2,0), 1)
1059 self.assertEqual(pow(2,10), 1024)
1060 self.assertEqual(pow(2,20), 1024*1024)
1061 self.assertEqual(pow(2,30), 1024*1024*1024)
1062
1063 self.assertEqual(pow(-2,0), 1)
1064 self.assertEqual(pow(-2,1), -2)
1065 self.assertEqual(pow(-2,2), 4)
1066 self.assertEqual(pow(-2,3), -8)
1067
Walter Dörwald919497e2003-01-19 16:23:59 +00001068 self.assertAlmostEqual(pow(0.,0), 1.)
1069 self.assertAlmostEqual(pow(0.,1), 0.)
1070 self.assertAlmostEqual(pow(1.,0), 1.)
1071 self.assertAlmostEqual(pow(1.,1), 1.)
1072
1073 self.assertAlmostEqual(pow(2.,0), 1.)
1074 self.assertAlmostEqual(pow(2.,10), 1024.)
1075 self.assertAlmostEqual(pow(2.,20), 1024.*1024.)
1076 self.assertAlmostEqual(pow(2.,30), 1024.*1024.*1024.)
1077
1078 self.assertAlmostEqual(pow(-2.,0), 1.)
1079 self.assertAlmostEqual(pow(-2.,1), -2.)
1080 self.assertAlmostEqual(pow(-2.,2), 4.)
1081 self.assertAlmostEqual(pow(-2.,3), -8.)
1082
Mark Dickinson5c2db372009-12-05 20:28:34 +00001083 for x in 2, 2.0:
1084 for y in 10, 10.0:
1085 for z in 1000, 1000.0:
Walter Dörwald919497e2003-01-19 16:23:59 +00001086 if isinstance(x, float) or \
1087 isinstance(y, float) or \
1088 isinstance(z, float):
1089 self.assertRaises(TypeError, pow, x, y, z)
1090 else:
1091 self.assertAlmostEqual(pow(x, y, z), 24.0)
1092
Jeffrey Yasskin3404b3c2007-09-07 15:15:49 +00001093 self.assertAlmostEqual(pow(-1, 0.5), 1j)
1094 self.assertAlmostEqual(pow(-1, 1/3), 0.5 + 0.8660254037844386j)
1095
Walter Dörwald919497e2003-01-19 16:23:59 +00001096 self.assertRaises(TypeError, pow, -1, -2, 3)
1097 self.assertRaises(ValueError, pow, 1, 2, 0)
Walter Dörwald919497e2003-01-19 16:23:59 +00001098
1099 self.assertRaises(TypeError, pow)
1100
Guido van Rossuma88a0332007-02-26 16:59:55 +00001101 def test_input(self):
1102 self.write_testfile()
1103 fp = open(TESTFN, 'r')
1104 savestdin = sys.stdin
1105 savestdout = sys.stdout # Eats the echo
1106 try:
1107 sys.stdin = fp
1108 sys.stdout = BitBucket()
1109 self.assertEqual(input(), "1+1")
Guido van Rossuma88a0332007-02-26 16:59:55 +00001110 self.assertEqual(input(), 'The quick brown fox jumps over the lazy dog.')
1111 self.assertEqual(input('testing\n'), 'Dear John')
1112
1113 # SF 1535165: don't segfault on closed stdin
1114 # sys.stdout must be a regular file for triggering
1115 sys.stdout = savestdout
1116 sys.stdin.close()
1117 self.assertRaises(ValueError, input)
1118
1119 sys.stdout = BitBucket()
Guido van Rossum34d19282007-08-09 01:03:29 +00001120 sys.stdin = io.StringIO("NULL\0")
Guido van Rossuma88a0332007-02-26 16:59:55 +00001121 self.assertRaises(TypeError, input, 42, 42)
Guido van Rossum34d19282007-08-09 01:03:29 +00001122 sys.stdin = io.StringIO(" 'whitespace'")
Guido van Rossuma88a0332007-02-26 16:59:55 +00001123 self.assertEqual(input(), " 'whitespace'")
Guido van Rossum34d19282007-08-09 01:03:29 +00001124 sys.stdin = io.StringIO()
Guido van Rossuma88a0332007-02-26 16:59:55 +00001125 self.assertRaises(EOFError, input)
1126
1127 del sys.stdout
1128 self.assertRaises(RuntimeError, input, 'prompt')
1129 del sys.stdin
1130 self.assertRaises(RuntimeError, input, 'prompt')
1131 finally:
1132 sys.stdin = savestdin
1133 sys.stdout = savestdout
1134 fp.close()
1135 unlink(TESTFN)
1136
Antoine Pitrou772add72011-11-06 02:37:42 +01001137 @unittest.skipUnless(pty, "the pty and signal modules must be available")
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001138 def check_input_tty(self, prompt, terminal_input, stdio_encoding=None):
Antoine Pitrou1ce4b142011-11-06 03:03:18 +01001139 if not sys.stdin.isatty() or not sys.stdout.isatty():
1140 self.skipTest("stdin and stdout must be ttys")
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001141 r, w = os.pipe()
1142 try:
1143 pid, fd = pty.fork()
1144 except (OSError, AttributeError) as e:
1145 os.close(r)
1146 os.close(w)
1147 self.skipTest("pty.fork() raised {}".format(e))
1148 if pid == 0:
1149 # Child
Antoine Pitrou772add72011-11-06 02:37:42 +01001150 try:
1151 # Make sure we don't get stuck if there's a problem
1152 signal.alarm(2)
1153 os.close(r)
1154 # Check the error handlers are accounted for
1155 if stdio_encoding:
1156 sys.stdin = io.TextIOWrapper(sys.stdin.detach(),
1157 encoding=stdio_encoding,
1158 errors='surrogateescape')
1159 sys.stdout = io.TextIOWrapper(sys.stdout.detach(),
1160 encoding=stdio_encoding,
1161 errors='replace')
1162 with open(w, "w") as wpipe:
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001163 print("tty =", sys.stdin.isatty() and sys.stdout.isatty(), file=wpipe)
1164 print(ascii(input(prompt)), file=wpipe)
Antoine Pitrou772add72011-11-06 02:37:42 +01001165 except:
1166 traceback.print_exc()
1167 finally:
1168 # We don't want to return to unittest...
1169 os._exit(0)
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001170 # Parent
1171 os.close(w)
1172 os.write(fd, terminal_input + b"\r\n")
1173 # Get results from the pipe
1174 with open(r, "r") as rpipe:
1175 lines = []
1176 while True:
1177 line = rpipe.readline().strip()
Antoine Pitrou772add72011-11-06 02:37:42 +01001178 if line == "":
1179 # The other end was closed => the child exited
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001180 break
1181 lines.append(line)
Antoine Pitrou772add72011-11-06 02:37:42 +01001182 # Check the result was got and corresponds to the user's terminal input
1183 if len(lines) != 2:
1184 # Something went wrong, try to get at stderr
1185 with open(fd, "r", encoding="ascii", errors="ignore") as child_output:
1186 self.fail("got %d lines in pipe but expected 2, child output was:\n%s"
1187 % (len(lines), child_output.read()))
1188 os.close(fd)
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001189 # Check we did exercise the GNU readline path
1190 self.assertIn(lines[0], {'tty = True', 'tty = False'})
1191 if lines[0] != 'tty = True':
1192 self.skipTest("standard IO in should have been a tty")
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001193 input_result = eval(lines[1]) # ascii() -> eval() roundtrip
1194 if stdio_encoding:
1195 expected = terminal_input.decode(stdio_encoding, 'surrogateescape')
1196 else:
1197 expected = terminal_input.decode(sys.stdin.encoding) # what else?
1198 self.assertEqual(input_result, expected)
1199
1200 def test_input_tty(self):
1201 # Test input() functionality when wired to a tty (the code path
1202 # is different and invokes GNU readline if available).
1203 self.check_input_tty("prompt", b"quux")
1204
1205 def test_input_tty_non_ascii(self):
1206 # Check stdin/stdout encoding is used when invoking GNU readline
1207 self.check_input_tty("prompté", b"quux\xe9", "utf-8")
1208
1209 def test_input_tty_non_ascii_unicode_errors(self):
1210 # Check stdin/stdout error handler is used when invoking GNU readline
1211 self.check_input_tty("prompté", b"quux\xe9", "ascii")
1212
Andrew Svetlov8e42e8a2012-12-23 12:49:33 +02001213 # test_int(): see test_int.py for tests of built-in function int().
1214
Walter Dörwald919497e2003-01-19 16:23:59 +00001215 def test_repr(self):
1216 self.assertEqual(repr(''), '\'\'')
1217 self.assertEqual(repr(0), '0')
Walter Dörwald919497e2003-01-19 16:23:59 +00001218 self.assertEqual(repr(()), '()')
1219 self.assertEqual(repr([]), '[]')
1220 self.assertEqual(repr({}), '{}')
1221 a = []
1222 a.append(a)
1223 self.assertEqual(repr(a), '[[...]]')
1224 a = {}
1225 a[0] = a
1226 self.assertEqual(repr(a), '{0: {...}}')
1227
1228 def test_round(self):
1229 self.assertEqual(round(0.0), 0.0)
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001230 self.assertEqual(type(round(0.0)), int)
Walter Dörwald919497e2003-01-19 16:23:59 +00001231 self.assertEqual(round(1.0), 1.0)
1232 self.assertEqual(round(10.0), 10.0)
1233 self.assertEqual(round(1000000000.0), 1000000000.0)
1234 self.assertEqual(round(1e20), 1e20)
1235
1236 self.assertEqual(round(-1.0), -1.0)
1237 self.assertEqual(round(-10.0), -10.0)
1238 self.assertEqual(round(-1000000000.0), -1000000000.0)
1239 self.assertEqual(round(-1e20), -1e20)
1240
1241 self.assertEqual(round(0.1), 0.0)
1242 self.assertEqual(round(1.1), 1.0)
1243 self.assertEqual(round(10.1), 10.0)
1244 self.assertEqual(round(1000000000.1), 1000000000.0)
1245
1246 self.assertEqual(round(-1.1), -1.0)
1247 self.assertEqual(round(-10.1), -10.0)
1248 self.assertEqual(round(-1000000000.1), -1000000000.0)
1249
1250 self.assertEqual(round(0.9), 1.0)
1251 self.assertEqual(round(9.9), 10.0)
1252 self.assertEqual(round(999999999.9), 1000000000.0)
1253
1254 self.assertEqual(round(-0.9), -1.0)
1255 self.assertEqual(round(-9.9), -10.0)
1256 self.assertEqual(round(-999999999.9), -1000000000.0)
1257
1258 self.assertEqual(round(-8.0, -1), -10.0)
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001259 self.assertEqual(type(round(-8.0, -1)), float)
1260
1261 self.assertEqual(type(round(-8.0, 0)), float)
1262 self.assertEqual(type(round(-8.0, 1)), float)
1263
1264 # Check even / odd rounding behaviour
1265 self.assertEqual(round(5.5), 6)
1266 self.assertEqual(round(6.5), 6)
1267 self.assertEqual(round(-5.5), -6)
1268 self.assertEqual(round(-6.5), -6)
1269
1270 # Check behavior on ints
1271 self.assertEqual(round(0), 0)
1272 self.assertEqual(round(8), 8)
1273 self.assertEqual(round(-8), -8)
1274 self.assertEqual(type(round(0)), int)
Mark Dickinson1124e712009-01-28 21:25:58 +00001275 self.assertEqual(type(round(-8, -1)), int)
1276 self.assertEqual(type(round(-8, 0)), int)
1277 self.assertEqual(type(round(-8, 1)), int)
Walter Dörwald919497e2003-01-19 16:23:59 +00001278
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001279 # test new kwargs
1280 self.assertEqual(round(number=-8.0, ndigits=-1), -10.0)
1281
Walter Dörwald919497e2003-01-19 16:23:59 +00001282 self.assertRaises(TypeError, round)
1283
Alex Martelliae211f92007-08-22 23:21:33 +00001284 # test generic rounding delegation for reals
1285 class TestRound:
1286 def __round__(self):
1287 return 23
1288
1289 class TestNoRound:
1290 pass
1291
1292 self.assertEqual(round(TestRound()), 23)
1293
1294 self.assertRaises(TypeError, round, 1, 2, 3)
1295 self.assertRaises(TypeError, round, TestNoRound())
1296
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001297 t = TestNoRound()
1298 t.__round__ = lambda *args: args
1299 self.assertRaises(TypeError, round, t)
1300 self.assertRaises(TypeError, round, t, 0)
1301
Mark Dickinsonad731b92009-11-09 17:12:30 +00001302 # Some versions of glibc for alpha have a bug that affects
1303 # float -> integer rounding (floor, ceil, rint, round) for
1304 # values in the range [2**52, 2**53). See:
1305 #
1306 # http://sources.redhat.com/bugzilla/show_bug.cgi?id=5350
1307 #
1308 # We skip this test on Linux/alpha if it would fail.
1309 linux_alpha = (platform.system().startswith('Linux') and
1310 platform.machine().startswith('alpha'))
1311 system_round_bug = round(5e15+1) != 5e15+1
1312 @unittest.skipIf(linux_alpha and system_round_bug,
1313 "test will fail; failure is probably due to a "
1314 "buggy system round function")
1315 def test_round_large(self):
1316 # Issue #1869: integral floats should remain unchanged
1317 self.assertEqual(round(5e15-1), 5e15-1)
1318 self.assertEqual(round(5e15), 5e15)
1319 self.assertEqual(round(5e15+1), 5e15+1)
1320 self.assertEqual(round(5e15+2), 5e15+2)
1321 self.assertEqual(round(5e15+3), 5e15+3)
1322
Walter Dörwald919497e2003-01-19 16:23:59 +00001323 def test_setattr(self):
Tim Petersf2715e02003-02-19 02:35:07 +00001324 setattr(sys, 'spam', 1)
1325 self.assertEqual(sys.spam, 1)
1326 self.assertRaises(TypeError, setattr, sys, 1, 'spam')
1327 self.assertRaises(TypeError, setattr)
Walter Dörwald919497e2003-01-19 16:23:59 +00001328
Chris Jerdonek5fae0e52012-11-20 17:45:51 -08001329 # test_str(): see test_unicode.py and test_bytes.py for str() tests.
Walter Dörwald919497e2003-01-19 16:23:59 +00001330
Alex Martellia70b1912003-04-22 08:12:33 +00001331 def test_sum(self):
1332 self.assertEqual(sum([]), 0)
Guido van Rossum805365e2007-05-07 22:24:25 +00001333 self.assertEqual(sum(list(range(2,8))), 27)
1334 self.assertEqual(sum(iter(list(range(2,8)))), 27)
Alex Martellia70b1912003-04-22 08:12:33 +00001335 self.assertEqual(sum(Squares(10)), 285)
1336 self.assertEqual(sum(iter(Squares(10))), 285)
1337 self.assertEqual(sum([[1], [2], [3]], []), [1, 2, 3])
1338
1339 self.assertRaises(TypeError, sum)
1340 self.assertRaises(TypeError, sum, 42)
1341 self.assertRaises(TypeError, sum, ['a', 'b', 'c'])
1342 self.assertRaises(TypeError, sum, ['a', 'b', 'c'], '')
Benjamin Petersonce071ca2011-07-29 14:23:47 -05001343 self.assertRaises(TypeError, sum, [b'a', b'c'], b'')
1344 values = [bytearray(b'a'), bytearray(b'b')]
1345 self.assertRaises(TypeError, sum, values, bytearray(b''))
Alex Martellia70b1912003-04-22 08:12:33 +00001346 self.assertRaises(TypeError, sum, [[1], [2], [3]])
1347 self.assertRaises(TypeError, sum, [{2:3}])
1348 self.assertRaises(TypeError, sum, [{2:3}]*2, {2:3})
1349
1350 class BadSeq:
1351 def __getitem__(self, index):
1352 raise ValueError
1353 self.assertRaises(ValueError, sum, BadSeq())
1354
Mark Dickinson3a22b472009-10-17 21:48:16 +00001355 empty = []
1356 sum(([x] for x in range(10)), empty)
1357 self.assertEqual(empty, [])
1358
Walter Dörwald919497e2003-01-19 16:23:59 +00001359 def test_type(self):
1360 self.assertEqual(type(''), type('123'))
1361 self.assertNotEqual(type(''), type(()))
1362
Guido van Rossumfee7b932005-01-16 00:21:28 +00001363 # We don't want self in vars(), so these are static methods
1364
1365 @staticmethod
Walter Dörwald919497e2003-01-19 16:23:59 +00001366 def get_vars_f0():
1367 return vars()
Walter Dörwald919497e2003-01-19 16:23:59 +00001368
Guido van Rossumfee7b932005-01-16 00:21:28 +00001369 @staticmethod
Walter Dörwald919497e2003-01-19 16:23:59 +00001370 def get_vars_f2():
1371 BuiltinTest.get_vars_f0()
1372 a = 1
1373 b = 2
1374 return vars()
Walter Dörwald919497e2003-01-19 16:23:59 +00001375
Mark Dickinsonfb3dc942010-05-25 19:06:24 +00001376 class C_get_vars(object):
1377 def getDict(self):
1378 return {'a':2}
1379 __dict__ = property(fget=getDict)
1380
Walter Dörwald919497e2003-01-19 16:23:59 +00001381 def test_vars(self):
Raymond Hettingera690a992003-11-16 16:17:49 +00001382 self.assertEqual(set(vars()), set(dir()))
Raymond Hettingera690a992003-11-16 16:17:49 +00001383 self.assertEqual(set(vars(sys)), set(dir(sys)))
Walter Dörwald919497e2003-01-19 16:23:59 +00001384 self.assertEqual(self.get_vars_f0(), {})
1385 self.assertEqual(self.get_vars_f2(), {'a': 1, 'b': 2})
1386 self.assertRaises(TypeError, vars, 42, 42)
1387 self.assertRaises(TypeError, vars, 42)
Mark Dickinsonfb3dc942010-05-25 19:06:24 +00001388 self.assertEqual(vars(self.C_get_vars()), {'a':2})
Walter Dörwald919497e2003-01-19 16:23:59 +00001389
1390 def test_zip(self):
1391 a = (1, 2, 3)
1392 b = (4, 5, 6)
1393 t = [(1, 4), (2, 5), (3, 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]
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 b = (4, 5, 6, 7)
Guido van Rossum801f0d72006-08-24 19:48:10 +00001398 self.assertEqual(list(zip(a, b)), t)
Walter Dörwald919497e2003-01-19 16:23:59 +00001399 class I:
1400 def __getitem__(self, i):
1401 if i < 0 or i > 2: raise IndexError
1402 return i + 4
Guido van Rossum801f0d72006-08-24 19:48:10 +00001403 self.assertEqual(list(zip(a, I())), t)
1404 self.assertEqual(list(zip()), [])
1405 self.assertEqual(list(zip(*[])), [])
Walter Dörwald919497e2003-01-19 16:23:59 +00001406 self.assertRaises(TypeError, zip, None)
1407 class G:
1408 pass
1409 self.assertRaises(TypeError, zip, a, G())
Alexander Belopolskye29e6bf2010-08-16 18:55:46 +00001410 self.assertRaises(RuntimeError, zip, a, TestFailingIter())
Walter Dörwald919497e2003-01-19 16:23:59 +00001411
1412 # Make sure zip doesn't try to allocate a billion elements for the
1413 # result list when one of its arguments doesn't say how long it is.
1414 # A MemoryError is the most likely failure mode.
1415 class SequenceWithoutALength:
1416 def __getitem__(self, i):
1417 if i == 5:
1418 raise IndexError
1419 else:
1420 return i
1421 self.assertEqual(
Guido van Rossum805365e2007-05-07 22:24:25 +00001422 list(zip(SequenceWithoutALength(), range(2**30))),
Walter Dörwald919497e2003-01-19 16:23:59 +00001423 list(enumerate(range(5)))
1424 )
1425
1426 class BadSeq:
1427 def __getitem__(self, i):
1428 if i == 5:
1429 raise ValueError
1430 else:
1431 return i
Guido van Rossum801f0d72006-08-24 19:48:10 +00001432 self.assertRaises(ValueError, list, zip(BadSeq(), BadSeq()))
Walter Dörwald919497e2003-01-19 16:23:59 +00001433
Kristján Valur Jónsson31668b82012-04-03 10:49:41 +00001434 def test_zip_pickle(self):
1435 a = (1, 2, 3)
1436 b = (4, 5, 6)
1437 t = [(1, 4), (2, 5), (3, 6)]
1438 z1 = zip(a, b)
1439 self.check_iter_pickle(z1, t)
1440
Eric Smithe4d63172010-09-13 20:48:43 +00001441 def test_format(self):
1442 # Test the basic machinery of the format() builtin. Don't test
1443 # the specifics of the various formatters
1444 self.assertEqual(format(3, ''), '3')
1445
1446 # Returns some classes to use for various tests. There's
1447 # an old-style version, and a new-style version
1448 def classes_new():
1449 class A(object):
1450 def __init__(self, x):
1451 self.x = x
1452 def __format__(self, format_spec):
1453 return str(self.x) + format_spec
1454 class DerivedFromA(A):
1455 pass
1456
1457 class Simple(object): pass
1458 class DerivedFromSimple(Simple):
1459 def __init__(self, x):
1460 self.x = x
1461 def __format__(self, format_spec):
1462 return str(self.x) + format_spec
1463 class DerivedFromSimple2(DerivedFromSimple): pass
1464 return A, DerivedFromA, DerivedFromSimple, DerivedFromSimple2
1465
1466 def class_test(A, DerivedFromA, DerivedFromSimple, DerivedFromSimple2):
1467 self.assertEqual(format(A(3), 'spec'), '3spec')
1468 self.assertEqual(format(DerivedFromA(4), 'spec'), '4spec')
1469 self.assertEqual(format(DerivedFromSimple(5), 'abc'), '5abc')
1470 self.assertEqual(format(DerivedFromSimple2(10), 'abcdef'),
1471 '10abcdef')
1472
1473 class_test(*classes_new())
1474
1475 def empty_format_spec(value):
1476 # test that:
1477 # format(x, '') == str(x)
1478 # format(x) == str(x)
1479 self.assertEqual(format(value, ""), str(value))
1480 self.assertEqual(format(value), str(value))
1481
1482 # for builtin types, format(x, "") == str(x)
1483 empty_format_spec(17**13)
1484 empty_format_spec(1.0)
1485 empty_format_spec(3.1415e104)
1486 empty_format_spec(-3.1415e104)
1487 empty_format_spec(3.1415e-104)
1488 empty_format_spec(-3.1415e-104)
1489 empty_format_spec(object)
1490 empty_format_spec(None)
1491
1492 # TypeError because self.__format__ returns the wrong type
1493 class BadFormatResult:
1494 def __format__(self, format_spec):
1495 return 1.0
1496 self.assertRaises(TypeError, format, BadFormatResult(), "")
1497
1498 # TypeError because format_spec is not unicode or str
1499 self.assertRaises(TypeError, format, object(), 4)
1500 self.assertRaises(TypeError, format, object(), object())
1501
1502 # tests for object.__format__ really belong elsewhere, but
1503 # there's no good place to put them
1504 x = object().__format__('')
1505 self.assertTrue(x.startswith('<object object at'))
1506
1507 # first argument to object.__format__ must be string
1508 self.assertRaises(TypeError, object().__format__, 3)
1509 self.assertRaises(TypeError, object().__format__, object())
1510 self.assertRaises(TypeError, object().__format__, None)
1511
1512 # --------------------------------------------------------------------
1513 # Issue #7994: object.__format__ with a non-empty format string is
Eric V. Smithb9cd3532011-03-12 10:08:48 -05001514 # deprecated
Andrew Svetlov2cd8ce42012-12-23 14:27:17 +02001515 def test_deprecated_format_string(obj, fmt_str, should_raise):
1516 if should_raise:
1517 self.assertRaises(TypeError, format, obj, fmt_str)
Eric Smithe4d63172010-09-13 20:48:43 +00001518 else:
Andrew Svetlov2cd8ce42012-12-23 14:27:17 +02001519 format(obj, fmt_str)
Eric Smithe4d63172010-09-13 20:48:43 +00001520
1521 fmt_strs = ['', 's']
1522
1523 class A:
1524 def __format__(self, fmt_str):
1525 return format('', fmt_str)
1526
1527 for fmt_str in fmt_strs:
1528 test_deprecated_format_string(A(), fmt_str, False)
1529
1530 class B:
1531 pass
1532
1533 class C(object):
1534 pass
1535
1536 for cls in [object, B, C]:
1537 for fmt_str in fmt_strs:
1538 test_deprecated_format_string(cls(), fmt_str, len(fmt_str) != 0)
1539 # --------------------------------------------------------------------
1540
1541 # make sure we can take a subclass of str as a format spec
1542 class DerivedFromStr(str): pass
1543 self.assertEqual(format(0, DerivedFromStr('10')), ' 0')
1544
Christian Heimes90c3d9b2008-02-23 13:18:03 +00001545 def test_bin(self):
1546 self.assertEqual(bin(0), '0b0')
1547 self.assertEqual(bin(1), '0b1')
1548 self.assertEqual(bin(-1), '-0b1')
1549 self.assertEqual(bin(2**65), '0b1' + '0' * 65)
1550 self.assertEqual(bin(2**65-1), '0b' + '1' * 65)
1551 self.assertEqual(bin(-(2**65)), '-0b1' + '0' * 65)
1552 self.assertEqual(bin(-(2**65-1)), '-0b' + '1' * 65)
1553
Georg Brandl953152f2009-07-22 12:03:59 +00001554 def test_bytearray_translate(self):
1555 x = bytearray(b"abc")
1556 self.assertRaises(ValueError, x.translate, b"1", 1)
1557 self.assertRaises(TypeError, x.translate, b"1"*256, 1)
1558
Benjamin Petersonc4607ae2011-07-29 18:19:43 -05001559 def test_construct_singletons(self):
Benjamin Peterson18d7d7a2011-07-29 18:27:44 -05001560 for const in None, Ellipsis, NotImplemented:
Benjamin Petersonc4607ae2011-07-29 18:19:43 -05001561 tp = type(const)
1562 self.assertIs(tp(), const)
1563 self.assertRaises(TypeError, tp, 1, 2)
1564 self.assertRaises(TypeError, tp, a=1, b=2)
1565
Raymond Hettinger64958a12003-12-17 20:43:33 +00001566class TestSorted(unittest.TestCase):
1567
1568 def test_basic(self):
Guido van Rossum805365e2007-05-07 22:24:25 +00001569 data = list(range(100))
Raymond Hettinger64958a12003-12-17 20:43:33 +00001570 copy = data[:]
1571 random.shuffle(copy)
1572 self.assertEqual(data, sorted(copy))
1573 self.assertNotEqual(data, copy)
1574
1575 data.reverse()
1576 random.shuffle(copy)
Raymond Hettinger64958a12003-12-17 20:43:33 +00001577 self.assertEqual(data, sorted(copy, key=lambda x: -x))
1578 self.assertNotEqual(data, copy)
1579 random.shuffle(copy)
1580 self.assertEqual(data, sorted(copy, reverse=1))
1581 self.assertNotEqual(data, copy)
1582
1583 def test_inputtypes(self):
1584 s = 'abracadabra'
Walter Dörwald1f5947b2007-05-22 16:52:54 +00001585 types = [list, tuple, str]
Walter Dörwald4e41a4b2005-08-03 17:09:04 +00001586 for T in types:
Raymond Hettinger64958a12003-12-17 20:43:33 +00001587 self.assertEqual(sorted(s), sorted(T(s)))
1588
Walter Dörwald1f5947b2007-05-22 16:52:54 +00001589 s = ''.join(set(s)) # unique letters only
1590 types = [str, set, frozenset, list, tuple, dict.fromkeys]
Walter Dörwald4e41a4b2005-08-03 17:09:04 +00001591 for T in types:
Raymond Hettinger64958a12003-12-17 20:43:33 +00001592 self.assertEqual(sorted(s), sorted(T(s)))
1593
1594 def test_baddecorator(self):
1595 data = 'The quick Brown fox Jumped over The lazy Dog'.split()
1596 self.assertRaises(TypeError, sorted, data, None, lambda x,y: 0)
1597
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001598def test_main(verbose=None):
Serhiy Storchaka278d03b2013-04-06 22:52:34 +03001599 test_classes = (BuiltinTest, TestSorted)
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001600
1601 run_unittest(*test_classes)
1602
1603 # verify reference counting
1604 if verbose and hasattr(sys, "gettotalrefcount"):
1605 import gc
1606 counts = [None] * 5
Guido van Rossum805365e2007-05-07 22:24:25 +00001607 for i in range(len(counts)):
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001608 run_unittest(*test_classes)
1609 gc.collect()
1610 counts[i] = sys.gettotalrefcount()
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001611 print(counts)
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001612
Walter Dörwald919497e2003-01-19 16:23:59 +00001613
1614if __name__ == "__main__":
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001615 test_main(verbose=True)