blob: 55fb63ae3f5b344cea031a86fb3b1786049e28fa [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 Pitrou413d4972011-11-06 02:51:25 +010014import traceback
Brett Cannon77628992010-03-20 20:59:33 +000015from test.support import fcmp, 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 Pitrou413d4972011-11-06 02:51:25 +010018 import pty, signal
Antoine Pitrou0d776b12011-11-06 00:34:26 +010019except ImportError:
Antoine Pitrou413d4972011-11-06 02:51:25 +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),
258 str(('\\U%08x' % (sys.maxunicode)).encode("ascii"),
259 'unicode-escape'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000260 self.assertRaises(TypeError, chr)
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000261 self.assertEqual(chr(0x0000FFFF), "\U0000FFFF")
262 self.assertEqual(chr(0x00010000), "\U00010000")
263 self.assertEqual(chr(0x00010001), "\U00010001")
264 self.assertEqual(chr(0x000FFFFE), "\U000FFFFE")
265 self.assertEqual(chr(0x000FFFFF), "\U000FFFFF")
266 self.assertEqual(chr(0x00100000), "\U00100000")
267 self.assertEqual(chr(0x00100001), "\U00100001")
268 self.assertEqual(chr(0x0010FFFE), "\U0010FFFE")
269 self.assertEqual(chr(0x0010FFFF), "\U0010FFFF")
270 self.assertRaises(ValueError, chr, -1)
271 self.assertRaises(ValueError, chr, 0x00110000)
Amaury Forgeot d'Arc7888d082008-08-01 01:06:32 +0000272 self.assertRaises((OverflowError, ValueError), chr, 2**32)
Walter Dörwald919497e2003-01-19 16:23:59 +0000273
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000274 def test_cmp(self):
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000275 self.assertTrue(not hasattr(builtins, "cmp"))
Walter Dörwald919497e2003-01-19 16:23:59 +0000276
Walter Dörwald919497e2003-01-19 16:23:59 +0000277 def test_compile(self):
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000278 compile('print(1)\n', '', 'exec')
Amaury Forgeot d'Arcaf593462007-11-22 20:53:01 +0000279 bom = b'\xef\xbb\xbf'
280 compile(bom + b'print(1)\n', '', 'exec')
Guido van Rossumd8faa362007-04-27 19:54:29 +0000281 compile(source='pass', filename='?', mode='exec')
282 compile(dont_inherit=0, filename='tmp', source='0', mode='eval')
283 compile('pass', '?', dont_inherit=1, mode='exec')
Benjamin Peterson60320cb2008-09-26 21:49:22 +0000284 compile(memoryview(b"text"), "name", "exec")
Walter Dörwald919497e2003-01-19 16:23:59 +0000285 self.assertRaises(TypeError, compile)
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000286 self.assertRaises(ValueError, compile, 'print(42)\n', '<string>', 'badmode')
287 self.assertRaises(ValueError, compile, 'print(42)\n', '<string>', 'single', 0xff)
Neal Norwitzfcf44352005-11-27 20:37:43 +0000288 self.assertRaises(TypeError, compile, chr(0), 'f', 'exec')
Guido van Rossumd8faa362007-04-27 19:54:29 +0000289 self.assertRaises(TypeError, compile, 'pass', '?', 'exec',
290 mode='eval', source='0', filename='tmp')
Walter Dörwald1f5947b2007-05-22 16:52:54 +0000291 compile('print("\xe5")\n', '', 'exec')
292 self.assertRaises(TypeError, compile, chr(0), 'f', 'exec')
293 self.assertRaises(ValueError, compile, str('a = 1'), 'f', 'bad')
Guido van Rossumd8faa362007-04-27 19:54:29 +0000294
Georg Brandl8334fd92010-12-04 10:26:46 +0000295 # test the optimize argument
296
297 codestr = '''def f():
298 """doc"""
299 try:
300 assert False
301 except AssertionError:
302 return (True, f.__doc__)
303 else:
304 return (False, f.__doc__)
305 '''
306 def f(): """doc"""
307 values = [(-1, __debug__, f.__doc__),
308 (0, True, 'doc'),
309 (1, False, 'doc'),
310 (2, False, None)]
311 for optval, debugval, docstring in values:
312 # test both direct compilation and compilation via AST
313 codeobjs = []
314 codeobjs.append(compile(codestr, "<test>", "exec", optimize=optval))
315 tree = ast.parse(codestr)
316 codeobjs.append(compile(tree, "<test>", "exec", optimize=optval))
317 for code in codeobjs:
318 ns = {}
319 exec(code, ns)
320 rv = ns['f']()
321 self.assertEqual(rv, (debugval, docstring))
322
Walter Dörwald919497e2003-01-19 16:23:59 +0000323 def test_delattr(self):
Walter Dörwald919497e2003-01-19 16:23:59 +0000324 sys.spam = 1
325 delattr(sys, 'spam')
326 self.assertRaises(TypeError, delattr)
327
328 def test_dir(self):
Georg Brandle32b4222007-03-10 22:13:27 +0000329 # dir(wrong number of arguments)
Walter Dörwald919497e2003-01-19 16:23:59 +0000330 self.assertRaises(TypeError, dir, 42, 42)
331
Georg Brandle32b4222007-03-10 22:13:27 +0000332 # dir() - local scope
333 local_var = 1
Benjamin Peterson577473f2010-01-19 00:09:57 +0000334 self.assertIn('local_var', dir())
Georg Brandle32b4222007-03-10 22:13:27 +0000335
336 # dir(module)
Benjamin Peterson577473f2010-01-19 00:09:57 +0000337 self.assertIn('exit', dir(sys))
Georg Brandle32b4222007-03-10 22:13:27 +0000338
339 # dir(module_with_invalid__dict__)
Georg Brandle32b4222007-03-10 22:13:27 +0000340 class Foo(types.ModuleType):
341 __dict__ = 8
342 f = Foo("foo")
343 self.assertRaises(TypeError, dir, f)
344
345 # dir(type)
Benjamin Peterson577473f2010-01-19 00:09:57 +0000346 self.assertIn("strip", dir(str))
347 self.assertNotIn("__mro__", dir(str))
Georg Brandle32b4222007-03-10 22:13:27 +0000348
349 # dir(obj)
350 class Foo(object):
351 def __init__(self):
352 self.x = 7
353 self.y = 8
354 self.z = 9
355 f = Foo()
Benjamin Peterson577473f2010-01-19 00:09:57 +0000356 self.assertIn("y", dir(f))
Georg Brandle32b4222007-03-10 22:13:27 +0000357
358 # dir(obj_no__dict__)
359 class Foo(object):
360 __slots__ = []
361 f = Foo()
Benjamin Peterson577473f2010-01-19 00:09:57 +0000362 self.assertIn("__repr__", dir(f))
Georg Brandle32b4222007-03-10 22:13:27 +0000363
364 # dir(obj_no__class__with__dict__)
365 # (an ugly trick to cause getattr(f, "__class__") to fail)
366 class Foo(object):
367 __slots__ = ["__class__", "__dict__"]
368 def __init__(self):
369 self.bar = "wow"
370 f = Foo()
Benjamin Peterson577473f2010-01-19 00:09:57 +0000371 self.assertNotIn("__repr__", dir(f))
372 self.assertIn("bar", dir(f))
Georg Brandle32b4222007-03-10 22:13:27 +0000373
374 # dir(obj_using __dir__)
375 class Foo(object):
376 def __dir__(self):
377 return ["kan", "ga", "roo"]
378 f = Foo()
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000379 self.assertTrue(dir(f) == ["ga", "kan", "roo"])
Georg Brandle32b4222007-03-10 22:13:27 +0000380
381 # dir(obj__dir__not_list)
382 class Foo(object):
383 def __dir__(self):
384 return 7
385 f = Foo()
386 self.assertRaises(TypeError, dir, f)
387
Collin Winter3eed7652007-08-14 17:53:54 +0000388 # dir(traceback)
389 try:
390 raise IndexError
391 except:
392 self.assertEqual(len(dir(sys.exc_info()[2])), 4)
393
394
Walter Dörwald919497e2003-01-19 16:23:59 +0000395 def test_divmod(self):
396 self.assertEqual(divmod(12, 7), (1, 5))
397 self.assertEqual(divmod(-12, 7), (-2, 2))
398 self.assertEqual(divmod(12, -7), (-2, -2))
399 self.assertEqual(divmod(-12, -7), (1, -5))
400
Mark Dickinson5c2db372009-12-05 20:28:34 +0000401 self.assertEqual(divmod(-sys.maxsize-1, -1), (sys.maxsize+1, 0))
Raymond Hettinger5ea7e312004-09-30 07:47:20 +0000402
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000403 self.assertTrue(not fcmp(divmod(3.25, 1.0), (3.0, 0.25)))
404 self.assertTrue(not fcmp(divmod(-3.25, 1.0), (-4.0, 0.75)))
405 self.assertTrue(not fcmp(divmod(3.25, -1.0), (-4.0, -0.75)))
406 self.assertTrue(not fcmp(divmod(-3.25, -1.0), (3.0, -0.25)))
Walter Dörwald919497e2003-01-19 16:23:59 +0000407
408 self.assertRaises(TypeError, divmod)
409
410 def test_eval(self):
411 self.assertEqual(eval('1+1'), 2)
412 self.assertEqual(eval(' 1+1\n'), 2)
413 globals = {'a': 1, 'b': 2}
414 locals = {'b': 200, 'c': 300}
415 self.assertEqual(eval('a', globals) , 1)
416 self.assertEqual(eval('a', globals, locals), 1)
417 self.assertEqual(eval('b', globals, locals), 200)
418 self.assertEqual(eval('c', globals, locals), 300)
Walter Dörwald919497e2003-01-19 16:23:59 +0000419 globals = {'a': 1, 'b': 2}
420 locals = {'b': 200, 'c': 300}
Amaury Forgeot d'Arcaf593462007-11-22 20:53:01 +0000421 bom = b'\xef\xbb\xbf'
422 self.assertEqual(eval(bom + b'a', globals, locals), 1)
Walter Dörwald1f5947b2007-05-22 16:52:54 +0000423 self.assertEqual(eval('"\xe5"', globals), "\xe5")
Walter Dörwald919497e2003-01-19 16:23:59 +0000424 self.assertRaises(TypeError, eval)
425 self.assertRaises(TypeError, eval, ())
Amaury Forgeot d'Arcaf593462007-11-22 20:53:01 +0000426 self.assertRaises(SyntaxError, eval, bom[:2] + b'a')
Walter Dörwald919497e2003-01-19 16:23:59 +0000427
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000428 def test_general_eval(self):
429 # Tests that general mappings can be used for the locals argument
430
431 class M:
432 "Test mapping interface versus possible calls from eval()."
433 def __getitem__(self, key):
434 if key == 'a':
435 return 12
436 raise KeyError
Guido van Rossumcd70eee2007-02-11 18:53:00 +0000437 def keys(self):
438 return list('xyz')
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000439
440 m = M()
441 g = globals()
442 self.assertEqual(eval('a', g, m), 12)
443 self.assertRaises(NameError, eval, 'b', g, m)
444 self.assertEqual(eval('dir()', g, m), list('xyz'))
445 self.assertEqual(eval('globals()', g, m), g)
446 self.assertEqual(eval('locals()', g, m), m)
Raymond Hettinger513ffe82004-07-06 13:44:41 +0000447 self.assertRaises(TypeError, eval, 'a', m)
Raymond Hettinger66bd2332004-08-02 08:30:07 +0000448 class A:
449 "Non-mapping"
450 pass
451 m = A()
452 self.assertRaises(TypeError, eval, 'a', g, m)
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000453
454 # Verify that dict subclasses work as well
455 class D(dict):
456 def __getitem__(self, key):
457 if key == 'a':
458 return 12
459 return dict.__getitem__(self, key)
Guido van Rossumcd70eee2007-02-11 18:53:00 +0000460 def keys(self):
461 return list('xyz')
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000462
463 d = D()
464 self.assertEqual(eval('a', g, d), 12)
465 self.assertRaises(NameError, eval, 'b', g, d)
466 self.assertEqual(eval('dir()', g, d), list('xyz'))
467 self.assertEqual(eval('globals()', g, d), g)
468 self.assertEqual(eval('locals()', g, d), d)
469
470 # Verify locals stores (used by list comps)
471 eval('[locals() for i in (2,3)]', g, d)
Raymond Hettingerf80680d2008-02-06 00:07:11 +0000472 eval('[locals() for i in (2,3)]', g, collections.UserDict())
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000473
474 class SpreadSheet:
475 "Sample application showing nested, calculated lookups."
476 _cells = {}
477 def __setitem__(self, key, formula):
478 self._cells[key] = formula
Thomas Wouters73e5a5b2006-06-08 15:35:45 +0000479 def __getitem__(self, key):
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000480 return eval(self._cells[key], globals(), self)
481
482 ss = SpreadSheet()
483 ss['a1'] = '5'
484 ss['a2'] = 'a1*6'
485 ss['a3'] = 'a2*7'
486 self.assertEqual(ss['a3'], 210)
487
Raymond Hettinger2a7dede2004-08-07 04:55:30 +0000488 # Verify that dir() catches a non-list returned by eval
489 # SF bug #1004669
490 class C:
491 def __getitem__(self, item):
492 raise KeyError(item)
Guido van Rossumcd70eee2007-02-11 18:53:00 +0000493 def keys(self):
494 return 1 # used to be 'a' but that's no longer an error
Raymond Hettinger2a7dede2004-08-07 04:55:30 +0000495 self.assertRaises(TypeError, eval, 'dir()', globals(), C())
496
Georg Brandl7cae87c2006-09-06 06:51:57 +0000497 def test_exec(self):
498 g = {}
499 exec('z = 1', g)
500 if '__builtins__' in g:
501 del g['__builtins__']
502 self.assertEqual(g, {'z': 1})
503
Guido van Rossumef87d6e2007-05-02 19:09:54 +0000504 exec('z = 1+1', g)
Georg Brandl7cae87c2006-09-06 06:51:57 +0000505 if '__builtins__' in g:
506 del g['__builtins__']
507 self.assertEqual(g, {'z': 2})
508 g = {}
509 l = {}
510
Brett Cannon77628992010-03-20 20:59:33 +0000511 with check_warnings():
512 warnings.filterwarnings("ignore", "global statement",
513 module="<string>")
514 exec('global a; a = 1; b = 2', g, l)
Georg Brandl7cae87c2006-09-06 06:51:57 +0000515 if '__builtins__' in g:
516 del g['__builtins__']
517 if '__builtins__' in l:
518 del l['__builtins__']
519 self.assertEqual((g, l), ({'a': 1}, {'b': 2}))
520
Amaury Forgeot d'Arc9ed77352008-04-04 23:25:27 +0000521 def test_exec_redirected(self):
522 savestdout = sys.stdout
523 sys.stdout = None # Whatever that cannot flush()
524 try:
525 # Used to raise SystemError('error return without exception set')
526 exec('a')
527 except NameError:
528 pass
529 finally:
530 sys.stdout = savestdout
531
Walter Dörwald919497e2003-01-19 16:23:59 +0000532 def test_filter(self):
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000533 self.assertEqual(list(filter(lambda c: 'a' <= c <= 'z', 'Hello World')), list('elloorld'))
534 self.assertEqual(list(filter(None, [1, 'hello', [], [3], '', None, 9, 0])), [1, 'hello', [3], 9])
535 self.assertEqual(list(filter(lambda x: x > 0, [1, -3, 9, 0, 2])), [1, 9, 2])
536 self.assertEqual(list(filter(None, Squares(10))), [1, 4, 9, 16, 25, 36, 49, 64, 81])
537 self.assertEqual(list(filter(lambda x: x%2, Squares(10))), [1, 9, 25, 49, 81])
Walter Dörwald919497e2003-01-19 16:23:59 +0000538 def identity(item):
539 return 1
540 filter(identity, Squares(5))
541 self.assertRaises(TypeError, filter)
542 class BadSeq(object):
Tim Petersf2715e02003-02-19 02:35:07 +0000543 def __getitem__(self, index):
544 if index<4:
545 return 42
546 raise ValueError
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000547 self.assertRaises(ValueError, list, filter(lambda x: x, BadSeq()))
Walter Dörwald919497e2003-01-19 16:23:59 +0000548 def badfunc():
549 pass
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000550 self.assertRaises(TypeError, list, filter(badfunc, range(5)))
Walter Dörwald919497e2003-01-19 16:23:59 +0000551
Walter Dörwaldbf517072003-01-27 15:57:14 +0000552 # test bltinmodule.c::filtertuple()
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000553 self.assertEqual(list(filter(None, (1, 2))), [1, 2])
554 self.assertEqual(list(filter(lambda x: x>=3, (1, 2, 3, 4))), [3, 4])
555 self.assertRaises(TypeError, list, filter(42, (1, 2)))
Walter Dörwaldc3da83f2003-02-04 20:24:45 +0000556
Walter Dörwald919497e2003-01-19 16:23:59 +0000557 def test_getattr(self):
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000558 self.assertTrue(getattr(sys, 'stdout') is sys.stdout)
Walter Dörwald919497e2003-01-19 16:23:59 +0000559 self.assertRaises(TypeError, getattr, sys, 1)
560 self.assertRaises(TypeError, getattr, sys, 1, "foo")
561 self.assertRaises(TypeError, getattr)
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000562 self.assertRaises(AttributeError, getattr, sys, chr(sys.maxunicode))
Victor Stinner624dbf62010-03-12 17:17:58 +0000563 # unicode surrogates are not encodable to the default encoding (utf8)
564 self.assertRaises(AttributeError, getattr, 1, "\uDAD1\uD51E")
Walter Dörwald919497e2003-01-19 16:23:59 +0000565
566 def test_hasattr(self):
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000567 self.assertTrue(hasattr(sys, 'stdout'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000568 self.assertRaises(TypeError, hasattr, sys, 1)
569 self.assertRaises(TypeError, hasattr)
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000570 self.assertEqual(False, hasattr(sys, chr(sys.maxunicode)))
Walter Dörwald919497e2003-01-19 16:23:59 +0000571
Benjamin Peterson17689992010-08-24 03:26:23 +0000572 # Check that hasattr propagates all exceptions outside of
573 # AttributeError.
Alexandre Vassalottieca20b62008-05-16 02:54:33 +0000574 class A:
575 def __getattr__(self, what):
Benjamin Peterson17689992010-08-24 03:26:23 +0000576 raise SystemExit
577 self.assertRaises(SystemExit, hasattr, A(), "b")
Alexandre Vassalottieca20b62008-05-16 02:54:33 +0000578 class B:
579 def __getattr__(self, what):
Benjamin Peterson17689992010-08-24 03:26:23 +0000580 raise ValueError
581 self.assertRaises(ValueError, hasattr, B(), "b")
Alexandre Vassalottieca20b62008-05-16 02:54:33 +0000582
Walter Dörwald919497e2003-01-19 16:23:59 +0000583 def test_hash(self):
584 hash(None)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000585 self.assertEqual(hash(1), hash(1))
Walter Dörwald919497e2003-01-19 16:23:59 +0000586 self.assertEqual(hash(1), hash(1.0))
587 hash('spam')
Guido van Rossum98297ee2007-11-06 21:34:58 +0000588 self.assertEqual(hash('spam'), hash(b'spam'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000589 hash((0,1,2,3))
590 def f(): pass
591 self.assertRaises(TypeError, hash, [])
592 self.assertRaises(TypeError, hash, {})
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000593 # Bug 1536021: Allow hash to return long objects
594 class X:
595 def __hash__(self):
596 return 2**100
Ezio Melottib3aedd42010-11-20 19:04:17 +0000597 self.assertEqual(type(hash(X())), int)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000598 class Z(int):
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000599 def __hash__(self):
600 return self
Ezio Melottib3aedd42010-11-20 19:04:17 +0000601 self.assertEqual(hash(Z(42)), hash(42))
Walter Dörwald919497e2003-01-19 16:23:59 +0000602
603 def test_hex(self):
604 self.assertEqual(hex(16), '0x10')
Guido van Rossume2a383d2007-01-15 16:59:06 +0000605 self.assertEqual(hex(-16), '-0x10')
Walter Dörwald919497e2003-01-19 16:23:59 +0000606 self.assertRaises(TypeError, hex, {})
607
608 def test_id(self):
609 id(None)
610 id(1)
Walter Dörwald919497e2003-01-19 16:23:59 +0000611 id(1.0)
612 id('spam')
613 id((0,1,2,3))
614 id([0,1,2,3])
615 id({'spam': 1, 'eggs': 2, 'ham': 3})
616
Guido van Rossuma88a0332007-02-26 16:59:55 +0000617 # Test input() later, alphabetized as if it were raw_input
618
Walter Dörwald919497e2003-01-19 16:23:59 +0000619 def test_iter(self):
620 self.assertRaises(TypeError, iter)
621 self.assertRaises(TypeError, iter, 42, 42)
622 lists = [("1", "2"), ["1", "2"], "12"]
Walter Dörwald919497e2003-01-19 16:23:59 +0000623 for l in lists:
624 i = iter(l)
Georg Brandla18af4e2007-04-21 15:47:16 +0000625 self.assertEqual(next(i), '1')
626 self.assertEqual(next(i), '2')
627 self.assertRaises(StopIteration, next, i)
Walter Dörwald919497e2003-01-19 16:23:59 +0000628
629 def test_isinstance(self):
630 class C:
631 pass
632 class D(C):
633 pass
634 class E:
635 pass
636 c = C()
637 d = D()
638 e = E()
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000639 self.assertTrue(isinstance(c, C))
640 self.assertTrue(isinstance(d, C))
641 self.assertTrue(not isinstance(e, C))
642 self.assertTrue(not isinstance(c, D))
643 self.assertTrue(not isinstance('foo', E))
Walter Dörwald919497e2003-01-19 16:23:59 +0000644 self.assertRaises(TypeError, isinstance, E, 'foo')
645 self.assertRaises(TypeError, isinstance)
646
647 def test_issubclass(self):
648 class C:
649 pass
650 class D(C):
651 pass
652 class E:
653 pass
654 c = C()
655 d = D()
656 e = E()
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000657 self.assertTrue(issubclass(D, C))
658 self.assertTrue(issubclass(C, C))
659 self.assertTrue(not issubclass(C, D))
Walter Dörwald919497e2003-01-19 16:23:59 +0000660 self.assertRaises(TypeError, issubclass, 'foo', E)
661 self.assertRaises(TypeError, issubclass, E, 'foo')
662 self.assertRaises(TypeError, issubclass)
663
664 def test_len(self):
665 self.assertEqual(len('123'), 3)
666 self.assertEqual(len(()), 0)
667 self.assertEqual(len((1, 2, 3, 4)), 4)
668 self.assertEqual(len([1, 2, 3, 4]), 4)
669 self.assertEqual(len({}), 0)
670 self.assertEqual(len({'a':1, 'b': 2}), 2)
671 class BadSeq:
672 def __len__(self):
673 raise ValueError
674 self.assertRaises(ValueError, len, BadSeq())
Benjamin Petersonee1ae7c2009-02-08 21:07:20 +0000675 class InvalidLen:
676 def __len__(self):
677 return None
678 self.assertRaises(TypeError, len, InvalidLen())
679 class FloatLen:
680 def __len__(self):
681 return 4.5
682 self.assertRaises(TypeError, len, FloatLen())
683 class HugeLen:
684 def __len__(self):
685 return sys.maxsize + 1
686 self.assertRaises(OverflowError, len, HugeLen())
Mark Dickinsonfb3dc942010-05-25 19:06:24 +0000687 class NoLenMethod(object): pass
688 self.assertRaises(TypeError, len, NoLenMethod())
Walter Dörwald919497e2003-01-19 16:23:59 +0000689
Walter Dörwald919497e2003-01-19 16:23:59 +0000690 def test_map(self):
691 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000692 list(map(lambda x: x*x, range(1,4))),
Walter Dörwald919497e2003-01-19 16:23:59 +0000693 [1, 4, 9]
694 )
695 try:
696 from math import sqrt
697 except ImportError:
698 def sqrt(x):
699 return pow(x, 0.5)
700 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000701 list(map(lambda x: list(map(sqrt, x)), [[16, 4], [81, 9]])),
Walter Dörwald919497e2003-01-19 16:23:59 +0000702 [[4.0, 2.0], [9.0, 3.0]]
703 )
704 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000705 list(map(lambda x, y: x+y, [1,3,2], [9,1,4])),
Walter Dörwald919497e2003-01-19 16:23:59 +0000706 [10, 4, 6]
707 )
708
709 def plus(*v):
710 accu = 0
711 for i in v: accu = accu + i
712 return accu
713 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000714 list(map(plus, [1, 3, 7])),
Walter Dörwald919497e2003-01-19 16:23:59 +0000715 [1, 3, 7]
716 )
717 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000718 list(map(plus, [1, 3, 7], [4, 9, 2])),
Walter Dörwald919497e2003-01-19 16:23:59 +0000719 [1+4, 3+9, 7+2]
720 )
721 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000722 list(map(plus, [1, 3, 7], [4, 9, 2], [1, 1, 0])),
Walter Dörwald919497e2003-01-19 16:23:59 +0000723 [1+4+1, 3+9+1, 7+2+0]
724 )
725 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000726 list(map(int, Squares(10))),
Walter Dörwald919497e2003-01-19 16:23:59 +0000727 [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
728 )
Guido van Rossum47b9ff62006-08-24 00:41:19 +0000729 def Max(a, b):
730 if a is None:
731 return b
732 if b is None:
733 return a
734 return max(a, b)
Walter Dörwald919497e2003-01-19 16:23:59 +0000735 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000736 list(map(Max, Squares(3), Squares(2))),
737 [0, 1]
Walter Dörwald919497e2003-01-19 16:23:59 +0000738 )
739 self.assertRaises(TypeError, map)
740 self.assertRaises(TypeError, map, lambda x: x, 42)
Walter Dörwald919497e2003-01-19 16:23:59 +0000741 class BadSeq:
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000742 def __iter__(self):
Walter Dörwald919497e2003-01-19 16:23:59 +0000743 raise ValueError
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000744 yield None
745 self.assertRaises(ValueError, list, map(lambda x: x, BadSeq()))
Neal Norwitzfcf44352005-11-27 20:37:43 +0000746 def badfunc(x):
747 raise RuntimeError
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000748 self.assertRaises(RuntimeError, list, map(badfunc, range(5)))
Walter Dörwald919497e2003-01-19 16:23:59 +0000749
750 def test_max(self):
751 self.assertEqual(max('123123'), '3')
752 self.assertEqual(max(1, 2, 3), 3)
753 self.assertEqual(max((1, 2, 3, 1, 2, 3)), 3)
754 self.assertEqual(max([1, 2, 3, 1, 2, 3]), 3)
755
Guido van Rossume2a383d2007-01-15 16:59:06 +0000756 self.assertEqual(max(1, 2, 3.0), 3.0)
757 self.assertEqual(max(1, 2.0, 3), 3)
758 self.assertEqual(max(1.0, 2, 3), 3)
Walter Dörwald919497e2003-01-19 16:23:59 +0000759
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +0000760 for stmt in (
761 "max(key=int)", # no args
762 "max(1, key=int)", # single arg not iterable
763 "max(1, 2, keystone=int)", # wrong keyword
764 "max(1, 2, key=int, abc=int)", # two many keywords
765 "max(1, 2, key=1)", # keyfunc is not callable
766 ):
Tim Peters7f061872004-12-07 21:17:46 +0000767 try:
Georg Brandl7cae87c2006-09-06 06:51:57 +0000768 exec(stmt, globals())
Tim Peters7f061872004-12-07 21:17:46 +0000769 except TypeError:
770 pass
771 else:
772 self.fail(stmt)
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +0000773
774 self.assertEqual(max((1,), key=neg), 1) # one elem iterable
775 self.assertEqual(max((1,2), key=neg), 1) # two elem iterable
776 self.assertEqual(max(1, 2, key=neg), 1) # two elems
777
778 data = [random.randrange(200) for i in range(100)]
779 keys = dict((elem, random.randrange(50)) for elem in data)
780 f = keys.__getitem__
781 self.assertEqual(max(data, key=f),
782 sorted(reversed(data), key=f)[-1])
783
Walter Dörwald919497e2003-01-19 16:23:59 +0000784 def test_min(self):
785 self.assertEqual(min('123123'), '1')
786 self.assertEqual(min(1, 2, 3), 1)
787 self.assertEqual(min((1, 2, 3, 1, 2, 3)), 1)
788 self.assertEqual(min([1, 2, 3, 1, 2, 3]), 1)
789
Guido van Rossume2a383d2007-01-15 16:59:06 +0000790 self.assertEqual(min(1, 2, 3.0), 1)
791 self.assertEqual(min(1, 2.0, 3), 1)
792 self.assertEqual(min(1.0, 2, 3), 1.0)
Walter Dörwald919497e2003-01-19 16:23:59 +0000793
794 self.assertRaises(TypeError, min)
795 self.assertRaises(TypeError, min, 42)
796 self.assertRaises(ValueError, min, ())
797 class BadSeq:
798 def __getitem__(self, index):
799 raise ValueError
800 self.assertRaises(ValueError, min, BadSeq())
Walter Dörwald919497e2003-01-19 16:23:59 +0000801
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +0000802 for stmt in (
803 "min(key=int)", # no args
804 "min(1, key=int)", # single arg not iterable
805 "min(1, 2, keystone=int)", # wrong keyword
806 "min(1, 2, key=int, abc=int)", # two many keywords
807 "min(1, 2, key=1)", # keyfunc is not callable
808 ):
Tim Peters7f061872004-12-07 21:17:46 +0000809 try:
Georg Brandl7cae87c2006-09-06 06:51:57 +0000810 exec(stmt, globals())
Tim Peters7f061872004-12-07 21:17:46 +0000811 except TypeError:
812 pass
813 else:
814 self.fail(stmt)
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +0000815
816 self.assertEqual(min((1,), key=neg), 1) # one elem iterable
817 self.assertEqual(min((1,2), key=neg), 2) # two elem iterable
818 self.assertEqual(min(1, 2, key=neg), 2) # two elems
819
820 data = [random.randrange(200) for i in range(100)]
821 keys = dict((elem, random.randrange(50)) for elem in data)
822 f = keys.__getitem__
823 self.assertEqual(min(data, key=f),
824 sorted(data, key=f)[0])
825
Georg Brandla18af4e2007-04-21 15:47:16 +0000826 def test_next(self):
827 it = iter(range(2))
828 self.assertEqual(next(it), 0)
829 self.assertEqual(next(it), 1)
830 self.assertRaises(StopIteration, next, it)
831 self.assertRaises(StopIteration, next, it)
Ezio Melottib3aedd42010-11-20 19:04:17 +0000832 self.assertEqual(next(it, 42), 42)
Georg Brandla18af4e2007-04-21 15:47:16 +0000833
834 class Iter(object):
835 def __iter__(self):
836 return self
837 def __next__(self):
838 raise StopIteration
839
840 it = iter(Iter())
Ezio Melottib3aedd42010-11-20 19:04:17 +0000841 self.assertEqual(next(it, 42), 42)
Georg Brandla18af4e2007-04-21 15:47:16 +0000842 self.assertRaises(StopIteration, next, it)
843
844 def gen():
845 yield 1
846 return
847
848 it = gen()
Ezio Melottib3aedd42010-11-20 19:04:17 +0000849 self.assertEqual(next(it), 1)
Georg Brandla18af4e2007-04-21 15:47:16 +0000850 self.assertRaises(StopIteration, next, it)
Ezio Melottib3aedd42010-11-20 19:04:17 +0000851 self.assertEqual(next(it, 42), 42)
Georg Brandla18af4e2007-04-21 15:47:16 +0000852
Walter Dörwald919497e2003-01-19 16:23:59 +0000853 def test_oct(self):
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000854 self.assertEqual(oct(100), '0o144')
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000855 self.assertEqual(oct(-100), '-0o144')
Walter Dörwald919497e2003-01-19 16:23:59 +0000856 self.assertRaises(TypeError, oct, ())
857
858 def write_testfile(self):
Guido van Rossuma88a0332007-02-26 16:59:55 +0000859 # NB the first 4 lines are also used to test input, below
Walter Dörwald919497e2003-01-19 16:23:59 +0000860 fp = open(TESTFN, 'w')
861 try:
862 fp.write('1+1\n')
Walter Dörwald919497e2003-01-19 16:23:59 +0000863 fp.write('The quick brown fox jumps over the lazy dog')
864 fp.write('.\n')
865 fp.write('Dear John\n')
866 fp.write('XXX'*100)
867 fp.write('YYY'*100)
868 finally:
869 fp.close()
870
871 def test_open(self):
872 self.write_testfile()
873 fp = open(TESTFN, 'r')
874 try:
875 self.assertEqual(fp.readline(4), '1+1\n')
Walter Dörwald919497e2003-01-19 16:23:59 +0000876 self.assertEqual(fp.readline(), 'The quick brown fox jumps over the lazy dog.\n')
877 self.assertEqual(fp.readline(4), 'Dear')
878 self.assertEqual(fp.readline(100), ' John\n')
879 self.assertEqual(fp.read(300), 'XXX'*100)
880 self.assertEqual(fp.read(1000), 'YYY'*100)
881 finally:
882 fp.close()
883 unlink(TESTFN)
884
885 def test_ord(self):
886 self.assertEqual(ord(' '), 32)
887 self.assertEqual(ord('A'), 65)
888 self.assertEqual(ord('a'), 97)
Guido van Rossumf9e91c92007-05-08 21:05:48 +0000889 self.assertEqual(ord('\x80'), 128)
890 self.assertEqual(ord('\xff'), 255)
891
892 self.assertEqual(ord(b' '), 32)
893 self.assertEqual(ord(b'A'), 65)
894 self.assertEqual(ord(b'a'), 97)
895 self.assertEqual(ord(b'\x80'), 128)
896 self.assertEqual(ord(b'\xff'), 255)
897
Walter Dörwald1f5947b2007-05-22 16:52:54 +0000898 self.assertEqual(ord(chr(sys.maxunicode)), sys.maxunicode)
Walter Dörwald919497e2003-01-19 16:23:59 +0000899 self.assertRaises(TypeError, ord, 42)
Walter Dörwald919497e2003-01-19 16:23:59 +0000900
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000901 self.assertEqual(ord(chr(0x10FFFF)), 0x10FFFF)
902 self.assertEqual(ord("\U0000FFFF"), 0x0000FFFF)
903 self.assertEqual(ord("\U00010000"), 0x00010000)
904 self.assertEqual(ord("\U00010001"), 0x00010001)
905 self.assertEqual(ord("\U000FFFFE"), 0x000FFFFE)
906 self.assertEqual(ord("\U000FFFFF"), 0x000FFFFF)
907 self.assertEqual(ord("\U00100000"), 0x00100000)
908 self.assertEqual(ord("\U00100001"), 0x00100001)
909 self.assertEqual(ord("\U0010FFFE"), 0x0010FFFE)
910 self.assertEqual(ord("\U0010FFFF"), 0x0010FFFF)
911
Walter Dörwald919497e2003-01-19 16:23:59 +0000912 def test_pow(self):
913 self.assertEqual(pow(0,0), 1)
914 self.assertEqual(pow(0,1), 0)
915 self.assertEqual(pow(1,0), 1)
916 self.assertEqual(pow(1,1), 1)
917
918 self.assertEqual(pow(2,0), 1)
919 self.assertEqual(pow(2,10), 1024)
920 self.assertEqual(pow(2,20), 1024*1024)
921 self.assertEqual(pow(2,30), 1024*1024*1024)
922
923 self.assertEqual(pow(-2,0), 1)
924 self.assertEqual(pow(-2,1), -2)
925 self.assertEqual(pow(-2,2), 4)
926 self.assertEqual(pow(-2,3), -8)
927
Walter Dörwald919497e2003-01-19 16:23:59 +0000928 self.assertAlmostEqual(pow(0.,0), 1.)
929 self.assertAlmostEqual(pow(0.,1), 0.)
930 self.assertAlmostEqual(pow(1.,0), 1.)
931 self.assertAlmostEqual(pow(1.,1), 1.)
932
933 self.assertAlmostEqual(pow(2.,0), 1.)
934 self.assertAlmostEqual(pow(2.,10), 1024.)
935 self.assertAlmostEqual(pow(2.,20), 1024.*1024.)
936 self.assertAlmostEqual(pow(2.,30), 1024.*1024.*1024.)
937
938 self.assertAlmostEqual(pow(-2.,0), 1.)
939 self.assertAlmostEqual(pow(-2.,1), -2.)
940 self.assertAlmostEqual(pow(-2.,2), 4.)
941 self.assertAlmostEqual(pow(-2.,3), -8.)
942
Mark Dickinson5c2db372009-12-05 20:28:34 +0000943 for x in 2, 2.0:
944 for y in 10, 10.0:
945 for z in 1000, 1000.0:
Walter Dörwald919497e2003-01-19 16:23:59 +0000946 if isinstance(x, float) or \
947 isinstance(y, float) or \
948 isinstance(z, float):
949 self.assertRaises(TypeError, pow, x, y, z)
950 else:
951 self.assertAlmostEqual(pow(x, y, z), 24.0)
952
Jeffrey Yasskin3404b3c2007-09-07 15:15:49 +0000953 self.assertAlmostEqual(pow(-1, 0.5), 1j)
954 self.assertAlmostEqual(pow(-1, 1/3), 0.5 + 0.8660254037844386j)
955
Walter Dörwald919497e2003-01-19 16:23:59 +0000956 self.assertRaises(TypeError, pow, -1, -2, 3)
957 self.assertRaises(ValueError, pow, 1, 2, 0)
Walter Dörwald919497e2003-01-19 16:23:59 +0000958
959 self.assertRaises(TypeError, pow)
960
Guido van Rossuma88a0332007-02-26 16:59:55 +0000961 def test_input(self):
962 self.write_testfile()
963 fp = open(TESTFN, 'r')
964 savestdin = sys.stdin
965 savestdout = sys.stdout # Eats the echo
966 try:
967 sys.stdin = fp
968 sys.stdout = BitBucket()
969 self.assertEqual(input(), "1+1")
Guido van Rossuma88a0332007-02-26 16:59:55 +0000970 self.assertEqual(input(), 'The quick brown fox jumps over the lazy dog.')
971 self.assertEqual(input('testing\n'), 'Dear John')
972
973 # SF 1535165: don't segfault on closed stdin
974 # sys.stdout must be a regular file for triggering
975 sys.stdout = savestdout
976 sys.stdin.close()
977 self.assertRaises(ValueError, input)
978
979 sys.stdout = BitBucket()
Guido van Rossum34d19282007-08-09 01:03:29 +0000980 sys.stdin = io.StringIO("NULL\0")
Guido van Rossuma88a0332007-02-26 16:59:55 +0000981 self.assertRaises(TypeError, input, 42, 42)
Guido van Rossum34d19282007-08-09 01:03:29 +0000982 sys.stdin = io.StringIO(" 'whitespace'")
Guido van Rossuma88a0332007-02-26 16:59:55 +0000983 self.assertEqual(input(), " 'whitespace'")
Guido van Rossum34d19282007-08-09 01:03:29 +0000984 sys.stdin = io.StringIO()
Guido van Rossuma88a0332007-02-26 16:59:55 +0000985 self.assertRaises(EOFError, input)
986
987 del sys.stdout
988 self.assertRaises(RuntimeError, input, 'prompt')
989 del sys.stdin
990 self.assertRaises(RuntimeError, input, 'prompt')
991 finally:
992 sys.stdin = savestdin
993 sys.stdout = savestdout
994 fp.close()
995 unlink(TESTFN)
996
Antoine Pitrou413d4972011-11-06 02:51:25 +0100997 @unittest.skipUnless(pty, "the pty and signal modules must be available")
Antoine Pitrou0d776b12011-11-06 00:34:26 +0100998 def check_input_tty(self, prompt, terminal_input, stdio_encoding=None):
Antoine Pitrou1ce4b142011-11-06 03:03:18 +0100999 if not sys.stdin.isatty() or not sys.stdout.isatty():
1000 self.skipTest("stdin and stdout must be ttys")
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001001 r, w = os.pipe()
1002 try:
1003 pid, fd = pty.fork()
1004 except (OSError, AttributeError) as e:
1005 os.close(r)
1006 os.close(w)
1007 self.skipTest("pty.fork() raised {}".format(e))
1008 if pid == 0:
1009 # Child
Antoine Pitrou413d4972011-11-06 02:51:25 +01001010 try:
1011 # Make sure we don't get stuck if there's a problem
1012 signal.alarm(2)
1013 os.close(r)
1014 # Check the error handlers are accounted for
1015 if stdio_encoding:
1016 sys.stdin = io.TextIOWrapper(sys.stdin.detach(),
1017 encoding=stdio_encoding,
1018 errors='surrogateescape')
1019 sys.stdout = io.TextIOWrapper(sys.stdout.detach(),
1020 encoding=stdio_encoding,
1021 errors='replace')
1022 with open(w, "w") as wpipe:
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001023 print("tty =", sys.stdin.isatty() and sys.stdout.isatty(), file=wpipe)
1024 print(ascii(input(prompt)), file=wpipe)
Antoine Pitrou413d4972011-11-06 02:51:25 +01001025 except:
1026 traceback.print_exc()
1027 finally:
1028 # We don't want to return to unittest...
1029 os._exit(0)
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001030 # Parent
1031 os.close(w)
1032 os.write(fd, terminal_input + b"\r\n")
1033 # Get results from the pipe
1034 with open(r, "r") as rpipe:
1035 lines = []
1036 while True:
1037 line = rpipe.readline().strip()
Antoine Pitrou413d4972011-11-06 02:51:25 +01001038 if line == "":
1039 # The other end was closed => the child exited
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001040 break
1041 lines.append(line)
Antoine Pitrou413d4972011-11-06 02:51:25 +01001042 # Check the result was got and corresponds to the user's terminal input
1043 if len(lines) != 2:
1044 # Something went wrong, try to get at stderr
1045 with open(fd, "r", encoding="ascii", errors="ignore") as child_output:
1046 self.fail("got %d lines in pipe but expected 2, child output was:\n%s"
1047 % (len(lines), child_output.read()))
1048 os.close(fd)
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001049 # Check we did exercise the GNU readline path
1050 self.assertIn(lines[0], {'tty = True', 'tty = False'})
1051 if lines[0] != 'tty = True':
1052 self.skipTest("standard IO in should have been a tty")
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001053 input_result = eval(lines[1]) # ascii() -> eval() roundtrip
1054 if stdio_encoding:
1055 expected = terminal_input.decode(stdio_encoding, 'surrogateescape')
1056 else:
1057 expected = terminal_input.decode(sys.stdin.encoding) # what else?
1058 self.assertEqual(input_result, expected)
1059
1060 def test_input_tty(self):
1061 # Test input() functionality when wired to a tty (the code path
1062 # is different and invokes GNU readline if available).
1063 self.check_input_tty("prompt", b"quux")
1064
1065 def test_input_tty_non_ascii(self):
1066 # Check stdin/stdout encoding is used when invoking GNU readline
1067 self.check_input_tty("prompté", b"quux\xe9", "utf-8")
1068
1069 def test_input_tty_non_ascii_unicode_errors(self):
1070 # Check stdin/stdout error handler is used when invoking GNU readline
1071 self.check_input_tty("prompté", b"quux\xe9", "ascii")
1072
Walter Dörwald919497e2003-01-19 16:23:59 +00001073 def test_repr(self):
1074 self.assertEqual(repr(''), '\'\'')
1075 self.assertEqual(repr(0), '0')
Walter Dörwald919497e2003-01-19 16:23:59 +00001076 self.assertEqual(repr(()), '()')
1077 self.assertEqual(repr([]), '[]')
1078 self.assertEqual(repr({}), '{}')
1079 a = []
1080 a.append(a)
1081 self.assertEqual(repr(a), '[[...]]')
1082 a = {}
1083 a[0] = a
1084 self.assertEqual(repr(a), '{0: {...}}')
1085
1086 def test_round(self):
1087 self.assertEqual(round(0.0), 0.0)
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001088 self.assertEqual(type(round(0.0)), int)
Walter Dörwald919497e2003-01-19 16:23:59 +00001089 self.assertEqual(round(1.0), 1.0)
1090 self.assertEqual(round(10.0), 10.0)
1091 self.assertEqual(round(1000000000.0), 1000000000.0)
1092 self.assertEqual(round(1e20), 1e20)
1093
1094 self.assertEqual(round(-1.0), -1.0)
1095 self.assertEqual(round(-10.0), -10.0)
1096 self.assertEqual(round(-1000000000.0), -1000000000.0)
1097 self.assertEqual(round(-1e20), -1e20)
1098
1099 self.assertEqual(round(0.1), 0.0)
1100 self.assertEqual(round(1.1), 1.0)
1101 self.assertEqual(round(10.1), 10.0)
1102 self.assertEqual(round(1000000000.1), 1000000000.0)
1103
1104 self.assertEqual(round(-1.1), -1.0)
1105 self.assertEqual(round(-10.1), -10.0)
1106 self.assertEqual(round(-1000000000.1), -1000000000.0)
1107
1108 self.assertEqual(round(0.9), 1.0)
1109 self.assertEqual(round(9.9), 10.0)
1110 self.assertEqual(round(999999999.9), 1000000000.0)
1111
1112 self.assertEqual(round(-0.9), -1.0)
1113 self.assertEqual(round(-9.9), -10.0)
1114 self.assertEqual(round(-999999999.9), -1000000000.0)
1115
1116 self.assertEqual(round(-8.0, -1), -10.0)
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001117 self.assertEqual(type(round(-8.0, -1)), float)
1118
1119 self.assertEqual(type(round(-8.0, 0)), float)
1120 self.assertEqual(type(round(-8.0, 1)), float)
1121
1122 # Check even / odd rounding behaviour
1123 self.assertEqual(round(5.5), 6)
1124 self.assertEqual(round(6.5), 6)
1125 self.assertEqual(round(-5.5), -6)
1126 self.assertEqual(round(-6.5), -6)
1127
1128 # Check behavior on ints
1129 self.assertEqual(round(0), 0)
1130 self.assertEqual(round(8), 8)
1131 self.assertEqual(round(-8), -8)
1132 self.assertEqual(type(round(0)), int)
Mark Dickinson1124e712009-01-28 21:25:58 +00001133 self.assertEqual(type(round(-8, -1)), int)
1134 self.assertEqual(type(round(-8, 0)), int)
1135 self.assertEqual(type(round(-8, 1)), int)
Walter Dörwald919497e2003-01-19 16:23:59 +00001136
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001137 # test new kwargs
1138 self.assertEqual(round(number=-8.0, ndigits=-1), -10.0)
1139
Walter Dörwald919497e2003-01-19 16:23:59 +00001140 self.assertRaises(TypeError, round)
1141
Alex Martelliae211f92007-08-22 23:21:33 +00001142 # test generic rounding delegation for reals
1143 class TestRound:
1144 def __round__(self):
1145 return 23
1146
1147 class TestNoRound:
1148 pass
1149
1150 self.assertEqual(round(TestRound()), 23)
1151
1152 self.assertRaises(TypeError, round, 1, 2, 3)
1153 self.assertRaises(TypeError, round, TestNoRound())
1154
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001155 t = TestNoRound()
1156 t.__round__ = lambda *args: args
1157 self.assertRaises(TypeError, round, t)
1158 self.assertRaises(TypeError, round, t, 0)
1159
Mark Dickinsonad731b92009-11-09 17:12:30 +00001160 # Some versions of glibc for alpha have a bug that affects
1161 # float -> integer rounding (floor, ceil, rint, round) for
1162 # values in the range [2**52, 2**53). See:
1163 #
1164 # http://sources.redhat.com/bugzilla/show_bug.cgi?id=5350
1165 #
1166 # We skip this test on Linux/alpha if it would fail.
1167 linux_alpha = (platform.system().startswith('Linux') and
1168 platform.machine().startswith('alpha'))
1169 system_round_bug = round(5e15+1) != 5e15+1
1170 @unittest.skipIf(linux_alpha and system_round_bug,
1171 "test will fail; failure is probably due to a "
1172 "buggy system round function")
1173 def test_round_large(self):
1174 # Issue #1869: integral floats should remain unchanged
1175 self.assertEqual(round(5e15-1), 5e15-1)
1176 self.assertEqual(round(5e15), 5e15)
1177 self.assertEqual(round(5e15+1), 5e15+1)
1178 self.assertEqual(round(5e15+2), 5e15+2)
1179 self.assertEqual(round(5e15+3), 5e15+3)
1180
Walter Dörwald919497e2003-01-19 16:23:59 +00001181 def test_setattr(self):
Tim Petersf2715e02003-02-19 02:35:07 +00001182 setattr(sys, 'spam', 1)
1183 self.assertEqual(sys.spam, 1)
1184 self.assertRaises(TypeError, setattr, sys, 1, 'spam')
1185 self.assertRaises(TypeError, setattr)
Walter Dörwald919497e2003-01-19 16:23:59 +00001186
Walter Dörwald919497e2003-01-19 16:23:59 +00001187
Alex Martellia70b1912003-04-22 08:12:33 +00001188 def test_sum(self):
1189 self.assertEqual(sum([]), 0)
Guido van Rossum805365e2007-05-07 22:24:25 +00001190 self.assertEqual(sum(list(range(2,8))), 27)
1191 self.assertEqual(sum(iter(list(range(2,8)))), 27)
Alex Martellia70b1912003-04-22 08:12:33 +00001192 self.assertEqual(sum(Squares(10)), 285)
1193 self.assertEqual(sum(iter(Squares(10))), 285)
1194 self.assertEqual(sum([[1], [2], [3]], []), [1, 2, 3])
1195
1196 self.assertRaises(TypeError, sum)
1197 self.assertRaises(TypeError, sum, 42)
1198 self.assertRaises(TypeError, sum, ['a', 'b', 'c'])
1199 self.assertRaises(TypeError, sum, ['a', 'b', 'c'], '')
1200 self.assertRaises(TypeError, sum, [[1], [2], [3]])
1201 self.assertRaises(TypeError, sum, [{2:3}])
1202 self.assertRaises(TypeError, sum, [{2:3}]*2, {2:3})
1203
1204 class BadSeq:
1205 def __getitem__(self, index):
1206 raise ValueError
1207 self.assertRaises(ValueError, sum, BadSeq())
1208
Mark Dickinson3a22b472009-10-17 21:48:16 +00001209 empty = []
1210 sum(([x] for x in range(10)), empty)
1211 self.assertEqual(empty, [])
1212
Walter Dörwald919497e2003-01-19 16:23:59 +00001213 def test_type(self):
1214 self.assertEqual(type(''), type('123'))
1215 self.assertNotEqual(type(''), type(()))
1216
Guido van Rossumfee7b932005-01-16 00:21:28 +00001217 # We don't want self in vars(), so these are static methods
1218
1219 @staticmethod
Walter Dörwald919497e2003-01-19 16:23:59 +00001220 def get_vars_f0():
1221 return vars()
Walter Dörwald919497e2003-01-19 16:23:59 +00001222
Guido van Rossumfee7b932005-01-16 00:21:28 +00001223 @staticmethod
Walter Dörwald919497e2003-01-19 16:23:59 +00001224 def get_vars_f2():
1225 BuiltinTest.get_vars_f0()
1226 a = 1
1227 b = 2
1228 return vars()
Walter Dörwald919497e2003-01-19 16:23:59 +00001229
Mark Dickinsonfb3dc942010-05-25 19:06:24 +00001230 class C_get_vars(object):
1231 def getDict(self):
1232 return {'a':2}
1233 __dict__ = property(fget=getDict)
1234
Walter Dörwald919497e2003-01-19 16:23:59 +00001235 def test_vars(self):
Raymond Hettingera690a992003-11-16 16:17:49 +00001236 self.assertEqual(set(vars()), set(dir()))
Raymond Hettingera690a992003-11-16 16:17:49 +00001237 self.assertEqual(set(vars(sys)), set(dir(sys)))
Walter Dörwald919497e2003-01-19 16:23:59 +00001238 self.assertEqual(self.get_vars_f0(), {})
1239 self.assertEqual(self.get_vars_f2(), {'a': 1, 'b': 2})
1240 self.assertRaises(TypeError, vars, 42, 42)
1241 self.assertRaises(TypeError, vars, 42)
Mark Dickinsonfb3dc942010-05-25 19:06:24 +00001242 self.assertEqual(vars(self.C_get_vars()), {'a':2})
Walter Dörwald919497e2003-01-19 16:23:59 +00001243
1244 def test_zip(self):
1245 a = (1, 2, 3)
1246 b = (4, 5, 6)
1247 t = [(1, 4), (2, 5), (3, 6)]
Guido van Rossum801f0d72006-08-24 19:48:10 +00001248 self.assertEqual(list(zip(a, b)), t)
Walter Dörwald919497e2003-01-19 16:23:59 +00001249 b = [4, 5, 6]
Guido van Rossum801f0d72006-08-24 19:48:10 +00001250 self.assertEqual(list(zip(a, b)), t)
Walter Dörwald919497e2003-01-19 16:23:59 +00001251 b = (4, 5, 6, 7)
Guido van Rossum801f0d72006-08-24 19:48:10 +00001252 self.assertEqual(list(zip(a, b)), t)
Walter Dörwald919497e2003-01-19 16:23:59 +00001253 class I:
1254 def __getitem__(self, i):
1255 if i < 0 or i > 2: raise IndexError
1256 return i + 4
Guido van Rossum801f0d72006-08-24 19:48:10 +00001257 self.assertEqual(list(zip(a, I())), t)
1258 self.assertEqual(list(zip()), [])
1259 self.assertEqual(list(zip(*[])), [])
Walter Dörwald919497e2003-01-19 16:23:59 +00001260 self.assertRaises(TypeError, zip, None)
1261 class G:
1262 pass
1263 self.assertRaises(TypeError, zip, a, G())
Alexander Belopolskye29e6bf2010-08-16 18:55:46 +00001264 self.assertRaises(RuntimeError, zip, a, TestFailingIter())
Walter Dörwald919497e2003-01-19 16:23:59 +00001265
1266 # Make sure zip doesn't try to allocate a billion elements for the
1267 # result list when one of its arguments doesn't say how long it is.
1268 # A MemoryError is the most likely failure mode.
1269 class SequenceWithoutALength:
1270 def __getitem__(self, i):
1271 if i == 5:
1272 raise IndexError
1273 else:
1274 return i
1275 self.assertEqual(
Guido van Rossum805365e2007-05-07 22:24:25 +00001276 list(zip(SequenceWithoutALength(), range(2**30))),
Walter Dörwald919497e2003-01-19 16:23:59 +00001277 list(enumerate(range(5)))
1278 )
1279
1280 class BadSeq:
1281 def __getitem__(self, i):
1282 if i == 5:
1283 raise ValueError
1284 else:
1285 return i
Guido van Rossum801f0d72006-08-24 19:48:10 +00001286 self.assertRaises(ValueError, list, zip(BadSeq(), BadSeq()))
Walter Dörwald919497e2003-01-19 16:23:59 +00001287
Eric Smithe4d63172010-09-13 20:48:43 +00001288 def test_format(self):
1289 # Test the basic machinery of the format() builtin. Don't test
1290 # the specifics of the various formatters
1291 self.assertEqual(format(3, ''), '3')
1292
1293 # Returns some classes to use for various tests. There's
1294 # an old-style version, and a new-style version
1295 def classes_new():
1296 class A(object):
1297 def __init__(self, x):
1298 self.x = x
1299 def __format__(self, format_spec):
1300 return str(self.x) + format_spec
1301 class DerivedFromA(A):
1302 pass
1303
1304 class Simple(object): pass
1305 class DerivedFromSimple(Simple):
1306 def __init__(self, x):
1307 self.x = x
1308 def __format__(self, format_spec):
1309 return str(self.x) + format_spec
1310 class DerivedFromSimple2(DerivedFromSimple): pass
1311 return A, DerivedFromA, DerivedFromSimple, DerivedFromSimple2
1312
1313 def class_test(A, DerivedFromA, DerivedFromSimple, DerivedFromSimple2):
1314 self.assertEqual(format(A(3), 'spec'), '3spec')
1315 self.assertEqual(format(DerivedFromA(4), 'spec'), '4spec')
1316 self.assertEqual(format(DerivedFromSimple(5), 'abc'), '5abc')
1317 self.assertEqual(format(DerivedFromSimple2(10), 'abcdef'),
1318 '10abcdef')
1319
1320 class_test(*classes_new())
1321
1322 def empty_format_spec(value):
1323 # test that:
1324 # format(x, '') == str(x)
1325 # format(x) == str(x)
1326 self.assertEqual(format(value, ""), str(value))
1327 self.assertEqual(format(value), str(value))
1328
1329 # for builtin types, format(x, "") == str(x)
1330 empty_format_spec(17**13)
1331 empty_format_spec(1.0)
1332 empty_format_spec(3.1415e104)
1333 empty_format_spec(-3.1415e104)
1334 empty_format_spec(3.1415e-104)
1335 empty_format_spec(-3.1415e-104)
1336 empty_format_spec(object)
1337 empty_format_spec(None)
1338
1339 # TypeError because self.__format__ returns the wrong type
1340 class BadFormatResult:
1341 def __format__(self, format_spec):
1342 return 1.0
1343 self.assertRaises(TypeError, format, BadFormatResult(), "")
1344
1345 # TypeError because format_spec is not unicode or str
1346 self.assertRaises(TypeError, format, object(), 4)
1347 self.assertRaises(TypeError, format, object(), object())
1348
1349 # tests for object.__format__ really belong elsewhere, but
1350 # there's no good place to put them
1351 x = object().__format__('')
1352 self.assertTrue(x.startswith('<object object at'))
1353
1354 # first argument to object.__format__ must be string
1355 self.assertRaises(TypeError, object().__format__, 3)
1356 self.assertRaises(TypeError, object().__format__, object())
1357 self.assertRaises(TypeError, object().__format__, None)
1358
1359 # --------------------------------------------------------------------
1360 # Issue #7994: object.__format__ with a non-empty format string is
1361 # pending deprecated
1362 def test_deprecated_format_string(obj, fmt_str, should_raise_warning):
1363 with warnings.catch_warnings(record=True) as w:
1364 warnings.simplefilter("always", PendingDeprecationWarning)
1365 format(obj, fmt_str)
1366 if should_raise_warning:
1367 self.assertEqual(len(w), 1)
1368 self.assertIsInstance(w[0].message, PendingDeprecationWarning)
1369 self.assertIn('object.__format__ with a non-empty format '
1370 'string', str(w[0].message))
1371 else:
1372 self.assertEqual(len(w), 0)
1373
1374 fmt_strs = ['', 's']
1375
1376 class A:
1377 def __format__(self, fmt_str):
1378 return format('', fmt_str)
1379
1380 for fmt_str in fmt_strs:
1381 test_deprecated_format_string(A(), fmt_str, False)
1382
1383 class B:
1384 pass
1385
1386 class C(object):
1387 pass
1388
1389 for cls in [object, B, C]:
1390 for fmt_str in fmt_strs:
1391 test_deprecated_format_string(cls(), fmt_str, len(fmt_str) != 0)
1392 # --------------------------------------------------------------------
1393
1394 # make sure we can take a subclass of str as a format spec
1395 class DerivedFromStr(str): pass
1396 self.assertEqual(format(0, DerivedFromStr('10')), ' 0')
1397
Christian Heimes90c3d9b2008-02-23 13:18:03 +00001398 def test_bin(self):
1399 self.assertEqual(bin(0), '0b0')
1400 self.assertEqual(bin(1), '0b1')
1401 self.assertEqual(bin(-1), '-0b1')
1402 self.assertEqual(bin(2**65), '0b1' + '0' * 65)
1403 self.assertEqual(bin(2**65-1), '0b' + '1' * 65)
1404 self.assertEqual(bin(-(2**65)), '-0b1' + '0' * 65)
1405 self.assertEqual(bin(-(2**65-1)), '-0b' + '1' * 65)
1406
Georg Brandl953152f2009-07-22 12:03:59 +00001407 def test_bytearray_translate(self):
1408 x = bytearray(b"abc")
1409 self.assertRaises(ValueError, x.translate, b"1", 1)
1410 self.assertRaises(TypeError, x.translate, b"1"*256, 1)
1411
Raymond Hettinger64958a12003-12-17 20:43:33 +00001412class TestSorted(unittest.TestCase):
1413
1414 def test_basic(self):
Guido van Rossum805365e2007-05-07 22:24:25 +00001415 data = list(range(100))
Raymond Hettinger64958a12003-12-17 20:43:33 +00001416 copy = data[:]
1417 random.shuffle(copy)
1418 self.assertEqual(data, sorted(copy))
1419 self.assertNotEqual(data, copy)
1420
1421 data.reverse()
1422 random.shuffle(copy)
Raymond Hettinger64958a12003-12-17 20:43:33 +00001423 self.assertEqual(data, sorted(copy, key=lambda x: -x))
1424 self.assertNotEqual(data, copy)
1425 random.shuffle(copy)
1426 self.assertEqual(data, sorted(copy, reverse=1))
1427 self.assertNotEqual(data, copy)
1428
1429 def test_inputtypes(self):
1430 s = 'abracadabra'
Walter Dörwald1f5947b2007-05-22 16:52:54 +00001431 types = [list, tuple, str]
Walter Dörwald4e41a4b2005-08-03 17:09:04 +00001432 for T in types:
Raymond Hettinger64958a12003-12-17 20:43:33 +00001433 self.assertEqual(sorted(s), sorted(T(s)))
1434
Walter Dörwald1f5947b2007-05-22 16:52:54 +00001435 s = ''.join(set(s)) # unique letters only
1436 types = [str, set, frozenset, list, tuple, dict.fromkeys]
Walter Dörwald4e41a4b2005-08-03 17:09:04 +00001437 for T in types:
Raymond Hettinger64958a12003-12-17 20:43:33 +00001438 self.assertEqual(sorted(s), sorted(T(s)))
1439
1440 def test_baddecorator(self):
1441 data = 'The quick Brown fox Jumped over The lazy Dog'.split()
1442 self.assertRaises(TypeError, sorted, data, None, lambda x,y: 0)
1443
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001444def test_main(verbose=None):
1445 test_classes = (BuiltinTest, TestSorted)
1446
1447 run_unittest(*test_classes)
1448
1449 # verify reference counting
1450 if verbose and hasattr(sys, "gettotalrefcount"):
1451 import gc
1452 counts = [None] * 5
Guido van Rossum805365e2007-05-07 22:24:25 +00001453 for i in range(len(counts)):
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001454 run_unittest(*test_classes)
1455 gc.collect()
1456 counts[i] = sys.gettotalrefcount()
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001457 print(counts)
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001458
Walter Dörwald919497e2003-01-19 16:23:59 +00001459
1460if __name__ == "__main__":
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001461 test_main(verbose=True)