blob: 9b5a876000b405866a6bd877740fce73e8ba548f [file] [log] [blame]
Walter Dörwald919497e2003-01-19 16:23:59 +00001# Python test set -- built-in functions
Guido van Rossum3bead091992-01-27 17:00:37 +00002
Mark Dickinsonad731b92009-11-09 17:12:30 +00003import platform
Georg Brandl1b37e872010-03-14 10:45:50 +00004import unittest
Benjamin Peterson076e0312010-08-23 21:58:59 +00005import sys
6import warnings
7import collections
8import io
9import types
10import builtins
11import random
Brett Cannon77628992010-03-20 20:59:33 +000012from test.support import fcmp, TESTFN, unlink, run_unittest, check_warnings
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +000013from operator import neg
Guido van Rossum3bead091992-01-27 17:00:37 +000014
Guido van Rossum3bead091992-01-27 17:00:37 +000015
Walter Dörwald919497e2003-01-19 16:23:59 +000016class Squares:
Guido van Rossum3bead091992-01-27 17:00:37 +000017
Walter Dörwald919497e2003-01-19 16:23:59 +000018 def __init__(self, max):
19 self.max = max
20 self.sofar = []
21
22 def __len__(self): return len(self.sofar)
23
24 def __getitem__(self, i):
25 if not 0 <= i < self.max: raise IndexError
26 n = len(self.sofar)
27 while n <= i:
28 self.sofar.append(n*n)
29 n += 1
30 return self.sofar[i]
31
32class StrSquares:
33
34 def __init__(self, max):
35 self.max = max
36 self.sofar = []
37
38 def __len__(self):
39 return len(self.sofar)
40
41 def __getitem__(self, i):
42 if not 0 <= i < self.max:
43 raise IndexError
44 n = len(self.sofar)
45 while n <= i:
46 self.sofar.append(str(n*n))
47 n += 1
48 return self.sofar[i]
49
50class BitBucket:
51 def write(self, line):
52 pass
53
Facundo Batista2336bdd2008-01-19 19:12:01 +000054test_conv_no_sign = [
Walter Dörwald919497e2003-01-19 16:23:59 +000055 ('0', 0),
56 ('1', 1),
57 ('9', 9),
58 ('10', 10),
59 ('99', 99),
60 ('100', 100),
61 ('314', 314),
62 (' 314', 314),
63 ('314 ', 314),
64 (' \t\t 314 \t\t ', 314),
Christian Heimesa37d4c62007-12-04 23:02:19 +000065 (repr(sys.maxsize), sys.maxsize),
Walter Dörwald919497e2003-01-19 16:23:59 +000066 (' 1x', ValueError),
67 (' 1 ', 1),
68 (' 1\02 ', ValueError),
69 ('', ValueError),
70 (' ', ValueError),
Walter Dörwald1f5947b2007-05-22 16:52:54 +000071 (' \t\t ', ValueError),
Guido van Rossumef87d6e2007-05-02 19:09:54 +000072 (str(b'\u0663\u0661\u0664 ','raw-unicode-escape'), 314),
Guido van Rossum84fc66d2007-05-03 17:18:26 +000073 (chr(0x200), ValueError),
Walter Dörwald919497e2003-01-19 16:23:59 +000074]
75
Facundo Batista2336bdd2008-01-19 19:12:01 +000076test_conv_sign = [
77 ('0', 0),
78 ('1', 1),
79 ('9', 9),
80 ('10', 10),
81 ('99', 99),
82 ('100', 100),
83 ('314', 314),
84 (' 314', ValueError),
85 ('314 ', 314),
86 (' \t\t 314 \t\t ', ValueError),
87 (repr(sys.maxsize), sys.maxsize),
88 (' 1x', ValueError),
89 (' 1 ', ValueError),
90 (' 1\02 ', ValueError),
91 ('', ValueError),
92 (' ', ValueError),
93 (' \t\t ', ValueError),
94 (str(b'\u0663\u0661\u0664 ','raw-unicode-escape'), 314),
95 (chr(0x200), ValueError),
96]
97
Raymond Hettinger96229b12005-03-11 06:49:40 +000098class TestFailingBool:
Jack Diederich4dafcc42006-11-28 19:15:13 +000099 def __bool__(self):
Raymond Hettinger96229b12005-03-11 06:49:40 +0000100 raise RuntimeError
101
102class TestFailingIter:
103 def __iter__(self):
104 raise RuntimeError
105
Walter Dörwald919497e2003-01-19 16:23:59 +0000106class BuiltinTest(unittest.TestCase):
107
108 def test_import(self):
109 __import__('sys')
110 __import__('time')
111 __import__('string')
Guido van Rossumd8faa362007-04-27 19:54:29 +0000112 __import__(name='sys')
113 __import__(name='time', level=0)
Walter Dörwald919497e2003-01-19 16:23:59 +0000114 self.assertRaises(ImportError, __import__, 'spamspam')
115 self.assertRaises(TypeError, __import__, 1, 2, 3, 4)
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000116 self.assertRaises(ValueError, __import__, '')
Guido van Rossumd8faa362007-04-27 19:54:29 +0000117 self.assertRaises(TypeError, __import__, 'sys', name='sys')
Walter Dörwald919497e2003-01-19 16:23:59 +0000118
119 def test_abs(self):
120 # int
121 self.assertEqual(abs(0), 0)
122 self.assertEqual(abs(1234), 1234)
123 self.assertEqual(abs(-1234), 1234)
Christian Heimesa37d4c62007-12-04 23:02:19 +0000124 self.assertTrue(abs(-sys.maxsize-1) > 0)
Walter Dörwald919497e2003-01-19 16:23:59 +0000125 # float
126 self.assertEqual(abs(0.0), 0.0)
127 self.assertEqual(abs(3.14), 3.14)
128 self.assertEqual(abs(-3.14), 3.14)
Walter Dörwald919497e2003-01-19 16:23:59 +0000129 # str
130 self.assertRaises(TypeError, abs, 'a')
Mark Dickinsonfb3dc942010-05-25 19:06:24 +0000131 # bool
132 self.assertEqual(abs(True), 1)
133 self.assertEqual(abs(False), 0)
134 # other
135 self.assertRaises(TypeError, abs)
136 self.assertRaises(TypeError, abs, None)
137 class AbsClass(object):
138 def __abs__(self):
139 return -5
140 self.assertEqual(abs(AbsClass()), -5)
Walter Dörwald919497e2003-01-19 16:23:59 +0000141
Raymond Hettinger96229b12005-03-11 06:49:40 +0000142 def test_all(self):
143 self.assertEqual(all([2, 4, 6]), True)
144 self.assertEqual(all([2, None, 6]), False)
145 self.assertRaises(RuntimeError, all, [2, TestFailingBool(), 6])
146 self.assertRaises(RuntimeError, all, TestFailingIter())
147 self.assertRaises(TypeError, all, 10) # Non-iterable
148 self.assertRaises(TypeError, all) # No args
149 self.assertRaises(TypeError, all, [2, 4, 6], []) # Too many args
150 self.assertEqual(all([]), True) # Empty iterator
151 S = [50, 60]
152 self.assertEqual(all(x > 42 for x in S), True)
153 S = [50, 40, 60]
154 self.assertEqual(all(x > 42 for x in S), False)
155
156 def test_any(self):
157 self.assertEqual(any([None, None, None]), False)
158 self.assertEqual(any([None, 4, None]), True)
159 self.assertRaises(RuntimeError, any, [None, TestFailingBool(), 6])
160 self.assertRaises(RuntimeError, all, TestFailingIter())
161 self.assertRaises(TypeError, any, 10) # Non-iterable
162 self.assertRaises(TypeError, any) # No args
163 self.assertRaises(TypeError, any, [2, 4, 6], []) # Too many args
164 self.assertEqual(any([]), False) # Empty iterator
165 S = [40, 60, 30]
166 self.assertEqual(any(x > 42 for x in S), True)
167 S = [10, 20, 30]
168 self.assertEqual(any(x > 42 for x in S), False)
169
Georg Brandl559e5d72008-06-11 18:37:52 +0000170 def test_ascii(self):
171 self.assertEqual(ascii(''), '\'\'')
172 self.assertEqual(ascii(0), '0')
Georg Brandl559e5d72008-06-11 18:37:52 +0000173 self.assertEqual(ascii(()), '()')
174 self.assertEqual(ascii([]), '[]')
175 self.assertEqual(ascii({}), '{}')
176 a = []
177 a.append(a)
178 self.assertEqual(ascii(a), '[[...]]')
179 a = {}
180 a[0] = a
181 self.assertEqual(ascii(a), '{0: {...}}')
Antoine Pitroue4a18922010-09-09 20:30:23 +0000182 # Advanced checks for unicode strings
183 def _check_uni(s):
184 self.assertEqual(ascii(s), repr(s))
185 _check_uni("'")
186 _check_uni('"')
187 _check_uni('"\'')
188 _check_uni('\0')
189 _check_uni('\r\n\t .')
190 # Unprintable non-ASCII characters
191 _check_uni('\x85')
192 _check_uni('\u1fff')
193 _check_uni('\U00012fff')
194 # Lone surrogates
195 _check_uni('\ud800')
196 _check_uni('\udfff')
197 # Issue #9804: surrogates should be joined even for printable
198 # wide characters (UCS-2 builds).
199 self.assertEqual(ascii('\U0001d121'), "'\\U0001d121'")
200 # All together
201 s = "'\0\"\n\r\t abcd\x85é\U00012fff\uD800\U0001D121xxx."
202 self.assertEqual(ascii(s),
203 r"""'\'\x00"\n\r\t abcd\x85\xe9\U00012fff\ud800\U0001d121xxx.'""")
Georg Brandl559e5d72008-06-11 18:37:52 +0000204
Thomas Wouters89f507f2006-12-13 04:49:30 +0000205 def test_neg(self):
Christian Heimesa37d4c62007-12-04 23:02:19 +0000206 x = -sys.maxsize-1
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000207 self.assertTrue(isinstance(x, int))
Christian Heimesa37d4c62007-12-04 23:02:19 +0000208 self.assertEqual(-x, sys.maxsize+1)
Thomas Wouters89f507f2006-12-13 04:49:30 +0000209
Guido van Rossumd59da4b2007-05-22 18:11:13 +0000210 # XXX(nnorwitz): This test case for callable should probably be removed.
Walter Dörwald919497e2003-01-19 16:23:59 +0000211 def test_callable(self):
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000212 self.assertTrue(hasattr(len, '__call__'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000213 def f(): pass
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000214 self.assertTrue(hasattr(f, '__call__'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000215 class C:
216 def meth(self): pass
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000217 self.assertTrue(hasattr(C, '__call__'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000218 x = C()
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000219 self.assertTrue(hasattr(x.meth, '__call__'))
220 self.assertTrue(not hasattr(x, '__call__'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000221 class D(C):
222 def __call__(self): pass
223 y = D()
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000224 self.assertTrue(hasattr(y, '__call__'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000225 y()
226
227 def test_chr(self):
228 self.assertEqual(chr(32), ' ')
229 self.assertEqual(chr(65), 'A')
230 self.assertEqual(chr(97), 'a')
231 self.assertEqual(chr(0xff), '\xff')
Guido van Rossum572dbf82007-04-27 23:53:51 +0000232 self.assertRaises(ValueError, chr, 1<<24)
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000233 self.assertEqual(chr(sys.maxunicode),
234 str(('\\U%08x' % (sys.maxunicode)).encode("ascii"),
235 'unicode-escape'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000236 self.assertRaises(TypeError, chr)
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000237 self.assertEqual(chr(0x0000FFFF), "\U0000FFFF")
238 self.assertEqual(chr(0x00010000), "\U00010000")
239 self.assertEqual(chr(0x00010001), "\U00010001")
240 self.assertEqual(chr(0x000FFFFE), "\U000FFFFE")
241 self.assertEqual(chr(0x000FFFFF), "\U000FFFFF")
242 self.assertEqual(chr(0x00100000), "\U00100000")
243 self.assertEqual(chr(0x00100001), "\U00100001")
244 self.assertEqual(chr(0x0010FFFE), "\U0010FFFE")
245 self.assertEqual(chr(0x0010FFFF), "\U0010FFFF")
246 self.assertRaises(ValueError, chr, -1)
247 self.assertRaises(ValueError, chr, 0x00110000)
Amaury Forgeot d'Arc7888d082008-08-01 01:06:32 +0000248 self.assertRaises((OverflowError, ValueError), chr, 2**32)
Walter Dörwald919497e2003-01-19 16:23:59 +0000249
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000250 def test_cmp(self):
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000251 self.assertTrue(not hasattr(builtins, "cmp"))
Walter Dörwald919497e2003-01-19 16:23:59 +0000252
Walter Dörwald919497e2003-01-19 16:23:59 +0000253 def test_compile(self):
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000254 compile('print(1)\n', '', 'exec')
Amaury Forgeot d'Arcaf593462007-11-22 20:53:01 +0000255 bom = b'\xef\xbb\xbf'
256 compile(bom + b'print(1)\n', '', 'exec')
Guido van Rossumd8faa362007-04-27 19:54:29 +0000257 compile(source='pass', filename='?', mode='exec')
258 compile(dont_inherit=0, filename='tmp', source='0', mode='eval')
259 compile('pass', '?', dont_inherit=1, mode='exec')
Benjamin Peterson60320cb2008-09-26 21:49:22 +0000260 compile(memoryview(b"text"), "name", "exec")
Walter Dörwald919497e2003-01-19 16:23:59 +0000261 self.assertRaises(TypeError, compile)
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000262 self.assertRaises(ValueError, compile, 'print(42)\n', '<string>', 'badmode')
263 self.assertRaises(ValueError, compile, 'print(42)\n', '<string>', 'single', 0xff)
Neal Norwitzfcf44352005-11-27 20:37:43 +0000264 self.assertRaises(TypeError, compile, chr(0), 'f', 'exec')
Guido van Rossumd8faa362007-04-27 19:54:29 +0000265 self.assertRaises(TypeError, compile, 'pass', '?', 'exec',
266 mode='eval', source='0', filename='tmp')
Walter Dörwald1f5947b2007-05-22 16:52:54 +0000267 compile('print("\xe5")\n', '', 'exec')
268 self.assertRaises(TypeError, compile, chr(0), 'f', 'exec')
269 self.assertRaises(ValueError, compile, str('a = 1'), 'f', 'bad')
Guido van Rossumd8faa362007-04-27 19:54:29 +0000270
Walter Dörwald919497e2003-01-19 16:23:59 +0000271 def test_delattr(self):
Walter Dörwald919497e2003-01-19 16:23:59 +0000272 sys.spam = 1
273 delattr(sys, 'spam')
274 self.assertRaises(TypeError, delattr)
275
276 def test_dir(self):
Georg Brandle32b4222007-03-10 22:13:27 +0000277 # dir(wrong number of arguments)
Walter Dörwald919497e2003-01-19 16:23:59 +0000278 self.assertRaises(TypeError, dir, 42, 42)
279
Georg Brandle32b4222007-03-10 22:13:27 +0000280 # dir() - local scope
281 local_var = 1
Benjamin Peterson577473f2010-01-19 00:09:57 +0000282 self.assertIn('local_var', dir())
Georg Brandle32b4222007-03-10 22:13:27 +0000283
284 # dir(module)
Benjamin Peterson577473f2010-01-19 00:09:57 +0000285 self.assertIn('exit', dir(sys))
Georg Brandle32b4222007-03-10 22:13:27 +0000286
287 # dir(module_with_invalid__dict__)
Georg Brandle32b4222007-03-10 22:13:27 +0000288 class Foo(types.ModuleType):
289 __dict__ = 8
290 f = Foo("foo")
291 self.assertRaises(TypeError, dir, f)
292
293 # dir(type)
Benjamin Peterson577473f2010-01-19 00:09:57 +0000294 self.assertIn("strip", dir(str))
295 self.assertNotIn("__mro__", dir(str))
Georg Brandle32b4222007-03-10 22:13:27 +0000296
297 # dir(obj)
298 class Foo(object):
299 def __init__(self):
300 self.x = 7
301 self.y = 8
302 self.z = 9
303 f = Foo()
Benjamin Peterson577473f2010-01-19 00:09:57 +0000304 self.assertIn("y", dir(f))
Georg Brandle32b4222007-03-10 22:13:27 +0000305
306 # dir(obj_no__dict__)
307 class Foo(object):
308 __slots__ = []
309 f = Foo()
Benjamin Peterson577473f2010-01-19 00:09:57 +0000310 self.assertIn("__repr__", dir(f))
Georg Brandle32b4222007-03-10 22:13:27 +0000311
312 # dir(obj_no__class__with__dict__)
313 # (an ugly trick to cause getattr(f, "__class__") to fail)
314 class Foo(object):
315 __slots__ = ["__class__", "__dict__"]
316 def __init__(self):
317 self.bar = "wow"
318 f = Foo()
Benjamin Peterson577473f2010-01-19 00:09:57 +0000319 self.assertNotIn("__repr__", dir(f))
320 self.assertIn("bar", dir(f))
Georg Brandle32b4222007-03-10 22:13:27 +0000321
322 # dir(obj_using __dir__)
323 class Foo(object):
324 def __dir__(self):
325 return ["kan", "ga", "roo"]
326 f = Foo()
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000327 self.assertTrue(dir(f) == ["ga", "kan", "roo"])
Georg Brandle32b4222007-03-10 22:13:27 +0000328
329 # dir(obj__dir__not_list)
330 class Foo(object):
331 def __dir__(self):
332 return 7
333 f = Foo()
334 self.assertRaises(TypeError, dir, f)
335
Collin Winter3eed7652007-08-14 17:53:54 +0000336 # dir(traceback)
337 try:
338 raise IndexError
339 except:
340 self.assertEqual(len(dir(sys.exc_info()[2])), 4)
341
342
Walter Dörwald919497e2003-01-19 16:23:59 +0000343 def test_divmod(self):
344 self.assertEqual(divmod(12, 7), (1, 5))
345 self.assertEqual(divmod(-12, 7), (-2, 2))
346 self.assertEqual(divmod(12, -7), (-2, -2))
347 self.assertEqual(divmod(-12, -7), (1, -5))
348
Mark Dickinson5c2db372009-12-05 20:28:34 +0000349 self.assertEqual(divmod(-sys.maxsize-1, -1), (sys.maxsize+1, 0))
Raymond Hettinger5ea7e312004-09-30 07:47:20 +0000350
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000351 self.assertTrue(not fcmp(divmod(3.25, 1.0), (3.0, 0.25)))
352 self.assertTrue(not fcmp(divmod(-3.25, 1.0), (-4.0, 0.75)))
353 self.assertTrue(not fcmp(divmod(3.25, -1.0), (-4.0, -0.75)))
354 self.assertTrue(not fcmp(divmod(-3.25, -1.0), (3.0, -0.25)))
Walter Dörwald919497e2003-01-19 16:23:59 +0000355
356 self.assertRaises(TypeError, divmod)
357
358 def test_eval(self):
359 self.assertEqual(eval('1+1'), 2)
360 self.assertEqual(eval(' 1+1\n'), 2)
361 globals = {'a': 1, 'b': 2}
362 locals = {'b': 200, 'c': 300}
363 self.assertEqual(eval('a', globals) , 1)
364 self.assertEqual(eval('a', globals, locals), 1)
365 self.assertEqual(eval('b', globals, locals), 200)
366 self.assertEqual(eval('c', globals, locals), 300)
Walter Dörwald919497e2003-01-19 16:23:59 +0000367 globals = {'a': 1, 'b': 2}
368 locals = {'b': 200, 'c': 300}
Amaury Forgeot d'Arcaf593462007-11-22 20:53:01 +0000369 bom = b'\xef\xbb\xbf'
370 self.assertEqual(eval(bom + b'a', globals, locals), 1)
Walter Dörwald1f5947b2007-05-22 16:52:54 +0000371 self.assertEqual(eval('"\xe5"', globals), "\xe5")
Walter Dörwald919497e2003-01-19 16:23:59 +0000372 self.assertRaises(TypeError, eval)
373 self.assertRaises(TypeError, eval, ())
Amaury Forgeot d'Arcaf593462007-11-22 20:53:01 +0000374 self.assertRaises(SyntaxError, eval, bom[:2] + b'a')
Walter Dörwald919497e2003-01-19 16:23:59 +0000375
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000376 def test_general_eval(self):
377 # Tests that general mappings can be used for the locals argument
378
379 class M:
380 "Test mapping interface versus possible calls from eval()."
381 def __getitem__(self, key):
382 if key == 'a':
383 return 12
384 raise KeyError
Guido van Rossumcd70eee2007-02-11 18:53:00 +0000385 def keys(self):
386 return list('xyz')
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000387
388 m = M()
389 g = globals()
390 self.assertEqual(eval('a', g, m), 12)
391 self.assertRaises(NameError, eval, 'b', g, m)
392 self.assertEqual(eval('dir()', g, m), list('xyz'))
393 self.assertEqual(eval('globals()', g, m), g)
394 self.assertEqual(eval('locals()', g, m), m)
Raymond Hettinger513ffe82004-07-06 13:44:41 +0000395 self.assertRaises(TypeError, eval, 'a', m)
Raymond Hettinger66bd2332004-08-02 08:30:07 +0000396 class A:
397 "Non-mapping"
398 pass
399 m = A()
400 self.assertRaises(TypeError, eval, 'a', g, m)
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000401
402 # Verify that dict subclasses work as well
403 class D(dict):
404 def __getitem__(self, key):
405 if key == 'a':
406 return 12
407 return dict.__getitem__(self, key)
Guido van Rossumcd70eee2007-02-11 18:53:00 +0000408 def keys(self):
409 return list('xyz')
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000410
411 d = D()
412 self.assertEqual(eval('a', g, d), 12)
413 self.assertRaises(NameError, eval, 'b', g, d)
414 self.assertEqual(eval('dir()', g, d), list('xyz'))
415 self.assertEqual(eval('globals()', g, d), g)
416 self.assertEqual(eval('locals()', g, d), d)
417
418 # Verify locals stores (used by list comps)
419 eval('[locals() for i in (2,3)]', g, d)
Raymond Hettingerf80680d2008-02-06 00:07:11 +0000420 eval('[locals() for i in (2,3)]', g, collections.UserDict())
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000421
422 class SpreadSheet:
423 "Sample application showing nested, calculated lookups."
424 _cells = {}
425 def __setitem__(self, key, formula):
426 self._cells[key] = formula
Thomas Wouters73e5a5b2006-06-08 15:35:45 +0000427 def __getitem__(self, key):
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000428 return eval(self._cells[key], globals(), self)
429
430 ss = SpreadSheet()
431 ss['a1'] = '5'
432 ss['a2'] = 'a1*6'
433 ss['a3'] = 'a2*7'
434 self.assertEqual(ss['a3'], 210)
435
Raymond Hettinger2a7dede2004-08-07 04:55:30 +0000436 # Verify that dir() catches a non-list returned by eval
437 # SF bug #1004669
438 class C:
439 def __getitem__(self, item):
440 raise KeyError(item)
Guido van Rossumcd70eee2007-02-11 18:53:00 +0000441 def keys(self):
442 return 1 # used to be 'a' but that's no longer an error
Raymond Hettinger2a7dede2004-08-07 04:55:30 +0000443 self.assertRaises(TypeError, eval, 'dir()', globals(), C())
444
Georg Brandl7cae87c2006-09-06 06:51:57 +0000445 def test_exec(self):
446 g = {}
447 exec('z = 1', g)
448 if '__builtins__' in g:
449 del g['__builtins__']
450 self.assertEqual(g, {'z': 1})
451
Guido van Rossumef87d6e2007-05-02 19:09:54 +0000452 exec('z = 1+1', g)
Georg Brandl7cae87c2006-09-06 06:51:57 +0000453 if '__builtins__' in g:
454 del g['__builtins__']
455 self.assertEqual(g, {'z': 2})
456 g = {}
457 l = {}
458
Brett Cannon77628992010-03-20 20:59:33 +0000459 with check_warnings():
460 warnings.filterwarnings("ignore", "global statement",
461 module="<string>")
462 exec('global a; a = 1; b = 2', g, l)
Georg Brandl7cae87c2006-09-06 06:51:57 +0000463 if '__builtins__' in g:
464 del g['__builtins__']
465 if '__builtins__' in l:
466 del l['__builtins__']
467 self.assertEqual((g, l), ({'a': 1}, {'b': 2}))
468
Amaury Forgeot d'Arc9ed77352008-04-04 23:25:27 +0000469 def test_exec_redirected(self):
470 savestdout = sys.stdout
471 sys.stdout = None # Whatever that cannot flush()
472 try:
473 # Used to raise SystemError('error return without exception set')
474 exec('a')
475 except NameError:
476 pass
477 finally:
478 sys.stdout = savestdout
479
Walter Dörwald919497e2003-01-19 16:23:59 +0000480 def test_filter(self):
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000481 self.assertEqual(list(filter(lambda c: 'a' <= c <= 'z', 'Hello World')), list('elloorld'))
482 self.assertEqual(list(filter(None, [1, 'hello', [], [3], '', None, 9, 0])), [1, 'hello', [3], 9])
483 self.assertEqual(list(filter(lambda x: x > 0, [1, -3, 9, 0, 2])), [1, 9, 2])
484 self.assertEqual(list(filter(None, Squares(10))), [1, 4, 9, 16, 25, 36, 49, 64, 81])
485 self.assertEqual(list(filter(lambda x: x%2, Squares(10))), [1, 9, 25, 49, 81])
Walter Dörwald919497e2003-01-19 16:23:59 +0000486 def identity(item):
487 return 1
488 filter(identity, Squares(5))
489 self.assertRaises(TypeError, filter)
490 class BadSeq(object):
Tim Petersf2715e02003-02-19 02:35:07 +0000491 def __getitem__(self, index):
492 if index<4:
493 return 42
494 raise ValueError
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000495 self.assertRaises(ValueError, list, filter(lambda x: x, BadSeq()))
Walter Dörwald919497e2003-01-19 16:23:59 +0000496 def badfunc():
497 pass
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000498 self.assertRaises(TypeError, list, filter(badfunc, range(5)))
Walter Dörwald919497e2003-01-19 16:23:59 +0000499
Walter Dörwaldbf517072003-01-27 15:57:14 +0000500 # test bltinmodule.c::filtertuple()
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000501 self.assertEqual(list(filter(None, (1, 2))), [1, 2])
502 self.assertEqual(list(filter(lambda x: x>=3, (1, 2, 3, 4))), [3, 4])
503 self.assertRaises(TypeError, list, filter(42, (1, 2)))
Walter Dörwaldc3da83f2003-02-04 20:24:45 +0000504
Walter Dörwald919497e2003-01-19 16:23:59 +0000505 def test_getattr(self):
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000506 self.assertTrue(getattr(sys, 'stdout') is sys.stdout)
Walter Dörwald919497e2003-01-19 16:23:59 +0000507 self.assertRaises(TypeError, getattr, sys, 1)
508 self.assertRaises(TypeError, getattr, sys, 1, "foo")
509 self.assertRaises(TypeError, getattr)
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000510 self.assertRaises(AttributeError, getattr, sys, chr(sys.maxunicode))
Victor Stinner624dbf62010-03-12 17:17:58 +0000511 # unicode surrogates are not encodable to the default encoding (utf8)
512 self.assertRaises(AttributeError, getattr, 1, "\uDAD1\uD51E")
Walter Dörwald919497e2003-01-19 16:23:59 +0000513
514 def test_hasattr(self):
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000515 self.assertTrue(hasattr(sys, 'stdout'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000516 self.assertRaises(TypeError, hasattr, sys, 1)
517 self.assertRaises(TypeError, hasattr)
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000518 self.assertEqual(False, hasattr(sys, chr(sys.maxunicode)))
Walter Dörwald919497e2003-01-19 16:23:59 +0000519
Benjamin Peterson17689992010-08-24 03:26:23 +0000520 # Check that hasattr propagates all exceptions outside of
521 # AttributeError.
Alexandre Vassalottieca20b62008-05-16 02:54:33 +0000522 class A:
523 def __getattr__(self, what):
Benjamin Peterson17689992010-08-24 03:26:23 +0000524 raise SystemExit
525 self.assertRaises(SystemExit, hasattr, A(), "b")
Alexandre Vassalottieca20b62008-05-16 02:54:33 +0000526 class B:
527 def __getattr__(self, what):
Benjamin Peterson17689992010-08-24 03:26:23 +0000528 raise ValueError
529 self.assertRaises(ValueError, hasattr, B(), "b")
Alexandre Vassalottieca20b62008-05-16 02:54:33 +0000530
Walter Dörwald919497e2003-01-19 16:23:59 +0000531 def test_hash(self):
532 hash(None)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000533 self.assertEqual(hash(1), hash(1))
Walter Dörwald919497e2003-01-19 16:23:59 +0000534 self.assertEqual(hash(1), hash(1.0))
535 hash('spam')
Guido van Rossum98297ee2007-11-06 21:34:58 +0000536 self.assertEqual(hash('spam'), hash(b'spam'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000537 hash((0,1,2,3))
538 def f(): pass
539 self.assertRaises(TypeError, hash, [])
540 self.assertRaises(TypeError, hash, {})
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000541 # Bug 1536021: Allow hash to return long objects
542 class X:
543 def __hash__(self):
544 return 2**100
Ezio Melottib3aedd42010-11-20 19:04:17 +0000545 self.assertEqual(type(hash(X())), int)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000546 class Z(int):
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000547 def __hash__(self):
548 return self
Ezio Melottib3aedd42010-11-20 19:04:17 +0000549 self.assertEqual(hash(Z(42)), hash(42))
Walter Dörwald919497e2003-01-19 16:23:59 +0000550
551 def test_hex(self):
552 self.assertEqual(hex(16), '0x10')
Guido van Rossume2a383d2007-01-15 16:59:06 +0000553 self.assertEqual(hex(-16), '-0x10')
Walter Dörwald919497e2003-01-19 16:23:59 +0000554 self.assertRaises(TypeError, hex, {})
555
556 def test_id(self):
557 id(None)
558 id(1)
Walter Dörwald919497e2003-01-19 16:23:59 +0000559 id(1.0)
560 id('spam')
561 id((0,1,2,3))
562 id([0,1,2,3])
563 id({'spam': 1, 'eggs': 2, 'ham': 3})
564
Guido van Rossuma88a0332007-02-26 16:59:55 +0000565 # Test input() later, alphabetized as if it were raw_input
566
Walter Dörwald919497e2003-01-19 16:23:59 +0000567 def test_iter(self):
568 self.assertRaises(TypeError, iter)
569 self.assertRaises(TypeError, iter, 42, 42)
570 lists = [("1", "2"), ["1", "2"], "12"]
Walter Dörwald919497e2003-01-19 16:23:59 +0000571 for l in lists:
572 i = iter(l)
Georg Brandla18af4e2007-04-21 15:47:16 +0000573 self.assertEqual(next(i), '1')
574 self.assertEqual(next(i), '2')
575 self.assertRaises(StopIteration, next, i)
Walter Dörwald919497e2003-01-19 16:23:59 +0000576
577 def test_isinstance(self):
578 class C:
579 pass
580 class D(C):
581 pass
582 class E:
583 pass
584 c = C()
585 d = D()
586 e = E()
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000587 self.assertTrue(isinstance(c, C))
588 self.assertTrue(isinstance(d, C))
589 self.assertTrue(not isinstance(e, C))
590 self.assertTrue(not isinstance(c, D))
591 self.assertTrue(not isinstance('foo', E))
Walter Dörwald919497e2003-01-19 16:23:59 +0000592 self.assertRaises(TypeError, isinstance, E, 'foo')
593 self.assertRaises(TypeError, isinstance)
594
595 def test_issubclass(self):
596 class C:
597 pass
598 class D(C):
599 pass
600 class E:
601 pass
602 c = C()
603 d = D()
604 e = E()
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000605 self.assertTrue(issubclass(D, C))
606 self.assertTrue(issubclass(C, C))
607 self.assertTrue(not issubclass(C, D))
Walter Dörwald919497e2003-01-19 16:23:59 +0000608 self.assertRaises(TypeError, issubclass, 'foo', E)
609 self.assertRaises(TypeError, issubclass, E, 'foo')
610 self.assertRaises(TypeError, issubclass)
611
612 def test_len(self):
613 self.assertEqual(len('123'), 3)
614 self.assertEqual(len(()), 0)
615 self.assertEqual(len((1, 2, 3, 4)), 4)
616 self.assertEqual(len([1, 2, 3, 4]), 4)
617 self.assertEqual(len({}), 0)
618 self.assertEqual(len({'a':1, 'b': 2}), 2)
619 class BadSeq:
620 def __len__(self):
621 raise ValueError
622 self.assertRaises(ValueError, len, BadSeq())
Benjamin Petersonee1ae7c2009-02-08 21:07:20 +0000623 class InvalidLen:
624 def __len__(self):
625 return None
626 self.assertRaises(TypeError, len, InvalidLen())
627 class FloatLen:
628 def __len__(self):
629 return 4.5
630 self.assertRaises(TypeError, len, FloatLen())
631 class HugeLen:
632 def __len__(self):
633 return sys.maxsize + 1
634 self.assertRaises(OverflowError, len, HugeLen())
Mark Dickinsonfb3dc942010-05-25 19:06:24 +0000635 class NoLenMethod(object): pass
636 self.assertRaises(TypeError, len, NoLenMethod())
Walter Dörwald919497e2003-01-19 16:23:59 +0000637
Walter Dörwald919497e2003-01-19 16:23:59 +0000638 def test_map(self):
639 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000640 list(map(lambda x: x*x, range(1,4))),
Walter Dörwald919497e2003-01-19 16:23:59 +0000641 [1, 4, 9]
642 )
643 try:
644 from math import sqrt
645 except ImportError:
646 def sqrt(x):
647 return pow(x, 0.5)
648 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000649 list(map(lambda x: list(map(sqrt, x)), [[16, 4], [81, 9]])),
Walter Dörwald919497e2003-01-19 16:23:59 +0000650 [[4.0, 2.0], [9.0, 3.0]]
651 )
652 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000653 list(map(lambda x, y: x+y, [1,3,2], [9,1,4])),
Walter Dörwald919497e2003-01-19 16:23:59 +0000654 [10, 4, 6]
655 )
656
657 def plus(*v):
658 accu = 0
659 for i in v: accu = accu + i
660 return accu
661 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000662 list(map(plus, [1, 3, 7])),
Walter Dörwald919497e2003-01-19 16:23:59 +0000663 [1, 3, 7]
664 )
665 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000666 list(map(plus, [1, 3, 7], [4, 9, 2])),
Walter Dörwald919497e2003-01-19 16:23:59 +0000667 [1+4, 3+9, 7+2]
668 )
669 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000670 list(map(plus, [1, 3, 7], [4, 9, 2], [1, 1, 0])),
Walter Dörwald919497e2003-01-19 16:23:59 +0000671 [1+4+1, 3+9+1, 7+2+0]
672 )
673 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000674 list(map(int, Squares(10))),
Walter Dörwald919497e2003-01-19 16:23:59 +0000675 [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
676 )
Guido van Rossum47b9ff62006-08-24 00:41:19 +0000677 def Max(a, b):
678 if a is None:
679 return b
680 if b is None:
681 return a
682 return max(a, b)
Walter Dörwald919497e2003-01-19 16:23:59 +0000683 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000684 list(map(Max, Squares(3), Squares(2))),
685 [0, 1]
Walter Dörwald919497e2003-01-19 16:23:59 +0000686 )
687 self.assertRaises(TypeError, map)
688 self.assertRaises(TypeError, map, lambda x: x, 42)
Walter Dörwald919497e2003-01-19 16:23:59 +0000689 class BadSeq:
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000690 def __iter__(self):
Walter Dörwald919497e2003-01-19 16:23:59 +0000691 raise ValueError
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000692 yield None
693 self.assertRaises(ValueError, list, map(lambda x: x, BadSeq()))
Neal Norwitzfcf44352005-11-27 20:37:43 +0000694 def badfunc(x):
695 raise RuntimeError
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000696 self.assertRaises(RuntimeError, list, map(badfunc, range(5)))
Walter Dörwald919497e2003-01-19 16:23:59 +0000697
698 def test_max(self):
699 self.assertEqual(max('123123'), '3')
700 self.assertEqual(max(1, 2, 3), 3)
701 self.assertEqual(max((1, 2, 3, 1, 2, 3)), 3)
702 self.assertEqual(max([1, 2, 3, 1, 2, 3]), 3)
703
Guido van Rossume2a383d2007-01-15 16:59:06 +0000704 self.assertEqual(max(1, 2, 3.0), 3.0)
705 self.assertEqual(max(1, 2.0, 3), 3)
706 self.assertEqual(max(1.0, 2, 3), 3)
Walter Dörwald919497e2003-01-19 16:23:59 +0000707
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +0000708 for stmt in (
709 "max(key=int)", # no args
710 "max(1, key=int)", # single arg not iterable
711 "max(1, 2, keystone=int)", # wrong keyword
712 "max(1, 2, key=int, abc=int)", # two many keywords
713 "max(1, 2, key=1)", # keyfunc is not callable
714 ):
Tim Peters7f061872004-12-07 21:17:46 +0000715 try:
Georg Brandl7cae87c2006-09-06 06:51:57 +0000716 exec(stmt, globals())
Tim Peters7f061872004-12-07 21:17:46 +0000717 except TypeError:
718 pass
719 else:
720 self.fail(stmt)
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +0000721
722 self.assertEqual(max((1,), key=neg), 1) # one elem iterable
723 self.assertEqual(max((1,2), key=neg), 1) # two elem iterable
724 self.assertEqual(max(1, 2, key=neg), 1) # two elems
725
726 data = [random.randrange(200) for i in range(100)]
727 keys = dict((elem, random.randrange(50)) for elem in data)
728 f = keys.__getitem__
729 self.assertEqual(max(data, key=f),
730 sorted(reversed(data), key=f)[-1])
731
Walter Dörwald919497e2003-01-19 16:23:59 +0000732 def test_min(self):
733 self.assertEqual(min('123123'), '1')
734 self.assertEqual(min(1, 2, 3), 1)
735 self.assertEqual(min((1, 2, 3, 1, 2, 3)), 1)
736 self.assertEqual(min([1, 2, 3, 1, 2, 3]), 1)
737
Guido van Rossume2a383d2007-01-15 16:59:06 +0000738 self.assertEqual(min(1, 2, 3.0), 1)
739 self.assertEqual(min(1, 2.0, 3), 1)
740 self.assertEqual(min(1.0, 2, 3), 1.0)
Walter Dörwald919497e2003-01-19 16:23:59 +0000741
742 self.assertRaises(TypeError, min)
743 self.assertRaises(TypeError, min, 42)
744 self.assertRaises(ValueError, min, ())
745 class BadSeq:
746 def __getitem__(self, index):
747 raise ValueError
748 self.assertRaises(ValueError, min, BadSeq())
Walter Dörwald919497e2003-01-19 16:23:59 +0000749
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +0000750 for stmt in (
751 "min(key=int)", # no args
752 "min(1, key=int)", # single arg not iterable
753 "min(1, 2, keystone=int)", # wrong keyword
754 "min(1, 2, key=int, abc=int)", # two many keywords
755 "min(1, 2, key=1)", # keyfunc is not callable
756 ):
Tim Peters7f061872004-12-07 21:17:46 +0000757 try:
Georg Brandl7cae87c2006-09-06 06:51:57 +0000758 exec(stmt, globals())
Tim Peters7f061872004-12-07 21:17:46 +0000759 except TypeError:
760 pass
761 else:
762 self.fail(stmt)
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +0000763
764 self.assertEqual(min((1,), key=neg), 1) # one elem iterable
765 self.assertEqual(min((1,2), key=neg), 2) # two elem iterable
766 self.assertEqual(min(1, 2, key=neg), 2) # two elems
767
768 data = [random.randrange(200) for i in range(100)]
769 keys = dict((elem, random.randrange(50)) for elem in data)
770 f = keys.__getitem__
771 self.assertEqual(min(data, key=f),
772 sorted(data, key=f)[0])
773
Georg Brandla18af4e2007-04-21 15:47:16 +0000774 def test_next(self):
775 it = iter(range(2))
776 self.assertEqual(next(it), 0)
777 self.assertEqual(next(it), 1)
778 self.assertRaises(StopIteration, next, it)
779 self.assertRaises(StopIteration, next, it)
Ezio Melottib3aedd42010-11-20 19:04:17 +0000780 self.assertEqual(next(it, 42), 42)
Georg Brandla18af4e2007-04-21 15:47:16 +0000781
782 class Iter(object):
783 def __iter__(self):
784 return self
785 def __next__(self):
786 raise StopIteration
787
788 it = iter(Iter())
Ezio Melottib3aedd42010-11-20 19:04:17 +0000789 self.assertEqual(next(it, 42), 42)
Georg Brandla18af4e2007-04-21 15:47:16 +0000790 self.assertRaises(StopIteration, next, it)
791
792 def gen():
793 yield 1
794 return
795
796 it = gen()
Ezio Melottib3aedd42010-11-20 19:04:17 +0000797 self.assertEqual(next(it), 1)
Georg Brandla18af4e2007-04-21 15:47:16 +0000798 self.assertRaises(StopIteration, next, it)
Ezio Melottib3aedd42010-11-20 19:04:17 +0000799 self.assertEqual(next(it, 42), 42)
Georg Brandla18af4e2007-04-21 15:47:16 +0000800
Walter Dörwald919497e2003-01-19 16:23:59 +0000801 def test_oct(self):
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000802 self.assertEqual(oct(100), '0o144')
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000803 self.assertEqual(oct(-100), '-0o144')
Walter Dörwald919497e2003-01-19 16:23:59 +0000804 self.assertRaises(TypeError, oct, ())
805
806 def write_testfile(self):
Guido van Rossuma88a0332007-02-26 16:59:55 +0000807 # NB the first 4 lines are also used to test input, below
Walter Dörwald919497e2003-01-19 16:23:59 +0000808 fp = open(TESTFN, 'w')
809 try:
810 fp.write('1+1\n')
Walter Dörwald919497e2003-01-19 16:23:59 +0000811 fp.write('The quick brown fox jumps over the lazy dog')
812 fp.write('.\n')
813 fp.write('Dear John\n')
814 fp.write('XXX'*100)
815 fp.write('YYY'*100)
816 finally:
817 fp.close()
818
819 def test_open(self):
820 self.write_testfile()
821 fp = open(TESTFN, 'r')
822 try:
823 self.assertEqual(fp.readline(4), '1+1\n')
Walter Dörwald919497e2003-01-19 16:23:59 +0000824 self.assertEqual(fp.readline(), 'The quick brown fox jumps over the lazy dog.\n')
825 self.assertEqual(fp.readline(4), 'Dear')
826 self.assertEqual(fp.readline(100), ' John\n')
827 self.assertEqual(fp.read(300), 'XXX'*100)
828 self.assertEqual(fp.read(1000), 'YYY'*100)
829 finally:
830 fp.close()
831 unlink(TESTFN)
832
833 def test_ord(self):
834 self.assertEqual(ord(' '), 32)
835 self.assertEqual(ord('A'), 65)
836 self.assertEqual(ord('a'), 97)
Guido van Rossumf9e91c92007-05-08 21:05:48 +0000837 self.assertEqual(ord('\x80'), 128)
838 self.assertEqual(ord('\xff'), 255)
839
840 self.assertEqual(ord(b' '), 32)
841 self.assertEqual(ord(b'A'), 65)
842 self.assertEqual(ord(b'a'), 97)
843 self.assertEqual(ord(b'\x80'), 128)
844 self.assertEqual(ord(b'\xff'), 255)
845
Walter Dörwald1f5947b2007-05-22 16:52:54 +0000846 self.assertEqual(ord(chr(sys.maxunicode)), sys.maxunicode)
Walter Dörwald919497e2003-01-19 16:23:59 +0000847 self.assertRaises(TypeError, ord, 42)
Walter Dörwald919497e2003-01-19 16:23:59 +0000848
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000849 self.assertEqual(ord(chr(0x10FFFF)), 0x10FFFF)
850 self.assertEqual(ord("\U0000FFFF"), 0x0000FFFF)
851 self.assertEqual(ord("\U00010000"), 0x00010000)
852 self.assertEqual(ord("\U00010001"), 0x00010001)
853 self.assertEqual(ord("\U000FFFFE"), 0x000FFFFE)
854 self.assertEqual(ord("\U000FFFFF"), 0x000FFFFF)
855 self.assertEqual(ord("\U00100000"), 0x00100000)
856 self.assertEqual(ord("\U00100001"), 0x00100001)
857 self.assertEqual(ord("\U0010FFFE"), 0x0010FFFE)
858 self.assertEqual(ord("\U0010FFFF"), 0x0010FFFF)
859
Walter Dörwald919497e2003-01-19 16:23:59 +0000860 def test_pow(self):
861 self.assertEqual(pow(0,0), 1)
862 self.assertEqual(pow(0,1), 0)
863 self.assertEqual(pow(1,0), 1)
864 self.assertEqual(pow(1,1), 1)
865
866 self.assertEqual(pow(2,0), 1)
867 self.assertEqual(pow(2,10), 1024)
868 self.assertEqual(pow(2,20), 1024*1024)
869 self.assertEqual(pow(2,30), 1024*1024*1024)
870
871 self.assertEqual(pow(-2,0), 1)
872 self.assertEqual(pow(-2,1), -2)
873 self.assertEqual(pow(-2,2), 4)
874 self.assertEqual(pow(-2,3), -8)
875
Walter Dörwald919497e2003-01-19 16:23:59 +0000876 self.assertAlmostEqual(pow(0.,0), 1.)
877 self.assertAlmostEqual(pow(0.,1), 0.)
878 self.assertAlmostEqual(pow(1.,0), 1.)
879 self.assertAlmostEqual(pow(1.,1), 1.)
880
881 self.assertAlmostEqual(pow(2.,0), 1.)
882 self.assertAlmostEqual(pow(2.,10), 1024.)
883 self.assertAlmostEqual(pow(2.,20), 1024.*1024.)
884 self.assertAlmostEqual(pow(2.,30), 1024.*1024.*1024.)
885
886 self.assertAlmostEqual(pow(-2.,0), 1.)
887 self.assertAlmostEqual(pow(-2.,1), -2.)
888 self.assertAlmostEqual(pow(-2.,2), 4.)
889 self.assertAlmostEqual(pow(-2.,3), -8.)
890
Mark Dickinson5c2db372009-12-05 20:28:34 +0000891 for x in 2, 2.0:
892 for y in 10, 10.0:
893 for z in 1000, 1000.0:
Walter Dörwald919497e2003-01-19 16:23:59 +0000894 if isinstance(x, float) or \
895 isinstance(y, float) or \
896 isinstance(z, float):
897 self.assertRaises(TypeError, pow, x, y, z)
898 else:
899 self.assertAlmostEqual(pow(x, y, z), 24.0)
900
Jeffrey Yasskin3404b3c2007-09-07 15:15:49 +0000901 self.assertAlmostEqual(pow(-1, 0.5), 1j)
902 self.assertAlmostEqual(pow(-1, 1/3), 0.5 + 0.8660254037844386j)
903
Walter Dörwald919497e2003-01-19 16:23:59 +0000904 self.assertRaises(TypeError, pow, -1, -2, 3)
905 self.assertRaises(ValueError, pow, 1, 2, 0)
Walter Dörwald919497e2003-01-19 16:23:59 +0000906
907 self.assertRaises(TypeError, pow)
908
909 def test_range(self):
Guido van Rossum805365e2007-05-07 22:24:25 +0000910 self.assertEqual(list(range(3)), [0, 1, 2])
911 self.assertEqual(list(range(1, 5)), [1, 2, 3, 4])
912 self.assertEqual(list(range(0)), [])
913 self.assertEqual(list(range(-3)), [])
914 self.assertEqual(list(range(1, 10, 3)), [1, 4, 7])
Benjamin Peterson94ab7a02010-11-20 22:50:04 +0000915 self.assertEqual(list(range(5, -5, -3)), [5, 2, -1, -4])
Walter Dörwald919497e2003-01-19 16:23:59 +0000916
Mark Dickinsoneb36d312009-06-24 18:36:46 +0000917 #issue 6334: the internal stored range length was being
918 #computed incorrectly in some cases involving large arguments.
919 x = range(10**20, 10**20+10, 3)
920 self.assertEqual(len(x), 4)
921 self.assertEqual(len(list(x)), 4)
922
923 x = range(10**20+10, 10**20, 3)
924 self.assertEqual(len(x), 0)
925 self.assertEqual(len(list(x)), 0)
926
927 x = range(10**20, 10**20+10, -3)
928 self.assertEqual(len(x), 0)
929 self.assertEqual(len(list(x)), 0)
930
931 x = range(10**20+10, 10**20, -3)
932 self.assertEqual(len(x), 4)
933 self.assertEqual(len(list(x)), 4)
934
Guido van Rossumefbbb1c2003-04-11 18:43:06 +0000935 # Now test range() with longs
Guido van Rossum805365e2007-05-07 22:24:25 +0000936 self.assertEqual(list(range(-2**100)), [])
937 self.assertEqual(list(range(0, -2**100)), [])
938 self.assertEqual(list(range(0, 2**100, -1)), [])
939 self.assertEqual(list(range(0, 2**100, -1)), [])
Guido van Rossumefbbb1c2003-04-11 18:43:06 +0000940
Christian Heimesa37d4c62007-12-04 23:02:19 +0000941 a = int(10 * sys.maxsize)
942 b = int(100 * sys.maxsize)
943 c = int(50 * sys.maxsize)
Guido van Rossumefbbb1c2003-04-11 18:43:06 +0000944
Guido van Rossum805365e2007-05-07 22:24:25 +0000945 self.assertEqual(list(range(a, a+2)), [a, a+1])
946 self.assertEqual(list(range(a+2, a, -1)), [a+2, a+1])
947 self.assertEqual(list(range(a+4, a, -2)), [a+4, a+2])
Guido van Rossumefbbb1c2003-04-11 18:43:06 +0000948
Guido van Rossum805365e2007-05-07 22:24:25 +0000949 seq = list(range(a, b, c))
Benjamin Peterson577473f2010-01-19 00:09:57 +0000950 self.assertIn(a, seq)
951 self.assertNotIn(b, seq)
Guido van Rossumefbbb1c2003-04-11 18:43:06 +0000952 self.assertEqual(len(seq), 2)
953
Guido van Rossum805365e2007-05-07 22:24:25 +0000954 seq = list(range(b, a, -c))
Benjamin Peterson577473f2010-01-19 00:09:57 +0000955 self.assertIn(b, seq)
956 self.assertNotIn(a, seq)
Guido van Rossumefbbb1c2003-04-11 18:43:06 +0000957 self.assertEqual(len(seq), 2)
958
Guido van Rossum805365e2007-05-07 22:24:25 +0000959 seq = list(range(-a, -b, -c))
Benjamin Peterson577473f2010-01-19 00:09:57 +0000960 self.assertIn(-a, seq)
961 self.assertNotIn(-b, seq)
Guido van Rossumefbbb1c2003-04-11 18:43:06 +0000962 self.assertEqual(len(seq), 2)
963
Walter Dörwald919497e2003-01-19 16:23:59 +0000964 self.assertRaises(TypeError, range)
965 self.assertRaises(TypeError, range, 1, 2, 3, 4)
966 self.assertRaises(ValueError, range, 1, 2, 0)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000967 self.assertRaises(ValueError, range, a, a + 1, int(0))
Neal Norwitzfcf44352005-11-27 20:37:43 +0000968
Mark Dickinson5c2db372009-12-05 20:28:34 +0000969 """ XXX(nnorwitz):
Neal Norwitzfcf44352005-11-27 20:37:43 +0000970 class badzero(int):
Guido van Rossum47b9ff62006-08-24 00:41:19 +0000971 def __eq__(self, other):
Neal Norwitzfcf44352005-11-27 20:37:43 +0000972 raise RuntimeError
Guido van Rossum47b9ff62006-08-24 00:41:19 +0000973 __ne__ = __lt__ = __gt__ = __le__ = __ge__ = __eq__
974
975 # XXX This won't (but should!) raise RuntimeError if a is an int...
Neal Norwitzfcf44352005-11-27 20:37:43 +0000976 self.assertRaises(RuntimeError, range, a, a + 1, badzero(1))
Guido van Rossum805365e2007-05-07 22:24:25 +0000977 """
Walter Dörwald919497e2003-01-19 16:23:59 +0000978
Mark Dickinson85b53532010-05-05 22:39:58 +0000979 # Reject floats.
980 self.assertRaises(TypeError, range, 1., 1., 1.)
Tim Peters299b3df2003-04-15 14:40:03 +0000981 self.assertRaises(TypeError, range, 1e100, 1e101, 1e101)
Guido van Rossumefbbb1c2003-04-11 18:43:06 +0000982
Walter Dörwald357981e2003-04-15 18:59:28 +0000983 self.assertRaises(TypeError, range, 0, "spam")
984 self.assertRaises(TypeError, range, 0, 42, "spam")
985
Christian Heimesa37d4c62007-12-04 23:02:19 +0000986 #NEAL self.assertRaises(OverflowError, range, -sys.maxsize, sys.maxsize)
987 #NEAL self.assertRaises(OverflowError, range, 0, 2*sys.maxsize)
Guido van Rossum805365e2007-05-07 22:24:25 +0000988
Christian Heimesa37d4c62007-12-04 23:02:19 +0000989 self.assertRaises(OverflowError, len, range(0, sys.maxsize**10))
Walter Dörwald357981e2003-04-15 18:59:28 +0000990
Mark Dickinson85b53532010-05-05 22:39:58 +0000991 bignum = 2*sys.maxsize
992 smallnum = 42
993
994 # User-defined class with an __index__ method
995 class I:
996 def __init__(self, n):
997 self.n = int(n)
998 def __index__(self):
999 return self.n
1000 self.assertEqual(list(range(I(bignum), I(bignum + 1))), [bignum])
1001 self.assertEqual(list(range(I(smallnum), I(smallnum + 1))), [smallnum])
1002
1003 # User-defined class with a failing __index__ method
1004 class IX:
1005 def __index__(self):
1006 raise RuntimeError
1007 self.assertRaises(RuntimeError, range, IX())
1008
1009 # User-defined class with an invalid __index__ method
1010 class IN:
1011 def __index__(self):
1012 return "not a number"
1013
1014 self.assertRaises(TypeError, range, IN())
1015 # Exercise various combinations of bad arguments, to check
1016 # refcounting logic
1017 self.assertRaises(TypeError, range, 0.0)
1018
1019 self.assertRaises(TypeError, range, 0, 0.0)
1020 self.assertRaises(TypeError, range, 0.0, 0)
1021 self.assertRaises(TypeError, range, 0.0, 0.0)
1022
1023 self.assertRaises(TypeError, range, 0, 0, 1.0)
1024 self.assertRaises(TypeError, range, 0, 0.0, 1)
1025 self.assertRaises(TypeError, range, 0, 0.0, 1.0)
1026 self.assertRaises(TypeError, range, 0.0, 0, 1)
1027 self.assertRaises(TypeError, range, 0.0, 0, 1.0)
1028 self.assertRaises(TypeError, range, 0.0, 0.0, 1)
1029 self.assertRaises(TypeError, range, 0.0, 0.0, 1.0)
1030
Daniel Stutzbach9f0cbf12010-09-13 21:16:29 +00001031 self.assertEqual(range(3).count(-1), 0)
1032 self.assertEqual(range(3).count(0), 1)
1033 self.assertEqual(range(3).count(1), 1)
1034 self.assertEqual(range(3).count(2), 1)
1035 self.assertEqual(range(3).count(3), 0)
Benjamin Peterson0b458d52010-11-20 22:35:41 +00001036 self.assertIs(type(range(3).count(-1)), int)
1037 self.assertIs(type(range(3).count(1)), int)
Daniel Stutzbach9f0cbf12010-09-13 21:16:29 +00001038
1039 self.assertEqual(range(10**20).count(1), 1)
1040 self.assertEqual(range(10**20).count(10**20), 0)
1041 self.assertEqual(range(3).index(1), 1)
1042 self.assertEqual(range(1, 2**100, 2).count(2**87), 0)
1043 self.assertEqual(range(1, 2**100, 2).count(2**87+1), 1)
1044
1045 self.assertEqual(range(1, 10, 3).index(4), 1)
1046 self.assertEqual(range(1, -10, -3).index(-5), 2)
1047
1048 self.assertEqual(range(10**20).index(1), 1)
1049 self.assertEqual(range(10**20).index(10**20 - 1), 10**20 - 1)
1050
1051 self.assertRaises(ValueError, range(1, 2**100, 2).index, 2**87)
1052 self.assertEqual(range(1, 2**100, 2).index(2**87+1), 2**86)
1053
1054 class AlwaysEqual(object):
1055 def __eq__(self, other):
1056 return True
1057 always_equal = AlwaysEqual()
1058 self.assertEqual(range(10).count(always_equal), 10)
1059 self.assertEqual(range(10).index(always_equal), 0)
1060
1061 def test_range_index(self):
1062 u = range(2)
1063 self.assertEqual(u.index(0), 0)
1064 self.assertEqual(u.index(1), 1)
1065 self.assertRaises(ValueError, u.index, 2)
1066
1067 u = range(-2, 3)
1068 self.assertEqual(u.count(0), 1)
1069 self.assertEqual(u.index(0), 2)
1070 self.assertRaises(TypeError, u.index)
1071
1072 class BadExc(Exception):
1073 pass
1074
1075 class BadCmp:
1076 def __eq__(self, other):
1077 if other == 2:
1078 raise BadExc()
1079 return False
1080
1081 a = range(4)
1082 self.assertRaises(BadExc, a.index, BadCmp())
1083
1084 a = range(-2, 3)
1085 self.assertEqual(a.index(0), 2)
1086
Guido van Rossuma88a0332007-02-26 16:59:55 +00001087 def test_input(self):
1088 self.write_testfile()
1089 fp = open(TESTFN, 'r')
1090 savestdin = sys.stdin
1091 savestdout = sys.stdout # Eats the echo
1092 try:
1093 sys.stdin = fp
1094 sys.stdout = BitBucket()
1095 self.assertEqual(input(), "1+1")
Guido van Rossuma88a0332007-02-26 16:59:55 +00001096 self.assertEqual(input(), 'The quick brown fox jumps over the lazy dog.')
1097 self.assertEqual(input('testing\n'), 'Dear John')
1098
1099 # SF 1535165: don't segfault on closed stdin
1100 # sys.stdout must be a regular file for triggering
1101 sys.stdout = savestdout
1102 sys.stdin.close()
1103 self.assertRaises(ValueError, input)
1104
1105 sys.stdout = BitBucket()
Guido van Rossum34d19282007-08-09 01:03:29 +00001106 sys.stdin = io.StringIO("NULL\0")
Guido van Rossuma88a0332007-02-26 16:59:55 +00001107 self.assertRaises(TypeError, input, 42, 42)
Guido van Rossum34d19282007-08-09 01:03:29 +00001108 sys.stdin = io.StringIO(" 'whitespace'")
Guido van Rossuma88a0332007-02-26 16:59:55 +00001109 self.assertEqual(input(), " 'whitespace'")
Guido van Rossum34d19282007-08-09 01:03:29 +00001110 sys.stdin = io.StringIO()
Guido van Rossuma88a0332007-02-26 16:59:55 +00001111 self.assertRaises(EOFError, input)
1112
1113 del sys.stdout
1114 self.assertRaises(RuntimeError, input, 'prompt')
1115 del sys.stdin
1116 self.assertRaises(RuntimeError, input, 'prompt')
1117 finally:
1118 sys.stdin = savestdin
1119 sys.stdout = savestdout
1120 fp.close()
1121 unlink(TESTFN)
1122
Walter Dörwald919497e2003-01-19 16:23:59 +00001123 def test_repr(self):
1124 self.assertEqual(repr(''), '\'\'')
1125 self.assertEqual(repr(0), '0')
Walter Dörwald919497e2003-01-19 16:23:59 +00001126 self.assertEqual(repr(()), '()')
1127 self.assertEqual(repr([]), '[]')
1128 self.assertEqual(repr({}), '{}')
1129 a = []
1130 a.append(a)
1131 self.assertEqual(repr(a), '[[...]]')
1132 a = {}
1133 a[0] = a
1134 self.assertEqual(repr(a), '{0: {...}}')
1135
1136 def test_round(self):
1137 self.assertEqual(round(0.0), 0.0)
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001138 self.assertEqual(type(round(0.0)), int)
Walter Dörwald919497e2003-01-19 16:23:59 +00001139 self.assertEqual(round(1.0), 1.0)
1140 self.assertEqual(round(10.0), 10.0)
1141 self.assertEqual(round(1000000000.0), 1000000000.0)
1142 self.assertEqual(round(1e20), 1e20)
1143
1144 self.assertEqual(round(-1.0), -1.0)
1145 self.assertEqual(round(-10.0), -10.0)
1146 self.assertEqual(round(-1000000000.0), -1000000000.0)
1147 self.assertEqual(round(-1e20), -1e20)
1148
1149 self.assertEqual(round(0.1), 0.0)
1150 self.assertEqual(round(1.1), 1.0)
1151 self.assertEqual(round(10.1), 10.0)
1152 self.assertEqual(round(1000000000.1), 1000000000.0)
1153
1154 self.assertEqual(round(-1.1), -1.0)
1155 self.assertEqual(round(-10.1), -10.0)
1156 self.assertEqual(round(-1000000000.1), -1000000000.0)
1157
1158 self.assertEqual(round(0.9), 1.0)
1159 self.assertEqual(round(9.9), 10.0)
1160 self.assertEqual(round(999999999.9), 1000000000.0)
1161
1162 self.assertEqual(round(-0.9), -1.0)
1163 self.assertEqual(round(-9.9), -10.0)
1164 self.assertEqual(round(-999999999.9), -1000000000.0)
1165
1166 self.assertEqual(round(-8.0, -1), -10.0)
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001167 self.assertEqual(type(round(-8.0, -1)), float)
1168
1169 self.assertEqual(type(round(-8.0, 0)), float)
1170 self.assertEqual(type(round(-8.0, 1)), float)
1171
1172 # Check even / odd rounding behaviour
1173 self.assertEqual(round(5.5), 6)
1174 self.assertEqual(round(6.5), 6)
1175 self.assertEqual(round(-5.5), -6)
1176 self.assertEqual(round(-6.5), -6)
1177
1178 # Check behavior on ints
1179 self.assertEqual(round(0), 0)
1180 self.assertEqual(round(8), 8)
1181 self.assertEqual(round(-8), -8)
1182 self.assertEqual(type(round(0)), int)
Mark Dickinson1124e712009-01-28 21:25:58 +00001183 self.assertEqual(type(round(-8, -1)), int)
1184 self.assertEqual(type(round(-8, 0)), int)
1185 self.assertEqual(type(round(-8, 1)), int)
Walter Dörwald919497e2003-01-19 16:23:59 +00001186
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001187 # test new kwargs
1188 self.assertEqual(round(number=-8.0, ndigits=-1), -10.0)
1189
Walter Dörwald919497e2003-01-19 16:23:59 +00001190 self.assertRaises(TypeError, round)
1191
Alex Martelliae211f92007-08-22 23:21:33 +00001192 # test generic rounding delegation for reals
1193 class TestRound:
1194 def __round__(self):
1195 return 23
1196
1197 class TestNoRound:
1198 pass
1199
1200 self.assertEqual(round(TestRound()), 23)
1201
1202 self.assertRaises(TypeError, round, 1, 2, 3)
1203 self.assertRaises(TypeError, round, TestNoRound())
1204
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001205 t = TestNoRound()
1206 t.__round__ = lambda *args: args
1207 self.assertRaises(TypeError, round, t)
1208 self.assertRaises(TypeError, round, t, 0)
1209
Mark Dickinsonad731b92009-11-09 17:12:30 +00001210 # Some versions of glibc for alpha have a bug that affects
1211 # float -> integer rounding (floor, ceil, rint, round) for
1212 # values in the range [2**52, 2**53). See:
1213 #
1214 # http://sources.redhat.com/bugzilla/show_bug.cgi?id=5350
1215 #
1216 # We skip this test on Linux/alpha if it would fail.
1217 linux_alpha = (platform.system().startswith('Linux') and
1218 platform.machine().startswith('alpha'))
1219 system_round_bug = round(5e15+1) != 5e15+1
1220 @unittest.skipIf(linux_alpha and system_round_bug,
1221 "test will fail; failure is probably due to a "
1222 "buggy system round function")
1223 def test_round_large(self):
1224 # Issue #1869: integral floats should remain unchanged
1225 self.assertEqual(round(5e15-1), 5e15-1)
1226 self.assertEqual(round(5e15), 5e15)
1227 self.assertEqual(round(5e15+1), 5e15+1)
1228 self.assertEqual(round(5e15+2), 5e15+2)
1229 self.assertEqual(round(5e15+3), 5e15+3)
1230
Walter Dörwald919497e2003-01-19 16:23:59 +00001231 def test_setattr(self):
Tim Petersf2715e02003-02-19 02:35:07 +00001232 setattr(sys, 'spam', 1)
1233 self.assertEqual(sys.spam, 1)
1234 self.assertRaises(TypeError, setattr, sys, 1, 'spam')
1235 self.assertRaises(TypeError, setattr)
Walter Dörwald919497e2003-01-19 16:23:59 +00001236
Walter Dörwald919497e2003-01-19 16:23:59 +00001237
Alex Martellia70b1912003-04-22 08:12:33 +00001238 def test_sum(self):
1239 self.assertEqual(sum([]), 0)
Guido van Rossum805365e2007-05-07 22:24:25 +00001240 self.assertEqual(sum(list(range(2,8))), 27)
1241 self.assertEqual(sum(iter(list(range(2,8)))), 27)
Alex Martellia70b1912003-04-22 08:12:33 +00001242 self.assertEqual(sum(Squares(10)), 285)
1243 self.assertEqual(sum(iter(Squares(10))), 285)
1244 self.assertEqual(sum([[1], [2], [3]], []), [1, 2, 3])
1245
1246 self.assertRaises(TypeError, sum)
1247 self.assertRaises(TypeError, sum, 42)
1248 self.assertRaises(TypeError, sum, ['a', 'b', 'c'])
1249 self.assertRaises(TypeError, sum, ['a', 'b', 'c'], '')
1250 self.assertRaises(TypeError, sum, [[1], [2], [3]])
1251 self.assertRaises(TypeError, sum, [{2:3}])
1252 self.assertRaises(TypeError, sum, [{2:3}]*2, {2:3})
1253
1254 class BadSeq:
1255 def __getitem__(self, index):
1256 raise ValueError
1257 self.assertRaises(ValueError, sum, BadSeq())
1258
Mark Dickinson3a22b472009-10-17 21:48:16 +00001259 empty = []
1260 sum(([x] for x in range(10)), empty)
1261 self.assertEqual(empty, [])
1262
Walter Dörwald919497e2003-01-19 16:23:59 +00001263 def test_type(self):
1264 self.assertEqual(type(''), type('123'))
1265 self.assertNotEqual(type(''), type(()))
1266
Guido van Rossumfee7b932005-01-16 00:21:28 +00001267 # We don't want self in vars(), so these are static methods
1268
1269 @staticmethod
Walter Dörwald919497e2003-01-19 16:23:59 +00001270 def get_vars_f0():
1271 return vars()
Walter Dörwald919497e2003-01-19 16:23:59 +00001272
Guido van Rossumfee7b932005-01-16 00:21:28 +00001273 @staticmethod
Walter Dörwald919497e2003-01-19 16:23:59 +00001274 def get_vars_f2():
1275 BuiltinTest.get_vars_f0()
1276 a = 1
1277 b = 2
1278 return vars()
Walter Dörwald919497e2003-01-19 16:23:59 +00001279
Mark Dickinsonfb3dc942010-05-25 19:06:24 +00001280 class C_get_vars(object):
1281 def getDict(self):
1282 return {'a':2}
1283 __dict__ = property(fget=getDict)
1284
Walter Dörwald919497e2003-01-19 16:23:59 +00001285 def test_vars(self):
Raymond Hettingera690a992003-11-16 16:17:49 +00001286 self.assertEqual(set(vars()), set(dir()))
Raymond Hettingera690a992003-11-16 16:17:49 +00001287 self.assertEqual(set(vars(sys)), set(dir(sys)))
Walter Dörwald919497e2003-01-19 16:23:59 +00001288 self.assertEqual(self.get_vars_f0(), {})
1289 self.assertEqual(self.get_vars_f2(), {'a': 1, 'b': 2})
1290 self.assertRaises(TypeError, vars, 42, 42)
1291 self.assertRaises(TypeError, vars, 42)
Mark Dickinsonfb3dc942010-05-25 19:06:24 +00001292 self.assertEqual(vars(self.C_get_vars()), {'a':2})
Walter Dörwald919497e2003-01-19 16:23:59 +00001293
1294 def test_zip(self):
1295 a = (1, 2, 3)
1296 b = (4, 5, 6)
1297 t = [(1, 4), (2, 5), (3, 6)]
Guido van Rossum801f0d72006-08-24 19:48:10 +00001298 self.assertEqual(list(zip(a, b)), t)
Walter Dörwald919497e2003-01-19 16:23:59 +00001299 b = [4, 5, 6]
Guido van Rossum801f0d72006-08-24 19:48:10 +00001300 self.assertEqual(list(zip(a, b)), t)
Walter Dörwald919497e2003-01-19 16:23:59 +00001301 b = (4, 5, 6, 7)
Guido van Rossum801f0d72006-08-24 19:48:10 +00001302 self.assertEqual(list(zip(a, b)), t)
Walter Dörwald919497e2003-01-19 16:23:59 +00001303 class I:
1304 def __getitem__(self, i):
1305 if i < 0 or i > 2: raise IndexError
1306 return i + 4
Guido van Rossum801f0d72006-08-24 19:48:10 +00001307 self.assertEqual(list(zip(a, I())), t)
1308 self.assertEqual(list(zip()), [])
1309 self.assertEqual(list(zip(*[])), [])
Walter Dörwald919497e2003-01-19 16:23:59 +00001310 self.assertRaises(TypeError, zip, None)
1311 class G:
1312 pass
1313 self.assertRaises(TypeError, zip, a, G())
Alexander Belopolskye29e6bf2010-08-16 18:55:46 +00001314 self.assertRaises(RuntimeError, zip, a, TestFailingIter())
Walter Dörwald919497e2003-01-19 16:23:59 +00001315
1316 # Make sure zip doesn't try to allocate a billion elements for the
1317 # result list when one of its arguments doesn't say how long it is.
1318 # A MemoryError is the most likely failure mode.
1319 class SequenceWithoutALength:
1320 def __getitem__(self, i):
1321 if i == 5:
1322 raise IndexError
1323 else:
1324 return i
1325 self.assertEqual(
Guido van Rossum805365e2007-05-07 22:24:25 +00001326 list(zip(SequenceWithoutALength(), range(2**30))),
Walter Dörwald919497e2003-01-19 16:23:59 +00001327 list(enumerate(range(5)))
1328 )
1329
1330 class BadSeq:
1331 def __getitem__(self, i):
1332 if i == 5:
1333 raise ValueError
1334 else:
1335 return i
Guido van Rossum801f0d72006-08-24 19:48:10 +00001336 self.assertRaises(ValueError, list, zip(BadSeq(), BadSeq()))
Walter Dörwald919497e2003-01-19 16:23:59 +00001337
Eric Smithe4d63172010-09-13 20:48:43 +00001338 def test_format(self):
1339 # Test the basic machinery of the format() builtin. Don't test
1340 # the specifics of the various formatters
1341 self.assertEqual(format(3, ''), '3')
1342
1343 # Returns some classes to use for various tests. There's
1344 # an old-style version, and a new-style version
1345 def classes_new():
1346 class A(object):
1347 def __init__(self, x):
1348 self.x = x
1349 def __format__(self, format_spec):
1350 return str(self.x) + format_spec
1351 class DerivedFromA(A):
1352 pass
1353
1354 class Simple(object): pass
1355 class DerivedFromSimple(Simple):
1356 def __init__(self, x):
1357 self.x = x
1358 def __format__(self, format_spec):
1359 return str(self.x) + format_spec
1360 class DerivedFromSimple2(DerivedFromSimple): pass
1361 return A, DerivedFromA, DerivedFromSimple, DerivedFromSimple2
1362
1363 def class_test(A, DerivedFromA, DerivedFromSimple, DerivedFromSimple2):
1364 self.assertEqual(format(A(3), 'spec'), '3spec')
1365 self.assertEqual(format(DerivedFromA(4), 'spec'), '4spec')
1366 self.assertEqual(format(DerivedFromSimple(5), 'abc'), '5abc')
1367 self.assertEqual(format(DerivedFromSimple2(10), 'abcdef'),
1368 '10abcdef')
1369
1370 class_test(*classes_new())
1371
1372 def empty_format_spec(value):
1373 # test that:
1374 # format(x, '') == str(x)
1375 # format(x) == str(x)
1376 self.assertEqual(format(value, ""), str(value))
1377 self.assertEqual(format(value), str(value))
1378
1379 # for builtin types, format(x, "") == str(x)
1380 empty_format_spec(17**13)
1381 empty_format_spec(1.0)
1382 empty_format_spec(3.1415e104)
1383 empty_format_spec(-3.1415e104)
1384 empty_format_spec(3.1415e-104)
1385 empty_format_spec(-3.1415e-104)
1386 empty_format_spec(object)
1387 empty_format_spec(None)
1388
1389 # TypeError because self.__format__ returns the wrong type
1390 class BadFormatResult:
1391 def __format__(self, format_spec):
1392 return 1.0
1393 self.assertRaises(TypeError, format, BadFormatResult(), "")
1394
1395 # TypeError because format_spec is not unicode or str
1396 self.assertRaises(TypeError, format, object(), 4)
1397 self.assertRaises(TypeError, format, object(), object())
1398
1399 # tests for object.__format__ really belong elsewhere, but
1400 # there's no good place to put them
1401 x = object().__format__('')
1402 self.assertTrue(x.startswith('<object object at'))
1403
1404 # first argument to object.__format__ must be string
1405 self.assertRaises(TypeError, object().__format__, 3)
1406 self.assertRaises(TypeError, object().__format__, object())
1407 self.assertRaises(TypeError, object().__format__, None)
1408
1409 # --------------------------------------------------------------------
1410 # Issue #7994: object.__format__ with a non-empty format string is
1411 # pending deprecated
1412 def test_deprecated_format_string(obj, fmt_str, should_raise_warning):
1413 with warnings.catch_warnings(record=True) as w:
1414 warnings.simplefilter("always", PendingDeprecationWarning)
1415 format(obj, fmt_str)
1416 if should_raise_warning:
1417 self.assertEqual(len(w), 1)
1418 self.assertIsInstance(w[0].message, PendingDeprecationWarning)
1419 self.assertIn('object.__format__ with a non-empty format '
1420 'string', str(w[0].message))
1421 else:
1422 self.assertEqual(len(w), 0)
1423
1424 fmt_strs = ['', 's']
1425
1426 class A:
1427 def __format__(self, fmt_str):
1428 return format('', fmt_str)
1429
1430 for fmt_str in fmt_strs:
1431 test_deprecated_format_string(A(), fmt_str, False)
1432
1433 class B:
1434 pass
1435
1436 class C(object):
1437 pass
1438
1439 for cls in [object, B, C]:
1440 for fmt_str in fmt_strs:
1441 test_deprecated_format_string(cls(), fmt_str, len(fmt_str) != 0)
1442 # --------------------------------------------------------------------
1443
1444 # make sure we can take a subclass of str as a format spec
1445 class DerivedFromStr(str): pass
1446 self.assertEqual(format(0, DerivedFromStr('10')), ' 0')
1447
Christian Heimes90c3d9b2008-02-23 13:18:03 +00001448 def test_bin(self):
1449 self.assertEqual(bin(0), '0b0')
1450 self.assertEqual(bin(1), '0b1')
1451 self.assertEqual(bin(-1), '-0b1')
1452 self.assertEqual(bin(2**65), '0b1' + '0' * 65)
1453 self.assertEqual(bin(2**65-1), '0b' + '1' * 65)
1454 self.assertEqual(bin(-(2**65)), '-0b1' + '0' * 65)
1455 self.assertEqual(bin(-(2**65-1)), '-0b' + '1' * 65)
1456
Georg Brandl953152f2009-07-22 12:03:59 +00001457 def test_bytearray_translate(self):
1458 x = bytearray(b"abc")
1459 self.assertRaises(ValueError, x.translate, b"1", 1)
1460 self.assertRaises(TypeError, x.translate, b"1"*256, 1)
1461
Raymond Hettinger64958a12003-12-17 20:43:33 +00001462class TestSorted(unittest.TestCase):
1463
1464 def test_basic(self):
Guido van Rossum805365e2007-05-07 22:24:25 +00001465 data = list(range(100))
Raymond Hettinger64958a12003-12-17 20:43:33 +00001466 copy = data[:]
1467 random.shuffle(copy)
1468 self.assertEqual(data, sorted(copy))
1469 self.assertNotEqual(data, copy)
1470
1471 data.reverse()
1472 random.shuffle(copy)
Raymond Hettinger64958a12003-12-17 20:43:33 +00001473 self.assertEqual(data, sorted(copy, key=lambda x: -x))
1474 self.assertNotEqual(data, copy)
1475 random.shuffle(copy)
1476 self.assertEqual(data, sorted(copy, reverse=1))
1477 self.assertNotEqual(data, copy)
1478
1479 def test_inputtypes(self):
1480 s = 'abracadabra'
Walter Dörwald1f5947b2007-05-22 16:52:54 +00001481 types = [list, tuple, str]
Walter Dörwald4e41a4b2005-08-03 17:09:04 +00001482 for T in types:
Raymond Hettinger64958a12003-12-17 20:43:33 +00001483 self.assertEqual(sorted(s), sorted(T(s)))
1484
Walter Dörwald1f5947b2007-05-22 16:52:54 +00001485 s = ''.join(set(s)) # unique letters only
1486 types = [str, set, frozenset, list, tuple, dict.fromkeys]
Walter Dörwald4e41a4b2005-08-03 17:09:04 +00001487 for T in types:
Raymond Hettinger64958a12003-12-17 20:43:33 +00001488 self.assertEqual(sorted(s), sorted(T(s)))
1489
1490 def test_baddecorator(self):
1491 data = 'The quick Brown fox Jumped over The lazy Dog'.split()
1492 self.assertRaises(TypeError, sorted, data, None, lambda x,y: 0)
1493
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001494def test_main(verbose=None):
1495 test_classes = (BuiltinTest, TestSorted)
1496
1497 run_unittest(*test_classes)
1498
1499 # verify reference counting
1500 if verbose and hasattr(sys, "gettotalrefcount"):
1501 import gc
1502 counts = [None] * 5
Guido van Rossum805365e2007-05-07 22:24:25 +00001503 for i in range(len(counts)):
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001504 run_unittest(*test_classes)
1505 gc.collect()
1506 counts[i] = sys.gettotalrefcount()
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001507 print(counts)
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001508
Walter Dörwald919497e2003-01-19 16:23:59 +00001509
1510if __name__ == "__main__":
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001511 test_main(verbose=True)