blob: f46f8d561ca80a2221dbc39886616166dd161d35 [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
587 frozen_builtins = frozendict(__builtins__)
588 code = compile("__builtins__['superglobal']=2; print(superglobal)", "test", "exec")
589 self.assertRaises(frozendict_error,
590 exec, code, {'__builtins__': frozen_builtins})
591
592 # read-only globals
593 namespace = frozendict({})
594 code = compile("x=1", "test", "exec")
595 self.assertRaises(frozendict_error,
596 exec, code, namespace)
597
Amaury Forgeot d'Arc9ed77352008-04-04 23:25:27 +0000598 def test_exec_redirected(self):
599 savestdout = sys.stdout
600 sys.stdout = None # Whatever that cannot flush()
601 try:
602 # Used to raise SystemError('error return without exception set')
603 exec('a')
604 except NameError:
605 pass
606 finally:
607 sys.stdout = savestdout
608
Walter Dörwald919497e2003-01-19 16:23:59 +0000609 def test_filter(self):
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000610 self.assertEqual(list(filter(lambda c: 'a' <= c <= 'z', 'Hello World')), list('elloorld'))
611 self.assertEqual(list(filter(None, [1, 'hello', [], [3], '', None, 9, 0])), [1, 'hello', [3], 9])
612 self.assertEqual(list(filter(lambda x: x > 0, [1, -3, 9, 0, 2])), [1, 9, 2])
613 self.assertEqual(list(filter(None, Squares(10))), [1, 4, 9, 16, 25, 36, 49, 64, 81])
614 self.assertEqual(list(filter(lambda x: x%2, Squares(10))), [1, 9, 25, 49, 81])
Walter Dörwald919497e2003-01-19 16:23:59 +0000615 def identity(item):
616 return 1
617 filter(identity, Squares(5))
618 self.assertRaises(TypeError, filter)
619 class BadSeq(object):
Tim Petersf2715e02003-02-19 02:35:07 +0000620 def __getitem__(self, index):
621 if index<4:
622 return 42
623 raise ValueError
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000624 self.assertRaises(ValueError, list, filter(lambda x: x, BadSeq()))
Walter Dörwald919497e2003-01-19 16:23:59 +0000625 def badfunc():
626 pass
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000627 self.assertRaises(TypeError, list, filter(badfunc, range(5)))
Walter Dörwald919497e2003-01-19 16:23:59 +0000628
Walter Dörwaldbf517072003-01-27 15:57:14 +0000629 # test bltinmodule.c::filtertuple()
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000630 self.assertEqual(list(filter(None, (1, 2))), [1, 2])
631 self.assertEqual(list(filter(lambda x: x>=3, (1, 2, 3, 4))), [3, 4])
632 self.assertRaises(TypeError, list, filter(42, (1, 2)))
Walter Dörwaldc3da83f2003-02-04 20:24:45 +0000633
Kristján Valur Jónsson31668b82012-04-03 10:49:41 +0000634 def test_filter_pickle(self):
635 f1 = filter(filter_char, "abcdeabcde")
636 f2 = filter(filter_char, "abcdeabcde")
637 self.check_iter_pickle(f1, list(f2))
638
Walter Dörwald919497e2003-01-19 16:23:59 +0000639 def test_getattr(self):
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000640 self.assertTrue(getattr(sys, 'stdout') is sys.stdout)
Walter Dörwald919497e2003-01-19 16:23:59 +0000641 self.assertRaises(TypeError, getattr, sys, 1)
642 self.assertRaises(TypeError, getattr, sys, 1, "foo")
643 self.assertRaises(TypeError, getattr)
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000644 self.assertRaises(AttributeError, getattr, sys, chr(sys.maxunicode))
Victor Stinner624dbf62010-03-12 17:17:58 +0000645 # unicode surrogates are not encodable to the default encoding (utf8)
646 self.assertRaises(AttributeError, getattr, 1, "\uDAD1\uD51E")
Walter Dörwald919497e2003-01-19 16:23:59 +0000647
648 def test_hasattr(self):
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000649 self.assertTrue(hasattr(sys, 'stdout'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000650 self.assertRaises(TypeError, hasattr, sys, 1)
651 self.assertRaises(TypeError, hasattr)
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000652 self.assertEqual(False, hasattr(sys, chr(sys.maxunicode)))
Walter Dörwald919497e2003-01-19 16:23:59 +0000653
Benjamin Peterson17689992010-08-24 03:26:23 +0000654 # Check that hasattr propagates all exceptions outside of
655 # AttributeError.
Alexandre Vassalottieca20b62008-05-16 02:54:33 +0000656 class A:
657 def __getattr__(self, what):
Benjamin Peterson17689992010-08-24 03:26:23 +0000658 raise SystemExit
659 self.assertRaises(SystemExit, hasattr, A(), "b")
Alexandre Vassalottieca20b62008-05-16 02:54:33 +0000660 class B:
661 def __getattr__(self, what):
Benjamin Peterson17689992010-08-24 03:26:23 +0000662 raise ValueError
663 self.assertRaises(ValueError, hasattr, B(), "b")
Alexandre Vassalottieca20b62008-05-16 02:54:33 +0000664
Walter Dörwald919497e2003-01-19 16:23:59 +0000665 def test_hash(self):
666 hash(None)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000667 self.assertEqual(hash(1), hash(1))
Walter Dörwald919497e2003-01-19 16:23:59 +0000668 self.assertEqual(hash(1), hash(1.0))
669 hash('spam')
Guido van Rossum98297ee2007-11-06 21:34:58 +0000670 self.assertEqual(hash('spam'), hash(b'spam'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000671 hash((0,1,2,3))
672 def f(): pass
673 self.assertRaises(TypeError, hash, [])
674 self.assertRaises(TypeError, hash, {})
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000675 # Bug 1536021: Allow hash to return long objects
676 class X:
677 def __hash__(self):
678 return 2**100
Ezio Melottib3aedd42010-11-20 19:04:17 +0000679 self.assertEqual(type(hash(X())), int)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000680 class Z(int):
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000681 def __hash__(self):
682 return self
Ezio Melottib3aedd42010-11-20 19:04:17 +0000683 self.assertEqual(hash(Z(42)), hash(42))
Walter Dörwald919497e2003-01-19 16:23:59 +0000684
685 def test_hex(self):
686 self.assertEqual(hex(16), '0x10')
Guido van Rossume2a383d2007-01-15 16:59:06 +0000687 self.assertEqual(hex(-16), '-0x10')
Walter Dörwald919497e2003-01-19 16:23:59 +0000688 self.assertRaises(TypeError, hex, {})
689
690 def test_id(self):
691 id(None)
692 id(1)
Walter Dörwald919497e2003-01-19 16:23:59 +0000693 id(1.0)
694 id('spam')
695 id((0,1,2,3))
696 id([0,1,2,3])
697 id({'spam': 1, 'eggs': 2, 'ham': 3})
698
Guido van Rossuma88a0332007-02-26 16:59:55 +0000699 # Test input() later, alphabetized as if it were raw_input
700
Walter Dörwald919497e2003-01-19 16:23:59 +0000701 def test_iter(self):
702 self.assertRaises(TypeError, iter)
703 self.assertRaises(TypeError, iter, 42, 42)
704 lists = [("1", "2"), ["1", "2"], "12"]
Walter Dörwald919497e2003-01-19 16:23:59 +0000705 for l in lists:
706 i = iter(l)
Georg Brandla18af4e2007-04-21 15:47:16 +0000707 self.assertEqual(next(i), '1')
708 self.assertEqual(next(i), '2')
709 self.assertRaises(StopIteration, next, i)
Walter Dörwald919497e2003-01-19 16:23:59 +0000710
711 def test_isinstance(self):
712 class C:
713 pass
714 class D(C):
715 pass
716 class E:
717 pass
718 c = C()
719 d = D()
720 e = E()
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000721 self.assertTrue(isinstance(c, C))
722 self.assertTrue(isinstance(d, C))
723 self.assertTrue(not isinstance(e, C))
724 self.assertTrue(not isinstance(c, D))
725 self.assertTrue(not isinstance('foo', E))
Walter Dörwald919497e2003-01-19 16:23:59 +0000726 self.assertRaises(TypeError, isinstance, E, 'foo')
727 self.assertRaises(TypeError, isinstance)
728
729 def test_issubclass(self):
730 class C:
731 pass
732 class D(C):
733 pass
734 class E:
735 pass
736 c = C()
737 d = D()
738 e = E()
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000739 self.assertTrue(issubclass(D, C))
740 self.assertTrue(issubclass(C, C))
741 self.assertTrue(not issubclass(C, D))
Walter Dörwald919497e2003-01-19 16:23:59 +0000742 self.assertRaises(TypeError, issubclass, 'foo', E)
743 self.assertRaises(TypeError, issubclass, E, 'foo')
744 self.assertRaises(TypeError, issubclass)
745
746 def test_len(self):
747 self.assertEqual(len('123'), 3)
748 self.assertEqual(len(()), 0)
749 self.assertEqual(len((1, 2, 3, 4)), 4)
750 self.assertEqual(len([1, 2, 3, 4]), 4)
751 self.assertEqual(len({}), 0)
752 self.assertEqual(len({'a':1, 'b': 2}), 2)
753 class BadSeq:
754 def __len__(self):
755 raise ValueError
756 self.assertRaises(ValueError, len, BadSeq())
Benjamin Petersonee1ae7c2009-02-08 21:07:20 +0000757 class InvalidLen:
758 def __len__(self):
759 return None
760 self.assertRaises(TypeError, len, InvalidLen())
761 class FloatLen:
762 def __len__(self):
763 return 4.5
764 self.assertRaises(TypeError, len, FloatLen())
765 class HugeLen:
766 def __len__(self):
767 return sys.maxsize + 1
768 self.assertRaises(OverflowError, len, HugeLen())
Mark Dickinsonfb3dc942010-05-25 19:06:24 +0000769 class NoLenMethod(object): pass
770 self.assertRaises(TypeError, len, NoLenMethod())
Walter Dörwald919497e2003-01-19 16:23:59 +0000771
Walter Dörwald919497e2003-01-19 16:23:59 +0000772 def test_map(self):
773 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000774 list(map(lambda x: x*x, range(1,4))),
Walter Dörwald919497e2003-01-19 16:23:59 +0000775 [1, 4, 9]
776 )
777 try:
778 from math import sqrt
779 except ImportError:
780 def sqrt(x):
781 return pow(x, 0.5)
782 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000783 list(map(lambda x: list(map(sqrt, x)), [[16, 4], [81, 9]])),
Walter Dörwald919497e2003-01-19 16:23:59 +0000784 [[4.0, 2.0], [9.0, 3.0]]
785 )
786 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000787 list(map(lambda x, y: x+y, [1,3,2], [9,1,4])),
Walter Dörwald919497e2003-01-19 16:23:59 +0000788 [10, 4, 6]
789 )
790
791 def plus(*v):
792 accu = 0
793 for i in v: accu = accu + i
794 return accu
795 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000796 list(map(plus, [1, 3, 7])),
Walter Dörwald919497e2003-01-19 16:23:59 +0000797 [1, 3, 7]
798 )
799 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000800 list(map(plus, [1, 3, 7], [4, 9, 2])),
Walter Dörwald919497e2003-01-19 16:23:59 +0000801 [1+4, 3+9, 7+2]
802 )
803 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000804 list(map(plus, [1, 3, 7], [4, 9, 2], [1, 1, 0])),
Walter Dörwald919497e2003-01-19 16:23:59 +0000805 [1+4+1, 3+9+1, 7+2+0]
806 )
807 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000808 list(map(int, Squares(10))),
Walter Dörwald919497e2003-01-19 16:23:59 +0000809 [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
810 )
Guido van Rossum47b9ff62006-08-24 00:41:19 +0000811 def Max(a, b):
812 if a is None:
813 return b
814 if b is None:
815 return a
816 return max(a, b)
Walter Dörwald919497e2003-01-19 16:23:59 +0000817 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000818 list(map(Max, Squares(3), Squares(2))),
819 [0, 1]
Walter Dörwald919497e2003-01-19 16:23:59 +0000820 )
821 self.assertRaises(TypeError, map)
822 self.assertRaises(TypeError, map, lambda x: x, 42)
Walter Dörwald919497e2003-01-19 16:23:59 +0000823 class BadSeq:
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000824 def __iter__(self):
Walter Dörwald919497e2003-01-19 16:23:59 +0000825 raise ValueError
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000826 yield None
827 self.assertRaises(ValueError, list, map(lambda x: x, BadSeq()))
Neal Norwitzfcf44352005-11-27 20:37:43 +0000828 def badfunc(x):
829 raise RuntimeError
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000830 self.assertRaises(RuntimeError, list, map(badfunc, range(5)))
Walter Dörwald919497e2003-01-19 16:23:59 +0000831
Kristján Valur Jónsson31668b82012-04-03 10:49:41 +0000832 def test_map_pickle(self):
833 m1 = map(map_char, "Is this the real life?")
834 m2 = map(map_char, "Is this the real life?")
835 self.check_iter_pickle(m1, list(m2))
836
Walter Dörwald919497e2003-01-19 16:23:59 +0000837 def test_max(self):
838 self.assertEqual(max('123123'), '3')
839 self.assertEqual(max(1, 2, 3), 3)
840 self.assertEqual(max((1, 2, 3, 1, 2, 3)), 3)
841 self.assertEqual(max([1, 2, 3, 1, 2, 3]), 3)
842
Guido van Rossume2a383d2007-01-15 16:59:06 +0000843 self.assertEqual(max(1, 2, 3.0), 3.0)
844 self.assertEqual(max(1, 2.0, 3), 3)
845 self.assertEqual(max(1.0, 2, 3), 3)
Walter Dörwald919497e2003-01-19 16:23:59 +0000846
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +0000847 for stmt in (
848 "max(key=int)", # no args
849 "max(1, key=int)", # single arg not iterable
850 "max(1, 2, keystone=int)", # wrong keyword
851 "max(1, 2, key=int, abc=int)", # two many keywords
852 "max(1, 2, key=1)", # keyfunc is not callable
853 ):
Tim Peters7f061872004-12-07 21:17:46 +0000854 try:
Georg Brandl7cae87c2006-09-06 06:51:57 +0000855 exec(stmt, globals())
Tim Peters7f061872004-12-07 21:17:46 +0000856 except TypeError:
857 pass
858 else:
859 self.fail(stmt)
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +0000860
861 self.assertEqual(max((1,), key=neg), 1) # one elem iterable
862 self.assertEqual(max((1,2), key=neg), 1) # two elem iterable
863 self.assertEqual(max(1, 2, key=neg), 1) # two elems
864
865 data = [random.randrange(200) for i in range(100)]
866 keys = dict((elem, random.randrange(50)) for elem in data)
867 f = keys.__getitem__
868 self.assertEqual(max(data, key=f),
869 sorted(reversed(data), key=f)[-1])
870
Walter Dörwald919497e2003-01-19 16:23:59 +0000871 def test_min(self):
872 self.assertEqual(min('123123'), '1')
873 self.assertEqual(min(1, 2, 3), 1)
874 self.assertEqual(min((1, 2, 3, 1, 2, 3)), 1)
875 self.assertEqual(min([1, 2, 3, 1, 2, 3]), 1)
876
Guido van Rossume2a383d2007-01-15 16:59:06 +0000877 self.assertEqual(min(1, 2, 3.0), 1)
878 self.assertEqual(min(1, 2.0, 3), 1)
879 self.assertEqual(min(1.0, 2, 3), 1.0)
Walter Dörwald919497e2003-01-19 16:23:59 +0000880
881 self.assertRaises(TypeError, min)
882 self.assertRaises(TypeError, min, 42)
883 self.assertRaises(ValueError, min, ())
884 class BadSeq:
885 def __getitem__(self, index):
886 raise ValueError
887 self.assertRaises(ValueError, min, BadSeq())
Walter Dörwald919497e2003-01-19 16:23:59 +0000888
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +0000889 for stmt in (
890 "min(key=int)", # no args
891 "min(1, key=int)", # single arg not iterable
892 "min(1, 2, keystone=int)", # wrong keyword
893 "min(1, 2, key=int, abc=int)", # two many keywords
894 "min(1, 2, key=1)", # keyfunc is not callable
895 ):
Tim Peters7f061872004-12-07 21:17:46 +0000896 try:
Georg Brandl7cae87c2006-09-06 06:51:57 +0000897 exec(stmt, globals())
Tim Peters7f061872004-12-07 21:17:46 +0000898 except TypeError:
899 pass
900 else:
901 self.fail(stmt)
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +0000902
903 self.assertEqual(min((1,), key=neg), 1) # one elem iterable
904 self.assertEqual(min((1,2), key=neg), 2) # two elem iterable
905 self.assertEqual(min(1, 2, key=neg), 2) # two elems
906
907 data = [random.randrange(200) for i in range(100)]
908 keys = dict((elem, random.randrange(50)) for elem in data)
909 f = keys.__getitem__
910 self.assertEqual(min(data, key=f),
911 sorted(data, key=f)[0])
912
Georg Brandla18af4e2007-04-21 15:47:16 +0000913 def test_next(self):
914 it = iter(range(2))
915 self.assertEqual(next(it), 0)
916 self.assertEqual(next(it), 1)
917 self.assertRaises(StopIteration, next, it)
918 self.assertRaises(StopIteration, next, it)
Ezio Melottib3aedd42010-11-20 19:04:17 +0000919 self.assertEqual(next(it, 42), 42)
Georg Brandla18af4e2007-04-21 15:47:16 +0000920
921 class Iter(object):
922 def __iter__(self):
923 return self
924 def __next__(self):
925 raise StopIteration
926
927 it = iter(Iter())
Ezio Melottib3aedd42010-11-20 19:04:17 +0000928 self.assertEqual(next(it, 42), 42)
Georg Brandla18af4e2007-04-21 15:47:16 +0000929 self.assertRaises(StopIteration, next, it)
930
931 def gen():
932 yield 1
933 return
934
935 it = gen()
Ezio Melottib3aedd42010-11-20 19:04:17 +0000936 self.assertEqual(next(it), 1)
Georg Brandla18af4e2007-04-21 15:47:16 +0000937 self.assertRaises(StopIteration, next, it)
Ezio Melottib3aedd42010-11-20 19:04:17 +0000938 self.assertEqual(next(it, 42), 42)
Georg Brandla18af4e2007-04-21 15:47:16 +0000939
Walter Dörwald919497e2003-01-19 16:23:59 +0000940 def test_oct(self):
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000941 self.assertEqual(oct(100), '0o144')
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000942 self.assertEqual(oct(-100), '-0o144')
Walter Dörwald919497e2003-01-19 16:23:59 +0000943 self.assertRaises(TypeError, oct, ())
944
945 def write_testfile(self):
Guido van Rossuma88a0332007-02-26 16:59:55 +0000946 # NB the first 4 lines are also used to test input, below
Walter Dörwald919497e2003-01-19 16:23:59 +0000947 fp = open(TESTFN, 'w')
948 try:
949 fp.write('1+1\n')
Walter Dörwald919497e2003-01-19 16:23:59 +0000950 fp.write('The quick brown fox jumps over the lazy dog')
951 fp.write('.\n')
952 fp.write('Dear John\n')
953 fp.write('XXX'*100)
954 fp.write('YYY'*100)
955 finally:
956 fp.close()
957
958 def test_open(self):
959 self.write_testfile()
960 fp = open(TESTFN, 'r')
961 try:
962 self.assertEqual(fp.readline(4), '1+1\n')
Walter Dörwald919497e2003-01-19 16:23:59 +0000963 self.assertEqual(fp.readline(), 'The quick brown fox jumps over the lazy dog.\n')
964 self.assertEqual(fp.readline(4), 'Dear')
965 self.assertEqual(fp.readline(100), ' John\n')
966 self.assertEqual(fp.read(300), 'XXX'*100)
967 self.assertEqual(fp.read(1000), 'YYY'*100)
968 finally:
969 fp.close()
Florent Xicluna3f4ce632012-07-08 12:08:45 +0200970 unlink(TESTFN)
Walter Dörwald919497e2003-01-19 16:23:59 +0000971
Victor Stinnerf86a5e82012-06-05 13:43:22 +0200972 def test_open_default_encoding(self):
973 old_environ = dict(os.environ)
974 try:
975 # try to get a user preferred encoding different than the current
976 # locale encoding to check that open() uses the current locale
977 # encoding and not the user preferred encoding
978 for key in ('LC_ALL', 'LANG', 'LC_CTYPE'):
979 if key in os.environ:
980 del os.environ[key]
981
982 self.write_testfile()
983 current_locale_encoding = locale.getpreferredencoding(False)
984 fp = open(TESTFN, 'w')
985 try:
986 self.assertEqual(fp.encoding, current_locale_encoding)
987 finally:
988 fp.close()
Florent Xicluna3f4ce632012-07-08 12:08:45 +0200989 unlink(TESTFN)
Victor Stinnerf86a5e82012-06-05 13:43:22 +0200990 finally:
991 os.environ.clear()
992 os.environ.update(old_environ)
993
Walter Dörwald919497e2003-01-19 16:23:59 +0000994 def test_ord(self):
995 self.assertEqual(ord(' '), 32)
996 self.assertEqual(ord('A'), 65)
997 self.assertEqual(ord('a'), 97)
Guido van Rossumf9e91c92007-05-08 21:05:48 +0000998 self.assertEqual(ord('\x80'), 128)
999 self.assertEqual(ord('\xff'), 255)
1000
1001 self.assertEqual(ord(b' '), 32)
1002 self.assertEqual(ord(b'A'), 65)
1003 self.assertEqual(ord(b'a'), 97)
1004 self.assertEqual(ord(b'\x80'), 128)
1005 self.assertEqual(ord(b'\xff'), 255)
1006
Walter Dörwald1f5947b2007-05-22 16:52:54 +00001007 self.assertEqual(ord(chr(sys.maxunicode)), sys.maxunicode)
Walter Dörwald919497e2003-01-19 16:23:59 +00001008 self.assertRaises(TypeError, ord, 42)
Walter Dörwald919497e2003-01-19 16:23:59 +00001009
Guido van Rossum8ac004e2007-07-15 13:00:05 +00001010 self.assertEqual(ord(chr(0x10FFFF)), 0x10FFFF)
1011 self.assertEqual(ord("\U0000FFFF"), 0x0000FFFF)
1012 self.assertEqual(ord("\U00010000"), 0x00010000)
1013 self.assertEqual(ord("\U00010001"), 0x00010001)
1014 self.assertEqual(ord("\U000FFFFE"), 0x000FFFFE)
1015 self.assertEqual(ord("\U000FFFFF"), 0x000FFFFF)
1016 self.assertEqual(ord("\U00100000"), 0x00100000)
1017 self.assertEqual(ord("\U00100001"), 0x00100001)
1018 self.assertEqual(ord("\U0010FFFE"), 0x0010FFFE)
1019 self.assertEqual(ord("\U0010FFFF"), 0x0010FFFF)
1020
Walter Dörwald919497e2003-01-19 16:23:59 +00001021 def test_pow(self):
1022 self.assertEqual(pow(0,0), 1)
1023 self.assertEqual(pow(0,1), 0)
1024 self.assertEqual(pow(1,0), 1)
1025 self.assertEqual(pow(1,1), 1)
1026
1027 self.assertEqual(pow(2,0), 1)
1028 self.assertEqual(pow(2,10), 1024)
1029 self.assertEqual(pow(2,20), 1024*1024)
1030 self.assertEqual(pow(2,30), 1024*1024*1024)
1031
1032 self.assertEqual(pow(-2,0), 1)
1033 self.assertEqual(pow(-2,1), -2)
1034 self.assertEqual(pow(-2,2), 4)
1035 self.assertEqual(pow(-2,3), -8)
1036
Walter Dörwald919497e2003-01-19 16:23:59 +00001037 self.assertAlmostEqual(pow(0.,0), 1.)
1038 self.assertAlmostEqual(pow(0.,1), 0.)
1039 self.assertAlmostEqual(pow(1.,0), 1.)
1040 self.assertAlmostEqual(pow(1.,1), 1.)
1041
1042 self.assertAlmostEqual(pow(2.,0), 1.)
1043 self.assertAlmostEqual(pow(2.,10), 1024.)
1044 self.assertAlmostEqual(pow(2.,20), 1024.*1024.)
1045 self.assertAlmostEqual(pow(2.,30), 1024.*1024.*1024.)
1046
1047 self.assertAlmostEqual(pow(-2.,0), 1.)
1048 self.assertAlmostEqual(pow(-2.,1), -2.)
1049 self.assertAlmostEqual(pow(-2.,2), 4.)
1050 self.assertAlmostEqual(pow(-2.,3), -8.)
1051
Mark Dickinson5c2db372009-12-05 20:28:34 +00001052 for x in 2, 2.0:
1053 for y in 10, 10.0:
1054 for z in 1000, 1000.0:
Walter Dörwald919497e2003-01-19 16:23:59 +00001055 if isinstance(x, float) or \
1056 isinstance(y, float) or \
1057 isinstance(z, float):
1058 self.assertRaises(TypeError, pow, x, y, z)
1059 else:
1060 self.assertAlmostEqual(pow(x, y, z), 24.0)
1061
Jeffrey Yasskin3404b3c2007-09-07 15:15:49 +00001062 self.assertAlmostEqual(pow(-1, 0.5), 1j)
1063 self.assertAlmostEqual(pow(-1, 1/3), 0.5 + 0.8660254037844386j)
1064
Walter Dörwald919497e2003-01-19 16:23:59 +00001065 self.assertRaises(TypeError, pow, -1, -2, 3)
1066 self.assertRaises(ValueError, pow, 1, 2, 0)
Walter Dörwald919497e2003-01-19 16:23:59 +00001067
1068 self.assertRaises(TypeError, pow)
1069
Guido van Rossuma88a0332007-02-26 16:59:55 +00001070 def test_input(self):
1071 self.write_testfile()
1072 fp = open(TESTFN, 'r')
1073 savestdin = sys.stdin
1074 savestdout = sys.stdout # Eats the echo
1075 try:
1076 sys.stdin = fp
1077 sys.stdout = BitBucket()
1078 self.assertEqual(input(), "1+1")
Guido van Rossuma88a0332007-02-26 16:59:55 +00001079 self.assertEqual(input(), 'The quick brown fox jumps over the lazy dog.')
1080 self.assertEqual(input('testing\n'), 'Dear John')
1081
1082 # SF 1535165: don't segfault on closed stdin
1083 # sys.stdout must be a regular file for triggering
1084 sys.stdout = savestdout
1085 sys.stdin.close()
1086 self.assertRaises(ValueError, input)
1087
1088 sys.stdout = BitBucket()
Guido van Rossum34d19282007-08-09 01:03:29 +00001089 sys.stdin = io.StringIO("NULL\0")
Guido van Rossuma88a0332007-02-26 16:59:55 +00001090 self.assertRaises(TypeError, input, 42, 42)
Guido van Rossum34d19282007-08-09 01:03:29 +00001091 sys.stdin = io.StringIO(" 'whitespace'")
Guido van Rossuma88a0332007-02-26 16:59:55 +00001092 self.assertEqual(input(), " 'whitespace'")
Guido van Rossum34d19282007-08-09 01:03:29 +00001093 sys.stdin = io.StringIO()
Guido van Rossuma88a0332007-02-26 16:59:55 +00001094 self.assertRaises(EOFError, input)
1095
1096 del sys.stdout
1097 self.assertRaises(RuntimeError, input, 'prompt')
1098 del sys.stdin
1099 self.assertRaises(RuntimeError, input, 'prompt')
1100 finally:
1101 sys.stdin = savestdin
1102 sys.stdout = savestdout
1103 fp.close()
1104 unlink(TESTFN)
1105
Antoine Pitrou772add72011-11-06 02:37:42 +01001106 @unittest.skipUnless(pty, "the pty and signal modules must be available")
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001107 def check_input_tty(self, prompt, terminal_input, stdio_encoding=None):
Antoine Pitrou1ce4b142011-11-06 03:03:18 +01001108 if not sys.stdin.isatty() or not sys.stdout.isatty():
1109 self.skipTest("stdin and stdout must be ttys")
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001110 r, w = os.pipe()
1111 try:
1112 pid, fd = pty.fork()
1113 except (OSError, AttributeError) as e:
1114 os.close(r)
1115 os.close(w)
1116 self.skipTest("pty.fork() raised {}".format(e))
1117 if pid == 0:
1118 # Child
Antoine Pitrou772add72011-11-06 02:37:42 +01001119 try:
1120 # Make sure we don't get stuck if there's a problem
1121 signal.alarm(2)
1122 os.close(r)
1123 # Check the error handlers are accounted for
1124 if stdio_encoding:
1125 sys.stdin = io.TextIOWrapper(sys.stdin.detach(),
1126 encoding=stdio_encoding,
1127 errors='surrogateescape')
1128 sys.stdout = io.TextIOWrapper(sys.stdout.detach(),
1129 encoding=stdio_encoding,
1130 errors='replace')
1131 with open(w, "w") as wpipe:
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001132 print("tty =", sys.stdin.isatty() and sys.stdout.isatty(), file=wpipe)
1133 print(ascii(input(prompt)), file=wpipe)
Antoine Pitrou772add72011-11-06 02:37:42 +01001134 except:
1135 traceback.print_exc()
1136 finally:
1137 # We don't want to return to unittest...
1138 os._exit(0)
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001139 # Parent
1140 os.close(w)
1141 os.write(fd, terminal_input + b"\r\n")
1142 # Get results from the pipe
1143 with open(r, "r") as rpipe:
1144 lines = []
1145 while True:
1146 line = rpipe.readline().strip()
Antoine Pitrou772add72011-11-06 02:37:42 +01001147 if line == "":
1148 # The other end was closed => the child exited
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001149 break
1150 lines.append(line)
Antoine Pitrou772add72011-11-06 02:37:42 +01001151 # Check the result was got and corresponds to the user's terminal input
1152 if len(lines) != 2:
1153 # Something went wrong, try to get at stderr
1154 with open(fd, "r", encoding="ascii", errors="ignore") as child_output:
1155 self.fail("got %d lines in pipe but expected 2, child output was:\n%s"
1156 % (len(lines), child_output.read()))
1157 os.close(fd)
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001158 # Check we did exercise the GNU readline path
1159 self.assertIn(lines[0], {'tty = True', 'tty = False'})
1160 if lines[0] != 'tty = True':
1161 self.skipTest("standard IO in should have been a tty")
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001162 input_result = eval(lines[1]) # ascii() -> eval() roundtrip
1163 if stdio_encoding:
1164 expected = terminal_input.decode(stdio_encoding, 'surrogateescape')
1165 else:
1166 expected = terminal_input.decode(sys.stdin.encoding) # what else?
1167 self.assertEqual(input_result, expected)
1168
1169 def test_input_tty(self):
1170 # Test input() functionality when wired to a tty (the code path
1171 # is different and invokes GNU readline if available).
1172 self.check_input_tty("prompt", b"quux")
1173
1174 def test_input_tty_non_ascii(self):
1175 # Check stdin/stdout encoding is used when invoking GNU readline
1176 self.check_input_tty("prompté", b"quux\xe9", "utf-8")
1177
1178 def test_input_tty_non_ascii_unicode_errors(self):
1179 # Check stdin/stdout error handler is used when invoking GNU readline
1180 self.check_input_tty("prompté", b"quux\xe9", "ascii")
1181
Andrew Svetlov8e42e8a2012-12-23 12:49:33 +02001182 # test_int(): see test_int.py for tests of built-in function int().
1183
Walter Dörwald919497e2003-01-19 16:23:59 +00001184 def test_repr(self):
1185 self.assertEqual(repr(''), '\'\'')
1186 self.assertEqual(repr(0), '0')
Walter Dörwald919497e2003-01-19 16:23:59 +00001187 self.assertEqual(repr(()), '()')
1188 self.assertEqual(repr([]), '[]')
1189 self.assertEqual(repr({}), '{}')
1190 a = []
1191 a.append(a)
1192 self.assertEqual(repr(a), '[[...]]')
1193 a = {}
1194 a[0] = a
1195 self.assertEqual(repr(a), '{0: {...}}')
1196
1197 def test_round(self):
1198 self.assertEqual(round(0.0), 0.0)
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001199 self.assertEqual(type(round(0.0)), int)
Walter Dörwald919497e2003-01-19 16:23:59 +00001200 self.assertEqual(round(1.0), 1.0)
1201 self.assertEqual(round(10.0), 10.0)
1202 self.assertEqual(round(1000000000.0), 1000000000.0)
1203 self.assertEqual(round(1e20), 1e20)
1204
1205 self.assertEqual(round(-1.0), -1.0)
1206 self.assertEqual(round(-10.0), -10.0)
1207 self.assertEqual(round(-1000000000.0), -1000000000.0)
1208 self.assertEqual(round(-1e20), -1e20)
1209
1210 self.assertEqual(round(0.1), 0.0)
1211 self.assertEqual(round(1.1), 1.0)
1212 self.assertEqual(round(10.1), 10.0)
1213 self.assertEqual(round(1000000000.1), 1000000000.0)
1214
1215 self.assertEqual(round(-1.1), -1.0)
1216 self.assertEqual(round(-10.1), -10.0)
1217 self.assertEqual(round(-1000000000.1), -1000000000.0)
1218
1219 self.assertEqual(round(0.9), 1.0)
1220 self.assertEqual(round(9.9), 10.0)
1221 self.assertEqual(round(999999999.9), 1000000000.0)
1222
1223 self.assertEqual(round(-0.9), -1.0)
1224 self.assertEqual(round(-9.9), -10.0)
1225 self.assertEqual(round(-999999999.9), -1000000000.0)
1226
1227 self.assertEqual(round(-8.0, -1), -10.0)
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001228 self.assertEqual(type(round(-8.0, -1)), float)
1229
1230 self.assertEqual(type(round(-8.0, 0)), float)
1231 self.assertEqual(type(round(-8.0, 1)), float)
1232
1233 # Check even / odd rounding behaviour
1234 self.assertEqual(round(5.5), 6)
1235 self.assertEqual(round(6.5), 6)
1236 self.assertEqual(round(-5.5), -6)
1237 self.assertEqual(round(-6.5), -6)
1238
1239 # Check behavior on ints
1240 self.assertEqual(round(0), 0)
1241 self.assertEqual(round(8), 8)
1242 self.assertEqual(round(-8), -8)
1243 self.assertEqual(type(round(0)), int)
Mark Dickinson1124e712009-01-28 21:25:58 +00001244 self.assertEqual(type(round(-8, -1)), int)
1245 self.assertEqual(type(round(-8, 0)), int)
1246 self.assertEqual(type(round(-8, 1)), int)
Walter Dörwald919497e2003-01-19 16:23:59 +00001247
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001248 # test new kwargs
1249 self.assertEqual(round(number=-8.0, ndigits=-1), -10.0)
1250
Walter Dörwald919497e2003-01-19 16:23:59 +00001251 self.assertRaises(TypeError, round)
1252
Alex Martelliae211f92007-08-22 23:21:33 +00001253 # test generic rounding delegation for reals
1254 class TestRound:
1255 def __round__(self):
1256 return 23
1257
1258 class TestNoRound:
1259 pass
1260
1261 self.assertEqual(round(TestRound()), 23)
1262
1263 self.assertRaises(TypeError, round, 1, 2, 3)
1264 self.assertRaises(TypeError, round, TestNoRound())
1265
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001266 t = TestNoRound()
1267 t.__round__ = lambda *args: args
1268 self.assertRaises(TypeError, round, t)
1269 self.assertRaises(TypeError, round, t, 0)
1270
Mark Dickinsonad731b92009-11-09 17:12:30 +00001271 # Some versions of glibc for alpha have a bug that affects
1272 # float -> integer rounding (floor, ceil, rint, round) for
1273 # values in the range [2**52, 2**53). See:
1274 #
1275 # http://sources.redhat.com/bugzilla/show_bug.cgi?id=5350
1276 #
1277 # We skip this test on Linux/alpha if it would fail.
1278 linux_alpha = (platform.system().startswith('Linux') and
1279 platform.machine().startswith('alpha'))
1280 system_round_bug = round(5e15+1) != 5e15+1
1281 @unittest.skipIf(linux_alpha and system_round_bug,
1282 "test will fail; failure is probably due to a "
1283 "buggy system round function")
1284 def test_round_large(self):
1285 # Issue #1869: integral floats should remain unchanged
1286 self.assertEqual(round(5e15-1), 5e15-1)
1287 self.assertEqual(round(5e15), 5e15)
1288 self.assertEqual(round(5e15+1), 5e15+1)
1289 self.assertEqual(round(5e15+2), 5e15+2)
1290 self.assertEqual(round(5e15+3), 5e15+3)
1291
Walter Dörwald919497e2003-01-19 16:23:59 +00001292 def test_setattr(self):
Tim Petersf2715e02003-02-19 02:35:07 +00001293 setattr(sys, 'spam', 1)
1294 self.assertEqual(sys.spam, 1)
1295 self.assertRaises(TypeError, setattr, sys, 1, 'spam')
1296 self.assertRaises(TypeError, setattr)
Walter Dörwald919497e2003-01-19 16:23:59 +00001297
Chris Jerdonek5fae0e52012-11-20 17:45:51 -08001298 # test_str(): see test_unicode.py and test_bytes.py for str() tests.
Walter Dörwald919497e2003-01-19 16:23:59 +00001299
Alex Martellia70b1912003-04-22 08:12:33 +00001300 def test_sum(self):
1301 self.assertEqual(sum([]), 0)
Guido van Rossum805365e2007-05-07 22:24:25 +00001302 self.assertEqual(sum(list(range(2,8))), 27)
1303 self.assertEqual(sum(iter(list(range(2,8)))), 27)
Alex Martellia70b1912003-04-22 08:12:33 +00001304 self.assertEqual(sum(Squares(10)), 285)
1305 self.assertEqual(sum(iter(Squares(10))), 285)
1306 self.assertEqual(sum([[1], [2], [3]], []), [1, 2, 3])
1307
1308 self.assertRaises(TypeError, sum)
1309 self.assertRaises(TypeError, sum, 42)
1310 self.assertRaises(TypeError, sum, ['a', 'b', 'c'])
1311 self.assertRaises(TypeError, sum, ['a', 'b', 'c'], '')
Benjamin Petersonce071ca2011-07-29 14:23:47 -05001312 self.assertRaises(TypeError, sum, [b'a', b'c'], b'')
1313 values = [bytearray(b'a'), bytearray(b'b')]
1314 self.assertRaises(TypeError, sum, values, bytearray(b''))
Alex Martellia70b1912003-04-22 08:12:33 +00001315 self.assertRaises(TypeError, sum, [[1], [2], [3]])
1316 self.assertRaises(TypeError, sum, [{2:3}])
1317 self.assertRaises(TypeError, sum, [{2:3}]*2, {2:3})
1318
1319 class BadSeq:
1320 def __getitem__(self, index):
1321 raise ValueError
1322 self.assertRaises(ValueError, sum, BadSeq())
1323
Mark Dickinson3a22b472009-10-17 21:48:16 +00001324 empty = []
1325 sum(([x] for x in range(10)), empty)
1326 self.assertEqual(empty, [])
1327
Walter Dörwald919497e2003-01-19 16:23:59 +00001328 def test_type(self):
1329 self.assertEqual(type(''), type('123'))
1330 self.assertNotEqual(type(''), type(()))
1331
Guido van Rossumfee7b932005-01-16 00:21:28 +00001332 # We don't want self in vars(), so these are static methods
1333
1334 @staticmethod
Walter Dörwald919497e2003-01-19 16:23:59 +00001335 def get_vars_f0():
1336 return vars()
Walter Dörwald919497e2003-01-19 16:23:59 +00001337
Guido van Rossumfee7b932005-01-16 00:21:28 +00001338 @staticmethod
Walter Dörwald919497e2003-01-19 16:23:59 +00001339 def get_vars_f2():
1340 BuiltinTest.get_vars_f0()
1341 a = 1
1342 b = 2
1343 return vars()
Walter Dörwald919497e2003-01-19 16:23:59 +00001344
Mark Dickinsonfb3dc942010-05-25 19:06:24 +00001345 class C_get_vars(object):
1346 def getDict(self):
1347 return {'a':2}
1348 __dict__ = property(fget=getDict)
1349
Walter Dörwald919497e2003-01-19 16:23:59 +00001350 def test_vars(self):
Raymond Hettingera690a992003-11-16 16:17:49 +00001351 self.assertEqual(set(vars()), set(dir()))
Raymond Hettingera690a992003-11-16 16:17:49 +00001352 self.assertEqual(set(vars(sys)), set(dir(sys)))
Walter Dörwald919497e2003-01-19 16:23:59 +00001353 self.assertEqual(self.get_vars_f0(), {})
1354 self.assertEqual(self.get_vars_f2(), {'a': 1, 'b': 2})
1355 self.assertRaises(TypeError, vars, 42, 42)
1356 self.assertRaises(TypeError, vars, 42)
Mark Dickinsonfb3dc942010-05-25 19:06:24 +00001357 self.assertEqual(vars(self.C_get_vars()), {'a':2})
Walter Dörwald919497e2003-01-19 16:23:59 +00001358
1359 def test_zip(self):
1360 a = (1, 2, 3)
1361 b = (4, 5, 6)
1362 t = [(1, 4), (2, 5), (3, 6)]
Guido van Rossum801f0d72006-08-24 19:48:10 +00001363 self.assertEqual(list(zip(a, b)), t)
Walter Dörwald919497e2003-01-19 16:23:59 +00001364 b = [4, 5, 6]
Guido van Rossum801f0d72006-08-24 19:48:10 +00001365 self.assertEqual(list(zip(a, b)), t)
Walter Dörwald919497e2003-01-19 16:23:59 +00001366 b = (4, 5, 6, 7)
Guido van Rossum801f0d72006-08-24 19:48:10 +00001367 self.assertEqual(list(zip(a, b)), t)
Walter Dörwald919497e2003-01-19 16:23:59 +00001368 class I:
1369 def __getitem__(self, i):
1370 if i < 0 or i > 2: raise IndexError
1371 return i + 4
Guido van Rossum801f0d72006-08-24 19:48:10 +00001372 self.assertEqual(list(zip(a, I())), t)
1373 self.assertEqual(list(zip()), [])
1374 self.assertEqual(list(zip(*[])), [])
Walter Dörwald919497e2003-01-19 16:23:59 +00001375 self.assertRaises(TypeError, zip, None)
1376 class G:
1377 pass
1378 self.assertRaises(TypeError, zip, a, G())
Alexander Belopolskye29e6bf2010-08-16 18:55:46 +00001379 self.assertRaises(RuntimeError, zip, a, TestFailingIter())
Walter Dörwald919497e2003-01-19 16:23:59 +00001380
1381 # Make sure zip doesn't try to allocate a billion elements for the
1382 # result list when one of its arguments doesn't say how long it is.
1383 # A MemoryError is the most likely failure mode.
1384 class SequenceWithoutALength:
1385 def __getitem__(self, i):
1386 if i == 5:
1387 raise IndexError
1388 else:
1389 return i
1390 self.assertEqual(
Guido van Rossum805365e2007-05-07 22:24:25 +00001391 list(zip(SequenceWithoutALength(), range(2**30))),
Walter Dörwald919497e2003-01-19 16:23:59 +00001392 list(enumerate(range(5)))
1393 )
1394
1395 class BadSeq:
1396 def __getitem__(self, i):
1397 if i == 5:
1398 raise ValueError
1399 else:
1400 return i
Guido van Rossum801f0d72006-08-24 19:48:10 +00001401 self.assertRaises(ValueError, list, zip(BadSeq(), BadSeq()))
Walter Dörwald919497e2003-01-19 16:23:59 +00001402
Kristján Valur Jónsson31668b82012-04-03 10:49:41 +00001403 def test_zip_pickle(self):
1404 a = (1, 2, 3)
1405 b = (4, 5, 6)
1406 t = [(1, 4), (2, 5), (3, 6)]
1407 z1 = zip(a, b)
1408 self.check_iter_pickle(z1, t)
1409
Eric Smithe4d63172010-09-13 20:48:43 +00001410 def test_format(self):
1411 # Test the basic machinery of the format() builtin. Don't test
1412 # the specifics of the various formatters
1413 self.assertEqual(format(3, ''), '3')
1414
1415 # Returns some classes to use for various tests. There's
1416 # an old-style version, and a new-style version
1417 def classes_new():
1418 class A(object):
1419 def __init__(self, x):
1420 self.x = x
1421 def __format__(self, format_spec):
1422 return str(self.x) + format_spec
1423 class DerivedFromA(A):
1424 pass
1425
1426 class Simple(object): pass
1427 class DerivedFromSimple(Simple):
1428 def __init__(self, x):
1429 self.x = x
1430 def __format__(self, format_spec):
1431 return str(self.x) + format_spec
1432 class DerivedFromSimple2(DerivedFromSimple): pass
1433 return A, DerivedFromA, DerivedFromSimple, DerivedFromSimple2
1434
1435 def class_test(A, DerivedFromA, DerivedFromSimple, DerivedFromSimple2):
1436 self.assertEqual(format(A(3), 'spec'), '3spec')
1437 self.assertEqual(format(DerivedFromA(4), 'spec'), '4spec')
1438 self.assertEqual(format(DerivedFromSimple(5), 'abc'), '5abc')
1439 self.assertEqual(format(DerivedFromSimple2(10), 'abcdef'),
1440 '10abcdef')
1441
1442 class_test(*classes_new())
1443
1444 def empty_format_spec(value):
1445 # test that:
1446 # format(x, '') == str(x)
1447 # format(x) == str(x)
1448 self.assertEqual(format(value, ""), str(value))
1449 self.assertEqual(format(value), str(value))
1450
1451 # for builtin types, format(x, "") == str(x)
1452 empty_format_spec(17**13)
1453 empty_format_spec(1.0)
1454 empty_format_spec(3.1415e104)
1455 empty_format_spec(-3.1415e104)
1456 empty_format_spec(3.1415e-104)
1457 empty_format_spec(-3.1415e-104)
1458 empty_format_spec(object)
1459 empty_format_spec(None)
1460
1461 # TypeError because self.__format__ returns the wrong type
1462 class BadFormatResult:
1463 def __format__(self, format_spec):
1464 return 1.0
1465 self.assertRaises(TypeError, format, BadFormatResult(), "")
1466
1467 # TypeError because format_spec is not unicode or str
1468 self.assertRaises(TypeError, format, object(), 4)
1469 self.assertRaises(TypeError, format, object(), object())
1470
1471 # tests for object.__format__ really belong elsewhere, but
1472 # there's no good place to put them
1473 x = object().__format__('')
1474 self.assertTrue(x.startswith('<object object at'))
1475
1476 # first argument to object.__format__ must be string
1477 self.assertRaises(TypeError, object().__format__, 3)
1478 self.assertRaises(TypeError, object().__format__, object())
1479 self.assertRaises(TypeError, object().__format__, None)
1480
1481 # --------------------------------------------------------------------
1482 # Issue #7994: object.__format__ with a non-empty format string is
Eric V. Smithb9cd3532011-03-12 10:08:48 -05001483 # deprecated
Andrew Svetlov2cd8ce42012-12-23 14:27:17 +02001484 def test_deprecated_format_string(obj, fmt_str, should_raise):
1485 if should_raise:
1486 self.assertRaises(TypeError, format, obj, fmt_str)
Eric Smithe4d63172010-09-13 20:48:43 +00001487 else:
Andrew Svetlov2cd8ce42012-12-23 14:27:17 +02001488 format(obj, fmt_str)
Eric Smithe4d63172010-09-13 20:48:43 +00001489
1490 fmt_strs = ['', 's']
1491
1492 class A:
1493 def __format__(self, fmt_str):
1494 return format('', fmt_str)
1495
1496 for fmt_str in fmt_strs:
1497 test_deprecated_format_string(A(), fmt_str, False)
1498
1499 class B:
1500 pass
1501
1502 class C(object):
1503 pass
1504
1505 for cls in [object, B, C]:
1506 for fmt_str in fmt_strs:
1507 test_deprecated_format_string(cls(), fmt_str, len(fmt_str) != 0)
1508 # --------------------------------------------------------------------
1509
1510 # make sure we can take a subclass of str as a format spec
1511 class DerivedFromStr(str): pass
1512 self.assertEqual(format(0, DerivedFromStr('10')), ' 0')
1513
Christian Heimes90c3d9b2008-02-23 13:18:03 +00001514 def test_bin(self):
1515 self.assertEqual(bin(0), '0b0')
1516 self.assertEqual(bin(1), '0b1')
1517 self.assertEqual(bin(-1), '-0b1')
1518 self.assertEqual(bin(2**65), '0b1' + '0' * 65)
1519 self.assertEqual(bin(2**65-1), '0b' + '1' * 65)
1520 self.assertEqual(bin(-(2**65)), '-0b1' + '0' * 65)
1521 self.assertEqual(bin(-(2**65-1)), '-0b' + '1' * 65)
1522
Georg Brandl953152f2009-07-22 12:03:59 +00001523 def test_bytearray_translate(self):
1524 x = bytearray(b"abc")
1525 self.assertRaises(ValueError, x.translate, b"1", 1)
1526 self.assertRaises(TypeError, x.translate, b"1"*256, 1)
1527
Benjamin Petersonc4607ae2011-07-29 18:19:43 -05001528 def test_construct_singletons(self):
Benjamin Peterson18d7d7a2011-07-29 18:27:44 -05001529 for const in None, Ellipsis, NotImplemented:
Benjamin Petersonc4607ae2011-07-29 18:19:43 -05001530 tp = type(const)
1531 self.assertIs(tp(), const)
1532 self.assertRaises(TypeError, tp, 1, 2)
1533 self.assertRaises(TypeError, tp, a=1, b=2)
1534
Raymond Hettinger64958a12003-12-17 20:43:33 +00001535class TestSorted(unittest.TestCase):
1536
1537 def test_basic(self):
Guido van Rossum805365e2007-05-07 22:24:25 +00001538 data = list(range(100))
Raymond Hettinger64958a12003-12-17 20:43:33 +00001539 copy = data[:]
1540 random.shuffle(copy)
1541 self.assertEqual(data, sorted(copy))
1542 self.assertNotEqual(data, copy)
1543
1544 data.reverse()
1545 random.shuffle(copy)
Raymond Hettinger64958a12003-12-17 20:43:33 +00001546 self.assertEqual(data, sorted(copy, key=lambda x: -x))
1547 self.assertNotEqual(data, copy)
1548 random.shuffle(copy)
1549 self.assertEqual(data, sorted(copy, reverse=1))
1550 self.assertNotEqual(data, copy)
1551
1552 def test_inputtypes(self):
1553 s = 'abracadabra'
Walter Dörwald1f5947b2007-05-22 16:52:54 +00001554 types = [list, tuple, str]
Walter Dörwald4e41a4b2005-08-03 17:09:04 +00001555 for T in types:
Raymond Hettinger64958a12003-12-17 20:43:33 +00001556 self.assertEqual(sorted(s), sorted(T(s)))
1557
Walter Dörwald1f5947b2007-05-22 16:52:54 +00001558 s = ''.join(set(s)) # unique letters only
1559 types = [str, set, frozenset, list, tuple, dict.fromkeys]
Walter Dörwald4e41a4b2005-08-03 17:09:04 +00001560 for T in types:
Raymond Hettinger64958a12003-12-17 20:43:33 +00001561 self.assertEqual(sorted(s), sorted(T(s)))
1562
1563 def test_baddecorator(self):
1564 data = 'The quick Brown fox Jumped over The lazy Dog'.split()
1565 self.assertRaises(TypeError, sorted, data, None, lambda x,y: 0)
1566
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001567def test_main(verbose=None):
Serhiy Storchaka278d03b2013-04-06 22:52:34 +03001568 test_classes = (BuiltinTest, TestSorted)
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001569
1570 run_unittest(*test_classes)
1571
1572 # verify reference counting
1573 if verbose and hasattr(sys, "gettotalrefcount"):
1574 import gc
1575 counts = [None] * 5
Guido van Rossum805365e2007-05-07 22:24:25 +00001576 for i in range(len(counts)):
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001577 run_unittest(*test_classes)
1578 gc.collect()
1579 counts[i] = sys.gettotalrefcount()
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001580 print(counts)
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001581
Walter Dörwald919497e2003-01-19 16:23:59 +00001582
1583if __name__ == "__main__":
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001584 test_main(verbose=True)