blob: 7244aff8eff857f85751bd655d5cfded231ac36c [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
Walter Dörwald919497e2003-01-19 16:23:59 +00003import test.test_support, unittest
Walter Dörwald1f5947b2007-05-22 16:52:54 +00004from test.test_support import fcmp, TESTFN, unlink, run_unittest, \
5 run_with_locale
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00006from operator import neg
Guido van Rossum3bead091992-01-27 17:00:37 +00007
Raymond Hettinger53dbe392008-02-12 20:03:09 +00008import sys, warnings, random, collections, io, fractions
Walter Dörwald919497e2003-01-19 16:23:59 +00009warnings.filterwarnings("ignore", "hex../oct.. of negative int",
10 FutureWarning, __name__)
Guido van Rossumefbbb1c2003-04-11 18:43:06 +000011warnings.filterwarnings("ignore", "integer argument expected",
12 DeprecationWarning, "unittest")
Guido van Rossum3bead091992-01-27 17:00:37 +000013
Walter Dörwald919497e2003-01-19 16:23:59 +000014class Squares:
Guido van Rossum3bead091992-01-27 17:00:37 +000015
Walter Dörwald919497e2003-01-19 16:23:59 +000016 def __init__(self, max):
17 self.max = max
18 self.sofar = []
19
20 def __len__(self): return len(self.sofar)
21
22 def __getitem__(self, i):
23 if not 0 <= i < self.max: raise IndexError
24 n = len(self.sofar)
25 while n <= i:
26 self.sofar.append(n*n)
27 n += 1
28 return self.sofar[i]
29
30class StrSquares:
31
32 def __init__(self, max):
33 self.max = max
34 self.sofar = []
35
36 def __len__(self):
37 return len(self.sofar)
38
39 def __getitem__(self, i):
40 if not 0 <= i < self.max:
41 raise IndexError
42 n = len(self.sofar)
43 while n <= i:
44 self.sofar.append(str(n*n))
45 n += 1
46 return self.sofar[i]
47
48class BitBucket:
49 def write(self, line):
50 pass
51
Facundo Batista2336bdd2008-01-19 19:12:01 +000052test_conv_no_sign = [
Walter Dörwald919497e2003-01-19 16:23:59 +000053 ('0', 0),
54 ('1', 1),
55 ('9', 9),
56 ('10', 10),
57 ('99', 99),
58 ('100', 100),
59 ('314', 314),
60 (' 314', 314),
61 ('314 ', 314),
62 (' \t\t 314 \t\t ', 314),
Christian Heimesa37d4c62007-12-04 23:02:19 +000063 (repr(sys.maxsize), sys.maxsize),
Walter Dörwald919497e2003-01-19 16:23:59 +000064 (' 1x', ValueError),
65 (' 1 ', 1),
66 (' 1\02 ', ValueError),
67 ('', ValueError),
68 (' ', ValueError),
Walter Dörwald1f5947b2007-05-22 16:52:54 +000069 (' \t\t ', ValueError),
Guido van Rossumef87d6e2007-05-02 19:09:54 +000070 (str(b'\u0663\u0661\u0664 ','raw-unicode-escape'), 314),
Guido van Rossum84fc66d2007-05-03 17:18:26 +000071 (chr(0x200), ValueError),
Walter Dörwald919497e2003-01-19 16:23:59 +000072]
73
Facundo Batista2336bdd2008-01-19 19:12:01 +000074test_conv_sign = [
75 ('0', 0),
76 ('1', 1),
77 ('9', 9),
78 ('10', 10),
79 ('99', 99),
80 ('100', 100),
81 ('314', 314),
82 (' 314', ValueError),
83 ('314 ', 314),
84 (' \t\t 314 \t\t ', ValueError),
85 (repr(sys.maxsize), sys.maxsize),
86 (' 1x', ValueError),
87 (' 1 ', ValueError),
88 (' 1\02 ', ValueError),
89 ('', ValueError),
90 (' ', ValueError),
91 (' \t\t ', ValueError),
92 (str(b'\u0663\u0661\u0664 ','raw-unicode-escape'), 314),
93 (chr(0x200), ValueError),
94]
95
Raymond Hettinger96229b12005-03-11 06:49:40 +000096class TestFailingBool:
Jack Diederich4dafcc42006-11-28 19:15:13 +000097 def __bool__(self):
Raymond Hettinger96229b12005-03-11 06:49:40 +000098 raise RuntimeError
99
100class TestFailingIter:
101 def __iter__(self):
102 raise RuntimeError
103
Walter Dörwald919497e2003-01-19 16:23:59 +0000104class BuiltinTest(unittest.TestCase):
105
106 def test_import(self):
107 __import__('sys')
108 __import__('time')
109 __import__('string')
Guido van Rossumd8faa362007-04-27 19:54:29 +0000110 __import__(name='sys')
111 __import__(name='time', level=0)
Walter Dörwald919497e2003-01-19 16:23:59 +0000112 self.assertRaises(ImportError, __import__, 'spamspam')
113 self.assertRaises(TypeError, __import__, 1, 2, 3, 4)
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000114 self.assertRaises(ValueError, __import__, '')
Guido van Rossumd8faa362007-04-27 19:54:29 +0000115 self.assertRaises(TypeError, __import__, 'sys', name='sys')
Walter Dörwald919497e2003-01-19 16:23:59 +0000116
117 def test_abs(self):
118 # int
119 self.assertEqual(abs(0), 0)
120 self.assertEqual(abs(1234), 1234)
121 self.assertEqual(abs(-1234), 1234)
Christian Heimesa37d4c62007-12-04 23:02:19 +0000122 self.assertTrue(abs(-sys.maxsize-1) > 0)
Walter Dörwald919497e2003-01-19 16:23:59 +0000123 # float
124 self.assertEqual(abs(0.0), 0.0)
125 self.assertEqual(abs(3.14), 3.14)
126 self.assertEqual(abs(-3.14), 3.14)
127 # long
Guido van Rossume2a383d2007-01-15 16:59:06 +0000128 self.assertEqual(abs(0), 0)
129 self.assertEqual(abs(1234), 1234)
130 self.assertEqual(abs(-1234), 1234)
Walter Dörwald919497e2003-01-19 16:23:59 +0000131 # str
132 self.assertRaises(TypeError, abs, 'a')
133
Raymond Hettinger96229b12005-03-11 06:49:40 +0000134 def test_all(self):
135 self.assertEqual(all([2, 4, 6]), True)
136 self.assertEqual(all([2, None, 6]), False)
137 self.assertRaises(RuntimeError, all, [2, TestFailingBool(), 6])
138 self.assertRaises(RuntimeError, all, TestFailingIter())
139 self.assertRaises(TypeError, all, 10) # Non-iterable
140 self.assertRaises(TypeError, all) # No args
141 self.assertRaises(TypeError, all, [2, 4, 6], []) # Too many args
142 self.assertEqual(all([]), True) # Empty iterator
143 S = [50, 60]
144 self.assertEqual(all(x > 42 for x in S), True)
145 S = [50, 40, 60]
146 self.assertEqual(all(x > 42 for x in S), False)
147
148 def test_any(self):
149 self.assertEqual(any([None, None, None]), False)
150 self.assertEqual(any([None, 4, None]), True)
151 self.assertRaises(RuntimeError, any, [None, TestFailingBool(), 6])
152 self.assertRaises(RuntimeError, all, TestFailingIter())
153 self.assertRaises(TypeError, any, 10) # Non-iterable
154 self.assertRaises(TypeError, any) # No args
155 self.assertRaises(TypeError, any, [2, 4, 6], []) # Too many args
156 self.assertEqual(any([]), False) # Empty iterator
157 S = [40, 60, 30]
158 self.assertEqual(any(x > 42 for x in S), True)
159 S = [10, 20, 30]
160 self.assertEqual(any(x > 42 for x in S), False)
161
Thomas Wouters89f507f2006-12-13 04:49:30 +0000162 def test_neg(self):
Christian Heimesa37d4c62007-12-04 23:02:19 +0000163 x = -sys.maxsize-1
Thomas Wouters89f507f2006-12-13 04:49:30 +0000164 self.assert_(isinstance(x, int))
Christian Heimesa37d4c62007-12-04 23:02:19 +0000165 self.assertEqual(-x, sys.maxsize+1)
Thomas Wouters89f507f2006-12-13 04:49:30 +0000166
Guido van Rossumd59da4b2007-05-22 18:11:13 +0000167 # XXX(nnorwitz): This test case for callable should probably be removed.
Walter Dörwald919497e2003-01-19 16:23:59 +0000168 def test_callable(self):
Guido van Rossumd59da4b2007-05-22 18:11:13 +0000169 self.assert_(hasattr(len, '__call__'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000170 def f(): pass
Guido van Rossumd59da4b2007-05-22 18:11:13 +0000171 self.assert_(hasattr(f, '__call__'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000172 class C:
173 def meth(self): pass
Guido van Rossumd59da4b2007-05-22 18:11:13 +0000174 self.assert_(hasattr(C, '__call__'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000175 x = C()
Guido van Rossumd59da4b2007-05-22 18:11:13 +0000176 self.assert_(hasattr(x.meth, '__call__'))
177 self.assert_(not hasattr(x, '__call__'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000178 class D(C):
179 def __call__(self): pass
180 y = D()
Guido van Rossumd59da4b2007-05-22 18:11:13 +0000181 self.assert_(hasattr(y, '__call__'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000182 y()
183
184 def test_chr(self):
185 self.assertEqual(chr(32), ' ')
186 self.assertEqual(chr(65), 'A')
187 self.assertEqual(chr(97), 'a')
188 self.assertEqual(chr(0xff), '\xff')
Guido van Rossum572dbf82007-04-27 23:53:51 +0000189 self.assertRaises(ValueError, chr, 1<<24)
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000190 self.assertEqual(chr(sys.maxunicode),
191 str(('\\U%08x' % (sys.maxunicode)).encode("ascii"),
192 'unicode-escape'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000193 self.assertRaises(TypeError, chr)
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000194 self.assertEqual(chr(0x0000FFFF), "\U0000FFFF")
195 self.assertEqual(chr(0x00010000), "\U00010000")
196 self.assertEqual(chr(0x00010001), "\U00010001")
197 self.assertEqual(chr(0x000FFFFE), "\U000FFFFE")
198 self.assertEqual(chr(0x000FFFFF), "\U000FFFFF")
199 self.assertEqual(chr(0x00100000), "\U00100000")
200 self.assertEqual(chr(0x00100001), "\U00100001")
201 self.assertEqual(chr(0x0010FFFE), "\U0010FFFE")
202 self.assertEqual(chr(0x0010FFFF), "\U0010FFFF")
203 self.assertRaises(ValueError, chr, -1)
204 self.assertRaises(ValueError, chr, 0x00110000)
Walter Dörwald919497e2003-01-19 16:23:59 +0000205
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000206 def test_cmp(self):
Walter Dörwald919497e2003-01-19 16:23:59 +0000207 self.assertEqual(cmp(-1, 1), -1)
208 self.assertEqual(cmp(1, -1), 1)
209 self.assertEqual(cmp(1, 1), 0)
Armin Rigo2b3eb402003-10-28 12:05:48 +0000210 # verify that circular objects are not handled
Walter Dörwald919497e2003-01-19 16:23:59 +0000211 a = []; a.append(a)
212 b = []; b.append(b)
Raymond Hettinger53dbe392008-02-12 20:03:09 +0000213 from collections import UserList
Walter Dörwald919497e2003-01-19 16:23:59 +0000214 c = UserList(); c.append(c)
Armin Rigo2b3eb402003-10-28 12:05:48 +0000215 self.assertRaises(RuntimeError, cmp, a, b)
216 self.assertRaises(RuntimeError, cmp, b, c)
217 self.assertRaises(RuntimeError, cmp, c, a)
218 self.assertRaises(RuntimeError, cmp, a, c)
219 # okay, now break the cycles
Walter Dörwald919497e2003-01-19 16:23:59 +0000220 a.pop(); b.pop(); c.pop()
221 self.assertRaises(TypeError, cmp)
222
Walter Dörwald919497e2003-01-19 16:23:59 +0000223 def test_compile(self):
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000224 compile('print(1)\n', '', 'exec')
Amaury Forgeot d'Arcaf593462007-11-22 20:53:01 +0000225 bom = b'\xef\xbb\xbf'
226 compile(bom + b'print(1)\n', '', 'exec')
Guido van Rossumd8faa362007-04-27 19:54:29 +0000227 compile(source='pass', filename='?', mode='exec')
228 compile(dont_inherit=0, filename='tmp', source='0', mode='eval')
229 compile('pass', '?', dont_inherit=1, mode='exec')
Walter Dörwald919497e2003-01-19 16:23:59 +0000230 self.assertRaises(TypeError, compile)
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000231 self.assertRaises(ValueError, compile, 'print(42)\n', '<string>', 'badmode')
232 self.assertRaises(ValueError, compile, 'print(42)\n', '<string>', 'single', 0xff)
Neal Norwitzfcf44352005-11-27 20:37:43 +0000233 self.assertRaises(TypeError, compile, chr(0), 'f', 'exec')
Guido van Rossumd8faa362007-04-27 19:54:29 +0000234 self.assertRaises(TypeError, compile, 'pass', '?', 'exec',
235 mode='eval', source='0', filename='tmp')
Walter Dörwald1f5947b2007-05-22 16:52:54 +0000236 compile('print("\xe5")\n', '', 'exec')
237 self.assertRaises(TypeError, compile, chr(0), 'f', 'exec')
238 self.assertRaises(ValueError, compile, str('a = 1'), 'f', 'bad')
Guido van Rossumd8faa362007-04-27 19:54:29 +0000239
Walter Dörwald919497e2003-01-19 16:23:59 +0000240 def test_delattr(self):
241 import sys
242 sys.spam = 1
243 delattr(sys, 'spam')
244 self.assertRaises(TypeError, delattr)
245
246 def test_dir(self):
Georg Brandle32b4222007-03-10 22:13:27 +0000247 # dir(wrong number of arguments)
Walter Dörwald919497e2003-01-19 16:23:59 +0000248 self.assertRaises(TypeError, dir, 42, 42)
249
Georg Brandle32b4222007-03-10 22:13:27 +0000250 # dir() - local scope
251 local_var = 1
252 self.assert_('local_var' in dir())
253
254 # dir(module)
255 import sys
256 self.assert_('exit' in dir(sys))
257
258 # dir(module_with_invalid__dict__)
259 import types
260 class Foo(types.ModuleType):
261 __dict__ = 8
262 f = Foo("foo")
263 self.assertRaises(TypeError, dir, f)
264
265 # dir(type)
266 self.assert_("strip" in dir(str))
267 self.assert_("__mro__" not in dir(str))
268
269 # dir(obj)
270 class Foo(object):
271 def __init__(self):
272 self.x = 7
273 self.y = 8
274 self.z = 9
275 f = Foo()
276 self.assert_("y" in dir(f))
277
278 # dir(obj_no__dict__)
279 class Foo(object):
280 __slots__ = []
281 f = Foo()
282 self.assert_("__repr__" in dir(f))
283
284 # dir(obj_no__class__with__dict__)
285 # (an ugly trick to cause getattr(f, "__class__") to fail)
286 class Foo(object):
287 __slots__ = ["__class__", "__dict__"]
288 def __init__(self):
289 self.bar = "wow"
290 f = Foo()
291 self.assert_("__repr__" not in dir(f))
292 self.assert_("bar" in dir(f))
293
294 # dir(obj_using __dir__)
295 class Foo(object):
296 def __dir__(self):
297 return ["kan", "ga", "roo"]
298 f = Foo()
299 self.assert_(dir(f) == ["ga", "kan", "roo"])
300
301 # dir(obj__dir__not_list)
302 class Foo(object):
303 def __dir__(self):
304 return 7
305 f = Foo()
306 self.assertRaises(TypeError, dir, f)
307
Collin Winter3eed7652007-08-14 17:53:54 +0000308 # dir(traceback)
309 try:
310 raise IndexError
311 except:
312 self.assertEqual(len(dir(sys.exc_info()[2])), 4)
313
314
Walter Dörwald919497e2003-01-19 16:23:59 +0000315 def test_divmod(self):
316 self.assertEqual(divmod(12, 7), (1, 5))
317 self.assertEqual(divmod(-12, 7), (-2, 2))
318 self.assertEqual(divmod(12, -7), (-2, -2))
319 self.assertEqual(divmod(-12, -7), (1, -5))
320
Guido van Rossume2a383d2007-01-15 16:59:06 +0000321 self.assertEqual(divmod(12, 7), (1, 5))
322 self.assertEqual(divmod(-12, 7), (-2, 2))
323 self.assertEqual(divmod(12, -7), (-2, -2))
324 self.assertEqual(divmod(-12, -7), (1, -5))
Walter Dörwald919497e2003-01-19 16:23:59 +0000325
Guido van Rossume2a383d2007-01-15 16:59:06 +0000326 self.assertEqual(divmod(12, 7), (1, 5))
327 self.assertEqual(divmod(-12, 7), (-2, 2))
328 self.assertEqual(divmod(12, -7), (-2, -2))
329 self.assertEqual(divmod(-12, -7), (1, -5))
Walter Dörwald919497e2003-01-19 16:23:59 +0000330
Christian Heimesa37d4c62007-12-04 23:02:19 +0000331 self.assertEqual(divmod(-sys.maxsize-1, -1),
332 (sys.maxsize+1, 0))
Raymond Hettinger5ea7e312004-09-30 07:47:20 +0000333
Walter Dörwald919497e2003-01-19 16:23:59 +0000334 self.assert_(not fcmp(divmod(3.25, 1.0), (3.0, 0.25)))
335 self.assert_(not fcmp(divmod(-3.25, 1.0), (-4.0, 0.75)))
336 self.assert_(not fcmp(divmod(3.25, -1.0), (-4.0, -0.75)))
337 self.assert_(not fcmp(divmod(-3.25, -1.0), (3.0, -0.25)))
338
339 self.assertRaises(TypeError, divmod)
340
341 def test_eval(self):
342 self.assertEqual(eval('1+1'), 2)
343 self.assertEqual(eval(' 1+1\n'), 2)
344 globals = {'a': 1, 'b': 2}
345 locals = {'b': 200, 'c': 300}
346 self.assertEqual(eval('a', globals) , 1)
347 self.assertEqual(eval('a', globals, locals), 1)
348 self.assertEqual(eval('b', globals, locals), 200)
349 self.assertEqual(eval('c', globals, locals), 300)
Walter Dörwald919497e2003-01-19 16:23:59 +0000350 globals = {'a': 1, 'b': 2}
351 locals = {'b': 200, 'c': 300}
Amaury Forgeot d'Arcaf593462007-11-22 20:53:01 +0000352 bom = b'\xef\xbb\xbf'
353 self.assertEqual(eval(bom + b'a', globals, locals), 1)
Walter Dörwald1f5947b2007-05-22 16:52:54 +0000354 self.assertEqual(eval('"\xe5"', globals), "\xe5")
Walter Dörwald919497e2003-01-19 16:23:59 +0000355 self.assertRaises(TypeError, eval)
356 self.assertRaises(TypeError, eval, ())
Amaury Forgeot d'Arcaf593462007-11-22 20:53:01 +0000357 self.assertRaises(SyntaxError, eval, bom[:2] + b'a')
Walter Dörwald919497e2003-01-19 16:23:59 +0000358
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000359 def test_general_eval(self):
360 # Tests that general mappings can be used for the locals argument
361
362 class M:
363 "Test mapping interface versus possible calls from eval()."
364 def __getitem__(self, key):
365 if key == 'a':
366 return 12
367 raise KeyError
Guido van Rossumcd70eee2007-02-11 18:53:00 +0000368 def keys(self):
369 return list('xyz')
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000370
371 m = M()
372 g = globals()
373 self.assertEqual(eval('a', g, m), 12)
374 self.assertRaises(NameError, eval, 'b', g, m)
375 self.assertEqual(eval('dir()', g, m), list('xyz'))
376 self.assertEqual(eval('globals()', g, m), g)
377 self.assertEqual(eval('locals()', g, m), m)
Raymond Hettinger513ffe82004-07-06 13:44:41 +0000378 self.assertRaises(TypeError, eval, 'a', m)
Raymond Hettinger66bd2332004-08-02 08:30:07 +0000379 class A:
380 "Non-mapping"
381 pass
382 m = A()
383 self.assertRaises(TypeError, eval, 'a', g, m)
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000384
385 # Verify that dict subclasses work as well
386 class D(dict):
387 def __getitem__(self, key):
388 if key == 'a':
389 return 12
390 return dict.__getitem__(self, key)
Guido van Rossumcd70eee2007-02-11 18:53:00 +0000391 def keys(self):
392 return list('xyz')
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000393
394 d = D()
395 self.assertEqual(eval('a', g, d), 12)
396 self.assertRaises(NameError, eval, 'b', g, d)
397 self.assertEqual(eval('dir()', g, d), list('xyz'))
398 self.assertEqual(eval('globals()', g, d), g)
399 self.assertEqual(eval('locals()', g, d), d)
400
401 # Verify locals stores (used by list comps)
402 eval('[locals() for i in (2,3)]', g, d)
Raymond Hettingerf80680d2008-02-06 00:07:11 +0000403 eval('[locals() for i in (2,3)]', g, collections.UserDict())
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000404
405 class SpreadSheet:
406 "Sample application showing nested, calculated lookups."
407 _cells = {}
408 def __setitem__(self, key, formula):
409 self._cells[key] = formula
Thomas Wouters73e5a5b2006-06-08 15:35:45 +0000410 def __getitem__(self, key):
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000411 return eval(self._cells[key], globals(), self)
412
413 ss = SpreadSheet()
414 ss['a1'] = '5'
415 ss['a2'] = 'a1*6'
416 ss['a3'] = 'a2*7'
417 self.assertEqual(ss['a3'], 210)
418
Raymond Hettinger2a7dede2004-08-07 04:55:30 +0000419 # Verify that dir() catches a non-list returned by eval
420 # SF bug #1004669
421 class C:
422 def __getitem__(self, item):
423 raise KeyError(item)
Guido van Rossumcd70eee2007-02-11 18:53:00 +0000424 def keys(self):
425 return 1 # used to be 'a' but that's no longer an error
Raymond Hettinger2a7dede2004-08-07 04:55:30 +0000426 self.assertRaises(TypeError, eval, 'dir()', globals(), C())
427
Georg Brandl7cae87c2006-09-06 06:51:57 +0000428 def test_exec(self):
429 g = {}
430 exec('z = 1', g)
431 if '__builtins__' in g:
432 del g['__builtins__']
433 self.assertEqual(g, {'z': 1})
434
Guido van Rossumef87d6e2007-05-02 19:09:54 +0000435 exec('z = 1+1', g)
Georg Brandl7cae87c2006-09-06 06:51:57 +0000436 if '__builtins__' in g:
437 del g['__builtins__']
438 self.assertEqual(g, {'z': 2})
439 g = {}
440 l = {}
441
442 import warnings
443 warnings.filterwarnings("ignore", "global statement", module="<string>")
444 exec('global a; a = 1; b = 2', g, l)
445 if '__builtins__' in g:
446 del g['__builtins__']
447 if '__builtins__' in l:
448 del l['__builtins__']
449 self.assertEqual((g, l), ({'a': 1}, {'b': 2}))
450
Amaury Forgeot d'Arc9ed77352008-04-04 23:25:27 +0000451 def test_exec_redirected(self):
452 savestdout = sys.stdout
453 sys.stdout = None # Whatever that cannot flush()
454 try:
455 # Used to raise SystemError('error return without exception set')
456 exec('a')
457 except NameError:
458 pass
459 finally:
460 sys.stdout = savestdout
461
Walter Dörwald919497e2003-01-19 16:23:59 +0000462 def test_filter(self):
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000463 self.assertEqual(list(filter(lambda c: 'a' <= c <= 'z', 'Hello World')), list('elloorld'))
464 self.assertEqual(list(filter(None, [1, 'hello', [], [3], '', None, 9, 0])), [1, 'hello', [3], 9])
465 self.assertEqual(list(filter(lambda x: x > 0, [1, -3, 9, 0, 2])), [1, 9, 2])
466 self.assertEqual(list(filter(None, Squares(10))), [1, 4, 9, 16, 25, 36, 49, 64, 81])
467 self.assertEqual(list(filter(lambda x: x%2, Squares(10))), [1, 9, 25, 49, 81])
Walter Dörwald919497e2003-01-19 16:23:59 +0000468 def identity(item):
469 return 1
470 filter(identity, Squares(5))
471 self.assertRaises(TypeError, filter)
472 class BadSeq(object):
Tim Petersf2715e02003-02-19 02:35:07 +0000473 def __getitem__(self, index):
474 if index<4:
475 return 42
476 raise ValueError
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000477 self.assertRaises(ValueError, list, filter(lambda x: x, BadSeq()))
Walter Dörwald919497e2003-01-19 16:23:59 +0000478 def badfunc():
479 pass
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000480 self.assertRaises(TypeError, list, filter(badfunc, range(5)))
Walter Dörwald919497e2003-01-19 16:23:59 +0000481
Walter Dörwaldbf517072003-01-27 15:57:14 +0000482 # test bltinmodule.c::filtertuple()
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000483 self.assertEqual(list(filter(None, (1, 2))), [1, 2])
484 self.assertEqual(list(filter(lambda x: x>=3, (1, 2, 3, 4))), [3, 4])
485 self.assertRaises(TypeError, list, filter(42, (1, 2)))
Walter Dörwaldc3da83f2003-02-04 20:24:45 +0000486
Walter Dörwald919497e2003-01-19 16:23:59 +0000487 def test_float(self):
488 self.assertEqual(float(3.14), 3.14)
489 self.assertEqual(float(314), 314.0)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000490 self.assertEqual(float(314), 314.0)
Walter Dörwald919497e2003-01-19 16:23:59 +0000491 self.assertEqual(float(" 3.14 "), 3.14)
Neal Norwitze7214a12005-12-18 05:03:17 +0000492 self.assertRaises(ValueError, float, " 0x3.1 ")
493 self.assertRaises(ValueError, float, " -0x3.p-1 ")
Walter Dörwald1f5947b2007-05-22 16:52:54 +0000494 self.assertEqual(float(str(b" \u0663.\u0661\u0664 ",'raw-unicode-escape')), 3.14)
495 self.assertEqual(float("1"*10000), 1e10000) # Inf on both sides
Walter Dörwald919497e2003-01-19 16:23:59 +0000496
Thomas Wouters477c8d52006-05-27 19:21:47 +0000497 @run_with_locale('LC_NUMERIC', 'fr_FR', 'de_DE')
Neal Norwitz5898fa22005-11-22 05:17:40 +0000498 def test_float_with_comma(self):
499 # set locale to something that doesn't use '.' for the decimal point
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000500 # float must not accept the locale specific decimal point but
501 # it still has to accept the normal python syntac
Thomas Wouters477c8d52006-05-27 19:21:47 +0000502 import locale
503 if not locale.localeconv()['decimal_point'] == ',':
Neal Norwitz5898fa22005-11-22 05:17:40 +0000504 return
505
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000506 self.assertEqual(float(" 3.14 "), 3.14)
507 self.assertEqual(float("+3.14 "), 3.14)
508 self.assertEqual(float("-3.14 "), -3.14)
509 self.assertEqual(float(".14 "), .14)
510 self.assertEqual(float("3. "), 3.0)
511 self.assertEqual(float("3.e3 "), 3000.0)
512 self.assertEqual(float("3.2e3 "), 3200.0)
513 self.assertEqual(float("2.5e-1 "), 0.25)
514 self.assertEqual(float("5e-1"), 0.5)
515 self.assertRaises(ValueError, float, " 3,14 ")
516 self.assertRaises(ValueError, float, " +3,14 ")
517 self.assertRaises(ValueError, float, " -3,14 ")
Thomas Wouters477c8d52006-05-27 19:21:47 +0000518 self.assertRaises(ValueError, float, " 0x3.1 ")
519 self.assertRaises(ValueError, float, " -0x3.p-1 ")
520 self.assertEqual(float(" 25.e-1 "), 2.5)
521 self.assertEqual(fcmp(float(" .25e-1 "), .025), 0)
Neal Norwitz5898fa22005-11-22 05:17:40 +0000522
Brett Cannonc3647ac2005-04-26 03:45:26 +0000523 def test_floatconversion(self):
524 # Make sure that calls to __float__() work properly
525 class Foo0:
526 def __float__(self):
527 return 42.
528
529 class Foo1(object):
530 def __float__(self):
531 return 42.
532
533 class Foo2(float):
534 def __float__(self):
535 return 42.
536
537 class Foo3(float):
538 def __new__(cls, value=0.):
539 return float.__new__(cls, 2*value)
540
541 def __float__(self):
542 return self
543
544 class Foo4(float):
545 def __float__(self):
546 return 42
547
548 self.assertAlmostEqual(float(Foo0()), 42.)
549 self.assertAlmostEqual(float(Foo1()), 42.)
550 self.assertAlmostEqual(float(Foo2()), 42.)
551 self.assertAlmostEqual(float(Foo3(21)), 42.)
552 self.assertRaises(TypeError, float, Foo4(42))
553
Eric Smith8c663262007-08-25 02:26:07 +0000554 def test_format(self):
Eric Smith8fd3eba2008-02-17 19:48:00 +0000555 # Test the basic machinery of the format() builtin. Don't test
556 # the specifics of the various formatters
Eric Smith8c663262007-08-25 02:26:07 +0000557 self.assertEqual(format(3, ''), '3')
Eric Smith8fd3eba2008-02-17 19:48:00 +0000558
559 # Returns some classes to use for various tests. There's
560 # an old-style version, and a new-style version
561 def classes_new():
562 class A(object):
563 def __init__(self, x):
564 self.x = x
565 def __format__(self, format_spec):
566 return str(self.x) + format_spec
567 class DerivedFromA(A):
568 pass
569
570 class Simple(object): pass
571 class DerivedFromSimple(Simple):
572 def __init__(self, x):
573 self.x = x
574 def __format__(self, format_spec):
575 return str(self.x) + format_spec
576 class DerivedFromSimple2(DerivedFromSimple): pass
577 return A, DerivedFromA, DerivedFromSimple, DerivedFromSimple2
578
579 # In 3.0, classes_classic has the same meaning as classes_new
580 def classes_classic():
581 class A:
582 def __init__(self, x):
583 self.x = x
584 def __format__(self, format_spec):
585 return str(self.x) + format_spec
586 class DerivedFromA(A):
587 pass
588
589 class Simple: pass
590 class DerivedFromSimple(Simple):
591 def __init__(self, x):
592 self.x = x
593 def __format__(self, format_spec):
594 return str(self.x) + format_spec
595 class DerivedFromSimple2(DerivedFromSimple): pass
596 return A, DerivedFromA, DerivedFromSimple, DerivedFromSimple2
597
598 def class_test(A, DerivedFromA, DerivedFromSimple, DerivedFromSimple2):
599 self.assertEqual(format(A(3), 'spec'), '3spec')
600 self.assertEqual(format(DerivedFromA(4), 'spec'), '4spec')
601 self.assertEqual(format(DerivedFromSimple(5), 'abc'), '5abc')
602 self.assertEqual(format(DerivedFromSimple2(10), 'abcdef'),
603 '10abcdef')
604
605 class_test(*classes_new())
606 class_test(*classes_classic())
Eric Smith8c663262007-08-25 02:26:07 +0000607
Eric Smith81936692007-08-31 01:14:01 +0000608 def empty_format_spec(value):
609 # test that:
610 # format(x, '') == str(x)
611 # format(x) == str(x)
612 self.assertEqual(format(value, ""), str(value))
613 self.assertEqual(format(value), str(value))
614
Eric Smith8c663262007-08-25 02:26:07 +0000615 # for builtin types, format(x, "") == str(x)
Eric Smith81936692007-08-31 01:14:01 +0000616 empty_format_spec(17**13)
617 empty_format_spec(1.0)
618 empty_format_spec(3.1415e104)
619 empty_format_spec(-3.1415e104)
620 empty_format_spec(3.1415e-104)
621 empty_format_spec(-3.1415e-104)
622 empty_format_spec(object)
623 empty_format_spec(None)
Eric Smith8c663262007-08-25 02:26:07 +0000624
Eric Smith739e2ad2007-08-27 19:07:22 +0000625 # TypeError because self.__format__ returns the wrong type
Eric Smith8fd3eba2008-02-17 19:48:00 +0000626 class BadFormatResult:
627 def __format__(self, format_spec):
628 return 1.0
629 self.assertRaises(TypeError, format, BadFormatResult(), "")
Eric Smith37f10382007-09-01 10:56:01 +0000630
Eric Smith8fd3eba2008-02-17 19:48:00 +0000631 # TypeError because format_spec is not unicode or str
Eric Smithfc6e8fe2008-01-11 00:17:22 +0000632 self.assertRaises(TypeError, format, object(), 4)
633 self.assertRaises(TypeError, format, object(), object())
634
Eric Smith8fd3eba2008-02-17 19:48:00 +0000635 # tests for object.__format__ really belong elsewhere, but
636 # there's no good place to put them
637 x = object().__format__('')
638 self.assert_(x.startswith('<object object at'))
639
Eric Smith61ecb772008-01-11 00:32:16 +0000640 # first argument to object.__format__ must be string
641 self.assertRaises(TypeError, object().__format__, 3)
642 self.assertRaises(TypeError, object().__format__, object())
643 self.assertRaises(TypeError, object().__format__, None)
644
Eric Smith37f10382007-09-01 10:56:01 +0000645 # make sure we can take a subclass of str as a format spec
Eric Smith8fd3eba2008-02-17 19:48:00 +0000646 class DerivedFromStr(str): pass
647 self.assertEqual(format(0, DerivedFromStr('10')), ' 0')
Eric Smith8c663262007-08-25 02:26:07 +0000648
Christian Heimes26855632008-01-27 23:50:43 +0000649 def test_floatasratio(self):
Christian Heimes292d3512008-02-03 16:51:08 +0000650 for f, ratio in [
651 (0.875, (7, 8)),
652 (-0.875, (-7, 8)),
653 (0.0, (0, 1)),
654 (11.5, (23, 2)),
655 ]:
656 self.assertEqual(f.as_integer_ratio(), ratio)
657
658 for i in range(10000):
659 f = random.random()
660 f *= 10 ** random.randint(-100, 100)
661 n, d = f.as_integer_ratio()
662 self.assertEqual(float(n).__truediv__(d), f)
663
Christian Heimes3feef612008-02-11 06:19:17 +0000664 R = fractions.Fraction
Christian Heimes26855632008-01-27 23:50:43 +0000665 self.assertEqual(R(0, 1),
666 R(*float(0.0).as_integer_ratio()))
667 self.assertEqual(R(5, 2),
668 R(*float(2.5).as_integer_ratio()))
669 self.assertEqual(R(1, 2),
670 R(*float(0.5).as_integer_ratio()))
671 self.assertEqual(R(4728779608739021, 2251799813685248),
672 R(*float(2.1).as_integer_ratio()))
673 self.assertEqual(R(-4728779608739021, 2251799813685248),
674 R(*float(-2.1).as_integer_ratio()))
675 self.assertEqual(R(-2100, 1),
676 R(*float(-2100.0).as_integer_ratio()))
677
678 self.assertRaises(OverflowError, float('inf').as_integer_ratio)
679 self.assertRaises(OverflowError, float('-inf').as_integer_ratio)
680 self.assertRaises(ValueError, float('nan').as_integer_ratio)
681
Walter Dörwald919497e2003-01-19 16:23:59 +0000682 def test_getattr(self):
683 import sys
684 self.assert_(getattr(sys, 'stdout') is sys.stdout)
685 self.assertRaises(TypeError, getattr, sys, 1)
686 self.assertRaises(TypeError, getattr, sys, 1, "foo")
687 self.assertRaises(TypeError, getattr)
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000688 self.assertRaises(AttributeError, getattr, sys, chr(sys.maxunicode))
Walter Dörwald919497e2003-01-19 16:23:59 +0000689
690 def test_hasattr(self):
691 import sys
692 self.assert_(hasattr(sys, 'stdout'))
693 self.assertRaises(TypeError, hasattr, sys, 1)
694 self.assertRaises(TypeError, hasattr)
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000695 self.assertEqual(False, hasattr(sys, chr(sys.maxunicode)))
Walter Dörwald919497e2003-01-19 16:23:59 +0000696
697 def test_hash(self):
698 hash(None)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000699 self.assertEqual(hash(1), hash(1))
Walter Dörwald919497e2003-01-19 16:23:59 +0000700 self.assertEqual(hash(1), hash(1.0))
701 hash('spam')
Guido van Rossum98297ee2007-11-06 21:34:58 +0000702 self.assertEqual(hash('spam'), hash(b'spam'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000703 hash((0,1,2,3))
704 def f(): pass
705 self.assertRaises(TypeError, hash, [])
706 self.assertRaises(TypeError, hash, {})
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000707 # Bug 1536021: Allow hash to return long objects
708 class X:
709 def __hash__(self):
710 return 2**100
711 self.assertEquals(type(hash(X())), int)
712 class Y(object):
713 def __hash__(self):
714 return 2**100
715 self.assertEquals(type(hash(Y())), int)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000716 class Z(int):
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000717 def __hash__(self):
718 return self
Guido van Rossume2a383d2007-01-15 16:59:06 +0000719 self.assertEquals(hash(Z(42)), hash(42))
Walter Dörwald919497e2003-01-19 16:23:59 +0000720
721 def test_hex(self):
722 self.assertEqual(hex(16), '0x10')
Guido van Rossume2a383d2007-01-15 16:59:06 +0000723 self.assertEqual(hex(16), '0x10')
Guido van Rossum6c9e1302003-11-29 23:52:13 +0000724 self.assertEqual(hex(-16), '-0x10')
Guido van Rossume2a383d2007-01-15 16:59:06 +0000725 self.assertEqual(hex(-16), '-0x10')
Walter Dörwald919497e2003-01-19 16:23:59 +0000726 self.assertRaises(TypeError, hex, {})
727
728 def test_id(self):
729 id(None)
730 id(1)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000731 id(1)
Walter Dörwald919497e2003-01-19 16:23:59 +0000732 id(1.0)
733 id('spam')
734 id((0,1,2,3))
735 id([0,1,2,3])
736 id({'spam': 1, 'eggs': 2, 'ham': 3})
737
Guido van Rossuma88a0332007-02-26 16:59:55 +0000738 # Test input() later, alphabetized as if it were raw_input
739
Walter Dörwald919497e2003-01-19 16:23:59 +0000740 def test_int(self):
741 self.assertEqual(int(314), 314)
742 self.assertEqual(int(3.14), 3)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000743 self.assertEqual(int(314), 314)
Walter Dörwald919497e2003-01-19 16:23:59 +0000744 # Check that conversion from float truncates towards zero
745 self.assertEqual(int(-3.14), -3)
746 self.assertEqual(int(3.9), 3)
747 self.assertEqual(int(-3.9), -3)
748 self.assertEqual(int(3.5), 3)
749 self.assertEqual(int(-3.5), -3)
750 # Different base:
Guido van Rossume2a383d2007-01-15 16:59:06 +0000751 self.assertEqual(int("10",16), 16)
Walter Dörwald919497e2003-01-19 16:23:59 +0000752 # Test conversion from strings and various anomalies
Facundo Batista2336bdd2008-01-19 19:12:01 +0000753 # Testing with no sign at front
754 for s, v in test_conv_no_sign:
755 for prefix in "", " ", "\t", " \t\t ":
756 ss = prefix + s
757 vv = v
758 try:
759 self.assertEqual(int(ss), vv)
760 except v:
761 pass
762 # No whitespaces allowed between + or - sign and the number
763 for s, v in test_conv_sign:
764 for sign in "+", "-":
Walter Dörwald919497e2003-01-19 16:23:59 +0000765 for prefix in "", " ", "\t", " \t\t ":
766 ss = prefix + sign + s
767 vv = v
768 if sign == "-" and v is not ValueError:
769 vv = -v
770 try:
771 self.assertEqual(int(ss), vv)
772 except v:
773 pass
774
Christian Heimesa37d4c62007-12-04 23:02:19 +0000775 s = repr(-1-sys.maxsize)
Thomas Wouters89f507f2006-12-13 04:49:30 +0000776 x = int(s)
Christian Heimesa37d4c62007-12-04 23:02:19 +0000777 self.assertEqual(x+1, -sys.maxsize)
Thomas Wouters89f507f2006-12-13 04:49:30 +0000778 self.assert_(isinstance(x, int))
Walter Dörwald919497e2003-01-19 16:23:59 +0000779 # should return long
Christian Heimesa37d4c62007-12-04 23:02:19 +0000780 self.assertEqual(int(s[1:]), sys.maxsize+1)
Walter Dörwald919497e2003-01-19 16:23:59 +0000781
782 # should return long
783 x = int(1e100)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000784 self.assert_(isinstance(x, int))
Walter Dörwald919497e2003-01-19 16:23:59 +0000785 x = int(-1e100)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000786 self.assert_(isinstance(x, int))
Walter Dörwald919497e2003-01-19 16:23:59 +0000787
788
789 # SF bug 434186: 0x80000000/2 != 0x80000000>>1.
790 # Worked by accident in Windows release build, but failed in debug build.
791 # Failed in all Linux builds.
Christian Heimesa37d4c62007-12-04 23:02:19 +0000792 x = -1-sys.maxsize
Walter Dörwald919497e2003-01-19 16:23:59 +0000793 self.assertEqual(x >> 1, x//2)
794
795 self.assertRaises(ValueError, int, '123\0')
796 self.assertRaises(ValueError, int, '53', 40)
797
Thomas Wouters89f507f2006-12-13 04:49:30 +0000798 # SF bug 1545497: embedded NULs were not detected with
799 # explicit base
800 self.assertRaises(ValueError, int, '123\0', 10)
801 self.assertRaises(ValueError, int, '123\x00 245', 20)
802
Walter Dörwald919497e2003-01-19 16:23:59 +0000803 x = int('1' * 600)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000804 self.assert_(isinstance(x, int))
Walter Dörwald919497e2003-01-19 16:23:59 +0000805
Walter Dörwald1f5947b2007-05-22 16:52:54 +0000806 x = int(chr(0x661) * 600)
807 self.assert_(isinstance(x, int))
Walter Dörwald919497e2003-01-19 16:23:59 +0000808
809 self.assertRaises(TypeError, int, 1, 12)
810
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000811 # tests with base 0
812 self.assertRaises(ValueError, int, ' 0123 ', 0) # old octal syntax
813 self.assertEqual(int('000', 0), 0)
814 self.assertEqual(int('0o123', 0), 83)
815 self.assertEqual(int('0x123', 0), 291)
816 self.assertEqual(int('0b100', 0), 4)
817 self.assertEqual(int(' 0O123 ', 0), 83)
818 self.assertEqual(int(' 0X123 ', 0), 291)
819 self.assertEqual(int(' 0B100 ', 0), 4)
820
821 # without base still base 10
822 self.assertEqual(int('0123'), 123)
823 self.assertEqual(int('0123', 10), 123)
824
825 # tests with prefix and base != 0
Neal Norwitz5898fa22005-11-22 05:17:40 +0000826 self.assertEqual(int('0x123', 16), 291)
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000827 self.assertEqual(int('0o123', 8), 83)
828 self.assertEqual(int('0b100', 2), 4)
829 self.assertEqual(int('0X123', 16), 291)
830 self.assertEqual(int('0O123', 8), 83)
831 self.assertEqual(int('0B100', 2), 4)
Walter Dörwald919497e2003-01-19 16:23:59 +0000832
Georg Brandlfceab5a2008-01-19 20:08:23 +0000833 # Bug 1679: "0x" is not a valid hex literal
834 self.assertRaises(ValueError, int, "0x", 16)
835 self.assertRaises(ValueError, int, "0x", 0)
836
837
Thomas Wouters477c8d52006-05-27 19:21:47 +0000838 # SF bug 1334662: int(string, base) wrong answers
839 # Various representations of 2**32 evaluated to 0
840 # rather than 2**32 in previous versions
841
Guido van Rossume2a383d2007-01-15 16:59:06 +0000842 self.assertEqual(int('100000000000000000000000000000000', 2), 4294967296)
843 self.assertEqual(int('102002022201221111211', 3), 4294967296)
844 self.assertEqual(int('10000000000000000', 4), 4294967296)
845 self.assertEqual(int('32244002423141', 5), 4294967296)
846 self.assertEqual(int('1550104015504', 6), 4294967296)
847 self.assertEqual(int('211301422354', 7), 4294967296)
848 self.assertEqual(int('40000000000', 8), 4294967296)
849 self.assertEqual(int('12068657454', 9), 4294967296)
850 self.assertEqual(int('4294967296', 10), 4294967296)
851 self.assertEqual(int('1904440554', 11), 4294967296)
852 self.assertEqual(int('9ba461594', 12), 4294967296)
853 self.assertEqual(int('535a79889', 13), 4294967296)
854 self.assertEqual(int('2ca5b7464', 14), 4294967296)
855 self.assertEqual(int('1a20dcd81', 15), 4294967296)
856 self.assertEqual(int('100000000', 16), 4294967296)
857 self.assertEqual(int('a7ffda91', 17), 4294967296)
858 self.assertEqual(int('704he7g4', 18), 4294967296)
859 self.assertEqual(int('4f5aff66', 19), 4294967296)
860 self.assertEqual(int('3723ai4g', 20), 4294967296)
861 self.assertEqual(int('281d55i4', 21), 4294967296)
862 self.assertEqual(int('1fj8b184', 22), 4294967296)
863 self.assertEqual(int('1606k7ic', 23), 4294967296)
864 self.assertEqual(int('mb994ag', 24), 4294967296)
865 self.assertEqual(int('hek2mgl', 25), 4294967296)
866 self.assertEqual(int('dnchbnm', 26), 4294967296)
867 self.assertEqual(int('b28jpdm', 27), 4294967296)
868 self.assertEqual(int('8pfgih4', 28), 4294967296)
869 self.assertEqual(int('76beigg', 29), 4294967296)
870 self.assertEqual(int('5qmcpqg', 30), 4294967296)
871 self.assertEqual(int('4q0jto4', 31), 4294967296)
872 self.assertEqual(int('4000000', 32), 4294967296)
873 self.assertEqual(int('3aokq94', 33), 4294967296)
874 self.assertEqual(int('2qhxjli', 34), 4294967296)
875 self.assertEqual(int('2br45qb', 35), 4294967296)
876 self.assertEqual(int('1z141z4', 36), 4294967296)
Thomas Wouters477c8d52006-05-27 19:21:47 +0000877
878 # SF bug 1334662: int(string, base) wrong answers
879 # Checks for proper evaluation of 2**32 + 1
Guido van Rossume2a383d2007-01-15 16:59:06 +0000880 self.assertEqual(int('100000000000000000000000000000001', 2), 4294967297)
881 self.assertEqual(int('102002022201221111212', 3), 4294967297)
882 self.assertEqual(int('10000000000000001', 4), 4294967297)
883 self.assertEqual(int('32244002423142', 5), 4294967297)
884 self.assertEqual(int('1550104015505', 6), 4294967297)
885 self.assertEqual(int('211301422355', 7), 4294967297)
886 self.assertEqual(int('40000000001', 8), 4294967297)
887 self.assertEqual(int('12068657455', 9), 4294967297)
888 self.assertEqual(int('4294967297', 10), 4294967297)
889 self.assertEqual(int('1904440555', 11), 4294967297)
890 self.assertEqual(int('9ba461595', 12), 4294967297)
891 self.assertEqual(int('535a7988a', 13), 4294967297)
892 self.assertEqual(int('2ca5b7465', 14), 4294967297)
893 self.assertEqual(int('1a20dcd82', 15), 4294967297)
894 self.assertEqual(int('100000001', 16), 4294967297)
895 self.assertEqual(int('a7ffda92', 17), 4294967297)
896 self.assertEqual(int('704he7g5', 18), 4294967297)
897 self.assertEqual(int('4f5aff67', 19), 4294967297)
898 self.assertEqual(int('3723ai4h', 20), 4294967297)
899 self.assertEqual(int('281d55i5', 21), 4294967297)
900 self.assertEqual(int('1fj8b185', 22), 4294967297)
901 self.assertEqual(int('1606k7id', 23), 4294967297)
902 self.assertEqual(int('mb994ah', 24), 4294967297)
903 self.assertEqual(int('hek2mgm', 25), 4294967297)
904 self.assertEqual(int('dnchbnn', 26), 4294967297)
905 self.assertEqual(int('b28jpdn', 27), 4294967297)
906 self.assertEqual(int('8pfgih5', 28), 4294967297)
907 self.assertEqual(int('76beigh', 29), 4294967297)
908 self.assertEqual(int('5qmcpqh', 30), 4294967297)
909 self.assertEqual(int('4q0jto5', 31), 4294967297)
910 self.assertEqual(int('4000001', 32), 4294967297)
911 self.assertEqual(int('3aokq95', 33), 4294967297)
912 self.assertEqual(int('2qhxjlj', 34), 4294967297)
913 self.assertEqual(int('2br45qc', 35), 4294967297)
914 self.assertEqual(int('1z141z5', 36), 4294967297)
Thomas Wouters477c8d52006-05-27 19:21:47 +0000915
Brett Cannonc3647ac2005-04-26 03:45:26 +0000916 def test_intconversion(self):
917 # Test __int__()
Christian Heimes15ebc882008-02-04 18:48:49 +0000918 class ClassicMissingMethods:
919 pass
920 self.assertRaises(TypeError, int, ClassicMissingMethods())
921
922 class MissingMethods(object):
923 pass
924 self.assertRaises(TypeError, int, MissingMethods())
925
Brett Cannonc3647ac2005-04-26 03:45:26 +0000926 class Foo0:
927 def __int__(self):
928 return 42
929
930 class Foo1(object):
931 def __int__(self):
932 return 42
933
934 class Foo2(int):
935 def __int__(self):
936 return 42
937
938 class Foo3(int):
939 def __int__(self):
940 return self
941
942 class Foo4(int):
943 def __int__(self):
Guido van Rossume2a383d2007-01-15 16:59:06 +0000944 return 42
Brett Cannonc3647ac2005-04-26 03:45:26 +0000945
946 class Foo5(int):
947 def __int__(self):
948 return 42.
949
950 self.assertEqual(int(Foo0()), 42)
951 self.assertEqual(int(Foo1()), 42)
952 self.assertEqual(int(Foo2()), 42)
953 self.assertEqual(int(Foo3()), 0)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000954 self.assertEqual(int(Foo4()), 42)
Brett Cannonc3647ac2005-04-26 03:45:26 +0000955 self.assertRaises(TypeError, int, Foo5())
956
Christian Heimes15ebc882008-02-04 18:48:49 +0000957 class Classic:
958 pass
959 for base in (object, Classic):
960 class IntOverridesTrunc(base):
961 def __int__(self):
962 return 42
963 def __trunc__(self):
964 return -12
965 self.assertEqual(int(IntOverridesTrunc()), 42)
966
967 class JustTrunc(base):
968 def __trunc__(self):
969 return 42
970 self.assertEqual(int(JustTrunc()), 42)
971
972 for trunc_result_base in (object, Classic):
973 class Integral(trunc_result_base):
974 def __int__(self):
975 return 42
976
977 class TruncReturnsNonInt(base):
978 def __trunc__(self):
979 return Integral()
980 self.assertEqual(int(TruncReturnsNonInt()), 42)
981
982 class NonIntegral(trunc_result_base):
983 def __trunc__(self):
984 # Check that we avoid infinite recursion.
985 return NonIntegral()
986
987 class TruncReturnsNonIntegral(base):
988 def __trunc__(self):
989 return NonIntegral()
990 try:
991 int(TruncReturnsNonIntegral())
992 except TypeError as e:
993 self.assertEquals(str(e),
994 "__trunc__ returned non-Integral"
995 " (type NonIntegral)")
996 else:
997 self.fail("Failed to raise TypeError with %s" %
998 ((base, trunc_result_base),))
999
Walter Dörwald919497e2003-01-19 16:23:59 +00001000 def test_iter(self):
1001 self.assertRaises(TypeError, iter)
1002 self.assertRaises(TypeError, iter, 42, 42)
1003 lists = [("1", "2"), ["1", "2"], "12"]
Walter Dörwald919497e2003-01-19 16:23:59 +00001004 for l in lists:
1005 i = iter(l)
Georg Brandla18af4e2007-04-21 15:47:16 +00001006 self.assertEqual(next(i), '1')
1007 self.assertEqual(next(i), '2')
1008 self.assertRaises(StopIteration, next, i)
Walter Dörwald919497e2003-01-19 16:23:59 +00001009
1010 def test_isinstance(self):
1011 class C:
1012 pass
1013 class D(C):
1014 pass
1015 class E:
1016 pass
1017 c = C()
1018 d = D()
1019 e = E()
1020 self.assert_(isinstance(c, C))
1021 self.assert_(isinstance(d, C))
1022 self.assert_(not isinstance(e, C))
1023 self.assert_(not isinstance(c, D))
1024 self.assert_(not isinstance('foo', E))
1025 self.assertRaises(TypeError, isinstance, E, 'foo')
1026 self.assertRaises(TypeError, isinstance)
1027
1028 def test_issubclass(self):
1029 class C:
1030 pass
1031 class D(C):
1032 pass
1033 class E:
1034 pass
1035 c = C()
1036 d = D()
1037 e = E()
1038 self.assert_(issubclass(D, C))
1039 self.assert_(issubclass(C, C))
1040 self.assert_(not issubclass(C, D))
1041 self.assertRaises(TypeError, issubclass, 'foo', E)
1042 self.assertRaises(TypeError, issubclass, E, 'foo')
1043 self.assertRaises(TypeError, issubclass)
1044
1045 def test_len(self):
1046 self.assertEqual(len('123'), 3)
1047 self.assertEqual(len(()), 0)
1048 self.assertEqual(len((1, 2, 3, 4)), 4)
1049 self.assertEqual(len([1, 2, 3, 4]), 4)
1050 self.assertEqual(len({}), 0)
1051 self.assertEqual(len({'a':1, 'b': 2}), 2)
1052 class BadSeq:
1053 def __len__(self):
1054 raise ValueError
1055 self.assertRaises(ValueError, len, BadSeq())
1056
1057 def test_list(self):
1058 self.assertEqual(list([]), [])
1059 l0_3 = [0, 1, 2, 3]
1060 l0_3_bis = list(l0_3)
1061 self.assertEqual(l0_3, l0_3_bis)
1062 self.assert_(l0_3 is not l0_3_bis)
1063 self.assertEqual(list(()), [])
1064 self.assertEqual(list((0, 1, 2, 3)), [0, 1, 2, 3])
1065 self.assertEqual(list(''), [])
1066 self.assertEqual(list('spam'), ['s', 'p', 'a', 'm'])
1067
Christian Heimesa37d4c62007-12-04 23:02:19 +00001068 if sys.maxsize == 0x7fffffff:
Walter Dörwald919497e2003-01-19 16:23:59 +00001069 # This test can currently only work on 32-bit machines.
1070 # XXX If/when PySequence_Length() returns a ssize_t, it should be
1071 # XXX re-enabled.
1072 # Verify clearing of bug #556025.
Christian Heimesa37d4c62007-12-04 23:02:19 +00001073 # This assumes that the max data size (sys.maxsize) == max
Walter Dörwald919497e2003-01-19 16:23:59 +00001074 # address size this also assumes that the address size is at
1075 # least 4 bytes with 8 byte addresses, the bug is not well
1076 # tested
1077 #
1078 # Note: This test is expected to SEGV under Cygwin 1.3.12 or
1079 # earlier due to a newlib bug. See the following mailing list
1080 # thread for the details:
1081
1082 # http://sources.redhat.com/ml/newlib/2002/msg00369.html
Christian Heimesa37d4c62007-12-04 23:02:19 +00001083 self.assertRaises(MemoryError, list, range(sys.maxsize // 2))
Walter Dörwald919497e2003-01-19 16:23:59 +00001084
Raymond Hettingeraa241e02004-09-26 19:24:20 +00001085 # This code used to segfault in Py2.4a3
1086 x = []
1087 x.extend(-y for y in x)
1088 self.assertEqual(x, [])
1089
Walter Dörwald919497e2003-01-19 16:23:59 +00001090 def test_long(self):
Guido van Rossume2a383d2007-01-15 16:59:06 +00001091 self.assertEqual(int(314), 314)
1092 self.assertEqual(int(3.14), 3)
1093 self.assertEqual(int(314), 314)
Walter Dörwald919497e2003-01-19 16:23:59 +00001094 # Check that conversion from float truncates towards zero
Guido van Rossume2a383d2007-01-15 16:59:06 +00001095 self.assertEqual(int(-3.14), -3)
1096 self.assertEqual(int(3.9), 3)
1097 self.assertEqual(int(-3.9), -3)
1098 self.assertEqual(int(3.5), 3)
1099 self.assertEqual(int(-3.5), -3)
1100 self.assertEqual(int("-3"), -3)
Walter Dörwald919497e2003-01-19 16:23:59 +00001101 # Different base:
Guido van Rossume2a383d2007-01-15 16:59:06 +00001102 self.assertEqual(int("10",16), 16)
Walter Dörwald919497e2003-01-19 16:23:59 +00001103 # Check conversions from string (same test set as for int(), and then some)
1104 LL = [
Guido van Rossume2a383d2007-01-15 16:59:06 +00001105 ('1' + '0'*20, 10**20),
1106 ('1' + '0'*100, 10**100)
Walter Dörwald919497e2003-01-19 16:23:59 +00001107 ]
Walter Dörwald1f5947b2007-05-22 16:52:54 +00001108 for s, v in LL:
Walter Dörwald919497e2003-01-19 16:23:59 +00001109 for sign in "", "+", "-":
1110 for prefix in "", " ", "\t", " \t\t ":
1111 ss = prefix + sign + s
1112 vv = v
1113 if sign == "-" and v is not ValueError:
1114 vv = -v
1115 try:
Guido van Rossume2a383d2007-01-15 16:59:06 +00001116 self.assertEqual(int(ss), int(vv))
Walter Dörwald919497e2003-01-19 16:23:59 +00001117 except v:
1118 pass
1119
Guido van Rossume2a383d2007-01-15 16:59:06 +00001120 self.assertRaises(ValueError, int, '123\0')
1121 self.assertRaises(ValueError, int, '53', 40)
1122 self.assertRaises(TypeError, int, 1, 12)
Walter Dörwald919497e2003-01-19 16:23:59 +00001123
Guido van Rossumd8faa362007-04-27 19:54:29 +00001124 # SF patch #1638879: embedded NULs were not detected with
1125 # explicit base
1126 self.assertRaises(ValueError, int, '123\0', 10)
1127 self.assertRaises(ValueError, int, '123\x00 245', 20)
1128
Guido van Rossume2a383d2007-01-15 16:59:06 +00001129 self.assertEqual(int('100000000000000000000000000000000', 2),
Thomas Wouters477c8d52006-05-27 19:21:47 +00001130 4294967296)
Guido van Rossume2a383d2007-01-15 16:59:06 +00001131 self.assertEqual(int('102002022201221111211', 3), 4294967296)
1132 self.assertEqual(int('10000000000000000', 4), 4294967296)
1133 self.assertEqual(int('32244002423141', 5), 4294967296)
1134 self.assertEqual(int('1550104015504', 6), 4294967296)
1135 self.assertEqual(int('211301422354', 7), 4294967296)
1136 self.assertEqual(int('40000000000', 8), 4294967296)
1137 self.assertEqual(int('12068657454', 9), 4294967296)
1138 self.assertEqual(int('4294967296', 10), 4294967296)
1139 self.assertEqual(int('1904440554', 11), 4294967296)
1140 self.assertEqual(int('9ba461594', 12), 4294967296)
1141 self.assertEqual(int('535a79889', 13), 4294967296)
1142 self.assertEqual(int('2ca5b7464', 14), 4294967296)
1143 self.assertEqual(int('1a20dcd81', 15), 4294967296)
1144 self.assertEqual(int('100000000', 16), 4294967296)
1145 self.assertEqual(int('a7ffda91', 17), 4294967296)
1146 self.assertEqual(int('704he7g4', 18), 4294967296)
1147 self.assertEqual(int('4f5aff66', 19), 4294967296)
1148 self.assertEqual(int('3723ai4g', 20), 4294967296)
1149 self.assertEqual(int('281d55i4', 21), 4294967296)
1150 self.assertEqual(int('1fj8b184', 22), 4294967296)
1151 self.assertEqual(int('1606k7ic', 23), 4294967296)
1152 self.assertEqual(int('mb994ag', 24), 4294967296)
1153 self.assertEqual(int('hek2mgl', 25), 4294967296)
1154 self.assertEqual(int('dnchbnm', 26), 4294967296)
1155 self.assertEqual(int('b28jpdm', 27), 4294967296)
1156 self.assertEqual(int('8pfgih4', 28), 4294967296)
1157 self.assertEqual(int('76beigg', 29), 4294967296)
1158 self.assertEqual(int('5qmcpqg', 30), 4294967296)
1159 self.assertEqual(int('4q0jto4', 31), 4294967296)
1160 self.assertEqual(int('4000000', 32), 4294967296)
1161 self.assertEqual(int('3aokq94', 33), 4294967296)
1162 self.assertEqual(int('2qhxjli', 34), 4294967296)
1163 self.assertEqual(int('2br45qb', 35), 4294967296)
1164 self.assertEqual(int('1z141z4', 36), 4294967296)
Thomas Wouters477c8d52006-05-27 19:21:47 +00001165
Guido van Rossume2a383d2007-01-15 16:59:06 +00001166 self.assertEqual(int('100000000000000000000000000000001', 2),
Thomas Wouters477c8d52006-05-27 19:21:47 +00001167 4294967297)
Guido van Rossume2a383d2007-01-15 16:59:06 +00001168 self.assertEqual(int('102002022201221111212', 3), 4294967297)
1169 self.assertEqual(int('10000000000000001', 4), 4294967297)
1170 self.assertEqual(int('32244002423142', 5), 4294967297)
1171 self.assertEqual(int('1550104015505', 6), 4294967297)
1172 self.assertEqual(int('211301422355', 7), 4294967297)
1173 self.assertEqual(int('40000000001', 8), 4294967297)
1174 self.assertEqual(int('12068657455', 9), 4294967297)
1175 self.assertEqual(int('4294967297', 10), 4294967297)
1176 self.assertEqual(int('1904440555', 11), 4294967297)
1177 self.assertEqual(int('9ba461595', 12), 4294967297)
1178 self.assertEqual(int('535a7988a', 13), 4294967297)
1179 self.assertEqual(int('2ca5b7465', 14), 4294967297)
1180 self.assertEqual(int('1a20dcd82', 15), 4294967297)
1181 self.assertEqual(int('100000001', 16), 4294967297)
1182 self.assertEqual(int('a7ffda92', 17), 4294967297)
1183 self.assertEqual(int('704he7g5', 18), 4294967297)
1184 self.assertEqual(int('4f5aff67', 19), 4294967297)
1185 self.assertEqual(int('3723ai4h', 20), 4294967297)
1186 self.assertEqual(int('281d55i5', 21), 4294967297)
1187 self.assertEqual(int('1fj8b185', 22), 4294967297)
1188 self.assertEqual(int('1606k7id', 23), 4294967297)
1189 self.assertEqual(int('mb994ah', 24), 4294967297)
1190 self.assertEqual(int('hek2mgm', 25), 4294967297)
1191 self.assertEqual(int('dnchbnn', 26), 4294967297)
1192 self.assertEqual(int('b28jpdn', 27), 4294967297)
1193 self.assertEqual(int('8pfgih5', 28), 4294967297)
1194 self.assertEqual(int('76beigh', 29), 4294967297)
1195 self.assertEqual(int('5qmcpqh', 30), 4294967297)
1196 self.assertEqual(int('4q0jto5', 31), 4294967297)
1197 self.assertEqual(int('4000001', 32), 4294967297)
1198 self.assertEqual(int('3aokq95', 33), 4294967297)
1199 self.assertEqual(int('2qhxjlj', 34), 4294967297)
1200 self.assertEqual(int('2br45qc', 35), 4294967297)
1201 self.assertEqual(int('1z141z5', 36), 4294967297)
Thomas Wouters477c8d52006-05-27 19:21:47 +00001202
Brett Cannonc3647ac2005-04-26 03:45:26 +00001203 def test_longconversion(self):
1204 # Test __long__()
1205 class Foo0:
1206 def __long__(self):
Guido van Rossume2a383d2007-01-15 16:59:06 +00001207 return 42
Brett Cannonc3647ac2005-04-26 03:45:26 +00001208
1209 class Foo1(object):
1210 def __long__(self):
Guido van Rossume2a383d2007-01-15 16:59:06 +00001211 return 42
Brett Cannonc3647ac2005-04-26 03:45:26 +00001212
Guido van Rossume2a383d2007-01-15 16:59:06 +00001213 class Foo2(int):
Brett Cannonc3647ac2005-04-26 03:45:26 +00001214 def __long__(self):
1215 return 42
1216
Guido van Rossume2a383d2007-01-15 16:59:06 +00001217 class Foo3(int):
1218 def __long__(self):
1219 return self
1220
1221 class Foo4(int):
1222 def __long__(self):
1223 return 42
1224
1225 class Foo5(int):
Brett Cannonc3647ac2005-04-26 03:45:26 +00001226 def __long__(self):
1227 return 42.
1228
Guido van Rossume2a383d2007-01-15 16:59:06 +00001229 self.assertEqual(int(Foo0()), 42)
1230 self.assertEqual(int(Foo1()), 42)
Guido van Rossumd8faa362007-04-27 19:54:29 +00001231 # XXX invokes __int__ now
Guido van Rossumddefaf32007-01-14 03:31:43 +00001232 # self.assertEqual(long(Foo2()), 42L)
Guido van Rossume2a383d2007-01-15 16:59:06 +00001233 self.assertEqual(int(Foo3()), 0)
Guido van Rossumd8faa362007-04-27 19:54:29 +00001234 # XXX likewise
Guido van Rossumddefaf32007-01-14 03:31:43 +00001235 # self.assertEqual(long(Foo4()), 42)
1236 # self.assertRaises(TypeError, long, Foo5())
Brett Cannonc3647ac2005-04-26 03:45:26 +00001237
Walter Dörwald919497e2003-01-19 16:23:59 +00001238 def test_map(self):
1239 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001240 list(map(lambda x: x*x, range(1,4))),
Walter Dörwald919497e2003-01-19 16:23:59 +00001241 [1, 4, 9]
1242 )
1243 try:
1244 from math import sqrt
1245 except ImportError:
1246 def sqrt(x):
1247 return pow(x, 0.5)
1248 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001249 list(map(lambda x: list(map(sqrt, x)), [[16, 4], [81, 9]])),
Walter Dörwald919497e2003-01-19 16:23:59 +00001250 [[4.0, 2.0], [9.0, 3.0]]
1251 )
1252 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001253 list(map(lambda x, y: x+y, [1,3,2], [9,1,4])),
Walter Dörwald919497e2003-01-19 16:23:59 +00001254 [10, 4, 6]
1255 )
1256
1257 def plus(*v):
1258 accu = 0
1259 for i in v: accu = accu + i
1260 return accu
1261 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001262 list(map(plus, [1, 3, 7])),
Walter Dörwald919497e2003-01-19 16:23:59 +00001263 [1, 3, 7]
1264 )
1265 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001266 list(map(plus, [1, 3, 7], [4, 9, 2])),
Walter Dörwald919497e2003-01-19 16:23:59 +00001267 [1+4, 3+9, 7+2]
1268 )
1269 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001270 list(map(plus, [1, 3, 7], [4, 9, 2], [1, 1, 0])),
Walter Dörwald919497e2003-01-19 16:23:59 +00001271 [1+4+1, 3+9+1, 7+2+0]
1272 )
1273 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001274 list(map(int, Squares(10))),
Walter Dörwald919497e2003-01-19 16:23:59 +00001275 [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
1276 )
Guido van Rossum47b9ff62006-08-24 00:41:19 +00001277 def Max(a, b):
1278 if a is None:
1279 return b
1280 if b is None:
1281 return a
1282 return max(a, b)
Walter Dörwald919497e2003-01-19 16:23:59 +00001283 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001284 list(map(Max, Squares(3), Squares(2))),
1285 [0, 1]
Walter Dörwald919497e2003-01-19 16:23:59 +00001286 )
1287 self.assertRaises(TypeError, map)
1288 self.assertRaises(TypeError, map, lambda x: x, 42)
Walter Dörwald919497e2003-01-19 16:23:59 +00001289 class BadSeq:
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001290 def __iter__(self):
Walter Dörwald919497e2003-01-19 16:23:59 +00001291 raise ValueError
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001292 yield None
1293 self.assertRaises(ValueError, list, map(lambda x: x, BadSeq()))
Neal Norwitzfcf44352005-11-27 20:37:43 +00001294 def badfunc(x):
1295 raise RuntimeError
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001296 self.assertRaises(RuntimeError, list, map(badfunc, range(5)))
Walter Dörwald919497e2003-01-19 16:23:59 +00001297
1298 def test_max(self):
1299 self.assertEqual(max('123123'), '3')
1300 self.assertEqual(max(1, 2, 3), 3)
1301 self.assertEqual(max((1, 2, 3, 1, 2, 3)), 3)
1302 self.assertEqual(max([1, 2, 3, 1, 2, 3]), 3)
1303
Guido van Rossume2a383d2007-01-15 16:59:06 +00001304 self.assertEqual(max(1, 2, 3.0), 3.0)
1305 self.assertEqual(max(1, 2.0, 3), 3)
1306 self.assertEqual(max(1.0, 2, 3), 3)
Walter Dörwald919497e2003-01-19 16:23:59 +00001307
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001308 for stmt in (
1309 "max(key=int)", # no args
1310 "max(1, key=int)", # single arg not iterable
1311 "max(1, 2, keystone=int)", # wrong keyword
1312 "max(1, 2, key=int, abc=int)", # two many keywords
1313 "max(1, 2, key=1)", # keyfunc is not callable
1314 ):
Tim Peters7f061872004-12-07 21:17:46 +00001315 try:
Georg Brandl7cae87c2006-09-06 06:51:57 +00001316 exec(stmt, globals())
Tim Peters7f061872004-12-07 21:17:46 +00001317 except TypeError:
1318 pass
1319 else:
1320 self.fail(stmt)
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001321
1322 self.assertEqual(max((1,), key=neg), 1) # one elem iterable
1323 self.assertEqual(max((1,2), key=neg), 1) # two elem iterable
1324 self.assertEqual(max(1, 2, key=neg), 1) # two elems
1325
1326 data = [random.randrange(200) for i in range(100)]
1327 keys = dict((elem, random.randrange(50)) for elem in data)
1328 f = keys.__getitem__
1329 self.assertEqual(max(data, key=f),
1330 sorted(reversed(data), key=f)[-1])
1331
Walter Dörwald919497e2003-01-19 16:23:59 +00001332 def test_min(self):
1333 self.assertEqual(min('123123'), '1')
1334 self.assertEqual(min(1, 2, 3), 1)
1335 self.assertEqual(min((1, 2, 3, 1, 2, 3)), 1)
1336 self.assertEqual(min([1, 2, 3, 1, 2, 3]), 1)
1337
Guido van Rossume2a383d2007-01-15 16:59:06 +00001338 self.assertEqual(min(1, 2, 3.0), 1)
1339 self.assertEqual(min(1, 2.0, 3), 1)
1340 self.assertEqual(min(1.0, 2, 3), 1.0)
Walter Dörwald919497e2003-01-19 16:23:59 +00001341
1342 self.assertRaises(TypeError, min)
1343 self.assertRaises(TypeError, min, 42)
1344 self.assertRaises(ValueError, min, ())
1345 class BadSeq:
1346 def __getitem__(self, index):
1347 raise ValueError
1348 self.assertRaises(ValueError, min, BadSeq())
1349 class BadNumber:
1350 def __cmp__(self, other):
1351 raise ValueError
Guido van Rossum47b9ff62006-08-24 00:41:19 +00001352 self.assertRaises(TypeError, min, (42, BadNumber()))
Walter Dörwald919497e2003-01-19 16:23:59 +00001353
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001354 for stmt in (
1355 "min(key=int)", # no args
1356 "min(1, key=int)", # single arg not iterable
1357 "min(1, 2, keystone=int)", # wrong keyword
1358 "min(1, 2, key=int, abc=int)", # two many keywords
1359 "min(1, 2, key=1)", # keyfunc is not callable
1360 ):
Tim Peters7f061872004-12-07 21:17:46 +00001361 try:
Georg Brandl7cae87c2006-09-06 06:51:57 +00001362 exec(stmt, globals())
Tim Peters7f061872004-12-07 21:17:46 +00001363 except TypeError:
1364 pass
1365 else:
1366 self.fail(stmt)
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001367
1368 self.assertEqual(min((1,), key=neg), 1) # one elem iterable
1369 self.assertEqual(min((1,2), key=neg), 2) # two elem iterable
1370 self.assertEqual(min(1, 2, key=neg), 2) # two elems
1371
1372 data = [random.randrange(200) for i in range(100)]
1373 keys = dict((elem, random.randrange(50)) for elem in data)
1374 f = keys.__getitem__
1375 self.assertEqual(min(data, key=f),
1376 sorted(data, key=f)[0])
1377
Georg Brandla18af4e2007-04-21 15:47:16 +00001378 def test_next(self):
1379 it = iter(range(2))
1380 self.assertEqual(next(it), 0)
1381 self.assertEqual(next(it), 1)
1382 self.assertRaises(StopIteration, next, it)
1383 self.assertRaises(StopIteration, next, it)
1384 self.assertEquals(next(it, 42), 42)
1385
1386 class Iter(object):
1387 def __iter__(self):
1388 return self
1389 def __next__(self):
1390 raise StopIteration
1391
1392 it = iter(Iter())
1393 self.assertEquals(next(it, 42), 42)
1394 self.assertRaises(StopIteration, next, it)
1395
1396 def gen():
1397 yield 1
1398 return
1399
1400 it = gen()
1401 self.assertEquals(next(it), 1)
1402 self.assertRaises(StopIteration, next, it)
1403 self.assertEquals(next(it, 42), 42)
1404
Walter Dörwald919497e2003-01-19 16:23:59 +00001405 def test_oct(self):
Guido van Rossumcd16bf62007-06-13 18:07:49 +00001406 self.assertEqual(oct(100), '0o144')
1407 self.assertEqual(oct(100), '0o144')
1408 self.assertEqual(oct(-100), '-0o144')
1409 self.assertEqual(oct(-100), '-0o144')
Walter Dörwald919497e2003-01-19 16:23:59 +00001410 self.assertRaises(TypeError, oct, ())
1411
1412 def write_testfile(self):
Guido van Rossuma88a0332007-02-26 16:59:55 +00001413 # NB the first 4 lines are also used to test input, below
Walter Dörwald919497e2003-01-19 16:23:59 +00001414 fp = open(TESTFN, 'w')
1415 try:
1416 fp.write('1+1\n')
1417 fp.write('1+1\n')
1418 fp.write('The quick brown fox jumps over the lazy dog')
1419 fp.write('.\n')
1420 fp.write('Dear John\n')
1421 fp.write('XXX'*100)
1422 fp.write('YYY'*100)
1423 finally:
1424 fp.close()
1425
1426 def test_open(self):
1427 self.write_testfile()
1428 fp = open(TESTFN, 'r')
1429 try:
1430 self.assertEqual(fp.readline(4), '1+1\n')
1431 self.assertEqual(fp.readline(4), '1+1\n')
1432 self.assertEqual(fp.readline(), 'The quick brown fox jumps over the lazy dog.\n')
1433 self.assertEqual(fp.readline(4), 'Dear')
1434 self.assertEqual(fp.readline(100), ' John\n')
1435 self.assertEqual(fp.read(300), 'XXX'*100)
1436 self.assertEqual(fp.read(1000), 'YYY'*100)
1437 finally:
1438 fp.close()
1439 unlink(TESTFN)
1440
1441 def test_ord(self):
1442 self.assertEqual(ord(' '), 32)
1443 self.assertEqual(ord('A'), 65)
1444 self.assertEqual(ord('a'), 97)
Guido van Rossumf9e91c92007-05-08 21:05:48 +00001445 self.assertEqual(ord('\x80'), 128)
1446 self.assertEqual(ord('\xff'), 255)
1447
1448 self.assertEqual(ord(b' '), 32)
1449 self.assertEqual(ord(b'A'), 65)
1450 self.assertEqual(ord(b'a'), 97)
1451 self.assertEqual(ord(b'\x80'), 128)
1452 self.assertEqual(ord(b'\xff'), 255)
1453
Walter Dörwald1f5947b2007-05-22 16:52:54 +00001454 self.assertEqual(ord(chr(sys.maxunicode)), sys.maxunicode)
Walter Dörwald919497e2003-01-19 16:23:59 +00001455 self.assertRaises(TypeError, ord, 42)
Walter Dörwald919497e2003-01-19 16:23:59 +00001456
Guido van Rossum8ac004e2007-07-15 13:00:05 +00001457 self.assertEqual(ord(chr(0x10FFFF)), 0x10FFFF)
1458 self.assertEqual(ord("\U0000FFFF"), 0x0000FFFF)
1459 self.assertEqual(ord("\U00010000"), 0x00010000)
1460 self.assertEqual(ord("\U00010001"), 0x00010001)
1461 self.assertEqual(ord("\U000FFFFE"), 0x000FFFFE)
1462 self.assertEqual(ord("\U000FFFFF"), 0x000FFFFF)
1463 self.assertEqual(ord("\U00100000"), 0x00100000)
1464 self.assertEqual(ord("\U00100001"), 0x00100001)
1465 self.assertEqual(ord("\U0010FFFE"), 0x0010FFFE)
1466 self.assertEqual(ord("\U0010FFFF"), 0x0010FFFF)
1467
Walter Dörwald919497e2003-01-19 16:23:59 +00001468 def test_pow(self):
1469 self.assertEqual(pow(0,0), 1)
1470 self.assertEqual(pow(0,1), 0)
1471 self.assertEqual(pow(1,0), 1)
1472 self.assertEqual(pow(1,1), 1)
1473
1474 self.assertEqual(pow(2,0), 1)
1475 self.assertEqual(pow(2,10), 1024)
1476 self.assertEqual(pow(2,20), 1024*1024)
1477 self.assertEqual(pow(2,30), 1024*1024*1024)
1478
1479 self.assertEqual(pow(-2,0), 1)
1480 self.assertEqual(pow(-2,1), -2)
1481 self.assertEqual(pow(-2,2), 4)
1482 self.assertEqual(pow(-2,3), -8)
1483
Guido van Rossume2a383d2007-01-15 16:59:06 +00001484 self.assertEqual(pow(0,0), 1)
1485 self.assertEqual(pow(0,1), 0)
1486 self.assertEqual(pow(1,0), 1)
1487 self.assertEqual(pow(1,1), 1)
Walter Dörwald919497e2003-01-19 16:23:59 +00001488
Guido van Rossume2a383d2007-01-15 16:59:06 +00001489 self.assertEqual(pow(2,0), 1)
1490 self.assertEqual(pow(2,10), 1024)
1491 self.assertEqual(pow(2,20), 1024*1024)
1492 self.assertEqual(pow(2,30), 1024*1024*1024)
Walter Dörwald919497e2003-01-19 16:23:59 +00001493
Guido van Rossume2a383d2007-01-15 16:59:06 +00001494 self.assertEqual(pow(-2,0), 1)
1495 self.assertEqual(pow(-2,1), -2)
1496 self.assertEqual(pow(-2,2), 4)
1497 self.assertEqual(pow(-2,3), -8)
Walter Dörwald919497e2003-01-19 16:23:59 +00001498
1499 self.assertAlmostEqual(pow(0.,0), 1.)
1500 self.assertAlmostEqual(pow(0.,1), 0.)
1501 self.assertAlmostEqual(pow(1.,0), 1.)
1502 self.assertAlmostEqual(pow(1.,1), 1.)
1503
1504 self.assertAlmostEqual(pow(2.,0), 1.)
1505 self.assertAlmostEqual(pow(2.,10), 1024.)
1506 self.assertAlmostEqual(pow(2.,20), 1024.*1024.)
1507 self.assertAlmostEqual(pow(2.,30), 1024.*1024.*1024.)
1508
1509 self.assertAlmostEqual(pow(-2.,0), 1.)
1510 self.assertAlmostEqual(pow(-2.,1), -2.)
1511 self.assertAlmostEqual(pow(-2.,2), 4.)
1512 self.assertAlmostEqual(pow(-2.,3), -8.)
1513
Guido van Rossume2a383d2007-01-15 16:59:06 +00001514 for x in 2, 2, 2.0:
1515 for y in 10, 10, 10.0:
1516 for z in 1000, 1000, 1000.0:
Walter Dörwald919497e2003-01-19 16:23:59 +00001517 if isinstance(x, float) or \
1518 isinstance(y, float) or \
1519 isinstance(z, float):
1520 self.assertRaises(TypeError, pow, x, y, z)
1521 else:
1522 self.assertAlmostEqual(pow(x, y, z), 24.0)
1523
Jeffrey Yasskin3404b3c2007-09-07 15:15:49 +00001524 self.assertAlmostEqual(pow(-1, 0.5), 1j)
1525 self.assertAlmostEqual(pow(-1, 1/3), 0.5 + 0.8660254037844386j)
1526
Walter Dörwald919497e2003-01-19 16:23:59 +00001527 self.assertRaises(TypeError, pow, -1, -2, 3)
1528 self.assertRaises(ValueError, pow, 1, 2, 0)
Guido van Rossume2a383d2007-01-15 16:59:06 +00001529 self.assertRaises(TypeError, pow, -1, -2, 3)
1530 self.assertRaises(ValueError, pow, 1, 2, 0)
Walter Dörwald919497e2003-01-19 16:23:59 +00001531
1532 self.assertRaises(TypeError, pow)
1533
1534 def test_range(self):
Guido van Rossum805365e2007-05-07 22:24:25 +00001535 self.assertEqual(list(range(3)), [0, 1, 2])
1536 self.assertEqual(list(range(1, 5)), [1, 2, 3, 4])
1537 self.assertEqual(list(range(0)), [])
1538 self.assertEqual(list(range(-3)), [])
1539 self.assertEqual(list(range(1, 10, 3)), [1, 4, 7])
1540 #self.assertEqual(list(range(5, -5, -3)), [5, 2, -1, -4])
Walter Dörwald919497e2003-01-19 16:23:59 +00001541
Guido van Rossum805365e2007-05-07 22:24:25 +00001542 """ XXX(nnorwitz):
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001543 # Now test range() with longs
Guido van Rossum805365e2007-05-07 22:24:25 +00001544 self.assertEqual(list(range(-2**100)), [])
1545 self.assertEqual(list(range(0, -2**100)), [])
1546 self.assertEqual(list(range(0, 2**100, -1)), [])
1547 self.assertEqual(list(range(0, 2**100, -1)), [])
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001548
Christian Heimesa37d4c62007-12-04 23:02:19 +00001549 a = int(10 * sys.maxsize)
1550 b = int(100 * sys.maxsize)
1551 c = int(50 * sys.maxsize)
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001552
Guido van Rossum805365e2007-05-07 22:24:25 +00001553 self.assertEqual(list(range(a, a+2)), [a, a+1])
1554 self.assertEqual(list(range(a+2, a, -1)), [a+2, a+1])
1555 self.assertEqual(list(range(a+4, a, -2)), [a+4, a+2])
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001556
Guido van Rossum805365e2007-05-07 22:24:25 +00001557 seq = list(range(a, b, c))
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001558 self.assert_(a in seq)
1559 self.assert_(b not in seq)
1560 self.assertEqual(len(seq), 2)
1561
Guido van Rossum805365e2007-05-07 22:24:25 +00001562 seq = list(range(b, a, -c))
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001563 self.assert_(b in seq)
1564 self.assert_(a not in seq)
1565 self.assertEqual(len(seq), 2)
1566
Guido van Rossum805365e2007-05-07 22:24:25 +00001567 seq = list(range(-a, -b, -c))
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001568 self.assert_(-a in seq)
1569 self.assert_(-b not in seq)
1570 self.assertEqual(len(seq), 2)
1571
Walter Dörwald919497e2003-01-19 16:23:59 +00001572 self.assertRaises(TypeError, range)
1573 self.assertRaises(TypeError, range, 1, 2, 3, 4)
1574 self.assertRaises(ValueError, range, 1, 2, 0)
Guido van Rossume2a383d2007-01-15 16:59:06 +00001575 self.assertRaises(ValueError, range, a, a + 1, int(0))
Neal Norwitzfcf44352005-11-27 20:37:43 +00001576
1577 class badzero(int):
Guido van Rossum47b9ff62006-08-24 00:41:19 +00001578 def __eq__(self, other):
Neal Norwitzfcf44352005-11-27 20:37:43 +00001579 raise RuntimeError
Guido van Rossum47b9ff62006-08-24 00:41:19 +00001580 __ne__ = __lt__ = __gt__ = __le__ = __ge__ = __eq__
1581
1582 # XXX This won't (but should!) raise RuntimeError if a is an int...
Neal Norwitzfcf44352005-11-27 20:37:43 +00001583 self.assertRaises(RuntimeError, range, a, a + 1, badzero(1))
Guido van Rossum805365e2007-05-07 22:24:25 +00001584 """
Walter Dörwald919497e2003-01-19 16:23:59 +00001585
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001586 # Reject floats when it would require PyLongs to represent.
1587 # (smaller floats still accepted, but deprecated)
Tim Peters299b3df2003-04-15 14:40:03 +00001588 self.assertRaises(TypeError, range, 1e100, 1e101, 1e101)
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001589
Walter Dörwald357981e2003-04-15 18:59:28 +00001590 self.assertRaises(TypeError, range, 0, "spam")
1591 self.assertRaises(TypeError, range, 0, 42, "spam")
1592
Christian Heimesa37d4c62007-12-04 23:02:19 +00001593 #NEAL self.assertRaises(OverflowError, range, -sys.maxsize, sys.maxsize)
1594 #NEAL self.assertRaises(OverflowError, range, 0, 2*sys.maxsize)
Guido van Rossum805365e2007-05-07 22:24:25 +00001595
Christian Heimesa37d4c62007-12-04 23:02:19 +00001596 self.assertRaises(OverflowError, len, range(0, sys.maxsize**10))
Walter Dörwald357981e2003-04-15 18:59:28 +00001597
Guido van Rossuma88a0332007-02-26 16:59:55 +00001598 def test_input(self):
1599 self.write_testfile()
1600 fp = open(TESTFN, 'r')
1601 savestdin = sys.stdin
1602 savestdout = sys.stdout # Eats the echo
1603 try:
1604 sys.stdin = fp
1605 sys.stdout = BitBucket()
1606 self.assertEqual(input(), "1+1")
1607 self.assertEqual(input('testing\n'), "1+1")
1608 self.assertEqual(input(), 'The quick brown fox jumps over the lazy dog.')
1609 self.assertEqual(input('testing\n'), 'Dear John')
1610
1611 # SF 1535165: don't segfault on closed stdin
1612 # sys.stdout must be a regular file for triggering
1613 sys.stdout = savestdout
1614 sys.stdin.close()
1615 self.assertRaises(ValueError, input)
1616
1617 sys.stdout = BitBucket()
Guido van Rossum34d19282007-08-09 01:03:29 +00001618 sys.stdin = io.StringIO("NULL\0")
Guido van Rossuma88a0332007-02-26 16:59:55 +00001619 self.assertRaises(TypeError, input, 42, 42)
Guido van Rossum34d19282007-08-09 01:03:29 +00001620 sys.stdin = io.StringIO(" 'whitespace'")
Guido van Rossuma88a0332007-02-26 16:59:55 +00001621 self.assertEqual(input(), " 'whitespace'")
Guido van Rossum34d19282007-08-09 01:03:29 +00001622 sys.stdin = io.StringIO()
Guido van Rossuma88a0332007-02-26 16:59:55 +00001623 self.assertRaises(EOFError, input)
1624
1625 del sys.stdout
1626 self.assertRaises(RuntimeError, input, 'prompt')
1627 del sys.stdin
1628 self.assertRaises(RuntimeError, input, 'prompt')
1629 finally:
1630 sys.stdin = savestdin
1631 sys.stdout = savestdout
1632 fp.close()
1633 unlink(TESTFN)
1634
Walter Dörwald919497e2003-01-19 16:23:59 +00001635 def test_repr(self):
1636 self.assertEqual(repr(''), '\'\'')
1637 self.assertEqual(repr(0), '0')
Guido van Rossume2a383d2007-01-15 16:59:06 +00001638 self.assertEqual(repr(0), '0')
Walter Dörwald919497e2003-01-19 16:23:59 +00001639 self.assertEqual(repr(()), '()')
1640 self.assertEqual(repr([]), '[]')
1641 self.assertEqual(repr({}), '{}')
1642 a = []
1643 a.append(a)
1644 self.assertEqual(repr(a), '[[...]]')
1645 a = {}
1646 a[0] = a
1647 self.assertEqual(repr(a), '{0: {...}}')
1648
1649 def test_round(self):
1650 self.assertEqual(round(0.0), 0.0)
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001651 self.assertEqual(type(round(0.0)), int)
Walter Dörwald919497e2003-01-19 16:23:59 +00001652 self.assertEqual(round(1.0), 1.0)
1653 self.assertEqual(round(10.0), 10.0)
1654 self.assertEqual(round(1000000000.0), 1000000000.0)
1655 self.assertEqual(round(1e20), 1e20)
1656
1657 self.assertEqual(round(-1.0), -1.0)
1658 self.assertEqual(round(-10.0), -10.0)
1659 self.assertEqual(round(-1000000000.0), -1000000000.0)
1660 self.assertEqual(round(-1e20), -1e20)
1661
1662 self.assertEqual(round(0.1), 0.0)
1663 self.assertEqual(round(1.1), 1.0)
1664 self.assertEqual(round(10.1), 10.0)
1665 self.assertEqual(round(1000000000.1), 1000000000.0)
1666
1667 self.assertEqual(round(-1.1), -1.0)
1668 self.assertEqual(round(-10.1), -10.0)
1669 self.assertEqual(round(-1000000000.1), -1000000000.0)
1670
1671 self.assertEqual(round(0.9), 1.0)
1672 self.assertEqual(round(9.9), 10.0)
1673 self.assertEqual(round(999999999.9), 1000000000.0)
1674
1675 self.assertEqual(round(-0.9), -1.0)
1676 self.assertEqual(round(-9.9), -10.0)
1677 self.assertEqual(round(-999999999.9), -1000000000.0)
1678
1679 self.assertEqual(round(-8.0, -1), -10.0)
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001680 self.assertEqual(type(round(-8.0, -1)), float)
1681
1682 self.assertEqual(type(round(-8.0, 0)), float)
1683 self.assertEqual(type(round(-8.0, 1)), float)
1684
1685 # Check even / odd rounding behaviour
1686 self.assertEqual(round(5.5), 6)
1687 self.assertEqual(round(6.5), 6)
1688 self.assertEqual(round(-5.5), -6)
1689 self.assertEqual(round(-6.5), -6)
1690
1691 # Check behavior on ints
1692 self.assertEqual(round(0), 0)
1693 self.assertEqual(round(8), 8)
1694 self.assertEqual(round(-8), -8)
1695 self.assertEqual(type(round(0)), int)
1696 self.assertEqual(type(round(-8, -1)), float)
1697 self.assertEqual(type(round(-8, 0)), float)
1698 self.assertEqual(type(round(-8, 1)), float)
Walter Dörwald919497e2003-01-19 16:23:59 +00001699
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001700 # test new kwargs
1701 self.assertEqual(round(number=-8.0, ndigits=-1), -10.0)
1702
Walter Dörwald919497e2003-01-19 16:23:59 +00001703 self.assertRaises(TypeError, round)
1704
Alex Martelliae211f92007-08-22 23:21:33 +00001705 # test generic rounding delegation for reals
1706 class TestRound:
1707 def __round__(self):
1708 return 23
1709
1710 class TestNoRound:
1711 pass
1712
1713 self.assertEqual(round(TestRound()), 23)
1714
1715 self.assertRaises(TypeError, round, 1, 2, 3)
1716 self.assertRaises(TypeError, round, TestNoRound())
1717
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001718 t = TestNoRound()
1719 t.__round__ = lambda *args: args
1720 self.assertRaises(TypeError, round, t)
1721 self.assertRaises(TypeError, round, t, 0)
1722
Walter Dörwald919497e2003-01-19 16:23:59 +00001723 def test_setattr(self):
Tim Petersf2715e02003-02-19 02:35:07 +00001724 setattr(sys, 'spam', 1)
1725 self.assertEqual(sys.spam, 1)
1726 self.assertRaises(TypeError, setattr, sys, 1, 'spam')
1727 self.assertRaises(TypeError, setattr)
Walter Dörwald919497e2003-01-19 16:23:59 +00001728
1729 def test_str(self):
1730 self.assertEqual(str(''), '')
1731 self.assertEqual(str(0), '0')
Guido van Rossume2a383d2007-01-15 16:59:06 +00001732 self.assertEqual(str(0), '0')
Walter Dörwald919497e2003-01-19 16:23:59 +00001733 self.assertEqual(str(()), '()')
1734 self.assertEqual(str([]), '[]')
1735 self.assertEqual(str({}), '{}')
1736 a = []
1737 a.append(a)
1738 self.assertEqual(str(a), '[[...]]')
1739 a = {}
1740 a[0] = a
1741 self.assertEqual(str(a), '{0: {...}}')
1742
Alex Martellia70b1912003-04-22 08:12:33 +00001743 def test_sum(self):
1744 self.assertEqual(sum([]), 0)
Guido van Rossum805365e2007-05-07 22:24:25 +00001745 self.assertEqual(sum(list(range(2,8))), 27)
1746 self.assertEqual(sum(iter(list(range(2,8)))), 27)
Alex Martellia70b1912003-04-22 08:12:33 +00001747 self.assertEqual(sum(Squares(10)), 285)
1748 self.assertEqual(sum(iter(Squares(10))), 285)
1749 self.assertEqual(sum([[1], [2], [3]], []), [1, 2, 3])
1750
1751 self.assertRaises(TypeError, sum)
1752 self.assertRaises(TypeError, sum, 42)
1753 self.assertRaises(TypeError, sum, ['a', 'b', 'c'])
1754 self.assertRaises(TypeError, sum, ['a', 'b', 'c'], '')
1755 self.assertRaises(TypeError, sum, [[1], [2], [3]])
1756 self.assertRaises(TypeError, sum, [{2:3}])
1757 self.assertRaises(TypeError, sum, [{2:3}]*2, {2:3})
1758
1759 class BadSeq:
1760 def __getitem__(self, index):
1761 raise ValueError
1762 self.assertRaises(ValueError, sum, BadSeq())
1763
Walter Dörwald919497e2003-01-19 16:23:59 +00001764 def test_tuple(self):
1765 self.assertEqual(tuple(()), ())
1766 t0_3 = (0, 1, 2, 3)
1767 t0_3_bis = tuple(t0_3)
1768 self.assert_(t0_3 is t0_3_bis)
1769 self.assertEqual(tuple([]), ())
1770 self.assertEqual(tuple([0, 1, 2, 3]), (0, 1, 2, 3))
1771 self.assertEqual(tuple(''), ())
1772 self.assertEqual(tuple('spam'), ('s', 'p', 'a', 'm'))
1773
1774 def test_type(self):
1775 self.assertEqual(type(''), type('123'))
1776 self.assertNotEqual(type(''), type(()))
1777
Guido van Rossumfee7b932005-01-16 00:21:28 +00001778 # We don't want self in vars(), so these are static methods
1779
1780 @staticmethod
Walter Dörwald919497e2003-01-19 16:23:59 +00001781 def get_vars_f0():
1782 return vars()
Walter Dörwald919497e2003-01-19 16:23:59 +00001783
Guido van Rossumfee7b932005-01-16 00:21:28 +00001784 @staticmethod
Walter Dörwald919497e2003-01-19 16:23:59 +00001785 def get_vars_f2():
1786 BuiltinTest.get_vars_f0()
1787 a = 1
1788 b = 2
1789 return vars()
Walter Dörwald919497e2003-01-19 16:23:59 +00001790
1791 def test_vars(self):
Raymond Hettingera690a992003-11-16 16:17:49 +00001792 self.assertEqual(set(vars()), set(dir()))
Walter Dörwald919497e2003-01-19 16:23:59 +00001793 import sys
Raymond Hettingera690a992003-11-16 16:17:49 +00001794 self.assertEqual(set(vars(sys)), set(dir(sys)))
Walter Dörwald919497e2003-01-19 16:23:59 +00001795 self.assertEqual(self.get_vars_f0(), {})
1796 self.assertEqual(self.get_vars_f2(), {'a': 1, 'b': 2})
1797 self.assertRaises(TypeError, vars, 42, 42)
1798 self.assertRaises(TypeError, vars, 42)
1799
1800 def test_zip(self):
1801 a = (1, 2, 3)
1802 b = (4, 5, 6)
1803 t = [(1, 4), (2, 5), (3, 6)]
Guido van Rossum801f0d72006-08-24 19:48:10 +00001804 self.assertEqual(list(zip(a, b)), t)
Walter Dörwald919497e2003-01-19 16:23:59 +00001805 b = [4, 5, 6]
Guido van Rossum801f0d72006-08-24 19:48:10 +00001806 self.assertEqual(list(zip(a, b)), t)
Walter Dörwald919497e2003-01-19 16:23:59 +00001807 b = (4, 5, 6, 7)
Guido van Rossum801f0d72006-08-24 19:48:10 +00001808 self.assertEqual(list(zip(a, b)), t)
Walter Dörwald919497e2003-01-19 16:23:59 +00001809 class I:
1810 def __getitem__(self, i):
1811 if i < 0 or i > 2: raise IndexError
1812 return i + 4
Guido van Rossum801f0d72006-08-24 19:48:10 +00001813 self.assertEqual(list(zip(a, I())), t)
1814 self.assertEqual(list(zip()), [])
1815 self.assertEqual(list(zip(*[])), [])
Walter Dörwald919497e2003-01-19 16:23:59 +00001816 self.assertRaises(TypeError, zip, None)
1817 class G:
1818 pass
1819 self.assertRaises(TypeError, zip, a, G())
1820
1821 # Make sure zip doesn't try to allocate a billion elements for the
1822 # result list when one of its arguments doesn't say how long it is.
1823 # A MemoryError is the most likely failure mode.
1824 class SequenceWithoutALength:
1825 def __getitem__(self, i):
1826 if i == 5:
1827 raise IndexError
1828 else:
1829 return i
1830 self.assertEqual(
Guido van Rossum805365e2007-05-07 22:24:25 +00001831 list(zip(SequenceWithoutALength(), range(2**30))),
Walter Dörwald919497e2003-01-19 16:23:59 +00001832 list(enumerate(range(5)))
1833 )
1834
1835 class BadSeq:
1836 def __getitem__(self, i):
1837 if i == 5:
1838 raise ValueError
1839 else:
1840 return i
Guido van Rossum801f0d72006-08-24 19:48:10 +00001841 self.assertRaises(ValueError, list, zip(BadSeq(), BadSeq()))
Walter Dörwald919497e2003-01-19 16:23:59 +00001842
Christian Heimes90c3d9b2008-02-23 13:18:03 +00001843 def test_bin(self):
1844 self.assertEqual(bin(0), '0b0')
1845 self.assertEqual(bin(1), '0b1')
1846 self.assertEqual(bin(-1), '-0b1')
1847 self.assertEqual(bin(2**65), '0b1' + '0' * 65)
1848 self.assertEqual(bin(2**65-1), '0b' + '1' * 65)
1849 self.assertEqual(bin(-(2**65)), '-0b1' + '0' * 65)
1850 self.assertEqual(bin(-(2**65-1)), '-0b' + '1' * 65)
1851
Raymond Hettinger64958a12003-12-17 20:43:33 +00001852class TestSorted(unittest.TestCase):
1853
1854 def test_basic(self):
Guido van Rossum805365e2007-05-07 22:24:25 +00001855 data = list(range(100))
Raymond Hettinger64958a12003-12-17 20:43:33 +00001856 copy = data[:]
1857 random.shuffle(copy)
1858 self.assertEqual(data, sorted(copy))
1859 self.assertNotEqual(data, copy)
1860
1861 data.reverse()
1862 random.shuffle(copy)
Raymond Hettinger64958a12003-12-17 20:43:33 +00001863 self.assertEqual(data, sorted(copy, key=lambda x: -x))
1864 self.assertNotEqual(data, copy)
1865 random.shuffle(copy)
1866 self.assertEqual(data, sorted(copy, reverse=1))
1867 self.assertNotEqual(data, copy)
1868
1869 def test_inputtypes(self):
1870 s = 'abracadabra'
Walter Dörwald1f5947b2007-05-22 16:52:54 +00001871 types = [list, tuple, str]
Walter Dörwald4e41a4b2005-08-03 17:09:04 +00001872 for T in types:
Raymond Hettinger64958a12003-12-17 20:43:33 +00001873 self.assertEqual(sorted(s), sorted(T(s)))
1874
Walter Dörwald1f5947b2007-05-22 16:52:54 +00001875 s = ''.join(set(s)) # unique letters only
1876 types = [str, set, frozenset, list, tuple, dict.fromkeys]
Walter Dörwald4e41a4b2005-08-03 17:09:04 +00001877 for T in types:
Raymond Hettinger64958a12003-12-17 20:43:33 +00001878 self.assertEqual(sorted(s), sorted(T(s)))
1879
1880 def test_baddecorator(self):
1881 data = 'The quick Brown fox Jumped over The lazy Dog'.split()
1882 self.assertRaises(TypeError, sorted, data, None, lambda x,y: 0)
1883
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001884def test_main(verbose=None):
1885 test_classes = (BuiltinTest, TestSorted)
1886
1887 run_unittest(*test_classes)
1888
1889 # verify reference counting
1890 if verbose and hasattr(sys, "gettotalrefcount"):
1891 import gc
1892 counts = [None] * 5
Guido van Rossum805365e2007-05-07 22:24:25 +00001893 for i in range(len(counts)):
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001894 run_unittest(*test_classes)
1895 gc.collect()
1896 counts[i] = sys.gettotalrefcount()
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001897 print(counts)
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001898
Walter Dörwald919497e2003-01-19 16:23:59 +00001899
1900if __name__ == "__main__":
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001901 test_main(verbose=True)