blob: c342a4329f4a573eb38bde532ce9781a6268bef7 [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
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000467 def test_general_eval(self):
468 # Tests that general mappings can be used for the locals argument
469
470 class M:
471 "Test mapping interface versus possible calls from eval()."
472 def __getitem__(self, key):
473 if key == 'a':
474 return 12
475 raise KeyError
Guido van Rossumcd70eee2007-02-11 18:53:00 +0000476 def keys(self):
477 return list('xyz')
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000478
479 m = M()
480 g = globals()
481 self.assertEqual(eval('a', g, m), 12)
482 self.assertRaises(NameError, eval, 'b', g, m)
483 self.assertEqual(eval('dir()', g, m), list('xyz'))
484 self.assertEqual(eval('globals()', g, m), g)
485 self.assertEqual(eval('locals()', g, m), m)
Raymond Hettinger513ffe82004-07-06 13:44:41 +0000486 self.assertRaises(TypeError, eval, 'a', m)
Raymond Hettinger66bd2332004-08-02 08:30:07 +0000487 class A:
488 "Non-mapping"
489 pass
490 m = A()
491 self.assertRaises(TypeError, eval, 'a', g, m)
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000492
493 # Verify that dict subclasses work as well
494 class D(dict):
495 def __getitem__(self, key):
496 if key == 'a':
497 return 12
498 return dict.__getitem__(self, key)
Guido van Rossumcd70eee2007-02-11 18:53:00 +0000499 def keys(self):
500 return list('xyz')
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000501
502 d = D()
503 self.assertEqual(eval('a', g, d), 12)
504 self.assertRaises(NameError, eval, 'b', g, d)
505 self.assertEqual(eval('dir()', g, d), list('xyz'))
506 self.assertEqual(eval('globals()', g, d), g)
507 self.assertEqual(eval('locals()', g, d), d)
508
509 # Verify locals stores (used by list comps)
510 eval('[locals() for i in (2,3)]', g, d)
Raymond Hettingerf80680d2008-02-06 00:07:11 +0000511 eval('[locals() for i in (2,3)]', g, collections.UserDict())
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000512
513 class SpreadSheet:
514 "Sample application showing nested, calculated lookups."
515 _cells = {}
516 def __setitem__(self, key, formula):
517 self._cells[key] = formula
Thomas Wouters73e5a5b2006-06-08 15:35:45 +0000518 def __getitem__(self, key):
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000519 return eval(self._cells[key], globals(), self)
520
521 ss = SpreadSheet()
522 ss['a1'] = '5'
523 ss['a2'] = 'a1*6'
524 ss['a3'] = 'a2*7'
525 self.assertEqual(ss['a3'], 210)
526
Raymond Hettinger2a7dede2004-08-07 04:55:30 +0000527 # Verify that dir() catches a non-list returned by eval
528 # SF bug #1004669
529 class C:
530 def __getitem__(self, item):
531 raise KeyError(item)
Guido van Rossumcd70eee2007-02-11 18:53:00 +0000532 def keys(self):
533 return 1 # used to be 'a' but that's no longer an error
Raymond Hettinger2a7dede2004-08-07 04:55:30 +0000534 self.assertRaises(TypeError, eval, 'dir()', globals(), C())
535
Georg Brandl7cae87c2006-09-06 06:51:57 +0000536 def test_exec(self):
537 g = {}
538 exec('z = 1', g)
539 if '__builtins__' in g:
540 del g['__builtins__']
541 self.assertEqual(g, {'z': 1})
542
Guido van Rossumef87d6e2007-05-02 19:09:54 +0000543 exec('z = 1+1', g)
Georg Brandl7cae87c2006-09-06 06:51:57 +0000544 if '__builtins__' in g:
545 del g['__builtins__']
546 self.assertEqual(g, {'z': 2})
547 g = {}
548 l = {}
549
Brett Cannon77628992010-03-20 20:59:33 +0000550 with check_warnings():
551 warnings.filterwarnings("ignore", "global statement",
552 module="<string>")
553 exec('global a; a = 1; b = 2', g, l)
Georg Brandl7cae87c2006-09-06 06:51:57 +0000554 if '__builtins__' in g:
555 del g['__builtins__']
556 if '__builtins__' in l:
557 del l['__builtins__']
558 self.assertEqual((g, l), ({'a': 1}, {'b': 2}))
559
Victor Stinnerb0b22422012-04-19 00:57:45 +0200560 def test_exec_globals(self):
561 code = compile("print('Hello World!')", "", "exec")
562 # no builtin function
563 self.assertRaisesRegex(NameError, "name 'print' is not defined",
564 exec, code, {'__builtins__': {}})
565 # __builtins__ must be a mapping type
566 self.assertRaises(TypeError,
567 exec, code, {'__builtins__': 123})
568
569 # no __build_class__ function
570 code = compile("class A: pass", "", "exec")
571 self.assertRaisesRegex(NameError, "__build_class__ not found",
572 exec, code, {'__builtins__': {}})
573
574 class frozendict_error(Exception):
575 pass
576
577 class frozendict(dict):
578 def __setitem__(self, key, value):
579 raise frozendict_error("frozendict is readonly")
580
581 # read-only builtins
582 frozen_builtins = frozendict(__builtins__)
583 code = compile("__builtins__['superglobal']=2; print(superglobal)", "test", "exec")
584 self.assertRaises(frozendict_error,
585 exec, code, {'__builtins__': frozen_builtins})
586
587 # read-only globals
588 namespace = frozendict({})
589 code = compile("x=1", "test", "exec")
590 self.assertRaises(frozendict_error,
591 exec, code, namespace)
592
Amaury Forgeot d'Arc9ed77352008-04-04 23:25:27 +0000593 def test_exec_redirected(self):
594 savestdout = sys.stdout
595 sys.stdout = None # Whatever that cannot flush()
596 try:
597 # Used to raise SystemError('error return without exception set')
598 exec('a')
599 except NameError:
600 pass
601 finally:
602 sys.stdout = savestdout
603
Walter Dörwald919497e2003-01-19 16:23:59 +0000604 def test_filter(self):
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000605 self.assertEqual(list(filter(lambda c: 'a' <= c <= 'z', 'Hello World')), list('elloorld'))
606 self.assertEqual(list(filter(None, [1, 'hello', [], [3], '', None, 9, 0])), [1, 'hello', [3], 9])
607 self.assertEqual(list(filter(lambda x: x > 0, [1, -3, 9, 0, 2])), [1, 9, 2])
608 self.assertEqual(list(filter(None, Squares(10))), [1, 4, 9, 16, 25, 36, 49, 64, 81])
609 self.assertEqual(list(filter(lambda x: x%2, Squares(10))), [1, 9, 25, 49, 81])
Walter Dörwald919497e2003-01-19 16:23:59 +0000610 def identity(item):
611 return 1
612 filter(identity, Squares(5))
613 self.assertRaises(TypeError, filter)
614 class BadSeq(object):
Tim Petersf2715e02003-02-19 02:35:07 +0000615 def __getitem__(self, index):
616 if index<4:
617 return 42
618 raise ValueError
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000619 self.assertRaises(ValueError, list, filter(lambda x: x, BadSeq()))
Walter Dörwald919497e2003-01-19 16:23:59 +0000620 def badfunc():
621 pass
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000622 self.assertRaises(TypeError, list, filter(badfunc, range(5)))
Walter Dörwald919497e2003-01-19 16:23:59 +0000623
Walter Dörwaldbf517072003-01-27 15:57:14 +0000624 # test bltinmodule.c::filtertuple()
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000625 self.assertEqual(list(filter(None, (1, 2))), [1, 2])
626 self.assertEqual(list(filter(lambda x: x>=3, (1, 2, 3, 4))), [3, 4])
627 self.assertRaises(TypeError, list, filter(42, (1, 2)))
Walter Dörwaldc3da83f2003-02-04 20:24:45 +0000628
Kristján Valur Jónsson31668b82012-04-03 10:49:41 +0000629 def test_filter_pickle(self):
630 f1 = filter(filter_char, "abcdeabcde")
631 f2 = filter(filter_char, "abcdeabcde")
632 self.check_iter_pickle(f1, list(f2))
633
Walter Dörwald919497e2003-01-19 16:23:59 +0000634 def test_getattr(self):
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000635 self.assertTrue(getattr(sys, 'stdout') is sys.stdout)
Walter Dörwald919497e2003-01-19 16:23:59 +0000636 self.assertRaises(TypeError, getattr, sys, 1)
637 self.assertRaises(TypeError, getattr, sys, 1, "foo")
638 self.assertRaises(TypeError, getattr)
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000639 self.assertRaises(AttributeError, getattr, sys, chr(sys.maxunicode))
Victor Stinner624dbf62010-03-12 17:17:58 +0000640 # unicode surrogates are not encodable to the default encoding (utf8)
641 self.assertRaises(AttributeError, getattr, 1, "\uDAD1\uD51E")
Walter Dörwald919497e2003-01-19 16:23:59 +0000642
643 def test_hasattr(self):
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000644 self.assertTrue(hasattr(sys, 'stdout'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000645 self.assertRaises(TypeError, hasattr, sys, 1)
646 self.assertRaises(TypeError, hasattr)
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000647 self.assertEqual(False, hasattr(sys, chr(sys.maxunicode)))
Walter Dörwald919497e2003-01-19 16:23:59 +0000648
Benjamin Peterson17689992010-08-24 03:26:23 +0000649 # Check that hasattr propagates all exceptions outside of
650 # AttributeError.
Alexandre Vassalottieca20b62008-05-16 02:54:33 +0000651 class A:
652 def __getattr__(self, what):
Benjamin Peterson17689992010-08-24 03:26:23 +0000653 raise SystemExit
654 self.assertRaises(SystemExit, hasattr, A(), "b")
Alexandre Vassalottieca20b62008-05-16 02:54:33 +0000655 class B:
656 def __getattr__(self, what):
Benjamin Peterson17689992010-08-24 03:26:23 +0000657 raise ValueError
658 self.assertRaises(ValueError, hasattr, B(), "b")
Alexandre Vassalottieca20b62008-05-16 02:54:33 +0000659
Walter Dörwald919497e2003-01-19 16:23:59 +0000660 def test_hash(self):
661 hash(None)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000662 self.assertEqual(hash(1), hash(1))
Walter Dörwald919497e2003-01-19 16:23:59 +0000663 self.assertEqual(hash(1), hash(1.0))
664 hash('spam')
Guido van Rossum98297ee2007-11-06 21:34:58 +0000665 self.assertEqual(hash('spam'), hash(b'spam'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000666 hash((0,1,2,3))
667 def f(): pass
668 self.assertRaises(TypeError, hash, [])
669 self.assertRaises(TypeError, hash, {})
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000670 # Bug 1536021: Allow hash to return long objects
671 class X:
672 def __hash__(self):
673 return 2**100
Ezio Melottib3aedd42010-11-20 19:04:17 +0000674 self.assertEqual(type(hash(X())), int)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000675 class Z(int):
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000676 def __hash__(self):
677 return self
Ezio Melottib3aedd42010-11-20 19:04:17 +0000678 self.assertEqual(hash(Z(42)), hash(42))
Walter Dörwald919497e2003-01-19 16:23:59 +0000679
680 def test_hex(self):
681 self.assertEqual(hex(16), '0x10')
Guido van Rossume2a383d2007-01-15 16:59:06 +0000682 self.assertEqual(hex(-16), '-0x10')
Walter Dörwald919497e2003-01-19 16:23:59 +0000683 self.assertRaises(TypeError, hex, {})
684
685 def test_id(self):
686 id(None)
687 id(1)
Walter Dörwald919497e2003-01-19 16:23:59 +0000688 id(1.0)
689 id('spam')
690 id((0,1,2,3))
691 id([0,1,2,3])
692 id({'spam': 1, 'eggs': 2, 'ham': 3})
693
Guido van Rossuma88a0332007-02-26 16:59:55 +0000694 # Test input() later, alphabetized as if it were raw_input
695
Walter Dörwald919497e2003-01-19 16:23:59 +0000696 def test_iter(self):
697 self.assertRaises(TypeError, iter)
698 self.assertRaises(TypeError, iter, 42, 42)
699 lists = [("1", "2"), ["1", "2"], "12"]
Walter Dörwald919497e2003-01-19 16:23:59 +0000700 for l in lists:
701 i = iter(l)
Georg Brandla18af4e2007-04-21 15:47:16 +0000702 self.assertEqual(next(i), '1')
703 self.assertEqual(next(i), '2')
704 self.assertRaises(StopIteration, next, i)
Walter Dörwald919497e2003-01-19 16:23:59 +0000705
706 def test_isinstance(self):
707 class C:
708 pass
709 class D(C):
710 pass
711 class E:
712 pass
713 c = C()
714 d = D()
715 e = E()
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000716 self.assertTrue(isinstance(c, C))
717 self.assertTrue(isinstance(d, C))
718 self.assertTrue(not isinstance(e, C))
719 self.assertTrue(not isinstance(c, D))
720 self.assertTrue(not isinstance('foo', E))
Walter Dörwald919497e2003-01-19 16:23:59 +0000721 self.assertRaises(TypeError, isinstance, E, 'foo')
722 self.assertRaises(TypeError, isinstance)
723
724 def test_issubclass(self):
725 class C:
726 pass
727 class D(C):
728 pass
729 class E:
730 pass
731 c = C()
732 d = D()
733 e = E()
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000734 self.assertTrue(issubclass(D, C))
735 self.assertTrue(issubclass(C, C))
736 self.assertTrue(not issubclass(C, D))
Walter Dörwald919497e2003-01-19 16:23:59 +0000737 self.assertRaises(TypeError, issubclass, 'foo', E)
738 self.assertRaises(TypeError, issubclass, E, 'foo')
739 self.assertRaises(TypeError, issubclass)
740
741 def test_len(self):
742 self.assertEqual(len('123'), 3)
743 self.assertEqual(len(()), 0)
744 self.assertEqual(len((1, 2, 3, 4)), 4)
745 self.assertEqual(len([1, 2, 3, 4]), 4)
746 self.assertEqual(len({}), 0)
747 self.assertEqual(len({'a':1, 'b': 2}), 2)
748 class BadSeq:
749 def __len__(self):
750 raise ValueError
751 self.assertRaises(ValueError, len, BadSeq())
Benjamin Petersonee1ae7c2009-02-08 21:07:20 +0000752 class InvalidLen:
753 def __len__(self):
754 return None
755 self.assertRaises(TypeError, len, InvalidLen())
756 class FloatLen:
757 def __len__(self):
758 return 4.5
759 self.assertRaises(TypeError, len, FloatLen())
760 class HugeLen:
761 def __len__(self):
762 return sys.maxsize + 1
763 self.assertRaises(OverflowError, len, HugeLen())
Mark Dickinsonfb3dc942010-05-25 19:06:24 +0000764 class NoLenMethod(object): pass
765 self.assertRaises(TypeError, len, NoLenMethod())
Walter Dörwald919497e2003-01-19 16:23:59 +0000766
Walter Dörwald919497e2003-01-19 16:23:59 +0000767 def test_map(self):
768 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000769 list(map(lambda x: x*x, range(1,4))),
Walter Dörwald919497e2003-01-19 16:23:59 +0000770 [1, 4, 9]
771 )
772 try:
773 from math import sqrt
774 except ImportError:
775 def sqrt(x):
776 return pow(x, 0.5)
777 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000778 list(map(lambda x: list(map(sqrt, x)), [[16, 4], [81, 9]])),
Walter Dörwald919497e2003-01-19 16:23:59 +0000779 [[4.0, 2.0], [9.0, 3.0]]
780 )
781 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000782 list(map(lambda x, y: x+y, [1,3,2], [9,1,4])),
Walter Dörwald919497e2003-01-19 16:23:59 +0000783 [10, 4, 6]
784 )
785
786 def plus(*v):
787 accu = 0
788 for i in v: accu = accu + i
789 return accu
790 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000791 list(map(plus, [1, 3, 7])),
Walter Dörwald919497e2003-01-19 16:23:59 +0000792 [1, 3, 7]
793 )
794 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000795 list(map(plus, [1, 3, 7], [4, 9, 2])),
Walter Dörwald919497e2003-01-19 16:23:59 +0000796 [1+4, 3+9, 7+2]
797 )
798 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000799 list(map(plus, [1, 3, 7], [4, 9, 2], [1, 1, 0])),
Walter Dörwald919497e2003-01-19 16:23:59 +0000800 [1+4+1, 3+9+1, 7+2+0]
801 )
802 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000803 list(map(int, Squares(10))),
Walter Dörwald919497e2003-01-19 16:23:59 +0000804 [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
805 )
Guido van Rossum47b9ff62006-08-24 00:41:19 +0000806 def Max(a, b):
807 if a is None:
808 return b
809 if b is None:
810 return a
811 return max(a, b)
Walter Dörwald919497e2003-01-19 16:23:59 +0000812 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000813 list(map(Max, Squares(3), Squares(2))),
814 [0, 1]
Walter Dörwald919497e2003-01-19 16:23:59 +0000815 )
816 self.assertRaises(TypeError, map)
817 self.assertRaises(TypeError, map, lambda x: x, 42)
Walter Dörwald919497e2003-01-19 16:23:59 +0000818 class BadSeq:
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000819 def __iter__(self):
Walter Dörwald919497e2003-01-19 16:23:59 +0000820 raise ValueError
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000821 yield None
822 self.assertRaises(ValueError, list, map(lambda x: x, BadSeq()))
Neal Norwitzfcf44352005-11-27 20:37:43 +0000823 def badfunc(x):
824 raise RuntimeError
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000825 self.assertRaises(RuntimeError, list, map(badfunc, range(5)))
Walter Dörwald919497e2003-01-19 16:23:59 +0000826
Kristján Valur Jónsson31668b82012-04-03 10:49:41 +0000827 def test_map_pickle(self):
828 m1 = map(map_char, "Is this the real life?")
829 m2 = map(map_char, "Is this the real life?")
830 self.check_iter_pickle(m1, list(m2))
831
Walter Dörwald919497e2003-01-19 16:23:59 +0000832 def test_max(self):
833 self.assertEqual(max('123123'), '3')
834 self.assertEqual(max(1, 2, 3), 3)
835 self.assertEqual(max((1, 2, 3, 1, 2, 3)), 3)
836 self.assertEqual(max([1, 2, 3, 1, 2, 3]), 3)
837
Guido van Rossume2a383d2007-01-15 16:59:06 +0000838 self.assertEqual(max(1, 2, 3.0), 3.0)
839 self.assertEqual(max(1, 2.0, 3), 3)
840 self.assertEqual(max(1.0, 2, 3), 3)
Walter Dörwald919497e2003-01-19 16:23:59 +0000841
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +0000842 for stmt in (
843 "max(key=int)", # no args
844 "max(1, key=int)", # single arg not iterable
845 "max(1, 2, keystone=int)", # wrong keyword
846 "max(1, 2, key=int, abc=int)", # two many keywords
847 "max(1, 2, key=1)", # keyfunc is not callable
848 ):
Tim Peters7f061872004-12-07 21:17:46 +0000849 try:
Georg Brandl7cae87c2006-09-06 06:51:57 +0000850 exec(stmt, globals())
Tim Peters7f061872004-12-07 21:17:46 +0000851 except TypeError:
852 pass
853 else:
854 self.fail(stmt)
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +0000855
856 self.assertEqual(max((1,), key=neg), 1) # one elem iterable
857 self.assertEqual(max((1,2), key=neg), 1) # two elem iterable
858 self.assertEqual(max(1, 2, key=neg), 1) # two elems
859
860 data = [random.randrange(200) for i in range(100)]
861 keys = dict((elem, random.randrange(50)) for elem in data)
862 f = keys.__getitem__
863 self.assertEqual(max(data, key=f),
864 sorted(reversed(data), key=f)[-1])
865
Walter Dörwald919497e2003-01-19 16:23:59 +0000866 def test_min(self):
867 self.assertEqual(min('123123'), '1')
868 self.assertEqual(min(1, 2, 3), 1)
869 self.assertEqual(min((1, 2, 3, 1, 2, 3)), 1)
870 self.assertEqual(min([1, 2, 3, 1, 2, 3]), 1)
871
Guido van Rossume2a383d2007-01-15 16:59:06 +0000872 self.assertEqual(min(1, 2, 3.0), 1)
873 self.assertEqual(min(1, 2.0, 3), 1)
874 self.assertEqual(min(1.0, 2, 3), 1.0)
Walter Dörwald919497e2003-01-19 16:23:59 +0000875
876 self.assertRaises(TypeError, min)
877 self.assertRaises(TypeError, min, 42)
878 self.assertRaises(ValueError, min, ())
879 class BadSeq:
880 def __getitem__(self, index):
881 raise ValueError
882 self.assertRaises(ValueError, min, BadSeq())
Walter Dörwald919497e2003-01-19 16:23:59 +0000883
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +0000884 for stmt in (
885 "min(key=int)", # no args
886 "min(1, key=int)", # single arg not iterable
887 "min(1, 2, keystone=int)", # wrong keyword
888 "min(1, 2, key=int, abc=int)", # two many keywords
889 "min(1, 2, key=1)", # keyfunc is not callable
890 ):
Tim Peters7f061872004-12-07 21:17:46 +0000891 try:
Georg Brandl7cae87c2006-09-06 06:51:57 +0000892 exec(stmt, globals())
Tim Peters7f061872004-12-07 21:17:46 +0000893 except TypeError:
894 pass
895 else:
896 self.fail(stmt)
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +0000897
898 self.assertEqual(min((1,), key=neg), 1) # one elem iterable
899 self.assertEqual(min((1,2), key=neg), 2) # two elem iterable
900 self.assertEqual(min(1, 2, key=neg), 2) # two elems
901
902 data = [random.randrange(200) for i in range(100)]
903 keys = dict((elem, random.randrange(50)) for elem in data)
904 f = keys.__getitem__
905 self.assertEqual(min(data, key=f),
906 sorted(data, key=f)[0])
907
Georg Brandla18af4e2007-04-21 15:47:16 +0000908 def test_next(self):
909 it = iter(range(2))
910 self.assertEqual(next(it), 0)
911 self.assertEqual(next(it), 1)
912 self.assertRaises(StopIteration, next, it)
913 self.assertRaises(StopIteration, next, it)
Ezio Melottib3aedd42010-11-20 19:04:17 +0000914 self.assertEqual(next(it, 42), 42)
Georg Brandla18af4e2007-04-21 15:47:16 +0000915
916 class Iter(object):
917 def __iter__(self):
918 return self
919 def __next__(self):
920 raise StopIteration
921
922 it = iter(Iter())
Ezio Melottib3aedd42010-11-20 19:04:17 +0000923 self.assertEqual(next(it, 42), 42)
Georg Brandla18af4e2007-04-21 15:47:16 +0000924 self.assertRaises(StopIteration, next, it)
925
926 def gen():
927 yield 1
928 return
929
930 it = gen()
Ezio Melottib3aedd42010-11-20 19:04:17 +0000931 self.assertEqual(next(it), 1)
Georg Brandla18af4e2007-04-21 15:47:16 +0000932 self.assertRaises(StopIteration, next, it)
Ezio Melottib3aedd42010-11-20 19:04:17 +0000933 self.assertEqual(next(it, 42), 42)
Georg Brandla18af4e2007-04-21 15:47:16 +0000934
Walter Dörwald919497e2003-01-19 16:23:59 +0000935 def test_oct(self):
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000936 self.assertEqual(oct(100), '0o144')
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000937 self.assertEqual(oct(-100), '-0o144')
Walter Dörwald919497e2003-01-19 16:23:59 +0000938 self.assertRaises(TypeError, oct, ())
939
940 def write_testfile(self):
Guido van Rossuma88a0332007-02-26 16:59:55 +0000941 # NB the first 4 lines are also used to test input, below
Walter Dörwald919497e2003-01-19 16:23:59 +0000942 fp = open(TESTFN, 'w')
943 try:
944 fp.write('1+1\n')
Walter Dörwald919497e2003-01-19 16:23:59 +0000945 fp.write('The quick brown fox jumps over the lazy dog')
946 fp.write('.\n')
947 fp.write('Dear John\n')
948 fp.write('XXX'*100)
949 fp.write('YYY'*100)
950 finally:
951 fp.close()
952
953 def test_open(self):
954 self.write_testfile()
955 fp = open(TESTFN, 'r')
956 try:
957 self.assertEqual(fp.readline(4), '1+1\n')
Walter Dörwald919497e2003-01-19 16:23:59 +0000958 self.assertEqual(fp.readline(), 'The quick brown fox jumps over the lazy dog.\n')
959 self.assertEqual(fp.readline(4), 'Dear')
960 self.assertEqual(fp.readline(100), ' John\n')
961 self.assertEqual(fp.read(300), 'XXX'*100)
962 self.assertEqual(fp.read(1000), 'YYY'*100)
963 finally:
964 fp.close()
Florent Xicluna3f4ce632012-07-08 12:08:45 +0200965 unlink(TESTFN)
Walter Dörwald919497e2003-01-19 16:23:59 +0000966
Victor Stinnerf86a5e82012-06-05 13:43:22 +0200967 def test_open_default_encoding(self):
968 old_environ = dict(os.environ)
969 try:
970 # try to get a user preferred encoding different than the current
971 # locale encoding to check that open() uses the current locale
972 # encoding and not the user preferred encoding
973 for key in ('LC_ALL', 'LANG', 'LC_CTYPE'):
974 if key in os.environ:
975 del os.environ[key]
976
977 self.write_testfile()
978 current_locale_encoding = locale.getpreferredencoding(False)
979 fp = open(TESTFN, 'w')
980 try:
981 self.assertEqual(fp.encoding, current_locale_encoding)
982 finally:
983 fp.close()
Florent Xicluna3f4ce632012-07-08 12:08:45 +0200984 unlink(TESTFN)
Victor Stinnerf86a5e82012-06-05 13:43:22 +0200985 finally:
986 os.environ.clear()
987 os.environ.update(old_environ)
988
Walter Dörwald919497e2003-01-19 16:23:59 +0000989 def test_ord(self):
990 self.assertEqual(ord(' '), 32)
991 self.assertEqual(ord('A'), 65)
992 self.assertEqual(ord('a'), 97)
Guido van Rossumf9e91c92007-05-08 21:05:48 +0000993 self.assertEqual(ord('\x80'), 128)
994 self.assertEqual(ord('\xff'), 255)
995
996 self.assertEqual(ord(b' '), 32)
997 self.assertEqual(ord(b'A'), 65)
998 self.assertEqual(ord(b'a'), 97)
999 self.assertEqual(ord(b'\x80'), 128)
1000 self.assertEqual(ord(b'\xff'), 255)
1001
Walter Dörwald1f5947b2007-05-22 16:52:54 +00001002 self.assertEqual(ord(chr(sys.maxunicode)), sys.maxunicode)
Walter Dörwald919497e2003-01-19 16:23:59 +00001003 self.assertRaises(TypeError, ord, 42)
Walter Dörwald919497e2003-01-19 16:23:59 +00001004
Guido van Rossum8ac004e2007-07-15 13:00:05 +00001005 self.assertEqual(ord(chr(0x10FFFF)), 0x10FFFF)
1006 self.assertEqual(ord("\U0000FFFF"), 0x0000FFFF)
1007 self.assertEqual(ord("\U00010000"), 0x00010000)
1008 self.assertEqual(ord("\U00010001"), 0x00010001)
1009 self.assertEqual(ord("\U000FFFFE"), 0x000FFFFE)
1010 self.assertEqual(ord("\U000FFFFF"), 0x000FFFFF)
1011 self.assertEqual(ord("\U00100000"), 0x00100000)
1012 self.assertEqual(ord("\U00100001"), 0x00100001)
1013 self.assertEqual(ord("\U0010FFFE"), 0x0010FFFE)
1014 self.assertEqual(ord("\U0010FFFF"), 0x0010FFFF)
1015
Walter Dörwald919497e2003-01-19 16:23:59 +00001016 def test_pow(self):
1017 self.assertEqual(pow(0,0), 1)
1018 self.assertEqual(pow(0,1), 0)
1019 self.assertEqual(pow(1,0), 1)
1020 self.assertEqual(pow(1,1), 1)
1021
1022 self.assertEqual(pow(2,0), 1)
1023 self.assertEqual(pow(2,10), 1024)
1024 self.assertEqual(pow(2,20), 1024*1024)
1025 self.assertEqual(pow(2,30), 1024*1024*1024)
1026
1027 self.assertEqual(pow(-2,0), 1)
1028 self.assertEqual(pow(-2,1), -2)
1029 self.assertEqual(pow(-2,2), 4)
1030 self.assertEqual(pow(-2,3), -8)
1031
Walter Dörwald919497e2003-01-19 16:23:59 +00001032 self.assertAlmostEqual(pow(0.,0), 1.)
1033 self.assertAlmostEqual(pow(0.,1), 0.)
1034 self.assertAlmostEqual(pow(1.,0), 1.)
1035 self.assertAlmostEqual(pow(1.,1), 1.)
1036
1037 self.assertAlmostEqual(pow(2.,0), 1.)
1038 self.assertAlmostEqual(pow(2.,10), 1024.)
1039 self.assertAlmostEqual(pow(2.,20), 1024.*1024.)
1040 self.assertAlmostEqual(pow(2.,30), 1024.*1024.*1024.)
1041
1042 self.assertAlmostEqual(pow(-2.,0), 1.)
1043 self.assertAlmostEqual(pow(-2.,1), -2.)
1044 self.assertAlmostEqual(pow(-2.,2), 4.)
1045 self.assertAlmostEqual(pow(-2.,3), -8.)
1046
Mark Dickinson5c2db372009-12-05 20:28:34 +00001047 for x in 2, 2.0:
1048 for y in 10, 10.0:
1049 for z in 1000, 1000.0:
Walter Dörwald919497e2003-01-19 16:23:59 +00001050 if isinstance(x, float) or \
1051 isinstance(y, float) or \
1052 isinstance(z, float):
1053 self.assertRaises(TypeError, pow, x, y, z)
1054 else:
1055 self.assertAlmostEqual(pow(x, y, z), 24.0)
1056
Jeffrey Yasskin3404b3c2007-09-07 15:15:49 +00001057 self.assertAlmostEqual(pow(-1, 0.5), 1j)
1058 self.assertAlmostEqual(pow(-1, 1/3), 0.5 + 0.8660254037844386j)
1059
Walter Dörwald919497e2003-01-19 16:23:59 +00001060 self.assertRaises(TypeError, pow, -1, -2, 3)
1061 self.assertRaises(ValueError, pow, 1, 2, 0)
Walter Dörwald919497e2003-01-19 16:23:59 +00001062
1063 self.assertRaises(TypeError, pow)
1064
Guido van Rossuma88a0332007-02-26 16:59:55 +00001065 def test_input(self):
1066 self.write_testfile()
1067 fp = open(TESTFN, 'r')
1068 savestdin = sys.stdin
1069 savestdout = sys.stdout # Eats the echo
1070 try:
1071 sys.stdin = fp
1072 sys.stdout = BitBucket()
1073 self.assertEqual(input(), "1+1")
Guido van Rossuma88a0332007-02-26 16:59:55 +00001074 self.assertEqual(input(), 'The quick brown fox jumps over the lazy dog.')
1075 self.assertEqual(input('testing\n'), 'Dear John')
1076
1077 # SF 1535165: don't segfault on closed stdin
1078 # sys.stdout must be a regular file for triggering
1079 sys.stdout = savestdout
1080 sys.stdin.close()
1081 self.assertRaises(ValueError, input)
1082
1083 sys.stdout = BitBucket()
Guido van Rossum34d19282007-08-09 01:03:29 +00001084 sys.stdin = io.StringIO("NULL\0")
Guido van Rossuma88a0332007-02-26 16:59:55 +00001085 self.assertRaises(TypeError, input, 42, 42)
Guido van Rossum34d19282007-08-09 01:03:29 +00001086 sys.stdin = io.StringIO(" 'whitespace'")
Guido van Rossuma88a0332007-02-26 16:59:55 +00001087 self.assertEqual(input(), " 'whitespace'")
Guido van Rossum34d19282007-08-09 01:03:29 +00001088 sys.stdin = io.StringIO()
Guido van Rossuma88a0332007-02-26 16:59:55 +00001089 self.assertRaises(EOFError, input)
1090
1091 del sys.stdout
1092 self.assertRaises(RuntimeError, input, 'prompt')
1093 del sys.stdin
1094 self.assertRaises(RuntimeError, input, 'prompt')
1095 finally:
1096 sys.stdin = savestdin
1097 sys.stdout = savestdout
1098 fp.close()
1099 unlink(TESTFN)
1100
Antoine Pitrou772add72011-11-06 02:37:42 +01001101 @unittest.skipUnless(pty, "the pty and signal modules must be available")
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001102 def check_input_tty(self, prompt, terminal_input, stdio_encoding=None):
Antoine Pitrou1ce4b142011-11-06 03:03:18 +01001103 if not sys.stdin.isatty() or not sys.stdout.isatty():
1104 self.skipTest("stdin and stdout must be ttys")
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001105 r, w = os.pipe()
1106 try:
1107 pid, fd = pty.fork()
1108 except (OSError, AttributeError) as e:
1109 os.close(r)
1110 os.close(w)
1111 self.skipTest("pty.fork() raised {}".format(e))
1112 if pid == 0:
1113 # Child
Antoine Pitrou772add72011-11-06 02:37:42 +01001114 try:
1115 # Make sure we don't get stuck if there's a problem
1116 signal.alarm(2)
1117 os.close(r)
1118 # Check the error handlers are accounted for
1119 if stdio_encoding:
1120 sys.stdin = io.TextIOWrapper(sys.stdin.detach(),
1121 encoding=stdio_encoding,
1122 errors='surrogateescape')
1123 sys.stdout = io.TextIOWrapper(sys.stdout.detach(),
1124 encoding=stdio_encoding,
1125 errors='replace')
1126 with open(w, "w") as wpipe:
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001127 print("tty =", sys.stdin.isatty() and sys.stdout.isatty(), file=wpipe)
1128 print(ascii(input(prompt)), file=wpipe)
Antoine Pitrou772add72011-11-06 02:37:42 +01001129 except:
1130 traceback.print_exc()
1131 finally:
1132 # We don't want to return to unittest...
1133 os._exit(0)
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001134 # Parent
1135 os.close(w)
1136 os.write(fd, terminal_input + b"\r\n")
1137 # Get results from the pipe
1138 with open(r, "r") as rpipe:
1139 lines = []
1140 while True:
1141 line = rpipe.readline().strip()
Antoine Pitrou772add72011-11-06 02:37:42 +01001142 if line == "":
1143 # The other end was closed => the child exited
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001144 break
1145 lines.append(line)
Antoine Pitrou772add72011-11-06 02:37:42 +01001146 # Check the result was got and corresponds to the user's terminal input
1147 if len(lines) != 2:
1148 # Something went wrong, try to get at stderr
1149 with open(fd, "r", encoding="ascii", errors="ignore") as child_output:
1150 self.fail("got %d lines in pipe but expected 2, child output was:\n%s"
1151 % (len(lines), child_output.read()))
1152 os.close(fd)
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001153 # Check we did exercise the GNU readline path
1154 self.assertIn(lines[0], {'tty = True', 'tty = False'})
1155 if lines[0] != 'tty = True':
1156 self.skipTest("standard IO in should have been a tty")
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001157 input_result = eval(lines[1]) # ascii() -> eval() roundtrip
1158 if stdio_encoding:
1159 expected = terminal_input.decode(stdio_encoding, 'surrogateescape')
1160 else:
1161 expected = terminal_input.decode(sys.stdin.encoding) # what else?
1162 self.assertEqual(input_result, expected)
1163
1164 def test_input_tty(self):
1165 # Test input() functionality when wired to a tty (the code path
1166 # is different and invokes GNU readline if available).
1167 self.check_input_tty("prompt", b"quux")
1168
1169 def test_input_tty_non_ascii(self):
1170 # Check stdin/stdout encoding is used when invoking GNU readline
1171 self.check_input_tty("prompté", b"quux\xe9", "utf-8")
1172
1173 def test_input_tty_non_ascii_unicode_errors(self):
1174 # Check stdin/stdout error handler is used when invoking GNU readline
1175 self.check_input_tty("prompté", b"quux\xe9", "ascii")
1176
Andrew Svetlov8e42e8a2012-12-23 12:49:33 +02001177 # test_int(): see test_int.py for tests of built-in function int().
1178
Walter Dörwald919497e2003-01-19 16:23:59 +00001179 def test_repr(self):
1180 self.assertEqual(repr(''), '\'\'')
1181 self.assertEqual(repr(0), '0')
Walter Dörwald919497e2003-01-19 16:23:59 +00001182 self.assertEqual(repr(()), '()')
1183 self.assertEqual(repr([]), '[]')
1184 self.assertEqual(repr({}), '{}')
1185 a = []
1186 a.append(a)
1187 self.assertEqual(repr(a), '[[...]]')
1188 a = {}
1189 a[0] = a
1190 self.assertEqual(repr(a), '{0: {...}}')
1191
1192 def test_round(self):
1193 self.assertEqual(round(0.0), 0.0)
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001194 self.assertEqual(type(round(0.0)), int)
Walter Dörwald919497e2003-01-19 16:23:59 +00001195 self.assertEqual(round(1.0), 1.0)
1196 self.assertEqual(round(10.0), 10.0)
1197 self.assertEqual(round(1000000000.0), 1000000000.0)
1198 self.assertEqual(round(1e20), 1e20)
1199
1200 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(0.1), 0.0)
1206 self.assertEqual(round(1.1), 1.0)
1207 self.assertEqual(round(10.1), 10.0)
1208 self.assertEqual(round(1000000000.1), 1000000000.0)
1209
1210 self.assertEqual(round(-1.1), -1.0)
1211 self.assertEqual(round(-10.1), -10.0)
1212 self.assertEqual(round(-1000000000.1), -1000000000.0)
1213
1214 self.assertEqual(round(0.9), 1.0)
1215 self.assertEqual(round(9.9), 10.0)
1216 self.assertEqual(round(999999999.9), 1000000000.0)
1217
1218 self.assertEqual(round(-0.9), -1.0)
1219 self.assertEqual(round(-9.9), -10.0)
1220 self.assertEqual(round(-999999999.9), -1000000000.0)
1221
1222 self.assertEqual(round(-8.0, -1), -10.0)
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001223 self.assertEqual(type(round(-8.0, -1)), float)
1224
1225 self.assertEqual(type(round(-8.0, 0)), float)
1226 self.assertEqual(type(round(-8.0, 1)), float)
1227
1228 # Check even / odd rounding behaviour
1229 self.assertEqual(round(5.5), 6)
1230 self.assertEqual(round(6.5), 6)
1231 self.assertEqual(round(-5.5), -6)
1232 self.assertEqual(round(-6.5), -6)
1233
1234 # Check behavior on ints
1235 self.assertEqual(round(0), 0)
1236 self.assertEqual(round(8), 8)
1237 self.assertEqual(round(-8), -8)
1238 self.assertEqual(type(round(0)), int)
Mark Dickinson1124e712009-01-28 21:25:58 +00001239 self.assertEqual(type(round(-8, -1)), int)
1240 self.assertEqual(type(round(-8, 0)), int)
1241 self.assertEqual(type(round(-8, 1)), int)
Walter Dörwald919497e2003-01-19 16:23:59 +00001242
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001243 # test new kwargs
1244 self.assertEqual(round(number=-8.0, ndigits=-1), -10.0)
1245
Walter Dörwald919497e2003-01-19 16:23:59 +00001246 self.assertRaises(TypeError, round)
1247
Alex Martelliae211f92007-08-22 23:21:33 +00001248 # test generic rounding delegation for reals
1249 class TestRound:
1250 def __round__(self):
1251 return 23
1252
1253 class TestNoRound:
1254 pass
1255
1256 self.assertEqual(round(TestRound()), 23)
1257
1258 self.assertRaises(TypeError, round, 1, 2, 3)
1259 self.assertRaises(TypeError, round, TestNoRound())
1260
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001261 t = TestNoRound()
1262 t.__round__ = lambda *args: args
1263 self.assertRaises(TypeError, round, t)
1264 self.assertRaises(TypeError, round, t, 0)
1265
Mark Dickinsonad731b92009-11-09 17:12:30 +00001266 # Some versions of glibc for alpha have a bug that affects
1267 # float -> integer rounding (floor, ceil, rint, round) for
1268 # values in the range [2**52, 2**53). See:
1269 #
1270 # http://sources.redhat.com/bugzilla/show_bug.cgi?id=5350
1271 #
1272 # We skip this test on Linux/alpha if it would fail.
1273 linux_alpha = (platform.system().startswith('Linux') and
1274 platform.machine().startswith('alpha'))
1275 system_round_bug = round(5e15+1) != 5e15+1
1276 @unittest.skipIf(linux_alpha and system_round_bug,
1277 "test will fail; failure is probably due to a "
1278 "buggy system round function")
1279 def test_round_large(self):
1280 # Issue #1869: integral floats should remain unchanged
1281 self.assertEqual(round(5e15-1), 5e15-1)
1282 self.assertEqual(round(5e15), 5e15)
1283 self.assertEqual(round(5e15+1), 5e15+1)
1284 self.assertEqual(round(5e15+2), 5e15+2)
1285 self.assertEqual(round(5e15+3), 5e15+3)
1286
Walter Dörwald919497e2003-01-19 16:23:59 +00001287 def test_setattr(self):
Tim Petersf2715e02003-02-19 02:35:07 +00001288 setattr(sys, 'spam', 1)
1289 self.assertEqual(sys.spam, 1)
1290 self.assertRaises(TypeError, setattr, sys, 1, 'spam')
1291 self.assertRaises(TypeError, setattr)
Walter Dörwald919497e2003-01-19 16:23:59 +00001292
Chris Jerdonek5fae0e52012-11-20 17:45:51 -08001293 # test_str(): see test_unicode.py and test_bytes.py for str() tests.
Walter Dörwald919497e2003-01-19 16:23:59 +00001294
Alex Martellia70b1912003-04-22 08:12:33 +00001295 def test_sum(self):
1296 self.assertEqual(sum([]), 0)
Guido van Rossum805365e2007-05-07 22:24:25 +00001297 self.assertEqual(sum(list(range(2,8))), 27)
1298 self.assertEqual(sum(iter(list(range(2,8)))), 27)
Alex Martellia70b1912003-04-22 08:12:33 +00001299 self.assertEqual(sum(Squares(10)), 285)
1300 self.assertEqual(sum(iter(Squares(10))), 285)
1301 self.assertEqual(sum([[1], [2], [3]], []), [1, 2, 3])
1302
1303 self.assertRaises(TypeError, sum)
1304 self.assertRaises(TypeError, sum, 42)
1305 self.assertRaises(TypeError, sum, ['a', 'b', 'c'])
1306 self.assertRaises(TypeError, sum, ['a', 'b', 'c'], '')
Benjamin Petersonce071ca2011-07-29 14:23:47 -05001307 self.assertRaises(TypeError, sum, [b'a', b'c'], b'')
1308 values = [bytearray(b'a'), bytearray(b'b')]
1309 self.assertRaises(TypeError, sum, values, bytearray(b''))
Alex Martellia70b1912003-04-22 08:12:33 +00001310 self.assertRaises(TypeError, sum, [[1], [2], [3]])
1311 self.assertRaises(TypeError, sum, [{2:3}])
1312 self.assertRaises(TypeError, sum, [{2:3}]*2, {2:3})
1313
1314 class BadSeq:
1315 def __getitem__(self, index):
1316 raise ValueError
1317 self.assertRaises(ValueError, sum, BadSeq())
1318
Mark Dickinson3a22b472009-10-17 21:48:16 +00001319 empty = []
1320 sum(([x] for x in range(10)), empty)
1321 self.assertEqual(empty, [])
1322
Walter Dörwald919497e2003-01-19 16:23:59 +00001323 def test_type(self):
1324 self.assertEqual(type(''), type('123'))
1325 self.assertNotEqual(type(''), type(()))
1326
Guido van Rossumfee7b932005-01-16 00:21:28 +00001327 # We don't want self in vars(), so these are static methods
1328
1329 @staticmethod
Walter Dörwald919497e2003-01-19 16:23:59 +00001330 def get_vars_f0():
1331 return vars()
Walter Dörwald919497e2003-01-19 16:23:59 +00001332
Guido van Rossumfee7b932005-01-16 00:21:28 +00001333 @staticmethod
Walter Dörwald919497e2003-01-19 16:23:59 +00001334 def get_vars_f2():
1335 BuiltinTest.get_vars_f0()
1336 a = 1
1337 b = 2
1338 return vars()
Walter Dörwald919497e2003-01-19 16:23:59 +00001339
Mark Dickinsonfb3dc942010-05-25 19:06:24 +00001340 class C_get_vars(object):
1341 def getDict(self):
1342 return {'a':2}
1343 __dict__ = property(fget=getDict)
1344
Walter Dörwald919497e2003-01-19 16:23:59 +00001345 def test_vars(self):
Raymond Hettingera690a992003-11-16 16:17:49 +00001346 self.assertEqual(set(vars()), set(dir()))
Raymond Hettingera690a992003-11-16 16:17:49 +00001347 self.assertEqual(set(vars(sys)), set(dir(sys)))
Walter Dörwald919497e2003-01-19 16:23:59 +00001348 self.assertEqual(self.get_vars_f0(), {})
1349 self.assertEqual(self.get_vars_f2(), {'a': 1, 'b': 2})
1350 self.assertRaises(TypeError, vars, 42, 42)
1351 self.assertRaises(TypeError, vars, 42)
Mark Dickinsonfb3dc942010-05-25 19:06:24 +00001352 self.assertEqual(vars(self.C_get_vars()), {'a':2})
Walter Dörwald919497e2003-01-19 16:23:59 +00001353
1354 def test_zip(self):
1355 a = (1, 2, 3)
1356 b = (4, 5, 6)
1357 t = [(1, 4), (2, 5), (3, 6)]
Guido van Rossum801f0d72006-08-24 19:48:10 +00001358 self.assertEqual(list(zip(a, b)), t)
Walter Dörwald919497e2003-01-19 16:23:59 +00001359 b = [4, 5, 6]
Guido van Rossum801f0d72006-08-24 19:48:10 +00001360 self.assertEqual(list(zip(a, b)), t)
Walter Dörwald919497e2003-01-19 16:23:59 +00001361 b = (4, 5, 6, 7)
Guido van Rossum801f0d72006-08-24 19:48:10 +00001362 self.assertEqual(list(zip(a, b)), t)
Walter Dörwald919497e2003-01-19 16:23:59 +00001363 class I:
1364 def __getitem__(self, i):
1365 if i < 0 or i > 2: raise IndexError
1366 return i + 4
Guido van Rossum801f0d72006-08-24 19:48:10 +00001367 self.assertEqual(list(zip(a, I())), t)
1368 self.assertEqual(list(zip()), [])
1369 self.assertEqual(list(zip(*[])), [])
Walter Dörwald919497e2003-01-19 16:23:59 +00001370 self.assertRaises(TypeError, zip, None)
1371 class G:
1372 pass
1373 self.assertRaises(TypeError, zip, a, G())
Alexander Belopolskye29e6bf2010-08-16 18:55:46 +00001374 self.assertRaises(RuntimeError, zip, a, TestFailingIter())
Walter Dörwald919497e2003-01-19 16:23:59 +00001375
1376 # Make sure zip doesn't try to allocate a billion elements for the
1377 # result list when one of its arguments doesn't say how long it is.
1378 # A MemoryError is the most likely failure mode.
1379 class SequenceWithoutALength:
1380 def __getitem__(self, i):
1381 if i == 5:
1382 raise IndexError
1383 else:
1384 return i
1385 self.assertEqual(
Guido van Rossum805365e2007-05-07 22:24:25 +00001386 list(zip(SequenceWithoutALength(), range(2**30))),
Walter Dörwald919497e2003-01-19 16:23:59 +00001387 list(enumerate(range(5)))
1388 )
1389
1390 class BadSeq:
1391 def __getitem__(self, i):
1392 if i == 5:
1393 raise ValueError
1394 else:
1395 return i
Guido van Rossum801f0d72006-08-24 19:48:10 +00001396 self.assertRaises(ValueError, list, zip(BadSeq(), BadSeq()))
Walter Dörwald919497e2003-01-19 16:23:59 +00001397
Kristján Valur Jónsson31668b82012-04-03 10:49:41 +00001398 def test_zip_pickle(self):
1399 a = (1, 2, 3)
1400 b = (4, 5, 6)
1401 t = [(1, 4), (2, 5), (3, 6)]
1402 z1 = zip(a, b)
1403 self.check_iter_pickle(z1, t)
1404
Eric Smithe4d63172010-09-13 20:48:43 +00001405 def test_format(self):
1406 # Test the basic machinery of the format() builtin. Don't test
1407 # the specifics of the various formatters
1408 self.assertEqual(format(3, ''), '3')
1409
1410 # Returns some classes to use for various tests. There's
1411 # an old-style version, and a new-style version
1412 def classes_new():
1413 class A(object):
1414 def __init__(self, x):
1415 self.x = x
1416 def __format__(self, format_spec):
1417 return str(self.x) + format_spec
1418 class DerivedFromA(A):
1419 pass
1420
1421 class Simple(object): pass
1422 class DerivedFromSimple(Simple):
1423 def __init__(self, x):
1424 self.x = x
1425 def __format__(self, format_spec):
1426 return str(self.x) + format_spec
1427 class DerivedFromSimple2(DerivedFromSimple): pass
1428 return A, DerivedFromA, DerivedFromSimple, DerivedFromSimple2
1429
1430 def class_test(A, DerivedFromA, DerivedFromSimple, DerivedFromSimple2):
1431 self.assertEqual(format(A(3), 'spec'), '3spec')
1432 self.assertEqual(format(DerivedFromA(4), 'spec'), '4spec')
1433 self.assertEqual(format(DerivedFromSimple(5), 'abc'), '5abc')
1434 self.assertEqual(format(DerivedFromSimple2(10), 'abcdef'),
1435 '10abcdef')
1436
1437 class_test(*classes_new())
1438
1439 def empty_format_spec(value):
1440 # test that:
1441 # format(x, '') == str(x)
1442 # format(x) == str(x)
1443 self.assertEqual(format(value, ""), str(value))
1444 self.assertEqual(format(value), str(value))
1445
1446 # for builtin types, format(x, "") == str(x)
1447 empty_format_spec(17**13)
1448 empty_format_spec(1.0)
1449 empty_format_spec(3.1415e104)
1450 empty_format_spec(-3.1415e104)
1451 empty_format_spec(3.1415e-104)
1452 empty_format_spec(-3.1415e-104)
1453 empty_format_spec(object)
1454 empty_format_spec(None)
1455
1456 # TypeError because self.__format__ returns the wrong type
1457 class BadFormatResult:
1458 def __format__(self, format_spec):
1459 return 1.0
1460 self.assertRaises(TypeError, format, BadFormatResult(), "")
1461
1462 # TypeError because format_spec is not unicode or str
1463 self.assertRaises(TypeError, format, object(), 4)
1464 self.assertRaises(TypeError, format, object(), object())
1465
1466 # tests for object.__format__ really belong elsewhere, but
1467 # there's no good place to put them
1468 x = object().__format__('')
1469 self.assertTrue(x.startswith('<object object at'))
1470
1471 # first argument to object.__format__ must be string
1472 self.assertRaises(TypeError, object().__format__, 3)
1473 self.assertRaises(TypeError, object().__format__, object())
1474 self.assertRaises(TypeError, object().__format__, None)
1475
1476 # --------------------------------------------------------------------
1477 # Issue #7994: object.__format__ with a non-empty format string is
Eric V. Smithb9cd3532011-03-12 10:08:48 -05001478 # deprecated
Eric Smithe4d63172010-09-13 20:48:43 +00001479 def test_deprecated_format_string(obj, fmt_str, should_raise_warning):
1480 with warnings.catch_warnings(record=True) as w:
Eric V. Smithb9cd3532011-03-12 10:08:48 -05001481 warnings.simplefilter("always", DeprecationWarning)
Eric Smithe4d63172010-09-13 20:48:43 +00001482 format(obj, fmt_str)
1483 if should_raise_warning:
1484 self.assertEqual(len(w), 1)
Eric V. Smithb9cd3532011-03-12 10:08:48 -05001485 self.assertIsInstance(w[0].message, DeprecationWarning)
Eric Smithe4d63172010-09-13 20:48:43 +00001486 self.assertIn('object.__format__ with a non-empty format '
1487 'string', str(w[0].message))
1488 else:
1489 self.assertEqual(len(w), 0)
1490
1491 fmt_strs = ['', 's']
1492
1493 class A:
1494 def __format__(self, fmt_str):
1495 return format('', fmt_str)
1496
1497 for fmt_str in fmt_strs:
1498 test_deprecated_format_string(A(), fmt_str, False)
1499
1500 class B:
1501 pass
1502
1503 class C(object):
1504 pass
1505
1506 for cls in [object, B, C]:
1507 for fmt_str in fmt_strs:
1508 test_deprecated_format_string(cls(), fmt_str, len(fmt_str) != 0)
1509 # --------------------------------------------------------------------
1510
1511 # make sure we can take a subclass of str as a format spec
1512 class DerivedFromStr(str): pass
1513 self.assertEqual(format(0, DerivedFromStr('10')), ' 0')
1514
Christian Heimes90c3d9b2008-02-23 13:18:03 +00001515 def test_bin(self):
1516 self.assertEqual(bin(0), '0b0')
1517 self.assertEqual(bin(1), '0b1')
1518 self.assertEqual(bin(-1), '-0b1')
1519 self.assertEqual(bin(2**65), '0b1' + '0' * 65)
1520 self.assertEqual(bin(2**65-1), '0b' + '1' * 65)
1521 self.assertEqual(bin(-(2**65)), '-0b1' + '0' * 65)
1522 self.assertEqual(bin(-(2**65-1)), '-0b' + '1' * 65)
1523
Georg Brandl953152f2009-07-22 12:03:59 +00001524 def test_bytearray_translate(self):
1525 x = bytearray(b"abc")
1526 self.assertRaises(ValueError, x.translate, b"1", 1)
1527 self.assertRaises(TypeError, x.translate, b"1"*256, 1)
1528
Benjamin Petersonc4607ae2011-07-29 18:19:43 -05001529 def test_construct_singletons(self):
Benjamin Peterson18d7d7a2011-07-29 18:27:44 -05001530 for const in None, Ellipsis, NotImplemented:
Benjamin Petersonc4607ae2011-07-29 18:19:43 -05001531 tp = type(const)
1532 self.assertIs(tp(), const)
1533 self.assertRaises(TypeError, tp, 1, 2)
1534 self.assertRaises(TypeError, tp, a=1, b=2)
1535
Raymond Hettinger64958a12003-12-17 20:43:33 +00001536class TestSorted(unittest.TestCase):
1537
1538 def test_basic(self):
Guido van Rossum805365e2007-05-07 22:24:25 +00001539 data = list(range(100))
Raymond Hettinger64958a12003-12-17 20:43:33 +00001540 copy = data[:]
1541 random.shuffle(copy)
1542 self.assertEqual(data, sorted(copy))
1543 self.assertNotEqual(data, copy)
1544
1545 data.reverse()
1546 random.shuffle(copy)
Raymond Hettinger64958a12003-12-17 20:43:33 +00001547 self.assertEqual(data, sorted(copy, key=lambda x: -x))
1548 self.assertNotEqual(data, copy)
1549 random.shuffle(copy)
1550 self.assertEqual(data, sorted(copy, reverse=1))
1551 self.assertNotEqual(data, copy)
1552
1553 def test_inputtypes(self):
1554 s = 'abracadabra'
Walter Dörwald1f5947b2007-05-22 16:52:54 +00001555 types = [list, tuple, str]
Walter Dörwald4e41a4b2005-08-03 17:09:04 +00001556 for T in types:
Raymond Hettinger64958a12003-12-17 20:43:33 +00001557 self.assertEqual(sorted(s), sorted(T(s)))
1558
Walter Dörwald1f5947b2007-05-22 16:52:54 +00001559 s = ''.join(set(s)) # unique letters only
1560 types = [str, set, frozenset, list, tuple, dict.fromkeys]
Walter Dörwald4e41a4b2005-08-03 17:09:04 +00001561 for T in types:
Raymond Hettinger64958a12003-12-17 20:43:33 +00001562 self.assertEqual(sorted(s), sorted(T(s)))
1563
1564 def test_baddecorator(self):
1565 data = 'The quick Brown fox Jumped over The lazy Dog'.split()
1566 self.assertRaises(TypeError, sorted, data, None, lambda x,y: 0)
1567
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001568def test_main(verbose=None):
Serhiy Storchaka278d03b2013-04-06 22:52:34 +03001569 test_classes = (BuiltinTest, TestSorted)
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001570
1571 run_unittest(*test_classes)
1572
1573 # verify reference counting
1574 if verbose and hasattr(sys, "gettotalrefcount"):
1575 import gc
1576 counts = [None] * 5
Guido van Rossum805365e2007-05-07 22:24:25 +00001577 for i in range(len(counts)):
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001578 run_unittest(*test_classes)
1579 gc.collect()
1580 counts[i] = sys.gettotalrefcount()
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001581 print(counts)
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001582
Walter Dörwald919497e2003-01-19 16:23:59 +00001583
1584if __name__ == "__main__":
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001585 test_main(verbose=True)