blob: 40c1ab4fd050d2d30369c1938c2e00279563e5c2 [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
Brett Cannon77628992010-03-20 20:59:33 +000014from test.support import fcmp, TESTFN, unlink, run_unittest, check_warnings
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +000015from operator import neg
Antoine Pitrou0d776b12011-11-06 00:34:26 +010016try:
17 import pty
18except ImportError:
19 pty = None
Guido van Rossum3bead091992-01-27 17:00:37 +000020
Guido van Rossum3bead091992-01-27 17:00:37 +000021
Walter Dörwald919497e2003-01-19 16:23:59 +000022class Squares:
Guido van Rossum3bead091992-01-27 17:00:37 +000023
Walter Dörwald919497e2003-01-19 16:23:59 +000024 def __init__(self, max):
25 self.max = max
26 self.sofar = []
27
28 def __len__(self): return len(self.sofar)
29
30 def __getitem__(self, i):
31 if not 0 <= i < self.max: raise IndexError
32 n = len(self.sofar)
33 while n <= i:
34 self.sofar.append(n*n)
35 n += 1
36 return self.sofar[i]
37
38class StrSquares:
39
40 def __init__(self, max):
41 self.max = max
42 self.sofar = []
43
44 def __len__(self):
45 return len(self.sofar)
46
47 def __getitem__(self, i):
48 if not 0 <= i < self.max:
49 raise IndexError
50 n = len(self.sofar)
51 while n <= i:
52 self.sofar.append(str(n*n))
53 n += 1
54 return self.sofar[i]
55
56class BitBucket:
57 def write(self, line):
58 pass
59
Facundo Batista2336bdd2008-01-19 19:12:01 +000060test_conv_no_sign = [
Walter Dörwald919497e2003-01-19 16:23:59 +000061 ('0', 0),
62 ('1', 1),
63 ('9', 9),
64 ('10', 10),
65 ('99', 99),
66 ('100', 100),
67 ('314', 314),
68 (' 314', 314),
69 ('314 ', 314),
70 (' \t\t 314 \t\t ', 314),
Christian Heimesa37d4c62007-12-04 23:02:19 +000071 (repr(sys.maxsize), sys.maxsize),
Walter Dörwald919497e2003-01-19 16:23:59 +000072 (' 1x', ValueError),
73 (' 1 ', 1),
74 (' 1\02 ', ValueError),
75 ('', ValueError),
76 (' ', ValueError),
Walter Dörwald1f5947b2007-05-22 16:52:54 +000077 (' \t\t ', ValueError),
Guido van Rossumef87d6e2007-05-02 19:09:54 +000078 (str(b'\u0663\u0661\u0664 ','raw-unicode-escape'), 314),
Guido van Rossum84fc66d2007-05-03 17:18:26 +000079 (chr(0x200), ValueError),
Walter Dörwald919497e2003-01-19 16:23:59 +000080]
81
Facundo Batista2336bdd2008-01-19 19:12:01 +000082test_conv_sign = [
83 ('0', 0),
84 ('1', 1),
85 ('9', 9),
86 ('10', 10),
87 ('99', 99),
88 ('100', 100),
89 ('314', 314),
90 (' 314', ValueError),
91 ('314 ', 314),
92 (' \t\t 314 \t\t ', ValueError),
93 (repr(sys.maxsize), sys.maxsize),
94 (' 1x', ValueError),
95 (' 1 ', ValueError),
96 (' 1\02 ', ValueError),
97 ('', ValueError),
98 (' ', ValueError),
99 (' \t\t ', ValueError),
100 (str(b'\u0663\u0661\u0664 ','raw-unicode-escape'), 314),
101 (chr(0x200), ValueError),
102]
103
Raymond Hettinger96229b12005-03-11 06:49:40 +0000104class TestFailingBool:
Jack Diederich4dafcc42006-11-28 19:15:13 +0000105 def __bool__(self):
Raymond Hettinger96229b12005-03-11 06:49:40 +0000106 raise RuntimeError
107
108class TestFailingIter:
109 def __iter__(self):
110 raise RuntimeError
111
Walter Dörwald919497e2003-01-19 16:23:59 +0000112class BuiltinTest(unittest.TestCase):
113
114 def test_import(self):
115 __import__('sys')
116 __import__('time')
117 __import__('string')
Guido van Rossumd8faa362007-04-27 19:54:29 +0000118 __import__(name='sys')
119 __import__(name='time', level=0)
Walter Dörwald919497e2003-01-19 16:23:59 +0000120 self.assertRaises(ImportError, __import__, 'spamspam')
121 self.assertRaises(TypeError, __import__, 1, 2, 3, 4)
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000122 self.assertRaises(ValueError, __import__, '')
Guido van Rossumd8faa362007-04-27 19:54:29 +0000123 self.assertRaises(TypeError, __import__, 'sys', name='sys')
Walter Dörwald919497e2003-01-19 16:23:59 +0000124
125 def test_abs(self):
126 # int
127 self.assertEqual(abs(0), 0)
128 self.assertEqual(abs(1234), 1234)
129 self.assertEqual(abs(-1234), 1234)
Christian Heimesa37d4c62007-12-04 23:02:19 +0000130 self.assertTrue(abs(-sys.maxsize-1) > 0)
Walter Dörwald919497e2003-01-19 16:23:59 +0000131 # float
132 self.assertEqual(abs(0.0), 0.0)
133 self.assertEqual(abs(3.14), 3.14)
134 self.assertEqual(abs(-3.14), 3.14)
Walter Dörwald919497e2003-01-19 16:23:59 +0000135 # str
136 self.assertRaises(TypeError, abs, 'a')
Mark Dickinsonfb3dc942010-05-25 19:06:24 +0000137 # bool
138 self.assertEqual(abs(True), 1)
139 self.assertEqual(abs(False), 0)
140 # other
141 self.assertRaises(TypeError, abs)
142 self.assertRaises(TypeError, abs, None)
143 class AbsClass(object):
144 def __abs__(self):
145 return -5
146 self.assertEqual(abs(AbsClass()), -5)
Walter Dörwald919497e2003-01-19 16:23:59 +0000147
Raymond Hettinger96229b12005-03-11 06:49:40 +0000148 def test_all(self):
149 self.assertEqual(all([2, 4, 6]), True)
150 self.assertEqual(all([2, None, 6]), False)
151 self.assertRaises(RuntimeError, all, [2, TestFailingBool(), 6])
152 self.assertRaises(RuntimeError, all, TestFailingIter())
153 self.assertRaises(TypeError, all, 10) # Non-iterable
154 self.assertRaises(TypeError, all) # No args
155 self.assertRaises(TypeError, all, [2, 4, 6], []) # Too many args
156 self.assertEqual(all([]), True) # Empty iterator
157 S = [50, 60]
158 self.assertEqual(all(x > 42 for x in S), True)
159 S = [50, 40, 60]
160 self.assertEqual(all(x > 42 for x in S), False)
161
162 def test_any(self):
163 self.assertEqual(any([None, None, None]), False)
164 self.assertEqual(any([None, 4, None]), True)
165 self.assertRaises(RuntimeError, any, [None, TestFailingBool(), 6])
166 self.assertRaises(RuntimeError, all, TestFailingIter())
167 self.assertRaises(TypeError, any, 10) # Non-iterable
168 self.assertRaises(TypeError, any) # No args
169 self.assertRaises(TypeError, any, [2, 4, 6], []) # Too many args
170 self.assertEqual(any([]), False) # Empty iterator
171 S = [40, 60, 30]
172 self.assertEqual(any(x > 42 for x in S), True)
173 S = [10, 20, 30]
174 self.assertEqual(any(x > 42 for x in S), False)
175
Georg Brandl559e5d72008-06-11 18:37:52 +0000176 def test_ascii(self):
177 self.assertEqual(ascii(''), '\'\'')
178 self.assertEqual(ascii(0), '0')
Georg Brandl559e5d72008-06-11 18:37:52 +0000179 self.assertEqual(ascii(()), '()')
180 self.assertEqual(ascii([]), '[]')
181 self.assertEqual(ascii({}), '{}')
182 a = []
183 a.append(a)
184 self.assertEqual(ascii(a), '[[...]]')
185 a = {}
186 a[0] = a
187 self.assertEqual(ascii(a), '{0: {...}}')
Antoine Pitroue4a18922010-09-09 20:30:23 +0000188 # Advanced checks for unicode strings
189 def _check_uni(s):
190 self.assertEqual(ascii(s), repr(s))
191 _check_uni("'")
192 _check_uni('"')
193 _check_uni('"\'')
194 _check_uni('\0')
195 _check_uni('\r\n\t .')
196 # Unprintable non-ASCII characters
197 _check_uni('\x85')
198 _check_uni('\u1fff')
199 _check_uni('\U00012fff')
200 # Lone surrogates
201 _check_uni('\ud800')
202 _check_uni('\udfff')
203 # Issue #9804: surrogates should be joined even for printable
204 # wide characters (UCS-2 builds).
205 self.assertEqual(ascii('\U0001d121'), "'\\U0001d121'")
206 # All together
207 s = "'\0\"\n\r\t abcd\x85é\U00012fff\uD800\U0001D121xxx."
208 self.assertEqual(ascii(s),
209 r"""'\'\x00"\n\r\t abcd\x85\xe9\U00012fff\ud800\U0001d121xxx.'""")
Georg Brandl559e5d72008-06-11 18:37:52 +0000210
Thomas Wouters89f507f2006-12-13 04:49:30 +0000211 def test_neg(self):
Christian Heimesa37d4c62007-12-04 23:02:19 +0000212 x = -sys.maxsize-1
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000213 self.assertTrue(isinstance(x, int))
Christian Heimesa37d4c62007-12-04 23:02:19 +0000214 self.assertEqual(-x, sys.maxsize+1)
Thomas Wouters89f507f2006-12-13 04:49:30 +0000215
Walter Dörwald919497e2003-01-19 16:23:59 +0000216 def test_callable(self):
Antoine Pitroue71362d2010-11-27 22:00:11 +0000217 self.assertTrue(callable(len))
218 self.assertFalse(callable("a"))
219 self.assertTrue(callable(callable))
220 self.assertTrue(callable(lambda x, y: x + y))
221 self.assertFalse(callable(__builtins__))
Walter Dörwald919497e2003-01-19 16:23:59 +0000222 def f(): pass
Antoine Pitroue71362d2010-11-27 22:00:11 +0000223 self.assertTrue(callable(f))
224
225 class C1:
Walter Dörwald919497e2003-01-19 16:23:59 +0000226 def meth(self): pass
Antoine Pitroue71362d2010-11-27 22:00:11 +0000227 self.assertTrue(callable(C1))
228 c = C1()
229 self.assertTrue(callable(c.meth))
230 self.assertFalse(callable(c))
231
232 # __call__ is looked up on the class, not the instance
233 c.__call__ = None
234 self.assertFalse(callable(c))
235 c.__call__ = lambda self: 0
236 self.assertFalse(callable(c))
237 del c.__call__
238 self.assertFalse(callable(c))
239
240 class C2(object):
Walter Dörwald919497e2003-01-19 16:23:59 +0000241 def __call__(self): pass
Antoine Pitroue71362d2010-11-27 22:00:11 +0000242 c2 = C2()
243 self.assertTrue(callable(c2))
244 c2.__call__ = None
245 self.assertTrue(callable(c2))
246 class C3(C2): pass
247 c3 = C3()
248 self.assertTrue(callable(c3))
Walter Dörwald919497e2003-01-19 16:23:59 +0000249
250 def test_chr(self):
251 self.assertEqual(chr(32), ' ')
252 self.assertEqual(chr(65), 'A')
253 self.assertEqual(chr(97), 'a')
254 self.assertEqual(chr(0xff), '\xff')
Guido van Rossum572dbf82007-04-27 23:53:51 +0000255 self.assertRaises(ValueError, chr, 1<<24)
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000256 self.assertEqual(chr(sys.maxunicode),
257 str(('\\U%08x' % (sys.maxunicode)).encode("ascii"),
258 '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
380 # dir(obj__dir__not_list)
381 class Foo(object):
382 def __dir__(self):
383 return 7
384 f = Foo()
385 self.assertRaises(TypeError, dir, f)
386
Collin Winter3eed7652007-08-14 17:53:54 +0000387 # dir(traceback)
388 try:
389 raise IndexError
390 except:
391 self.assertEqual(len(dir(sys.exc_info()[2])), 4)
392
393
Walter Dörwald919497e2003-01-19 16:23:59 +0000394 def test_divmod(self):
395 self.assertEqual(divmod(12, 7), (1, 5))
396 self.assertEqual(divmod(-12, 7), (-2, 2))
397 self.assertEqual(divmod(12, -7), (-2, -2))
398 self.assertEqual(divmod(-12, -7), (1, -5))
399
Mark Dickinson5c2db372009-12-05 20:28:34 +0000400 self.assertEqual(divmod(-sys.maxsize-1, -1), (sys.maxsize+1, 0))
Raymond Hettinger5ea7e312004-09-30 07:47:20 +0000401
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000402 self.assertTrue(not fcmp(divmod(3.25, 1.0), (3.0, 0.25)))
403 self.assertTrue(not fcmp(divmod(-3.25, 1.0), (-4.0, 0.75)))
404 self.assertTrue(not fcmp(divmod(3.25, -1.0), (-4.0, -0.75)))
405 self.assertTrue(not fcmp(divmod(-3.25, -1.0), (3.0, -0.25)))
Walter Dörwald919497e2003-01-19 16:23:59 +0000406
407 self.assertRaises(TypeError, divmod)
408
409 def test_eval(self):
410 self.assertEqual(eval('1+1'), 2)
411 self.assertEqual(eval(' 1+1\n'), 2)
412 globals = {'a': 1, 'b': 2}
413 locals = {'b': 200, 'c': 300}
414 self.assertEqual(eval('a', globals) , 1)
415 self.assertEqual(eval('a', globals, locals), 1)
416 self.assertEqual(eval('b', globals, locals), 200)
417 self.assertEqual(eval('c', globals, locals), 300)
Walter Dörwald919497e2003-01-19 16:23:59 +0000418 globals = {'a': 1, 'b': 2}
419 locals = {'b': 200, 'c': 300}
Amaury Forgeot d'Arcaf593462007-11-22 20:53:01 +0000420 bom = b'\xef\xbb\xbf'
421 self.assertEqual(eval(bom + b'a', globals, locals), 1)
Walter Dörwald1f5947b2007-05-22 16:52:54 +0000422 self.assertEqual(eval('"\xe5"', globals), "\xe5")
Walter Dörwald919497e2003-01-19 16:23:59 +0000423 self.assertRaises(TypeError, eval)
424 self.assertRaises(TypeError, eval, ())
Amaury Forgeot d'Arcaf593462007-11-22 20:53:01 +0000425 self.assertRaises(SyntaxError, eval, bom[:2] + b'a')
Walter Dörwald919497e2003-01-19 16:23:59 +0000426
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000427 def test_general_eval(self):
428 # Tests that general mappings can be used for the locals argument
429
430 class M:
431 "Test mapping interface versus possible calls from eval()."
432 def __getitem__(self, key):
433 if key == 'a':
434 return 12
435 raise KeyError
Guido van Rossumcd70eee2007-02-11 18:53:00 +0000436 def keys(self):
437 return list('xyz')
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000438
439 m = M()
440 g = globals()
441 self.assertEqual(eval('a', g, m), 12)
442 self.assertRaises(NameError, eval, 'b', g, m)
443 self.assertEqual(eval('dir()', g, m), list('xyz'))
444 self.assertEqual(eval('globals()', g, m), g)
445 self.assertEqual(eval('locals()', g, m), m)
Raymond Hettinger513ffe82004-07-06 13:44:41 +0000446 self.assertRaises(TypeError, eval, 'a', m)
Raymond Hettinger66bd2332004-08-02 08:30:07 +0000447 class A:
448 "Non-mapping"
449 pass
450 m = A()
451 self.assertRaises(TypeError, eval, 'a', g, m)
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000452
453 # Verify that dict subclasses work as well
454 class D(dict):
455 def __getitem__(self, key):
456 if key == 'a':
457 return 12
458 return dict.__getitem__(self, key)
Guido van Rossumcd70eee2007-02-11 18:53:00 +0000459 def keys(self):
460 return list('xyz')
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000461
462 d = D()
463 self.assertEqual(eval('a', g, d), 12)
464 self.assertRaises(NameError, eval, 'b', g, d)
465 self.assertEqual(eval('dir()', g, d), list('xyz'))
466 self.assertEqual(eval('globals()', g, d), g)
467 self.assertEqual(eval('locals()', g, d), d)
468
469 # Verify locals stores (used by list comps)
470 eval('[locals() for i in (2,3)]', g, d)
Raymond Hettingerf80680d2008-02-06 00:07:11 +0000471 eval('[locals() for i in (2,3)]', g, collections.UserDict())
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000472
473 class SpreadSheet:
474 "Sample application showing nested, calculated lookups."
475 _cells = {}
476 def __setitem__(self, key, formula):
477 self._cells[key] = formula
Thomas Wouters73e5a5b2006-06-08 15:35:45 +0000478 def __getitem__(self, key):
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000479 return eval(self._cells[key], globals(), self)
480
481 ss = SpreadSheet()
482 ss['a1'] = '5'
483 ss['a2'] = 'a1*6'
484 ss['a3'] = 'a2*7'
485 self.assertEqual(ss['a3'], 210)
486
Raymond Hettinger2a7dede2004-08-07 04:55:30 +0000487 # Verify that dir() catches a non-list returned by eval
488 # SF bug #1004669
489 class C:
490 def __getitem__(self, item):
491 raise KeyError(item)
Guido van Rossumcd70eee2007-02-11 18:53:00 +0000492 def keys(self):
493 return 1 # used to be 'a' but that's no longer an error
Raymond Hettinger2a7dede2004-08-07 04:55:30 +0000494 self.assertRaises(TypeError, eval, 'dir()', globals(), C())
495
Georg Brandl7cae87c2006-09-06 06:51:57 +0000496 def test_exec(self):
497 g = {}
498 exec('z = 1', g)
499 if '__builtins__' in g:
500 del g['__builtins__']
501 self.assertEqual(g, {'z': 1})
502
Guido van Rossumef87d6e2007-05-02 19:09:54 +0000503 exec('z = 1+1', g)
Georg Brandl7cae87c2006-09-06 06:51:57 +0000504 if '__builtins__' in g:
505 del g['__builtins__']
506 self.assertEqual(g, {'z': 2})
507 g = {}
508 l = {}
509
Brett Cannon77628992010-03-20 20:59:33 +0000510 with check_warnings():
511 warnings.filterwarnings("ignore", "global statement",
512 module="<string>")
513 exec('global a; a = 1; b = 2', g, l)
Georg Brandl7cae87c2006-09-06 06:51:57 +0000514 if '__builtins__' in g:
515 del g['__builtins__']
516 if '__builtins__' in l:
517 del l['__builtins__']
518 self.assertEqual((g, l), ({'a': 1}, {'b': 2}))
519
Amaury Forgeot d'Arc9ed77352008-04-04 23:25:27 +0000520 def test_exec_redirected(self):
521 savestdout = sys.stdout
522 sys.stdout = None # Whatever that cannot flush()
523 try:
524 # Used to raise SystemError('error return without exception set')
525 exec('a')
526 except NameError:
527 pass
528 finally:
529 sys.stdout = savestdout
530
Walter Dörwald919497e2003-01-19 16:23:59 +0000531 def test_filter(self):
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000532 self.assertEqual(list(filter(lambda c: 'a' <= c <= 'z', 'Hello World')), list('elloorld'))
533 self.assertEqual(list(filter(None, [1, 'hello', [], [3], '', None, 9, 0])), [1, 'hello', [3], 9])
534 self.assertEqual(list(filter(lambda x: x > 0, [1, -3, 9, 0, 2])), [1, 9, 2])
535 self.assertEqual(list(filter(None, Squares(10))), [1, 4, 9, 16, 25, 36, 49, 64, 81])
536 self.assertEqual(list(filter(lambda x: x%2, Squares(10))), [1, 9, 25, 49, 81])
Walter Dörwald919497e2003-01-19 16:23:59 +0000537 def identity(item):
538 return 1
539 filter(identity, Squares(5))
540 self.assertRaises(TypeError, filter)
541 class BadSeq(object):
Tim Petersf2715e02003-02-19 02:35:07 +0000542 def __getitem__(self, index):
543 if index<4:
544 return 42
545 raise ValueError
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000546 self.assertRaises(ValueError, list, filter(lambda x: x, BadSeq()))
Walter Dörwald919497e2003-01-19 16:23:59 +0000547 def badfunc():
548 pass
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000549 self.assertRaises(TypeError, list, filter(badfunc, range(5)))
Walter Dörwald919497e2003-01-19 16:23:59 +0000550
Walter Dörwaldbf517072003-01-27 15:57:14 +0000551 # test bltinmodule.c::filtertuple()
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000552 self.assertEqual(list(filter(None, (1, 2))), [1, 2])
553 self.assertEqual(list(filter(lambda x: x>=3, (1, 2, 3, 4))), [3, 4])
554 self.assertRaises(TypeError, list, filter(42, (1, 2)))
Walter Dörwaldc3da83f2003-02-04 20:24:45 +0000555
Walter Dörwald919497e2003-01-19 16:23:59 +0000556 def test_getattr(self):
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000557 self.assertTrue(getattr(sys, 'stdout') is sys.stdout)
Walter Dörwald919497e2003-01-19 16:23:59 +0000558 self.assertRaises(TypeError, getattr, sys, 1)
559 self.assertRaises(TypeError, getattr, sys, 1, "foo")
560 self.assertRaises(TypeError, getattr)
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000561 self.assertRaises(AttributeError, getattr, sys, chr(sys.maxunicode))
Victor Stinner624dbf62010-03-12 17:17:58 +0000562 # unicode surrogates are not encodable to the default encoding (utf8)
563 self.assertRaises(AttributeError, getattr, 1, "\uDAD1\uD51E")
Walter Dörwald919497e2003-01-19 16:23:59 +0000564
565 def test_hasattr(self):
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000566 self.assertTrue(hasattr(sys, 'stdout'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000567 self.assertRaises(TypeError, hasattr, sys, 1)
568 self.assertRaises(TypeError, hasattr)
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000569 self.assertEqual(False, hasattr(sys, chr(sys.maxunicode)))
Walter Dörwald919497e2003-01-19 16:23:59 +0000570
Benjamin Peterson17689992010-08-24 03:26:23 +0000571 # Check that hasattr propagates all exceptions outside of
572 # AttributeError.
Alexandre Vassalottieca20b62008-05-16 02:54:33 +0000573 class A:
574 def __getattr__(self, what):
Benjamin Peterson17689992010-08-24 03:26:23 +0000575 raise SystemExit
576 self.assertRaises(SystemExit, hasattr, A(), "b")
Alexandre Vassalottieca20b62008-05-16 02:54:33 +0000577 class B:
578 def __getattr__(self, what):
Benjamin Peterson17689992010-08-24 03:26:23 +0000579 raise ValueError
580 self.assertRaises(ValueError, hasattr, B(), "b")
Alexandre Vassalottieca20b62008-05-16 02:54:33 +0000581
Walter Dörwald919497e2003-01-19 16:23:59 +0000582 def test_hash(self):
583 hash(None)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000584 self.assertEqual(hash(1), hash(1))
Walter Dörwald919497e2003-01-19 16:23:59 +0000585 self.assertEqual(hash(1), hash(1.0))
586 hash('spam')
Guido van Rossum98297ee2007-11-06 21:34:58 +0000587 self.assertEqual(hash('spam'), hash(b'spam'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000588 hash((0,1,2,3))
589 def f(): pass
590 self.assertRaises(TypeError, hash, [])
591 self.assertRaises(TypeError, hash, {})
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000592 # Bug 1536021: Allow hash to return long objects
593 class X:
594 def __hash__(self):
595 return 2**100
Ezio Melottib3aedd42010-11-20 19:04:17 +0000596 self.assertEqual(type(hash(X())), int)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000597 class Z(int):
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000598 def __hash__(self):
599 return self
Ezio Melottib3aedd42010-11-20 19:04:17 +0000600 self.assertEqual(hash(Z(42)), hash(42))
Walter Dörwald919497e2003-01-19 16:23:59 +0000601
602 def test_hex(self):
603 self.assertEqual(hex(16), '0x10')
Guido van Rossume2a383d2007-01-15 16:59:06 +0000604 self.assertEqual(hex(-16), '-0x10')
Walter Dörwald919497e2003-01-19 16:23:59 +0000605 self.assertRaises(TypeError, hex, {})
606
607 def test_id(self):
608 id(None)
609 id(1)
Walter Dörwald919497e2003-01-19 16:23:59 +0000610 id(1.0)
611 id('spam')
612 id((0,1,2,3))
613 id([0,1,2,3])
614 id({'spam': 1, 'eggs': 2, 'ham': 3})
615
Guido van Rossuma88a0332007-02-26 16:59:55 +0000616 # Test input() later, alphabetized as if it were raw_input
617
Walter Dörwald919497e2003-01-19 16:23:59 +0000618 def test_iter(self):
619 self.assertRaises(TypeError, iter)
620 self.assertRaises(TypeError, iter, 42, 42)
621 lists = [("1", "2"), ["1", "2"], "12"]
Walter Dörwald919497e2003-01-19 16:23:59 +0000622 for l in lists:
623 i = iter(l)
Georg Brandla18af4e2007-04-21 15:47:16 +0000624 self.assertEqual(next(i), '1')
625 self.assertEqual(next(i), '2')
626 self.assertRaises(StopIteration, next, i)
Walter Dörwald919497e2003-01-19 16:23:59 +0000627
628 def test_isinstance(self):
629 class C:
630 pass
631 class D(C):
632 pass
633 class E:
634 pass
635 c = C()
636 d = D()
637 e = E()
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000638 self.assertTrue(isinstance(c, C))
639 self.assertTrue(isinstance(d, C))
640 self.assertTrue(not isinstance(e, C))
641 self.assertTrue(not isinstance(c, D))
642 self.assertTrue(not isinstance('foo', E))
Walter Dörwald919497e2003-01-19 16:23:59 +0000643 self.assertRaises(TypeError, isinstance, E, 'foo')
644 self.assertRaises(TypeError, isinstance)
645
646 def test_issubclass(self):
647 class C:
648 pass
649 class D(C):
650 pass
651 class E:
652 pass
653 c = C()
654 d = D()
655 e = E()
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000656 self.assertTrue(issubclass(D, C))
657 self.assertTrue(issubclass(C, C))
658 self.assertTrue(not issubclass(C, D))
Walter Dörwald919497e2003-01-19 16:23:59 +0000659 self.assertRaises(TypeError, issubclass, 'foo', E)
660 self.assertRaises(TypeError, issubclass, E, 'foo')
661 self.assertRaises(TypeError, issubclass)
662
663 def test_len(self):
664 self.assertEqual(len('123'), 3)
665 self.assertEqual(len(()), 0)
666 self.assertEqual(len((1, 2, 3, 4)), 4)
667 self.assertEqual(len([1, 2, 3, 4]), 4)
668 self.assertEqual(len({}), 0)
669 self.assertEqual(len({'a':1, 'b': 2}), 2)
670 class BadSeq:
671 def __len__(self):
672 raise ValueError
673 self.assertRaises(ValueError, len, BadSeq())
Benjamin Petersonee1ae7c2009-02-08 21:07:20 +0000674 class InvalidLen:
675 def __len__(self):
676 return None
677 self.assertRaises(TypeError, len, InvalidLen())
678 class FloatLen:
679 def __len__(self):
680 return 4.5
681 self.assertRaises(TypeError, len, FloatLen())
682 class HugeLen:
683 def __len__(self):
684 return sys.maxsize + 1
685 self.assertRaises(OverflowError, len, HugeLen())
Mark Dickinsonfb3dc942010-05-25 19:06:24 +0000686 class NoLenMethod(object): pass
687 self.assertRaises(TypeError, len, NoLenMethod())
Walter Dörwald919497e2003-01-19 16:23:59 +0000688
Walter Dörwald919497e2003-01-19 16:23:59 +0000689 def test_map(self):
690 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000691 list(map(lambda x: x*x, range(1,4))),
Walter Dörwald919497e2003-01-19 16:23:59 +0000692 [1, 4, 9]
693 )
694 try:
695 from math import sqrt
696 except ImportError:
697 def sqrt(x):
698 return pow(x, 0.5)
699 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000700 list(map(lambda x: list(map(sqrt, x)), [[16, 4], [81, 9]])),
Walter Dörwald919497e2003-01-19 16:23:59 +0000701 [[4.0, 2.0], [9.0, 3.0]]
702 )
703 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000704 list(map(lambda x, y: x+y, [1,3,2], [9,1,4])),
Walter Dörwald919497e2003-01-19 16:23:59 +0000705 [10, 4, 6]
706 )
707
708 def plus(*v):
709 accu = 0
710 for i in v: accu = accu + i
711 return accu
712 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000713 list(map(plus, [1, 3, 7])),
Walter Dörwald919497e2003-01-19 16:23:59 +0000714 [1, 3, 7]
715 )
716 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000717 list(map(plus, [1, 3, 7], [4, 9, 2])),
Walter Dörwald919497e2003-01-19 16:23:59 +0000718 [1+4, 3+9, 7+2]
719 )
720 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000721 list(map(plus, [1, 3, 7], [4, 9, 2], [1, 1, 0])),
Walter Dörwald919497e2003-01-19 16:23:59 +0000722 [1+4+1, 3+9+1, 7+2+0]
723 )
724 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000725 list(map(int, Squares(10))),
Walter Dörwald919497e2003-01-19 16:23:59 +0000726 [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
727 )
Guido van Rossum47b9ff62006-08-24 00:41:19 +0000728 def Max(a, b):
729 if a is None:
730 return b
731 if b is None:
732 return a
733 return max(a, b)
Walter Dörwald919497e2003-01-19 16:23:59 +0000734 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000735 list(map(Max, Squares(3), Squares(2))),
736 [0, 1]
Walter Dörwald919497e2003-01-19 16:23:59 +0000737 )
738 self.assertRaises(TypeError, map)
739 self.assertRaises(TypeError, map, lambda x: x, 42)
Walter Dörwald919497e2003-01-19 16:23:59 +0000740 class BadSeq:
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000741 def __iter__(self):
Walter Dörwald919497e2003-01-19 16:23:59 +0000742 raise ValueError
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000743 yield None
744 self.assertRaises(ValueError, list, map(lambda x: x, BadSeq()))
Neal Norwitzfcf44352005-11-27 20:37:43 +0000745 def badfunc(x):
746 raise RuntimeError
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000747 self.assertRaises(RuntimeError, list, map(badfunc, range(5)))
Walter Dörwald919497e2003-01-19 16:23:59 +0000748
749 def test_max(self):
750 self.assertEqual(max('123123'), '3')
751 self.assertEqual(max(1, 2, 3), 3)
752 self.assertEqual(max((1, 2, 3, 1, 2, 3)), 3)
753 self.assertEqual(max([1, 2, 3, 1, 2, 3]), 3)
754
Guido van Rossume2a383d2007-01-15 16:59:06 +0000755 self.assertEqual(max(1, 2, 3.0), 3.0)
756 self.assertEqual(max(1, 2.0, 3), 3)
757 self.assertEqual(max(1.0, 2, 3), 3)
Walter Dörwald919497e2003-01-19 16:23:59 +0000758
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +0000759 for stmt in (
760 "max(key=int)", # no args
761 "max(1, key=int)", # single arg not iterable
762 "max(1, 2, keystone=int)", # wrong keyword
763 "max(1, 2, key=int, abc=int)", # two many keywords
764 "max(1, 2, key=1)", # keyfunc is not callable
765 ):
Tim Peters7f061872004-12-07 21:17:46 +0000766 try:
Georg Brandl7cae87c2006-09-06 06:51:57 +0000767 exec(stmt, globals())
Tim Peters7f061872004-12-07 21:17:46 +0000768 except TypeError:
769 pass
770 else:
771 self.fail(stmt)
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +0000772
773 self.assertEqual(max((1,), key=neg), 1) # one elem iterable
774 self.assertEqual(max((1,2), key=neg), 1) # two elem iterable
775 self.assertEqual(max(1, 2, key=neg), 1) # two elems
776
777 data = [random.randrange(200) for i in range(100)]
778 keys = dict((elem, random.randrange(50)) for elem in data)
779 f = keys.__getitem__
780 self.assertEqual(max(data, key=f),
781 sorted(reversed(data), key=f)[-1])
782
Walter Dörwald919497e2003-01-19 16:23:59 +0000783 def test_min(self):
784 self.assertEqual(min('123123'), '1')
785 self.assertEqual(min(1, 2, 3), 1)
786 self.assertEqual(min((1, 2, 3, 1, 2, 3)), 1)
787 self.assertEqual(min([1, 2, 3, 1, 2, 3]), 1)
788
Guido van Rossume2a383d2007-01-15 16:59:06 +0000789 self.assertEqual(min(1, 2, 3.0), 1)
790 self.assertEqual(min(1, 2.0, 3), 1)
791 self.assertEqual(min(1.0, 2, 3), 1.0)
Walter Dörwald919497e2003-01-19 16:23:59 +0000792
793 self.assertRaises(TypeError, min)
794 self.assertRaises(TypeError, min, 42)
795 self.assertRaises(ValueError, min, ())
796 class BadSeq:
797 def __getitem__(self, index):
798 raise ValueError
799 self.assertRaises(ValueError, min, BadSeq())
Walter Dörwald919497e2003-01-19 16:23:59 +0000800
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +0000801 for stmt in (
802 "min(key=int)", # no args
803 "min(1, key=int)", # single arg not iterable
804 "min(1, 2, keystone=int)", # wrong keyword
805 "min(1, 2, key=int, abc=int)", # two many keywords
806 "min(1, 2, key=1)", # keyfunc is not callable
807 ):
Tim Peters7f061872004-12-07 21:17:46 +0000808 try:
Georg Brandl7cae87c2006-09-06 06:51:57 +0000809 exec(stmt, globals())
Tim Peters7f061872004-12-07 21:17:46 +0000810 except TypeError:
811 pass
812 else:
813 self.fail(stmt)
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +0000814
815 self.assertEqual(min((1,), key=neg), 1) # one elem iterable
816 self.assertEqual(min((1,2), key=neg), 2) # two elem iterable
817 self.assertEqual(min(1, 2, key=neg), 2) # two elems
818
819 data = [random.randrange(200) for i in range(100)]
820 keys = dict((elem, random.randrange(50)) for elem in data)
821 f = keys.__getitem__
822 self.assertEqual(min(data, key=f),
823 sorted(data, key=f)[0])
824
Georg Brandla18af4e2007-04-21 15:47:16 +0000825 def test_next(self):
826 it = iter(range(2))
827 self.assertEqual(next(it), 0)
828 self.assertEqual(next(it), 1)
829 self.assertRaises(StopIteration, next, it)
830 self.assertRaises(StopIteration, next, it)
Ezio Melottib3aedd42010-11-20 19:04:17 +0000831 self.assertEqual(next(it, 42), 42)
Georg Brandla18af4e2007-04-21 15:47:16 +0000832
833 class Iter(object):
834 def __iter__(self):
835 return self
836 def __next__(self):
837 raise StopIteration
838
839 it = iter(Iter())
Ezio Melottib3aedd42010-11-20 19:04:17 +0000840 self.assertEqual(next(it, 42), 42)
Georg Brandla18af4e2007-04-21 15:47:16 +0000841 self.assertRaises(StopIteration, next, it)
842
843 def gen():
844 yield 1
845 return
846
847 it = gen()
Ezio Melottib3aedd42010-11-20 19:04:17 +0000848 self.assertEqual(next(it), 1)
Georg Brandla18af4e2007-04-21 15:47:16 +0000849 self.assertRaises(StopIteration, next, it)
Ezio Melottib3aedd42010-11-20 19:04:17 +0000850 self.assertEqual(next(it, 42), 42)
Georg Brandla18af4e2007-04-21 15:47:16 +0000851
Walter Dörwald919497e2003-01-19 16:23:59 +0000852 def test_oct(self):
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000853 self.assertEqual(oct(100), '0o144')
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000854 self.assertEqual(oct(-100), '-0o144')
Walter Dörwald919497e2003-01-19 16:23:59 +0000855 self.assertRaises(TypeError, oct, ())
856
857 def write_testfile(self):
Guido van Rossuma88a0332007-02-26 16:59:55 +0000858 # NB the first 4 lines are also used to test input, below
Walter Dörwald919497e2003-01-19 16:23:59 +0000859 fp = open(TESTFN, 'w')
860 try:
861 fp.write('1+1\n')
Walter Dörwald919497e2003-01-19 16:23:59 +0000862 fp.write('The quick brown fox jumps over the lazy dog')
863 fp.write('.\n')
864 fp.write('Dear John\n')
865 fp.write('XXX'*100)
866 fp.write('YYY'*100)
867 finally:
868 fp.close()
869
870 def test_open(self):
871 self.write_testfile()
872 fp = open(TESTFN, 'r')
873 try:
874 self.assertEqual(fp.readline(4), '1+1\n')
Walter Dörwald919497e2003-01-19 16:23:59 +0000875 self.assertEqual(fp.readline(), 'The quick brown fox jumps over the lazy dog.\n')
876 self.assertEqual(fp.readline(4), 'Dear')
877 self.assertEqual(fp.readline(100), ' John\n')
878 self.assertEqual(fp.read(300), 'XXX'*100)
879 self.assertEqual(fp.read(1000), 'YYY'*100)
880 finally:
881 fp.close()
882 unlink(TESTFN)
883
884 def test_ord(self):
885 self.assertEqual(ord(' '), 32)
886 self.assertEqual(ord('A'), 65)
887 self.assertEqual(ord('a'), 97)
Guido van Rossumf9e91c92007-05-08 21:05:48 +0000888 self.assertEqual(ord('\x80'), 128)
889 self.assertEqual(ord('\xff'), 255)
890
891 self.assertEqual(ord(b' '), 32)
892 self.assertEqual(ord(b'A'), 65)
893 self.assertEqual(ord(b'a'), 97)
894 self.assertEqual(ord(b'\x80'), 128)
895 self.assertEqual(ord(b'\xff'), 255)
896
Walter Dörwald1f5947b2007-05-22 16:52:54 +0000897 self.assertEqual(ord(chr(sys.maxunicode)), sys.maxunicode)
Walter Dörwald919497e2003-01-19 16:23:59 +0000898 self.assertRaises(TypeError, ord, 42)
Walter Dörwald919497e2003-01-19 16:23:59 +0000899
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000900 self.assertEqual(ord(chr(0x10FFFF)), 0x10FFFF)
901 self.assertEqual(ord("\U0000FFFF"), 0x0000FFFF)
902 self.assertEqual(ord("\U00010000"), 0x00010000)
903 self.assertEqual(ord("\U00010001"), 0x00010001)
904 self.assertEqual(ord("\U000FFFFE"), 0x000FFFFE)
905 self.assertEqual(ord("\U000FFFFF"), 0x000FFFFF)
906 self.assertEqual(ord("\U00100000"), 0x00100000)
907 self.assertEqual(ord("\U00100001"), 0x00100001)
908 self.assertEqual(ord("\U0010FFFE"), 0x0010FFFE)
909 self.assertEqual(ord("\U0010FFFF"), 0x0010FFFF)
910
Walter Dörwald919497e2003-01-19 16:23:59 +0000911 def test_pow(self):
912 self.assertEqual(pow(0,0), 1)
913 self.assertEqual(pow(0,1), 0)
914 self.assertEqual(pow(1,0), 1)
915 self.assertEqual(pow(1,1), 1)
916
917 self.assertEqual(pow(2,0), 1)
918 self.assertEqual(pow(2,10), 1024)
919 self.assertEqual(pow(2,20), 1024*1024)
920 self.assertEqual(pow(2,30), 1024*1024*1024)
921
922 self.assertEqual(pow(-2,0), 1)
923 self.assertEqual(pow(-2,1), -2)
924 self.assertEqual(pow(-2,2), 4)
925 self.assertEqual(pow(-2,3), -8)
926
Walter Dörwald919497e2003-01-19 16:23:59 +0000927 self.assertAlmostEqual(pow(0.,0), 1.)
928 self.assertAlmostEqual(pow(0.,1), 0.)
929 self.assertAlmostEqual(pow(1.,0), 1.)
930 self.assertAlmostEqual(pow(1.,1), 1.)
931
932 self.assertAlmostEqual(pow(2.,0), 1.)
933 self.assertAlmostEqual(pow(2.,10), 1024.)
934 self.assertAlmostEqual(pow(2.,20), 1024.*1024.)
935 self.assertAlmostEqual(pow(2.,30), 1024.*1024.*1024.)
936
937 self.assertAlmostEqual(pow(-2.,0), 1.)
938 self.assertAlmostEqual(pow(-2.,1), -2.)
939 self.assertAlmostEqual(pow(-2.,2), 4.)
940 self.assertAlmostEqual(pow(-2.,3), -8.)
941
Mark Dickinson5c2db372009-12-05 20:28:34 +0000942 for x in 2, 2.0:
943 for y in 10, 10.0:
944 for z in 1000, 1000.0:
Walter Dörwald919497e2003-01-19 16:23:59 +0000945 if isinstance(x, float) or \
946 isinstance(y, float) or \
947 isinstance(z, float):
948 self.assertRaises(TypeError, pow, x, y, z)
949 else:
950 self.assertAlmostEqual(pow(x, y, z), 24.0)
951
Jeffrey Yasskin3404b3c2007-09-07 15:15:49 +0000952 self.assertAlmostEqual(pow(-1, 0.5), 1j)
953 self.assertAlmostEqual(pow(-1, 1/3), 0.5 + 0.8660254037844386j)
954
Walter Dörwald919497e2003-01-19 16:23:59 +0000955 self.assertRaises(TypeError, pow, -1, -2, 3)
956 self.assertRaises(ValueError, pow, 1, 2, 0)
Walter Dörwald919497e2003-01-19 16:23:59 +0000957
958 self.assertRaises(TypeError, pow)
959
Guido van Rossuma88a0332007-02-26 16:59:55 +0000960 def test_input(self):
961 self.write_testfile()
962 fp = open(TESTFN, 'r')
963 savestdin = sys.stdin
964 savestdout = sys.stdout # Eats the echo
965 try:
966 sys.stdin = fp
967 sys.stdout = BitBucket()
968 self.assertEqual(input(), "1+1")
Guido van Rossuma88a0332007-02-26 16:59:55 +0000969 self.assertEqual(input(), 'The quick brown fox jumps over the lazy dog.')
970 self.assertEqual(input('testing\n'), 'Dear John')
971
972 # SF 1535165: don't segfault on closed stdin
973 # sys.stdout must be a regular file for triggering
974 sys.stdout = savestdout
975 sys.stdin.close()
976 self.assertRaises(ValueError, input)
977
978 sys.stdout = BitBucket()
Guido van Rossum34d19282007-08-09 01:03:29 +0000979 sys.stdin = io.StringIO("NULL\0")
Guido van Rossuma88a0332007-02-26 16:59:55 +0000980 self.assertRaises(TypeError, input, 42, 42)
Guido van Rossum34d19282007-08-09 01:03:29 +0000981 sys.stdin = io.StringIO(" 'whitespace'")
Guido van Rossuma88a0332007-02-26 16:59:55 +0000982 self.assertEqual(input(), " 'whitespace'")
Guido van Rossum34d19282007-08-09 01:03:29 +0000983 sys.stdin = io.StringIO()
Guido van Rossuma88a0332007-02-26 16:59:55 +0000984 self.assertRaises(EOFError, input)
985
986 del sys.stdout
987 self.assertRaises(RuntimeError, input, 'prompt')
988 del sys.stdin
989 self.assertRaises(RuntimeError, input, 'prompt')
990 finally:
991 sys.stdin = savestdin
992 sys.stdout = savestdout
993 fp.close()
994 unlink(TESTFN)
995
Antoine Pitrou0d776b12011-11-06 00:34:26 +0100996 @unittest.skipUnless(pty, "the pty module isn't available")
997 def check_input_tty(self, prompt, terminal_input, stdio_encoding=None):
998 r, w = os.pipe()
999 try:
1000 pid, fd = pty.fork()
1001 except (OSError, AttributeError) as e:
1002 os.close(r)
1003 os.close(w)
1004 self.skipTest("pty.fork() raised {}".format(e))
1005 if pid == 0:
1006 # Child
1007 os.close(r)
1008 # Check the error handlers are accounted for
1009 if stdio_encoding:
1010 sys.stdin = io.TextIOWrapper(sys.stdin.detach(),
1011 encoding=stdio_encoding,
1012 errors='surrogateescape')
1013 sys.stdout = io.TextIOWrapper(sys.stdout.detach(),
1014 encoding=stdio_encoding,
1015 errors='replace')
1016 with open(w, "w") as wpipe:
1017 try:
1018 print("tty =", sys.stdin.isatty() and sys.stdout.isatty(), file=wpipe)
1019 print(ascii(input(prompt)), file=wpipe)
1020 finally:
1021 print(";EOF", file=wpipe)
1022 # We don't want to return to unittest...
1023 os._exit(0)
1024 # Parent
1025 os.close(w)
1026 os.write(fd, terminal_input + b"\r\n")
1027 # Get results from the pipe
1028 with open(r, "r") as rpipe:
1029 lines = []
1030 while True:
1031 line = rpipe.readline().strip()
1032 if line == ";EOF":
1033 break
1034 lines.append(line)
1035 # Check we did exercise the GNU readline path
1036 self.assertIn(lines[0], {'tty = True', 'tty = False'})
1037 if lines[0] != 'tty = True':
1038 self.skipTest("standard IO in should have been a tty")
1039 # Check the result was got and corresponds to the user's terminal input
1040 self.assertEqual(len(lines), 2)
1041 input_result = eval(lines[1]) # ascii() -> eval() roundtrip
1042 if stdio_encoding:
1043 expected = terminal_input.decode(stdio_encoding, 'surrogateescape')
1044 else:
1045 expected = terminal_input.decode(sys.stdin.encoding) # what else?
1046 self.assertEqual(input_result, expected)
1047
1048 def test_input_tty(self):
1049 # Test input() functionality when wired to a tty (the code path
1050 # is different and invokes GNU readline if available).
1051 self.check_input_tty("prompt", b"quux")
1052
1053 def test_input_tty_non_ascii(self):
1054 # Check stdin/stdout encoding is used when invoking GNU readline
1055 self.check_input_tty("prompté", b"quux\xe9", "utf-8")
1056
1057 def test_input_tty_non_ascii_unicode_errors(self):
1058 # Check stdin/stdout error handler is used when invoking GNU readline
1059 self.check_input_tty("prompté", b"quux\xe9", "ascii")
1060
Walter Dörwald919497e2003-01-19 16:23:59 +00001061 def test_repr(self):
1062 self.assertEqual(repr(''), '\'\'')
1063 self.assertEqual(repr(0), '0')
Walter Dörwald919497e2003-01-19 16:23:59 +00001064 self.assertEqual(repr(()), '()')
1065 self.assertEqual(repr([]), '[]')
1066 self.assertEqual(repr({}), '{}')
1067 a = []
1068 a.append(a)
1069 self.assertEqual(repr(a), '[[...]]')
1070 a = {}
1071 a[0] = a
1072 self.assertEqual(repr(a), '{0: {...}}')
1073
1074 def test_round(self):
1075 self.assertEqual(round(0.0), 0.0)
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001076 self.assertEqual(type(round(0.0)), int)
Walter Dörwald919497e2003-01-19 16:23:59 +00001077 self.assertEqual(round(1.0), 1.0)
1078 self.assertEqual(round(10.0), 10.0)
1079 self.assertEqual(round(1000000000.0), 1000000000.0)
1080 self.assertEqual(round(1e20), 1e20)
1081
1082 self.assertEqual(round(-1.0), -1.0)
1083 self.assertEqual(round(-10.0), -10.0)
1084 self.assertEqual(round(-1000000000.0), -1000000000.0)
1085 self.assertEqual(round(-1e20), -1e20)
1086
1087 self.assertEqual(round(0.1), 0.0)
1088 self.assertEqual(round(1.1), 1.0)
1089 self.assertEqual(round(10.1), 10.0)
1090 self.assertEqual(round(1000000000.1), 1000000000.0)
1091
1092 self.assertEqual(round(-1.1), -1.0)
1093 self.assertEqual(round(-10.1), -10.0)
1094 self.assertEqual(round(-1000000000.1), -1000000000.0)
1095
1096 self.assertEqual(round(0.9), 1.0)
1097 self.assertEqual(round(9.9), 10.0)
1098 self.assertEqual(round(999999999.9), 1000000000.0)
1099
1100 self.assertEqual(round(-0.9), -1.0)
1101 self.assertEqual(round(-9.9), -10.0)
1102 self.assertEqual(round(-999999999.9), -1000000000.0)
1103
1104 self.assertEqual(round(-8.0, -1), -10.0)
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001105 self.assertEqual(type(round(-8.0, -1)), float)
1106
1107 self.assertEqual(type(round(-8.0, 0)), float)
1108 self.assertEqual(type(round(-8.0, 1)), float)
1109
1110 # Check even / odd rounding behaviour
1111 self.assertEqual(round(5.5), 6)
1112 self.assertEqual(round(6.5), 6)
1113 self.assertEqual(round(-5.5), -6)
1114 self.assertEqual(round(-6.5), -6)
1115
1116 # Check behavior on ints
1117 self.assertEqual(round(0), 0)
1118 self.assertEqual(round(8), 8)
1119 self.assertEqual(round(-8), -8)
1120 self.assertEqual(type(round(0)), int)
Mark Dickinson1124e712009-01-28 21:25:58 +00001121 self.assertEqual(type(round(-8, -1)), int)
1122 self.assertEqual(type(round(-8, 0)), int)
1123 self.assertEqual(type(round(-8, 1)), int)
Walter Dörwald919497e2003-01-19 16:23:59 +00001124
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001125 # test new kwargs
1126 self.assertEqual(round(number=-8.0, ndigits=-1), -10.0)
1127
Walter Dörwald919497e2003-01-19 16:23:59 +00001128 self.assertRaises(TypeError, round)
1129
Alex Martelliae211f92007-08-22 23:21:33 +00001130 # test generic rounding delegation for reals
1131 class TestRound:
1132 def __round__(self):
1133 return 23
1134
1135 class TestNoRound:
1136 pass
1137
1138 self.assertEqual(round(TestRound()), 23)
1139
1140 self.assertRaises(TypeError, round, 1, 2, 3)
1141 self.assertRaises(TypeError, round, TestNoRound())
1142
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001143 t = TestNoRound()
1144 t.__round__ = lambda *args: args
1145 self.assertRaises(TypeError, round, t)
1146 self.assertRaises(TypeError, round, t, 0)
1147
Mark Dickinsonad731b92009-11-09 17:12:30 +00001148 # Some versions of glibc for alpha have a bug that affects
1149 # float -> integer rounding (floor, ceil, rint, round) for
1150 # values in the range [2**52, 2**53). See:
1151 #
1152 # http://sources.redhat.com/bugzilla/show_bug.cgi?id=5350
1153 #
1154 # We skip this test on Linux/alpha if it would fail.
1155 linux_alpha = (platform.system().startswith('Linux') and
1156 platform.machine().startswith('alpha'))
1157 system_round_bug = round(5e15+1) != 5e15+1
1158 @unittest.skipIf(linux_alpha and system_round_bug,
1159 "test will fail; failure is probably due to a "
1160 "buggy system round function")
1161 def test_round_large(self):
1162 # Issue #1869: integral floats should remain unchanged
1163 self.assertEqual(round(5e15-1), 5e15-1)
1164 self.assertEqual(round(5e15), 5e15)
1165 self.assertEqual(round(5e15+1), 5e15+1)
1166 self.assertEqual(round(5e15+2), 5e15+2)
1167 self.assertEqual(round(5e15+3), 5e15+3)
1168
Walter Dörwald919497e2003-01-19 16:23:59 +00001169 def test_setattr(self):
Tim Petersf2715e02003-02-19 02:35:07 +00001170 setattr(sys, 'spam', 1)
1171 self.assertEqual(sys.spam, 1)
1172 self.assertRaises(TypeError, setattr, sys, 1, 'spam')
1173 self.assertRaises(TypeError, setattr)
Walter Dörwald919497e2003-01-19 16:23:59 +00001174
Walter Dörwald919497e2003-01-19 16:23:59 +00001175
Alex Martellia70b1912003-04-22 08:12:33 +00001176 def test_sum(self):
1177 self.assertEqual(sum([]), 0)
Guido van Rossum805365e2007-05-07 22:24:25 +00001178 self.assertEqual(sum(list(range(2,8))), 27)
1179 self.assertEqual(sum(iter(list(range(2,8)))), 27)
Alex Martellia70b1912003-04-22 08:12:33 +00001180 self.assertEqual(sum(Squares(10)), 285)
1181 self.assertEqual(sum(iter(Squares(10))), 285)
1182 self.assertEqual(sum([[1], [2], [3]], []), [1, 2, 3])
1183
1184 self.assertRaises(TypeError, sum)
1185 self.assertRaises(TypeError, sum, 42)
1186 self.assertRaises(TypeError, sum, ['a', 'b', 'c'])
1187 self.assertRaises(TypeError, sum, ['a', 'b', 'c'], '')
1188 self.assertRaises(TypeError, sum, [[1], [2], [3]])
1189 self.assertRaises(TypeError, sum, [{2:3}])
1190 self.assertRaises(TypeError, sum, [{2:3}]*2, {2:3})
1191
1192 class BadSeq:
1193 def __getitem__(self, index):
1194 raise ValueError
1195 self.assertRaises(ValueError, sum, BadSeq())
1196
Mark Dickinson3a22b472009-10-17 21:48:16 +00001197 empty = []
1198 sum(([x] for x in range(10)), empty)
1199 self.assertEqual(empty, [])
1200
Walter Dörwald919497e2003-01-19 16:23:59 +00001201 def test_type(self):
1202 self.assertEqual(type(''), type('123'))
1203 self.assertNotEqual(type(''), type(()))
1204
Guido van Rossumfee7b932005-01-16 00:21:28 +00001205 # We don't want self in vars(), so these are static methods
1206
1207 @staticmethod
Walter Dörwald919497e2003-01-19 16:23:59 +00001208 def get_vars_f0():
1209 return vars()
Walter Dörwald919497e2003-01-19 16:23:59 +00001210
Guido van Rossumfee7b932005-01-16 00:21:28 +00001211 @staticmethod
Walter Dörwald919497e2003-01-19 16:23:59 +00001212 def get_vars_f2():
1213 BuiltinTest.get_vars_f0()
1214 a = 1
1215 b = 2
1216 return vars()
Walter Dörwald919497e2003-01-19 16:23:59 +00001217
Mark Dickinsonfb3dc942010-05-25 19:06:24 +00001218 class C_get_vars(object):
1219 def getDict(self):
1220 return {'a':2}
1221 __dict__ = property(fget=getDict)
1222
Walter Dörwald919497e2003-01-19 16:23:59 +00001223 def test_vars(self):
Raymond Hettingera690a992003-11-16 16:17:49 +00001224 self.assertEqual(set(vars()), set(dir()))
Raymond Hettingera690a992003-11-16 16:17:49 +00001225 self.assertEqual(set(vars(sys)), set(dir(sys)))
Walter Dörwald919497e2003-01-19 16:23:59 +00001226 self.assertEqual(self.get_vars_f0(), {})
1227 self.assertEqual(self.get_vars_f2(), {'a': 1, 'b': 2})
1228 self.assertRaises(TypeError, vars, 42, 42)
1229 self.assertRaises(TypeError, vars, 42)
Mark Dickinsonfb3dc942010-05-25 19:06:24 +00001230 self.assertEqual(vars(self.C_get_vars()), {'a':2})
Walter Dörwald919497e2003-01-19 16:23:59 +00001231
1232 def test_zip(self):
1233 a = (1, 2, 3)
1234 b = (4, 5, 6)
1235 t = [(1, 4), (2, 5), (3, 6)]
Guido van Rossum801f0d72006-08-24 19:48:10 +00001236 self.assertEqual(list(zip(a, b)), t)
Walter Dörwald919497e2003-01-19 16:23:59 +00001237 b = [4, 5, 6]
Guido van Rossum801f0d72006-08-24 19:48:10 +00001238 self.assertEqual(list(zip(a, b)), t)
Walter Dörwald919497e2003-01-19 16:23:59 +00001239 b = (4, 5, 6, 7)
Guido van Rossum801f0d72006-08-24 19:48:10 +00001240 self.assertEqual(list(zip(a, b)), t)
Walter Dörwald919497e2003-01-19 16:23:59 +00001241 class I:
1242 def __getitem__(self, i):
1243 if i < 0 or i > 2: raise IndexError
1244 return i + 4
Guido van Rossum801f0d72006-08-24 19:48:10 +00001245 self.assertEqual(list(zip(a, I())), t)
1246 self.assertEqual(list(zip()), [])
1247 self.assertEqual(list(zip(*[])), [])
Walter Dörwald919497e2003-01-19 16:23:59 +00001248 self.assertRaises(TypeError, zip, None)
1249 class G:
1250 pass
1251 self.assertRaises(TypeError, zip, a, G())
Alexander Belopolskye29e6bf2010-08-16 18:55:46 +00001252 self.assertRaises(RuntimeError, zip, a, TestFailingIter())
Walter Dörwald919497e2003-01-19 16:23:59 +00001253
1254 # Make sure zip doesn't try to allocate a billion elements for the
1255 # result list when one of its arguments doesn't say how long it is.
1256 # A MemoryError is the most likely failure mode.
1257 class SequenceWithoutALength:
1258 def __getitem__(self, i):
1259 if i == 5:
1260 raise IndexError
1261 else:
1262 return i
1263 self.assertEqual(
Guido van Rossum805365e2007-05-07 22:24:25 +00001264 list(zip(SequenceWithoutALength(), range(2**30))),
Walter Dörwald919497e2003-01-19 16:23:59 +00001265 list(enumerate(range(5)))
1266 )
1267
1268 class BadSeq:
1269 def __getitem__(self, i):
1270 if i == 5:
1271 raise ValueError
1272 else:
1273 return i
Guido van Rossum801f0d72006-08-24 19:48:10 +00001274 self.assertRaises(ValueError, list, zip(BadSeq(), BadSeq()))
Walter Dörwald919497e2003-01-19 16:23:59 +00001275
Eric Smithe4d63172010-09-13 20:48:43 +00001276 def test_format(self):
1277 # Test the basic machinery of the format() builtin. Don't test
1278 # the specifics of the various formatters
1279 self.assertEqual(format(3, ''), '3')
1280
1281 # Returns some classes to use for various tests. There's
1282 # an old-style version, and a new-style version
1283 def classes_new():
1284 class A(object):
1285 def __init__(self, x):
1286 self.x = x
1287 def __format__(self, format_spec):
1288 return str(self.x) + format_spec
1289 class DerivedFromA(A):
1290 pass
1291
1292 class Simple(object): pass
1293 class DerivedFromSimple(Simple):
1294 def __init__(self, x):
1295 self.x = x
1296 def __format__(self, format_spec):
1297 return str(self.x) + format_spec
1298 class DerivedFromSimple2(DerivedFromSimple): pass
1299 return A, DerivedFromA, DerivedFromSimple, DerivedFromSimple2
1300
1301 def class_test(A, DerivedFromA, DerivedFromSimple, DerivedFromSimple2):
1302 self.assertEqual(format(A(3), 'spec'), '3spec')
1303 self.assertEqual(format(DerivedFromA(4), 'spec'), '4spec')
1304 self.assertEqual(format(DerivedFromSimple(5), 'abc'), '5abc')
1305 self.assertEqual(format(DerivedFromSimple2(10), 'abcdef'),
1306 '10abcdef')
1307
1308 class_test(*classes_new())
1309
1310 def empty_format_spec(value):
1311 # test that:
1312 # format(x, '') == str(x)
1313 # format(x) == str(x)
1314 self.assertEqual(format(value, ""), str(value))
1315 self.assertEqual(format(value), str(value))
1316
1317 # for builtin types, format(x, "") == str(x)
1318 empty_format_spec(17**13)
1319 empty_format_spec(1.0)
1320 empty_format_spec(3.1415e104)
1321 empty_format_spec(-3.1415e104)
1322 empty_format_spec(3.1415e-104)
1323 empty_format_spec(-3.1415e-104)
1324 empty_format_spec(object)
1325 empty_format_spec(None)
1326
1327 # TypeError because self.__format__ returns the wrong type
1328 class BadFormatResult:
1329 def __format__(self, format_spec):
1330 return 1.0
1331 self.assertRaises(TypeError, format, BadFormatResult(), "")
1332
1333 # TypeError because format_spec is not unicode or str
1334 self.assertRaises(TypeError, format, object(), 4)
1335 self.assertRaises(TypeError, format, object(), object())
1336
1337 # tests for object.__format__ really belong elsewhere, but
1338 # there's no good place to put them
1339 x = object().__format__('')
1340 self.assertTrue(x.startswith('<object object at'))
1341
1342 # first argument to object.__format__ must be string
1343 self.assertRaises(TypeError, object().__format__, 3)
1344 self.assertRaises(TypeError, object().__format__, object())
1345 self.assertRaises(TypeError, object().__format__, None)
1346
1347 # --------------------------------------------------------------------
1348 # Issue #7994: object.__format__ with a non-empty format string is
1349 # pending deprecated
1350 def test_deprecated_format_string(obj, fmt_str, should_raise_warning):
1351 with warnings.catch_warnings(record=True) as w:
1352 warnings.simplefilter("always", PendingDeprecationWarning)
1353 format(obj, fmt_str)
1354 if should_raise_warning:
1355 self.assertEqual(len(w), 1)
1356 self.assertIsInstance(w[0].message, PendingDeprecationWarning)
1357 self.assertIn('object.__format__ with a non-empty format '
1358 'string', str(w[0].message))
1359 else:
1360 self.assertEqual(len(w), 0)
1361
1362 fmt_strs = ['', 's']
1363
1364 class A:
1365 def __format__(self, fmt_str):
1366 return format('', fmt_str)
1367
1368 for fmt_str in fmt_strs:
1369 test_deprecated_format_string(A(), fmt_str, False)
1370
1371 class B:
1372 pass
1373
1374 class C(object):
1375 pass
1376
1377 for cls in [object, B, C]:
1378 for fmt_str in fmt_strs:
1379 test_deprecated_format_string(cls(), fmt_str, len(fmt_str) != 0)
1380 # --------------------------------------------------------------------
1381
1382 # make sure we can take a subclass of str as a format spec
1383 class DerivedFromStr(str): pass
1384 self.assertEqual(format(0, DerivedFromStr('10')), ' 0')
1385
Christian Heimes90c3d9b2008-02-23 13:18:03 +00001386 def test_bin(self):
1387 self.assertEqual(bin(0), '0b0')
1388 self.assertEqual(bin(1), '0b1')
1389 self.assertEqual(bin(-1), '-0b1')
1390 self.assertEqual(bin(2**65), '0b1' + '0' * 65)
1391 self.assertEqual(bin(2**65-1), '0b' + '1' * 65)
1392 self.assertEqual(bin(-(2**65)), '-0b1' + '0' * 65)
1393 self.assertEqual(bin(-(2**65-1)), '-0b' + '1' * 65)
1394
Georg Brandl953152f2009-07-22 12:03:59 +00001395 def test_bytearray_translate(self):
1396 x = bytearray(b"abc")
1397 self.assertRaises(ValueError, x.translate, b"1", 1)
1398 self.assertRaises(TypeError, x.translate, b"1"*256, 1)
1399
Raymond Hettinger64958a12003-12-17 20:43:33 +00001400class TestSorted(unittest.TestCase):
1401
1402 def test_basic(self):
Guido van Rossum805365e2007-05-07 22:24:25 +00001403 data = list(range(100))
Raymond Hettinger64958a12003-12-17 20:43:33 +00001404 copy = data[:]
1405 random.shuffle(copy)
1406 self.assertEqual(data, sorted(copy))
1407 self.assertNotEqual(data, copy)
1408
1409 data.reverse()
1410 random.shuffle(copy)
Raymond Hettinger64958a12003-12-17 20:43:33 +00001411 self.assertEqual(data, sorted(copy, key=lambda x: -x))
1412 self.assertNotEqual(data, copy)
1413 random.shuffle(copy)
1414 self.assertEqual(data, sorted(copy, reverse=1))
1415 self.assertNotEqual(data, copy)
1416
1417 def test_inputtypes(self):
1418 s = 'abracadabra'
Walter Dörwald1f5947b2007-05-22 16:52:54 +00001419 types = [list, tuple, str]
Walter Dörwald4e41a4b2005-08-03 17:09:04 +00001420 for T in types:
Raymond Hettinger64958a12003-12-17 20:43:33 +00001421 self.assertEqual(sorted(s), sorted(T(s)))
1422
Walter Dörwald1f5947b2007-05-22 16:52:54 +00001423 s = ''.join(set(s)) # unique letters only
1424 types = [str, set, frozenset, list, tuple, dict.fromkeys]
Walter Dörwald4e41a4b2005-08-03 17:09:04 +00001425 for T in types:
Raymond Hettinger64958a12003-12-17 20:43:33 +00001426 self.assertEqual(sorted(s), sorted(T(s)))
1427
1428 def test_baddecorator(self):
1429 data = 'The quick Brown fox Jumped over The lazy Dog'.split()
1430 self.assertRaises(TypeError, sorted, data, None, lambda x,y: 0)
1431
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001432def test_main(verbose=None):
1433 test_classes = (BuiltinTest, TestSorted)
1434
1435 run_unittest(*test_classes)
1436
1437 # verify reference counting
1438 if verbose and hasattr(sys, "gettotalrefcount"):
1439 import gc
1440 counts = [None] * 5
Guido van Rossum805365e2007-05-07 22:24:25 +00001441 for i in range(len(counts)):
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001442 run_unittest(*test_classes)
1443 gc.collect()
1444 counts[i] = sys.gettotalrefcount()
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001445 print(counts)
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001446
Walter Dörwald919497e2003-01-19 16:23:59 +00001447
1448if __name__ == "__main__":
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001449 test_main(verbose=True)