blob: bfa5ee79535a2a9f80b786158ea6a97f59556422 [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
Mark Dickinsonad731b92009-11-09 17:12:30 +00003import platform
Georg Brandl1b37e872010-03-14 10:45:50 +00004import unittest
Benjamin Peterson076e0312010-08-23 21:58:59 +00005import sys
6import warnings
7import collections
8import io
Antoine Pitrou0d776b12011-11-06 00:34:26 +01009import os
Georg Brandl8334fd92010-12-04 10:26:46 +000010import ast
Benjamin Peterson076e0312010-08-23 21:58:59 +000011import types
12import builtins
13import random
Antoine Pitrou772add72011-11-06 02:37:42 +010014import traceback
Eli Bendersky67ebabd2011-02-25 10:14:17 +000015from test.support import TESTFN, unlink, run_unittest, check_warnings
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +000016from operator import neg
Antoine Pitrou0d776b12011-11-06 00:34:26 +010017try:
Antoine Pitrou772add72011-11-06 02:37:42 +010018 import pty, signal
Antoine Pitrou0d776b12011-11-06 00:34:26 +010019except ImportError:
Antoine Pitrou772add72011-11-06 02:37:42 +010020 pty = signal = None
Guido van Rossum3bead091992-01-27 17:00:37 +000021
Guido van Rossum3bead091992-01-27 17:00:37 +000022
Walter Dörwald919497e2003-01-19 16:23:59 +000023class Squares:
Guido van Rossum3bead091992-01-27 17:00:37 +000024
Walter Dörwald919497e2003-01-19 16:23:59 +000025 def __init__(self, max):
26 self.max = max
27 self.sofar = []
28
29 def __len__(self): return len(self.sofar)
30
31 def __getitem__(self, i):
32 if not 0 <= i < self.max: raise IndexError
33 n = len(self.sofar)
34 while n <= i:
35 self.sofar.append(n*n)
36 n += 1
37 return self.sofar[i]
38
39class StrSquares:
40
41 def __init__(self, max):
42 self.max = max
43 self.sofar = []
44
45 def __len__(self):
46 return len(self.sofar)
47
48 def __getitem__(self, i):
49 if not 0 <= i < self.max:
50 raise IndexError
51 n = len(self.sofar)
52 while n <= i:
53 self.sofar.append(str(n*n))
54 n += 1
55 return self.sofar[i]
56
57class BitBucket:
58 def write(self, line):
59 pass
60
Facundo Batista2336bdd2008-01-19 19:12:01 +000061test_conv_no_sign = [
Walter Dörwald919497e2003-01-19 16:23:59 +000062 ('0', 0),
63 ('1', 1),
64 ('9', 9),
65 ('10', 10),
66 ('99', 99),
67 ('100', 100),
68 ('314', 314),
69 (' 314', 314),
70 ('314 ', 314),
71 (' \t\t 314 \t\t ', 314),
Christian Heimesa37d4c62007-12-04 23:02:19 +000072 (repr(sys.maxsize), sys.maxsize),
Walter Dörwald919497e2003-01-19 16:23:59 +000073 (' 1x', ValueError),
74 (' 1 ', 1),
75 (' 1\02 ', ValueError),
76 ('', ValueError),
77 (' ', ValueError),
Walter Dörwald1f5947b2007-05-22 16:52:54 +000078 (' \t\t ', ValueError),
Guido van Rossumef87d6e2007-05-02 19:09:54 +000079 (str(b'\u0663\u0661\u0664 ','raw-unicode-escape'), 314),
Guido van Rossum84fc66d2007-05-03 17:18:26 +000080 (chr(0x200), ValueError),
Walter Dörwald919497e2003-01-19 16:23:59 +000081]
82
Facundo Batista2336bdd2008-01-19 19:12:01 +000083test_conv_sign = [
84 ('0', 0),
85 ('1', 1),
86 ('9', 9),
87 ('10', 10),
88 ('99', 99),
89 ('100', 100),
90 ('314', 314),
91 (' 314', ValueError),
92 ('314 ', 314),
93 (' \t\t 314 \t\t ', ValueError),
94 (repr(sys.maxsize), sys.maxsize),
95 (' 1x', ValueError),
96 (' 1 ', ValueError),
97 (' 1\02 ', ValueError),
98 ('', ValueError),
99 (' ', ValueError),
100 (' \t\t ', ValueError),
101 (str(b'\u0663\u0661\u0664 ','raw-unicode-escape'), 314),
102 (chr(0x200), ValueError),
103]
104
Raymond Hettinger96229b12005-03-11 06:49:40 +0000105class TestFailingBool:
Jack Diederich4dafcc42006-11-28 19:15:13 +0000106 def __bool__(self):
Raymond Hettinger96229b12005-03-11 06:49:40 +0000107 raise RuntimeError
108
109class TestFailingIter:
110 def __iter__(self):
111 raise RuntimeError
112
Walter Dörwald919497e2003-01-19 16:23:59 +0000113class BuiltinTest(unittest.TestCase):
114
115 def test_import(self):
116 __import__('sys')
117 __import__('time')
118 __import__('string')
Guido van Rossumd8faa362007-04-27 19:54:29 +0000119 __import__(name='sys')
120 __import__(name='time', level=0)
Walter Dörwald919497e2003-01-19 16:23:59 +0000121 self.assertRaises(ImportError, __import__, 'spamspam')
122 self.assertRaises(TypeError, __import__, 1, 2, 3, 4)
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000123 self.assertRaises(ValueError, __import__, '')
Guido van Rossumd8faa362007-04-27 19:54:29 +0000124 self.assertRaises(TypeError, __import__, 'sys', name='sys')
Walter Dörwald919497e2003-01-19 16:23:59 +0000125
126 def test_abs(self):
127 # int
128 self.assertEqual(abs(0), 0)
129 self.assertEqual(abs(1234), 1234)
130 self.assertEqual(abs(-1234), 1234)
Christian Heimesa37d4c62007-12-04 23:02:19 +0000131 self.assertTrue(abs(-sys.maxsize-1) > 0)
Walter Dörwald919497e2003-01-19 16:23:59 +0000132 # float
133 self.assertEqual(abs(0.0), 0.0)
134 self.assertEqual(abs(3.14), 3.14)
135 self.assertEqual(abs(-3.14), 3.14)
Walter Dörwald919497e2003-01-19 16:23:59 +0000136 # str
137 self.assertRaises(TypeError, abs, 'a')
Mark Dickinsonfb3dc942010-05-25 19:06:24 +0000138 # bool
139 self.assertEqual(abs(True), 1)
140 self.assertEqual(abs(False), 0)
141 # other
142 self.assertRaises(TypeError, abs)
143 self.assertRaises(TypeError, abs, None)
144 class AbsClass(object):
145 def __abs__(self):
146 return -5
147 self.assertEqual(abs(AbsClass()), -5)
Walter Dörwald919497e2003-01-19 16:23:59 +0000148
Raymond Hettinger96229b12005-03-11 06:49:40 +0000149 def test_all(self):
150 self.assertEqual(all([2, 4, 6]), True)
151 self.assertEqual(all([2, None, 6]), False)
152 self.assertRaises(RuntimeError, all, [2, TestFailingBool(), 6])
153 self.assertRaises(RuntimeError, all, TestFailingIter())
154 self.assertRaises(TypeError, all, 10) # Non-iterable
155 self.assertRaises(TypeError, all) # No args
156 self.assertRaises(TypeError, all, [2, 4, 6], []) # Too many args
157 self.assertEqual(all([]), True) # Empty iterator
158 S = [50, 60]
159 self.assertEqual(all(x > 42 for x in S), True)
160 S = [50, 40, 60]
161 self.assertEqual(all(x > 42 for x in S), False)
162
163 def test_any(self):
164 self.assertEqual(any([None, None, None]), False)
165 self.assertEqual(any([None, 4, None]), True)
166 self.assertRaises(RuntimeError, any, [None, TestFailingBool(), 6])
167 self.assertRaises(RuntimeError, all, TestFailingIter())
168 self.assertRaises(TypeError, any, 10) # Non-iterable
169 self.assertRaises(TypeError, any) # No args
170 self.assertRaises(TypeError, any, [2, 4, 6], []) # Too many args
171 self.assertEqual(any([]), False) # Empty iterator
172 S = [40, 60, 30]
173 self.assertEqual(any(x > 42 for x in S), True)
174 S = [10, 20, 30]
175 self.assertEqual(any(x > 42 for x in S), False)
176
Georg Brandl559e5d72008-06-11 18:37:52 +0000177 def test_ascii(self):
178 self.assertEqual(ascii(''), '\'\'')
179 self.assertEqual(ascii(0), '0')
Georg Brandl559e5d72008-06-11 18:37:52 +0000180 self.assertEqual(ascii(()), '()')
181 self.assertEqual(ascii([]), '[]')
182 self.assertEqual(ascii({}), '{}')
183 a = []
184 a.append(a)
185 self.assertEqual(ascii(a), '[[...]]')
186 a = {}
187 a[0] = a
188 self.assertEqual(ascii(a), '{0: {...}}')
Antoine Pitroue4a18922010-09-09 20:30:23 +0000189 # Advanced checks for unicode strings
190 def _check_uni(s):
191 self.assertEqual(ascii(s), repr(s))
192 _check_uni("'")
193 _check_uni('"')
194 _check_uni('"\'')
195 _check_uni('\0')
196 _check_uni('\r\n\t .')
197 # Unprintable non-ASCII characters
198 _check_uni('\x85')
199 _check_uni('\u1fff')
200 _check_uni('\U00012fff')
201 # Lone surrogates
202 _check_uni('\ud800')
203 _check_uni('\udfff')
204 # Issue #9804: surrogates should be joined even for printable
205 # wide characters (UCS-2 builds).
206 self.assertEqual(ascii('\U0001d121'), "'\\U0001d121'")
207 # All together
208 s = "'\0\"\n\r\t abcd\x85é\U00012fff\uD800\U0001D121xxx."
209 self.assertEqual(ascii(s),
210 r"""'\'\x00"\n\r\t abcd\x85\xe9\U00012fff\ud800\U0001d121xxx.'""")
Georg Brandl559e5d72008-06-11 18:37:52 +0000211
Thomas Wouters89f507f2006-12-13 04:49:30 +0000212 def test_neg(self):
Christian Heimesa37d4c62007-12-04 23:02:19 +0000213 x = -sys.maxsize-1
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000214 self.assertTrue(isinstance(x, int))
Christian Heimesa37d4c62007-12-04 23:02:19 +0000215 self.assertEqual(-x, sys.maxsize+1)
Thomas Wouters89f507f2006-12-13 04:49:30 +0000216
Walter Dörwald919497e2003-01-19 16:23:59 +0000217 def test_callable(self):
Antoine Pitroue71362d2010-11-27 22:00:11 +0000218 self.assertTrue(callable(len))
219 self.assertFalse(callable("a"))
220 self.assertTrue(callable(callable))
221 self.assertTrue(callable(lambda x, y: x + y))
222 self.assertFalse(callable(__builtins__))
Walter Dörwald919497e2003-01-19 16:23:59 +0000223 def f(): pass
Antoine Pitroue71362d2010-11-27 22:00:11 +0000224 self.assertTrue(callable(f))
225
226 class C1:
Walter Dörwald919497e2003-01-19 16:23:59 +0000227 def meth(self): pass
Antoine Pitroue71362d2010-11-27 22:00:11 +0000228 self.assertTrue(callable(C1))
229 c = C1()
230 self.assertTrue(callable(c.meth))
231 self.assertFalse(callable(c))
232
233 # __call__ is looked up on the class, not the instance
234 c.__call__ = None
235 self.assertFalse(callable(c))
236 c.__call__ = lambda self: 0
237 self.assertFalse(callable(c))
238 del c.__call__
239 self.assertFalse(callable(c))
240
241 class C2(object):
Walter Dörwald919497e2003-01-19 16:23:59 +0000242 def __call__(self): pass
Antoine Pitroue71362d2010-11-27 22:00:11 +0000243 c2 = C2()
244 self.assertTrue(callable(c2))
245 c2.__call__ = None
246 self.assertTrue(callable(c2))
247 class C3(C2): pass
248 c3 = C3()
249 self.assertTrue(callable(c3))
Walter Dörwald919497e2003-01-19 16:23:59 +0000250
251 def test_chr(self):
252 self.assertEqual(chr(32), ' ')
253 self.assertEqual(chr(65), 'A')
254 self.assertEqual(chr(97), 'a')
255 self.assertEqual(chr(0xff), '\xff')
Guido van Rossum572dbf82007-04-27 23:53:51 +0000256 self.assertRaises(ValueError, chr, 1<<24)
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000257 self.assertEqual(chr(sys.maxunicode),
Ezio Melottia9860ae2011-10-04 19:06:00 +0300258 str('\\U0010ffff'.encode("ascii"), 'unicode-escape'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000259 self.assertRaises(TypeError, chr)
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000260 self.assertEqual(chr(0x0000FFFF), "\U0000FFFF")
261 self.assertEqual(chr(0x00010000), "\U00010000")
262 self.assertEqual(chr(0x00010001), "\U00010001")
263 self.assertEqual(chr(0x000FFFFE), "\U000FFFFE")
264 self.assertEqual(chr(0x000FFFFF), "\U000FFFFF")
265 self.assertEqual(chr(0x00100000), "\U00100000")
266 self.assertEqual(chr(0x00100001), "\U00100001")
267 self.assertEqual(chr(0x0010FFFE), "\U0010FFFE")
268 self.assertEqual(chr(0x0010FFFF), "\U0010FFFF")
269 self.assertRaises(ValueError, chr, -1)
270 self.assertRaises(ValueError, chr, 0x00110000)
Amaury Forgeot d'Arc7888d082008-08-01 01:06:32 +0000271 self.assertRaises((OverflowError, ValueError), chr, 2**32)
Walter Dörwald919497e2003-01-19 16:23:59 +0000272
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000273 def test_cmp(self):
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000274 self.assertTrue(not hasattr(builtins, "cmp"))
Walter Dörwald919497e2003-01-19 16:23:59 +0000275
Walter Dörwald919497e2003-01-19 16:23:59 +0000276 def test_compile(self):
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000277 compile('print(1)\n', '', 'exec')
Amaury Forgeot d'Arcaf593462007-11-22 20:53:01 +0000278 bom = b'\xef\xbb\xbf'
279 compile(bom + b'print(1)\n', '', 'exec')
Guido van Rossumd8faa362007-04-27 19:54:29 +0000280 compile(source='pass', filename='?', mode='exec')
281 compile(dont_inherit=0, filename='tmp', source='0', mode='eval')
282 compile('pass', '?', dont_inherit=1, mode='exec')
Benjamin Peterson60320cb2008-09-26 21:49:22 +0000283 compile(memoryview(b"text"), "name", "exec")
Walter Dörwald919497e2003-01-19 16:23:59 +0000284 self.assertRaises(TypeError, compile)
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000285 self.assertRaises(ValueError, compile, 'print(42)\n', '<string>', 'badmode')
286 self.assertRaises(ValueError, compile, 'print(42)\n', '<string>', 'single', 0xff)
Neal Norwitzfcf44352005-11-27 20:37:43 +0000287 self.assertRaises(TypeError, compile, chr(0), 'f', 'exec')
Guido van Rossumd8faa362007-04-27 19:54:29 +0000288 self.assertRaises(TypeError, compile, 'pass', '?', 'exec',
289 mode='eval', source='0', filename='tmp')
Walter Dörwald1f5947b2007-05-22 16:52:54 +0000290 compile('print("\xe5")\n', '', 'exec')
291 self.assertRaises(TypeError, compile, chr(0), 'f', 'exec')
292 self.assertRaises(ValueError, compile, str('a = 1'), 'f', 'bad')
Guido van Rossumd8faa362007-04-27 19:54:29 +0000293
Georg Brandl8334fd92010-12-04 10:26:46 +0000294 # test the optimize argument
295
296 codestr = '''def f():
297 """doc"""
298 try:
299 assert False
300 except AssertionError:
301 return (True, f.__doc__)
302 else:
303 return (False, f.__doc__)
304 '''
305 def f(): """doc"""
306 values = [(-1, __debug__, f.__doc__),
307 (0, True, 'doc'),
308 (1, False, 'doc'),
309 (2, False, None)]
310 for optval, debugval, docstring in values:
311 # test both direct compilation and compilation via AST
312 codeobjs = []
313 codeobjs.append(compile(codestr, "<test>", "exec", optimize=optval))
314 tree = ast.parse(codestr)
315 codeobjs.append(compile(tree, "<test>", "exec", optimize=optval))
316 for code in codeobjs:
317 ns = {}
318 exec(code, ns)
319 rv = ns['f']()
320 self.assertEqual(rv, (debugval, docstring))
321
Walter Dörwald919497e2003-01-19 16:23:59 +0000322 def test_delattr(self):
Walter Dörwald919497e2003-01-19 16:23:59 +0000323 sys.spam = 1
324 delattr(sys, 'spam')
325 self.assertRaises(TypeError, delattr)
326
327 def test_dir(self):
Georg Brandle32b4222007-03-10 22:13:27 +0000328 # dir(wrong number of arguments)
Walter Dörwald919497e2003-01-19 16:23:59 +0000329 self.assertRaises(TypeError, dir, 42, 42)
330
Georg Brandle32b4222007-03-10 22:13:27 +0000331 # dir() - local scope
332 local_var = 1
Benjamin Peterson577473f2010-01-19 00:09:57 +0000333 self.assertIn('local_var', dir())
Georg Brandle32b4222007-03-10 22:13:27 +0000334
335 # dir(module)
Benjamin Peterson577473f2010-01-19 00:09:57 +0000336 self.assertIn('exit', dir(sys))
Georg Brandle32b4222007-03-10 22:13:27 +0000337
338 # dir(module_with_invalid__dict__)
Georg Brandle32b4222007-03-10 22:13:27 +0000339 class Foo(types.ModuleType):
340 __dict__ = 8
341 f = Foo("foo")
342 self.assertRaises(TypeError, dir, f)
343
344 # dir(type)
Benjamin Peterson577473f2010-01-19 00:09:57 +0000345 self.assertIn("strip", dir(str))
346 self.assertNotIn("__mro__", dir(str))
Georg Brandle32b4222007-03-10 22:13:27 +0000347
348 # dir(obj)
349 class Foo(object):
350 def __init__(self):
351 self.x = 7
352 self.y = 8
353 self.z = 9
354 f = Foo()
Benjamin Peterson577473f2010-01-19 00:09:57 +0000355 self.assertIn("y", dir(f))
Georg Brandle32b4222007-03-10 22:13:27 +0000356
357 # dir(obj_no__dict__)
358 class Foo(object):
359 __slots__ = []
360 f = Foo()
Benjamin Peterson577473f2010-01-19 00:09:57 +0000361 self.assertIn("__repr__", dir(f))
Georg Brandle32b4222007-03-10 22:13:27 +0000362
363 # dir(obj_no__class__with__dict__)
364 # (an ugly trick to cause getattr(f, "__class__") to fail)
365 class Foo(object):
366 __slots__ = ["__class__", "__dict__"]
367 def __init__(self):
368 self.bar = "wow"
369 f = Foo()
Benjamin Peterson577473f2010-01-19 00:09:57 +0000370 self.assertNotIn("__repr__", dir(f))
371 self.assertIn("bar", dir(f))
Georg Brandle32b4222007-03-10 22:13:27 +0000372
373 # dir(obj_using __dir__)
374 class Foo(object):
375 def __dir__(self):
376 return ["kan", "ga", "roo"]
377 f = Foo()
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000378 self.assertTrue(dir(f) == ["ga", "kan", "roo"])
Georg Brandle32b4222007-03-10 22:13:27 +0000379
Benjamin Peterson3bbb7222011-06-11 16:12:08 -0500380 # dir(obj__dir__tuple)
381 class Foo(object):
382 def __dir__(self):
383 return ("b", "c", "a")
384 res = dir(Foo())
385 self.assertIsInstance(res, list)
386 self.assertTrue(res == ["a", "b", "c"])
387
388 # dir(obj__dir__not_sequence)
Georg Brandle32b4222007-03-10 22:13:27 +0000389 class Foo(object):
390 def __dir__(self):
391 return 7
392 f = Foo()
393 self.assertRaises(TypeError, dir, f)
394
Collin Winter3eed7652007-08-14 17:53:54 +0000395 # dir(traceback)
396 try:
397 raise IndexError
398 except:
399 self.assertEqual(len(dir(sys.exc_info()[2])), 4)
400
Benjamin Petersondac9ace2011-05-25 09:33:37 -0500401 # test that object has a __dir__()
402 self.assertEqual(sorted([].__dir__()), dir([]))
Collin Winter3eed7652007-08-14 17:53:54 +0000403
Walter Dörwald919497e2003-01-19 16:23:59 +0000404 def test_divmod(self):
405 self.assertEqual(divmod(12, 7), (1, 5))
406 self.assertEqual(divmod(-12, 7), (-2, 2))
407 self.assertEqual(divmod(12, -7), (-2, -2))
408 self.assertEqual(divmod(-12, -7), (1, -5))
409
Mark Dickinson5c2db372009-12-05 20:28:34 +0000410 self.assertEqual(divmod(-sys.maxsize-1, -1), (sys.maxsize+1, 0))
Raymond Hettinger5ea7e312004-09-30 07:47:20 +0000411
Eli Bendersky67ebabd2011-02-25 10:14:17 +0000412 for num, denom, exp_result in [ (3.25, 1.0, (3.0, 0.25)),
413 (-3.25, 1.0, (-4.0, 0.75)),
414 (3.25, -1.0, (-4.0, -0.75)),
415 (-3.25, -1.0, (3.0, -0.25))]:
416 result = divmod(num, denom)
417 self.assertAlmostEqual(result[0], exp_result[0])
418 self.assertAlmostEqual(result[1], exp_result[1])
Walter Dörwald919497e2003-01-19 16:23:59 +0000419
420 self.assertRaises(TypeError, divmod)
421
422 def test_eval(self):
423 self.assertEqual(eval('1+1'), 2)
424 self.assertEqual(eval(' 1+1\n'), 2)
425 globals = {'a': 1, 'b': 2}
426 locals = {'b': 200, 'c': 300}
427 self.assertEqual(eval('a', globals) , 1)
428 self.assertEqual(eval('a', globals, locals), 1)
429 self.assertEqual(eval('b', globals, locals), 200)
430 self.assertEqual(eval('c', globals, locals), 300)
Walter Dörwald919497e2003-01-19 16:23:59 +0000431 globals = {'a': 1, 'b': 2}
432 locals = {'b': 200, 'c': 300}
Amaury Forgeot d'Arcaf593462007-11-22 20:53:01 +0000433 bom = b'\xef\xbb\xbf'
434 self.assertEqual(eval(bom + b'a', globals, locals), 1)
Walter Dörwald1f5947b2007-05-22 16:52:54 +0000435 self.assertEqual(eval('"\xe5"', globals), "\xe5")
Walter Dörwald919497e2003-01-19 16:23:59 +0000436 self.assertRaises(TypeError, eval)
437 self.assertRaises(TypeError, eval, ())
Amaury Forgeot d'Arcaf593462007-11-22 20:53:01 +0000438 self.assertRaises(SyntaxError, eval, bom[:2] + b'a')
Walter Dörwald919497e2003-01-19 16:23:59 +0000439
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000440 def test_general_eval(self):
441 # Tests that general mappings can be used for the locals argument
442
443 class M:
444 "Test mapping interface versus possible calls from eval()."
445 def __getitem__(self, key):
446 if key == 'a':
447 return 12
448 raise KeyError
Guido van Rossumcd70eee2007-02-11 18:53:00 +0000449 def keys(self):
450 return list('xyz')
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000451
452 m = M()
453 g = globals()
454 self.assertEqual(eval('a', g, m), 12)
455 self.assertRaises(NameError, eval, 'b', g, m)
456 self.assertEqual(eval('dir()', g, m), list('xyz'))
457 self.assertEqual(eval('globals()', g, m), g)
458 self.assertEqual(eval('locals()', g, m), m)
Raymond Hettinger513ffe82004-07-06 13:44:41 +0000459 self.assertRaises(TypeError, eval, 'a', m)
Raymond Hettinger66bd2332004-08-02 08:30:07 +0000460 class A:
461 "Non-mapping"
462 pass
463 m = A()
464 self.assertRaises(TypeError, eval, 'a', g, m)
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000465
466 # Verify that dict subclasses work as well
467 class D(dict):
468 def __getitem__(self, key):
469 if key == 'a':
470 return 12
471 return dict.__getitem__(self, key)
Guido van Rossumcd70eee2007-02-11 18:53:00 +0000472 def keys(self):
473 return list('xyz')
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000474
475 d = D()
476 self.assertEqual(eval('a', g, d), 12)
477 self.assertRaises(NameError, eval, 'b', g, d)
478 self.assertEqual(eval('dir()', g, d), list('xyz'))
479 self.assertEqual(eval('globals()', g, d), g)
480 self.assertEqual(eval('locals()', g, d), d)
481
482 # Verify locals stores (used by list comps)
483 eval('[locals() for i in (2,3)]', g, d)
Raymond Hettingerf80680d2008-02-06 00:07:11 +0000484 eval('[locals() for i in (2,3)]', g, collections.UserDict())
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000485
486 class SpreadSheet:
487 "Sample application showing nested, calculated lookups."
488 _cells = {}
489 def __setitem__(self, key, formula):
490 self._cells[key] = formula
Thomas Wouters73e5a5b2006-06-08 15:35:45 +0000491 def __getitem__(self, key):
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000492 return eval(self._cells[key], globals(), self)
493
494 ss = SpreadSheet()
495 ss['a1'] = '5'
496 ss['a2'] = 'a1*6'
497 ss['a3'] = 'a2*7'
498 self.assertEqual(ss['a3'], 210)
499
Raymond Hettinger2a7dede2004-08-07 04:55:30 +0000500 # Verify that dir() catches a non-list returned by eval
501 # SF bug #1004669
502 class C:
503 def __getitem__(self, item):
504 raise KeyError(item)
Guido van Rossumcd70eee2007-02-11 18:53:00 +0000505 def keys(self):
506 return 1 # used to be 'a' but that's no longer an error
Raymond Hettinger2a7dede2004-08-07 04:55:30 +0000507 self.assertRaises(TypeError, eval, 'dir()', globals(), C())
508
Georg Brandl7cae87c2006-09-06 06:51:57 +0000509 def test_exec(self):
510 g = {}
511 exec('z = 1', g)
512 if '__builtins__' in g:
513 del g['__builtins__']
514 self.assertEqual(g, {'z': 1})
515
Guido van Rossumef87d6e2007-05-02 19:09:54 +0000516 exec('z = 1+1', g)
Georg Brandl7cae87c2006-09-06 06:51:57 +0000517 if '__builtins__' in g:
518 del g['__builtins__']
519 self.assertEqual(g, {'z': 2})
520 g = {}
521 l = {}
522
Brett Cannon77628992010-03-20 20:59:33 +0000523 with check_warnings():
524 warnings.filterwarnings("ignore", "global statement",
525 module="<string>")
526 exec('global a; a = 1; b = 2', g, l)
Georg Brandl7cae87c2006-09-06 06:51:57 +0000527 if '__builtins__' in g:
528 del g['__builtins__']
529 if '__builtins__' in l:
530 del l['__builtins__']
531 self.assertEqual((g, l), ({'a': 1}, {'b': 2}))
532
Amaury Forgeot d'Arc9ed77352008-04-04 23:25:27 +0000533 def test_exec_redirected(self):
534 savestdout = sys.stdout
535 sys.stdout = None # Whatever that cannot flush()
536 try:
537 # Used to raise SystemError('error return without exception set')
538 exec('a')
539 except NameError:
540 pass
541 finally:
542 sys.stdout = savestdout
543
Walter Dörwald919497e2003-01-19 16:23:59 +0000544 def test_filter(self):
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000545 self.assertEqual(list(filter(lambda c: 'a' <= c <= 'z', 'Hello World')), list('elloorld'))
546 self.assertEqual(list(filter(None, [1, 'hello', [], [3], '', None, 9, 0])), [1, 'hello', [3], 9])
547 self.assertEqual(list(filter(lambda x: x > 0, [1, -3, 9, 0, 2])), [1, 9, 2])
548 self.assertEqual(list(filter(None, Squares(10))), [1, 4, 9, 16, 25, 36, 49, 64, 81])
549 self.assertEqual(list(filter(lambda x: x%2, Squares(10))), [1, 9, 25, 49, 81])
Walter Dörwald919497e2003-01-19 16:23:59 +0000550 def identity(item):
551 return 1
552 filter(identity, Squares(5))
553 self.assertRaises(TypeError, filter)
554 class BadSeq(object):
Tim Petersf2715e02003-02-19 02:35:07 +0000555 def __getitem__(self, index):
556 if index<4:
557 return 42
558 raise ValueError
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000559 self.assertRaises(ValueError, list, filter(lambda x: x, BadSeq()))
Walter Dörwald919497e2003-01-19 16:23:59 +0000560 def badfunc():
561 pass
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000562 self.assertRaises(TypeError, list, filter(badfunc, range(5)))
Walter Dörwald919497e2003-01-19 16:23:59 +0000563
Walter Dörwaldbf517072003-01-27 15:57:14 +0000564 # test bltinmodule.c::filtertuple()
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000565 self.assertEqual(list(filter(None, (1, 2))), [1, 2])
566 self.assertEqual(list(filter(lambda x: x>=3, (1, 2, 3, 4))), [3, 4])
567 self.assertRaises(TypeError, list, filter(42, (1, 2)))
Walter Dörwaldc3da83f2003-02-04 20:24:45 +0000568
Walter Dörwald919497e2003-01-19 16:23:59 +0000569 def test_getattr(self):
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000570 self.assertTrue(getattr(sys, 'stdout') is sys.stdout)
Walter Dörwald919497e2003-01-19 16:23:59 +0000571 self.assertRaises(TypeError, getattr, sys, 1)
572 self.assertRaises(TypeError, getattr, sys, 1, "foo")
573 self.assertRaises(TypeError, getattr)
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000574 self.assertRaises(AttributeError, getattr, sys, chr(sys.maxunicode))
Victor Stinner624dbf62010-03-12 17:17:58 +0000575 # unicode surrogates are not encodable to the default encoding (utf8)
576 self.assertRaises(AttributeError, getattr, 1, "\uDAD1\uD51E")
Walter Dörwald919497e2003-01-19 16:23:59 +0000577
578 def test_hasattr(self):
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000579 self.assertTrue(hasattr(sys, 'stdout'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000580 self.assertRaises(TypeError, hasattr, sys, 1)
581 self.assertRaises(TypeError, hasattr)
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000582 self.assertEqual(False, hasattr(sys, chr(sys.maxunicode)))
Walter Dörwald919497e2003-01-19 16:23:59 +0000583
Benjamin Peterson17689992010-08-24 03:26:23 +0000584 # Check that hasattr propagates all exceptions outside of
585 # AttributeError.
Alexandre Vassalottieca20b62008-05-16 02:54:33 +0000586 class A:
587 def __getattr__(self, what):
Benjamin Peterson17689992010-08-24 03:26:23 +0000588 raise SystemExit
589 self.assertRaises(SystemExit, hasattr, A(), "b")
Alexandre Vassalottieca20b62008-05-16 02:54:33 +0000590 class B:
591 def __getattr__(self, what):
Benjamin Peterson17689992010-08-24 03:26:23 +0000592 raise ValueError
593 self.assertRaises(ValueError, hasattr, B(), "b")
Alexandre Vassalottieca20b62008-05-16 02:54:33 +0000594
Walter Dörwald919497e2003-01-19 16:23:59 +0000595 def test_hash(self):
596 hash(None)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000597 self.assertEqual(hash(1), hash(1))
Walter Dörwald919497e2003-01-19 16:23:59 +0000598 self.assertEqual(hash(1), hash(1.0))
599 hash('spam')
Guido van Rossum98297ee2007-11-06 21:34:58 +0000600 self.assertEqual(hash('spam'), hash(b'spam'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000601 hash((0,1,2,3))
602 def f(): pass
603 self.assertRaises(TypeError, hash, [])
604 self.assertRaises(TypeError, hash, {})
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000605 # Bug 1536021: Allow hash to return long objects
606 class X:
607 def __hash__(self):
608 return 2**100
Ezio Melottib3aedd42010-11-20 19:04:17 +0000609 self.assertEqual(type(hash(X())), int)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000610 class Z(int):
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000611 def __hash__(self):
612 return self
Ezio Melottib3aedd42010-11-20 19:04:17 +0000613 self.assertEqual(hash(Z(42)), hash(42))
Walter Dörwald919497e2003-01-19 16:23:59 +0000614
615 def test_hex(self):
616 self.assertEqual(hex(16), '0x10')
Guido van Rossume2a383d2007-01-15 16:59:06 +0000617 self.assertEqual(hex(-16), '-0x10')
Walter Dörwald919497e2003-01-19 16:23:59 +0000618 self.assertRaises(TypeError, hex, {})
619
620 def test_id(self):
621 id(None)
622 id(1)
Walter Dörwald919497e2003-01-19 16:23:59 +0000623 id(1.0)
624 id('spam')
625 id((0,1,2,3))
626 id([0,1,2,3])
627 id({'spam': 1, 'eggs': 2, 'ham': 3})
628
Guido van Rossuma88a0332007-02-26 16:59:55 +0000629 # Test input() later, alphabetized as if it were raw_input
630
Walter Dörwald919497e2003-01-19 16:23:59 +0000631 def test_iter(self):
632 self.assertRaises(TypeError, iter)
633 self.assertRaises(TypeError, iter, 42, 42)
634 lists = [("1", "2"), ["1", "2"], "12"]
Walter Dörwald919497e2003-01-19 16:23:59 +0000635 for l in lists:
636 i = iter(l)
Georg Brandla18af4e2007-04-21 15:47:16 +0000637 self.assertEqual(next(i), '1')
638 self.assertEqual(next(i), '2')
639 self.assertRaises(StopIteration, next, i)
Walter Dörwald919497e2003-01-19 16:23:59 +0000640
641 def test_isinstance(self):
642 class C:
643 pass
644 class D(C):
645 pass
646 class E:
647 pass
648 c = C()
649 d = D()
650 e = E()
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000651 self.assertTrue(isinstance(c, C))
652 self.assertTrue(isinstance(d, C))
653 self.assertTrue(not isinstance(e, C))
654 self.assertTrue(not isinstance(c, D))
655 self.assertTrue(not isinstance('foo', E))
Walter Dörwald919497e2003-01-19 16:23:59 +0000656 self.assertRaises(TypeError, isinstance, E, 'foo')
657 self.assertRaises(TypeError, isinstance)
658
659 def test_issubclass(self):
660 class C:
661 pass
662 class D(C):
663 pass
664 class E:
665 pass
666 c = C()
667 d = D()
668 e = E()
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000669 self.assertTrue(issubclass(D, C))
670 self.assertTrue(issubclass(C, C))
671 self.assertTrue(not issubclass(C, D))
Walter Dörwald919497e2003-01-19 16:23:59 +0000672 self.assertRaises(TypeError, issubclass, 'foo', E)
673 self.assertRaises(TypeError, issubclass, E, 'foo')
674 self.assertRaises(TypeError, issubclass)
675
676 def test_len(self):
677 self.assertEqual(len('123'), 3)
678 self.assertEqual(len(()), 0)
679 self.assertEqual(len((1, 2, 3, 4)), 4)
680 self.assertEqual(len([1, 2, 3, 4]), 4)
681 self.assertEqual(len({}), 0)
682 self.assertEqual(len({'a':1, 'b': 2}), 2)
683 class BadSeq:
684 def __len__(self):
685 raise ValueError
686 self.assertRaises(ValueError, len, BadSeq())
Benjamin Petersonee1ae7c2009-02-08 21:07:20 +0000687 class InvalidLen:
688 def __len__(self):
689 return None
690 self.assertRaises(TypeError, len, InvalidLen())
691 class FloatLen:
692 def __len__(self):
693 return 4.5
694 self.assertRaises(TypeError, len, FloatLen())
695 class HugeLen:
696 def __len__(self):
697 return sys.maxsize + 1
698 self.assertRaises(OverflowError, len, HugeLen())
Mark Dickinsonfb3dc942010-05-25 19:06:24 +0000699 class NoLenMethod(object): pass
700 self.assertRaises(TypeError, len, NoLenMethod())
Walter Dörwald919497e2003-01-19 16:23:59 +0000701
Walter Dörwald919497e2003-01-19 16:23:59 +0000702 def test_map(self):
703 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000704 list(map(lambda x: x*x, range(1,4))),
Walter Dörwald919497e2003-01-19 16:23:59 +0000705 [1, 4, 9]
706 )
707 try:
708 from math import sqrt
709 except ImportError:
710 def sqrt(x):
711 return pow(x, 0.5)
712 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000713 list(map(lambda x: list(map(sqrt, x)), [[16, 4], [81, 9]])),
Walter Dörwald919497e2003-01-19 16:23:59 +0000714 [[4.0, 2.0], [9.0, 3.0]]
715 )
716 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000717 list(map(lambda x, y: x+y, [1,3,2], [9,1,4])),
Walter Dörwald919497e2003-01-19 16:23:59 +0000718 [10, 4, 6]
719 )
720
721 def plus(*v):
722 accu = 0
723 for i in v: accu = accu + i
724 return accu
725 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000726 list(map(plus, [1, 3, 7])),
Walter Dörwald919497e2003-01-19 16:23:59 +0000727 [1, 3, 7]
728 )
729 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000730 list(map(plus, [1, 3, 7], [4, 9, 2])),
Walter Dörwald919497e2003-01-19 16:23:59 +0000731 [1+4, 3+9, 7+2]
732 )
733 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000734 list(map(plus, [1, 3, 7], [4, 9, 2], [1, 1, 0])),
Walter Dörwald919497e2003-01-19 16:23:59 +0000735 [1+4+1, 3+9+1, 7+2+0]
736 )
737 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000738 list(map(int, Squares(10))),
Walter Dörwald919497e2003-01-19 16:23:59 +0000739 [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
740 )
Guido van Rossum47b9ff62006-08-24 00:41:19 +0000741 def Max(a, b):
742 if a is None:
743 return b
744 if b is None:
745 return a
746 return max(a, b)
Walter Dörwald919497e2003-01-19 16:23:59 +0000747 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000748 list(map(Max, Squares(3), Squares(2))),
749 [0, 1]
Walter Dörwald919497e2003-01-19 16:23:59 +0000750 )
751 self.assertRaises(TypeError, map)
752 self.assertRaises(TypeError, map, lambda x: x, 42)
Walter Dörwald919497e2003-01-19 16:23:59 +0000753 class BadSeq:
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000754 def __iter__(self):
Walter Dörwald919497e2003-01-19 16:23:59 +0000755 raise ValueError
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000756 yield None
757 self.assertRaises(ValueError, list, map(lambda x: x, BadSeq()))
Neal Norwitzfcf44352005-11-27 20:37:43 +0000758 def badfunc(x):
759 raise RuntimeError
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000760 self.assertRaises(RuntimeError, list, map(badfunc, range(5)))
Walter Dörwald919497e2003-01-19 16:23:59 +0000761
762 def test_max(self):
763 self.assertEqual(max('123123'), '3')
764 self.assertEqual(max(1, 2, 3), 3)
765 self.assertEqual(max((1, 2, 3, 1, 2, 3)), 3)
766 self.assertEqual(max([1, 2, 3, 1, 2, 3]), 3)
767
Guido van Rossume2a383d2007-01-15 16:59:06 +0000768 self.assertEqual(max(1, 2, 3.0), 3.0)
769 self.assertEqual(max(1, 2.0, 3), 3)
770 self.assertEqual(max(1.0, 2, 3), 3)
Walter Dörwald919497e2003-01-19 16:23:59 +0000771
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +0000772 for stmt in (
773 "max(key=int)", # no args
774 "max(1, key=int)", # single arg not iterable
775 "max(1, 2, keystone=int)", # wrong keyword
776 "max(1, 2, key=int, abc=int)", # two many keywords
777 "max(1, 2, key=1)", # keyfunc is not callable
778 ):
Tim Peters7f061872004-12-07 21:17:46 +0000779 try:
Georg Brandl7cae87c2006-09-06 06:51:57 +0000780 exec(stmt, globals())
Tim Peters7f061872004-12-07 21:17:46 +0000781 except TypeError:
782 pass
783 else:
784 self.fail(stmt)
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +0000785
786 self.assertEqual(max((1,), key=neg), 1) # one elem iterable
787 self.assertEqual(max((1,2), key=neg), 1) # two elem iterable
788 self.assertEqual(max(1, 2, key=neg), 1) # two elems
789
790 data = [random.randrange(200) for i in range(100)]
791 keys = dict((elem, random.randrange(50)) for elem in data)
792 f = keys.__getitem__
793 self.assertEqual(max(data, key=f),
794 sorted(reversed(data), key=f)[-1])
795
Walter Dörwald919497e2003-01-19 16:23:59 +0000796 def test_min(self):
797 self.assertEqual(min('123123'), '1')
798 self.assertEqual(min(1, 2, 3), 1)
799 self.assertEqual(min((1, 2, 3, 1, 2, 3)), 1)
800 self.assertEqual(min([1, 2, 3, 1, 2, 3]), 1)
801
Guido van Rossume2a383d2007-01-15 16:59:06 +0000802 self.assertEqual(min(1, 2, 3.0), 1)
803 self.assertEqual(min(1, 2.0, 3), 1)
804 self.assertEqual(min(1.0, 2, 3), 1.0)
Walter Dörwald919497e2003-01-19 16:23:59 +0000805
806 self.assertRaises(TypeError, min)
807 self.assertRaises(TypeError, min, 42)
808 self.assertRaises(ValueError, min, ())
809 class BadSeq:
810 def __getitem__(self, index):
811 raise ValueError
812 self.assertRaises(ValueError, min, BadSeq())
Walter Dörwald919497e2003-01-19 16:23:59 +0000813
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +0000814 for stmt in (
815 "min(key=int)", # no args
816 "min(1, key=int)", # single arg not iterable
817 "min(1, 2, keystone=int)", # wrong keyword
818 "min(1, 2, key=int, abc=int)", # two many keywords
819 "min(1, 2, key=1)", # keyfunc is not callable
820 ):
Tim Peters7f061872004-12-07 21:17:46 +0000821 try:
Georg Brandl7cae87c2006-09-06 06:51:57 +0000822 exec(stmt, globals())
Tim Peters7f061872004-12-07 21:17:46 +0000823 except TypeError:
824 pass
825 else:
826 self.fail(stmt)
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +0000827
828 self.assertEqual(min((1,), key=neg), 1) # one elem iterable
829 self.assertEqual(min((1,2), key=neg), 2) # two elem iterable
830 self.assertEqual(min(1, 2, key=neg), 2) # two elems
831
832 data = [random.randrange(200) for i in range(100)]
833 keys = dict((elem, random.randrange(50)) for elem in data)
834 f = keys.__getitem__
835 self.assertEqual(min(data, key=f),
836 sorted(data, key=f)[0])
837
Georg Brandla18af4e2007-04-21 15:47:16 +0000838 def test_next(self):
839 it = iter(range(2))
840 self.assertEqual(next(it), 0)
841 self.assertEqual(next(it), 1)
842 self.assertRaises(StopIteration, next, it)
843 self.assertRaises(StopIteration, next, it)
Ezio Melottib3aedd42010-11-20 19:04:17 +0000844 self.assertEqual(next(it, 42), 42)
Georg Brandla18af4e2007-04-21 15:47:16 +0000845
846 class Iter(object):
847 def __iter__(self):
848 return self
849 def __next__(self):
850 raise StopIteration
851
852 it = iter(Iter())
Ezio Melottib3aedd42010-11-20 19:04:17 +0000853 self.assertEqual(next(it, 42), 42)
Georg Brandla18af4e2007-04-21 15:47:16 +0000854 self.assertRaises(StopIteration, next, it)
855
856 def gen():
857 yield 1
858 return
859
860 it = gen()
Ezio Melottib3aedd42010-11-20 19:04:17 +0000861 self.assertEqual(next(it), 1)
Georg Brandla18af4e2007-04-21 15:47:16 +0000862 self.assertRaises(StopIteration, next, it)
Ezio Melottib3aedd42010-11-20 19:04:17 +0000863 self.assertEqual(next(it, 42), 42)
Georg Brandla18af4e2007-04-21 15:47:16 +0000864
Walter Dörwald919497e2003-01-19 16:23:59 +0000865 def test_oct(self):
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000866 self.assertEqual(oct(100), '0o144')
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000867 self.assertEqual(oct(-100), '-0o144')
Walter Dörwald919497e2003-01-19 16:23:59 +0000868 self.assertRaises(TypeError, oct, ())
869
870 def write_testfile(self):
Guido van Rossuma88a0332007-02-26 16:59:55 +0000871 # NB the first 4 lines are also used to test input, below
Walter Dörwald919497e2003-01-19 16:23:59 +0000872 fp = open(TESTFN, 'w')
873 try:
874 fp.write('1+1\n')
Walter Dörwald919497e2003-01-19 16:23:59 +0000875 fp.write('The quick brown fox jumps over the lazy dog')
876 fp.write('.\n')
877 fp.write('Dear John\n')
878 fp.write('XXX'*100)
879 fp.write('YYY'*100)
880 finally:
881 fp.close()
882
883 def test_open(self):
884 self.write_testfile()
885 fp = open(TESTFN, 'r')
886 try:
887 self.assertEqual(fp.readline(4), '1+1\n')
Walter Dörwald919497e2003-01-19 16:23:59 +0000888 self.assertEqual(fp.readline(), 'The quick brown fox jumps over the lazy dog.\n')
889 self.assertEqual(fp.readline(4), 'Dear')
890 self.assertEqual(fp.readline(100), ' John\n')
891 self.assertEqual(fp.read(300), 'XXX'*100)
892 self.assertEqual(fp.read(1000), 'YYY'*100)
893 finally:
894 fp.close()
895 unlink(TESTFN)
896
897 def test_ord(self):
898 self.assertEqual(ord(' '), 32)
899 self.assertEqual(ord('A'), 65)
900 self.assertEqual(ord('a'), 97)
Guido van Rossumf9e91c92007-05-08 21:05:48 +0000901 self.assertEqual(ord('\x80'), 128)
902 self.assertEqual(ord('\xff'), 255)
903
904 self.assertEqual(ord(b' '), 32)
905 self.assertEqual(ord(b'A'), 65)
906 self.assertEqual(ord(b'a'), 97)
907 self.assertEqual(ord(b'\x80'), 128)
908 self.assertEqual(ord(b'\xff'), 255)
909
Walter Dörwald1f5947b2007-05-22 16:52:54 +0000910 self.assertEqual(ord(chr(sys.maxunicode)), sys.maxunicode)
Walter Dörwald919497e2003-01-19 16:23:59 +0000911 self.assertRaises(TypeError, ord, 42)
Walter Dörwald919497e2003-01-19 16:23:59 +0000912
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000913 self.assertEqual(ord(chr(0x10FFFF)), 0x10FFFF)
914 self.assertEqual(ord("\U0000FFFF"), 0x0000FFFF)
915 self.assertEqual(ord("\U00010000"), 0x00010000)
916 self.assertEqual(ord("\U00010001"), 0x00010001)
917 self.assertEqual(ord("\U000FFFFE"), 0x000FFFFE)
918 self.assertEqual(ord("\U000FFFFF"), 0x000FFFFF)
919 self.assertEqual(ord("\U00100000"), 0x00100000)
920 self.assertEqual(ord("\U00100001"), 0x00100001)
921 self.assertEqual(ord("\U0010FFFE"), 0x0010FFFE)
922 self.assertEqual(ord("\U0010FFFF"), 0x0010FFFF)
923
Walter Dörwald919497e2003-01-19 16:23:59 +0000924 def test_pow(self):
925 self.assertEqual(pow(0,0), 1)
926 self.assertEqual(pow(0,1), 0)
927 self.assertEqual(pow(1,0), 1)
928 self.assertEqual(pow(1,1), 1)
929
930 self.assertEqual(pow(2,0), 1)
931 self.assertEqual(pow(2,10), 1024)
932 self.assertEqual(pow(2,20), 1024*1024)
933 self.assertEqual(pow(2,30), 1024*1024*1024)
934
935 self.assertEqual(pow(-2,0), 1)
936 self.assertEqual(pow(-2,1), -2)
937 self.assertEqual(pow(-2,2), 4)
938 self.assertEqual(pow(-2,3), -8)
939
Walter Dörwald919497e2003-01-19 16:23:59 +0000940 self.assertAlmostEqual(pow(0.,0), 1.)
941 self.assertAlmostEqual(pow(0.,1), 0.)
942 self.assertAlmostEqual(pow(1.,0), 1.)
943 self.assertAlmostEqual(pow(1.,1), 1.)
944
945 self.assertAlmostEqual(pow(2.,0), 1.)
946 self.assertAlmostEqual(pow(2.,10), 1024.)
947 self.assertAlmostEqual(pow(2.,20), 1024.*1024.)
948 self.assertAlmostEqual(pow(2.,30), 1024.*1024.*1024.)
949
950 self.assertAlmostEqual(pow(-2.,0), 1.)
951 self.assertAlmostEqual(pow(-2.,1), -2.)
952 self.assertAlmostEqual(pow(-2.,2), 4.)
953 self.assertAlmostEqual(pow(-2.,3), -8.)
954
Mark Dickinson5c2db372009-12-05 20:28:34 +0000955 for x in 2, 2.0:
956 for y in 10, 10.0:
957 for z in 1000, 1000.0:
Walter Dörwald919497e2003-01-19 16:23:59 +0000958 if isinstance(x, float) or \
959 isinstance(y, float) or \
960 isinstance(z, float):
961 self.assertRaises(TypeError, pow, x, y, z)
962 else:
963 self.assertAlmostEqual(pow(x, y, z), 24.0)
964
Jeffrey Yasskin3404b3c2007-09-07 15:15:49 +0000965 self.assertAlmostEqual(pow(-1, 0.5), 1j)
966 self.assertAlmostEqual(pow(-1, 1/3), 0.5 + 0.8660254037844386j)
967
Walter Dörwald919497e2003-01-19 16:23:59 +0000968 self.assertRaises(TypeError, pow, -1, -2, 3)
969 self.assertRaises(ValueError, pow, 1, 2, 0)
Walter Dörwald919497e2003-01-19 16:23:59 +0000970
971 self.assertRaises(TypeError, pow)
972
Guido van Rossuma88a0332007-02-26 16:59:55 +0000973 def test_input(self):
974 self.write_testfile()
975 fp = open(TESTFN, 'r')
976 savestdin = sys.stdin
977 savestdout = sys.stdout # Eats the echo
978 try:
979 sys.stdin = fp
980 sys.stdout = BitBucket()
981 self.assertEqual(input(), "1+1")
Guido van Rossuma88a0332007-02-26 16:59:55 +0000982 self.assertEqual(input(), 'The quick brown fox jumps over the lazy dog.')
983 self.assertEqual(input('testing\n'), 'Dear John')
984
985 # SF 1535165: don't segfault on closed stdin
986 # sys.stdout must be a regular file for triggering
987 sys.stdout = savestdout
988 sys.stdin.close()
989 self.assertRaises(ValueError, input)
990
991 sys.stdout = BitBucket()
Guido van Rossum34d19282007-08-09 01:03:29 +0000992 sys.stdin = io.StringIO("NULL\0")
Guido van Rossuma88a0332007-02-26 16:59:55 +0000993 self.assertRaises(TypeError, input, 42, 42)
Guido van Rossum34d19282007-08-09 01:03:29 +0000994 sys.stdin = io.StringIO(" 'whitespace'")
Guido van Rossuma88a0332007-02-26 16:59:55 +0000995 self.assertEqual(input(), " 'whitespace'")
Guido van Rossum34d19282007-08-09 01:03:29 +0000996 sys.stdin = io.StringIO()
Guido van Rossuma88a0332007-02-26 16:59:55 +0000997 self.assertRaises(EOFError, input)
998
999 del sys.stdout
1000 self.assertRaises(RuntimeError, input, 'prompt')
1001 del sys.stdin
1002 self.assertRaises(RuntimeError, input, 'prompt')
1003 finally:
1004 sys.stdin = savestdin
1005 sys.stdout = savestdout
1006 fp.close()
1007 unlink(TESTFN)
1008
Antoine Pitrou772add72011-11-06 02:37:42 +01001009 @unittest.skipUnless(pty, "the pty and signal modules must be available")
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001010 def check_input_tty(self, prompt, terminal_input, stdio_encoding=None):
Antoine Pitrou1ce4b142011-11-06 03:03:18 +01001011 if not sys.stdin.isatty() or not sys.stdout.isatty():
1012 self.skipTest("stdin and stdout must be ttys")
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001013 r, w = os.pipe()
1014 try:
1015 pid, fd = pty.fork()
1016 except (OSError, AttributeError) as e:
1017 os.close(r)
1018 os.close(w)
1019 self.skipTest("pty.fork() raised {}".format(e))
1020 if pid == 0:
1021 # Child
Antoine Pitrou772add72011-11-06 02:37:42 +01001022 try:
1023 # Make sure we don't get stuck if there's a problem
1024 signal.alarm(2)
1025 os.close(r)
1026 # Check the error handlers are accounted for
1027 if stdio_encoding:
1028 sys.stdin = io.TextIOWrapper(sys.stdin.detach(),
1029 encoding=stdio_encoding,
1030 errors='surrogateescape')
1031 sys.stdout = io.TextIOWrapper(sys.stdout.detach(),
1032 encoding=stdio_encoding,
1033 errors='replace')
1034 with open(w, "w") as wpipe:
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001035 print("tty =", sys.stdin.isatty() and sys.stdout.isatty(), file=wpipe)
1036 print(ascii(input(prompt)), file=wpipe)
Antoine Pitrou772add72011-11-06 02:37:42 +01001037 except:
1038 traceback.print_exc()
1039 finally:
1040 # We don't want to return to unittest...
1041 os._exit(0)
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001042 # Parent
1043 os.close(w)
1044 os.write(fd, terminal_input + b"\r\n")
1045 # Get results from the pipe
1046 with open(r, "r") as rpipe:
1047 lines = []
1048 while True:
1049 line = rpipe.readline().strip()
Antoine Pitrou772add72011-11-06 02:37:42 +01001050 if line == "":
1051 # The other end was closed => the child exited
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001052 break
1053 lines.append(line)
Antoine Pitrou772add72011-11-06 02:37:42 +01001054 # Check the result was got and corresponds to the user's terminal input
1055 if len(lines) != 2:
1056 # Something went wrong, try to get at stderr
1057 with open(fd, "r", encoding="ascii", errors="ignore") as child_output:
1058 self.fail("got %d lines in pipe but expected 2, child output was:\n%s"
1059 % (len(lines), child_output.read()))
1060 os.close(fd)
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001061 # Check we did exercise the GNU readline path
1062 self.assertIn(lines[0], {'tty = True', 'tty = False'})
1063 if lines[0] != 'tty = True':
1064 self.skipTest("standard IO in should have been a tty")
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001065 input_result = eval(lines[1]) # ascii() -> eval() roundtrip
1066 if stdio_encoding:
1067 expected = terminal_input.decode(stdio_encoding, 'surrogateescape')
1068 else:
1069 expected = terminal_input.decode(sys.stdin.encoding) # what else?
1070 self.assertEqual(input_result, expected)
1071
1072 def test_input_tty(self):
1073 # Test input() functionality when wired to a tty (the code path
1074 # is different and invokes GNU readline if available).
1075 self.check_input_tty("prompt", b"quux")
1076
1077 def test_input_tty_non_ascii(self):
1078 # Check stdin/stdout encoding is used when invoking GNU readline
1079 self.check_input_tty("prompté", b"quux\xe9", "utf-8")
1080
1081 def test_input_tty_non_ascii_unicode_errors(self):
1082 # Check stdin/stdout error handler is used when invoking GNU readline
1083 self.check_input_tty("prompté", b"quux\xe9", "ascii")
1084
Walter Dörwald919497e2003-01-19 16:23:59 +00001085 def test_repr(self):
1086 self.assertEqual(repr(''), '\'\'')
1087 self.assertEqual(repr(0), '0')
Walter Dörwald919497e2003-01-19 16:23:59 +00001088 self.assertEqual(repr(()), '()')
1089 self.assertEqual(repr([]), '[]')
1090 self.assertEqual(repr({}), '{}')
1091 a = []
1092 a.append(a)
1093 self.assertEqual(repr(a), '[[...]]')
1094 a = {}
1095 a[0] = a
1096 self.assertEqual(repr(a), '{0: {...}}')
1097
1098 def test_round(self):
1099 self.assertEqual(round(0.0), 0.0)
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001100 self.assertEqual(type(round(0.0)), int)
Walter Dörwald919497e2003-01-19 16:23:59 +00001101 self.assertEqual(round(1.0), 1.0)
1102 self.assertEqual(round(10.0), 10.0)
1103 self.assertEqual(round(1000000000.0), 1000000000.0)
1104 self.assertEqual(round(1e20), 1e20)
1105
1106 self.assertEqual(round(-1.0), -1.0)
1107 self.assertEqual(round(-10.0), -10.0)
1108 self.assertEqual(round(-1000000000.0), -1000000000.0)
1109 self.assertEqual(round(-1e20), -1e20)
1110
1111 self.assertEqual(round(0.1), 0.0)
1112 self.assertEqual(round(1.1), 1.0)
1113 self.assertEqual(round(10.1), 10.0)
1114 self.assertEqual(round(1000000000.1), 1000000000.0)
1115
1116 self.assertEqual(round(-1.1), -1.0)
1117 self.assertEqual(round(-10.1), -10.0)
1118 self.assertEqual(round(-1000000000.1), -1000000000.0)
1119
1120 self.assertEqual(round(0.9), 1.0)
1121 self.assertEqual(round(9.9), 10.0)
1122 self.assertEqual(round(999999999.9), 1000000000.0)
1123
1124 self.assertEqual(round(-0.9), -1.0)
1125 self.assertEqual(round(-9.9), -10.0)
1126 self.assertEqual(round(-999999999.9), -1000000000.0)
1127
1128 self.assertEqual(round(-8.0, -1), -10.0)
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001129 self.assertEqual(type(round(-8.0, -1)), float)
1130
1131 self.assertEqual(type(round(-8.0, 0)), float)
1132 self.assertEqual(type(round(-8.0, 1)), float)
1133
1134 # Check even / odd rounding behaviour
1135 self.assertEqual(round(5.5), 6)
1136 self.assertEqual(round(6.5), 6)
1137 self.assertEqual(round(-5.5), -6)
1138 self.assertEqual(round(-6.5), -6)
1139
1140 # Check behavior on ints
1141 self.assertEqual(round(0), 0)
1142 self.assertEqual(round(8), 8)
1143 self.assertEqual(round(-8), -8)
1144 self.assertEqual(type(round(0)), int)
Mark Dickinson1124e712009-01-28 21:25:58 +00001145 self.assertEqual(type(round(-8, -1)), int)
1146 self.assertEqual(type(round(-8, 0)), int)
1147 self.assertEqual(type(round(-8, 1)), int)
Walter Dörwald919497e2003-01-19 16:23:59 +00001148
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001149 # test new kwargs
1150 self.assertEqual(round(number=-8.0, ndigits=-1), -10.0)
1151
Walter Dörwald919497e2003-01-19 16:23:59 +00001152 self.assertRaises(TypeError, round)
1153
Alex Martelliae211f92007-08-22 23:21:33 +00001154 # test generic rounding delegation for reals
1155 class TestRound:
1156 def __round__(self):
1157 return 23
1158
1159 class TestNoRound:
1160 pass
1161
1162 self.assertEqual(round(TestRound()), 23)
1163
1164 self.assertRaises(TypeError, round, 1, 2, 3)
1165 self.assertRaises(TypeError, round, TestNoRound())
1166
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001167 t = TestNoRound()
1168 t.__round__ = lambda *args: args
1169 self.assertRaises(TypeError, round, t)
1170 self.assertRaises(TypeError, round, t, 0)
1171
Mark Dickinsonad731b92009-11-09 17:12:30 +00001172 # Some versions of glibc for alpha have a bug that affects
1173 # float -> integer rounding (floor, ceil, rint, round) for
1174 # values in the range [2**52, 2**53). See:
1175 #
1176 # http://sources.redhat.com/bugzilla/show_bug.cgi?id=5350
1177 #
1178 # We skip this test on Linux/alpha if it would fail.
1179 linux_alpha = (platform.system().startswith('Linux') and
1180 platform.machine().startswith('alpha'))
1181 system_round_bug = round(5e15+1) != 5e15+1
1182 @unittest.skipIf(linux_alpha and system_round_bug,
1183 "test will fail; failure is probably due to a "
1184 "buggy system round function")
1185 def test_round_large(self):
1186 # Issue #1869: integral floats should remain unchanged
1187 self.assertEqual(round(5e15-1), 5e15-1)
1188 self.assertEqual(round(5e15), 5e15)
1189 self.assertEqual(round(5e15+1), 5e15+1)
1190 self.assertEqual(round(5e15+2), 5e15+2)
1191 self.assertEqual(round(5e15+3), 5e15+3)
1192
Walter Dörwald919497e2003-01-19 16:23:59 +00001193 def test_setattr(self):
Tim Petersf2715e02003-02-19 02:35:07 +00001194 setattr(sys, 'spam', 1)
1195 self.assertEqual(sys.spam, 1)
1196 self.assertRaises(TypeError, setattr, sys, 1, 'spam')
1197 self.assertRaises(TypeError, setattr)
Walter Dörwald919497e2003-01-19 16:23:59 +00001198
Walter Dörwald919497e2003-01-19 16:23:59 +00001199
Alex Martellia70b1912003-04-22 08:12:33 +00001200 def test_sum(self):
1201 self.assertEqual(sum([]), 0)
Guido van Rossum805365e2007-05-07 22:24:25 +00001202 self.assertEqual(sum(list(range(2,8))), 27)
1203 self.assertEqual(sum(iter(list(range(2,8)))), 27)
Alex Martellia70b1912003-04-22 08:12:33 +00001204 self.assertEqual(sum(Squares(10)), 285)
1205 self.assertEqual(sum(iter(Squares(10))), 285)
1206 self.assertEqual(sum([[1], [2], [3]], []), [1, 2, 3])
1207
1208 self.assertRaises(TypeError, sum)
1209 self.assertRaises(TypeError, sum, 42)
1210 self.assertRaises(TypeError, sum, ['a', 'b', 'c'])
1211 self.assertRaises(TypeError, sum, ['a', 'b', 'c'], '')
Benjamin Petersonce071ca2011-07-29 14:23:47 -05001212 self.assertRaises(TypeError, sum, [b'a', b'c'], b'')
1213 values = [bytearray(b'a'), bytearray(b'b')]
1214 self.assertRaises(TypeError, sum, values, bytearray(b''))
Alex Martellia70b1912003-04-22 08:12:33 +00001215 self.assertRaises(TypeError, sum, [[1], [2], [3]])
1216 self.assertRaises(TypeError, sum, [{2:3}])
1217 self.assertRaises(TypeError, sum, [{2:3}]*2, {2:3})
1218
1219 class BadSeq:
1220 def __getitem__(self, index):
1221 raise ValueError
1222 self.assertRaises(ValueError, sum, BadSeq())
1223
Mark Dickinson3a22b472009-10-17 21:48:16 +00001224 empty = []
1225 sum(([x] for x in range(10)), empty)
1226 self.assertEqual(empty, [])
1227
Walter Dörwald919497e2003-01-19 16:23:59 +00001228 def test_type(self):
1229 self.assertEqual(type(''), type('123'))
1230 self.assertNotEqual(type(''), type(()))
1231
Guido van Rossumfee7b932005-01-16 00:21:28 +00001232 # We don't want self in vars(), so these are static methods
1233
1234 @staticmethod
Walter Dörwald919497e2003-01-19 16:23:59 +00001235 def get_vars_f0():
1236 return vars()
Walter Dörwald919497e2003-01-19 16:23:59 +00001237
Guido van Rossumfee7b932005-01-16 00:21:28 +00001238 @staticmethod
Walter Dörwald919497e2003-01-19 16:23:59 +00001239 def get_vars_f2():
1240 BuiltinTest.get_vars_f0()
1241 a = 1
1242 b = 2
1243 return vars()
Walter Dörwald919497e2003-01-19 16:23:59 +00001244
Mark Dickinsonfb3dc942010-05-25 19:06:24 +00001245 class C_get_vars(object):
1246 def getDict(self):
1247 return {'a':2}
1248 __dict__ = property(fget=getDict)
1249
Walter Dörwald919497e2003-01-19 16:23:59 +00001250 def test_vars(self):
Raymond Hettingera690a992003-11-16 16:17:49 +00001251 self.assertEqual(set(vars()), set(dir()))
Raymond Hettingera690a992003-11-16 16:17:49 +00001252 self.assertEqual(set(vars(sys)), set(dir(sys)))
Walter Dörwald919497e2003-01-19 16:23:59 +00001253 self.assertEqual(self.get_vars_f0(), {})
1254 self.assertEqual(self.get_vars_f2(), {'a': 1, 'b': 2})
1255 self.assertRaises(TypeError, vars, 42, 42)
1256 self.assertRaises(TypeError, vars, 42)
Mark Dickinsonfb3dc942010-05-25 19:06:24 +00001257 self.assertEqual(vars(self.C_get_vars()), {'a':2})
Walter Dörwald919497e2003-01-19 16:23:59 +00001258
1259 def test_zip(self):
1260 a = (1, 2, 3)
1261 b = (4, 5, 6)
1262 t = [(1, 4), (2, 5), (3, 6)]
Guido van Rossum801f0d72006-08-24 19:48:10 +00001263 self.assertEqual(list(zip(a, b)), t)
Walter Dörwald919497e2003-01-19 16:23:59 +00001264 b = [4, 5, 6]
Guido van Rossum801f0d72006-08-24 19:48:10 +00001265 self.assertEqual(list(zip(a, b)), t)
Walter Dörwald919497e2003-01-19 16:23:59 +00001266 b = (4, 5, 6, 7)
Guido van Rossum801f0d72006-08-24 19:48:10 +00001267 self.assertEqual(list(zip(a, b)), t)
Walter Dörwald919497e2003-01-19 16:23:59 +00001268 class I:
1269 def __getitem__(self, i):
1270 if i < 0 or i > 2: raise IndexError
1271 return i + 4
Guido van Rossum801f0d72006-08-24 19:48:10 +00001272 self.assertEqual(list(zip(a, I())), t)
1273 self.assertEqual(list(zip()), [])
1274 self.assertEqual(list(zip(*[])), [])
Walter Dörwald919497e2003-01-19 16:23:59 +00001275 self.assertRaises(TypeError, zip, None)
1276 class G:
1277 pass
1278 self.assertRaises(TypeError, zip, a, G())
Alexander Belopolskye29e6bf2010-08-16 18:55:46 +00001279 self.assertRaises(RuntimeError, zip, a, TestFailingIter())
Walter Dörwald919497e2003-01-19 16:23:59 +00001280
1281 # Make sure zip doesn't try to allocate a billion elements for the
1282 # result list when one of its arguments doesn't say how long it is.
1283 # A MemoryError is the most likely failure mode.
1284 class SequenceWithoutALength:
1285 def __getitem__(self, i):
1286 if i == 5:
1287 raise IndexError
1288 else:
1289 return i
1290 self.assertEqual(
Guido van Rossum805365e2007-05-07 22:24:25 +00001291 list(zip(SequenceWithoutALength(), range(2**30))),
Walter Dörwald919497e2003-01-19 16:23:59 +00001292 list(enumerate(range(5)))
1293 )
1294
1295 class BadSeq:
1296 def __getitem__(self, i):
1297 if i == 5:
1298 raise ValueError
1299 else:
1300 return i
Guido van Rossum801f0d72006-08-24 19:48:10 +00001301 self.assertRaises(ValueError, list, zip(BadSeq(), BadSeq()))
Walter Dörwald919497e2003-01-19 16:23:59 +00001302
Eric Smithe4d63172010-09-13 20:48:43 +00001303 def test_format(self):
1304 # Test the basic machinery of the format() builtin. Don't test
1305 # the specifics of the various formatters
1306 self.assertEqual(format(3, ''), '3')
1307
1308 # Returns some classes to use for various tests. There's
1309 # an old-style version, and a new-style version
1310 def classes_new():
1311 class A(object):
1312 def __init__(self, x):
1313 self.x = x
1314 def __format__(self, format_spec):
1315 return str(self.x) + format_spec
1316 class DerivedFromA(A):
1317 pass
1318
1319 class Simple(object): pass
1320 class DerivedFromSimple(Simple):
1321 def __init__(self, x):
1322 self.x = x
1323 def __format__(self, format_spec):
1324 return str(self.x) + format_spec
1325 class DerivedFromSimple2(DerivedFromSimple): pass
1326 return A, DerivedFromA, DerivedFromSimple, DerivedFromSimple2
1327
1328 def class_test(A, DerivedFromA, DerivedFromSimple, DerivedFromSimple2):
1329 self.assertEqual(format(A(3), 'spec'), '3spec')
1330 self.assertEqual(format(DerivedFromA(4), 'spec'), '4spec')
1331 self.assertEqual(format(DerivedFromSimple(5), 'abc'), '5abc')
1332 self.assertEqual(format(DerivedFromSimple2(10), 'abcdef'),
1333 '10abcdef')
1334
1335 class_test(*classes_new())
1336
1337 def empty_format_spec(value):
1338 # test that:
1339 # format(x, '') == str(x)
1340 # format(x) == str(x)
1341 self.assertEqual(format(value, ""), str(value))
1342 self.assertEqual(format(value), str(value))
1343
1344 # for builtin types, format(x, "") == str(x)
1345 empty_format_spec(17**13)
1346 empty_format_spec(1.0)
1347 empty_format_spec(3.1415e104)
1348 empty_format_spec(-3.1415e104)
1349 empty_format_spec(3.1415e-104)
1350 empty_format_spec(-3.1415e-104)
1351 empty_format_spec(object)
1352 empty_format_spec(None)
1353
1354 # TypeError because self.__format__ returns the wrong type
1355 class BadFormatResult:
1356 def __format__(self, format_spec):
1357 return 1.0
1358 self.assertRaises(TypeError, format, BadFormatResult(), "")
1359
1360 # TypeError because format_spec is not unicode or str
1361 self.assertRaises(TypeError, format, object(), 4)
1362 self.assertRaises(TypeError, format, object(), object())
1363
1364 # tests for object.__format__ really belong elsewhere, but
1365 # there's no good place to put them
1366 x = object().__format__('')
1367 self.assertTrue(x.startswith('<object object at'))
1368
1369 # first argument to object.__format__ must be string
1370 self.assertRaises(TypeError, object().__format__, 3)
1371 self.assertRaises(TypeError, object().__format__, object())
1372 self.assertRaises(TypeError, object().__format__, None)
1373
1374 # --------------------------------------------------------------------
1375 # Issue #7994: object.__format__ with a non-empty format string is
Eric V. Smithb9cd3532011-03-12 10:08:48 -05001376 # deprecated
Eric Smithe4d63172010-09-13 20:48:43 +00001377 def test_deprecated_format_string(obj, fmt_str, should_raise_warning):
1378 with warnings.catch_warnings(record=True) as w:
Eric V. Smithb9cd3532011-03-12 10:08:48 -05001379 warnings.simplefilter("always", DeprecationWarning)
Eric Smithe4d63172010-09-13 20:48:43 +00001380 format(obj, fmt_str)
1381 if should_raise_warning:
1382 self.assertEqual(len(w), 1)
Eric V. Smithb9cd3532011-03-12 10:08:48 -05001383 self.assertIsInstance(w[0].message, DeprecationWarning)
Eric Smithe4d63172010-09-13 20:48:43 +00001384 self.assertIn('object.__format__ with a non-empty format '
1385 'string', str(w[0].message))
1386 else:
1387 self.assertEqual(len(w), 0)
1388
1389 fmt_strs = ['', 's']
1390
1391 class A:
1392 def __format__(self, fmt_str):
1393 return format('', fmt_str)
1394
1395 for fmt_str in fmt_strs:
1396 test_deprecated_format_string(A(), fmt_str, False)
1397
1398 class B:
1399 pass
1400
1401 class C(object):
1402 pass
1403
1404 for cls in [object, B, C]:
1405 for fmt_str in fmt_strs:
1406 test_deprecated_format_string(cls(), fmt_str, len(fmt_str) != 0)
1407 # --------------------------------------------------------------------
1408
1409 # make sure we can take a subclass of str as a format spec
1410 class DerivedFromStr(str): pass
1411 self.assertEqual(format(0, DerivedFromStr('10')), ' 0')
1412
Christian Heimes90c3d9b2008-02-23 13:18:03 +00001413 def test_bin(self):
1414 self.assertEqual(bin(0), '0b0')
1415 self.assertEqual(bin(1), '0b1')
1416 self.assertEqual(bin(-1), '-0b1')
1417 self.assertEqual(bin(2**65), '0b1' + '0' * 65)
1418 self.assertEqual(bin(2**65-1), '0b' + '1' * 65)
1419 self.assertEqual(bin(-(2**65)), '-0b1' + '0' * 65)
1420 self.assertEqual(bin(-(2**65-1)), '-0b' + '1' * 65)
1421
Georg Brandl953152f2009-07-22 12:03:59 +00001422 def test_bytearray_translate(self):
1423 x = bytearray(b"abc")
1424 self.assertRaises(ValueError, x.translate, b"1", 1)
1425 self.assertRaises(TypeError, x.translate, b"1"*256, 1)
1426
Benjamin Petersonc4607ae2011-07-29 18:19:43 -05001427 def test_construct_singletons(self):
Benjamin Peterson18d7d7a2011-07-29 18:27:44 -05001428 for const in None, Ellipsis, NotImplemented:
Benjamin Petersonc4607ae2011-07-29 18:19:43 -05001429 tp = type(const)
1430 self.assertIs(tp(), const)
1431 self.assertRaises(TypeError, tp, 1, 2)
1432 self.assertRaises(TypeError, tp, a=1, b=2)
1433
Raymond Hettinger64958a12003-12-17 20:43:33 +00001434class TestSorted(unittest.TestCase):
1435
1436 def test_basic(self):
Guido van Rossum805365e2007-05-07 22:24:25 +00001437 data = list(range(100))
Raymond Hettinger64958a12003-12-17 20:43:33 +00001438 copy = data[:]
1439 random.shuffle(copy)
1440 self.assertEqual(data, sorted(copy))
1441 self.assertNotEqual(data, copy)
1442
1443 data.reverse()
1444 random.shuffle(copy)
Raymond Hettinger64958a12003-12-17 20:43:33 +00001445 self.assertEqual(data, sorted(copy, key=lambda x: -x))
1446 self.assertNotEqual(data, copy)
1447 random.shuffle(copy)
1448 self.assertEqual(data, sorted(copy, reverse=1))
1449 self.assertNotEqual(data, copy)
1450
1451 def test_inputtypes(self):
1452 s = 'abracadabra'
Walter Dörwald1f5947b2007-05-22 16:52:54 +00001453 types = [list, tuple, str]
Walter Dörwald4e41a4b2005-08-03 17:09:04 +00001454 for T in types:
Raymond Hettinger64958a12003-12-17 20:43:33 +00001455 self.assertEqual(sorted(s), sorted(T(s)))
1456
Walter Dörwald1f5947b2007-05-22 16:52:54 +00001457 s = ''.join(set(s)) # unique letters only
1458 types = [str, set, frozenset, list, tuple, dict.fromkeys]
Walter Dörwald4e41a4b2005-08-03 17:09:04 +00001459 for T in types:
Raymond Hettinger64958a12003-12-17 20:43:33 +00001460 self.assertEqual(sorted(s), sorted(T(s)))
1461
1462 def test_baddecorator(self):
1463 data = 'The quick Brown fox Jumped over The lazy Dog'.split()
1464 self.assertRaises(TypeError, sorted, data, None, lambda x,y: 0)
1465
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001466def test_main(verbose=None):
1467 test_classes = (BuiltinTest, TestSorted)
1468
1469 run_unittest(*test_classes)
1470
1471 # verify reference counting
1472 if verbose and hasattr(sys, "gettotalrefcount"):
1473 import gc
1474 counts = [None] * 5
Guido van Rossum805365e2007-05-07 22:24:25 +00001475 for i in range(len(counts)):
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001476 run_unittest(*test_classes)
1477 gc.collect()
1478 counts[i] = sys.gettotalrefcount()
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001479 print(counts)
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001480
Walter Dörwald919497e2003-01-19 16:23:59 +00001481
1482if __name__ == "__main__":
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001483 test_main(verbose=True)