blob: cac4555da1a2a04cfe91e7a4a4a1bc023ed3c136 [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")
Mark Dickinsona56c4672009-01-27 18:17:45 +000013import builtins
Guido van Rossum3bead091992-01-27 17:00:37 +000014
Walter Dörwald919497e2003-01-19 16:23:59 +000015class Squares:
Guido van Rossum3bead091992-01-27 17:00:37 +000016
Walter Dörwald919497e2003-01-19 16:23:59 +000017 def __init__(self, max):
18 self.max = max
19 self.sofar = []
20
21 def __len__(self): return len(self.sofar)
22
23 def __getitem__(self, i):
24 if not 0 <= i < self.max: raise IndexError
25 n = len(self.sofar)
26 while n <= i:
27 self.sofar.append(n*n)
28 n += 1
29 return self.sofar[i]
30
31class StrSquares:
32
33 def __init__(self, max):
34 self.max = max
35 self.sofar = []
36
37 def __len__(self):
38 return len(self.sofar)
39
40 def __getitem__(self, i):
41 if not 0 <= i < self.max:
42 raise IndexError
43 n = len(self.sofar)
44 while n <= i:
45 self.sofar.append(str(n*n))
46 n += 1
47 return self.sofar[i]
48
49class BitBucket:
50 def write(self, line):
51 pass
52
Facundo Batista2336bdd2008-01-19 19:12:01 +000053test_conv_no_sign = [
Walter Dörwald919497e2003-01-19 16:23:59 +000054 ('0', 0),
55 ('1', 1),
56 ('9', 9),
57 ('10', 10),
58 ('99', 99),
59 ('100', 100),
60 ('314', 314),
61 (' 314', 314),
62 ('314 ', 314),
63 (' \t\t 314 \t\t ', 314),
Christian Heimesa37d4c62007-12-04 23:02:19 +000064 (repr(sys.maxsize), sys.maxsize),
Walter Dörwald919497e2003-01-19 16:23:59 +000065 (' 1x', ValueError),
66 (' 1 ', 1),
67 (' 1\02 ', ValueError),
68 ('', ValueError),
69 (' ', ValueError),
Walter Dörwald1f5947b2007-05-22 16:52:54 +000070 (' \t\t ', ValueError),
Guido van Rossumef87d6e2007-05-02 19:09:54 +000071 (str(b'\u0663\u0661\u0664 ','raw-unicode-escape'), 314),
Guido van Rossum84fc66d2007-05-03 17:18:26 +000072 (chr(0x200), ValueError),
Walter Dörwald919497e2003-01-19 16:23:59 +000073]
74
Facundo Batista2336bdd2008-01-19 19:12:01 +000075test_conv_sign = [
76 ('0', 0),
77 ('1', 1),
78 ('9', 9),
79 ('10', 10),
80 ('99', 99),
81 ('100', 100),
82 ('314', 314),
83 (' 314', ValueError),
84 ('314 ', 314),
85 (' \t\t 314 \t\t ', ValueError),
86 (repr(sys.maxsize), sys.maxsize),
87 (' 1x', ValueError),
88 (' 1 ', ValueError),
89 (' 1\02 ', ValueError),
90 ('', ValueError),
91 (' ', ValueError),
92 (' \t\t ', ValueError),
93 (str(b'\u0663\u0661\u0664 ','raw-unicode-escape'), 314),
94 (chr(0x200), ValueError),
95]
96
Raymond Hettinger96229b12005-03-11 06:49:40 +000097class TestFailingBool:
Jack Diederich4dafcc42006-11-28 19:15:13 +000098 def __bool__(self):
Raymond Hettinger96229b12005-03-11 06:49:40 +000099 raise RuntimeError
100
101class TestFailingIter:
102 def __iter__(self):
103 raise RuntimeError
104
Walter Dörwald919497e2003-01-19 16:23:59 +0000105class BuiltinTest(unittest.TestCase):
106
107 def test_import(self):
108 __import__('sys')
109 __import__('time')
110 __import__('string')
Guido van Rossumd8faa362007-04-27 19:54:29 +0000111 __import__(name='sys')
112 __import__(name='time', level=0)
Walter Dörwald919497e2003-01-19 16:23:59 +0000113 self.assertRaises(ImportError, __import__, 'spamspam')
114 self.assertRaises(TypeError, __import__, 1, 2, 3, 4)
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000115 self.assertRaises(ValueError, __import__, '')
Guido van Rossumd8faa362007-04-27 19:54:29 +0000116 self.assertRaises(TypeError, __import__, 'sys', name='sys')
Walter Dörwald919497e2003-01-19 16:23:59 +0000117
118 def test_abs(self):
119 # int
120 self.assertEqual(abs(0), 0)
121 self.assertEqual(abs(1234), 1234)
122 self.assertEqual(abs(-1234), 1234)
Christian Heimesa37d4c62007-12-04 23:02:19 +0000123 self.assertTrue(abs(-sys.maxsize-1) > 0)
Walter Dörwald919497e2003-01-19 16:23:59 +0000124 # float
125 self.assertEqual(abs(0.0), 0.0)
126 self.assertEqual(abs(3.14), 3.14)
127 self.assertEqual(abs(-3.14), 3.14)
128 # long
Guido van Rossume2a383d2007-01-15 16:59:06 +0000129 self.assertEqual(abs(0), 0)
130 self.assertEqual(abs(1234), 1234)
131 self.assertEqual(abs(-1234), 1234)
Walter Dörwald919497e2003-01-19 16:23:59 +0000132 # str
133 self.assertRaises(TypeError, abs, 'a')
134
Raymond Hettinger96229b12005-03-11 06:49:40 +0000135 def test_all(self):
136 self.assertEqual(all([2, 4, 6]), True)
137 self.assertEqual(all([2, None, 6]), False)
138 self.assertRaises(RuntimeError, all, [2, TestFailingBool(), 6])
139 self.assertRaises(RuntimeError, all, TestFailingIter())
140 self.assertRaises(TypeError, all, 10) # Non-iterable
141 self.assertRaises(TypeError, all) # No args
142 self.assertRaises(TypeError, all, [2, 4, 6], []) # Too many args
143 self.assertEqual(all([]), True) # Empty iterator
144 S = [50, 60]
145 self.assertEqual(all(x > 42 for x in S), True)
146 S = [50, 40, 60]
147 self.assertEqual(all(x > 42 for x in S), False)
148
149 def test_any(self):
150 self.assertEqual(any([None, None, None]), False)
151 self.assertEqual(any([None, 4, None]), True)
152 self.assertRaises(RuntimeError, any, [None, TestFailingBool(), 6])
153 self.assertRaises(RuntimeError, all, TestFailingIter())
154 self.assertRaises(TypeError, any, 10) # Non-iterable
155 self.assertRaises(TypeError, any) # No args
156 self.assertRaises(TypeError, any, [2, 4, 6], []) # Too many args
157 self.assertEqual(any([]), False) # Empty iterator
158 S = [40, 60, 30]
159 self.assertEqual(any(x > 42 for x in S), True)
160 S = [10, 20, 30]
161 self.assertEqual(any(x > 42 for x in S), False)
162
Georg Brandl559e5d72008-06-11 18:37:52 +0000163 def test_ascii(self):
164 self.assertEqual(ascii(''), '\'\'')
165 self.assertEqual(ascii(0), '0')
166 self.assertEqual(ascii(0), '0')
167 self.assertEqual(ascii(()), '()')
168 self.assertEqual(ascii([]), '[]')
169 self.assertEqual(ascii({}), '{}')
170 a = []
171 a.append(a)
172 self.assertEqual(ascii(a), '[[...]]')
173 a = {}
174 a[0] = a
175 self.assertEqual(ascii(a), '{0: {...}}')
176
Thomas Wouters89f507f2006-12-13 04:49:30 +0000177 def test_neg(self):
Christian Heimesa37d4c62007-12-04 23:02:19 +0000178 x = -sys.maxsize-1
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000179 self.assertTrue(isinstance(x, int))
Christian Heimesa37d4c62007-12-04 23:02:19 +0000180 self.assertEqual(-x, sys.maxsize+1)
Thomas Wouters89f507f2006-12-13 04:49:30 +0000181
Guido van Rossumd59da4b2007-05-22 18:11:13 +0000182 # XXX(nnorwitz): This test case for callable should probably be removed.
Walter Dörwald919497e2003-01-19 16:23:59 +0000183 def test_callable(self):
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000184 self.assertTrue(hasattr(len, '__call__'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000185 def f(): pass
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000186 self.assertTrue(hasattr(f, '__call__'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000187 class C:
188 def meth(self): pass
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000189 self.assertTrue(hasattr(C, '__call__'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000190 x = C()
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000191 self.assertTrue(hasattr(x.meth, '__call__'))
192 self.assertTrue(not hasattr(x, '__call__'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000193 class D(C):
194 def __call__(self): pass
195 y = D()
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000196 self.assertTrue(hasattr(y, '__call__'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000197 y()
198
199 def test_chr(self):
200 self.assertEqual(chr(32), ' ')
201 self.assertEqual(chr(65), 'A')
202 self.assertEqual(chr(97), 'a')
203 self.assertEqual(chr(0xff), '\xff')
Guido van Rossum572dbf82007-04-27 23:53:51 +0000204 self.assertRaises(ValueError, chr, 1<<24)
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000205 self.assertEqual(chr(sys.maxunicode),
206 str(('\\U%08x' % (sys.maxunicode)).encode("ascii"),
207 'unicode-escape'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000208 self.assertRaises(TypeError, chr)
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000209 self.assertEqual(chr(0x0000FFFF), "\U0000FFFF")
210 self.assertEqual(chr(0x00010000), "\U00010000")
211 self.assertEqual(chr(0x00010001), "\U00010001")
212 self.assertEqual(chr(0x000FFFFE), "\U000FFFFE")
213 self.assertEqual(chr(0x000FFFFF), "\U000FFFFF")
214 self.assertEqual(chr(0x00100000), "\U00100000")
215 self.assertEqual(chr(0x00100001), "\U00100001")
216 self.assertEqual(chr(0x0010FFFE), "\U0010FFFE")
217 self.assertEqual(chr(0x0010FFFF), "\U0010FFFF")
218 self.assertRaises(ValueError, chr, -1)
219 self.assertRaises(ValueError, chr, 0x00110000)
Amaury Forgeot d'Arc7888d082008-08-01 01:06:32 +0000220 self.assertRaises((OverflowError, ValueError), chr, 2**32)
Walter Dörwald919497e2003-01-19 16:23:59 +0000221
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000222 def test_cmp(self):
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000223 self.assertTrue(not hasattr(builtins, "cmp"))
Walter Dörwald919497e2003-01-19 16:23:59 +0000224
Walter Dörwald919497e2003-01-19 16:23:59 +0000225 def test_compile(self):
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000226 compile('print(1)\n', '', 'exec')
Amaury Forgeot d'Arcaf593462007-11-22 20:53:01 +0000227 bom = b'\xef\xbb\xbf'
228 compile(bom + b'print(1)\n', '', 'exec')
Guido van Rossumd8faa362007-04-27 19:54:29 +0000229 compile(source='pass', filename='?', mode='exec')
230 compile(dont_inherit=0, filename='tmp', source='0', mode='eval')
231 compile('pass', '?', dont_inherit=1, mode='exec')
Benjamin Peterson60320cb2008-09-26 21:49:22 +0000232 compile(memoryview(b"text"), "name", "exec")
Walter Dörwald919497e2003-01-19 16:23:59 +0000233 self.assertRaises(TypeError, compile)
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000234 self.assertRaises(ValueError, compile, 'print(42)\n', '<string>', 'badmode')
235 self.assertRaises(ValueError, compile, 'print(42)\n', '<string>', 'single', 0xff)
Neal Norwitzfcf44352005-11-27 20:37:43 +0000236 self.assertRaises(TypeError, compile, chr(0), 'f', 'exec')
Guido van Rossumd8faa362007-04-27 19:54:29 +0000237 self.assertRaises(TypeError, compile, 'pass', '?', 'exec',
238 mode='eval', source='0', filename='tmp')
Walter Dörwald1f5947b2007-05-22 16:52:54 +0000239 compile('print("\xe5")\n', '', 'exec')
240 self.assertRaises(TypeError, compile, chr(0), 'f', 'exec')
241 self.assertRaises(ValueError, compile, str('a = 1'), 'f', 'bad')
Guido van Rossumd8faa362007-04-27 19:54:29 +0000242
Walter Dörwald919497e2003-01-19 16:23:59 +0000243 def test_delattr(self):
244 import sys
245 sys.spam = 1
246 delattr(sys, 'spam')
247 self.assertRaises(TypeError, delattr)
248
249 def test_dir(self):
Georg Brandle32b4222007-03-10 22:13:27 +0000250 # dir(wrong number of arguments)
Walter Dörwald919497e2003-01-19 16:23:59 +0000251 self.assertRaises(TypeError, dir, 42, 42)
252
Georg Brandle32b4222007-03-10 22:13:27 +0000253 # dir() - local scope
254 local_var = 1
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000255 self.assertTrue('local_var' in dir())
Georg Brandle32b4222007-03-10 22:13:27 +0000256
257 # dir(module)
258 import sys
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000259 self.assertTrue('exit' in dir(sys))
Georg Brandle32b4222007-03-10 22:13:27 +0000260
261 # dir(module_with_invalid__dict__)
262 import types
263 class Foo(types.ModuleType):
264 __dict__ = 8
265 f = Foo("foo")
266 self.assertRaises(TypeError, dir, f)
267
268 # dir(type)
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000269 self.assertTrue("strip" in dir(str))
270 self.assertTrue("__mro__" not in dir(str))
Georg Brandle32b4222007-03-10 22:13:27 +0000271
272 # dir(obj)
273 class Foo(object):
274 def __init__(self):
275 self.x = 7
276 self.y = 8
277 self.z = 9
278 f = Foo()
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000279 self.assertTrue("y" in dir(f))
Georg Brandle32b4222007-03-10 22:13:27 +0000280
281 # dir(obj_no__dict__)
282 class Foo(object):
283 __slots__ = []
284 f = Foo()
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000285 self.assertTrue("__repr__" in dir(f))
Georg Brandle32b4222007-03-10 22:13:27 +0000286
287 # dir(obj_no__class__with__dict__)
288 # (an ugly trick to cause getattr(f, "__class__") to fail)
289 class Foo(object):
290 __slots__ = ["__class__", "__dict__"]
291 def __init__(self):
292 self.bar = "wow"
293 f = Foo()
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000294 self.assertTrue("__repr__" not in dir(f))
295 self.assertTrue("bar" in dir(f))
Georg Brandle32b4222007-03-10 22:13:27 +0000296
297 # dir(obj_using __dir__)
298 class Foo(object):
299 def __dir__(self):
300 return ["kan", "ga", "roo"]
301 f = Foo()
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000302 self.assertTrue(dir(f) == ["ga", "kan", "roo"])
Georg Brandle32b4222007-03-10 22:13:27 +0000303
304 # dir(obj__dir__not_list)
305 class Foo(object):
306 def __dir__(self):
307 return 7
308 f = Foo()
309 self.assertRaises(TypeError, dir, f)
310
Collin Winter3eed7652007-08-14 17:53:54 +0000311 # dir(traceback)
312 try:
313 raise IndexError
314 except:
315 self.assertEqual(len(dir(sys.exc_info()[2])), 4)
316
317
Walter Dörwald919497e2003-01-19 16:23:59 +0000318 def test_divmod(self):
319 self.assertEqual(divmod(12, 7), (1, 5))
320 self.assertEqual(divmod(-12, 7), (-2, 2))
321 self.assertEqual(divmod(12, -7), (-2, -2))
322 self.assertEqual(divmod(-12, -7), (1, -5))
323
Guido van Rossume2a383d2007-01-15 16:59:06 +0000324 self.assertEqual(divmod(12, 7), (1, 5))
325 self.assertEqual(divmod(-12, 7), (-2, 2))
326 self.assertEqual(divmod(12, -7), (-2, -2))
327 self.assertEqual(divmod(-12, -7), (1, -5))
Walter Dörwald919497e2003-01-19 16:23:59 +0000328
Guido van Rossume2a383d2007-01-15 16:59:06 +0000329 self.assertEqual(divmod(12, 7), (1, 5))
330 self.assertEqual(divmod(-12, 7), (-2, 2))
331 self.assertEqual(divmod(12, -7), (-2, -2))
332 self.assertEqual(divmod(-12, -7), (1, -5))
Walter Dörwald919497e2003-01-19 16:23:59 +0000333
Christian Heimesa37d4c62007-12-04 23:02:19 +0000334 self.assertEqual(divmod(-sys.maxsize-1, -1),
335 (sys.maxsize+1, 0))
Raymond Hettinger5ea7e312004-09-30 07:47:20 +0000336
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000337 self.assertTrue(not fcmp(divmod(3.25, 1.0), (3.0, 0.25)))
338 self.assertTrue(not fcmp(divmod(-3.25, 1.0), (-4.0, 0.75)))
339 self.assertTrue(not fcmp(divmod(3.25, -1.0), (-4.0, -0.75)))
340 self.assertTrue(not fcmp(divmod(-3.25, -1.0), (3.0, -0.25)))
Walter Dörwald919497e2003-01-19 16:23:59 +0000341
342 self.assertRaises(TypeError, divmod)
343
344 def test_eval(self):
345 self.assertEqual(eval('1+1'), 2)
346 self.assertEqual(eval(' 1+1\n'), 2)
347 globals = {'a': 1, 'b': 2}
348 locals = {'b': 200, 'c': 300}
349 self.assertEqual(eval('a', globals) , 1)
350 self.assertEqual(eval('a', globals, locals), 1)
351 self.assertEqual(eval('b', globals, locals), 200)
352 self.assertEqual(eval('c', globals, locals), 300)
Walter Dörwald919497e2003-01-19 16:23:59 +0000353 globals = {'a': 1, 'b': 2}
354 locals = {'b': 200, 'c': 300}
Amaury Forgeot d'Arcaf593462007-11-22 20:53:01 +0000355 bom = b'\xef\xbb\xbf'
356 self.assertEqual(eval(bom + b'a', globals, locals), 1)
Walter Dörwald1f5947b2007-05-22 16:52:54 +0000357 self.assertEqual(eval('"\xe5"', globals), "\xe5")
Walter Dörwald919497e2003-01-19 16:23:59 +0000358 self.assertRaises(TypeError, eval)
359 self.assertRaises(TypeError, eval, ())
Amaury Forgeot d'Arcaf593462007-11-22 20:53:01 +0000360 self.assertRaises(SyntaxError, eval, bom[:2] + b'a')
Walter Dörwald919497e2003-01-19 16:23:59 +0000361
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000362 def test_general_eval(self):
363 # Tests that general mappings can be used for the locals argument
364
365 class M:
366 "Test mapping interface versus possible calls from eval()."
367 def __getitem__(self, key):
368 if key == 'a':
369 return 12
370 raise KeyError
Guido van Rossumcd70eee2007-02-11 18:53:00 +0000371 def keys(self):
372 return list('xyz')
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000373
374 m = M()
375 g = globals()
376 self.assertEqual(eval('a', g, m), 12)
377 self.assertRaises(NameError, eval, 'b', g, m)
378 self.assertEqual(eval('dir()', g, m), list('xyz'))
379 self.assertEqual(eval('globals()', g, m), g)
380 self.assertEqual(eval('locals()', g, m), m)
Raymond Hettinger513ffe82004-07-06 13:44:41 +0000381 self.assertRaises(TypeError, eval, 'a', m)
Raymond Hettinger66bd2332004-08-02 08:30:07 +0000382 class A:
383 "Non-mapping"
384 pass
385 m = A()
386 self.assertRaises(TypeError, eval, 'a', g, m)
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000387
388 # Verify that dict subclasses work as well
389 class D(dict):
390 def __getitem__(self, key):
391 if key == 'a':
392 return 12
393 return dict.__getitem__(self, key)
Guido van Rossumcd70eee2007-02-11 18:53:00 +0000394 def keys(self):
395 return list('xyz')
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000396
397 d = D()
398 self.assertEqual(eval('a', g, d), 12)
399 self.assertRaises(NameError, eval, 'b', g, d)
400 self.assertEqual(eval('dir()', g, d), list('xyz'))
401 self.assertEqual(eval('globals()', g, d), g)
402 self.assertEqual(eval('locals()', g, d), d)
403
404 # Verify locals stores (used by list comps)
405 eval('[locals() for i in (2,3)]', g, d)
Raymond Hettingerf80680d2008-02-06 00:07:11 +0000406 eval('[locals() for i in (2,3)]', g, collections.UserDict())
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000407
408 class SpreadSheet:
409 "Sample application showing nested, calculated lookups."
410 _cells = {}
411 def __setitem__(self, key, formula):
412 self._cells[key] = formula
Thomas Wouters73e5a5b2006-06-08 15:35:45 +0000413 def __getitem__(self, key):
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000414 return eval(self._cells[key], globals(), self)
415
416 ss = SpreadSheet()
417 ss['a1'] = '5'
418 ss['a2'] = 'a1*6'
419 ss['a3'] = 'a2*7'
420 self.assertEqual(ss['a3'], 210)
421
Raymond Hettinger2a7dede2004-08-07 04:55:30 +0000422 # Verify that dir() catches a non-list returned by eval
423 # SF bug #1004669
424 class C:
425 def __getitem__(self, item):
426 raise KeyError(item)
Guido van Rossumcd70eee2007-02-11 18:53:00 +0000427 def keys(self):
428 return 1 # used to be 'a' but that's no longer an error
Raymond Hettinger2a7dede2004-08-07 04:55:30 +0000429 self.assertRaises(TypeError, eval, 'dir()', globals(), C())
430
Georg Brandl7cae87c2006-09-06 06:51:57 +0000431 def test_exec(self):
432 g = {}
433 exec('z = 1', g)
434 if '__builtins__' in g:
435 del g['__builtins__']
436 self.assertEqual(g, {'z': 1})
437
Guido van Rossumef87d6e2007-05-02 19:09:54 +0000438 exec('z = 1+1', g)
Georg Brandl7cae87c2006-09-06 06:51:57 +0000439 if '__builtins__' in g:
440 del g['__builtins__']
441 self.assertEqual(g, {'z': 2})
442 g = {}
443 l = {}
444
445 import warnings
446 warnings.filterwarnings("ignore", "global statement", module="<string>")
447 exec('global a; a = 1; b = 2', g, l)
448 if '__builtins__' in g:
449 del g['__builtins__']
450 if '__builtins__' in l:
451 del l['__builtins__']
452 self.assertEqual((g, l), ({'a': 1}, {'b': 2}))
453
Amaury Forgeot d'Arc9ed77352008-04-04 23:25:27 +0000454 def test_exec_redirected(self):
455 savestdout = sys.stdout
456 sys.stdout = None # Whatever that cannot flush()
457 try:
458 # Used to raise SystemError('error return without exception set')
459 exec('a')
460 except NameError:
461 pass
462 finally:
463 sys.stdout = savestdout
464
Walter Dörwald919497e2003-01-19 16:23:59 +0000465 def test_filter(self):
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000466 self.assertEqual(list(filter(lambda c: 'a' <= c <= 'z', 'Hello World')), list('elloorld'))
467 self.assertEqual(list(filter(None, [1, 'hello', [], [3], '', None, 9, 0])), [1, 'hello', [3], 9])
468 self.assertEqual(list(filter(lambda x: x > 0, [1, -3, 9, 0, 2])), [1, 9, 2])
469 self.assertEqual(list(filter(None, Squares(10))), [1, 4, 9, 16, 25, 36, 49, 64, 81])
470 self.assertEqual(list(filter(lambda x: x%2, Squares(10))), [1, 9, 25, 49, 81])
Walter Dörwald919497e2003-01-19 16:23:59 +0000471 def identity(item):
472 return 1
473 filter(identity, Squares(5))
474 self.assertRaises(TypeError, filter)
475 class BadSeq(object):
Tim Petersf2715e02003-02-19 02:35:07 +0000476 def __getitem__(self, index):
477 if index<4:
478 return 42
479 raise ValueError
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000480 self.assertRaises(ValueError, list, filter(lambda x: x, BadSeq()))
Walter Dörwald919497e2003-01-19 16:23:59 +0000481 def badfunc():
482 pass
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000483 self.assertRaises(TypeError, list, filter(badfunc, range(5)))
Walter Dörwald919497e2003-01-19 16:23:59 +0000484
Walter Dörwaldbf517072003-01-27 15:57:14 +0000485 # test bltinmodule.c::filtertuple()
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000486 self.assertEqual(list(filter(None, (1, 2))), [1, 2])
487 self.assertEqual(list(filter(lambda x: x>=3, (1, 2, 3, 4))), [3, 4])
488 self.assertRaises(TypeError, list, filter(42, (1, 2)))
Walter Dörwaldc3da83f2003-02-04 20:24:45 +0000489
Walter Dörwald919497e2003-01-19 16:23:59 +0000490 def test_getattr(self):
491 import sys
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000492 self.assertTrue(getattr(sys, 'stdout') is sys.stdout)
Walter Dörwald919497e2003-01-19 16:23:59 +0000493 self.assertRaises(TypeError, getattr, sys, 1)
494 self.assertRaises(TypeError, getattr, sys, 1, "foo")
495 self.assertRaises(TypeError, getattr)
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000496 self.assertRaises(AttributeError, getattr, sys, chr(sys.maxunicode))
Walter Dörwald919497e2003-01-19 16:23:59 +0000497
498 def test_hasattr(self):
499 import sys
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000500 self.assertTrue(hasattr(sys, 'stdout'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000501 self.assertRaises(TypeError, hasattr, sys, 1)
502 self.assertRaises(TypeError, hasattr)
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000503 self.assertEqual(False, hasattr(sys, chr(sys.maxunicode)))
Walter Dörwald919497e2003-01-19 16:23:59 +0000504
Alexandre Vassalottieca20b62008-05-16 02:54:33 +0000505 # Check that hasattr allows SystemExit and KeyboardInterrupts by
506 class A:
507 def __getattr__(self, what):
508 raise KeyboardInterrupt
509 self.assertRaises(KeyboardInterrupt, hasattr, A(), "b")
510 class B:
511 def __getattr__(self, what):
512 raise SystemExit
513 self.assertRaises(SystemExit, hasattr, B(), "b")
514
Walter Dörwald919497e2003-01-19 16:23:59 +0000515 def test_hash(self):
516 hash(None)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000517 self.assertEqual(hash(1), hash(1))
Walter Dörwald919497e2003-01-19 16:23:59 +0000518 self.assertEqual(hash(1), hash(1.0))
519 hash('spam')
Guido van Rossum98297ee2007-11-06 21:34:58 +0000520 self.assertEqual(hash('spam'), hash(b'spam'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000521 hash((0,1,2,3))
522 def f(): pass
523 self.assertRaises(TypeError, hash, [])
524 self.assertRaises(TypeError, hash, {})
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000525 # Bug 1536021: Allow hash to return long objects
526 class X:
527 def __hash__(self):
528 return 2**100
529 self.assertEquals(type(hash(X())), int)
530 class Y(object):
531 def __hash__(self):
532 return 2**100
533 self.assertEquals(type(hash(Y())), int)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000534 class Z(int):
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000535 def __hash__(self):
536 return self
Guido van Rossume2a383d2007-01-15 16:59:06 +0000537 self.assertEquals(hash(Z(42)), hash(42))
Walter Dörwald919497e2003-01-19 16:23:59 +0000538
539 def test_hex(self):
540 self.assertEqual(hex(16), '0x10')
Guido van Rossume2a383d2007-01-15 16:59:06 +0000541 self.assertEqual(hex(16), '0x10')
Guido van Rossum6c9e1302003-11-29 23:52:13 +0000542 self.assertEqual(hex(-16), '-0x10')
Guido van Rossume2a383d2007-01-15 16:59:06 +0000543 self.assertEqual(hex(-16), '-0x10')
Walter Dörwald919497e2003-01-19 16:23:59 +0000544 self.assertRaises(TypeError, hex, {})
545
546 def test_id(self):
547 id(None)
548 id(1)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000549 id(1)
Walter Dörwald919497e2003-01-19 16:23:59 +0000550 id(1.0)
551 id('spam')
552 id((0,1,2,3))
553 id([0,1,2,3])
554 id({'spam': 1, 'eggs': 2, 'ham': 3})
555
Guido van Rossuma88a0332007-02-26 16:59:55 +0000556 # Test input() later, alphabetized as if it were raw_input
557
Walter Dörwald919497e2003-01-19 16:23:59 +0000558 def test_iter(self):
559 self.assertRaises(TypeError, iter)
560 self.assertRaises(TypeError, iter, 42, 42)
561 lists = [("1", "2"), ["1", "2"], "12"]
Walter Dörwald919497e2003-01-19 16:23:59 +0000562 for l in lists:
563 i = iter(l)
Georg Brandla18af4e2007-04-21 15:47:16 +0000564 self.assertEqual(next(i), '1')
565 self.assertEqual(next(i), '2')
566 self.assertRaises(StopIteration, next, i)
Walter Dörwald919497e2003-01-19 16:23:59 +0000567
568 def test_isinstance(self):
569 class C:
570 pass
571 class D(C):
572 pass
573 class E:
574 pass
575 c = C()
576 d = D()
577 e = E()
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000578 self.assertTrue(isinstance(c, C))
579 self.assertTrue(isinstance(d, C))
580 self.assertTrue(not isinstance(e, C))
581 self.assertTrue(not isinstance(c, D))
582 self.assertTrue(not isinstance('foo', E))
Walter Dörwald919497e2003-01-19 16:23:59 +0000583 self.assertRaises(TypeError, isinstance, E, 'foo')
584 self.assertRaises(TypeError, isinstance)
585
586 def test_issubclass(self):
587 class C:
588 pass
589 class D(C):
590 pass
591 class E:
592 pass
593 c = C()
594 d = D()
595 e = E()
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000596 self.assertTrue(issubclass(D, C))
597 self.assertTrue(issubclass(C, C))
598 self.assertTrue(not issubclass(C, D))
Walter Dörwald919497e2003-01-19 16:23:59 +0000599 self.assertRaises(TypeError, issubclass, 'foo', E)
600 self.assertRaises(TypeError, issubclass, E, 'foo')
601 self.assertRaises(TypeError, issubclass)
602
603 def test_len(self):
604 self.assertEqual(len('123'), 3)
605 self.assertEqual(len(()), 0)
606 self.assertEqual(len((1, 2, 3, 4)), 4)
607 self.assertEqual(len([1, 2, 3, 4]), 4)
608 self.assertEqual(len({}), 0)
609 self.assertEqual(len({'a':1, 'b': 2}), 2)
610 class BadSeq:
611 def __len__(self):
612 raise ValueError
613 self.assertRaises(ValueError, len, BadSeq())
Benjamin Petersonee1ae7c2009-02-08 21:07:20 +0000614 class InvalidLen:
615 def __len__(self):
616 return None
617 self.assertRaises(TypeError, len, InvalidLen())
618 class FloatLen:
619 def __len__(self):
620 return 4.5
621 self.assertRaises(TypeError, len, FloatLen())
622 class HugeLen:
623 def __len__(self):
624 return sys.maxsize + 1
625 self.assertRaises(OverflowError, len, HugeLen())
Walter Dörwald919497e2003-01-19 16:23:59 +0000626
Walter Dörwald919497e2003-01-19 16:23:59 +0000627 def test_map(self):
628 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000629 list(map(lambda x: x*x, range(1,4))),
Walter Dörwald919497e2003-01-19 16:23:59 +0000630 [1, 4, 9]
631 )
632 try:
633 from math import sqrt
634 except ImportError:
635 def sqrt(x):
636 return pow(x, 0.5)
637 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000638 list(map(lambda x: list(map(sqrt, x)), [[16, 4], [81, 9]])),
Walter Dörwald919497e2003-01-19 16:23:59 +0000639 [[4.0, 2.0], [9.0, 3.0]]
640 )
641 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000642 list(map(lambda x, y: x+y, [1,3,2], [9,1,4])),
Walter Dörwald919497e2003-01-19 16:23:59 +0000643 [10, 4, 6]
644 )
645
646 def plus(*v):
647 accu = 0
648 for i in v: accu = accu + i
649 return accu
650 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000651 list(map(plus, [1, 3, 7])),
Walter Dörwald919497e2003-01-19 16:23:59 +0000652 [1, 3, 7]
653 )
654 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000655 list(map(plus, [1, 3, 7], [4, 9, 2])),
Walter Dörwald919497e2003-01-19 16:23:59 +0000656 [1+4, 3+9, 7+2]
657 )
658 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000659 list(map(plus, [1, 3, 7], [4, 9, 2], [1, 1, 0])),
Walter Dörwald919497e2003-01-19 16:23:59 +0000660 [1+4+1, 3+9+1, 7+2+0]
661 )
662 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000663 list(map(int, Squares(10))),
Walter Dörwald919497e2003-01-19 16:23:59 +0000664 [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
665 )
Guido van Rossum47b9ff62006-08-24 00:41:19 +0000666 def Max(a, b):
667 if a is None:
668 return b
669 if b is None:
670 return a
671 return max(a, b)
Walter Dörwald919497e2003-01-19 16:23:59 +0000672 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000673 list(map(Max, Squares(3), Squares(2))),
674 [0, 1]
Walter Dörwald919497e2003-01-19 16:23:59 +0000675 )
676 self.assertRaises(TypeError, map)
677 self.assertRaises(TypeError, map, lambda x: x, 42)
Walter Dörwald919497e2003-01-19 16:23:59 +0000678 class BadSeq:
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000679 def __iter__(self):
Walter Dörwald919497e2003-01-19 16:23:59 +0000680 raise ValueError
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000681 yield None
682 self.assertRaises(ValueError, list, map(lambda x: x, BadSeq()))
Neal Norwitzfcf44352005-11-27 20:37:43 +0000683 def badfunc(x):
684 raise RuntimeError
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000685 self.assertRaises(RuntimeError, list, map(badfunc, range(5)))
Walter Dörwald919497e2003-01-19 16:23:59 +0000686
687 def test_max(self):
688 self.assertEqual(max('123123'), '3')
689 self.assertEqual(max(1, 2, 3), 3)
690 self.assertEqual(max((1, 2, 3, 1, 2, 3)), 3)
691 self.assertEqual(max([1, 2, 3, 1, 2, 3]), 3)
692
Guido van Rossume2a383d2007-01-15 16:59:06 +0000693 self.assertEqual(max(1, 2, 3.0), 3.0)
694 self.assertEqual(max(1, 2.0, 3), 3)
695 self.assertEqual(max(1.0, 2, 3), 3)
Walter Dörwald919497e2003-01-19 16:23:59 +0000696
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +0000697 for stmt in (
698 "max(key=int)", # no args
699 "max(1, key=int)", # single arg not iterable
700 "max(1, 2, keystone=int)", # wrong keyword
701 "max(1, 2, key=int, abc=int)", # two many keywords
702 "max(1, 2, key=1)", # keyfunc is not callable
703 ):
Tim Peters7f061872004-12-07 21:17:46 +0000704 try:
Georg Brandl7cae87c2006-09-06 06:51:57 +0000705 exec(stmt, globals())
Tim Peters7f061872004-12-07 21:17:46 +0000706 except TypeError:
707 pass
708 else:
709 self.fail(stmt)
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +0000710
711 self.assertEqual(max((1,), key=neg), 1) # one elem iterable
712 self.assertEqual(max((1,2), key=neg), 1) # two elem iterable
713 self.assertEqual(max(1, 2, key=neg), 1) # two elems
714
715 data = [random.randrange(200) for i in range(100)]
716 keys = dict((elem, random.randrange(50)) for elem in data)
717 f = keys.__getitem__
718 self.assertEqual(max(data, key=f),
719 sorted(reversed(data), key=f)[-1])
720
Walter Dörwald919497e2003-01-19 16:23:59 +0000721 def test_min(self):
722 self.assertEqual(min('123123'), '1')
723 self.assertEqual(min(1, 2, 3), 1)
724 self.assertEqual(min((1, 2, 3, 1, 2, 3)), 1)
725 self.assertEqual(min([1, 2, 3, 1, 2, 3]), 1)
726
Guido van Rossume2a383d2007-01-15 16:59:06 +0000727 self.assertEqual(min(1, 2, 3.0), 1)
728 self.assertEqual(min(1, 2.0, 3), 1)
729 self.assertEqual(min(1.0, 2, 3), 1.0)
Walter Dörwald919497e2003-01-19 16:23:59 +0000730
731 self.assertRaises(TypeError, min)
732 self.assertRaises(TypeError, min, 42)
733 self.assertRaises(ValueError, min, ())
734 class BadSeq:
735 def __getitem__(self, index):
736 raise ValueError
737 self.assertRaises(ValueError, min, BadSeq())
Walter Dörwald919497e2003-01-19 16:23:59 +0000738
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +0000739 for stmt in (
740 "min(key=int)", # no args
741 "min(1, key=int)", # single arg not iterable
742 "min(1, 2, keystone=int)", # wrong keyword
743 "min(1, 2, key=int, abc=int)", # two many keywords
744 "min(1, 2, key=1)", # keyfunc is not callable
745 ):
Tim Peters7f061872004-12-07 21:17:46 +0000746 try:
Georg Brandl7cae87c2006-09-06 06:51:57 +0000747 exec(stmt, globals())
Tim Peters7f061872004-12-07 21:17:46 +0000748 except TypeError:
749 pass
750 else:
751 self.fail(stmt)
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +0000752
753 self.assertEqual(min((1,), key=neg), 1) # one elem iterable
754 self.assertEqual(min((1,2), key=neg), 2) # two elem iterable
755 self.assertEqual(min(1, 2, key=neg), 2) # two elems
756
757 data = [random.randrange(200) for i in range(100)]
758 keys = dict((elem, random.randrange(50)) for elem in data)
759 f = keys.__getitem__
760 self.assertEqual(min(data, key=f),
761 sorted(data, key=f)[0])
762
Georg Brandla18af4e2007-04-21 15:47:16 +0000763 def test_next(self):
764 it = iter(range(2))
765 self.assertEqual(next(it), 0)
766 self.assertEqual(next(it), 1)
767 self.assertRaises(StopIteration, next, it)
768 self.assertRaises(StopIteration, next, it)
769 self.assertEquals(next(it, 42), 42)
770
771 class Iter(object):
772 def __iter__(self):
773 return self
774 def __next__(self):
775 raise StopIteration
776
777 it = iter(Iter())
778 self.assertEquals(next(it, 42), 42)
779 self.assertRaises(StopIteration, next, it)
780
781 def gen():
782 yield 1
783 return
784
785 it = gen()
786 self.assertEquals(next(it), 1)
787 self.assertRaises(StopIteration, next, it)
788 self.assertEquals(next(it, 42), 42)
789
Walter Dörwald919497e2003-01-19 16:23:59 +0000790 def test_oct(self):
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000791 self.assertEqual(oct(100), '0o144')
792 self.assertEqual(oct(100), '0o144')
793 self.assertEqual(oct(-100), '-0o144')
794 self.assertEqual(oct(-100), '-0o144')
Walter Dörwald919497e2003-01-19 16:23:59 +0000795 self.assertRaises(TypeError, oct, ())
796
797 def write_testfile(self):
Guido van Rossuma88a0332007-02-26 16:59:55 +0000798 # NB the first 4 lines are also used to test input, below
Walter Dörwald919497e2003-01-19 16:23:59 +0000799 fp = open(TESTFN, 'w')
800 try:
801 fp.write('1+1\n')
802 fp.write('1+1\n')
803 fp.write('The quick brown fox jumps over the lazy dog')
804 fp.write('.\n')
805 fp.write('Dear John\n')
806 fp.write('XXX'*100)
807 fp.write('YYY'*100)
808 finally:
809 fp.close()
810
811 def test_open(self):
812 self.write_testfile()
813 fp = open(TESTFN, 'r')
814 try:
815 self.assertEqual(fp.readline(4), '1+1\n')
816 self.assertEqual(fp.readline(4), '1+1\n')
817 self.assertEqual(fp.readline(), 'The quick brown fox jumps over the lazy dog.\n')
818 self.assertEqual(fp.readline(4), 'Dear')
819 self.assertEqual(fp.readline(100), ' John\n')
820 self.assertEqual(fp.read(300), 'XXX'*100)
821 self.assertEqual(fp.read(1000), 'YYY'*100)
822 finally:
823 fp.close()
824 unlink(TESTFN)
825
826 def test_ord(self):
827 self.assertEqual(ord(' '), 32)
828 self.assertEqual(ord('A'), 65)
829 self.assertEqual(ord('a'), 97)
Guido van Rossumf9e91c92007-05-08 21:05:48 +0000830 self.assertEqual(ord('\x80'), 128)
831 self.assertEqual(ord('\xff'), 255)
832
833 self.assertEqual(ord(b' '), 32)
834 self.assertEqual(ord(b'A'), 65)
835 self.assertEqual(ord(b'a'), 97)
836 self.assertEqual(ord(b'\x80'), 128)
837 self.assertEqual(ord(b'\xff'), 255)
838
Walter Dörwald1f5947b2007-05-22 16:52:54 +0000839 self.assertEqual(ord(chr(sys.maxunicode)), sys.maxunicode)
Walter Dörwald919497e2003-01-19 16:23:59 +0000840 self.assertRaises(TypeError, ord, 42)
Walter Dörwald919497e2003-01-19 16:23:59 +0000841
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000842 self.assertEqual(ord(chr(0x10FFFF)), 0x10FFFF)
843 self.assertEqual(ord("\U0000FFFF"), 0x0000FFFF)
844 self.assertEqual(ord("\U00010000"), 0x00010000)
845 self.assertEqual(ord("\U00010001"), 0x00010001)
846 self.assertEqual(ord("\U000FFFFE"), 0x000FFFFE)
847 self.assertEqual(ord("\U000FFFFF"), 0x000FFFFF)
848 self.assertEqual(ord("\U00100000"), 0x00100000)
849 self.assertEqual(ord("\U00100001"), 0x00100001)
850 self.assertEqual(ord("\U0010FFFE"), 0x0010FFFE)
851 self.assertEqual(ord("\U0010FFFF"), 0x0010FFFF)
852
Walter Dörwald919497e2003-01-19 16:23:59 +0000853 def test_pow(self):
854 self.assertEqual(pow(0,0), 1)
855 self.assertEqual(pow(0,1), 0)
856 self.assertEqual(pow(1,0), 1)
857 self.assertEqual(pow(1,1), 1)
858
859 self.assertEqual(pow(2,0), 1)
860 self.assertEqual(pow(2,10), 1024)
861 self.assertEqual(pow(2,20), 1024*1024)
862 self.assertEqual(pow(2,30), 1024*1024*1024)
863
864 self.assertEqual(pow(-2,0), 1)
865 self.assertEqual(pow(-2,1), -2)
866 self.assertEqual(pow(-2,2), 4)
867 self.assertEqual(pow(-2,3), -8)
868
Guido van Rossume2a383d2007-01-15 16:59:06 +0000869 self.assertEqual(pow(0,0), 1)
870 self.assertEqual(pow(0,1), 0)
871 self.assertEqual(pow(1,0), 1)
872 self.assertEqual(pow(1,1), 1)
Walter Dörwald919497e2003-01-19 16:23:59 +0000873
Guido van Rossume2a383d2007-01-15 16:59:06 +0000874 self.assertEqual(pow(2,0), 1)
875 self.assertEqual(pow(2,10), 1024)
876 self.assertEqual(pow(2,20), 1024*1024)
877 self.assertEqual(pow(2,30), 1024*1024*1024)
Walter Dörwald919497e2003-01-19 16:23:59 +0000878
Guido van Rossume2a383d2007-01-15 16:59:06 +0000879 self.assertEqual(pow(-2,0), 1)
880 self.assertEqual(pow(-2,1), -2)
881 self.assertEqual(pow(-2,2), 4)
882 self.assertEqual(pow(-2,3), -8)
Walter Dörwald919497e2003-01-19 16:23:59 +0000883
884 self.assertAlmostEqual(pow(0.,0), 1.)
885 self.assertAlmostEqual(pow(0.,1), 0.)
886 self.assertAlmostEqual(pow(1.,0), 1.)
887 self.assertAlmostEqual(pow(1.,1), 1.)
888
889 self.assertAlmostEqual(pow(2.,0), 1.)
890 self.assertAlmostEqual(pow(2.,10), 1024.)
891 self.assertAlmostEqual(pow(2.,20), 1024.*1024.)
892 self.assertAlmostEqual(pow(2.,30), 1024.*1024.*1024.)
893
894 self.assertAlmostEqual(pow(-2.,0), 1.)
895 self.assertAlmostEqual(pow(-2.,1), -2.)
896 self.assertAlmostEqual(pow(-2.,2), 4.)
897 self.assertAlmostEqual(pow(-2.,3), -8.)
898
Guido van Rossume2a383d2007-01-15 16:59:06 +0000899 for x in 2, 2, 2.0:
900 for y in 10, 10, 10.0:
901 for z in 1000, 1000, 1000.0:
Walter Dörwald919497e2003-01-19 16:23:59 +0000902 if isinstance(x, float) or \
903 isinstance(y, float) or \
904 isinstance(z, float):
905 self.assertRaises(TypeError, pow, x, y, z)
906 else:
907 self.assertAlmostEqual(pow(x, y, z), 24.0)
908
Jeffrey Yasskin3404b3c2007-09-07 15:15:49 +0000909 self.assertAlmostEqual(pow(-1, 0.5), 1j)
910 self.assertAlmostEqual(pow(-1, 1/3), 0.5 + 0.8660254037844386j)
911
Walter Dörwald919497e2003-01-19 16:23:59 +0000912 self.assertRaises(TypeError, pow, -1, -2, 3)
913 self.assertRaises(ValueError, pow, 1, 2, 0)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000914 self.assertRaises(TypeError, pow, -1, -2, 3)
915 self.assertRaises(ValueError, pow, 1, 2, 0)
Walter Dörwald919497e2003-01-19 16:23:59 +0000916
917 self.assertRaises(TypeError, pow)
918
919 def test_range(self):
Guido van Rossum805365e2007-05-07 22:24:25 +0000920 self.assertEqual(list(range(3)), [0, 1, 2])
921 self.assertEqual(list(range(1, 5)), [1, 2, 3, 4])
922 self.assertEqual(list(range(0)), [])
923 self.assertEqual(list(range(-3)), [])
924 self.assertEqual(list(range(1, 10, 3)), [1, 4, 7])
925 #self.assertEqual(list(range(5, -5, -3)), [5, 2, -1, -4])
Walter Dörwald919497e2003-01-19 16:23:59 +0000926
Mark Dickinsoneb36d312009-06-24 18:36:46 +0000927 #issue 6334: the internal stored range length was being
928 #computed incorrectly in some cases involving large arguments.
929 x = range(10**20, 10**20+10, 3)
930 self.assertEqual(len(x), 4)
931 self.assertEqual(len(list(x)), 4)
932
933 x = range(10**20+10, 10**20, 3)
934 self.assertEqual(len(x), 0)
935 self.assertEqual(len(list(x)), 0)
936
937 x = range(10**20, 10**20+10, -3)
938 self.assertEqual(len(x), 0)
939 self.assertEqual(len(list(x)), 0)
940
941 x = range(10**20+10, 10**20, -3)
942 self.assertEqual(len(x), 4)
943 self.assertEqual(len(list(x)), 4)
944
Guido van Rossum805365e2007-05-07 22:24:25 +0000945 """ XXX(nnorwitz):
Guido van Rossumefbbb1c2003-04-11 18:43:06 +0000946 # Now test range() with longs
Guido van Rossum805365e2007-05-07 22:24:25 +0000947 self.assertEqual(list(range(-2**100)), [])
948 self.assertEqual(list(range(0, -2**100)), [])
949 self.assertEqual(list(range(0, 2**100, -1)), [])
950 self.assertEqual(list(range(0, 2**100, -1)), [])
Guido van Rossumefbbb1c2003-04-11 18:43:06 +0000951
Christian Heimesa37d4c62007-12-04 23:02:19 +0000952 a = int(10 * sys.maxsize)
953 b = int(100 * sys.maxsize)
954 c = int(50 * sys.maxsize)
Guido van Rossumefbbb1c2003-04-11 18:43:06 +0000955
Guido van Rossum805365e2007-05-07 22:24:25 +0000956 self.assertEqual(list(range(a, a+2)), [a, a+1])
957 self.assertEqual(list(range(a+2, a, -1)), [a+2, a+1])
958 self.assertEqual(list(range(a+4, a, -2)), [a+4, a+2])
Guido van Rossumefbbb1c2003-04-11 18:43:06 +0000959
Guido van Rossum805365e2007-05-07 22:24:25 +0000960 seq = list(range(a, b, c))
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000961 self.assertTrue(a in seq)
962 self.assertTrue(b not in seq)
Guido van Rossumefbbb1c2003-04-11 18:43:06 +0000963 self.assertEqual(len(seq), 2)
964
Guido van Rossum805365e2007-05-07 22:24:25 +0000965 seq = list(range(b, a, -c))
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000966 self.assertTrue(b in seq)
967 self.assertTrue(a not in seq)
Guido van Rossumefbbb1c2003-04-11 18:43:06 +0000968 self.assertEqual(len(seq), 2)
969
Guido van Rossum805365e2007-05-07 22:24:25 +0000970 seq = list(range(-a, -b, -c))
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000971 self.assertTrue(-a in seq)
972 self.assertTrue(-b not in seq)
Guido van Rossumefbbb1c2003-04-11 18:43:06 +0000973 self.assertEqual(len(seq), 2)
974
Walter Dörwald919497e2003-01-19 16:23:59 +0000975 self.assertRaises(TypeError, range)
976 self.assertRaises(TypeError, range, 1, 2, 3, 4)
977 self.assertRaises(ValueError, range, 1, 2, 0)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000978 self.assertRaises(ValueError, range, a, a + 1, int(0))
Neal Norwitzfcf44352005-11-27 20:37:43 +0000979
980 class badzero(int):
Guido van Rossum47b9ff62006-08-24 00:41:19 +0000981 def __eq__(self, other):
Neal Norwitzfcf44352005-11-27 20:37:43 +0000982 raise RuntimeError
Guido van Rossum47b9ff62006-08-24 00:41:19 +0000983 __ne__ = __lt__ = __gt__ = __le__ = __ge__ = __eq__
984
985 # XXX This won't (but should!) raise RuntimeError if a is an int...
Neal Norwitzfcf44352005-11-27 20:37:43 +0000986 self.assertRaises(RuntimeError, range, a, a + 1, badzero(1))
Guido van Rossum805365e2007-05-07 22:24:25 +0000987 """
Walter Dörwald919497e2003-01-19 16:23:59 +0000988
Guido van Rossumefbbb1c2003-04-11 18:43:06 +0000989 # Reject floats when it would require PyLongs to represent.
990 # (smaller floats still accepted, but deprecated)
Tim Peters299b3df2003-04-15 14:40:03 +0000991 self.assertRaises(TypeError, range, 1e100, 1e101, 1e101)
Guido van Rossumefbbb1c2003-04-11 18:43:06 +0000992
Walter Dörwald357981e2003-04-15 18:59:28 +0000993 self.assertRaises(TypeError, range, 0, "spam")
994 self.assertRaises(TypeError, range, 0, 42, "spam")
995
Christian Heimesa37d4c62007-12-04 23:02:19 +0000996 #NEAL self.assertRaises(OverflowError, range, -sys.maxsize, sys.maxsize)
997 #NEAL self.assertRaises(OverflowError, range, 0, 2*sys.maxsize)
Guido van Rossum805365e2007-05-07 22:24:25 +0000998
Christian Heimesa37d4c62007-12-04 23:02:19 +0000999 self.assertRaises(OverflowError, len, range(0, sys.maxsize**10))
Walter Dörwald357981e2003-04-15 18:59:28 +00001000
Guido van Rossuma88a0332007-02-26 16:59:55 +00001001 def test_input(self):
1002 self.write_testfile()
1003 fp = open(TESTFN, 'r')
1004 savestdin = sys.stdin
1005 savestdout = sys.stdout # Eats the echo
1006 try:
1007 sys.stdin = fp
1008 sys.stdout = BitBucket()
1009 self.assertEqual(input(), "1+1")
1010 self.assertEqual(input('testing\n'), "1+1")
1011 self.assertEqual(input(), 'The quick brown fox jumps over the lazy dog.')
1012 self.assertEqual(input('testing\n'), 'Dear John')
1013
1014 # SF 1535165: don't segfault on closed stdin
1015 # sys.stdout must be a regular file for triggering
1016 sys.stdout = savestdout
1017 sys.stdin.close()
1018 self.assertRaises(ValueError, input)
1019
1020 sys.stdout = BitBucket()
Guido van Rossum34d19282007-08-09 01:03:29 +00001021 sys.stdin = io.StringIO("NULL\0")
Guido van Rossuma88a0332007-02-26 16:59:55 +00001022 self.assertRaises(TypeError, input, 42, 42)
Guido van Rossum34d19282007-08-09 01:03:29 +00001023 sys.stdin = io.StringIO(" 'whitespace'")
Guido van Rossuma88a0332007-02-26 16:59:55 +00001024 self.assertEqual(input(), " 'whitespace'")
Guido van Rossum34d19282007-08-09 01:03:29 +00001025 sys.stdin = io.StringIO()
Guido van Rossuma88a0332007-02-26 16:59:55 +00001026 self.assertRaises(EOFError, input)
1027
1028 del sys.stdout
1029 self.assertRaises(RuntimeError, input, 'prompt')
1030 del sys.stdin
1031 self.assertRaises(RuntimeError, input, 'prompt')
1032 finally:
1033 sys.stdin = savestdin
1034 sys.stdout = savestdout
1035 fp.close()
1036 unlink(TESTFN)
1037
Walter Dörwald919497e2003-01-19 16:23:59 +00001038 def test_repr(self):
1039 self.assertEqual(repr(''), '\'\'')
1040 self.assertEqual(repr(0), '0')
Guido van Rossume2a383d2007-01-15 16:59:06 +00001041 self.assertEqual(repr(0), '0')
Walter Dörwald919497e2003-01-19 16:23:59 +00001042 self.assertEqual(repr(()), '()')
1043 self.assertEqual(repr([]), '[]')
1044 self.assertEqual(repr({}), '{}')
1045 a = []
1046 a.append(a)
1047 self.assertEqual(repr(a), '[[...]]')
1048 a = {}
1049 a[0] = a
1050 self.assertEqual(repr(a), '{0: {...}}')
1051
1052 def test_round(self):
1053 self.assertEqual(round(0.0), 0.0)
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001054 self.assertEqual(type(round(0.0)), int)
Walter Dörwald919497e2003-01-19 16:23:59 +00001055 self.assertEqual(round(1.0), 1.0)
1056 self.assertEqual(round(10.0), 10.0)
1057 self.assertEqual(round(1000000000.0), 1000000000.0)
1058 self.assertEqual(round(1e20), 1e20)
1059
1060 self.assertEqual(round(-1.0), -1.0)
1061 self.assertEqual(round(-10.0), -10.0)
1062 self.assertEqual(round(-1000000000.0), -1000000000.0)
1063 self.assertEqual(round(-1e20), -1e20)
1064
1065 self.assertEqual(round(0.1), 0.0)
1066 self.assertEqual(round(1.1), 1.0)
1067 self.assertEqual(round(10.1), 10.0)
1068 self.assertEqual(round(1000000000.1), 1000000000.0)
1069
1070 self.assertEqual(round(-1.1), -1.0)
1071 self.assertEqual(round(-10.1), -10.0)
1072 self.assertEqual(round(-1000000000.1), -1000000000.0)
1073
1074 self.assertEqual(round(0.9), 1.0)
1075 self.assertEqual(round(9.9), 10.0)
1076 self.assertEqual(round(999999999.9), 1000000000.0)
1077
1078 self.assertEqual(round(-0.9), -1.0)
1079 self.assertEqual(round(-9.9), -10.0)
1080 self.assertEqual(round(-999999999.9), -1000000000.0)
1081
1082 self.assertEqual(round(-8.0, -1), -10.0)
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001083 self.assertEqual(type(round(-8.0, -1)), float)
1084
1085 self.assertEqual(type(round(-8.0, 0)), float)
1086 self.assertEqual(type(round(-8.0, 1)), float)
1087
1088 # Check even / odd rounding behaviour
1089 self.assertEqual(round(5.5), 6)
1090 self.assertEqual(round(6.5), 6)
1091 self.assertEqual(round(-5.5), -6)
1092 self.assertEqual(round(-6.5), -6)
1093
1094 # Check behavior on ints
1095 self.assertEqual(round(0), 0)
1096 self.assertEqual(round(8), 8)
1097 self.assertEqual(round(-8), -8)
1098 self.assertEqual(type(round(0)), int)
Mark Dickinson1124e712009-01-28 21:25:58 +00001099 self.assertEqual(type(round(-8, -1)), int)
1100 self.assertEqual(type(round(-8, 0)), int)
1101 self.assertEqual(type(round(-8, 1)), int)
Walter Dörwald919497e2003-01-19 16:23:59 +00001102
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001103 # test new kwargs
1104 self.assertEqual(round(number=-8.0, ndigits=-1), -10.0)
1105
Walter Dörwald919497e2003-01-19 16:23:59 +00001106 self.assertRaises(TypeError, round)
1107
Alex Martelliae211f92007-08-22 23:21:33 +00001108 # test generic rounding delegation for reals
1109 class TestRound:
1110 def __round__(self):
1111 return 23
1112
1113 class TestNoRound:
1114 pass
1115
1116 self.assertEqual(round(TestRound()), 23)
1117
1118 self.assertRaises(TypeError, round, 1, 2, 3)
1119 self.assertRaises(TypeError, round, TestNoRound())
1120
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001121 t = TestNoRound()
1122 t.__round__ = lambda *args: args
1123 self.assertRaises(TypeError, round, t)
1124 self.assertRaises(TypeError, round, t, 0)
1125
Walter Dörwald919497e2003-01-19 16:23:59 +00001126 def test_setattr(self):
Tim Petersf2715e02003-02-19 02:35:07 +00001127 setattr(sys, 'spam', 1)
1128 self.assertEqual(sys.spam, 1)
1129 self.assertRaises(TypeError, setattr, sys, 1, 'spam')
1130 self.assertRaises(TypeError, setattr)
Walter Dörwald919497e2003-01-19 16:23:59 +00001131
Walter Dörwald919497e2003-01-19 16:23:59 +00001132
Alex Martellia70b1912003-04-22 08:12:33 +00001133 def test_sum(self):
1134 self.assertEqual(sum([]), 0)
Guido van Rossum805365e2007-05-07 22:24:25 +00001135 self.assertEqual(sum(list(range(2,8))), 27)
1136 self.assertEqual(sum(iter(list(range(2,8)))), 27)
Alex Martellia70b1912003-04-22 08:12:33 +00001137 self.assertEqual(sum(Squares(10)), 285)
1138 self.assertEqual(sum(iter(Squares(10))), 285)
1139 self.assertEqual(sum([[1], [2], [3]], []), [1, 2, 3])
1140
1141 self.assertRaises(TypeError, sum)
1142 self.assertRaises(TypeError, sum, 42)
1143 self.assertRaises(TypeError, sum, ['a', 'b', 'c'])
1144 self.assertRaises(TypeError, sum, ['a', 'b', 'c'], '')
1145 self.assertRaises(TypeError, sum, [[1], [2], [3]])
1146 self.assertRaises(TypeError, sum, [{2:3}])
1147 self.assertRaises(TypeError, sum, [{2:3}]*2, {2:3})
1148
1149 class BadSeq:
1150 def __getitem__(self, index):
1151 raise ValueError
1152 self.assertRaises(ValueError, sum, BadSeq())
1153
Walter Dörwald919497e2003-01-19 16:23:59 +00001154 def test_type(self):
1155 self.assertEqual(type(''), type('123'))
1156 self.assertNotEqual(type(''), type(()))
1157
Guido van Rossumfee7b932005-01-16 00:21:28 +00001158 # We don't want self in vars(), so these are static methods
1159
1160 @staticmethod
Walter Dörwald919497e2003-01-19 16:23:59 +00001161 def get_vars_f0():
1162 return vars()
Walter Dörwald919497e2003-01-19 16:23:59 +00001163
Guido van Rossumfee7b932005-01-16 00:21:28 +00001164 @staticmethod
Walter Dörwald919497e2003-01-19 16:23:59 +00001165 def get_vars_f2():
1166 BuiltinTest.get_vars_f0()
1167 a = 1
1168 b = 2
1169 return vars()
Walter Dörwald919497e2003-01-19 16:23:59 +00001170
1171 def test_vars(self):
Raymond Hettingera690a992003-11-16 16:17:49 +00001172 self.assertEqual(set(vars()), set(dir()))
Walter Dörwald919497e2003-01-19 16:23:59 +00001173 import sys
Raymond Hettingera690a992003-11-16 16:17:49 +00001174 self.assertEqual(set(vars(sys)), set(dir(sys)))
Walter Dörwald919497e2003-01-19 16:23:59 +00001175 self.assertEqual(self.get_vars_f0(), {})
1176 self.assertEqual(self.get_vars_f2(), {'a': 1, 'b': 2})
1177 self.assertRaises(TypeError, vars, 42, 42)
1178 self.assertRaises(TypeError, vars, 42)
1179
1180 def test_zip(self):
1181 a = (1, 2, 3)
1182 b = (4, 5, 6)
1183 t = [(1, 4), (2, 5), (3, 6)]
Guido van Rossum801f0d72006-08-24 19:48:10 +00001184 self.assertEqual(list(zip(a, b)), t)
Walter Dörwald919497e2003-01-19 16:23:59 +00001185 b = [4, 5, 6]
Guido van Rossum801f0d72006-08-24 19:48:10 +00001186 self.assertEqual(list(zip(a, b)), t)
Walter Dörwald919497e2003-01-19 16:23:59 +00001187 b = (4, 5, 6, 7)
Guido van Rossum801f0d72006-08-24 19:48:10 +00001188 self.assertEqual(list(zip(a, b)), t)
Walter Dörwald919497e2003-01-19 16:23:59 +00001189 class I:
1190 def __getitem__(self, i):
1191 if i < 0 or i > 2: raise IndexError
1192 return i + 4
Guido van Rossum801f0d72006-08-24 19:48:10 +00001193 self.assertEqual(list(zip(a, I())), t)
1194 self.assertEqual(list(zip()), [])
1195 self.assertEqual(list(zip(*[])), [])
Walter Dörwald919497e2003-01-19 16:23:59 +00001196 self.assertRaises(TypeError, zip, None)
1197 class G:
1198 pass
1199 self.assertRaises(TypeError, zip, a, G())
1200
1201 # Make sure zip doesn't try to allocate a billion elements for the
1202 # result list when one of its arguments doesn't say how long it is.
1203 # A MemoryError is the most likely failure mode.
1204 class SequenceWithoutALength:
1205 def __getitem__(self, i):
1206 if i == 5:
1207 raise IndexError
1208 else:
1209 return i
1210 self.assertEqual(
Guido van Rossum805365e2007-05-07 22:24:25 +00001211 list(zip(SequenceWithoutALength(), range(2**30))),
Walter Dörwald919497e2003-01-19 16:23:59 +00001212 list(enumerate(range(5)))
1213 )
1214
1215 class BadSeq:
1216 def __getitem__(self, i):
1217 if i == 5:
1218 raise ValueError
1219 else:
1220 return i
Guido van Rossum801f0d72006-08-24 19:48:10 +00001221 self.assertRaises(ValueError, list, zip(BadSeq(), BadSeq()))
Walter Dörwald919497e2003-01-19 16:23:59 +00001222
Christian Heimes90c3d9b2008-02-23 13:18:03 +00001223 def test_bin(self):
1224 self.assertEqual(bin(0), '0b0')
1225 self.assertEqual(bin(1), '0b1')
1226 self.assertEqual(bin(-1), '-0b1')
1227 self.assertEqual(bin(2**65), '0b1' + '0' * 65)
1228 self.assertEqual(bin(2**65-1), '0b' + '1' * 65)
1229 self.assertEqual(bin(-(2**65)), '-0b1' + '0' * 65)
1230 self.assertEqual(bin(-(2**65-1)), '-0b' + '1' * 65)
1231
Georg Brandl953152f2009-07-22 12:03:59 +00001232 def test_bytearray_translate(self):
1233 x = bytearray(b"abc")
1234 self.assertRaises(ValueError, x.translate, b"1", 1)
1235 self.assertRaises(TypeError, x.translate, b"1"*256, 1)
1236
Raymond Hettinger64958a12003-12-17 20:43:33 +00001237class TestSorted(unittest.TestCase):
1238
1239 def test_basic(self):
Guido van Rossum805365e2007-05-07 22:24:25 +00001240 data = list(range(100))
Raymond Hettinger64958a12003-12-17 20:43:33 +00001241 copy = data[:]
1242 random.shuffle(copy)
1243 self.assertEqual(data, sorted(copy))
1244 self.assertNotEqual(data, copy)
1245
1246 data.reverse()
1247 random.shuffle(copy)
Raymond Hettinger64958a12003-12-17 20:43:33 +00001248 self.assertEqual(data, sorted(copy, key=lambda x: -x))
1249 self.assertNotEqual(data, copy)
1250 random.shuffle(copy)
1251 self.assertEqual(data, sorted(copy, reverse=1))
1252 self.assertNotEqual(data, copy)
1253
1254 def test_inputtypes(self):
1255 s = 'abracadabra'
Walter Dörwald1f5947b2007-05-22 16:52:54 +00001256 types = [list, tuple, str]
Walter Dörwald4e41a4b2005-08-03 17:09:04 +00001257 for T in types:
Raymond Hettinger64958a12003-12-17 20:43:33 +00001258 self.assertEqual(sorted(s), sorted(T(s)))
1259
Walter Dörwald1f5947b2007-05-22 16:52:54 +00001260 s = ''.join(set(s)) # unique letters only
1261 types = [str, set, frozenset, list, tuple, dict.fromkeys]
Walter Dörwald4e41a4b2005-08-03 17:09:04 +00001262 for T in types:
Raymond Hettinger64958a12003-12-17 20:43:33 +00001263 self.assertEqual(sorted(s), sorted(T(s)))
1264
1265 def test_baddecorator(self):
1266 data = 'The quick Brown fox Jumped over The lazy Dog'.split()
1267 self.assertRaises(TypeError, sorted, data, None, lambda x,y: 0)
1268
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001269def test_main(verbose=None):
1270 test_classes = (BuiltinTest, TestSorted)
1271
1272 run_unittest(*test_classes)
1273
1274 # verify reference counting
1275 if verbose and hasattr(sys, "gettotalrefcount"):
1276 import gc
1277 counts = [None] * 5
Guido van Rossum805365e2007-05-07 22:24:25 +00001278 for i in range(len(counts)):
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001279 run_unittest(*test_classes)
1280 gc.collect()
1281 counts[i] = sys.gettotalrefcount()
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001282 print(counts)
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001283
Walter Dörwald919497e2003-01-19 16:23:59 +00001284
1285if __name__ == "__main__":
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001286 test_main(verbose=True)