blob: 26c70349ed9a6a9bbc54a89a2d91b23b0dd50e58 [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
9import types
10import builtins
11import random
Brett Cannon77628992010-03-20 20:59:33 +000012from test.support import fcmp, TESTFN, unlink, run_unittest, check_warnings
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +000013from operator import neg
Guido van Rossum3bead091992-01-27 17:00:37 +000014
Guido van Rossum3bead091992-01-27 17:00:37 +000015
Walter Dörwald919497e2003-01-19 16:23:59 +000016class Squares:
Guido van Rossum3bead091992-01-27 17:00:37 +000017
Walter Dörwald919497e2003-01-19 16:23:59 +000018 def __init__(self, max):
19 self.max = max
20 self.sofar = []
21
22 def __len__(self): return len(self.sofar)
23
24 def __getitem__(self, i):
25 if not 0 <= i < self.max: raise IndexError
26 n = len(self.sofar)
27 while n <= i:
28 self.sofar.append(n*n)
29 n += 1
30 return self.sofar[i]
31
32class StrSquares:
33
34 def __init__(self, max):
35 self.max = max
36 self.sofar = []
37
38 def __len__(self):
39 return len(self.sofar)
40
41 def __getitem__(self, i):
42 if not 0 <= i < self.max:
43 raise IndexError
44 n = len(self.sofar)
45 while n <= i:
46 self.sofar.append(str(n*n))
47 n += 1
48 return self.sofar[i]
49
50class BitBucket:
51 def write(self, line):
52 pass
53
Facundo Batista2336bdd2008-01-19 19:12:01 +000054test_conv_no_sign = [
Walter Dörwald919497e2003-01-19 16:23:59 +000055 ('0', 0),
56 ('1', 1),
57 ('9', 9),
58 ('10', 10),
59 ('99', 99),
60 ('100', 100),
61 ('314', 314),
62 (' 314', 314),
63 ('314 ', 314),
64 (' \t\t 314 \t\t ', 314),
Christian Heimesa37d4c62007-12-04 23:02:19 +000065 (repr(sys.maxsize), sys.maxsize),
Walter Dörwald919497e2003-01-19 16:23:59 +000066 (' 1x', ValueError),
67 (' 1 ', 1),
68 (' 1\02 ', ValueError),
69 ('', ValueError),
70 (' ', ValueError),
Walter Dörwald1f5947b2007-05-22 16:52:54 +000071 (' \t\t ', ValueError),
Guido van Rossumef87d6e2007-05-02 19:09:54 +000072 (str(b'\u0663\u0661\u0664 ','raw-unicode-escape'), 314),
Guido van Rossum84fc66d2007-05-03 17:18:26 +000073 (chr(0x200), ValueError),
Walter Dörwald919497e2003-01-19 16:23:59 +000074]
75
Facundo Batista2336bdd2008-01-19 19:12:01 +000076test_conv_sign = [
77 ('0', 0),
78 ('1', 1),
79 ('9', 9),
80 ('10', 10),
81 ('99', 99),
82 ('100', 100),
83 ('314', 314),
84 (' 314', ValueError),
85 ('314 ', 314),
86 (' \t\t 314 \t\t ', ValueError),
87 (repr(sys.maxsize), sys.maxsize),
88 (' 1x', ValueError),
89 (' 1 ', ValueError),
90 (' 1\02 ', ValueError),
91 ('', ValueError),
92 (' ', ValueError),
93 (' \t\t ', ValueError),
94 (str(b'\u0663\u0661\u0664 ','raw-unicode-escape'), 314),
95 (chr(0x200), ValueError),
96]
97
Raymond Hettinger96229b12005-03-11 06:49:40 +000098class TestFailingBool:
Jack Diederich4dafcc42006-11-28 19:15:13 +000099 def __bool__(self):
Raymond Hettinger96229b12005-03-11 06:49:40 +0000100 raise RuntimeError
101
102class TestFailingIter:
103 def __iter__(self):
104 raise RuntimeError
105
Walter Dörwald919497e2003-01-19 16:23:59 +0000106class BuiltinTest(unittest.TestCase):
107
108 def test_import(self):
109 __import__('sys')
110 __import__('time')
111 __import__('string')
Guido van Rossumd8faa362007-04-27 19:54:29 +0000112 __import__(name='sys')
113 __import__(name='time', level=0)
Walter Dörwald919497e2003-01-19 16:23:59 +0000114 self.assertRaises(ImportError, __import__, 'spamspam')
115 self.assertRaises(TypeError, __import__, 1, 2, 3, 4)
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000116 self.assertRaises(ValueError, __import__, '')
Guido van Rossumd8faa362007-04-27 19:54:29 +0000117 self.assertRaises(TypeError, __import__, 'sys', name='sys')
Walter Dörwald919497e2003-01-19 16:23:59 +0000118
119 def test_abs(self):
120 # int
121 self.assertEqual(abs(0), 0)
122 self.assertEqual(abs(1234), 1234)
123 self.assertEqual(abs(-1234), 1234)
Christian Heimesa37d4c62007-12-04 23:02:19 +0000124 self.assertTrue(abs(-sys.maxsize-1) > 0)
Walter Dörwald919497e2003-01-19 16:23:59 +0000125 # float
126 self.assertEqual(abs(0.0), 0.0)
127 self.assertEqual(abs(3.14), 3.14)
128 self.assertEqual(abs(-3.14), 3.14)
Walter Dörwald919497e2003-01-19 16:23:59 +0000129 # str
130 self.assertRaises(TypeError, abs, 'a')
Mark Dickinsonfb3dc942010-05-25 19:06:24 +0000131 # bool
132 self.assertEqual(abs(True), 1)
133 self.assertEqual(abs(False), 0)
134 # other
135 self.assertRaises(TypeError, abs)
136 self.assertRaises(TypeError, abs, None)
137 class AbsClass(object):
138 def __abs__(self):
139 return -5
140 self.assertEqual(abs(AbsClass()), -5)
Walter Dörwald919497e2003-01-19 16:23:59 +0000141
Raymond Hettinger96229b12005-03-11 06:49:40 +0000142 def test_all(self):
143 self.assertEqual(all([2, 4, 6]), True)
144 self.assertEqual(all([2, None, 6]), False)
145 self.assertRaises(RuntimeError, all, [2, TestFailingBool(), 6])
146 self.assertRaises(RuntimeError, all, TestFailingIter())
147 self.assertRaises(TypeError, all, 10) # Non-iterable
148 self.assertRaises(TypeError, all) # No args
149 self.assertRaises(TypeError, all, [2, 4, 6], []) # Too many args
150 self.assertEqual(all([]), True) # Empty iterator
151 S = [50, 60]
152 self.assertEqual(all(x > 42 for x in S), True)
153 S = [50, 40, 60]
154 self.assertEqual(all(x > 42 for x in S), False)
155
156 def test_any(self):
157 self.assertEqual(any([None, None, None]), False)
158 self.assertEqual(any([None, 4, None]), True)
159 self.assertRaises(RuntimeError, any, [None, TestFailingBool(), 6])
160 self.assertRaises(RuntimeError, all, TestFailingIter())
161 self.assertRaises(TypeError, any, 10) # Non-iterable
162 self.assertRaises(TypeError, any) # No args
163 self.assertRaises(TypeError, any, [2, 4, 6], []) # Too many args
164 self.assertEqual(any([]), False) # Empty iterator
165 S = [40, 60, 30]
166 self.assertEqual(any(x > 42 for x in S), True)
167 S = [10, 20, 30]
168 self.assertEqual(any(x > 42 for x in S), False)
169
Georg Brandl559e5d72008-06-11 18:37:52 +0000170 def test_ascii(self):
171 self.assertEqual(ascii(''), '\'\'')
172 self.assertEqual(ascii(0), '0')
Georg Brandl559e5d72008-06-11 18:37:52 +0000173 self.assertEqual(ascii(()), '()')
174 self.assertEqual(ascii([]), '[]')
175 self.assertEqual(ascii({}), '{}')
176 a = []
177 a.append(a)
178 self.assertEqual(ascii(a), '[[...]]')
179 a = {}
180 a[0] = a
181 self.assertEqual(ascii(a), '{0: {...}}')
Antoine Pitroue4a18922010-09-09 20:30:23 +0000182 # Advanced checks for unicode strings
183 def _check_uni(s):
184 self.assertEqual(ascii(s), repr(s))
185 _check_uni("'")
186 _check_uni('"')
187 _check_uni('"\'')
188 _check_uni('\0')
189 _check_uni('\r\n\t .')
190 # Unprintable non-ASCII characters
191 _check_uni('\x85')
192 _check_uni('\u1fff')
193 _check_uni('\U00012fff')
194 # Lone surrogates
195 _check_uni('\ud800')
196 _check_uni('\udfff')
197 # Issue #9804: surrogates should be joined even for printable
198 # wide characters (UCS-2 builds).
199 self.assertEqual(ascii('\U0001d121'), "'\\U0001d121'")
200 # All together
201 s = "'\0\"\n\r\t abcd\x85é\U00012fff\uD800\U0001D121xxx."
202 self.assertEqual(ascii(s),
203 r"""'\'\x00"\n\r\t abcd\x85\xe9\U00012fff\ud800\U0001d121xxx.'""")
Georg Brandl559e5d72008-06-11 18:37:52 +0000204
Thomas Wouters89f507f2006-12-13 04:49:30 +0000205 def test_neg(self):
Christian Heimesa37d4c62007-12-04 23:02:19 +0000206 x = -sys.maxsize-1
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000207 self.assertTrue(isinstance(x, int))
Christian Heimesa37d4c62007-12-04 23:02:19 +0000208 self.assertEqual(-x, sys.maxsize+1)
Thomas Wouters89f507f2006-12-13 04:49:30 +0000209
Guido van Rossumd59da4b2007-05-22 18:11:13 +0000210 # XXX(nnorwitz): This test case for callable should probably be removed.
Walter Dörwald919497e2003-01-19 16:23:59 +0000211 def test_callable(self):
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000212 self.assertTrue(hasattr(len, '__call__'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000213 def f(): pass
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000214 self.assertTrue(hasattr(f, '__call__'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000215 class C:
216 def meth(self): pass
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000217 self.assertTrue(hasattr(C, '__call__'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000218 x = C()
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000219 self.assertTrue(hasattr(x.meth, '__call__'))
220 self.assertTrue(not hasattr(x, '__call__'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000221 class D(C):
222 def __call__(self): pass
223 y = D()
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000224 self.assertTrue(hasattr(y, '__call__'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000225 y()
226
227 def test_chr(self):
228 self.assertEqual(chr(32), ' ')
229 self.assertEqual(chr(65), 'A')
230 self.assertEqual(chr(97), 'a')
231 self.assertEqual(chr(0xff), '\xff')
Guido van Rossum572dbf82007-04-27 23:53:51 +0000232 self.assertRaises(ValueError, chr, 1<<24)
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000233 self.assertEqual(chr(sys.maxunicode),
234 str(('\\U%08x' % (sys.maxunicode)).encode("ascii"),
235 'unicode-escape'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000236 self.assertRaises(TypeError, chr)
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000237 self.assertEqual(chr(0x0000FFFF), "\U0000FFFF")
238 self.assertEqual(chr(0x00010000), "\U00010000")
239 self.assertEqual(chr(0x00010001), "\U00010001")
240 self.assertEqual(chr(0x000FFFFE), "\U000FFFFE")
241 self.assertEqual(chr(0x000FFFFF), "\U000FFFFF")
242 self.assertEqual(chr(0x00100000), "\U00100000")
243 self.assertEqual(chr(0x00100001), "\U00100001")
244 self.assertEqual(chr(0x0010FFFE), "\U0010FFFE")
245 self.assertEqual(chr(0x0010FFFF), "\U0010FFFF")
246 self.assertRaises(ValueError, chr, -1)
247 self.assertRaises(ValueError, chr, 0x00110000)
Amaury Forgeot d'Arc7888d082008-08-01 01:06:32 +0000248 self.assertRaises((OverflowError, ValueError), chr, 2**32)
Walter Dörwald919497e2003-01-19 16:23:59 +0000249
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000250 def test_cmp(self):
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000251 self.assertTrue(not hasattr(builtins, "cmp"))
Walter Dörwald919497e2003-01-19 16:23:59 +0000252
Walter Dörwald919497e2003-01-19 16:23:59 +0000253 def test_compile(self):
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000254 compile('print(1)\n', '', 'exec')
Amaury Forgeot d'Arcaf593462007-11-22 20:53:01 +0000255 bom = b'\xef\xbb\xbf'
256 compile(bom + b'print(1)\n', '', 'exec')
Guido van Rossumd8faa362007-04-27 19:54:29 +0000257 compile(source='pass', filename='?', mode='exec')
258 compile(dont_inherit=0, filename='tmp', source='0', mode='eval')
259 compile('pass', '?', dont_inherit=1, mode='exec')
Benjamin Peterson60320cb2008-09-26 21:49:22 +0000260 compile(memoryview(b"text"), "name", "exec")
Walter Dörwald919497e2003-01-19 16:23:59 +0000261 self.assertRaises(TypeError, compile)
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000262 self.assertRaises(ValueError, compile, 'print(42)\n', '<string>', 'badmode')
263 self.assertRaises(ValueError, compile, 'print(42)\n', '<string>', 'single', 0xff)
Neal Norwitzfcf44352005-11-27 20:37:43 +0000264 self.assertRaises(TypeError, compile, chr(0), 'f', 'exec')
Guido van Rossumd8faa362007-04-27 19:54:29 +0000265 self.assertRaises(TypeError, compile, 'pass', '?', 'exec',
266 mode='eval', source='0', filename='tmp')
Walter Dörwald1f5947b2007-05-22 16:52:54 +0000267 compile('print("\xe5")\n', '', 'exec')
268 self.assertRaises(TypeError, compile, chr(0), 'f', 'exec')
269 self.assertRaises(ValueError, compile, str('a = 1'), 'f', 'bad')
Guido van Rossumd8faa362007-04-27 19:54:29 +0000270
Walter Dörwald919497e2003-01-19 16:23:59 +0000271 def test_delattr(self):
Walter Dörwald919497e2003-01-19 16:23:59 +0000272 sys.spam = 1
273 delattr(sys, 'spam')
274 self.assertRaises(TypeError, delattr)
275
276 def test_dir(self):
Georg Brandle32b4222007-03-10 22:13:27 +0000277 # dir(wrong number of arguments)
Walter Dörwald919497e2003-01-19 16:23:59 +0000278 self.assertRaises(TypeError, dir, 42, 42)
279
Georg Brandle32b4222007-03-10 22:13:27 +0000280 # dir() - local scope
281 local_var = 1
Benjamin Peterson577473f2010-01-19 00:09:57 +0000282 self.assertIn('local_var', dir())
Georg Brandle32b4222007-03-10 22:13:27 +0000283
284 # dir(module)
Benjamin Peterson577473f2010-01-19 00:09:57 +0000285 self.assertIn('exit', dir(sys))
Georg Brandle32b4222007-03-10 22:13:27 +0000286
287 # dir(module_with_invalid__dict__)
Georg Brandle32b4222007-03-10 22:13:27 +0000288 class Foo(types.ModuleType):
289 __dict__ = 8
290 f = Foo("foo")
291 self.assertRaises(TypeError, dir, f)
292
293 # dir(type)
Benjamin Peterson577473f2010-01-19 00:09:57 +0000294 self.assertIn("strip", dir(str))
295 self.assertNotIn("__mro__", dir(str))
Georg Brandle32b4222007-03-10 22:13:27 +0000296
297 # dir(obj)
298 class Foo(object):
299 def __init__(self):
300 self.x = 7
301 self.y = 8
302 self.z = 9
303 f = Foo()
Benjamin Peterson577473f2010-01-19 00:09:57 +0000304 self.assertIn("y", dir(f))
Georg Brandle32b4222007-03-10 22:13:27 +0000305
306 # dir(obj_no__dict__)
307 class Foo(object):
308 __slots__ = []
309 f = Foo()
Benjamin Peterson577473f2010-01-19 00:09:57 +0000310 self.assertIn("__repr__", dir(f))
Georg Brandle32b4222007-03-10 22:13:27 +0000311
312 # dir(obj_no__class__with__dict__)
313 # (an ugly trick to cause getattr(f, "__class__") to fail)
314 class Foo(object):
315 __slots__ = ["__class__", "__dict__"]
316 def __init__(self):
317 self.bar = "wow"
318 f = Foo()
Benjamin Peterson577473f2010-01-19 00:09:57 +0000319 self.assertNotIn("__repr__", dir(f))
320 self.assertIn("bar", dir(f))
Georg Brandle32b4222007-03-10 22:13:27 +0000321
322 # dir(obj_using __dir__)
323 class Foo(object):
324 def __dir__(self):
325 return ["kan", "ga", "roo"]
326 f = Foo()
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000327 self.assertTrue(dir(f) == ["ga", "kan", "roo"])
Georg Brandle32b4222007-03-10 22:13:27 +0000328
329 # dir(obj__dir__not_list)
330 class Foo(object):
331 def __dir__(self):
332 return 7
333 f = Foo()
334 self.assertRaises(TypeError, dir, f)
335
Collin Winter3eed7652007-08-14 17:53:54 +0000336 # dir(traceback)
337 try:
338 raise IndexError
339 except:
340 self.assertEqual(len(dir(sys.exc_info()[2])), 4)
341
342
Walter Dörwald919497e2003-01-19 16:23:59 +0000343 def test_divmod(self):
344 self.assertEqual(divmod(12, 7), (1, 5))
345 self.assertEqual(divmod(-12, 7), (-2, 2))
346 self.assertEqual(divmod(12, -7), (-2, -2))
347 self.assertEqual(divmod(-12, -7), (1, -5))
348
Mark Dickinson5c2db372009-12-05 20:28:34 +0000349 self.assertEqual(divmod(-sys.maxsize-1, -1), (sys.maxsize+1, 0))
Raymond Hettinger5ea7e312004-09-30 07:47:20 +0000350
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000351 self.assertTrue(not fcmp(divmod(3.25, 1.0), (3.0, 0.25)))
352 self.assertTrue(not fcmp(divmod(-3.25, 1.0), (-4.0, 0.75)))
353 self.assertTrue(not fcmp(divmod(3.25, -1.0), (-4.0, -0.75)))
354 self.assertTrue(not fcmp(divmod(-3.25, -1.0), (3.0, -0.25)))
Walter Dörwald919497e2003-01-19 16:23:59 +0000355
356 self.assertRaises(TypeError, divmod)
357
358 def test_eval(self):
359 self.assertEqual(eval('1+1'), 2)
360 self.assertEqual(eval(' 1+1\n'), 2)
361 globals = {'a': 1, 'b': 2}
362 locals = {'b': 200, 'c': 300}
363 self.assertEqual(eval('a', globals) , 1)
364 self.assertEqual(eval('a', globals, locals), 1)
365 self.assertEqual(eval('b', globals, locals), 200)
366 self.assertEqual(eval('c', globals, locals), 300)
Walter Dörwald919497e2003-01-19 16:23:59 +0000367 globals = {'a': 1, 'b': 2}
368 locals = {'b': 200, 'c': 300}
Amaury Forgeot d'Arcaf593462007-11-22 20:53:01 +0000369 bom = b'\xef\xbb\xbf'
370 self.assertEqual(eval(bom + b'a', globals, locals), 1)
Walter Dörwald1f5947b2007-05-22 16:52:54 +0000371 self.assertEqual(eval('"\xe5"', globals), "\xe5")
Walter Dörwald919497e2003-01-19 16:23:59 +0000372 self.assertRaises(TypeError, eval)
373 self.assertRaises(TypeError, eval, ())
Amaury Forgeot d'Arcaf593462007-11-22 20:53:01 +0000374 self.assertRaises(SyntaxError, eval, bom[:2] + b'a')
Walter Dörwald919497e2003-01-19 16:23:59 +0000375
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000376 def test_general_eval(self):
377 # Tests that general mappings can be used for the locals argument
378
379 class M:
380 "Test mapping interface versus possible calls from eval()."
381 def __getitem__(self, key):
382 if key == 'a':
383 return 12
384 raise KeyError
Guido van Rossumcd70eee2007-02-11 18:53:00 +0000385 def keys(self):
386 return list('xyz')
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000387
388 m = M()
389 g = globals()
390 self.assertEqual(eval('a', g, m), 12)
391 self.assertRaises(NameError, eval, 'b', g, m)
392 self.assertEqual(eval('dir()', g, m), list('xyz'))
393 self.assertEqual(eval('globals()', g, m), g)
394 self.assertEqual(eval('locals()', g, m), m)
Raymond Hettinger513ffe82004-07-06 13:44:41 +0000395 self.assertRaises(TypeError, eval, 'a', m)
Raymond Hettinger66bd2332004-08-02 08:30:07 +0000396 class A:
397 "Non-mapping"
398 pass
399 m = A()
400 self.assertRaises(TypeError, eval, 'a', g, m)
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000401
402 # Verify that dict subclasses work as well
403 class D(dict):
404 def __getitem__(self, key):
405 if key == 'a':
406 return 12
407 return dict.__getitem__(self, key)
Guido van Rossumcd70eee2007-02-11 18:53:00 +0000408 def keys(self):
409 return list('xyz')
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000410
411 d = D()
412 self.assertEqual(eval('a', g, d), 12)
413 self.assertRaises(NameError, eval, 'b', g, d)
414 self.assertEqual(eval('dir()', g, d), list('xyz'))
415 self.assertEqual(eval('globals()', g, d), g)
416 self.assertEqual(eval('locals()', g, d), d)
417
418 # Verify locals stores (used by list comps)
419 eval('[locals() for i in (2,3)]', g, d)
Raymond Hettingerf80680d2008-02-06 00:07:11 +0000420 eval('[locals() for i in (2,3)]', g, collections.UserDict())
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000421
422 class SpreadSheet:
423 "Sample application showing nested, calculated lookups."
424 _cells = {}
425 def __setitem__(self, key, formula):
426 self._cells[key] = formula
Thomas Wouters73e5a5b2006-06-08 15:35:45 +0000427 def __getitem__(self, key):
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000428 return eval(self._cells[key], globals(), self)
429
430 ss = SpreadSheet()
431 ss['a1'] = '5'
432 ss['a2'] = 'a1*6'
433 ss['a3'] = 'a2*7'
434 self.assertEqual(ss['a3'], 210)
435
Raymond Hettinger2a7dede2004-08-07 04:55:30 +0000436 # Verify that dir() catches a non-list returned by eval
437 # SF bug #1004669
438 class C:
439 def __getitem__(self, item):
440 raise KeyError(item)
Guido van Rossumcd70eee2007-02-11 18:53:00 +0000441 def keys(self):
442 return 1 # used to be 'a' but that's no longer an error
Raymond Hettinger2a7dede2004-08-07 04:55:30 +0000443 self.assertRaises(TypeError, eval, 'dir()', globals(), C())
444
Georg Brandl7cae87c2006-09-06 06:51:57 +0000445 def test_exec(self):
446 g = {}
447 exec('z = 1', g)
448 if '__builtins__' in g:
449 del g['__builtins__']
450 self.assertEqual(g, {'z': 1})
451
Guido van Rossumef87d6e2007-05-02 19:09:54 +0000452 exec('z = 1+1', g)
Georg Brandl7cae87c2006-09-06 06:51:57 +0000453 if '__builtins__' in g:
454 del g['__builtins__']
455 self.assertEqual(g, {'z': 2})
456 g = {}
457 l = {}
458
Brett Cannon77628992010-03-20 20:59:33 +0000459 with check_warnings():
460 warnings.filterwarnings("ignore", "global statement",
461 module="<string>")
462 exec('global a; a = 1; b = 2', g, l)
Georg Brandl7cae87c2006-09-06 06:51:57 +0000463 if '__builtins__' in g:
464 del g['__builtins__']
465 if '__builtins__' in l:
466 del l['__builtins__']
467 self.assertEqual((g, l), ({'a': 1}, {'b': 2}))
468
Amaury Forgeot d'Arc9ed77352008-04-04 23:25:27 +0000469 def test_exec_redirected(self):
470 savestdout = sys.stdout
471 sys.stdout = None # Whatever that cannot flush()
472 try:
473 # Used to raise SystemError('error return without exception set')
474 exec('a')
475 except NameError:
476 pass
477 finally:
478 sys.stdout = savestdout
479
Walter Dörwald919497e2003-01-19 16:23:59 +0000480 def test_filter(self):
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000481 self.assertEqual(list(filter(lambda c: 'a' <= c <= 'z', 'Hello World')), list('elloorld'))
482 self.assertEqual(list(filter(None, [1, 'hello', [], [3], '', None, 9, 0])), [1, 'hello', [3], 9])
483 self.assertEqual(list(filter(lambda x: x > 0, [1, -3, 9, 0, 2])), [1, 9, 2])
484 self.assertEqual(list(filter(None, Squares(10))), [1, 4, 9, 16, 25, 36, 49, 64, 81])
485 self.assertEqual(list(filter(lambda x: x%2, Squares(10))), [1, 9, 25, 49, 81])
Walter Dörwald919497e2003-01-19 16:23:59 +0000486 def identity(item):
487 return 1
488 filter(identity, Squares(5))
489 self.assertRaises(TypeError, filter)
490 class BadSeq(object):
Tim Petersf2715e02003-02-19 02:35:07 +0000491 def __getitem__(self, index):
492 if index<4:
493 return 42
494 raise ValueError
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000495 self.assertRaises(ValueError, list, filter(lambda x: x, BadSeq()))
Walter Dörwald919497e2003-01-19 16:23:59 +0000496 def badfunc():
497 pass
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000498 self.assertRaises(TypeError, list, filter(badfunc, range(5)))
Walter Dörwald919497e2003-01-19 16:23:59 +0000499
Walter Dörwaldbf517072003-01-27 15:57:14 +0000500 # test bltinmodule.c::filtertuple()
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000501 self.assertEqual(list(filter(None, (1, 2))), [1, 2])
502 self.assertEqual(list(filter(lambda x: x>=3, (1, 2, 3, 4))), [3, 4])
503 self.assertRaises(TypeError, list, filter(42, (1, 2)))
Walter Dörwaldc3da83f2003-02-04 20:24:45 +0000504
Walter Dörwald919497e2003-01-19 16:23:59 +0000505 def test_getattr(self):
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000506 self.assertTrue(getattr(sys, 'stdout') is sys.stdout)
Walter Dörwald919497e2003-01-19 16:23:59 +0000507 self.assertRaises(TypeError, getattr, sys, 1)
508 self.assertRaises(TypeError, getattr, sys, 1, "foo")
509 self.assertRaises(TypeError, getattr)
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000510 self.assertRaises(AttributeError, getattr, sys, chr(sys.maxunicode))
Victor Stinner624dbf62010-03-12 17:17:58 +0000511 # unicode surrogates are not encodable to the default encoding (utf8)
512 self.assertRaises(AttributeError, getattr, 1, "\uDAD1\uD51E")
Walter Dörwald919497e2003-01-19 16:23:59 +0000513
514 def test_hasattr(self):
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000515 self.assertTrue(hasattr(sys, 'stdout'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000516 self.assertRaises(TypeError, hasattr, sys, 1)
517 self.assertRaises(TypeError, hasattr)
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000518 self.assertEqual(False, hasattr(sys, chr(sys.maxunicode)))
Walter Dörwald919497e2003-01-19 16:23:59 +0000519
Benjamin Peterson17689992010-08-24 03:26:23 +0000520 # Check that hasattr propagates all exceptions outside of
521 # AttributeError.
Alexandre Vassalottieca20b62008-05-16 02:54:33 +0000522 class A:
523 def __getattr__(self, what):
Benjamin Peterson17689992010-08-24 03:26:23 +0000524 raise SystemExit
525 self.assertRaises(SystemExit, hasattr, A(), "b")
Alexandre Vassalottieca20b62008-05-16 02:54:33 +0000526 class B:
527 def __getattr__(self, what):
Benjamin Peterson17689992010-08-24 03:26:23 +0000528 raise ValueError
529 self.assertRaises(ValueError, hasattr, B(), "b")
Alexandre Vassalottieca20b62008-05-16 02:54:33 +0000530
Walter Dörwald919497e2003-01-19 16:23:59 +0000531 def test_hash(self):
532 hash(None)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000533 self.assertEqual(hash(1), hash(1))
Walter Dörwald919497e2003-01-19 16:23:59 +0000534 self.assertEqual(hash(1), hash(1.0))
535 hash('spam')
Guido van Rossum98297ee2007-11-06 21:34:58 +0000536 self.assertEqual(hash('spam'), hash(b'spam'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000537 hash((0,1,2,3))
538 def f(): pass
539 self.assertRaises(TypeError, hash, [])
540 self.assertRaises(TypeError, hash, {})
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000541 # Bug 1536021: Allow hash to return long objects
542 class X:
543 def __hash__(self):
544 return 2**100
Ezio Melottib3aedd42010-11-20 19:04:17 +0000545 self.assertEqual(type(hash(X())), int)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000546 class Z(int):
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000547 def __hash__(self):
548 return self
Ezio Melottib3aedd42010-11-20 19:04:17 +0000549 self.assertEqual(hash(Z(42)), hash(42))
Walter Dörwald919497e2003-01-19 16:23:59 +0000550
551 def test_hex(self):
552 self.assertEqual(hex(16), '0x10')
Guido van Rossume2a383d2007-01-15 16:59:06 +0000553 self.assertEqual(hex(-16), '-0x10')
Walter Dörwald919497e2003-01-19 16:23:59 +0000554 self.assertRaises(TypeError, hex, {})
555
556 def test_id(self):
557 id(None)
558 id(1)
Walter Dörwald919497e2003-01-19 16:23:59 +0000559 id(1.0)
560 id('spam')
561 id((0,1,2,3))
562 id([0,1,2,3])
563 id({'spam': 1, 'eggs': 2, 'ham': 3})
564
Guido van Rossuma88a0332007-02-26 16:59:55 +0000565 # Test input() later, alphabetized as if it were raw_input
566
Walter Dörwald919497e2003-01-19 16:23:59 +0000567 def test_iter(self):
568 self.assertRaises(TypeError, iter)
569 self.assertRaises(TypeError, iter, 42, 42)
570 lists = [("1", "2"), ["1", "2"], "12"]
Walter Dörwald919497e2003-01-19 16:23:59 +0000571 for l in lists:
572 i = iter(l)
Georg Brandla18af4e2007-04-21 15:47:16 +0000573 self.assertEqual(next(i), '1')
574 self.assertEqual(next(i), '2')
575 self.assertRaises(StopIteration, next, i)
Walter Dörwald919497e2003-01-19 16:23:59 +0000576
577 def test_isinstance(self):
578 class C:
579 pass
580 class D(C):
581 pass
582 class E:
583 pass
584 c = C()
585 d = D()
586 e = E()
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000587 self.assertTrue(isinstance(c, C))
588 self.assertTrue(isinstance(d, C))
589 self.assertTrue(not isinstance(e, C))
590 self.assertTrue(not isinstance(c, D))
591 self.assertTrue(not isinstance('foo', E))
Walter Dörwald919497e2003-01-19 16:23:59 +0000592 self.assertRaises(TypeError, isinstance, E, 'foo')
593 self.assertRaises(TypeError, isinstance)
594
595 def test_issubclass(self):
596 class C:
597 pass
598 class D(C):
599 pass
600 class E:
601 pass
602 c = C()
603 d = D()
604 e = E()
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000605 self.assertTrue(issubclass(D, C))
606 self.assertTrue(issubclass(C, C))
607 self.assertTrue(not issubclass(C, D))
Walter Dörwald919497e2003-01-19 16:23:59 +0000608 self.assertRaises(TypeError, issubclass, 'foo', E)
609 self.assertRaises(TypeError, issubclass, E, 'foo')
610 self.assertRaises(TypeError, issubclass)
611
612 def test_len(self):
613 self.assertEqual(len('123'), 3)
614 self.assertEqual(len(()), 0)
615 self.assertEqual(len((1, 2, 3, 4)), 4)
616 self.assertEqual(len([1, 2, 3, 4]), 4)
617 self.assertEqual(len({}), 0)
618 self.assertEqual(len({'a':1, 'b': 2}), 2)
619 class BadSeq:
620 def __len__(self):
621 raise ValueError
622 self.assertRaises(ValueError, len, BadSeq())
Benjamin Petersonee1ae7c2009-02-08 21:07:20 +0000623 class InvalidLen:
624 def __len__(self):
625 return None
626 self.assertRaises(TypeError, len, InvalidLen())
627 class FloatLen:
628 def __len__(self):
629 return 4.5
630 self.assertRaises(TypeError, len, FloatLen())
631 class HugeLen:
632 def __len__(self):
633 return sys.maxsize + 1
634 self.assertRaises(OverflowError, len, HugeLen())
Mark Dickinsonfb3dc942010-05-25 19:06:24 +0000635 class NoLenMethod(object): pass
636 self.assertRaises(TypeError, len, NoLenMethod())
Walter Dörwald919497e2003-01-19 16:23:59 +0000637
Walter Dörwald919497e2003-01-19 16:23:59 +0000638 def test_map(self):
639 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000640 list(map(lambda x: x*x, range(1,4))),
Walter Dörwald919497e2003-01-19 16:23:59 +0000641 [1, 4, 9]
642 )
643 try:
644 from math import sqrt
645 except ImportError:
646 def sqrt(x):
647 return pow(x, 0.5)
648 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000649 list(map(lambda x: list(map(sqrt, x)), [[16, 4], [81, 9]])),
Walter Dörwald919497e2003-01-19 16:23:59 +0000650 [[4.0, 2.0], [9.0, 3.0]]
651 )
652 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000653 list(map(lambda x, y: x+y, [1,3,2], [9,1,4])),
Walter Dörwald919497e2003-01-19 16:23:59 +0000654 [10, 4, 6]
655 )
656
657 def plus(*v):
658 accu = 0
659 for i in v: accu = accu + i
660 return accu
661 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000662 list(map(plus, [1, 3, 7])),
Walter Dörwald919497e2003-01-19 16:23:59 +0000663 [1, 3, 7]
664 )
665 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000666 list(map(plus, [1, 3, 7], [4, 9, 2])),
Walter Dörwald919497e2003-01-19 16:23:59 +0000667 [1+4, 3+9, 7+2]
668 )
669 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000670 list(map(plus, [1, 3, 7], [4, 9, 2], [1, 1, 0])),
Walter Dörwald919497e2003-01-19 16:23:59 +0000671 [1+4+1, 3+9+1, 7+2+0]
672 )
673 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000674 list(map(int, Squares(10))),
Walter Dörwald919497e2003-01-19 16:23:59 +0000675 [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
676 )
Guido van Rossum47b9ff62006-08-24 00:41:19 +0000677 def Max(a, b):
678 if a is None:
679 return b
680 if b is None:
681 return a
682 return max(a, b)
Walter Dörwald919497e2003-01-19 16:23:59 +0000683 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000684 list(map(Max, Squares(3), Squares(2))),
685 [0, 1]
Walter Dörwald919497e2003-01-19 16:23:59 +0000686 )
687 self.assertRaises(TypeError, map)
688 self.assertRaises(TypeError, map, lambda x: x, 42)
Walter Dörwald919497e2003-01-19 16:23:59 +0000689 class BadSeq:
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000690 def __iter__(self):
Walter Dörwald919497e2003-01-19 16:23:59 +0000691 raise ValueError
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000692 yield None
693 self.assertRaises(ValueError, list, map(lambda x: x, BadSeq()))
Neal Norwitzfcf44352005-11-27 20:37:43 +0000694 def badfunc(x):
695 raise RuntimeError
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000696 self.assertRaises(RuntimeError, list, map(badfunc, range(5)))
Walter Dörwald919497e2003-01-19 16:23:59 +0000697
698 def test_max(self):
699 self.assertEqual(max('123123'), '3')
700 self.assertEqual(max(1, 2, 3), 3)
701 self.assertEqual(max((1, 2, 3, 1, 2, 3)), 3)
702 self.assertEqual(max([1, 2, 3, 1, 2, 3]), 3)
703
Guido van Rossume2a383d2007-01-15 16:59:06 +0000704 self.assertEqual(max(1, 2, 3.0), 3.0)
705 self.assertEqual(max(1, 2.0, 3), 3)
706 self.assertEqual(max(1.0, 2, 3), 3)
Walter Dörwald919497e2003-01-19 16:23:59 +0000707
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +0000708 for stmt in (
709 "max(key=int)", # no args
710 "max(1, key=int)", # single arg not iterable
711 "max(1, 2, keystone=int)", # wrong keyword
712 "max(1, 2, key=int, abc=int)", # two many keywords
713 "max(1, 2, key=1)", # keyfunc is not callable
714 ):
Tim Peters7f061872004-12-07 21:17:46 +0000715 try:
Georg Brandl7cae87c2006-09-06 06:51:57 +0000716 exec(stmt, globals())
Tim Peters7f061872004-12-07 21:17:46 +0000717 except TypeError:
718 pass
719 else:
720 self.fail(stmt)
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +0000721
722 self.assertEqual(max((1,), key=neg), 1) # one elem iterable
723 self.assertEqual(max((1,2), key=neg), 1) # two elem iterable
724 self.assertEqual(max(1, 2, key=neg), 1) # two elems
725
726 data = [random.randrange(200) for i in range(100)]
727 keys = dict((elem, random.randrange(50)) for elem in data)
728 f = keys.__getitem__
729 self.assertEqual(max(data, key=f),
730 sorted(reversed(data), key=f)[-1])
731
Walter Dörwald919497e2003-01-19 16:23:59 +0000732 def test_min(self):
733 self.assertEqual(min('123123'), '1')
734 self.assertEqual(min(1, 2, 3), 1)
735 self.assertEqual(min((1, 2, 3, 1, 2, 3)), 1)
736 self.assertEqual(min([1, 2, 3, 1, 2, 3]), 1)
737
Guido van Rossume2a383d2007-01-15 16:59:06 +0000738 self.assertEqual(min(1, 2, 3.0), 1)
739 self.assertEqual(min(1, 2.0, 3), 1)
740 self.assertEqual(min(1.0, 2, 3), 1.0)
Walter Dörwald919497e2003-01-19 16:23:59 +0000741
742 self.assertRaises(TypeError, min)
743 self.assertRaises(TypeError, min, 42)
744 self.assertRaises(ValueError, min, ())
745 class BadSeq:
746 def __getitem__(self, index):
747 raise ValueError
748 self.assertRaises(ValueError, min, BadSeq())
Walter Dörwald919497e2003-01-19 16:23:59 +0000749
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +0000750 for stmt in (
751 "min(key=int)", # no args
752 "min(1, key=int)", # single arg not iterable
753 "min(1, 2, keystone=int)", # wrong keyword
754 "min(1, 2, key=int, abc=int)", # two many keywords
755 "min(1, 2, key=1)", # keyfunc is not callable
756 ):
Tim Peters7f061872004-12-07 21:17:46 +0000757 try:
Georg Brandl7cae87c2006-09-06 06:51:57 +0000758 exec(stmt, globals())
Tim Peters7f061872004-12-07 21:17:46 +0000759 except TypeError:
760 pass
761 else:
762 self.fail(stmt)
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +0000763
764 self.assertEqual(min((1,), key=neg), 1) # one elem iterable
765 self.assertEqual(min((1,2), key=neg), 2) # two elem iterable
766 self.assertEqual(min(1, 2, key=neg), 2) # two elems
767
768 data = [random.randrange(200) for i in range(100)]
769 keys = dict((elem, random.randrange(50)) for elem in data)
770 f = keys.__getitem__
771 self.assertEqual(min(data, key=f),
772 sorted(data, key=f)[0])
773
Georg Brandla18af4e2007-04-21 15:47:16 +0000774 def test_next(self):
775 it = iter(range(2))
776 self.assertEqual(next(it), 0)
777 self.assertEqual(next(it), 1)
778 self.assertRaises(StopIteration, next, it)
779 self.assertRaises(StopIteration, next, it)
Ezio Melottib3aedd42010-11-20 19:04:17 +0000780 self.assertEqual(next(it, 42), 42)
Georg Brandla18af4e2007-04-21 15:47:16 +0000781
782 class Iter(object):
783 def __iter__(self):
784 return self
785 def __next__(self):
786 raise StopIteration
787
788 it = iter(Iter())
Ezio Melottib3aedd42010-11-20 19:04:17 +0000789 self.assertEqual(next(it, 42), 42)
Georg Brandla18af4e2007-04-21 15:47:16 +0000790 self.assertRaises(StopIteration, next, it)
791
792 def gen():
793 yield 1
794 return
795
796 it = gen()
Ezio Melottib3aedd42010-11-20 19:04:17 +0000797 self.assertEqual(next(it), 1)
Georg Brandla18af4e2007-04-21 15:47:16 +0000798 self.assertRaises(StopIteration, next, it)
Ezio Melottib3aedd42010-11-20 19:04:17 +0000799 self.assertEqual(next(it, 42), 42)
Georg Brandla18af4e2007-04-21 15:47:16 +0000800
Walter Dörwald919497e2003-01-19 16:23:59 +0000801 def test_oct(self):
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000802 self.assertEqual(oct(100), '0o144')
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000803 self.assertEqual(oct(-100), '-0o144')
Walter Dörwald919497e2003-01-19 16:23:59 +0000804 self.assertRaises(TypeError, oct, ())
805
806 def write_testfile(self):
Guido van Rossuma88a0332007-02-26 16:59:55 +0000807 # NB the first 4 lines are also used to test input, below
Walter Dörwald919497e2003-01-19 16:23:59 +0000808 fp = open(TESTFN, 'w')
809 try:
810 fp.write('1+1\n')
Walter Dörwald919497e2003-01-19 16:23:59 +0000811 fp.write('The quick brown fox jumps over the lazy dog')
812 fp.write('.\n')
813 fp.write('Dear John\n')
814 fp.write('XXX'*100)
815 fp.write('YYY'*100)
816 finally:
817 fp.close()
818
819 def test_open(self):
820 self.write_testfile()
821 fp = open(TESTFN, 'r')
822 try:
823 self.assertEqual(fp.readline(4), '1+1\n')
Walter Dörwald919497e2003-01-19 16:23:59 +0000824 self.assertEqual(fp.readline(), 'The quick brown fox jumps over the lazy dog.\n')
825 self.assertEqual(fp.readline(4), 'Dear')
826 self.assertEqual(fp.readline(100), ' John\n')
827 self.assertEqual(fp.read(300), 'XXX'*100)
828 self.assertEqual(fp.read(1000), 'YYY'*100)
829 finally:
830 fp.close()
831 unlink(TESTFN)
832
833 def test_ord(self):
834 self.assertEqual(ord(' '), 32)
835 self.assertEqual(ord('A'), 65)
836 self.assertEqual(ord('a'), 97)
Guido van Rossumf9e91c92007-05-08 21:05:48 +0000837 self.assertEqual(ord('\x80'), 128)
838 self.assertEqual(ord('\xff'), 255)
839
840 self.assertEqual(ord(b' '), 32)
841 self.assertEqual(ord(b'A'), 65)
842 self.assertEqual(ord(b'a'), 97)
843 self.assertEqual(ord(b'\x80'), 128)
844 self.assertEqual(ord(b'\xff'), 255)
845
Walter Dörwald1f5947b2007-05-22 16:52:54 +0000846 self.assertEqual(ord(chr(sys.maxunicode)), sys.maxunicode)
Walter Dörwald919497e2003-01-19 16:23:59 +0000847 self.assertRaises(TypeError, ord, 42)
Walter Dörwald919497e2003-01-19 16:23:59 +0000848
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000849 self.assertEqual(ord(chr(0x10FFFF)), 0x10FFFF)
850 self.assertEqual(ord("\U0000FFFF"), 0x0000FFFF)
851 self.assertEqual(ord("\U00010000"), 0x00010000)
852 self.assertEqual(ord("\U00010001"), 0x00010001)
853 self.assertEqual(ord("\U000FFFFE"), 0x000FFFFE)
854 self.assertEqual(ord("\U000FFFFF"), 0x000FFFFF)
855 self.assertEqual(ord("\U00100000"), 0x00100000)
856 self.assertEqual(ord("\U00100001"), 0x00100001)
857 self.assertEqual(ord("\U0010FFFE"), 0x0010FFFE)
858 self.assertEqual(ord("\U0010FFFF"), 0x0010FFFF)
859
Walter Dörwald919497e2003-01-19 16:23:59 +0000860 def test_pow(self):
861 self.assertEqual(pow(0,0), 1)
862 self.assertEqual(pow(0,1), 0)
863 self.assertEqual(pow(1,0), 1)
864 self.assertEqual(pow(1,1), 1)
865
866 self.assertEqual(pow(2,0), 1)
867 self.assertEqual(pow(2,10), 1024)
868 self.assertEqual(pow(2,20), 1024*1024)
869 self.assertEqual(pow(2,30), 1024*1024*1024)
870
871 self.assertEqual(pow(-2,0), 1)
872 self.assertEqual(pow(-2,1), -2)
873 self.assertEqual(pow(-2,2), 4)
874 self.assertEqual(pow(-2,3), -8)
875
Walter Dörwald919497e2003-01-19 16:23:59 +0000876 self.assertAlmostEqual(pow(0.,0), 1.)
877 self.assertAlmostEqual(pow(0.,1), 0.)
878 self.assertAlmostEqual(pow(1.,0), 1.)
879 self.assertAlmostEqual(pow(1.,1), 1.)
880
881 self.assertAlmostEqual(pow(2.,0), 1.)
882 self.assertAlmostEqual(pow(2.,10), 1024.)
883 self.assertAlmostEqual(pow(2.,20), 1024.*1024.)
884 self.assertAlmostEqual(pow(2.,30), 1024.*1024.*1024.)
885
886 self.assertAlmostEqual(pow(-2.,0), 1.)
887 self.assertAlmostEqual(pow(-2.,1), -2.)
888 self.assertAlmostEqual(pow(-2.,2), 4.)
889 self.assertAlmostEqual(pow(-2.,3), -8.)
890
Mark Dickinson5c2db372009-12-05 20:28:34 +0000891 for x in 2, 2.0:
892 for y in 10, 10.0:
893 for z in 1000, 1000.0:
Walter Dörwald919497e2003-01-19 16:23:59 +0000894 if isinstance(x, float) or \
895 isinstance(y, float) or \
896 isinstance(z, float):
897 self.assertRaises(TypeError, pow, x, y, z)
898 else:
899 self.assertAlmostEqual(pow(x, y, z), 24.0)
900
Jeffrey Yasskin3404b3c2007-09-07 15:15:49 +0000901 self.assertAlmostEqual(pow(-1, 0.5), 1j)
902 self.assertAlmostEqual(pow(-1, 1/3), 0.5 + 0.8660254037844386j)
903
Walter Dörwald919497e2003-01-19 16:23:59 +0000904 self.assertRaises(TypeError, pow, -1, -2, 3)
905 self.assertRaises(ValueError, pow, 1, 2, 0)
Walter Dörwald919497e2003-01-19 16:23:59 +0000906
907 self.assertRaises(TypeError, pow)
908
Guido van Rossuma88a0332007-02-26 16:59:55 +0000909 def test_input(self):
910 self.write_testfile()
911 fp = open(TESTFN, 'r')
912 savestdin = sys.stdin
913 savestdout = sys.stdout # Eats the echo
914 try:
915 sys.stdin = fp
916 sys.stdout = BitBucket()
917 self.assertEqual(input(), "1+1")
Guido van Rossuma88a0332007-02-26 16:59:55 +0000918 self.assertEqual(input(), 'The quick brown fox jumps over the lazy dog.')
919 self.assertEqual(input('testing\n'), 'Dear John')
920
921 # SF 1535165: don't segfault on closed stdin
922 # sys.stdout must be a regular file for triggering
923 sys.stdout = savestdout
924 sys.stdin.close()
925 self.assertRaises(ValueError, input)
926
927 sys.stdout = BitBucket()
Guido van Rossum34d19282007-08-09 01:03:29 +0000928 sys.stdin = io.StringIO("NULL\0")
Guido van Rossuma88a0332007-02-26 16:59:55 +0000929 self.assertRaises(TypeError, input, 42, 42)
Guido van Rossum34d19282007-08-09 01:03:29 +0000930 sys.stdin = io.StringIO(" 'whitespace'")
Guido van Rossuma88a0332007-02-26 16:59:55 +0000931 self.assertEqual(input(), " 'whitespace'")
Guido van Rossum34d19282007-08-09 01:03:29 +0000932 sys.stdin = io.StringIO()
Guido van Rossuma88a0332007-02-26 16:59:55 +0000933 self.assertRaises(EOFError, input)
934
935 del sys.stdout
936 self.assertRaises(RuntimeError, input, 'prompt')
937 del sys.stdin
938 self.assertRaises(RuntimeError, input, 'prompt')
939 finally:
940 sys.stdin = savestdin
941 sys.stdout = savestdout
942 fp.close()
943 unlink(TESTFN)
944
Walter Dörwald919497e2003-01-19 16:23:59 +0000945 def test_repr(self):
946 self.assertEqual(repr(''), '\'\'')
947 self.assertEqual(repr(0), '0')
Walter Dörwald919497e2003-01-19 16:23:59 +0000948 self.assertEqual(repr(()), '()')
949 self.assertEqual(repr([]), '[]')
950 self.assertEqual(repr({}), '{}')
951 a = []
952 a.append(a)
953 self.assertEqual(repr(a), '[[...]]')
954 a = {}
955 a[0] = a
956 self.assertEqual(repr(a), '{0: {...}}')
957
958 def test_round(self):
959 self.assertEqual(round(0.0), 0.0)
Guido van Rossum2fa33db2007-08-23 22:07:24 +0000960 self.assertEqual(type(round(0.0)), int)
Walter Dörwald919497e2003-01-19 16:23:59 +0000961 self.assertEqual(round(1.0), 1.0)
962 self.assertEqual(round(10.0), 10.0)
963 self.assertEqual(round(1000000000.0), 1000000000.0)
964 self.assertEqual(round(1e20), 1e20)
965
966 self.assertEqual(round(-1.0), -1.0)
967 self.assertEqual(round(-10.0), -10.0)
968 self.assertEqual(round(-1000000000.0), -1000000000.0)
969 self.assertEqual(round(-1e20), -1e20)
970
971 self.assertEqual(round(0.1), 0.0)
972 self.assertEqual(round(1.1), 1.0)
973 self.assertEqual(round(10.1), 10.0)
974 self.assertEqual(round(1000000000.1), 1000000000.0)
975
976 self.assertEqual(round(-1.1), -1.0)
977 self.assertEqual(round(-10.1), -10.0)
978 self.assertEqual(round(-1000000000.1), -1000000000.0)
979
980 self.assertEqual(round(0.9), 1.0)
981 self.assertEqual(round(9.9), 10.0)
982 self.assertEqual(round(999999999.9), 1000000000.0)
983
984 self.assertEqual(round(-0.9), -1.0)
985 self.assertEqual(round(-9.9), -10.0)
986 self.assertEqual(round(-999999999.9), -1000000000.0)
987
988 self.assertEqual(round(-8.0, -1), -10.0)
Guido van Rossum2fa33db2007-08-23 22:07:24 +0000989 self.assertEqual(type(round(-8.0, -1)), float)
990
991 self.assertEqual(type(round(-8.0, 0)), float)
992 self.assertEqual(type(round(-8.0, 1)), float)
993
994 # Check even / odd rounding behaviour
995 self.assertEqual(round(5.5), 6)
996 self.assertEqual(round(6.5), 6)
997 self.assertEqual(round(-5.5), -6)
998 self.assertEqual(round(-6.5), -6)
999
1000 # Check behavior on ints
1001 self.assertEqual(round(0), 0)
1002 self.assertEqual(round(8), 8)
1003 self.assertEqual(round(-8), -8)
1004 self.assertEqual(type(round(0)), int)
Mark Dickinson1124e712009-01-28 21:25:58 +00001005 self.assertEqual(type(round(-8, -1)), int)
1006 self.assertEqual(type(round(-8, 0)), int)
1007 self.assertEqual(type(round(-8, 1)), int)
Walter Dörwald919497e2003-01-19 16:23:59 +00001008
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001009 # test new kwargs
1010 self.assertEqual(round(number=-8.0, ndigits=-1), -10.0)
1011
Walter Dörwald919497e2003-01-19 16:23:59 +00001012 self.assertRaises(TypeError, round)
1013
Alex Martelliae211f92007-08-22 23:21:33 +00001014 # test generic rounding delegation for reals
1015 class TestRound:
1016 def __round__(self):
1017 return 23
1018
1019 class TestNoRound:
1020 pass
1021
1022 self.assertEqual(round(TestRound()), 23)
1023
1024 self.assertRaises(TypeError, round, 1, 2, 3)
1025 self.assertRaises(TypeError, round, TestNoRound())
1026
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001027 t = TestNoRound()
1028 t.__round__ = lambda *args: args
1029 self.assertRaises(TypeError, round, t)
1030 self.assertRaises(TypeError, round, t, 0)
1031
Mark Dickinsonad731b92009-11-09 17:12:30 +00001032 # Some versions of glibc for alpha have a bug that affects
1033 # float -> integer rounding (floor, ceil, rint, round) for
1034 # values in the range [2**52, 2**53). See:
1035 #
1036 # http://sources.redhat.com/bugzilla/show_bug.cgi?id=5350
1037 #
1038 # We skip this test on Linux/alpha if it would fail.
1039 linux_alpha = (platform.system().startswith('Linux') and
1040 platform.machine().startswith('alpha'))
1041 system_round_bug = round(5e15+1) != 5e15+1
1042 @unittest.skipIf(linux_alpha and system_round_bug,
1043 "test will fail; failure is probably due to a "
1044 "buggy system round function")
1045 def test_round_large(self):
1046 # Issue #1869: integral floats should remain unchanged
1047 self.assertEqual(round(5e15-1), 5e15-1)
1048 self.assertEqual(round(5e15), 5e15)
1049 self.assertEqual(round(5e15+1), 5e15+1)
1050 self.assertEqual(round(5e15+2), 5e15+2)
1051 self.assertEqual(round(5e15+3), 5e15+3)
1052
Walter Dörwald919497e2003-01-19 16:23:59 +00001053 def test_setattr(self):
Tim Petersf2715e02003-02-19 02:35:07 +00001054 setattr(sys, 'spam', 1)
1055 self.assertEqual(sys.spam, 1)
1056 self.assertRaises(TypeError, setattr, sys, 1, 'spam')
1057 self.assertRaises(TypeError, setattr)
Walter Dörwald919497e2003-01-19 16:23:59 +00001058
Walter Dörwald919497e2003-01-19 16:23:59 +00001059
Alex Martellia70b1912003-04-22 08:12:33 +00001060 def test_sum(self):
1061 self.assertEqual(sum([]), 0)
Guido van Rossum805365e2007-05-07 22:24:25 +00001062 self.assertEqual(sum(list(range(2,8))), 27)
1063 self.assertEqual(sum(iter(list(range(2,8)))), 27)
Alex Martellia70b1912003-04-22 08:12:33 +00001064 self.assertEqual(sum(Squares(10)), 285)
1065 self.assertEqual(sum(iter(Squares(10))), 285)
1066 self.assertEqual(sum([[1], [2], [3]], []), [1, 2, 3])
1067
1068 self.assertRaises(TypeError, sum)
1069 self.assertRaises(TypeError, sum, 42)
1070 self.assertRaises(TypeError, sum, ['a', 'b', 'c'])
1071 self.assertRaises(TypeError, sum, ['a', 'b', 'c'], '')
1072 self.assertRaises(TypeError, sum, [[1], [2], [3]])
1073 self.assertRaises(TypeError, sum, [{2:3}])
1074 self.assertRaises(TypeError, sum, [{2:3}]*2, {2:3})
1075
1076 class BadSeq:
1077 def __getitem__(self, index):
1078 raise ValueError
1079 self.assertRaises(ValueError, sum, BadSeq())
1080
Mark Dickinson3a22b472009-10-17 21:48:16 +00001081 empty = []
1082 sum(([x] for x in range(10)), empty)
1083 self.assertEqual(empty, [])
1084
Walter Dörwald919497e2003-01-19 16:23:59 +00001085 def test_type(self):
1086 self.assertEqual(type(''), type('123'))
1087 self.assertNotEqual(type(''), type(()))
1088
Guido van Rossumfee7b932005-01-16 00:21:28 +00001089 # We don't want self in vars(), so these are static methods
1090
1091 @staticmethod
Walter Dörwald919497e2003-01-19 16:23:59 +00001092 def get_vars_f0():
1093 return vars()
Walter Dörwald919497e2003-01-19 16:23:59 +00001094
Guido van Rossumfee7b932005-01-16 00:21:28 +00001095 @staticmethod
Walter Dörwald919497e2003-01-19 16:23:59 +00001096 def get_vars_f2():
1097 BuiltinTest.get_vars_f0()
1098 a = 1
1099 b = 2
1100 return vars()
Walter Dörwald919497e2003-01-19 16:23:59 +00001101
Mark Dickinsonfb3dc942010-05-25 19:06:24 +00001102 class C_get_vars(object):
1103 def getDict(self):
1104 return {'a':2}
1105 __dict__ = property(fget=getDict)
1106
Walter Dörwald919497e2003-01-19 16:23:59 +00001107 def test_vars(self):
Raymond Hettingera690a992003-11-16 16:17:49 +00001108 self.assertEqual(set(vars()), set(dir()))
Raymond Hettingera690a992003-11-16 16:17:49 +00001109 self.assertEqual(set(vars(sys)), set(dir(sys)))
Walter Dörwald919497e2003-01-19 16:23:59 +00001110 self.assertEqual(self.get_vars_f0(), {})
1111 self.assertEqual(self.get_vars_f2(), {'a': 1, 'b': 2})
1112 self.assertRaises(TypeError, vars, 42, 42)
1113 self.assertRaises(TypeError, vars, 42)
Mark Dickinsonfb3dc942010-05-25 19:06:24 +00001114 self.assertEqual(vars(self.C_get_vars()), {'a':2})
Walter Dörwald919497e2003-01-19 16:23:59 +00001115
1116 def test_zip(self):
1117 a = (1, 2, 3)
1118 b = (4, 5, 6)
1119 t = [(1, 4), (2, 5), (3, 6)]
Guido van Rossum801f0d72006-08-24 19:48:10 +00001120 self.assertEqual(list(zip(a, b)), t)
Walter Dörwald919497e2003-01-19 16:23:59 +00001121 b = [4, 5, 6]
Guido van Rossum801f0d72006-08-24 19:48:10 +00001122 self.assertEqual(list(zip(a, b)), t)
Walter Dörwald919497e2003-01-19 16:23:59 +00001123 b = (4, 5, 6, 7)
Guido van Rossum801f0d72006-08-24 19:48:10 +00001124 self.assertEqual(list(zip(a, b)), t)
Walter Dörwald919497e2003-01-19 16:23:59 +00001125 class I:
1126 def __getitem__(self, i):
1127 if i < 0 or i > 2: raise IndexError
1128 return i + 4
Guido van Rossum801f0d72006-08-24 19:48:10 +00001129 self.assertEqual(list(zip(a, I())), t)
1130 self.assertEqual(list(zip()), [])
1131 self.assertEqual(list(zip(*[])), [])
Walter Dörwald919497e2003-01-19 16:23:59 +00001132 self.assertRaises(TypeError, zip, None)
1133 class G:
1134 pass
1135 self.assertRaises(TypeError, zip, a, G())
Alexander Belopolskye29e6bf2010-08-16 18:55:46 +00001136 self.assertRaises(RuntimeError, zip, a, TestFailingIter())
Walter Dörwald919497e2003-01-19 16:23:59 +00001137
1138 # Make sure zip doesn't try to allocate a billion elements for the
1139 # result list when one of its arguments doesn't say how long it is.
1140 # A MemoryError is the most likely failure mode.
1141 class SequenceWithoutALength:
1142 def __getitem__(self, i):
1143 if i == 5:
1144 raise IndexError
1145 else:
1146 return i
1147 self.assertEqual(
Guido van Rossum805365e2007-05-07 22:24:25 +00001148 list(zip(SequenceWithoutALength(), range(2**30))),
Walter Dörwald919497e2003-01-19 16:23:59 +00001149 list(enumerate(range(5)))
1150 )
1151
1152 class BadSeq:
1153 def __getitem__(self, i):
1154 if i == 5:
1155 raise ValueError
1156 else:
1157 return i
Guido van Rossum801f0d72006-08-24 19:48:10 +00001158 self.assertRaises(ValueError, list, zip(BadSeq(), BadSeq()))
Walter Dörwald919497e2003-01-19 16:23:59 +00001159
Eric Smithe4d63172010-09-13 20:48:43 +00001160 def test_format(self):
1161 # Test the basic machinery of the format() builtin. Don't test
1162 # the specifics of the various formatters
1163 self.assertEqual(format(3, ''), '3')
1164
1165 # Returns some classes to use for various tests. There's
1166 # an old-style version, and a new-style version
1167 def classes_new():
1168 class A(object):
1169 def __init__(self, x):
1170 self.x = x
1171 def __format__(self, format_spec):
1172 return str(self.x) + format_spec
1173 class DerivedFromA(A):
1174 pass
1175
1176 class Simple(object): pass
1177 class DerivedFromSimple(Simple):
1178 def __init__(self, x):
1179 self.x = x
1180 def __format__(self, format_spec):
1181 return str(self.x) + format_spec
1182 class DerivedFromSimple2(DerivedFromSimple): pass
1183 return A, DerivedFromA, DerivedFromSimple, DerivedFromSimple2
1184
1185 def class_test(A, DerivedFromA, DerivedFromSimple, DerivedFromSimple2):
1186 self.assertEqual(format(A(3), 'spec'), '3spec')
1187 self.assertEqual(format(DerivedFromA(4), 'spec'), '4spec')
1188 self.assertEqual(format(DerivedFromSimple(5), 'abc'), '5abc')
1189 self.assertEqual(format(DerivedFromSimple2(10), 'abcdef'),
1190 '10abcdef')
1191
1192 class_test(*classes_new())
1193
1194 def empty_format_spec(value):
1195 # test that:
1196 # format(x, '') == str(x)
1197 # format(x) == str(x)
1198 self.assertEqual(format(value, ""), str(value))
1199 self.assertEqual(format(value), str(value))
1200
1201 # for builtin types, format(x, "") == str(x)
1202 empty_format_spec(17**13)
1203 empty_format_spec(1.0)
1204 empty_format_spec(3.1415e104)
1205 empty_format_spec(-3.1415e104)
1206 empty_format_spec(3.1415e-104)
1207 empty_format_spec(-3.1415e-104)
1208 empty_format_spec(object)
1209 empty_format_spec(None)
1210
1211 # TypeError because self.__format__ returns the wrong type
1212 class BadFormatResult:
1213 def __format__(self, format_spec):
1214 return 1.0
1215 self.assertRaises(TypeError, format, BadFormatResult(), "")
1216
1217 # TypeError because format_spec is not unicode or str
1218 self.assertRaises(TypeError, format, object(), 4)
1219 self.assertRaises(TypeError, format, object(), object())
1220
1221 # tests for object.__format__ really belong elsewhere, but
1222 # there's no good place to put them
1223 x = object().__format__('')
1224 self.assertTrue(x.startswith('<object object at'))
1225
1226 # first argument to object.__format__ must be string
1227 self.assertRaises(TypeError, object().__format__, 3)
1228 self.assertRaises(TypeError, object().__format__, object())
1229 self.assertRaises(TypeError, object().__format__, None)
1230
1231 # --------------------------------------------------------------------
1232 # Issue #7994: object.__format__ with a non-empty format string is
1233 # pending deprecated
1234 def test_deprecated_format_string(obj, fmt_str, should_raise_warning):
1235 with warnings.catch_warnings(record=True) as w:
1236 warnings.simplefilter("always", PendingDeprecationWarning)
1237 format(obj, fmt_str)
1238 if should_raise_warning:
1239 self.assertEqual(len(w), 1)
1240 self.assertIsInstance(w[0].message, PendingDeprecationWarning)
1241 self.assertIn('object.__format__ with a non-empty format '
1242 'string', str(w[0].message))
1243 else:
1244 self.assertEqual(len(w), 0)
1245
1246 fmt_strs = ['', 's']
1247
1248 class A:
1249 def __format__(self, fmt_str):
1250 return format('', fmt_str)
1251
1252 for fmt_str in fmt_strs:
1253 test_deprecated_format_string(A(), fmt_str, False)
1254
1255 class B:
1256 pass
1257
1258 class C(object):
1259 pass
1260
1261 for cls in [object, B, C]:
1262 for fmt_str in fmt_strs:
1263 test_deprecated_format_string(cls(), fmt_str, len(fmt_str) != 0)
1264 # --------------------------------------------------------------------
1265
1266 # make sure we can take a subclass of str as a format spec
1267 class DerivedFromStr(str): pass
1268 self.assertEqual(format(0, DerivedFromStr('10')), ' 0')
1269
Christian Heimes90c3d9b2008-02-23 13:18:03 +00001270 def test_bin(self):
1271 self.assertEqual(bin(0), '0b0')
1272 self.assertEqual(bin(1), '0b1')
1273 self.assertEqual(bin(-1), '-0b1')
1274 self.assertEqual(bin(2**65), '0b1' + '0' * 65)
1275 self.assertEqual(bin(2**65-1), '0b' + '1' * 65)
1276 self.assertEqual(bin(-(2**65)), '-0b1' + '0' * 65)
1277 self.assertEqual(bin(-(2**65-1)), '-0b' + '1' * 65)
1278
Georg Brandl953152f2009-07-22 12:03:59 +00001279 def test_bytearray_translate(self):
1280 x = bytearray(b"abc")
1281 self.assertRaises(ValueError, x.translate, b"1", 1)
1282 self.assertRaises(TypeError, x.translate, b"1"*256, 1)
1283
Raymond Hettinger64958a12003-12-17 20:43:33 +00001284class TestSorted(unittest.TestCase):
1285
1286 def test_basic(self):
Guido van Rossum805365e2007-05-07 22:24:25 +00001287 data = list(range(100))
Raymond Hettinger64958a12003-12-17 20:43:33 +00001288 copy = data[:]
1289 random.shuffle(copy)
1290 self.assertEqual(data, sorted(copy))
1291 self.assertNotEqual(data, copy)
1292
1293 data.reverse()
1294 random.shuffle(copy)
Raymond Hettinger64958a12003-12-17 20:43:33 +00001295 self.assertEqual(data, sorted(copy, key=lambda x: -x))
1296 self.assertNotEqual(data, copy)
1297 random.shuffle(copy)
1298 self.assertEqual(data, sorted(copy, reverse=1))
1299 self.assertNotEqual(data, copy)
1300
1301 def test_inputtypes(self):
1302 s = 'abracadabra'
Walter Dörwald1f5947b2007-05-22 16:52:54 +00001303 types = [list, tuple, str]
Walter Dörwald4e41a4b2005-08-03 17:09:04 +00001304 for T in types:
Raymond Hettinger64958a12003-12-17 20:43:33 +00001305 self.assertEqual(sorted(s), sorted(T(s)))
1306
Walter Dörwald1f5947b2007-05-22 16:52:54 +00001307 s = ''.join(set(s)) # unique letters only
1308 types = [str, set, frozenset, list, tuple, dict.fromkeys]
Walter Dörwald4e41a4b2005-08-03 17:09:04 +00001309 for T in types:
Raymond Hettinger64958a12003-12-17 20:43:33 +00001310 self.assertEqual(sorted(s), sorted(T(s)))
1311
1312 def test_baddecorator(self):
1313 data = 'The quick Brown fox Jumped over The lazy Dog'.split()
1314 self.assertRaises(TypeError, sorted, data, None, lambda x,y: 0)
1315
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001316def test_main(verbose=None):
1317 test_classes = (BuiltinTest, TestSorted)
1318
1319 run_unittest(*test_classes)
1320
1321 # verify reference counting
1322 if verbose and hasattr(sys, "gettotalrefcount"):
1323 import gc
1324 counts = [None] * 5
Guido van Rossum805365e2007-05-07 22:24:25 +00001325 for i in range(len(counts)):
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001326 run_unittest(*test_classes)
1327 gc.collect()
1328 counts[i] = sys.gettotalrefcount()
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001329 print(counts)
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001330
Walter Dörwald919497e2003-01-19 16:23:59 +00001331
1332if __name__ == "__main__":
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001333 test_main(verbose=True)