blob: 5a3c35a3bf862b81f5886183c59c9047c49dcbd4 [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
545 self.assertEquals(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
Guido van Rossume2a383d2007-01-15 16:59:06 +0000549 self.assertEquals(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)
780 self.assertEquals(next(it, 42), 42)
781
782 class Iter(object):
783 def __iter__(self):
784 return self
785 def __next__(self):
786 raise StopIteration
787
788 it = iter(Iter())
789 self.assertEquals(next(it, 42), 42)
790 self.assertRaises(StopIteration, next, it)
791
792 def gen():
793 yield 1
794 return
795
796 it = gen()
797 self.assertEquals(next(it), 1)
798 self.assertRaises(StopIteration, next, it)
799 self.assertEquals(next(it, 42), 42)
800
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])
915 #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)
1036
1037 self.assertEqual(range(10**20).count(1), 1)
1038 self.assertEqual(range(10**20).count(10**20), 0)
1039 self.assertEqual(range(3).index(1), 1)
1040 self.assertEqual(range(1, 2**100, 2).count(2**87), 0)
1041 self.assertEqual(range(1, 2**100, 2).count(2**87+1), 1)
1042
1043 self.assertEqual(range(1, 10, 3).index(4), 1)
1044 self.assertEqual(range(1, -10, -3).index(-5), 2)
1045
1046 self.assertEqual(range(10**20).index(1), 1)
1047 self.assertEqual(range(10**20).index(10**20 - 1), 10**20 - 1)
1048
1049 self.assertRaises(ValueError, range(1, 2**100, 2).index, 2**87)
1050 self.assertEqual(range(1, 2**100, 2).index(2**87+1), 2**86)
1051
1052 class AlwaysEqual(object):
1053 def __eq__(self, other):
1054 return True
1055 always_equal = AlwaysEqual()
1056 self.assertEqual(range(10).count(always_equal), 10)
1057 self.assertEqual(range(10).index(always_equal), 0)
1058
1059 def test_range_index(self):
1060 u = range(2)
1061 self.assertEqual(u.index(0), 0)
1062 self.assertEqual(u.index(1), 1)
1063 self.assertRaises(ValueError, u.index, 2)
1064
1065 u = range(-2, 3)
1066 self.assertEqual(u.count(0), 1)
1067 self.assertEqual(u.index(0), 2)
1068 self.assertRaises(TypeError, u.index)
1069
1070 class BadExc(Exception):
1071 pass
1072
1073 class BadCmp:
1074 def __eq__(self, other):
1075 if other == 2:
1076 raise BadExc()
1077 return False
1078
1079 a = range(4)
1080 self.assertRaises(BadExc, a.index, BadCmp())
1081
1082 a = range(-2, 3)
1083 self.assertEqual(a.index(0), 2)
1084
Guido van Rossuma88a0332007-02-26 16:59:55 +00001085 def test_input(self):
1086 self.write_testfile()
1087 fp = open(TESTFN, 'r')
1088 savestdin = sys.stdin
1089 savestdout = sys.stdout # Eats the echo
1090 try:
1091 sys.stdin = fp
1092 sys.stdout = BitBucket()
1093 self.assertEqual(input(), "1+1")
Guido van Rossuma88a0332007-02-26 16:59:55 +00001094 self.assertEqual(input(), 'The quick brown fox jumps over the lazy dog.')
1095 self.assertEqual(input('testing\n'), 'Dear John')
1096
1097 # SF 1535165: don't segfault on closed stdin
1098 # sys.stdout must be a regular file for triggering
1099 sys.stdout = savestdout
1100 sys.stdin.close()
1101 self.assertRaises(ValueError, input)
1102
1103 sys.stdout = BitBucket()
Guido van Rossum34d19282007-08-09 01:03:29 +00001104 sys.stdin = io.StringIO("NULL\0")
Guido van Rossuma88a0332007-02-26 16:59:55 +00001105 self.assertRaises(TypeError, input, 42, 42)
Guido van Rossum34d19282007-08-09 01:03:29 +00001106 sys.stdin = io.StringIO(" 'whitespace'")
Guido van Rossuma88a0332007-02-26 16:59:55 +00001107 self.assertEqual(input(), " 'whitespace'")
Guido van Rossum34d19282007-08-09 01:03:29 +00001108 sys.stdin = io.StringIO()
Guido van Rossuma88a0332007-02-26 16:59:55 +00001109 self.assertRaises(EOFError, input)
1110
1111 del sys.stdout
1112 self.assertRaises(RuntimeError, input, 'prompt')
1113 del sys.stdin
1114 self.assertRaises(RuntimeError, input, 'prompt')
1115 finally:
1116 sys.stdin = savestdin
1117 sys.stdout = savestdout
1118 fp.close()
1119 unlink(TESTFN)
1120
Walter Dörwald919497e2003-01-19 16:23:59 +00001121 def test_repr(self):
1122 self.assertEqual(repr(''), '\'\'')
1123 self.assertEqual(repr(0), '0')
Walter Dörwald919497e2003-01-19 16:23:59 +00001124 self.assertEqual(repr(()), '()')
1125 self.assertEqual(repr([]), '[]')
1126 self.assertEqual(repr({}), '{}')
1127 a = []
1128 a.append(a)
1129 self.assertEqual(repr(a), '[[...]]')
1130 a = {}
1131 a[0] = a
1132 self.assertEqual(repr(a), '{0: {...}}')
1133
1134 def test_round(self):
1135 self.assertEqual(round(0.0), 0.0)
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001136 self.assertEqual(type(round(0.0)), int)
Walter Dörwald919497e2003-01-19 16:23:59 +00001137 self.assertEqual(round(1.0), 1.0)
1138 self.assertEqual(round(10.0), 10.0)
1139 self.assertEqual(round(1000000000.0), 1000000000.0)
1140 self.assertEqual(round(1e20), 1e20)
1141
1142 self.assertEqual(round(-1.0), -1.0)
1143 self.assertEqual(round(-10.0), -10.0)
1144 self.assertEqual(round(-1000000000.0), -1000000000.0)
1145 self.assertEqual(round(-1e20), -1e20)
1146
1147 self.assertEqual(round(0.1), 0.0)
1148 self.assertEqual(round(1.1), 1.0)
1149 self.assertEqual(round(10.1), 10.0)
1150 self.assertEqual(round(1000000000.1), 1000000000.0)
1151
1152 self.assertEqual(round(-1.1), -1.0)
1153 self.assertEqual(round(-10.1), -10.0)
1154 self.assertEqual(round(-1000000000.1), -1000000000.0)
1155
1156 self.assertEqual(round(0.9), 1.0)
1157 self.assertEqual(round(9.9), 10.0)
1158 self.assertEqual(round(999999999.9), 1000000000.0)
1159
1160 self.assertEqual(round(-0.9), -1.0)
1161 self.assertEqual(round(-9.9), -10.0)
1162 self.assertEqual(round(-999999999.9), -1000000000.0)
1163
1164 self.assertEqual(round(-8.0, -1), -10.0)
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001165 self.assertEqual(type(round(-8.0, -1)), float)
1166
1167 self.assertEqual(type(round(-8.0, 0)), float)
1168 self.assertEqual(type(round(-8.0, 1)), float)
1169
1170 # Check even / odd rounding behaviour
1171 self.assertEqual(round(5.5), 6)
1172 self.assertEqual(round(6.5), 6)
1173 self.assertEqual(round(-5.5), -6)
1174 self.assertEqual(round(-6.5), -6)
1175
1176 # Check behavior on ints
1177 self.assertEqual(round(0), 0)
1178 self.assertEqual(round(8), 8)
1179 self.assertEqual(round(-8), -8)
1180 self.assertEqual(type(round(0)), int)
Mark Dickinson1124e712009-01-28 21:25:58 +00001181 self.assertEqual(type(round(-8, -1)), int)
1182 self.assertEqual(type(round(-8, 0)), int)
1183 self.assertEqual(type(round(-8, 1)), int)
Walter Dörwald919497e2003-01-19 16:23:59 +00001184
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001185 # test new kwargs
1186 self.assertEqual(round(number=-8.0, ndigits=-1), -10.0)
1187
Walter Dörwald919497e2003-01-19 16:23:59 +00001188 self.assertRaises(TypeError, round)
1189
Alex Martelliae211f92007-08-22 23:21:33 +00001190 # test generic rounding delegation for reals
1191 class TestRound:
1192 def __round__(self):
1193 return 23
1194
1195 class TestNoRound:
1196 pass
1197
1198 self.assertEqual(round(TestRound()), 23)
1199
1200 self.assertRaises(TypeError, round, 1, 2, 3)
1201 self.assertRaises(TypeError, round, TestNoRound())
1202
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001203 t = TestNoRound()
1204 t.__round__ = lambda *args: args
1205 self.assertRaises(TypeError, round, t)
1206 self.assertRaises(TypeError, round, t, 0)
1207
Mark Dickinsonad731b92009-11-09 17:12:30 +00001208 # Some versions of glibc for alpha have a bug that affects
1209 # float -> integer rounding (floor, ceil, rint, round) for
1210 # values in the range [2**52, 2**53). See:
1211 #
1212 # http://sources.redhat.com/bugzilla/show_bug.cgi?id=5350
1213 #
1214 # We skip this test on Linux/alpha if it would fail.
1215 linux_alpha = (platform.system().startswith('Linux') and
1216 platform.machine().startswith('alpha'))
1217 system_round_bug = round(5e15+1) != 5e15+1
1218 @unittest.skipIf(linux_alpha and system_round_bug,
1219 "test will fail; failure is probably due to a "
1220 "buggy system round function")
1221 def test_round_large(self):
1222 # Issue #1869: integral floats should remain unchanged
1223 self.assertEqual(round(5e15-1), 5e15-1)
1224 self.assertEqual(round(5e15), 5e15)
1225 self.assertEqual(round(5e15+1), 5e15+1)
1226 self.assertEqual(round(5e15+2), 5e15+2)
1227 self.assertEqual(round(5e15+3), 5e15+3)
1228
Walter Dörwald919497e2003-01-19 16:23:59 +00001229 def test_setattr(self):
Tim Petersf2715e02003-02-19 02:35:07 +00001230 setattr(sys, 'spam', 1)
1231 self.assertEqual(sys.spam, 1)
1232 self.assertRaises(TypeError, setattr, sys, 1, 'spam')
1233 self.assertRaises(TypeError, setattr)
Walter Dörwald919497e2003-01-19 16:23:59 +00001234
Walter Dörwald919497e2003-01-19 16:23:59 +00001235
Alex Martellia70b1912003-04-22 08:12:33 +00001236 def test_sum(self):
1237 self.assertEqual(sum([]), 0)
Guido van Rossum805365e2007-05-07 22:24:25 +00001238 self.assertEqual(sum(list(range(2,8))), 27)
1239 self.assertEqual(sum(iter(list(range(2,8)))), 27)
Alex Martellia70b1912003-04-22 08:12:33 +00001240 self.assertEqual(sum(Squares(10)), 285)
1241 self.assertEqual(sum(iter(Squares(10))), 285)
1242 self.assertEqual(sum([[1], [2], [3]], []), [1, 2, 3])
1243
1244 self.assertRaises(TypeError, sum)
1245 self.assertRaises(TypeError, sum, 42)
1246 self.assertRaises(TypeError, sum, ['a', 'b', 'c'])
1247 self.assertRaises(TypeError, sum, ['a', 'b', 'c'], '')
1248 self.assertRaises(TypeError, sum, [[1], [2], [3]])
1249 self.assertRaises(TypeError, sum, [{2:3}])
1250 self.assertRaises(TypeError, sum, [{2:3}]*2, {2:3})
1251
1252 class BadSeq:
1253 def __getitem__(self, index):
1254 raise ValueError
1255 self.assertRaises(ValueError, sum, BadSeq())
1256
Mark Dickinson3a22b472009-10-17 21:48:16 +00001257 empty = []
1258 sum(([x] for x in range(10)), empty)
1259 self.assertEqual(empty, [])
1260
Walter Dörwald919497e2003-01-19 16:23:59 +00001261 def test_type(self):
1262 self.assertEqual(type(''), type('123'))
1263 self.assertNotEqual(type(''), type(()))
1264
Guido van Rossumfee7b932005-01-16 00:21:28 +00001265 # We don't want self in vars(), so these are static methods
1266
1267 @staticmethod
Walter Dörwald919497e2003-01-19 16:23:59 +00001268 def get_vars_f0():
1269 return vars()
Walter Dörwald919497e2003-01-19 16:23:59 +00001270
Guido van Rossumfee7b932005-01-16 00:21:28 +00001271 @staticmethod
Walter Dörwald919497e2003-01-19 16:23:59 +00001272 def get_vars_f2():
1273 BuiltinTest.get_vars_f0()
1274 a = 1
1275 b = 2
1276 return vars()
Walter Dörwald919497e2003-01-19 16:23:59 +00001277
Mark Dickinsonfb3dc942010-05-25 19:06:24 +00001278 class C_get_vars(object):
1279 def getDict(self):
1280 return {'a':2}
1281 __dict__ = property(fget=getDict)
1282
Walter Dörwald919497e2003-01-19 16:23:59 +00001283 def test_vars(self):
Raymond Hettingera690a992003-11-16 16:17:49 +00001284 self.assertEqual(set(vars()), set(dir()))
Raymond Hettingera690a992003-11-16 16:17:49 +00001285 self.assertEqual(set(vars(sys)), set(dir(sys)))
Walter Dörwald919497e2003-01-19 16:23:59 +00001286 self.assertEqual(self.get_vars_f0(), {})
1287 self.assertEqual(self.get_vars_f2(), {'a': 1, 'b': 2})
1288 self.assertRaises(TypeError, vars, 42, 42)
1289 self.assertRaises(TypeError, vars, 42)
Mark Dickinsonfb3dc942010-05-25 19:06:24 +00001290 self.assertEqual(vars(self.C_get_vars()), {'a':2})
Walter Dörwald919497e2003-01-19 16:23:59 +00001291
1292 def test_zip(self):
1293 a = (1, 2, 3)
1294 b = (4, 5, 6)
1295 t = [(1, 4), (2, 5), (3, 6)]
Guido van Rossum801f0d72006-08-24 19:48:10 +00001296 self.assertEqual(list(zip(a, b)), t)
Walter Dörwald919497e2003-01-19 16:23:59 +00001297 b = [4, 5, 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, 7)
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 class I:
1302 def __getitem__(self, i):
1303 if i < 0 or i > 2: raise IndexError
1304 return i + 4
Guido van Rossum801f0d72006-08-24 19:48:10 +00001305 self.assertEqual(list(zip(a, I())), t)
1306 self.assertEqual(list(zip()), [])
1307 self.assertEqual(list(zip(*[])), [])
Walter Dörwald919497e2003-01-19 16:23:59 +00001308 self.assertRaises(TypeError, zip, None)
1309 class G:
1310 pass
1311 self.assertRaises(TypeError, zip, a, G())
Alexander Belopolskye29e6bf2010-08-16 18:55:46 +00001312 self.assertRaises(RuntimeError, zip, a, TestFailingIter())
Walter Dörwald919497e2003-01-19 16:23:59 +00001313
1314 # Make sure zip doesn't try to allocate a billion elements for the
1315 # result list when one of its arguments doesn't say how long it is.
1316 # A MemoryError is the most likely failure mode.
1317 class SequenceWithoutALength:
1318 def __getitem__(self, i):
1319 if i == 5:
1320 raise IndexError
1321 else:
1322 return i
1323 self.assertEqual(
Guido van Rossum805365e2007-05-07 22:24:25 +00001324 list(zip(SequenceWithoutALength(), range(2**30))),
Walter Dörwald919497e2003-01-19 16:23:59 +00001325 list(enumerate(range(5)))
1326 )
1327
1328 class BadSeq:
1329 def __getitem__(self, i):
1330 if i == 5:
1331 raise ValueError
1332 else:
1333 return i
Guido van Rossum801f0d72006-08-24 19:48:10 +00001334 self.assertRaises(ValueError, list, zip(BadSeq(), BadSeq()))
Walter Dörwald919497e2003-01-19 16:23:59 +00001335
Eric Smithe4d63172010-09-13 20:48:43 +00001336 def test_format(self):
1337 # Test the basic machinery of the format() builtin. Don't test
1338 # the specifics of the various formatters
1339 self.assertEqual(format(3, ''), '3')
1340
1341 # Returns some classes to use for various tests. There's
1342 # an old-style version, and a new-style version
1343 def classes_new():
1344 class A(object):
1345 def __init__(self, x):
1346 self.x = x
1347 def __format__(self, format_spec):
1348 return str(self.x) + format_spec
1349 class DerivedFromA(A):
1350 pass
1351
1352 class Simple(object): pass
1353 class DerivedFromSimple(Simple):
1354 def __init__(self, x):
1355 self.x = x
1356 def __format__(self, format_spec):
1357 return str(self.x) + format_spec
1358 class DerivedFromSimple2(DerivedFromSimple): pass
1359 return A, DerivedFromA, DerivedFromSimple, DerivedFromSimple2
1360
1361 def class_test(A, DerivedFromA, DerivedFromSimple, DerivedFromSimple2):
1362 self.assertEqual(format(A(3), 'spec'), '3spec')
1363 self.assertEqual(format(DerivedFromA(4), 'spec'), '4spec')
1364 self.assertEqual(format(DerivedFromSimple(5), 'abc'), '5abc')
1365 self.assertEqual(format(DerivedFromSimple2(10), 'abcdef'),
1366 '10abcdef')
1367
1368 class_test(*classes_new())
1369
1370 def empty_format_spec(value):
1371 # test that:
1372 # format(x, '') == str(x)
1373 # format(x) == str(x)
1374 self.assertEqual(format(value, ""), str(value))
1375 self.assertEqual(format(value), str(value))
1376
1377 # for builtin types, format(x, "") == str(x)
1378 empty_format_spec(17**13)
1379 empty_format_spec(1.0)
1380 empty_format_spec(3.1415e104)
1381 empty_format_spec(-3.1415e104)
1382 empty_format_spec(3.1415e-104)
1383 empty_format_spec(-3.1415e-104)
1384 empty_format_spec(object)
1385 empty_format_spec(None)
1386
1387 # TypeError because self.__format__ returns the wrong type
1388 class BadFormatResult:
1389 def __format__(self, format_spec):
1390 return 1.0
1391 self.assertRaises(TypeError, format, BadFormatResult(), "")
1392
1393 # TypeError because format_spec is not unicode or str
1394 self.assertRaises(TypeError, format, object(), 4)
1395 self.assertRaises(TypeError, format, object(), object())
1396
1397 # tests for object.__format__ really belong elsewhere, but
1398 # there's no good place to put them
1399 x = object().__format__('')
1400 self.assertTrue(x.startswith('<object object at'))
1401
1402 # first argument to object.__format__ must be string
1403 self.assertRaises(TypeError, object().__format__, 3)
1404 self.assertRaises(TypeError, object().__format__, object())
1405 self.assertRaises(TypeError, object().__format__, None)
1406
1407 # --------------------------------------------------------------------
1408 # Issue #7994: object.__format__ with a non-empty format string is
1409 # pending deprecated
1410 def test_deprecated_format_string(obj, fmt_str, should_raise_warning):
1411 with warnings.catch_warnings(record=True) as w:
1412 warnings.simplefilter("always", PendingDeprecationWarning)
1413 format(obj, fmt_str)
1414 if should_raise_warning:
1415 self.assertEqual(len(w), 1)
1416 self.assertIsInstance(w[0].message, PendingDeprecationWarning)
1417 self.assertIn('object.__format__ with a non-empty format '
1418 'string', str(w[0].message))
1419 else:
1420 self.assertEqual(len(w), 0)
1421
1422 fmt_strs = ['', 's']
1423
1424 class A:
1425 def __format__(self, fmt_str):
1426 return format('', fmt_str)
1427
1428 for fmt_str in fmt_strs:
1429 test_deprecated_format_string(A(), fmt_str, False)
1430
1431 class B:
1432 pass
1433
1434 class C(object):
1435 pass
1436
1437 for cls in [object, B, C]:
1438 for fmt_str in fmt_strs:
1439 test_deprecated_format_string(cls(), fmt_str, len(fmt_str) != 0)
1440 # --------------------------------------------------------------------
1441
1442 # make sure we can take a subclass of str as a format spec
1443 class DerivedFromStr(str): pass
1444 self.assertEqual(format(0, DerivedFromStr('10')), ' 0')
1445
Christian Heimes90c3d9b2008-02-23 13:18:03 +00001446 def test_bin(self):
1447 self.assertEqual(bin(0), '0b0')
1448 self.assertEqual(bin(1), '0b1')
1449 self.assertEqual(bin(-1), '-0b1')
1450 self.assertEqual(bin(2**65), '0b1' + '0' * 65)
1451 self.assertEqual(bin(2**65-1), '0b' + '1' * 65)
1452 self.assertEqual(bin(-(2**65)), '-0b1' + '0' * 65)
1453 self.assertEqual(bin(-(2**65-1)), '-0b' + '1' * 65)
1454
Georg Brandl953152f2009-07-22 12:03:59 +00001455 def test_bytearray_translate(self):
1456 x = bytearray(b"abc")
1457 self.assertRaises(ValueError, x.translate, b"1", 1)
1458 self.assertRaises(TypeError, x.translate, b"1"*256, 1)
1459
Raymond Hettinger64958a12003-12-17 20:43:33 +00001460class TestSorted(unittest.TestCase):
1461
1462 def test_basic(self):
Guido van Rossum805365e2007-05-07 22:24:25 +00001463 data = list(range(100))
Raymond Hettinger64958a12003-12-17 20:43:33 +00001464 copy = data[:]
1465 random.shuffle(copy)
1466 self.assertEqual(data, sorted(copy))
1467 self.assertNotEqual(data, copy)
1468
1469 data.reverse()
1470 random.shuffle(copy)
Raymond Hettinger64958a12003-12-17 20:43:33 +00001471 self.assertEqual(data, sorted(copy, key=lambda x: -x))
1472 self.assertNotEqual(data, copy)
1473 random.shuffle(copy)
1474 self.assertEqual(data, sorted(copy, reverse=1))
1475 self.assertNotEqual(data, copy)
1476
1477 def test_inputtypes(self):
1478 s = 'abracadabra'
Walter Dörwald1f5947b2007-05-22 16:52:54 +00001479 types = [list, tuple, str]
Walter Dörwald4e41a4b2005-08-03 17:09:04 +00001480 for T in types:
Raymond Hettinger64958a12003-12-17 20:43:33 +00001481 self.assertEqual(sorted(s), sorted(T(s)))
1482
Walter Dörwald1f5947b2007-05-22 16:52:54 +00001483 s = ''.join(set(s)) # unique letters only
1484 types = [str, set, frozenset, list, tuple, dict.fromkeys]
Walter Dörwald4e41a4b2005-08-03 17:09:04 +00001485 for T in types:
Raymond Hettinger64958a12003-12-17 20:43:33 +00001486 self.assertEqual(sorted(s), sorted(T(s)))
1487
1488 def test_baddecorator(self):
1489 data = 'The quick Brown fox Jumped over The lazy Dog'.split()
1490 self.assertRaises(TypeError, sorted, data, None, lambda x,y: 0)
1491
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001492def test_main(verbose=None):
1493 test_classes = (BuiltinTest, TestSorted)
1494
1495 run_unittest(*test_classes)
1496
1497 # verify reference counting
1498 if verbose and hasattr(sys, "gettotalrefcount"):
1499 import gc
1500 counts = [None] * 5
Guido van Rossum805365e2007-05-07 22:24:25 +00001501 for i in range(len(counts)):
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001502 run_unittest(*test_classes)
1503 gc.collect()
1504 counts[i] = sys.gettotalrefcount()
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001505 print(counts)
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001506
Walter Dörwald919497e2003-01-19 16:23:59 +00001507
1508if __name__ == "__main__":
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001509 test_main(verbose=True)