blob: 7a898b25de4a4c2450293e74e6e516b10ee35ad7 [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
Benjamin Petersonee8712c2008-05-20 21:35:26 +00003import test.support, unittest
4from test.support import fcmp, TESTFN, unlink, run_unittest, \
Walter Dörwald1f5947b2007-05-22 16:52:54 +00005 run_with_locale
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00006from operator import neg
Guido van Rossum3bead091992-01-27 17:00:37 +00007
Raymond Hettinger53dbe392008-02-12 20:03:09 +00008import sys, warnings, random, collections, io, fractions
Walter Dörwald919497e2003-01-19 16:23:59 +00009warnings.filterwarnings("ignore", "hex../oct.. of negative int",
10 FutureWarning, __name__)
Guido van Rossumefbbb1c2003-04-11 18:43:06 +000011warnings.filterwarnings("ignore", "integer argument expected",
12 DeprecationWarning, "unittest")
Guido van Rossum3bead091992-01-27 17:00:37 +000013
Walter Dörwald919497e2003-01-19 16:23:59 +000014class Squares:
Guido van Rossum3bead091992-01-27 17:00:37 +000015
Walter Dörwald919497e2003-01-19 16:23:59 +000016 def __init__(self, max):
17 self.max = max
18 self.sofar = []
19
20 def __len__(self): return len(self.sofar)
21
22 def __getitem__(self, i):
23 if not 0 <= i < self.max: raise IndexError
24 n = len(self.sofar)
25 while n <= i:
26 self.sofar.append(n*n)
27 n += 1
28 return self.sofar[i]
29
30class StrSquares:
31
32 def __init__(self, max):
33 self.max = max
34 self.sofar = []
35
36 def __len__(self):
37 return len(self.sofar)
38
39 def __getitem__(self, i):
40 if not 0 <= i < self.max:
41 raise IndexError
42 n = len(self.sofar)
43 while n <= i:
44 self.sofar.append(str(n*n))
45 n += 1
46 return self.sofar[i]
47
48class BitBucket:
49 def write(self, line):
50 pass
51
Facundo Batista2336bdd2008-01-19 19:12:01 +000052test_conv_no_sign = [
Walter Dörwald919497e2003-01-19 16:23:59 +000053 ('0', 0),
54 ('1', 1),
55 ('9', 9),
56 ('10', 10),
57 ('99', 99),
58 ('100', 100),
59 ('314', 314),
60 (' 314', 314),
61 ('314 ', 314),
62 (' \t\t 314 \t\t ', 314),
Christian Heimesa37d4c62007-12-04 23:02:19 +000063 (repr(sys.maxsize), sys.maxsize),
Walter Dörwald919497e2003-01-19 16:23:59 +000064 (' 1x', ValueError),
65 (' 1 ', 1),
66 (' 1\02 ', ValueError),
67 ('', ValueError),
68 (' ', ValueError),
Walter Dörwald1f5947b2007-05-22 16:52:54 +000069 (' \t\t ', ValueError),
Guido van Rossumef87d6e2007-05-02 19:09:54 +000070 (str(b'\u0663\u0661\u0664 ','raw-unicode-escape'), 314),
Guido van Rossum84fc66d2007-05-03 17:18:26 +000071 (chr(0x200), ValueError),
Walter Dörwald919497e2003-01-19 16:23:59 +000072]
73
Facundo Batista2336bdd2008-01-19 19:12:01 +000074test_conv_sign = [
75 ('0', 0),
76 ('1', 1),
77 ('9', 9),
78 ('10', 10),
79 ('99', 99),
80 ('100', 100),
81 ('314', 314),
82 (' 314', ValueError),
83 ('314 ', 314),
84 (' \t\t 314 \t\t ', ValueError),
85 (repr(sys.maxsize), sys.maxsize),
86 (' 1x', ValueError),
87 (' 1 ', ValueError),
88 (' 1\02 ', ValueError),
89 ('', ValueError),
90 (' ', ValueError),
91 (' \t\t ', ValueError),
92 (str(b'\u0663\u0661\u0664 ','raw-unicode-escape'), 314),
93 (chr(0x200), ValueError),
94]
95
Raymond Hettinger96229b12005-03-11 06:49:40 +000096class TestFailingBool:
Jack Diederich4dafcc42006-11-28 19:15:13 +000097 def __bool__(self):
Raymond Hettinger96229b12005-03-11 06:49:40 +000098 raise RuntimeError
99
100class TestFailingIter:
101 def __iter__(self):
102 raise RuntimeError
103
Walter Dörwald919497e2003-01-19 16:23:59 +0000104class BuiltinTest(unittest.TestCase):
105
106 def test_import(self):
107 __import__('sys')
108 __import__('time')
109 __import__('string')
Guido van Rossumd8faa362007-04-27 19:54:29 +0000110 __import__(name='sys')
111 __import__(name='time', level=0)
Walter Dörwald919497e2003-01-19 16:23:59 +0000112 self.assertRaises(ImportError, __import__, 'spamspam')
113 self.assertRaises(TypeError, __import__, 1, 2, 3, 4)
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000114 self.assertRaises(ValueError, __import__, '')
Guido van Rossumd8faa362007-04-27 19:54:29 +0000115 self.assertRaises(TypeError, __import__, 'sys', name='sys')
Walter Dörwald919497e2003-01-19 16:23:59 +0000116
117 def test_abs(self):
118 # int
119 self.assertEqual(abs(0), 0)
120 self.assertEqual(abs(1234), 1234)
121 self.assertEqual(abs(-1234), 1234)
Christian Heimesa37d4c62007-12-04 23:02:19 +0000122 self.assertTrue(abs(-sys.maxsize-1) > 0)
Walter Dörwald919497e2003-01-19 16:23:59 +0000123 # float
124 self.assertEqual(abs(0.0), 0.0)
125 self.assertEqual(abs(3.14), 3.14)
126 self.assertEqual(abs(-3.14), 3.14)
127 # long
Guido van Rossume2a383d2007-01-15 16:59:06 +0000128 self.assertEqual(abs(0), 0)
129 self.assertEqual(abs(1234), 1234)
130 self.assertEqual(abs(-1234), 1234)
Walter Dörwald919497e2003-01-19 16:23:59 +0000131 # str
132 self.assertRaises(TypeError, abs, 'a')
133
Raymond Hettinger96229b12005-03-11 06:49:40 +0000134 def test_all(self):
135 self.assertEqual(all([2, 4, 6]), True)
136 self.assertEqual(all([2, None, 6]), False)
137 self.assertRaises(RuntimeError, all, [2, TestFailingBool(), 6])
138 self.assertRaises(RuntimeError, all, TestFailingIter())
139 self.assertRaises(TypeError, all, 10) # Non-iterable
140 self.assertRaises(TypeError, all) # No args
141 self.assertRaises(TypeError, all, [2, 4, 6], []) # Too many args
142 self.assertEqual(all([]), True) # Empty iterator
143 S = [50, 60]
144 self.assertEqual(all(x > 42 for x in S), True)
145 S = [50, 40, 60]
146 self.assertEqual(all(x > 42 for x in S), False)
147
148 def test_any(self):
149 self.assertEqual(any([None, None, None]), False)
150 self.assertEqual(any([None, 4, None]), True)
151 self.assertRaises(RuntimeError, any, [None, TestFailingBool(), 6])
152 self.assertRaises(RuntimeError, all, TestFailingIter())
153 self.assertRaises(TypeError, any, 10) # Non-iterable
154 self.assertRaises(TypeError, any) # No args
155 self.assertRaises(TypeError, any, [2, 4, 6], []) # Too many args
156 self.assertEqual(any([]), False) # Empty iterator
157 S = [40, 60, 30]
158 self.assertEqual(any(x > 42 for x in S), True)
159 S = [10, 20, 30]
160 self.assertEqual(any(x > 42 for x in S), False)
161
Georg Brandl559e5d72008-06-11 18:37:52 +0000162 def test_ascii(self):
163 self.assertEqual(ascii(''), '\'\'')
164 self.assertEqual(ascii(0), '0')
165 self.assertEqual(ascii(0), '0')
166 self.assertEqual(ascii(()), '()')
167 self.assertEqual(ascii([]), '[]')
168 self.assertEqual(ascii({}), '{}')
169 a = []
170 a.append(a)
171 self.assertEqual(ascii(a), '[[...]]')
172 a = {}
173 a[0] = a
174 self.assertEqual(ascii(a), '{0: {...}}')
175
Thomas Wouters89f507f2006-12-13 04:49:30 +0000176 def test_neg(self):
Christian Heimesa37d4c62007-12-04 23:02:19 +0000177 x = -sys.maxsize-1
Thomas Wouters89f507f2006-12-13 04:49:30 +0000178 self.assert_(isinstance(x, int))
Christian Heimesa37d4c62007-12-04 23:02:19 +0000179 self.assertEqual(-x, sys.maxsize+1)
Thomas Wouters89f507f2006-12-13 04:49:30 +0000180
Guido van Rossumd59da4b2007-05-22 18:11:13 +0000181 # XXX(nnorwitz): This test case for callable should probably be removed.
Walter Dörwald919497e2003-01-19 16:23:59 +0000182 def test_callable(self):
Guido van Rossumd59da4b2007-05-22 18:11:13 +0000183 self.assert_(hasattr(len, '__call__'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000184 def f(): pass
Guido van Rossumd59da4b2007-05-22 18:11:13 +0000185 self.assert_(hasattr(f, '__call__'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000186 class C:
187 def meth(self): pass
Guido van Rossumd59da4b2007-05-22 18:11:13 +0000188 self.assert_(hasattr(C, '__call__'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000189 x = C()
Guido van Rossumd59da4b2007-05-22 18:11:13 +0000190 self.assert_(hasattr(x.meth, '__call__'))
191 self.assert_(not hasattr(x, '__call__'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000192 class D(C):
193 def __call__(self): pass
194 y = D()
Guido van Rossumd59da4b2007-05-22 18:11:13 +0000195 self.assert_(hasattr(y, '__call__'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000196 y()
197
198 def test_chr(self):
199 self.assertEqual(chr(32), ' ')
200 self.assertEqual(chr(65), 'A')
201 self.assertEqual(chr(97), 'a')
202 self.assertEqual(chr(0xff), '\xff')
Guido van Rossum572dbf82007-04-27 23:53:51 +0000203 self.assertRaises(ValueError, chr, 1<<24)
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000204 self.assertEqual(chr(sys.maxunicode),
205 str(('\\U%08x' % (sys.maxunicode)).encode("ascii"),
206 'unicode-escape'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000207 self.assertRaises(TypeError, chr)
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000208 self.assertEqual(chr(0x0000FFFF), "\U0000FFFF")
209 self.assertEqual(chr(0x00010000), "\U00010000")
210 self.assertEqual(chr(0x00010001), "\U00010001")
211 self.assertEqual(chr(0x000FFFFE), "\U000FFFFE")
212 self.assertEqual(chr(0x000FFFFF), "\U000FFFFF")
213 self.assertEqual(chr(0x00100000), "\U00100000")
214 self.assertEqual(chr(0x00100001), "\U00100001")
215 self.assertEqual(chr(0x0010FFFE), "\U0010FFFE")
216 self.assertEqual(chr(0x0010FFFF), "\U0010FFFF")
217 self.assertRaises(ValueError, chr, -1)
218 self.assertRaises(ValueError, chr, 0x00110000)
Walter Dörwald919497e2003-01-19 16:23:59 +0000219
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000220 def test_cmp(self):
Walter Dörwald919497e2003-01-19 16:23:59 +0000221 self.assertEqual(cmp(-1, 1), -1)
222 self.assertEqual(cmp(1, -1), 1)
223 self.assertEqual(cmp(1, 1), 0)
Armin Rigo2b3eb402003-10-28 12:05:48 +0000224 # verify that circular objects are not handled
Walter Dörwald919497e2003-01-19 16:23:59 +0000225 a = []; a.append(a)
226 b = []; b.append(b)
Raymond Hettinger53dbe392008-02-12 20:03:09 +0000227 from collections import UserList
Walter Dörwald919497e2003-01-19 16:23:59 +0000228 c = UserList(); c.append(c)
Armin Rigo2b3eb402003-10-28 12:05:48 +0000229 self.assertRaises(RuntimeError, cmp, a, b)
230 self.assertRaises(RuntimeError, cmp, b, c)
231 self.assertRaises(RuntimeError, cmp, c, a)
232 self.assertRaises(RuntimeError, cmp, a, c)
233 # okay, now break the cycles
Walter Dörwald919497e2003-01-19 16:23:59 +0000234 a.pop(); b.pop(); c.pop()
235 self.assertRaises(TypeError, cmp)
236
Walter Dörwald919497e2003-01-19 16:23:59 +0000237 def test_compile(self):
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000238 compile('print(1)\n', '', 'exec')
Amaury Forgeot d'Arcaf593462007-11-22 20:53:01 +0000239 bom = b'\xef\xbb\xbf'
240 compile(bom + b'print(1)\n', '', 'exec')
Guido van Rossumd8faa362007-04-27 19:54:29 +0000241 compile(source='pass', filename='?', mode='exec')
242 compile(dont_inherit=0, filename='tmp', source='0', mode='eval')
243 compile('pass', '?', dont_inherit=1, mode='exec')
Walter Dörwald919497e2003-01-19 16:23:59 +0000244 self.assertRaises(TypeError, compile)
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000245 self.assertRaises(ValueError, compile, 'print(42)\n', '<string>', 'badmode')
246 self.assertRaises(ValueError, compile, 'print(42)\n', '<string>', 'single', 0xff)
Neal Norwitzfcf44352005-11-27 20:37:43 +0000247 self.assertRaises(TypeError, compile, chr(0), 'f', 'exec')
Guido van Rossumd8faa362007-04-27 19:54:29 +0000248 self.assertRaises(TypeError, compile, 'pass', '?', 'exec',
249 mode='eval', source='0', filename='tmp')
Walter Dörwald1f5947b2007-05-22 16:52:54 +0000250 compile('print("\xe5")\n', '', 'exec')
251 self.assertRaises(TypeError, compile, chr(0), 'f', 'exec')
252 self.assertRaises(ValueError, compile, str('a = 1'), 'f', 'bad')
Guido van Rossumd8faa362007-04-27 19:54:29 +0000253
Walter Dörwald919497e2003-01-19 16:23:59 +0000254 def test_delattr(self):
255 import sys
256 sys.spam = 1
257 delattr(sys, 'spam')
258 self.assertRaises(TypeError, delattr)
259
260 def test_dir(self):
Georg Brandle32b4222007-03-10 22:13:27 +0000261 # dir(wrong number of arguments)
Walter Dörwald919497e2003-01-19 16:23:59 +0000262 self.assertRaises(TypeError, dir, 42, 42)
263
Georg Brandle32b4222007-03-10 22:13:27 +0000264 # dir() - local scope
265 local_var = 1
266 self.assert_('local_var' in dir())
267
268 # dir(module)
269 import sys
270 self.assert_('exit' in dir(sys))
271
272 # dir(module_with_invalid__dict__)
273 import types
274 class Foo(types.ModuleType):
275 __dict__ = 8
276 f = Foo("foo")
277 self.assertRaises(TypeError, dir, f)
278
279 # dir(type)
280 self.assert_("strip" in dir(str))
281 self.assert_("__mro__" not in dir(str))
282
283 # dir(obj)
284 class Foo(object):
285 def __init__(self):
286 self.x = 7
287 self.y = 8
288 self.z = 9
289 f = Foo()
290 self.assert_("y" in dir(f))
291
292 # dir(obj_no__dict__)
293 class Foo(object):
294 __slots__ = []
295 f = Foo()
296 self.assert_("__repr__" in dir(f))
297
298 # dir(obj_no__class__with__dict__)
299 # (an ugly trick to cause getattr(f, "__class__") to fail)
300 class Foo(object):
301 __slots__ = ["__class__", "__dict__"]
302 def __init__(self):
303 self.bar = "wow"
304 f = Foo()
305 self.assert_("__repr__" not in dir(f))
306 self.assert_("bar" in dir(f))
307
308 # dir(obj_using __dir__)
309 class Foo(object):
310 def __dir__(self):
311 return ["kan", "ga", "roo"]
312 f = Foo()
313 self.assert_(dir(f) == ["ga", "kan", "roo"])
314
315 # dir(obj__dir__not_list)
316 class Foo(object):
317 def __dir__(self):
318 return 7
319 f = Foo()
320 self.assertRaises(TypeError, dir, f)
321
Collin Winter3eed7652007-08-14 17:53:54 +0000322 # dir(traceback)
323 try:
324 raise IndexError
325 except:
326 self.assertEqual(len(dir(sys.exc_info()[2])), 4)
327
328
Walter Dörwald919497e2003-01-19 16:23:59 +0000329 def test_divmod(self):
330 self.assertEqual(divmod(12, 7), (1, 5))
331 self.assertEqual(divmod(-12, 7), (-2, 2))
332 self.assertEqual(divmod(12, -7), (-2, -2))
333 self.assertEqual(divmod(-12, -7), (1, -5))
334
Guido van Rossume2a383d2007-01-15 16:59:06 +0000335 self.assertEqual(divmod(12, 7), (1, 5))
336 self.assertEqual(divmod(-12, 7), (-2, 2))
337 self.assertEqual(divmod(12, -7), (-2, -2))
338 self.assertEqual(divmod(-12, -7), (1, -5))
Walter Dörwald919497e2003-01-19 16:23:59 +0000339
Guido van Rossume2a383d2007-01-15 16:59:06 +0000340 self.assertEqual(divmod(12, 7), (1, 5))
341 self.assertEqual(divmod(-12, 7), (-2, 2))
342 self.assertEqual(divmod(12, -7), (-2, -2))
343 self.assertEqual(divmod(-12, -7), (1, -5))
Walter Dörwald919497e2003-01-19 16:23:59 +0000344
Christian Heimesa37d4c62007-12-04 23:02:19 +0000345 self.assertEqual(divmod(-sys.maxsize-1, -1),
346 (sys.maxsize+1, 0))
Raymond Hettinger5ea7e312004-09-30 07:47:20 +0000347
Walter Dörwald919497e2003-01-19 16:23:59 +0000348 self.assert_(not fcmp(divmod(3.25, 1.0), (3.0, 0.25)))
349 self.assert_(not fcmp(divmod(-3.25, 1.0), (-4.0, 0.75)))
350 self.assert_(not fcmp(divmod(3.25, -1.0), (-4.0, -0.75)))
351 self.assert_(not fcmp(divmod(-3.25, -1.0), (3.0, -0.25)))
352
353 self.assertRaises(TypeError, divmod)
354
355 def test_eval(self):
356 self.assertEqual(eval('1+1'), 2)
357 self.assertEqual(eval(' 1+1\n'), 2)
358 globals = {'a': 1, 'b': 2}
359 locals = {'b': 200, 'c': 300}
360 self.assertEqual(eval('a', globals) , 1)
361 self.assertEqual(eval('a', globals, locals), 1)
362 self.assertEqual(eval('b', globals, locals), 200)
363 self.assertEqual(eval('c', globals, locals), 300)
Walter Dörwald919497e2003-01-19 16:23:59 +0000364 globals = {'a': 1, 'b': 2}
365 locals = {'b': 200, 'c': 300}
Amaury Forgeot d'Arcaf593462007-11-22 20:53:01 +0000366 bom = b'\xef\xbb\xbf'
367 self.assertEqual(eval(bom + b'a', globals, locals), 1)
Walter Dörwald1f5947b2007-05-22 16:52:54 +0000368 self.assertEqual(eval('"\xe5"', globals), "\xe5")
Walter Dörwald919497e2003-01-19 16:23:59 +0000369 self.assertRaises(TypeError, eval)
370 self.assertRaises(TypeError, eval, ())
Amaury Forgeot d'Arcaf593462007-11-22 20:53:01 +0000371 self.assertRaises(SyntaxError, eval, bom[:2] + b'a')
Walter Dörwald919497e2003-01-19 16:23:59 +0000372
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000373 def test_general_eval(self):
374 # Tests that general mappings can be used for the locals argument
375
376 class M:
377 "Test mapping interface versus possible calls from eval()."
378 def __getitem__(self, key):
379 if key == 'a':
380 return 12
381 raise KeyError
Guido van Rossumcd70eee2007-02-11 18:53:00 +0000382 def keys(self):
383 return list('xyz')
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000384
385 m = M()
386 g = globals()
387 self.assertEqual(eval('a', g, m), 12)
388 self.assertRaises(NameError, eval, 'b', g, m)
389 self.assertEqual(eval('dir()', g, m), list('xyz'))
390 self.assertEqual(eval('globals()', g, m), g)
391 self.assertEqual(eval('locals()', g, m), m)
Raymond Hettinger513ffe82004-07-06 13:44:41 +0000392 self.assertRaises(TypeError, eval, 'a', m)
Raymond Hettinger66bd2332004-08-02 08:30:07 +0000393 class A:
394 "Non-mapping"
395 pass
396 m = A()
397 self.assertRaises(TypeError, eval, 'a', g, m)
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000398
399 # Verify that dict subclasses work as well
400 class D(dict):
401 def __getitem__(self, key):
402 if key == 'a':
403 return 12
404 return dict.__getitem__(self, key)
Guido van Rossumcd70eee2007-02-11 18:53:00 +0000405 def keys(self):
406 return list('xyz')
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000407
408 d = D()
409 self.assertEqual(eval('a', g, d), 12)
410 self.assertRaises(NameError, eval, 'b', g, d)
411 self.assertEqual(eval('dir()', g, d), list('xyz'))
412 self.assertEqual(eval('globals()', g, d), g)
413 self.assertEqual(eval('locals()', g, d), d)
414
415 # Verify locals stores (used by list comps)
416 eval('[locals() for i in (2,3)]', g, d)
Raymond Hettingerf80680d2008-02-06 00:07:11 +0000417 eval('[locals() for i in (2,3)]', g, collections.UserDict())
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000418
419 class SpreadSheet:
420 "Sample application showing nested, calculated lookups."
421 _cells = {}
422 def __setitem__(self, key, formula):
423 self._cells[key] = formula
Thomas Wouters73e5a5b2006-06-08 15:35:45 +0000424 def __getitem__(self, key):
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000425 return eval(self._cells[key], globals(), self)
426
427 ss = SpreadSheet()
428 ss['a1'] = '5'
429 ss['a2'] = 'a1*6'
430 ss['a3'] = 'a2*7'
431 self.assertEqual(ss['a3'], 210)
432
Raymond Hettinger2a7dede2004-08-07 04:55:30 +0000433 # Verify that dir() catches a non-list returned by eval
434 # SF bug #1004669
435 class C:
436 def __getitem__(self, item):
437 raise KeyError(item)
Guido van Rossumcd70eee2007-02-11 18:53:00 +0000438 def keys(self):
439 return 1 # used to be 'a' but that's no longer an error
Raymond Hettinger2a7dede2004-08-07 04:55:30 +0000440 self.assertRaises(TypeError, eval, 'dir()', globals(), C())
441
Georg Brandl7cae87c2006-09-06 06:51:57 +0000442 def test_exec(self):
443 g = {}
444 exec('z = 1', g)
445 if '__builtins__' in g:
446 del g['__builtins__']
447 self.assertEqual(g, {'z': 1})
448
Guido van Rossumef87d6e2007-05-02 19:09:54 +0000449 exec('z = 1+1', g)
Georg Brandl7cae87c2006-09-06 06:51:57 +0000450 if '__builtins__' in g:
451 del g['__builtins__']
452 self.assertEqual(g, {'z': 2})
453 g = {}
454 l = {}
455
456 import warnings
457 warnings.filterwarnings("ignore", "global statement", module="<string>")
458 exec('global a; a = 1; b = 2', g, l)
459 if '__builtins__' in g:
460 del g['__builtins__']
461 if '__builtins__' in l:
462 del l['__builtins__']
463 self.assertEqual((g, l), ({'a': 1}, {'b': 2}))
464
Amaury Forgeot d'Arc9ed77352008-04-04 23:25:27 +0000465 def test_exec_redirected(self):
466 savestdout = sys.stdout
467 sys.stdout = None # Whatever that cannot flush()
468 try:
469 # Used to raise SystemError('error return without exception set')
470 exec('a')
471 except NameError:
472 pass
473 finally:
474 sys.stdout = savestdout
475
Walter Dörwald919497e2003-01-19 16:23:59 +0000476 def test_filter(self):
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000477 self.assertEqual(list(filter(lambda c: 'a' <= c <= 'z', 'Hello World')), list('elloorld'))
478 self.assertEqual(list(filter(None, [1, 'hello', [], [3], '', None, 9, 0])), [1, 'hello', [3], 9])
479 self.assertEqual(list(filter(lambda x: x > 0, [1, -3, 9, 0, 2])), [1, 9, 2])
480 self.assertEqual(list(filter(None, Squares(10))), [1, 4, 9, 16, 25, 36, 49, 64, 81])
481 self.assertEqual(list(filter(lambda x: x%2, Squares(10))), [1, 9, 25, 49, 81])
Walter Dörwald919497e2003-01-19 16:23:59 +0000482 def identity(item):
483 return 1
484 filter(identity, Squares(5))
485 self.assertRaises(TypeError, filter)
486 class BadSeq(object):
Tim Petersf2715e02003-02-19 02:35:07 +0000487 def __getitem__(self, index):
488 if index<4:
489 return 42
490 raise ValueError
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000491 self.assertRaises(ValueError, list, filter(lambda x: x, BadSeq()))
Walter Dörwald919497e2003-01-19 16:23:59 +0000492 def badfunc():
493 pass
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000494 self.assertRaises(TypeError, list, filter(badfunc, range(5)))
Walter Dörwald919497e2003-01-19 16:23:59 +0000495
Walter Dörwaldbf517072003-01-27 15:57:14 +0000496 # test bltinmodule.c::filtertuple()
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000497 self.assertEqual(list(filter(None, (1, 2))), [1, 2])
498 self.assertEqual(list(filter(lambda x: x>=3, (1, 2, 3, 4))), [3, 4])
499 self.assertRaises(TypeError, list, filter(42, (1, 2)))
Walter Dörwaldc3da83f2003-02-04 20:24:45 +0000500
Walter Dörwald919497e2003-01-19 16:23:59 +0000501 def test_getattr(self):
502 import sys
503 self.assert_(getattr(sys, 'stdout') is sys.stdout)
504 self.assertRaises(TypeError, getattr, sys, 1)
505 self.assertRaises(TypeError, getattr, sys, 1, "foo")
506 self.assertRaises(TypeError, getattr)
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000507 self.assertRaises(AttributeError, getattr, sys, chr(sys.maxunicode))
Walter Dörwald919497e2003-01-19 16:23:59 +0000508
509 def test_hasattr(self):
510 import sys
511 self.assert_(hasattr(sys, 'stdout'))
512 self.assertRaises(TypeError, hasattr, sys, 1)
513 self.assertRaises(TypeError, hasattr)
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000514 self.assertEqual(False, hasattr(sys, chr(sys.maxunicode)))
Walter Dörwald919497e2003-01-19 16:23:59 +0000515
Alexandre Vassalottieca20b62008-05-16 02:54:33 +0000516 # Check that hasattr allows SystemExit and KeyboardInterrupts by
517 class A:
518 def __getattr__(self, what):
519 raise KeyboardInterrupt
520 self.assertRaises(KeyboardInterrupt, hasattr, A(), "b")
521 class B:
522 def __getattr__(self, what):
523 raise SystemExit
524 self.assertRaises(SystemExit, hasattr, B(), "b")
525
Walter Dörwald919497e2003-01-19 16:23:59 +0000526 def test_hash(self):
527 hash(None)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000528 self.assertEqual(hash(1), hash(1))
Walter Dörwald919497e2003-01-19 16:23:59 +0000529 self.assertEqual(hash(1), hash(1.0))
530 hash('spam')
Guido van Rossum98297ee2007-11-06 21:34:58 +0000531 self.assertEqual(hash('spam'), hash(b'spam'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000532 hash((0,1,2,3))
533 def f(): pass
534 self.assertRaises(TypeError, hash, [])
535 self.assertRaises(TypeError, hash, {})
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000536 # Bug 1536021: Allow hash to return long objects
537 class X:
538 def __hash__(self):
539 return 2**100
540 self.assertEquals(type(hash(X())), int)
541 class Y(object):
542 def __hash__(self):
543 return 2**100
544 self.assertEquals(type(hash(Y())), int)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000545 class Z(int):
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000546 def __hash__(self):
547 return self
Guido van Rossume2a383d2007-01-15 16:59:06 +0000548 self.assertEquals(hash(Z(42)), hash(42))
Walter Dörwald919497e2003-01-19 16:23:59 +0000549
550 def test_hex(self):
551 self.assertEqual(hex(16), '0x10')
Guido van Rossume2a383d2007-01-15 16:59:06 +0000552 self.assertEqual(hex(16), '0x10')
Guido van Rossum6c9e1302003-11-29 23:52:13 +0000553 self.assertEqual(hex(-16), '-0x10')
Guido van Rossume2a383d2007-01-15 16:59:06 +0000554 self.assertEqual(hex(-16), '-0x10')
Walter Dörwald919497e2003-01-19 16:23:59 +0000555 self.assertRaises(TypeError, hex, {})
556
557 def test_id(self):
558 id(None)
559 id(1)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000560 id(1)
Walter Dörwald919497e2003-01-19 16:23:59 +0000561 id(1.0)
562 id('spam')
563 id((0,1,2,3))
564 id([0,1,2,3])
565 id({'spam': 1, 'eggs': 2, 'ham': 3})
566
Guido van Rossuma88a0332007-02-26 16:59:55 +0000567 # Test input() later, alphabetized as if it were raw_input
568
Walter Dörwald919497e2003-01-19 16:23:59 +0000569 def test_iter(self):
570 self.assertRaises(TypeError, iter)
571 self.assertRaises(TypeError, iter, 42, 42)
572 lists = [("1", "2"), ["1", "2"], "12"]
Walter Dörwald919497e2003-01-19 16:23:59 +0000573 for l in lists:
574 i = iter(l)
Georg Brandla18af4e2007-04-21 15:47:16 +0000575 self.assertEqual(next(i), '1')
576 self.assertEqual(next(i), '2')
577 self.assertRaises(StopIteration, next, i)
Walter Dörwald919497e2003-01-19 16:23:59 +0000578
579 def test_isinstance(self):
580 class C:
581 pass
582 class D(C):
583 pass
584 class E:
585 pass
586 c = C()
587 d = D()
588 e = E()
589 self.assert_(isinstance(c, C))
590 self.assert_(isinstance(d, C))
591 self.assert_(not isinstance(e, C))
592 self.assert_(not isinstance(c, D))
593 self.assert_(not isinstance('foo', E))
594 self.assertRaises(TypeError, isinstance, E, 'foo')
595 self.assertRaises(TypeError, isinstance)
596
597 def test_issubclass(self):
598 class C:
599 pass
600 class D(C):
601 pass
602 class E:
603 pass
604 c = C()
605 d = D()
606 e = E()
607 self.assert_(issubclass(D, C))
608 self.assert_(issubclass(C, C))
609 self.assert_(not issubclass(C, D))
610 self.assertRaises(TypeError, issubclass, 'foo', E)
611 self.assertRaises(TypeError, issubclass, E, 'foo')
612 self.assertRaises(TypeError, issubclass)
613
614 def test_len(self):
615 self.assertEqual(len('123'), 3)
616 self.assertEqual(len(()), 0)
617 self.assertEqual(len((1, 2, 3, 4)), 4)
618 self.assertEqual(len([1, 2, 3, 4]), 4)
619 self.assertEqual(len({}), 0)
620 self.assertEqual(len({'a':1, 'b': 2}), 2)
621 class BadSeq:
622 def __len__(self):
623 raise ValueError
624 self.assertRaises(ValueError, len, BadSeq())
625
Walter Dörwald919497e2003-01-19 16:23:59 +0000626 def test_map(self):
627 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000628 list(map(lambda x: x*x, range(1,4))),
Walter Dörwald919497e2003-01-19 16:23:59 +0000629 [1, 4, 9]
630 )
631 try:
632 from math import sqrt
633 except ImportError:
634 def sqrt(x):
635 return pow(x, 0.5)
636 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000637 list(map(lambda x: list(map(sqrt, x)), [[16, 4], [81, 9]])),
Walter Dörwald919497e2003-01-19 16:23:59 +0000638 [[4.0, 2.0], [9.0, 3.0]]
639 )
640 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000641 list(map(lambda x, y: x+y, [1,3,2], [9,1,4])),
Walter Dörwald919497e2003-01-19 16:23:59 +0000642 [10, 4, 6]
643 )
644
645 def plus(*v):
646 accu = 0
647 for i in v: accu = accu + i
648 return accu
649 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000650 list(map(plus, [1, 3, 7])),
Walter Dörwald919497e2003-01-19 16:23:59 +0000651 [1, 3, 7]
652 )
653 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000654 list(map(plus, [1, 3, 7], [4, 9, 2])),
Walter Dörwald919497e2003-01-19 16:23:59 +0000655 [1+4, 3+9, 7+2]
656 )
657 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000658 list(map(plus, [1, 3, 7], [4, 9, 2], [1, 1, 0])),
Walter Dörwald919497e2003-01-19 16:23:59 +0000659 [1+4+1, 3+9+1, 7+2+0]
660 )
661 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000662 list(map(int, Squares(10))),
Walter Dörwald919497e2003-01-19 16:23:59 +0000663 [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
664 )
Guido van Rossum47b9ff62006-08-24 00:41:19 +0000665 def Max(a, b):
666 if a is None:
667 return b
668 if b is None:
669 return a
670 return max(a, b)
Walter Dörwald919497e2003-01-19 16:23:59 +0000671 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000672 list(map(Max, Squares(3), Squares(2))),
673 [0, 1]
Walter Dörwald919497e2003-01-19 16:23:59 +0000674 )
675 self.assertRaises(TypeError, map)
676 self.assertRaises(TypeError, map, lambda x: x, 42)
Walter Dörwald919497e2003-01-19 16:23:59 +0000677 class BadSeq:
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000678 def __iter__(self):
Walter Dörwald919497e2003-01-19 16:23:59 +0000679 raise ValueError
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000680 yield None
681 self.assertRaises(ValueError, list, map(lambda x: x, BadSeq()))
Neal Norwitzfcf44352005-11-27 20:37:43 +0000682 def badfunc(x):
683 raise RuntimeError
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000684 self.assertRaises(RuntimeError, list, map(badfunc, range(5)))
Walter Dörwald919497e2003-01-19 16:23:59 +0000685
686 def test_max(self):
687 self.assertEqual(max('123123'), '3')
688 self.assertEqual(max(1, 2, 3), 3)
689 self.assertEqual(max((1, 2, 3, 1, 2, 3)), 3)
690 self.assertEqual(max([1, 2, 3, 1, 2, 3]), 3)
691
Guido van Rossume2a383d2007-01-15 16:59:06 +0000692 self.assertEqual(max(1, 2, 3.0), 3.0)
693 self.assertEqual(max(1, 2.0, 3), 3)
694 self.assertEqual(max(1.0, 2, 3), 3)
Walter Dörwald919497e2003-01-19 16:23:59 +0000695
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +0000696 for stmt in (
697 "max(key=int)", # no args
698 "max(1, key=int)", # single arg not iterable
699 "max(1, 2, keystone=int)", # wrong keyword
700 "max(1, 2, key=int, abc=int)", # two many keywords
701 "max(1, 2, key=1)", # keyfunc is not callable
702 ):
Tim Peters7f061872004-12-07 21:17:46 +0000703 try:
Georg Brandl7cae87c2006-09-06 06:51:57 +0000704 exec(stmt, globals())
Tim Peters7f061872004-12-07 21:17:46 +0000705 except TypeError:
706 pass
707 else:
708 self.fail(stmt)
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +0000709
710 self.assertEqual(max((1,), key=neg), 1) # one elem iterable
711 self.assertEqual(max((1,2), key=neg), 1) # two elem iterable
712 self.assertEqual(max(1, 2, key=neg), 1) # two elems
713
714 data = [random.randrange(200) for i in range(100)]
715 keys = dict((elem, random.randrange(50)) for elem in data)
716 f = keys.__getitem__
717 self.assertEqual(max(data, key=f),
718 sorted(reversed(data), key=f)[-1])
719
Walter Dörwald919497e2003-01-19 16:23:59 +0000720 def test_min(self):
721 self.assertEqual(min('123123'), '1')
722 self.assertEqual(min(1, 2, 3), 1)
723 self.assertEqual(min((1, 2, 3, 1, 2, 3)), 1)
724 self.assertEqual(min([1, 2, 3, 1, 2, 3]), 1)
725
Guido van Rossume2a383d2007-01-15 16:59:06 +0000726 self.assertEqual(min(1, 2, 3.0), 1)
727 self.assertEqual(min(1, 2.0, 3), 1)
728 self.assertEqual(min(1.0, 2, 3), 1.0)
Walter Dörwald919497e2003-01-19 16:23:59 +0000729
730 self.assertRaises(TypeError, min)
731 self.assertRaises(TypeError, min, 42)
732 self.assertRaises(ValueError, min, ())
733 class BadSeq:
734 def __getitem__(self, index):
735 raise ValueError
736 self.assertRaises(ValueError, min, BadSeq())
737 class BadNumber:
738 def __cmp__(self, other):
739 raise ValueError
Guido van Rossum47b9ff62006-08-24 00:41:19 +0000740 self.assertRaises(TypeError, min, (42, BadNumber()))
Walter Dörwald919497e2003-01-19 16:23:59 +0000741
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +0000742 for stmt in (
743 "min(key=int)", # no args
744 "min(1, key=int)", # single arg not iterable
745 "min(1, 2, keystone=int)", # wrong keyword
746 "min(1, 2, key=int, abc=int)", # two many keywords
747 "min(1, 2, key=1)", # keyfunc is not callable
748 ):
Tim Peters7f061872004-12-07 21:17:46 +0000749 try:
Georg Brandl7cae87c2006-09-06 06:51:57 +0000750 exec(stmt, globals())
Tim Peters7f061872004-12-07 21:17:46 +0000751 except TypeError:
752 pass
753 else:
754 self.fail(stmt)
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +0000755
756 self.assertEqual(min((1,), key=neg), 1) # one elem iterable
757 self.assertEqual(min((1,2), key=neg), 2) # two elem iterable
758 self.assertEqual(min(1, 2, key=neg), 2) # two elems
759
760 data = [random.randrange(200) for i in range(100)]
761 keys = dict((elem, random.randrange(50)) for elem in data)
762 f = keys.__getitem__
763 self.assertEqual(min(data, key=f),
764 sorted(data, key=f)[0])
765
Georg Brandla18af4e2007-04-21 15:47:16 +0000766 def test_next(self):
767 it = iter(range(2))
768 self.assertEqual(next(it), 0)
769 self.assertEqual(next(it), 1)
770 self.assertRaises(StopIteration, next, it)
771 self.assertRaises(StopIteration, next, it)
772 self.assertEquals(next(it, 42), 42)
773
774 class Iter(object):
775 def __iter__(self):
776 return self
777 def __next__(self):
778 raise StopIteration
779
780 it = iter(Iter())
781 self.assertEquals(next(it, 42), 42)
782 self.assertRaises(StopIteration, next, it)
783
784 def gen():
785 yield 1
786 return
787
788 it = gen()
789 self.assertEquals(next(it), 1)
790 self.assertRaises(StopIteration, next, it)
791 self.assertEquals(next(it, 42), 42)
792
Walter Dörwald919497e2003-01-19 16:23:59 +0000793 def test_oct(self):
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000794 self.assertEqual(oct(100), '0o144')
795 self.assertEqual(oct(100), '0o144')
796 self.assertEqual(oct(-100), '-0o144')
797 self.assertEqual(oct(-100), '-0o144')
Walter Dörwald919497e2003-01-19 16:23:59 +0000798 self.assertRaises(TypeError, oct, ())
799
800 def write_testfile(self):
Guido van Rossuma88a0332007-02-26 16:59:55 +0000801 # NB the first 4 lines are also used to test input, below
Walter Dörwald919497e2003-01-19 16:23:59 +0000802 fp = open(TESTFN, 'w')
803 try:
804 fp.write('1+1\n')
805 fp.write('1+1\n')
806 fp.write('The quick brown fox jumps over the lazy dog')
807 fp.write('.\n')
808 fp.write('Dear John\n')
809 fp.write('XXX'*100)
810 fp.write('YYY'*100)
811 finally:
812 fp.close()
813
814 def test_open(self):
815 self.write_testfile()
816 fp = open(TESTFN, 'r')
817 try:
818 self.assertEqual(fp.readline(4), '1+1\n')
819 self.assertEqual(fp.readline(4), '1+1\n')
820 self.assertEqual(fp.readline(), 'The quick brown fox jumps over the lazy dog.\n')
821 self.assertEqual(fp.readline(4), 'Dear')
822 self.assertEqual(fp.readline(100), ' John\n')
823 self.assertEqual(fp.read(300), 'XXX'*100)
824 self.assertEqual(fp.read(1000), 'YYY'*100)
825 finally:
826 fp.close()
827 unlink(TESTFN)
828
829 def test_ord(self):
830 self.assertEqual(ord(' '), 32)
831 self.assertEqual(ord('A'), 65)
832 self.assertEqual(ord('a'), 97)
Guido van Rossumf9e91c92007-05-08 21:05:48 +0000833 self.assertEqual(ord('\x80'), 128)
834 self.assertEqual(ord('\xff'), 255)
835
836 self.assertEqual(ord(b' '), 32)
837 self.assertEqual(ord(b'A'), 65)
838 self.assertEqual(ord(b'a'), 97)
839 self.assertEqual(ord(b'\x80'), 128)
840 self.assertEqual(ord(b'\xff'), 255)
841
Walter Dörwald1f5947b2007-05-22 16:52:54 +0000842 self.assertEqual(ord(chr(sys.maxunicode)), sys.maxunicode)
Walter Dörwald919497e2003-01-19 16:23:59 +0000843 self.assertRaises(TypeError, ord, 42)
Walter Dörwald919497e2003-01-19 16:23:59 +0000844
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000845 self.assertEqual(ord(chr(0x10FFFF)), 0x10FFFF)
846 self.assertEqual(ord("\U0000FFFF"), 0x0000FFFF)
847 self.assertEqual(ord("\U00010000"), 0x00010000)
848 self.assertEqual(ord("\U00010001"), 0x00010001)
849 self.assertEqual(ord("\U000FFFFE"), 0x000FFFFE)
850 self.assertEqual(ord("\U000FFFFF"), 0x000FFFFF)
851 self.assertEqual(ord("\U00100000"), 0x00100000)
852 self.assertEqual(ord("\U00100001"), 0x00100001)
853 self.assertEqual(ord("\U0010FFFE"), 0x0010FFFE)
854 self.assertEqual(ord("\U0010FFFF"), 0x0010FFFF)
855
Walter Dörwald919497e2003-01-19 16:23:59 +0000856 def test_pow(self):
857 self.assertEqual(pow(0,0), 1)
858 self.assertEqual(pow(0,1), 0)
859 self.assertEqual(pow(1,0), 1)
860 self.assertEqual(pow(1,1), 1)
861
862 self.assertEqual(pow(2,0), 1)
863 self.assertEqual(pow(2,10), 1024)
864 self.assertEqual(pow(2,20), 1024*1024)
865 self.assertEqual(pow(2,30), 1024*1024*1024)
866
867 self.assertEqual(pow(-2,0), 1)
868 self.assertEqual(pow(-2,1), -2)
869 self.assertEqual(pow(-2,2), 4)
870 self.assertEqual(pow(-2,3), -8)
871
Guido van Rossume2a383d2007-01-15 16:59:06 +0000872 self.assertEqual(pow(0,0), 1)
873 self.assertEqual(pow(0,1), 0)
874 self.assertEqual(pow(1,0), 1)
875 self.assertEqual(pow(1,1), 1)
Walter Dörwald919497e2003-01-19 16:23:59 +0000876
Guido van Rossume2a383d2007-01-15 16:59:06 +0000877 self.assertEqual(pow(2,0), 1)
878 self.assertEqual(pow(2,10), 1024)
879 self.assertEqual(pow(2,20), 1024*1024)
880 self.assertEqual(pow(2,30), 1024*1024*1024)
Walter Dörwald919497e2003-01-19 16:23:59 +0000881
Guido van Rossume2a383d2007-01-15 16:59:06 +0000882 self.assertEqual(pow(-2,0), 1)
883 self.assertEqual(pow(-2,1), -2)
884 self.assertEqual(pow(-2,2), 4)
885 self.assertEqual(pow(-2,3), -8)
Walter Dörwald919497e2003-01-19 16:23:59 +0000886
887 self.assertAlmostEqual(pow(0.,0), 1.)
888 self.assertAlmostEqual(pow(0.,1), 0.)
889 self.assertAlmostEqual(pow(1.,0), 1.)
890 self.assertAlmostEqual(pow(1.,1), 1.)
891
892 self.assertAlmostEqual(pow(2.,0), 1.)
893 self.assertAlmostEqual(pow(2.,10), 1024.)
894 self.assertAlmostEqual(pow(2.,20), 1024.*1024.)
895 self.assertAlmostEqual(pow(2.,30), 1024.*1024.*1024.)
896
897 self.assertAlmostEqual(pow(-2.,0), 1.)
898 self.assertAlmostEqual(pow(-2.,1), -2.)
899 self.assertAlmostEqual(pow(-2.,2), 4.)
900 self.assertAlmostEqual(pow(-2.,3), -8.)
901
Guido van Rossume2a383d2007-01-15 16:59:06 +0000902 for x in 2, 2, 2.0:
903 for y in 10, 10, 10.0:
904 for z in 1000, 1000, 1000.0:
Walter Dörwald919497e2003-01-19 16:23:59 +0000905 if isinstance(x, float) or \
906 isinstance(y, float) or \
907 isinstance(z, float):
908 self.assertRaises(TypeError, pow, x, y, z)
909 else:
910 self.assertAlmostEqual(pow(x, y, z), 24.0)
911
Jeffrey Yasskin3404b3c2007-09-07 15:15:49 +0000912 self.assertAlmostEqual(pow(-1, 0.5), 1j)
913 self.assertAlmostEqual(pow(-1, 1/3), 0.5 + 0.8660254037844386j)
914
Walter Dörwald919497e2003-01-19 16:23:59 +0000915 self.assertRaises(TypeError, pow, -1, -2, 3)
916 self.assertRaises(ValueError, pow, 1, 2, 0)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000917 self.assertRaises(TypeError, pow, -1, -2, 3)
918 self.assertRaises(ValueError, pow, 1, 2, 0)
Walter Dörwald919497e2003-01-19 16:23:59 +0000919
920 self.assertRaises(TypeError, pow)
921
922 def test_range(self):
Guido van Rossum805365e2007-05-07 22:24:25 +0000923 self.assertEqual(list(range(3)), [0, 1, 2])
924 self.assertEqual(list(range(1, 5)), [1, 2, 3, 4])
925 self.assertEqual(list(range(0)), [])
926 self.assertEqual(list(range(-3)), [])
927 self.assertEqual(list(range(1, 10, 3)), [1, 4, 7])
928 #self.assertEqual(list(range(5, -5, -3)), [5, 2, -1, -4])
Walter Dörwald919497e2003-01-19 16:23:59 +0000929
Guido van Rossum805365e2007-05-07 22:24:25 +0000930 """ XXX(nnorwitz):
Guido van Rossumefbbb1c2003-04-11 18:43:06 +0000931 # Now test range() with longs
Guido van Rossum805365e2007-05-07 22:24:25 +0000932 self.assertEqual(list(range(-2**100)), [])
933 self.assertEqual(list(range(0, -2**100)), [])
934 self.assertEqual(list(range(0, 2**100, -1)), [])
935 self.assertEqual(list(range(0, 2**100, -1)), [])
Guido van Rossumefbbb1c2003-04-11 18:43:06 +0000936
Christian Heimesa37d4c62007-12-04 23:02:19 +0000937 a = int(10 * sys.maxsize)
938 b = int(100 * sys.maxsize)
939 c = int(50 * sys.maxsize)
Guido van Rossumefbbb1c2003-04-11 18:43:06 +0000940
Guido van Rossum805365e2007-05-07 22:24:25 +0000941 self.assertEqual(list(range(a, a+2)), [a, a+1])
942 self.assertEqual(list(range(a+2, a, -1)), [a+2, a+1])
943 self.assertEqual(list(range(a+4, a, -2)), [a+4, a+2])
Guido van Rossumefbbb1c2003-04-11 18:43:06 +0000944
Guido van Rossum805365e2007-05-07 22:24:25 +0000945 seq = list(range(a, b, c))
Guido van Rossumefbbb1c2003-04-11 18:43:06 +0000946 self.assert_(a in seq)
947 self.assert_(b not in seq)
948 self.assertEqual(len(seq), 2)
949
Guido van Rossum805365e2007-05-07 22:24:25 +0000950 seq = list(range(b, a, -c))
Guido van Rossumefbbb1c2003-04-11 18:43:06 +0000951 self.assert_(b in seq)
952 self.assert_(a not in seq)
953 self.assertEqual(len(seq), 2)
954
Guido van Rossum805365e2007-05-07 22:24:25 +0000955 seq = list(range(-a, -b, -c))
Guido van Rossumefbbb1c2003-04-11 18:43:06 +0000956 self.assert_(-a in seq)
957 self.assert_(-b not in seq)
958 self.assertEqual(len(seq), 2)
959
Walter Dörwald919497e2003-01-19 16:23:59 +0000960 self.assertRaises(TypeError, range)
961 self.assertRaises(TypeError, range, 1, 2, 3, 4)
962 self.assertRaises(ValueError, range, 1, 2, 0)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000963 self.assertRaises(ValueError, range, a, a + 1, int(0))
Neal Norwitzfcf44352005-11-27 20:37:43 +0000964
965 class badzero(int):
Guido van Rossum47b9ff62006-08-24 00:41:19 +0000966 def __eq__(self, other):
Neal Norwitzfcf44352005-11-27 20:37:43 +0000967 raise RuntimeError
Guido van Rossum47b9ff62006-08-24 00:41:19 +0000968 __ne__ = __lt__ = __gt__ = __le__ = __ge__ = __eq__
969
970 # XXX This won't (but should!) raise RuntimeError if a is an int...
Neal Norwitzfcf44352005-11-27 20:37:43 +0000971 self.assertRaises(RuntimeError, range, a, a + 1, badzero(1))
Guido van Rossum805365e2007-05-07 22:24:25 +0000972 """
Walter Dörwald919497e2003-01-19 16:23:59 +0000973
Guido van Rossumefbbb1c2003-04-11 18:43:06 +0000974 # Reject floats when it would require PyLongs to represent.
975 # (smaller floats still accepted, but deprecated)
Tim Peters299b3df2003-04-15 14:40:03 +0000976 self.assertRaises(TypeError, range, 1e100, 1e101, 1e101)
Guido van Rossumefbbb1c2003-04-11 18:43:06 +0000977
Walter Dörwald357981e2003-04-15 18:59:28 +0000978 self.assertRaises(TypeError, range, 0, "spam")
979 self.assertRaises(TypeError, range, 0, 42, "spam")
980
Christian Heimesa37d4c62007-12-04 23:02:19 +0000981 #NEAL self.assertRaises(OverflowError, range, -sys.maxsize, sys.maxsize)
982 #NEAL self.assertRaises(OverflowError, range, 0, 2*sys.maxsize)
Guido van Rossum805365e2007-05-07 22:24:25 +0000983
Christian Heimesa37d4c62007-12-04 23:02:19 +0000984 self.assertRaises(OverflowError, len, range(0, sys.maxsize**10))
Walter Dörwald357981e2003-04-15 18:59:28 +0000985
Guido van Rossuma88a0332007-02-26 16:59:55 +0000986 def test_input(self):
987 self.write_testfile()
988 fp = open(TESTFN, 'r')
989 savestdin = sys.stdin
990 savestdout = sys.stdout # Eats the echo
991 try:
992 sys.stdin = fp
993 sys.stdout = BitBucket()
994 self.assertEqual(input(), "1+1")
995 self.assertEqual(input('testing\n'), "1+1")
996 self.assertEqual(input(), 'The quick brown fox jumps over the lazy dog.')
997 self.assertEqual(input('testing\n'), 'Dear John')
998
999 # SF 1535165: don't segfault on closed stdin
1000 # sys.stdout must be a regular file for triggering
1001 sys.stdout = savestdout
1002 sys.stdin.close()
1003 self.assertRaises(ValueError, input)
1004
1005 sys.stdout = BitBucket()
Guido van Rossum34d19282007-08-09 01:03:29 +00001006 sys.stdin = io.StringIO("NULL\0")
Guido van Rossuma88a0332007-02-26 16:59:55 +00001007 self.assertRaises(TypeError, input, 42, 42)
Guido van Rossum34d19282007-08-09 01:03:29 +00001008 sys.stdin = io.StringIO(" 'whitespace'")
Guido van Rossuma88a0332007-02-26 16:59:55 +00001009 self.assertEqual(input(), " 'whitespace'")
Guido van Rossum34d19282007-08-09 01:03:29 +00001010 sys.stdin = io.StringIO()
Guido van Rossuma88a0332007-02-26 16:59:55 +00001011 self.assertRaises(EOFError, input)
1012
1013 del sys.stdout
1014 self.assertRaises(RuntimeError, input, 'prompt')
1015 del sys.stdin
1016 self.assertRaises(RuntimeError, input, 'prompt')
1017 finally:
1018 sys.stdin = savestdin
1019 sys.stdout = savestdout
1020 fp.close()
1021 unlink(TESTFN)
1022
Walter Dörwald919497e2003-01-19 16:23:59 +00001023 def test_repr(self):
1024 self.assertEqual(repr(''), '\'\'')
1025 self.assertEqual(repr(0), '0')
Guido van Rossume2a383d2007-01-15 16:59:06 +00001026 self.assertEqual(repr(0), '0')
Walter Dörwald919497e2003-01-19 16:23:59 +00001027 self.assertEqual(repr(()), '()')
1028 self.assertEqual(repr([]), '[]')
1029 self.assertEqual(repr({}), '{}')
1030 a = []
1031 a.append(a)
1032 self.assertEqual(repr(a), '[[...]]')
1033 a = {}
1034 a[0] = a
1035 self.assertEqual(repr(a), '{0: {...}}')
1036
1037 def test_round(self):
1038 self.assertEqual(round(0.0), 0.0)
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001039 self.assertEqual(type(round(0.0)), int)
Walter Dörwald919497e2003-01-19 16:23:59 +00001040 self.assertEqual(round(1.0), 1.0)
1041 self.assertEqual(round(10.0), 10.0)
1042 self.assertEqual(round(1000000000.0), 1000000000.0)
1043 self.assertEqual(round(1e20), 1e20)
1044
1045 self.assertEqual(round(-1.0), -1.0)
1046 self.assertEqual(round(-10.0), -10.0)
1047 self.assertEqual(round(-1000000000.0), -1000000000.0)
1048 self.assertEqual(round(-1e20), -1e20)
1049
1050 self.assertEqual(round(0.1), 0.0)
1051 self.assertEqual(round(1.1), 1.0)
1052 self.assertEqual(round(10.1), 10.0)
1053 self.assertEqual(round(1000000000.1), 1000000000.0)
1054
1055 self.assertEqual(round(-1.1), -1.0)
1056 self.assertEqual(round(-10.1), -10.0)
1057 self.assertEqual(round(-1000000000.1), -1000000000.0)
1058
1059 self.assertEqual(round(0.9), 1.0)
1060 self.assertEqual(round(9.9), 10.0)
1061 self.assertEqual(round(999999999.9), 1000000000.0)
1062
1063 self.assertEqual(round(-0.9), -1.0)
1064 self.assertEqual(round(-9.9), -10.0)
1065 self.assertEqual(round(-999999999.9), -1000000000.0)
1066
1067 self.assertEqual(round(-8.0, -1), -10.0)
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001068 self.assertEqual(type(round(-8.0, -1)), float)
1069
1070 self.assertEqual(type(round(-8.0, 0)), float)
1071 self.assertEqual(type(round(-8.0, 1)), float)
1072
1073 # Check even / odd rounding behaviour
1074 self.assertEqual(round(5.5), 6)
1075 self.assertEqual(round(6.5), 6)
1076 self.assertEqual(round(-5.5), -6)
1077 self.assertEqual(round(-6.5), -6)
1078
1079 # Check behavior on ints
1080 self.assertEqual(round(0), 0)
1081 self.assertEqual(round(8), 8)
1082 self.assertEqual(round(-8), -8)
1083 self.assertEqual(type(round(0)), int)
1084 self.assertEqual(type(round(-8, -1)), float)
1085 self.assertEqual(type(round(-8, 0)), float)
1086 self.assertEqual(type(round(-8, 1)), float)
Walter Dörwald919497e2003-01-19 16:23:59 +00001087
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001088 # test new kwargs
1089 self.assertEqual(round(number=-8.0, ndigits=-1), -10.0)
1090
Walter Dörwald919497e2003-01-19 16:23:59 +00001091 self.assertRaises(TypeError, round)
1092
Alex Martelliae211f92007-08-22 23:21:33 +00001093 # test generic rounding delegation for reals
1094 class TestRound:
1095 def __round__(self):
1096 return 23
1097
1098 class TestNoRound:
1099 pass
1100
1101 self.assertEqual(round(TestRound()), 23)
1102
1103 self.assertRaises(TypeError, round, 1, 2, 3)
1104 self.assertRaises(TypeError, round, TestNoRound())
1105
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001106 t = TestNoRound()
1107 t.__round__ = lambda *args: args
1108 self.assertRaises(TypeError, round, t)
1109 self.assertRaises(TypeError, round, t, 0)
1110
Walter Dörwald919497e2003-01-19 16:23:59 +00001111 def test_setattr(self):
Tim Petersf2715e02003-02-19 02:35:07 +00001112 setattr(sys, 'spam', 1)
1113 self.assertEqual(sys.spam, 1)
1114 self.assertRaises(TypeError, setattr, sys, 1, 'spam')
1115 self.assertRaises(TypeError, setattr)
Walter Dörwald919497e2003-01-19 16:23:59 +00001116
Walter Dörwald919497e2003-01-19 16:23:59 +00001117
Alex Martellia70b1912003-04-22 08:12:33 +00001118 def test_sum(self):
1119 self.assertEqual(sum([]), 0)
Guido van Rossum805365e2007-05-07 22:24:25 +00001120 self.assertEqual(sum(list(range(2,8))), 27)
1121 self.assertEqual(sum(iter(list(range(2,8)))), 27)
Alex Martellia70b1912003-04-22 08:12:33 +00001122 self.assertEqual(sum(Squares(10)), 285)
1123 self.assertEqual(sum(iter(Squares(10))), 285)
1124 self.assertEqual(sum([[1], [2], [3]], []), [1, 2, 3])
1125
1126 self.assertRaises(TypeError, sum)
1127 self.assertRaises(TypeError, sum, 42)
1128 self.assertRaises(TypeError, sum, ['a', 'b', 'c'])
1129 self.assertRaises(TypeError, sum, ['a', 'b', 'c'], '')
1130 self.assertRaises(TypeError, sum, [[1], [2], [3]])
1131 self.assertRaises(TypeError, sum, [{2:3}])
1132 self.assertRaises(TypeError, sum, [{2:3}]*2, {2:3})
1133
1134 class BadSeq:
1135 def __getitem__(self, index):
1136 raise ValueError
1137 self.assertRaises(ValueError, sum, BadSeq())
1138
Walter Dörwald919497e2003-01-19 16:23:59 +00001139 def test_type(self):
1140 self.assertEqual(type(''), type('123'))
1141 self.assertNotEqual(type(''), type(()))
1142
Guido van Rossumfee7b932005-01-16 00:21:28 +00001143 # We don't want self in vars(), so these are static methods
1144
1145 @staticmethod
Walter Dörwald919497e2003-01-19 16:23:59 +00001146 def get_vars_f0():
1147 return vars()
Walter Dörwald919497e2003-01-19 16:23:59 +00001148
Guido van Rossumfee7b932005-01-16 00:21:28 +00001149 @staticmethod
Walter Dörwald919497e2003-01-19 16:23:59 +00001150 def get_vars_f2():
1151 BuiltinTest.get_vars_f0()
1152 a = 1
1153 b = 2
1154 return vars()
Walter Dörwald919497e2003-01-19 16:23:59 +00001155
1156 def test_vars(self):
Raymond Hettingera690a992003-11-16 16:17:49 +00001157 self.assertEqual(set(vars()), set(dir()))
Walter Dörwald919497e2003-01-19 16:23:59 +00001158 import sys
Raymond Hettingera690a992003-11-16 16:17:49 +00001159 self.assertEqual(set(vars(sys)), set(dir(sys)))
Walter Dörwald919497e2003-01-19 16:23:59 +00001160 self.assertEqual(self.get_vars_f0(), {})
1161 self.assertEqual(self.get_vars_f2(), {'a': 1, 'b': 2})
1162 self.assertRaises(TypeError, vars, 42, 42)
1163 self.assertRaises(TypeError, vars, 42)
1164
1165 def test_zip(self):
1166 a = (1, 2, 3)
1167 b = (4, 5, 6)
1168 t = [(1, 4), (2, 5), (3, 6)]
Guido van Rossum801f0d72006-08-24 19:48:10 +00001169 self.assertEqual(list(zip(a, b)), t)
Walter Dörwald919497e2003-01-19 16:23:59 +00001170 b = [4, 5, 6]
Guido van Rossum801f0d72006-08-24 19:48:10 +00001171 self.assertEqual(list(zip(a, b)), t)
Walter Dörwald919497e2003-01-19 16:23:59 +00001172 b = (4, 5, 6, 7)
Guido van Rossum801f0d72006-08-24 19:48:10 +00001173 self.assertEqual(list(zip(a, b)), t)
Walter Dörwald919497e2003-01-19 16:23:59 +00001174 class I:
1175 def __getitem__(self, i):
1176 if i < 0 or i > 2: raise IndexError
1177 return i + 4
Guido van Rossum801f0d72006-08-24 19:48:10 +00001178 self.assertEqual(list(zip(a, I())), t)
1179 self.assertEqual(list(zip()), [])
1180 self.assertEqual(list(zip(*[])), [])
Walter Dörwald919497e2003-01-19 16:23:59 +00001181 self.assertRaises(TypeError, zip, None)
1182 class G:
1183 pass
1184 self.assertRaises(TypeError, zip, a, G())
1185
1186 # Make sure zip doesn't try to allocate a billion elements for the
1187 # result list when one of its arguments doesn't say how long it is.
1188 # A MemoryError is the most likely failure mode.
1189 class SequenceWithoutALength:
1190 def __getitem__(self, i):
1191 if i == 5:
1192 raise IndexError
1193 else:
1194 return i
1195 self.assertEqual(
Guido van Rossum805365e2007-05-07 22:24:25 +00001196 list(zip(SequenceWithoutALength(), range(2**30))),
Walter Dörwald919497e2003-01-19 16:23:59 +00001197 list(enumerate(range(5)))
1198 )
1199
1200 class BadSeq:
1201 def __getitem__(self, i):
1202 if i == 5:
1203 raise ValueError
1204 else:
1205 return i
Guido van Rossum801f0d72006-08-24 19:48:10 +00001206 self.assertRaises(ValueError, list, zip(BadSeq(), BadSeq()))
Walter Dörwald919497e2003-01-19 16:23:59 +00001207
Christian Heimes90c3d9b2008-02-23 13:18:03 +00001208 def test_bin(self):
1209 self.assertEqual(bin(0), '0b0')
1210 self.assertEqual(bin(1), '0b1')
1211 self.assertEqual(bin(-1), '-0b1')
1212 self.assertEqual(bin(2**65), '0b1' + '0' * 65)
1213 self.assertEqual(bin(2**65-1), '0b' + '1' * 65)
1214 self.assertEqual(bin(-(2**65)), '-0b1' + '0' * 65)
1215 self.assertEqual(bin(-(2**65-1)), '-0b' + '1' * 65)
1216
Raymond Hettinger64958a12003-12-17 20:43:33 +00001217class TestSorted(unittest.TestCase):
1218
1219 def test_basic(self):
Guido van Rossum805365e2007-05-07 22:24:25 +00001220 data = list(range(100))
Raymond Hettinger64958a12003-12-17 20:43:33 +00001221 copy = data[:]
1222 random.shuffle(copy)
1223 self.assertEqual(data, sorted(copy))
1224 self.assertNotEqual(data, copy)
1225
1226 data.reverse()
1227 random.shuffle(copy)
Raymond Hettinger64958a12003-12-17 20:43:33 +00001228 self.assertEqual(data, sorted(copy, key=lambda x: -x))
1229 self.assertNotEqual(data, copy)
1230 random.shuffle(copy)
1231 self.assertEqual(data, sorted(copy, reverse=1))
1232 self.assertNotEqual(data, copy)
1233
1234 def test_inputtypes(self):
1235 s = 'abracadabra'
Walter Dörwald1f5947b2007-05-22 16:52:54 +00001236 types = [list, tuple, str]
Walter Dörwald4e41a4b2005-08-03 17:09:04 +00001237 for T in types:
Raymond Hettinger64958a12003-12-17 20:43:33 +00001238 self.assertEqual(sorted(s), sorted(T(s)))
1239
Walter Dörwald1f5947b2007-05-22 16:52:54 +00001240 s = ''.join(set(s)) # unique letters only
1241 types = [str, set, frozenset, list, tuple, dict.fromkeys]
Walter Dörwald4e41a4b2005-08-03 17:09:04 +00001242 for T in types:
Raymond Hettinger64958a12003-12-17 20:43:33 +00001243 self.assertEqual(sorted(s), sorted(T(s)))
1244
1245 def test_baddecorator(self):
1246 data = 'The quick Brown fox Jumped over The lazy Dog'.split()
1247 self.assertRaises(TypeError, sorted, data, None, lambda x,y: 0)
1248
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001249def test_main(verbose=None):
1250 test_classes = (BuiltinTest, TestSorted)
1251
1252 run_unittest(*test_classes)
1253
1254 # verify reference counting
1255 if verbose and hasattr(sys, "gettotalrefcount"):
1256 import gc
1257 counts = [None] * 5
Guido van Rossum805365e2007-05-07 22:24:25 +00001258 for i in range(len(counts)):
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001259 run_unittest(*test_classes)
1260 gc.collect()
1261 counts[i] = sys.gettotalrefcount()
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001262 print(counts)
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001263
Walter Dörwald919497e2003-01-19 16:23:59 +00001264
1265if __name__ == "__main__":
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001266 test_main(verbose=True)