blob: 5d24000e843fd3541b01609a3f49447b6279a274 [file] [log] [blame]
Walter Dörwald919497e2003-01-19 16:23:59 +00001# Python test set -- built-in functions
Guido van Rossum3bead091992-01-27 17:00:37 +00002
Mark Dickinsonad731b92009-11-09 17:12:30 +00003import platform
Benjamin Petersonee8712c2008-05-20 21:35:26 +00004import test.support, unittest
5from test.support import fcmp, TESTFN, unlink, run_unittest, \
Walter Dörwald1f5947b2007-05-22 16:52:54 +00006 run_with_locale
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00007from operator import neg
Guido van Rossum3bead091992-01-27 17:00:37 +00008
Raymond Hettinger53dbe392008-02-12 20:03:09 +00009import sys, warnings, random, collections, io, fractions
Walter Dörwald919497e2003-01-19 16:23:59 +000010warnings.filterwarnings("ignore", "hex../oct.. of negative int",
11 FutureWarning, __name__)
Guido van Rossumefbbb1c2003-04-11 18:43:06 +000012warnings.filterwarnings("ignore", "integer argument expected",
13 DeprecationWarning, "unittest")
Mark Dickinsona56c4672009-01-27 18:17:45 +000014import builtins
Guido van Rossum3bead091992-01-27 17:00:37 +000015
Walter Dörwald919497e2003-01-19 16:23:59 +000016class Squares:
Guido van Rossum3bead091992-01-27 17:00:37 +000017
Walter Dörwald919497e2003-01-19 16:23:59 +000018 def __init__(self, max):
19 self.max = max
20 self.sofar = []
21
22 def __len__(self): return len(self.sofar)
23
24 def __getitem__(self, i):
25 if not 0 <= i < self.max: raise IndexError
26 n = len(self.sofar)
27 while n <= i:
28 self.sofar.append(n*n)
29 n += 1
30 return self.sofar[i]
31
32class StrSquares:
33
34 def __init__(self, max):
35 self.max = max
36 self.sofar = []
37
38 def __len__(self):
39 return len(self.sofar)
40
41 def __getitem__(self, i):
42 if not 0 <= i < self.max:
43 raise IndexError
44 n = len(self.sofar)
45 while n <= i:
46 self.sofar.append(str(n*n))
47 n += 1
48 return self.sofar[i]
49
50class BitBucket:
51 def write(self, line):
52 pass
53
Facundo Batista2336bdd2008-01-19 19:12:01 +000054test_conv_no_sign = [
Walter Dörwald919497e2003-01-19 16:23:59 +000055 ('0', 0),
56 ('1', 1),
57 ('9', 9),
58 ('10', 10),
59 ('99', 99),
60 ('100', 100),
61 ('314', 314),
62 (' 314', 314),
63 ('314 ', 314),
64 (' \t\t 314 \t\t ', 314),
Christian Heimesa37d4c62007-12-04 23:02:19 +000065 (repr(sys.maxsize), sys.maxsize),
Walter Dörwald919497e2003-01-19 16:23:59 +000066 (' 1x', ValueError),
67 (' 1 ', 1),
68 (' 1\02 ', ValueError),
69 ('', ValueError),
70 (' ', ValueError),
Walter Dörwald1f5947b2007-05-22 16:52:54 +000071 (' \t\t ', ValueError),
Guido van Rossumef87d6e2007-05-02 19:09:54 +000072 (str(b'\u0663\u0661\u0664 ','raw-unicode-escape'), 314),
Guido van Rossum84fc66d2007-05-03 17:18:26 +000073 (chr(0x200), ValueError),
Walter Dörwald919497e2003-01-19 16:23:59 +000074]
75
Facundo Batista2336bdd2008-01-19 19:12:01 +000076test_conv_sign = [
77 ('0', 0),
78 ('1', 1),
79 ('9', 9),
80 ('10', 10),
81 ('99', 99),
82 ('100', 100),
83 ('314', 314),
84 (' 314', ValueError),
85 ('314 ', 314),
86 (' \t\t 314 \t\t ', ValueError),
87 (repr(sys.maxsize), sys.maxsize),
88 (' 1x', ValueError),
89 (' 1 ', ValueError),
90 (' 1\02 ', ValueError),
91 ('', ValueError),
92 (' ', ValueError),
93 (' \t\t ', ValueError),
94 (str(b'\u0663\u0661\u0664 ','raw-unicode-escape'), 314),
95 (chr(0x200), ValueError),
96]
97
Raymond Hettinger96229b12005-03-11 06:49:40 +000098class TestFailingBool:
Jack Diederich4dafcc42006-11-28 19:15:13 +000099 def __bool__(self):
Raymond Hettinger96229b12005-03-11 06:49:40 +0000100 raise RuntimeError
101
102class TestFailingIter:
103 def __iter__(self):
104 raise RuntimeError
105
Walter Dörwald919497e2003-01-19 16:23:59 +0000106class BuiltinTest(unittest.TestCase):
107
108 def test_import(self):
109 __import__('sys')
110 __import__('time')
111 __import__('string')
Guido van Rossumd8faa362007-04-27 19:54:29 +0000112 __import__(name='sys')
113 __import__(name='time', level=0)
Walter Dörwald919497e2003-01-19 16:23:59 +0000114 self.assertRaises(ImportError, __import__, 'spamspam')
115 self.assertRaises(TypeError, __import__, 1, 2, 3, 4)
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000116 self.assertRaises(ValueError, __import__, '')
Guido van Rossumd8faa362007-04-27 19:54:29 +0000117 self.assertRaises(TypeError, __import__, 'sys', name='sys')
Walter Dörwald919497e2003-01-19 16:23:59 +0000118
119 def test_abs(self):
120 # int
121 self.assertEqual(abs(0), 0)
122 self.assertEqual(abs(1234), 1234)
123 self.assertEqual(abs(-1234), 1234)
Christian Heimesa37d4c62007-12-04 23:02:19 +0000124 self.assertTrue(abs(-sys.maxsize-1) > 0)
Walter Dörwald919497e2003-01-19 16:23:59 +0000125 # float
126 self.assertEqual(abs(0.0), 0.0)
127 self.assertEqual(abs(3.14), 3.14)
128 self.assertEqual(abs(-3.14), 3.14)
Walter Dörwald919497e2003-01-19 16:23:59 +0000129 # str
130 self.assertRaises(TypeError, abs, 'a')
131
Raymond Hettinger96229b12005-03-11 06:49:40 +0000132 def test_all(self):
133 self.assertEqual(all([2, 4, 6]), True)
134 self.assertEqual(all([2, None, 6]), False)
135 self.assertRaises(RuntimeError, all, [2, TestFailingBool(), 6])
136 self.assertRaises(RuntimeError, all, TestFailingIter())
137 self.assertRaises(TypeError, all, 10) # Non-iterable
138 self.assertRaises(TypeError, all) # No args
139 self.assertRaises(TypeError, all, [2, 4, 6], []) # Too many args
140 self.assertEqual(all([]), True) # Empty iterator
141 S = [50, 60]
142 self.assertEqual(all(x > 42 for x in S), True)
143 S = [50, 40, 60]
144 self.assertEqual(all(x > 42 for x in S), False)
145
146 def test_any(self):
147 self.assertEqual(any([None, None, None]), False)
148 self.assertEqual(any([None, 4, None]), True)
149 self.assertRaises(RuntimeError, any, [None, TestFailingBool(), 6])
150 self.assertRaises(RuntimeError, all, TestFailingIter())
151 self.assertRaises(TypeError, any, 10) # Non-iterable
152 self.assertRaises(TypeError, any) # No args
153 self.assertRaises(TypeError, any, [2, 4, 6], []) # Too many args
154 self.assertEqual(any([]), False) # Empty iterator
155 S = [40, 60, 30]
156 self.assertEqual(any(x > 42 for x in S), True)
157 S = [10, 20, 30]
158 self.assertEqual(any(x > 42 for x in S), False)
159
Georg Brandl559e5d72008-06-11 18:37:52 +0000160 def test_ascii(self):
161 self.assertEqual(ascii(''), '\'\'')
162 self.assertEqual(ascii(0), '0')
Georg Brandl559e5d72008-06-11 18:37:52 +0000163 self.assertEqual(ascii(()), '()')
164 self.assertEqual(ascii([]), '[]')
165 self.assertEqual(ascii({}), '{}')
166 a = []
167 a.append(a)
168 self.assertEqual(ascii(a), '[[...]]')
169 a = {}
170 a[0] = a
171 self.assertEqual(ascii(a), '{0: {...}}')
172
Thomas Wouters89f507f2006-12-13 04:49:30 +0000173 def test_neg(self):
Christian Heimesa37d4c62007-12-04 23:02:19 +0000174 x = -sys.maxsize-1
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000175 self.assertTrue(isinstance(x, int))
Christian Heimesa37d4c62007-12-04 23:02:19 +0000176 self.assertEqual(-x, sys.maxsize+1)
Thomas Wouters89f507f2006-12-13 04:49:30 +0000177
Guido van Rossumd59da4b2007-05-22 18:11:13 +0000178 # XXX(nnorwitz): This test case for callable should probably be removed.
Walter Dörwald919497e2003-01-19 16:23:59 +0000179 def test_callable(self):
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000180 self.assertTrue(hasattr(len, '__call__'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000181 def f(): pass
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000182 self.assertTrue(hasattr(f, '__call__'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000183 class C:
184 def meth(self): pass
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000185 self.assertTrue(hasattr(C, '__call__'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000186 x = C()
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000187 self.assertTrue(hasattr(x.meth, '__call__'))
188 self.assertTrue(not hasattr(x, '__call__'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000189 class D(C):
190 def __call__(self): pass
191 y = D()
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000192 self.assertTrue(hasattr(y, '__call__'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000193 y()
194
195 def test_chr(self):
196 self.assertEqual(chr(32), ' ')
197 self.assertEqual(chr(65), 'A')
198 self.assertEqual(chr(97), 'a')
199 self.assertEqual(chr(0xff), '\xff')
Guido van Rossum572dbf82007-04-27 23:53:51 +0000200 self.assertRaises(ValueError, chr, 1<<24)
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000201 self.assertEqual(chr(sys.maxunicode),
202 str(('\\U%08x' % (sys.maxunicode)).encode("ascii"),
203 'unicode-escape'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000204 self.assertRaises(TypeError, chr)
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000205 self.assertEqual(chr(0x0000FFFF), "\U0000FFFF")
206 self.assertEqual(chr(0x00010000), "\U00010000")
207 self.assertEqual(chr(0x00010001), "\U00010001")
208 self.assertEqual(chr(0x000FFFFE), "\U000FFFFE")
209 self.assertEqual(chr(0x000FFFFF), "\U000FFFFF")
210 self.assertEqual(chr(0x00100000), "\U00100000")
211 self.assertEqual(chr(0x00100001), "\U00100001")
212 self.assertEqual(chr(0x0010FFFE), "\U0010FFFE")
213 self.assertEqual(chr(0x0010FFFF), "\U0010FFFF")
214 self.assertRaises(ValueError, chr, -1)
215 self.assertRaises(ValueError, chr, 0x00110000)
Amaury Forgeot d'Arc7888d082008-08-01 01:06:32 +0000216 self.assertRaises((OverflowError, ValueError), chr, 2**32)
Walter Dörwald919497e2003-01-19 16:23:59 +0000217
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000218 def test_cmp(self):
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000219 self.assertTrue(not hasattr(builtins, "cmp"))
Walter Dörwald919497e2003-01-19 16:23:59 +0000220
Walter Dörwald919497e2003-01-19 16:23:59 +0000221 def test_compile(self):
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000222 compile('print(1)\n', '', 'exec')
Amaury Forgeot d'Arcaf593462007-11-22 20:53:01 +0000223 bom = b'\xef\xbb\xbf'
224 compile(bom + b'print(1)\n', '', 'exec')
Guido van Rossumd8faa362007-04-27 19:54:29 +0000225 compile(source='pass', filename='?', mode='exec')
226 compile(dont_inherit=0, filename='tmp', source='0', mode='eval')
227 compile('pass', '?', dont_inherit=1, mode='exec')
Benjamin Peterson60320cb2008-09-26 21:49:22 +0000228 compile(memoryview(b"text"), "name", "exec")
Walter Dörwald919497e2003-01-19 16:23:59 +0000229 self.assertRaises(TypeError, compile)
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000230 self.assertRaises(ValueError, compile, 'print(42)\n', '<string>', 'badmode')
231 self.assertRaises(ValueError, compile, 'print(42)\n', '<string>', 'single', 0xff)
Neal Norwitzfcf44352005-11-27 20:37:43 +0000232 self.assertRaises(TypeError, compile, chr(0), 'f', 'exec')
Guido van Rossumd8faa362007-04-27 19:54:29 +0000233 self.assertRaises(TypeError, compile, 'pass', '?', 'exec',
234 mode='eval', source='0', filename='tmp')
Walter Dörwald1f5947b2007-05-22 16:52:54 +0000235 compile('print("\xe5")\n', '', 'exec')
236 self.assertRaises(TypeError, compile, chr(0), 'f', 'exec')
237 self.assertRaises(ValueError, compile, str('a = 1'), 'f', 'bad')
Guido van Rossumd8faa362007-04-27 19:54:29 +0000238
Walter Dörwald919497e2003-01-19 16:23:59 +0000239 def test_delattr(self):
240 import sys
241 sys.spam = 1
242 delattr(sys, 'spam')
243 self.assertRaises(TypeError, delattr)
244
245 def test_dir(self):
Georg Brandle32b4222007-03-10 22:13:27 +0000246 # dir(wrong number of arguments)
Walter Dörwald919497e2003-01-19 16:23:59 +0000247 self.assertRaises(TypeError, dir, 42, 42)
248
Georg Brandle32b4222007-03-10 22:13:27 +0000249 # dir() - local scope
250 local_var = 1
Benjamin Peterson577473f2010-01-19 00:09:57 +0000251 self.assertIn('local_var', dir())
Georg Brandle32b4222007-03-10 22:13:27 +0000252
253 # dir(module)
254 import sys
Benjamin Peterson577473f2010-01-19 00:09:57 +0000255 self.assertIn('exit', dir(sys))
Georg Brandle32b4222007-03-10 22:13:27 +0000256
257 # dir(module_with_invalid__dict__)
258 import types
259 class Foo(types.ModuleType):
260 __dict__ = 8
261 f = Foo("foo")
262 self.assertRaises(TypeError, dir, f)
263
264 # dir(type)
Benjamin Peterson577473f2010-01-19 00:09:57 +0000265 self.assertIn("strip", dir(str))
266 self.assertNotIn("__mro__", dir(str))
Georg Brandle32b4222007-03-10 22:13:27 +0000267
268 # dir(obj)
269 class Foo(object):
270 def __init__(self):
271 self.x = 7
272 self.y = 8
273 self.z = 9
274 f = Foo()
Benjamin Peterson577473f2010-01-19 00:09:57 +0000275 self.assertIn("y", dir(f))
Georg Brandle32b4222007-03-10 22:13:27 +0000276
277 # dir(obj_no__dict__)
278 class Foo(object):
279 __slots__ = []
280 f = Foo()
Benjamin Peterson577473f2010-01-19 00:09:57 +0000281 self.assertIn("__repr__", dir(f))
Georg Brandle32b4222007-03-10 22:13:27 +0000282
283 # dir(obj_no__class__with__dict__)
284 # (an ugly trick to cause getattr(f, "__class__") to fail)
285 class Foo(object):
286 __slots__ = ["__class__", "__dict__"]
287 def __init__(self):
288 self.bar = "wow"
289 f = Foo()
Benjamin Peterson577473f2010-01-19 00:09:57 +0000290 self.assertNotIn("__repr__", dir(f))
291 self.assertIn("bar", dir(f))
Georg Brandle32b4222007-03-10 22:13:27 +0000292
293 # dir(obj_using __dir__)
294 class Foo(object):
295 def __dir__(self):
296 return ["kan", "ga", "roo"]
297 f = Foo()
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000298 self.assertTrue(dir(f) == ["ga", "kan", "roo"])
Georg Brandle32b4222007-03-10 22:13:27 +0000299
300 # dir(obj__dir__not_list)
301 class Foo(object):
302 def __dir__(self):
303 return 7
304 f = Foo()
305 self.assertRaises(TypeError, dir, f)
306
Collin Winter3eed7652007-08-14 17:53:54 +0000307 # dir(traceback)
308 try:
309 raise IndexError
310 except:
311 self.assertEqual(len(dir(sys.exc_info()[2])), 4)
312
313
Walter Dörwald919497e2003-01-19 16:23:59 +0000314 def test_divmod(self):
315 self.assertEqual(divmod(12, 7), (1, 5))
316 self.assertEqual(divmod(-12, 7), (-2, 2))
317 self.assertEqual(divmod(12, -7), (-2, -2))
318 self.assertEqual(divmod(-12, -7), (1, -5))
319
Mark Dickinson5c2db372009-12-05 20:28:34 +0000320 self.assertEqual(divmod(-sys.maxsize-1, -1), (sys.maxsize+1, 0))
Raymond Hettinger5ea7e312004-09-30 07:47:20 +0000321
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000322 self.assertTrue(not fcmp(divmod(3.25, 1.0), (3.0, 0.25)))
323 self.assertTrue(not fcmp(divmod(-3.25, 1.0), (-4.0, 0.75)))
324 self.assertTrue(not fcmp(divmod(3.25, -1.0), (-4.0, -0.75)))
325 self.assertTrue(not fcmp(divmod(-3.25, -1.0), (3.0, -0.25)))
Walter Dörwald919497e2003-01-19 16:23:59 +0000326
327 self.assertRaises(TypeError, divmod)
328
329 def test_eval(self):
330 self.assertEqual(eval('1+1'), 2)
331 self.assertEqual(eval(' 1+1\n'), 2)
332 globals = {'a': 1, 'b': 2}
333 locals = {'b': 200, 'c': 300}
334 self.assertEqual(eval('a', globals) , 1)
335 self.assertEqual(eval('a', globals, locals), 1)
336 self.assertEqual(eval('b', globals, locals), 200)
337 self.assertEqual(eval('c', globals, locals), 300)
Walter Dörwald919497e2003-01-19 16:23:59 +0000338 globals = {'a': 1, 'b': 2}
339 locals = {'b': 200, 'c': 300}
Amaury Forgeot d'Arcaf593462007-11-22 20:53:01 +0000340 bom = b'\xef\xbb\xbf'
341 self.assertEqual(eval(bom + b'a', globals, locals), 1)
Walter Dörwald1f5947b2007-05-22 16:52:54 +0000342 self.assertEqual(eval('"\xe5"', globals), "\xe5")
Walter Dörwald919497e2003-01-19 16:23:59 +0000343 self.assertRaises(TypeError, eval)
344 self.assertRaises(TypeError, eval, ())
Amaury Forgeot d'Arcaf593462007-11-22 20:53:01 +0000345 self.assertRaises(SyntaxError, eval, bom[:2] + b'a')
Walter Dörwald919497e2003-01-19 16:23:59 +0000346
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000347 def test_general_eval(self):
348 # Tests that general mappings can be used for the locals argument
349
350 class M:
351 "Test mapping interface versus possible calls from eval()."
352 def __getitem__(self, key):
353 if key == 'a':
354 return 12
355 raise KeyError
Guido van Rossumcd70eee2007-02-11 18:53:00 +0000356 def keys(self):
357 return list('xyz')
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000358
359 m = M()
360 g = globals()
361 self.assertEqual(eval('a', g, m), 12)
362 self.assertRaises(NameError, eval, 'b', g, m)
363 self.assertEqual(eval('dir()', g, m), list('xyz'))
364 self.assertEqual(eval('globals()', g, m), g)
365 self.assertEqual(eval('locals()', g, m), m)
Raymond Hettinger513ffe82004-07-06 13:44:41 +0000366 self.assertRaises(TypeError, eval, 'a', m)
Raymond Hettinger66bd2332004-08-02 08:30:07 +0000367 class A:
368 "Non-mapping"
369 pass
370 m = A()
371 self.assertRaises(TypeError, eval, 'a', g, m)
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000372
373 # Verify that dict subclasses work as well
374 class D(dict):
375 def __getitem__(self, key):
376 if key == 'a':
377 return 12
378 return dict.__getitem__(self, key)
Guido van Rossumcd70eee2007-02-11 18:53:00 +0000379 def keys(self):
380 return list('xyz')
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000381
382 d = D()
383 self.assertEqual(eval('a', g, d), 12)
384 self.assertRaises(NameError, eval, 'b', g, d)
385 self.assertEqual(eval('dir()', g, d), list('xyz'))
386 self.assertEqual(eval('globals()', g, d), g)
387 self.assertEqual(eval('locals()', g, d), d)
388
389 # Verify locals stores (used by list comps)
390 eval('[locals() for i in (2,3)]', g, d)
Raymond Hettingerf80680d2008-02-06 00:07:11 +0000391 eval('[locals() for i in (2,3)]', g, collections.UserDict())
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000392
393 class SpreadSheet:
394 "Sample application showing nested, calculated lookups."
395 _cells = {}
396 def __setitem__(self, key, formula):
397 self._cells[key] = formula
Thomas Wouters73e5a5b2006-06-08 15:35:45 +0000398 def __getitem__(self, key):
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000399 return eval(self._cells[key], globals(), self)
400
401 ss = SpreadSheet()
402 ss['a1'] = '5'
403 ss['a2'] = 'a1*6'
404 ss['a3'] = 'a2*7'
405 self.assertEqual(ss['a3'], 210)
406
Raymond Hettinger2a7dede2004-08-07 04:55:30 +0000407 # Verify that dir() catches a non-list returned by eval
408 # SF bug #1004669
409 class C:
410 def __getitem__(self, item):
411 raise KeyError(item)
Guido van Rossumcd70eee2007-02-11 18:53:00 +0000412 def keys(self):
413 return 1 # used to be 'a' but that's no longer an error
Raymond Hettinger2a7dede2004-08-07 04:55:30 +0000414 self.assertRaises(TypeError, eval, 'dir()', globals(), C())
415
Georg Brandl7cae87c2006-09-06 06:51:57 +0000416 def test_exec(self):
417 g = {}
418 exec('z = 1', g)
419 if '__builtins__' in g:
420 del g['__builtins__']
421 self.assertEqual(g, {'z': 1})
422
Guido van Rossumef87d6e2007-05-02 19:09:54 +0000423 exec('z = 1+1', g)
Georg Brandl7cae87c2006-09-06 06:51:57 +0000424 if '__builtins__' in g:
425 del g['__builtins__']
426 self.assertEqual(g, {'z': 2})
427 g = {}
428 l = {}
429
430 import warnings
431 warnings.filterwarnings("ignore", "global statement", module="<string>")
432 exec('global a; a = 1; b = 2', g, l)
433 if '__builtins__' in g:
434 del g['__builtins__']
435 if '__builtins__' in l:
436 del l['__builtins__']
437 self.assertEqual((g, l), ({'a': 1}, {'b': 2}))
438
Amaury Forgeot d'Arc9ed77352008-04-04 23:25:27 +0000439 def test_exec_redirected(self):
440 savestdout = sys.stdout
441 sys.stdout = None # Whatever that cannot flush()
442 try:
443 # Used to raise SystemError('error return without exception set')
444 exec('a')
445 except NameError:
446 pass
447 finally:
448 sys.stdout = savestdout
449
Walter Dörwald919497e2003-01-19 16:23:59 +0000450 def test_filter(self):
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000451 self.assertEqual(list(filter(lambda c: 'a' <= c <= 'z', 'Hello World')), list('elloorld'))
452 self.assertEqual(list(filter(None, [1, 'hello', [], [3], '', None, 9, 0])), [1, 'hello', [3], 9])
453 self.assertEqual(list(filter(lambda x: x > 0, [1, -3, 9, 0, 2])), [1, 9, 2])
454 self.assertEqual(list(filter(None, Squares(10))), [1, 4, 9, 16, 25, 36, 49, 64, 81])
455 self.assertEqual(list(filter(lambda x: x%2, Squares(10))), [1, 9, 25, 49, 81])
Walter Dörwald919497e2003-01-19 16:23:59 +0000456 def identity(item):
457 return 1
458 filter(identity, Squares(5))
459 self.assertRaises(TypeError, filter)
460 class BadSeq(object):
Tim Petersf2715e02003-02-19 02:35:07 +0000461 def __getitem__(self, index):
462 if index<4:
463 return 42
464 raise ValueError
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000465 self.assertRaises(ValueError, list, filter(lambda x: x, BadSeq()))
Walter Dörwald919497e2003-01-19 16:23:59 +0000466 def badfunc():
467 pass
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000468 self.assertRaises(TypeError, list, filter(badfunc, range(5)))
Walter Dörwald919497e2003-01-19 16:23:59 +0000469
Walter Dörwaldbf517072003-01-27 15:57:14 +0000470 # test bltinmodule.c::filtertuple()
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000471 self.assertEqual(list(filter(None, (1, 2))), [1, 2])
472 self.assertEqual(list(filter(lambda x: x>=3, (1, 2, 3, 4))), [3, 4])
473 self.assertRaises(TypeError, list, filter(42, (1, 2)))
Walter Dörwaldc3da83f2003-02-04 20:24:45 +0000474
Walter Dörwald919497e2003-01-19 16:23:59 +0000475 def test_getattr(self):
476 import sys
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000477 self.assertTrue(getattr(sys, 'stdout') is sys.stdout)
Walter Dörwald919497e2003-01-19 16:23:59 +0000478 self.assertRaises(TypeError, getattr, sys, 1)
479 self.assertRaises(TypeError, getattr, sys, 1, "foo")
480 self.assertRaises(TypeError, getattr)
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000481 self.assertRaises(AttributeError, getattr, sys, chr(sys.maxunicode))
Victor Stinner624dbf62010-03-12 17:17:58 +0000482 # unicode surrogates are not encodable to the default encoding (utf8)
483 self.assertRaises(AttributeError, getattr, 1, "\uDAD1\uD51E")
Walter Dörwald919497e2003-01-19 16:23:59 +0000484
485 def test_hasattr(self):
486 import sys
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000487 self.assertTrue(hasattr(sys, 'stdout'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000488 self.assertRaises(TypeError, hasattr, sys, 1)
489 self.assertRaises(TypeError, hasattr)
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000490 self.assertEqual(False, hasattr(sys, chr(sys.maxunicode)))
Walter Dörwald919497e2003-01-19 16:23:59 +0000491
Alexandre Vassalottieca20b62008-05-16 02:54:33 +0000492 # Check that hasattr allows SystemExit and KeyboardInterrupts by
493 class A:
494 def __getattr__(self, what):
495 raise KeyboardInterrupt
496 self.assertRaises(KeyboardInterrupt, hasattr, A(), "b")
497 class B:
498 def __getattr__(self, what):
499 raise SystemExit
500 self.assertRaises(SystemExit, hasattr, B(), "b")
501
Walter Dörwald919497e2003-01-19 16:23:59 +0000502 def test_hash(self):
503 hash(None)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000504 self.assertEqual(hash(1), hash(1))
Walter Dörwald919497e2003-01-19 16:23:59 +0000505 self.assertEqual(hash(1), hash(1.0))
506 hash('spam')
Guido van Rossum98297ee2007-11-06 21:34:58 +0000507 self.assertEqual(hash('spam'), hash(b'spam'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000508 hash((0,1,2,3))
509 def f(): pass
510 self.assertRaises(TypeError, hash, [])
511 self.assertRaises(TypeError, hash, {})
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000512 # Bug 1536021: Allow hash to return long objects
513 class X:
514 def __hash__(self):
515 return 2**100
516 self.assertEquals(type(hash(X())), int)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000517 class Z(int):
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000518 def __hash__(self):
519 return self
Guido van Rossume2a383d2007-01-15 16:59:06 +0000520 self.assertEquals(hash(Z(42)), hash(42))
Walter Dörwald919497e2003-01-19 16:23:59 +0000521
522 def test_hex(self):
523 self.assertEqual(hex(16), '0x10')
Guido van Rossume2a383d2007-01-15 16:59:06 +0000524 self.assertEqual(hex(-16), '-0x10')
Walter Dörwald919497e2003-01-19 16:23:59 +0000525 self.assertRaises(TypeError, hex, {})
526
527 def test_id(self):
528 id(None)
529 id(1)
Walter Dörwald919497e2003-01-19 16:23:59 +0000530 id(1.0)
531 id('spam')
532 id((0,1,2,3))
533 id([0,1,2,3])
534 id({'spam': 1, 'eggs': 2, 'ham': 3})
535
Guido van Rossuma88a0332007-02-26 16:59:55 +0000536 # Test input() later, alphabetized as if it were raw_input
537
Walter Dörwald919497e2003-01-19 16:23:59 +0000538 def test_iter(self):
539 self.assertRaises(TypeError, iter)
540 self.assertRaises(TypeError, iter, 42, 42)
541 lists = [("1", "2"), ["1", "2"], "12"]
Walter Dörwald919497e2003-01-19 16:23:59 +0000542 for l in lists:
543 i = iter(l)
Georg Brandla18af4e2007-04-21 15:47:16 +0000544 self.assertEqual(next(i), '1')
545 self.assertEqual(next(i), '2')
546 self.assertRaises(StopIteration, next, i)
Walter Dörwald919497e2003-01-19 16:23:59 +0000547
548 def test_isinstance(self):
549 class C:
550 pass
551 class D(C):
552 pass
553 class E:
554 pass
555 c = C()
556 d = D()
557 e = E()
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000558 self.assertTrue(isinstance(c, C))
559 self.assertTrue(isinstance(d, C))
560 self.assertTrue(not isinstance(e, C))
561 self.assertTrue(not isinstance(c, D))
562 self.assertTrue(not isinstance('foo', E))
Walter Dörwald919497e2003-01-19 16:23:59 +0000563 self.assertRaises(TypeError, isinstance, E, 'foo')
564 self.assertRaises(TypeError, isinstance)
565
566 def test_issubclass(self):
567 class C:
568 pass
569 class D(C):
570 pass
571 class E:
572 pass
573 c = C()
574 d = D()
575 e = E()
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000576 self.assertTrue(issubclass(D, C))
577 self.assertTrue(issubclass(C, C))
578 self.assertTrue(not issubclass(C, D))
Walter Dörwald919497e2003-01-19 16:23:59 +0000579 self.assertRaises(TypeError, issubclass, 'foo', E)
580 self.assertRaises(TypeError, issubclass, E, 'foo')
581 self.assertRaises(TypeError, issubclass)
582
583 def test_len(self):
584 self.assertEqual(len('123'), 3)
585 self.assertEqual(len(()), 0)
586 self.assertEqual(len((1, 2, 3, 4)), 4)
587 self.assertEqual(len([1, 2, 3, 4]), 4)
588 self.assertEqual(len({}), 0)
589 self.assertEqual(len({'a':1, 'b': 2}), 2)
590 class BadSeq:
591 def __len__(self):
592 raise ValueError
593 self.assertRaises(ValueError, len, BadSeq())
Benjamin Petersonee1ae7c2009-02-08 21:07:20 +0000594 class InvalidLen:
595 def __len__(self):
596 return None
597 self.assertRaises(TypeError, len, InvalidLen())
598 class FloatLen:
599 def __len__(self):
600 return 4.5
601 self.assertRaises(TypeError, len, FloatLen())
602 class HugeLen:
603 def __len__(self):
604 return sys.maxsize + 1
605 self.assertRaises(OverflowError, len, HugeLen())
Walter Dörwald919497e2003-01-19 16:23:59 +0000606
Walter Dörwald919497e2003-01-19 16:23:59 +0000607 def test_map(self):
608 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000609 list(map(lambda x: x*x, range(1,4))),
Walter Dörwald919497e2003-01-19 16:23:59 +0000610 [1, 4, 9]
611 )
612 try:
613 from math import sqrt
614 except ImportError:
615 def sqrt(x):
616 return pow(x, 0.5)
617 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000618 list(map(lambda x: list(map(sqrt, x)), [[16, 4], [81, 9]])),
Walter Dörwald919497e2003-01-19 16:23:59 +0000619 [[4.0, 2.0], [9.0, 3.0]]
620 )
621 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000622 list(map(lambda x, y: x+y, [1,3,2], [9,1,4])),
Walter Dörwald919497e2003-01-19 16:23:59 +0000623 [10, 4, 6]
624 )
625
626 def plus(*v):
627 accu = 0
628 for i in v: accu = accu + i
629 return accu
630 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000631 list(map(plus, [1, 3, 7])),
Walter Dörwald919497e2003-01-19 16:23:59 +0000632 [1, 3, 7]
633 )
634 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000635 list(map(plus, [1, 3, 7], [4, 9, 2])),
Walter Dörwald919497e2003-01-19 16:23:59 +0000636 [1+4, 3+9, 7+2]
637 )
638 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000639 list(map(plus, [1, 3, 7], [4, 9, 2], [1, 1, 0])),
Walter Dörwald919497e2003-01-19 16:23:59 +0000640 [1+4+1, 3+9+1, 7+2+0]
641 )
642 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000643 list(map(int, Squares(10))),
Walter Dörwald919497e2003-01-19 16:23:59 +0000644 [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
645 )
Guido van Rossum47b9ff62006-08-24 00:41:19 +0000646 def Max(a, b):
647 if a is None:
648 return b
649 if b is None:
650 return a
651 return max(a, b)
Walter Dörwald919497e2003-01-19 16:23:59 +0000652 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000653 list(map(Max, Squares(3), Squares(2))),
654 [0, 1]
Walter Dörwald919497e2003-01-19 16:23:59 +0000655 )
656 self.assertRaises(TypeError, map)
657 self.assertRaises(TypeError, map, lambda x: x, 42)
Walter Dörwald919497e2003-01-19 16:23:59 +0000658 class BadSeq:
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000659 def __iter__(self):
Walter Dörwald919497e2003-01-19 16:23:59 +0000660 raise ValueError
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000661 yield None
662 self.assertRaises(ValueError, list, map(lambda x: x, BadSeq()))
Neal Norwitzfcf44352005-11-27 20:37:43 +0000663 def badfunc(x):
664 raise RuntimeError
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000665 self.assertRaises(RuntimeError, list, map(badfunc, range(5)))
Walter Dörwald919497e2003-01-19 16:23:59 +0000666
667 def test_max(self):
668 self.assertEqual(max('123123'), '3')
669 self.assertEqual(max(1, 2, 3), 3)
670 self.assertEqual(max((1, 2, 3, 1, 2, 3)), 3)
671 self.assertEqual(max([1, 2, 3, 1, 2, 3]), 3)
672
Guido van Rossume2a383d2007-01-15 16:59:06 +0000673 self.assertEqual(max(1, 2, 3.0), 3.0)
674 self.assertEqual(max(1, 2.0, 3), 3)
675 self.assertEqual(max(1.0, 2, 3), 3)
Walter Dörwald919497e2003-01-19 16:23:59 +0000676
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +0000677 for stmt in (
678 "max(key=int)", # no args
679 "max(1, key=int)", # single arg not iterable
680 "max(1, 2, keystone=int)", # wrong keyword
681 "max(1, 2, key=int, abc=int)", # two many keywords
682 "max(1, 2, key=1)", # keyfunc is not callable
683 ):
Tim Peters7f061872004-12-07 21:17:46 +0000684 try:
Georg Brandl7cae87c2006-09-06 06:51:57 +0000685 exec(stmt, globals())
Tim Peters7f061872004-12-07 21:17:46 +0000686 except TypeError:
687 pass
688 else:
689 self.fail(stmt)
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +0000690
691 self.assertEqual(max((1,), key=neg), 1) # one elem iterable
692 self.assertEqual(max((1,2), key=neg), 1) # two elem iterable
693 self.assertEqual(max(1, 2, key=neg), 1) # two elems
694
695 data = [random.randrange(200) for i in range(100)]
696 keys = dict((elem, random.randrange(50)) for elem in data)
697 f = keys.__getitem__
698 self.assertEqual(max(data, key=f),
699 sorted(reversed(data), key=f)[-1])
700
Walter Dörwald919497e2003-01-19 16:23:59 +0000701 def test_min(self):
702 self.assertEqual(min('123123'), '1')
703 self.assertEqual(min(1, 2, 3), 1)
704 self.assertEqual(min((1, 2, 3, 1, 2, 3)), 1)
705 self.assertEqual(min([1, 2, 3, 1, 2, 3]), 1)
706
Guido van Rossume2a383d2007-01-15 16:59:06 +0000707 self.assertEqual(min(1, 2, 3.0), 1)
708 self.assertEqual(min(1, 2.0, 3), 1)
709 self.assertEqual(min(1.0, 2, 3), 1.0)
Walter Dörwald919497e2003-01-19 16:23:59 +0000710
711 self.assertRaises(TypeError, min)
712 self.assertRaises(TypeError, min, 42)
713 self.assertRaises(ValueError, min, ())
714 class BadSeq:
715 def __getitem__(self, index):
716 raise ValueError
717 self.assertRaises(ValueError, min, BadSeq())
Walter Dörwald919497e2003-01-19 16:23:59 +0000718
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +0000719 for stmt in (
720 "min(key=int)", # no args
721 "min(1, key=int)", # single arg not iterable
722 "min(1, 2, keystone=int)", # wrong keyword
723 "min(1, 2, key=int, abc=int)", # two many keywords
724 "min(1, 2, key=1)", # keyfunc is not callable
725 ):
Tim Peters7f061872004-12-07 21:17:46 +0000726 try:
Georg Brandl7cae87c2006-09-06 06:51:57 +0000727 exec(stmt, globals())
Tim Peters7f061872004-12-07 21:17:46 +0000728 except TypeError:
729 pass
730 else:
731 self.fail(stmt)
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +0000732
733 self.assertEqual(min((1,), key=neg), 1) # one elem iterable
734 self.assertEqual(min((1,2), key=neg), 2) # two elem iterable
735 self.assertEqual(min(1, 2, key=neg), 2) # two elems
736
737 data = [random.randrange(200) for i in range(100)]
738 keys = dict((elem, random.randrange(50)) for elem in data)
739 f = keys.__getitem__
740 self.assertEqual(min(data, key=f),
741 sorted(data, key=f)[0])
742
Georg Brandla18af4e2007-04-21 15:47:16 +0000743 def test_next(self):
744 it = iter(range(2))
745 self.assertEqual(next(it), 0)
746 self.assertEqual(next(it), 1)
747 self.assertRaises(StopIteration, next, it)
748 self.assertRaises(StopIteration, next, it)
749 self.assertEquals(next(it, 42), 42)
750
751 class Iter(object):
752 def __iter__(self):
753 return self
754 def __next__(self):
755 raise StopIteration
756
757 it = iter(Iter())
758 self.assertEquals(next(it, 42), 42)
759 self.assertRaises(StopIteration, next, it)
760
761 def gen():
762 yield 1
763 return
764
765 it = gen()
766 self.assertEquals(next(it), 1)
767 self.assertRaises(StopIteration, next, it)
768 self.assertEquals(next(it, 42), 42)
769
Walter Dörwald919497e2003-01-19 16:23:59 +0000770 def test_oct(self):
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000771 self.assertEqual(oct(100), '0o144')
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000772 self.assertEqual(oct(-100), '-0o144')
Walter Dörwald919497e2003-01-19 16:23:59 +0000773 self.assertRaises(TypeError, oct, ())
774
775 def write_testfile(self):
Guido van Rossuma88a0332007-02-26 16:59:55 +0000776 # NB the first 4 lines are also used to test input, below
Walter Dörwald919497e2003-01-19 16:23:59 +0000777 fp = open(TESTFN, 'w')
778 try:
779 fp.write('1+1\n')
Walter Dörwald919497e2003-01-19 16:23:59 +0000780 fp.write('The quick brown fox jumps over the lazy dog')
781 fp.write('.\n')
782 fp.write('Dear John\n')
783 fp.write('XXX'*100)
784 fp.write('YYY'*100)
785 finally:
786 fp.close()
787
788 def test_open(self):
789 self.write_testfile()
790 fp = open(TESTFN, 'r')
791 try:
792 self.assertEqual(fp.readline(4), '1+1\n')
Walter Dörwald919497e2003-01-19 16:23:59 +0000793 self.assertEqual(fp.readline(), 'The quick brown fox jumps over the lazy dog.\n')
794 self.assertEqual(fp.readline(4), 'Dear')
795 self.assertEqual(fp.readline(100), ' John\n')
796 self.assertEqual(fp.read(300), 'XXX'*100)
797 self.assertEqual(fp.read(1000), 'YYY'*100)
798 finally:
799 fp.close()
800 unlink(TESTFN)
801
802 def test_ord(self):
803 self.assertEqual(ord(' '), 32)
804 self.assertEqual(ord('A'), 65)
805 self.assertEqual(ord('a'), 97)
Guido van Rossumf9e91c92007-05-08 21:05:48 +0000806 self.assertEqual(ord('\x80'), 128)
807 self.assertEqual(ord('\xff'), 255)
808
809 self.assertEqual(ord(b' '), 32)
810 self.assertEqual(ord(b'A'), 65)
811 self.assertEqual(ord(b'a'), 97)
812 self.assertEqual(ord(b'\x80'), 128)
813 self.assertEqual(ord(b'\xff'), 255)
814
Walter Dörwald1f5947b2007-05-22 16:52:54 +0000815 self.assertEqual(ord(chr(sys.maxunicode)), sys.maxunicode)
Walter Dörwald919497e2003-01-19 16:23:59 +0000816 self.assertRaises(TypeError, ord, 42)
Walter Dörwald919497e2003-01-19 16:23:59 +0000817
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000818 self.assertEqual(ord(chr(0x10FFFF)), 0x10FFFF)
819 self.assertEqual(ord("\U0000FFFF"), 0x0000FFFF)
820 self.assertEqual(ord("\U00010000"), 0x00010000)
821 self.assertEqual(ord("\U00010001"), 0x00010001)
822 self.assertEqual(ord("\U000FFFFE"), 0x000FFFFE)
823 self.assertEqual(ord("\U000FFFFF"), 0x000FFFFF)
824 self.assertEqual(ord("\U00100000"), 0x00100000)
825 self.assertEqual(ord("\U00100001"), 0x00100001)
826 self.assertEqual(ord("\U0010FFFE"), 0x0010FFFE)
827 self.assertEqual(ord("\U0010FFFF"), 0x0010FFFF)
828
Walter Dörwald919497e2003-01-19 16:23:59 +0000829 def test_pow(self):
830 self.assertEqual(pow(0,0), 1)
831 self.assertEqual(pow(0,1), 0)
832 self.assertEqual(pow(1,0), 1)
833 self.assertEqual(pow(1,1), 1)
834
835 self.assertEqual(pow(2,0), 1)
836 self.assertEqual(pow(2,10), 1024)
837 self.assertEqual(pow(2,20), 1024*1024)
838 self.assertEqual(pow(2,30), 1024*1024*1024)
839
840 self.assertEqual(pow(-2,0), 1)
841 self.assertEqual(pow(-2,1), -2)
842 self.assertEqual(pow(-2,2), 4)
843 self.assertEqual(pow(-2,3), -8)
844
Walter Dörwald919497e2003-01-19 16:23:59 +0000845 self.assertAlmostEqual(pow(0.,0), 1.)
846 self.assertAlmostEqual(pow(0.,1), 0.)
847 self.assertAlmostEqual(pow(1.,0), 1.)
848 self.assertAlmostEqual(pow(1.,1), 1.)
849
850 self.assertAlmostEqual(pow(2.,0), 1.)
851 self.assertAlmostEqual(pow(2.,10), 1024.)
852 self.assertAlmostEqual(pow(2.,20), 1024.*1024.)
853 self.assertAlmostEqual(pow(2.,30), 1024.*1024.*1024.)
854
855 self.assertAlmostEqual(pow(-2.,0), 1.)
856 self.assertAlmostEqual(pow(-2.,1), -2.)
857 self.assertAlmostEqual(pow(-2.,2), 4.)
858 self.assertAlmostEqual(pow(-2.,3), -8.)
859
Mark Dickinson5c2db372009-12-05 20:28:34 +0000860 for x in 2, 2.0:
861 for y in 10, 10.0:
862 for z in 1000, 1000.0:
Walter Dörwald919497e2003-01-19 16:23:59 +0000863 if isinstance(x, float) or \
864 isinstance(y, float) or \
865 isinstance(z, float):
866 self.assertRaises(TypeError, pow, x, y, z)
867 else:
868 self.assertAlmostEqual(pow(x, y, z), 24.0)
869
Jeffrey Yasskin3404b3c2007-09-07 15:15:49 +0000870 self.assertAlmostEqual(pow(-1, 0.5), 1j)
871 self.assertAlmostEqual(pow(-1, 1/3), 0.5 + 0.8660254037844386j)
872
Walter Dörwald919497e2003-01-19 16:23:59 +0000873 self.assertRaises(TypeError, pow, -1, -2, 3)
874 self.assertRaises(ValueError, pow, 1, 2, 0)
Walter Dörwald919497e2003-01-19 16:23:59 +0000875
876 self.assertRaises(TypeError, pow)
877
878 def test_range(self):
Guido van Rossum805365e2007-05-07 22:24:25 +0000879 self.assertEqual(list(range(3)), [0, 1, 2])
880 self.assertEqual(list(range(1, 5)), [1, 2, 3, 4])
881 self.assertEqual(list(range(0)), [])
882 self.assertEqual(list(range(-3)), [])
883 self.assertEqual(list(range(1, 10, 3)), [1, 4, 7])
884 #self.assertEqual(list(range(5, -5, -3)), [5, 2, -1, -4])
Walter Dörwald919497e2003-01-19 16:23:59 +0000885
Mark Dickinsoneb36d312009-06-24 18:36:46 +0000886 #issue 6334: the internal stored range length was being
887 #computed incorrectly in some cases involving large arguments.
888 x = range(10**20, 10**20+10, 3)
889 self.assertEqual(len(x), 4)
890 self.assertEqual(len(list(x)), 4)
891
892 x = range(10**20+10, 10**20, 3)
893 self.assertEqual(len(x), 0)
894 self.assertEqual(len(list(x)), 0)
895
896 x = range(10**20, 10**20+10, -3)
897 self.assertEqual(len(x), 0)
898 self.assertEqual(len(list(x)), 0)
899
900 x = range(10**20+10, 10**20, -3)
901 self.assertEqual(len(x), 4)
902 self.assertEqual(len(list(x)), 4)
903
Guido van Rossumefbbb1c2003-04-11 18:43:06 +0000904 # Now test range() with longs
Guido van Rossum805365e2007-05-07 22:24:25 +0000905 self.assertEqual(list(range(-2**100)), [])
906 self.assertEqual(list(range(0, -2**100)), [])
907 self.assertEqual(list(range(0, 2**100, -1)), [])
908 self.assertEqual(list(range(0, 2**100, -1)), [])
Guido van Rossumefbbb1c2003-04-11 18:43:06 +0000909
Christian Heimesa37d4c62007-12-04 23:02:19 +0000910 a = int(10 * sys.maxsize)
911 b = int(100 * sys.maxsize)
912 c = int(50 * sys.maxsize)
Guido van Rossumefbbb1c2003-04-11 18:43:06 +0000913
Guido van Rossum805365e2007-05-07 22:24:25 +0000914 self.assertEqual(list(range(a, a+2)), [a, a+1])
915 self.assertEqual(list(range(a+2, a, -1)), [a+2, a+1])
916 self.assertEqual(list(range(a+4, a, -2)), [a+4, a+2])
Guido van Rossumefbbb1c2003-04-11 18:43:06 +0000917
Guido van Rossum805365e2007-05-07 22:24:25 +0000918 seq = list(range(a, b, c))
Benjamin Peterson577473f2010-01-19 00:09:57 +0000919 self.assertIn(a, seq)
920 self.assertNotIn(b, seq)
Guido van Rossumefbbb1c2003-04-11 18:43:06 +0000921 self.assertEqual(len(seq), 2)
922
Guido van Rossum805365e2007-05-07 22:24:25 +0000923 seq = list(range(b, a, -c))
Benjamin Peterson577473f2010-01-19 00:09:57 +0000924 self.assertIn(b, seq)
925 self.assertNotIn(a, seq)
Guido van Rossumefbbb1c2003-04-11 18:43:06 +0000926 self.assertEqual(len(seq), 2)
927
Guido van Rossum805365e2007-05-07 22:24:25 +0000928 seq = list(range(-a, -b, -c))
Benjamin Peterson577473f2010-01-19 00:09:57 +0000929 self.assertIn(-a, seq)
930 self.assertNotIn(-b, seq)
Guido van Rossumefbbb1c2003-04-11 18:43:06 +0000931 self.assertEqual(len(seq), 2)
932
Walter Dörwald919497e2003-01-19 16:23:59 +0000933 self.assertRaises(TypeError, range)
934 self.assertRaises(TypeError, range, 1, 2, 3, 4)
935 self.assertRaises(ValueError, range, 1, 2, 0)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000936 self.assertRaises(ValueError, range, a, a + 1, int(0))
Neal Norwitzfcf44352005-11-27 20:37:43 +0000937
Mark Dickinson5c2db372009-12-05 20:28:34 +0000938 """ XXX(nnorwitz):
Neal Norwitzfcf44352005-11-27 20:37:43 +0000939 class badzero(int):
Guido van Rossum47b9ff62006-08-24 00:41:19 +0000940 def __eq__(self, other):
Neal Norwitzfcf44352005-11-27 20:37:43 +0000941 raise RuntimeError
Guido van Rossum47b9ff62006-08-24 00:41:19 +0000942 __ne__ = __lt__ = __gt__ = __le__ = __ge__ = __eq__
943
944 # XXX This won't (but should!) raise RuntimeError if a is an int...
Neal Norwitzfcf44352005-11-27 20:37:43 +0000945 self.assertRaises(RuntimeError, range, a, a + 1, badzero(1))
Guido van Rossum805365e2007-05-07 22:24:25 +0000946 """
Walter Dörwald919497e2003-01-19 16:23:59 +0000947
Guido van Rossumefbbb1c2003-04-11 18:43:06 +0000948 # Reject floats when it would require PyLongs to represent.
949 # (smaller floats still accepted, but deprecated)
Tim Peters299b3df2003-04-15 14:40:03 +0000950 self.assertRaises(TypeError, range, 1e100, 1e101, 1e101)
Guido van Rossumefbbb1c2003-04-11 18:43:06 +0000951
Walter Dörwald357981e2003-04-15 18:59:28 +0000952 self.assertRaises(TypeError, range, 0, "spam")
953 self.assertRaises(TypeError, range, 0, 42, "spam")
954
Christian Heimesa37d4c62007-12-04 23:02:19 +0000955 #NEAL self.assertRaises(OverflowError, range, -sys.maxsize, sys.maxsize)
956 #NEAL self.assertRaises(OverflowError, range, 0, 2*sys.maxsize)
Guido van Rossum805365e2007-05-07 22:24:25 +0000957
Christian Heimesa37d4c62007-12-04 23:02:19 +0000958 self.assertRaises(OverflowError, len, range(0, sys.maxsize**10))
Walter Dörwald357981e2003-04-15 18:59:28 +0000959
Guido van Rossuma88a0332007-02-26 16:59:55 +0000960 def test_input(self):
961 self.write_testfile()
962 fp = open(TESTFN, 'r')
963 savestdin = sys.stdin
964 savestdout = sys.stdout # Eats the echo
965 try:
966 sys.stdin = fp
967 sys.stdout = BitBucket()
968 self.assertEqual(input(), "1+1")
Guido van Rossuma88a0332007-02-26 16:59:55 +0000969 self.assertEqual(input(), 'The quick brown fox jumps over the lazy dog.')
970 self.assertEqual(input('testing\n'), 'Dear John')
971
972 # SF 1535165: don't segfault on closed stdin
973 # sys.stdout must be a regular file for triggering
974 sys.stdout = savestdout
975 sys.stdin.close()
976 self.assertRaises(ValueError, input)
977
978 sys.stdout = BitBucket()
Guido van Rossum34d19282007-08-09 01:03:29 +0000979 sys.stdin = io.StringIO("NULL\0")
Guido van Rossuma88a0332007-02-26 16:59:55 +0000980 self.assertRaises(TypeError, input, 42, 42)
Guido van Rossum34d19282007-08-09 01:03:29 +0000981 sys.stdin = io.StringIO(" 'whitespace'")
Guido van Rossuma88a0332007-02-26 16:59:55 +0000982 self.assertEqual(input(), " 'whitespace'")
Guido van Rossum34d19282007-08-09 01:03:29 +0000983 sys.stdin = io.StringIO()
Guido van Rossuma88a0332007-02-26 16:59:55 +0000984 self.assertRaises(EOFError, input)
985
986 del sys.stdout
987 self.assertRaises(RuntimeError, input, 'prompt')
988 del sys.stdin
989 self.assertRaises(RuntimeError, input, 'prompt')
990 finally:
991 sys.stdin = savestdin
992 sys.stdout = savestdout
993 fp.close()
994 unlink(TESTFN)
995
Walter Dörwald919497e2003-01-19 16:23:59 +0000996 def test_repr(self):
997 self.assertEqual(repr(''), '\'\'')
998 self.assertEqual(repr(0), '0')
Walter Dörwald919497e2003-01-19 16:23:59 +0000999 self.assertEqual(repr(()), '()')
1000 self.assertEqual(repr([]), '[]')
1001 self.assertEqual(repr({}), '{}')
1002 a = []
1003 a.append(a)
1004 self.assertEqual(repr(a), '[[...]]')
1005 a = {}
1006 a[0] = a
1007 self.assertEqual(repr(a), '{0: {...}}')
1008
1009 def test_round(self):
1010 self.assertEqual(round(0.0), 0.0)
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001011 self.assertEqual(type(round(0.0)), int)
Walter Dörwald919497e2003-01-19 16:23:59 +00001012 self.assertEqual(round(1.0), 1.0)
1013 self.assertEqual(round(10.0), 10.0)
1014 self.assertEqual(round(1000000000.0), 1000000000.0)
1015 self.assertEqual(round(1e20), 1e20)
1016
1017 self.assertEqual(round(-1.0), -1.0)
1018 self.assertEqual(round(-10.0), -10.0)
1019 self.assertEqual(round(-1000000000.0), -1000000000.0)
1020 self.assertEqual(round(-1e20), -1e20)
1021
1022 self.assertEqual(round(0.1), 0.0)
1023 self.assertEqual(round(1.1), 1.0)
1024 self.assertEqual(round(10.1), 10.0)
1025 self.assertEqual(round(1000000000.1), 1000000000.0)
1026
1027 self.assertEqual(round(-1.1), -1.0)
1028 self.assertEqual(round(-10.1), -10.0)
1029 self.assertEqual(round(-1000000000.1), -1000000000.0)
1030
1031 self.assertEqual(round(0.9), 1.0)
1032 self.assertEqual(round(9.9), 10.0)
1033 self.assertEqual(round(999999999.9), 1000000000.0)
1034
1035 self.assertEqual(round(-0.9), -1.0)
1036 self.assertEqual(round(-9.9), -10.0)
1037 self.assertEqual(round(-999999999.9), -1000000000.0)
1038
1039 self.assertEqual(round(-8.0, -1), -10.0)
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001040 self.assertEqual(type(round(-8.0, -1)), float)
1041
1042 self.assertEqual(type(round(-8.0, 0)), float)
1043 self.assertEqual(type(round(-8.0, 1)), float)
1044
1045 # Check even / odd rounding behaviour
1046 self.assertEqual(round(5.5), 6)
1047 self.assertEqual(round(6.5), 6)
1048 self.assertEqual(round(-5.5), -6)
1049 self.assertEqual(round(-6.5), -6)
1050
1051 # Check behavior on ints
1052 self.assertEqual(round(0), 0)
1053 self.assertEqual(round(8), 8)
1054 self.assertEqual(round(-8), -8)
1055 self.assertEqual(type(round(0)), int)
Mark Dickinson1124e712009-01-28 21:25:58 +00001056 self.assertEqual(type(round(-8, -1)), int)
1057 self.assertEqual(type(round(-8, 0)), int)
1058 self.assertEqual(type(round(-8, 1)), int)
Walter Dörwald919497e2003-01-19 16:23:59 +00001059
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001060 # test new kwargs
1061 self.assertEqual(round(number=-8.0, ndigits=-1), -10.0)
1062
Walter Dörwald919497e2003-01-19 16:23:59 +00001063 self.assertRaises(TypeError, round)
1064
Alex Martelliae211f92007-08-22 23:21:33 +00001065 # test generic rounding delegation for reals
1066 class TestRound:
1067 def __round__(self):
1068 return 23
1069
1070 class TestNoRound:
1071 pass
1072
1073 self.assertEqual(round(TestRound()), 23)
1074
1075 self.assertRaises(TypeError, round, 1, 2, 3)
1076 self.assertRaises(TypeError, round, TestNoRound())
1077
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001078 t = TestNoRound()
1079 t.__round__ = lambda *args: args
1080 self.assertRaises(TypeError, round, t)
1081 self.assertRaises(TypeError, round, t, 0)
1082
Mark Dickinsonad731b92009-11-09 17:12:30 +00001083 # Some versions of glibc for alpha have a bug that affects
1084 # float -> integer rounding (floor, ceil, rint, round) for
1085 # values in the range [2**52, 2**53). See:
1086 #
1087 # http://sources.redhat.com/bugzilla/show_bug.cgi?id=5350
1088 #
1089 # We skip this test on Linux/alpha if it would fail.
1090 linux_alpha = (platform.system().startswith('Linux') and
1091 platform.machine().startswith('alpha'))
1092 system_round_bug = round(5e15+1) != 5e15+1
1093 @unittest.skipIf(linux_alpha and system_round_bug,
1094 "test will fail; failure is probably due to a "
1095 "buggy system round function")
1096 def test_round_large(self):
1097 # Issue #1869: integral floats should remain unchanged
1098 self.assertEqual(round(5e15-1), 5e15-1)
1099 self.assertEqual(round(5e15), 5e15)
1100 self.assertEqual(round(5e15+1), 5e15+1)
1101 self.assertEqual(round(5e15+2), 5e15+2)
1102 self.assertEqual(round(5e15+3), 5e15+3)
1103
Walter Dörwald919497e2003-01-19 16:23:59 +00001104 def test_setattr(self):
Tim Petersf2715e02003-02-19 02:35:07 +00001105 setattr(sys, 'spam', 1)
1106 self.assertEqual(sys.spam, 1)
1107 self.assertRaises(TypeError, setattr, sys, 1, 'spam')
1108 self.assertRaises(TypeError, setattr)
Walter Dörwald919497e2003-01-19 16:23:59 +00001109
Walter Dörwald919497e2003-01-19 16:23:59 +00001110
Alex Martellia70b1912003-04-22 08:12:33 +00001111 def test_sum(self):
1112 self.assertEqual(sum([]), 0)
Guido van Rossum805365e2007-05-07 22:24:25 +00001113 self.assertEqual(sum(list(range(2,8))), 27)
1114 self.assertEqual(sum(iter(list(range(2,8)))), 27)
Alex Martellia70b1912003-04-22 08:12:33 +00001115 self.assertEqual(sum(Squares(10)), 285)
1116 self.assertEqual(sum(iter(Squares(10))), 285)
1117 self.assertEqual(sum([[1], [2], [3]], []), [1, 2, 3])
1118
1119 self.assertRaises(TypeError, sum)
1120 self.assertRaises(TypeError, sum, 42)
1121 self.assertRaises(TypeError, sum, ['a', 'b', 'c'])
1122 self.assertRaises(TypeError, sum, ['a', 'b', 'c'], '')
1123 self.assertRaises(TypeError, sum, [[1], [2], [3]])
1124 self.assertRaises(TypeError, sum, [{2:3}])
1125 self.assertRaises(TypeError, sum, [{2:3}]*2, {2:3})
1126
1127 class BadSeq:
1128 def __getitem__(self, index):
1129 raise ValueError
1130 self.assertRaises(ValueError, sum, BadSeq())
1131
Mark Dickinson3a22b472009-10-17 21:48:16 +00001132 empty = []
1133 sum(([x] for x in range(10)), empty)
1134 self.assertEqual(empty, [])
1135
Walter Dörwald919497e2003-01-19 16:23:59 +00001136 def test_type(self):
1137 self.assertEqual(type(''), type('123'))
1138 self.assertNotEqual(type(''), type(()))
1139
Guido van Rossumfee7b932005-01-16 00:21:28 +00001140 # We don't want self in vars(), so these are static methods
1141
1142 @staticmethod
Walter Dörwald919497e2003-01-19 16:23:59 +00001143 def get_vars_f0():
1144 return vars()
Walter Dörwald919497e2003-01-19 16:23:59 +00001145
Guido van Rossumfee7b932005-01-16 00:21:28 +00001146 @staticmethod
Walter Dörwald919497e2003-01-19 16:23:59 +00001147 def get_vars_f2():
1148 BuiltinTest.get_vars_f0()
1149 a = 1
1150 b = 2
1151 return vars()
Walter Dörwald919497e2003-01-19 16:23:59 +00001152
1153 def test_vars(self):
Raymond Hettingera690a992003-11-16 16:17:49 +00001154 self.assertEqual(set(vars()), set(dir()))
Walter Dörwald919497e2003-01-19 16:23:59 +00001155 import sys
Raymond Hettingera690a992003-11-16 16:17:49 +00001156 self.assertEqual(set(vars(sys)), set(dir(sys)))
Walter Dörwald919497e2003-01-19 16:23:59 +00001157 self.assertEqual(self.get_vars_f0(), {})
1158 self.assertEqual(self.get_vars_f2(), {'a': 1, 'b': 2})
1159 self.assertRaises(TypeError, vars, 42, 42)
1160 self.assertRaises(TypeError, vars, 42)
1161
1162 def test_zip(self):
1163 a = (1, 2, 3)
1164 b = (4, 5, 6)
1165 t = [(1, 4), (2, 5), (3, 6)]
Guido van Rossum801f0d72006-08-24 19:48:10 +00001166 self.assertEqual(list(zip(a, b)), t)
Walter Dörwald919497e2003-01-19 16:23:59 +00001167 b = [4, 5, 6]
Guido van Rossum801f0d72006-08-24 19:48:10 +00001168 self.assertEqual(list(zip(a, b)), t)
Walter Dörwald919497e2003-01-19 16:23:59 +00001169 b = (4, 5, 6, 7)
Guido van Rossum801f0d72006-08-24 19:48:10 +00001170 self.assertEqual(list(zip(a, b)), t)
Walter Dörwald919497e2003-01-19 16:23:59 +00001171 class I:
1172 def __getitem__(self, i):
1173 if i < 0 or i > 2: raise IndexError
1174 return i + 4
Guido van Rossum801f0d72006-08-24 19:48:10 +00001175 self.assertEqual(list(zip(a, I())), t)
1176 self.assertEqual(list(zip()), [])
1177 self.assertEqual(list(zip(*[])), [])
Walter Dörwald919497e2003-01-19 16:23:59 +00001178 self.assertRaises(TypeError, zip, None)
1179 class G:
1180 pass
1181 self.assertRaises(TypeError, zip, a, G())
1182
1183 # Make sure zip doesn't try to allocate a billion elements for the
1184 # result list when one of its arguments doesn't say how long it is.
1185 # A MemoryError is the most likely failure mode.
1186 class SequenceWithoutALength:
1187 def __getitem__(self, i):
1188 if i == 5:
1189 raise IndexError
1190 else:
1191 return i
1192 self.assertEqual(
Guido van Rossum805365e2007-05-07 22:24:25 +00001193 list(zip(SequenceWithoutALength(), range(2**30))),
Walter Dörwald919497e2003-01-19 16:23:59 +00001194 list(enumerate(range(5)))
1195 )
1196
1197 class BadSeq:
1198 def __getitem__(self, i):
1199 if i == 5:
1200 raise ValueError
1201 else:
1202 return i
Guido van Rossum801f0d72006-08-24 19:48:10 +00001203 self.assertRaises(ValueError, list, zip(BadSeq(), BadSeq()))
Walter Dörwald919497e2003-01-19 16:23:59 +00001204
Christian Heimes90c3d9b2008-02-23 13:18:03 +00001205 def test_bin(self):
1206 self.assertEqual(bin(0), '0b0')
1207 self.assertEqual(bin(1), '0b1')
1208 self.assertEqual(bin(-1), '-0b1')
1209 self.assertEqual(bin(2**65), '0b1' + '0' * 65)
1210 self.assertEqual(bin(2**65-1), '0b' + '1' * 65)
1211 self.assertEqual(bin(-(2**65)), '-0b1' + '0' * 65)
1212 self.assertEqual(bin(-(2**65-1)), '-0b' + '1' * 65)
1213
Georg Brandl953152f2009-07-22 12:03:59 +00001214 def test_bytearray_translate(self):
1215 x = bytearray(b"abc")
1216 self.assertRaises(ValueError, x.translate, b"1", 1)
1217 self.assertRaises(TypeError, x.translate, b"1"*256, 1)
1218
Raymond Hettinger64958a12003-12-17 20:43:33 +00001219class TestSorted(unittest.TestCase):
1220
1221 def test_basic(self):
Guido van Rossum805365e2007-05-07 22:24:25 +00001222 data = list(range(100))
Raymond Hettinger64958a12003-12-17 20:43:33 +00001223 copy = data[:]
1224 random.shuffle(copy)
1225 self.assertEqual(data, sorted(copy))
1226 self.assertNotEqual(data, copy)
1227
1228 data.reverse()
1229 random.shuffle(copy)
Raymond Hettinger64958a12003-12-17 20:43:33 +00001230 self.assertEqual(data, sorted(copy, key=lambda x: -x))
1231 self.assertNotEqual(data, copy)
1232 random.shuffle(copy)
1233 self.assertEqual(data, sorted(copy, reverse=1))
1234 self.assertNotEqual(data, copy)
1235
1236 def test_inputtypes(self):
1237 s = 'abracadabra'
Walter Dörwald1f5947b2007-05-22 16:52:54 +00001238 types = [list, tuple, str]
Walter Dörwald4e41a4b2005-08-03 17:09:04 +00001239 for T in types:
Raymond Hettinger64958a12003-12-17 20:43:33 +00001240 self.assertEqual(sorted(s), sorted(T(s)))
1241
Walter Dörwald1f5947b2007-05-22 16:52:54 +00001242 s = ''.join(set(s)) # unique letters only
1243 types = [str, set, frozenset, list, tuple, dict.fromkeys]
Walter Dörwald4e41a4b2005-08-03 17:09:04 +00001244 for T in types:
Raymond Hettinger64958a12003-12-17 20:43:33 +00001245 self.assertEqual(sorted(s), sorted(T(s)))
1246
1247 def test_baddecorator(self):
1248 data = 'The quick Brown fox Jumped over The lazy Dog'.split()
1249 self.assertRaises(TypeError, sorted, data, None, lambda x,y: 0)
1250
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001251def test_main(verbose=None):
1252 test_classes = (BuiltinTest, TestSorted)
1253
1254 run_unittest(*test_classes)
1255
1256 # verify reference counting
1257 if verbose and hasattr(sys, "gettotalrefcount"):
1258 import gc
1259 counts = [None] * 5
Guido van Rossum805365e2007-05-07 22:24:25 +00001260 for i in range(len(counts)):
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001261 run_unittest(*test_classes)
1262 gc.collect()
1263 counts[i] = sys.gettotalrefcount()
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001264 print(counts)
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001265
Walter Dörwald919497e2003-01-19 16:23:59 +00001266
1267if __name__ == "__main__":
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001268 test_main(verbose=True)