blob: 42c55cc37bcf9fd7f82aa54edf854b9ff1caba1b [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
Walter Dörwald919497e2003-01-19 16:23:59 +0000451 def test_filter(self):
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000452 self.assertEqual(list(filter(lambda c: 'a' <= c <= 'z', 'Hello World')), list('elloorld'))
453 self.assertEqual(list(filter(None, [1, 'hello', [], [3], '', None, 9, 0])), [1, 'hello', [3], 9])
454 self.assertEqual(list(filter(lambda x: x > 0, [1, -3, 9, 0, 2])), [1, 9, 2])
455 self.assertEqual(list(filter(None, Squares(10))), [1, 4, 9, 16, 25, 36, 49, 64, 81])
456 self.assertEqual(list(filter(lambda x: x%2, Squares(10))), [1, 9, 25, 49, 81])
Walter Dörwald919497e2003-01-19 16:23:59 +0000457 def identity(item):
458 return 1
459 filter(identity, Squares(5))
460 self.assertRaises(TypeError, filter)
461 class BadSeq(object):
Tim Petersf2715e02003-02-19 02:35:07 +0000462 def __getitem__(self, index):
463 if index<4:
464 return 42
465 raise ValueError
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000466 self.assertRaises(ValueError, list, filter(lambda x: x, BadSeq()))
Walter Dörwald919497e2003-01-19 16:23:59 +0000467 def badfunc():
468 pass
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000469 self.assertRaises(TypeError, list, filter(badfunc, range(5)))
Walter Dörwald919497e2003-01-19 16:23:59 +0000470
Walter Dörwaldbf517072003-01-27 15:57:14 +0000471 # test bltinmodule.c::filtertuple()
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000472 self.assertEqual(list(filter(None, (1, 2))), [1, 2])
473 self.assertEqual(list(filter(lambda x: x>=3, (1, 2, 3, 4))), [3, 4])
474 self.assertRaises(TypeError, list, filter(42, (1, 2)))
Walter Dörwaldc3da83f2003-02-04 20:24:45 +0000475
Walter Dörwald919497e2003-01-19 16:23:59 +0000476 def test_float(self):
477 self.assertEqual(float(3.14), 3.14)
478 self.assertEqual(float(314), 314.0)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000479 self.assertEqual(float(314), 314.0)
Walter Dörwald919497e2003-01-19 16:23:59 +0000480 self.assertEqual(float(" 3.14 "), 3.14)
Neal Norwitze7214a12005-12-18 05:03:17 +0000481 self.assertRaises(ValueError, float, " 0x3.1 ")
482 self.assertRaises(ValueError, float, " -0x3.p-1 ")
Walter Dörwald1f5947b2007-05-22 16:52:54 +0000483 self.assertEqual(float(str(b" \u0663.\u0661\u0664 ",'raw-unicode-escape')), 3.14)
484 self.assertEqual(float("1"*10000), 1e10000) # Inf on both sides
Walter Dörwald919497e2003-01-19 16:23:59 +0000485
Thomas Wouters477c8d52006-05-27 19:21:47 +0000486 @run_with_locale('LC_NUMERIC', 'fr_FR', 'de_DE')
Neal Norwitz5898fa22005-11-22 05:17:40 +0000487 def test_float_with_comma(self):
488 # set locale to something that doesn't use '.' for the decimal point
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000489 # float must not accept the locale specific decimal point but
490 # it still has to accept the normal python syntac
Thomas Wouters477c8d52006-05-27 19:21:47 +0000491 import locale
492 if not locale.localeconv()['decimal_point'] == ',':
Neal Norwitz5898fa22005-11-22 05:17:40 +0000493 return
494
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000495 self.assertEqual(float(" 3.14 "), 3.14)
496 self.assertEqual(float("+3.14 "), 3.14)
497 self.assertEqual(float("-3.14 "), -3.14)
498 self.assertEqual(float(".14 "), .14)
499 self.assertEqual(float("3. "), 3.0)
500 self.assertEqual(float("3.e3 "), 3000.0)
501 self.assertEqual(float("3.2e3 "), 3200.0)
502 self.assertEqual(float("2.5e-1 "), 0.25)
503 self.assertEqual(float("5e-1"), 0.5)
504 self.assertRaises(ValueError, float, " 3,14 ")
505 self.assertRaises(ValueError, float, " +3,14 ")
506 self.assertRaises(ValueError, float, " -3,14 ")
Thomas Wouters477c8d52006-05-27 19:21:47 +0000507 self.assertRaises(ValueError, float, " 0x3.1 ")
508 self.assertRaises(ValueError, float, " -0x3.p-1 ")
509 self.assertEqual(float(" 25.e-1 "), 2.5)
510 self.assertEqual(fcmp(float(" .25e-1 "), .025), 0)
Neal Norwitz5898fa22005-11-22 05:17:40 +0000511
Brett Cannonc3647ac2005-04-26 03:45:26 +0000512 def test_floatconversion(self):
513 # Make sure that calls to __float__() work properly
514 class Foo0:
515 def __float__(self):
516 return 42.
517
518 class Foo1(object):
519 def __float__(self):
520 return 42.
521
522 class Foo2(float):
523 def __float__(self):
524 return 42.
525
526 class Foo3(float):
527 def __new__(cls, value=0.):
528 return float.__new__(cls, 2*value)
529
530 def __float__(self):
531 return self
532
533 class Foo4(float):
534 def __float__(self):
535 return 42
536
537 self.assertAlmostEqual(float(Foo0()), 42.)
538 self.assertAlmostEqual(float(Foo1()), 42.)
539 self.assertAlmostEqual(float(Foo2()), 42.)
540 self.assertAlmostEqual(float(Foo3(21)), 42.)
541 self.assertRaises(TypeError, float, Foo4(42))
542
Eric Smith8c663262007-08-25 02:26:07 +0000543 def test_format(self):
Eric Smith8fd3eba2008-02-17 19:48:00 +0000544 # Test the basic machinery of the format() builtin. Don't test
545 # the specifics of the various formatters
Eric Smith8c663262007-08-25 02:26:07 +0000546 self.assertEqual(format(3, ''), '3')
Eric Smith8fd3eba2008-02-17 19:48:00 +0000547
548 # Returns some classes to use for various tests. There's
549 # an old-style version, and a new-style version
550 def classes_new():
551 class A(object):
552 def __init__(self, x):
553 self.x = x
554 def __format__(self, format_spec):
555 return str(self.x) + format_spec
556 class DerivedFromA(A):
557 pass
558
559 class Simple(object): pass
560 class DerivedFromSimple(Simple):
561 def __init__(self, x):
562 self.x = x
563 def __format__(self, format_spec):
564 return str(self.x) + format_spec
565 class DerivedFromSimple2(DerivedFromSimple): pass
566 return A, DerivedFromA, DerivedFromSimple, DerivedFromSimple2
567
568 # In 3.0, classes_classic has the same meaning as classes_new
569 def classes_classic():
570 class A:
571 def __init__(self, x):
572 self.x = x
573 def __format__(self, format_spec):
574 return str(self.x) + format_spec
575 class DerivedFromA(A):
576 pass
577
578 class Simple: pass
579 class DerivedFromSimple(Simple):
580 def __init__(self, x):
581 self.x = x
582 def __format__(self, format_spec):
583 return str(self.x) + format_spec
584 class DerivedFromSimple2(DerivedFromSimple): pass
585 return A, DerivedFromA, DerivedFromSimple, DerivedFromSimple2
586
587 def class_test(A, DerivedFromA, DerivedFromSimple, DerivedFromSimple2):
588 self.assertEqual(format(A(3), 'spec'), '3spec')
589 self.assertEqual(format(DerivedFromA(4), 'spec'), '4spec')
590 self.assertEqual(format(DerivedFromSimple(5), 'abc'), '5abc')
591 self.assertEqual(format(DerivedFromSimple2(10), 'abcdef'),
592 '10abcdef')
593
594 class_test(*classes_new())
595 class_test(*classes_classic())
Eric Smith8c663262007-08-25 02:26:07 +0000596
Eric Smith81936692007-08-31 01:14:01 +0000597 def empty_format_spec(value):
598 # test that:
599 # format(x, '') == str(x)
600 # format(x) == str(x)
601 self.assertEqual(format(value, ""), str(value))
602 self.assertEqual(format(value), str(value))
603
Eric Smith8c663262007-08-25 02:26:07 +0000604 # for builtin types, format(x, "") == str(x)
Eric Smith81936692007-08-31 01:14:01 +0000605 empty_format_spec(17**13)
606 empty_format_spec(1.0)
607 empty_format_spec(3.1415e104)
608 empty_format_spec(-3.1415e104)
609 empty_format_spec(3.1415e-104)
610 empty_format_spec(-3.1415e-104)
611 empty_format_spec(object)
612 empty_format_spec(None)
Eric Smith8c663262007-08-25 02:26:07 +0000613
Eric Smith739e2ad2007-08-27 19:07:22 +0000614 # TypeError because self.__format__ returns the wrong type
Eric Smith8fd3eba2008-02-17 19:48:00 +0000615 class BadFormatResult:
616 def __format__(self, format_spec):
617 return 1.0
618 self.assertRaises(TypeError, format, BadFormatResult(), "")
Eric Smith37f10382007-09-01 10:56:01 +0000619
Eric Smith8fd3eba2008-02-17 19:48:00 +0000620 # TypeError because format_spec is not unicode or str
Eric Smithfc6e8fe2008-01-11 00:17:22 +0000621 self.assertRaises(TypeError, format, object(), 4)
622 self.assertRaises(TypeError, format, object(), object())
623
Eric Smith8fd3eba2008-02-17 19:48:00 +0000624 # tests for object.__format__ really belong elsewhere, but
625 # there's no good place to put them
626 x = object().__format__('')
627 self.assert_(x.startswith('<object object at'))
628
Eric Smith61ecb772008-01-11 00:32:16 +0000629 # first argument to object.__format__ must be string
630 self.assertRaises(TypeError, object().__format__, 3)
631 self.assertRaises(TypeError, object().__format__, object())
632 self.assertRaises(TypeError, object().__format__, None)
633
Eric Smith37f10382007-09-01 10:56:01 +0000634 # make sure we can take a subclass of str as a format spec
Eric Smith8fd3eba2008-02-17 19:48:00 +0000635 class DerivedFromStr(str): pass
636 self.assertEqual(format(0, DerivedFromStr('10')), ' 0')
Eric Smith8c663262007-08-25 02:26:07 +0000637
Christian Heimes26855632008-01-27 23:50:43 +0000638 def test_floatasratio(self):
Christian Heimes292d3512008-02-03 16:51:08 +0000639 for f, ratio in [
640 (0.875, (7, 8)),
641 (-0.875, (-7, 8)),
642 (0.0, (0, 1)),
643 (11.5, (23, 2)),
644 ]:
645 self.assertEqual(f.as_integer_ratio(), ratio)
646
647 for i in range(10000):
648 f = random.random()
649 f *= 10 ** random.randint(-100, 100)
650 n, d = f.as_integer_ratio()
651 self.assertEqual(float(n).__truediv__(d), f)
652
Christian Heimes3feef612008-02-11 06:19:17 +0000653 R = fractions.Fraction
Christian Heimes26855632008-01-27 23:50:43 +0000654 self.assertEqual(R(0, 1),
655 R(*float(0.0).as_integer_ratio()))
656 self.assertEqual(R(5, 2),
657 R(*float(2.5).as_integer_ratio()))
658 self.assertEqual(R(1, 2),
659 R(*float(0.5).as_integer_ratio()))
660 self.assertEqual(R(4728779608739021, 2251799813685248),
661 R(*float(2.1).as_integer_ratio()))
662 self.assertEqual(R(-4728779608739021, 2251799813685248),
663 R(*float(-2.1).as_integer_ratio()))
664 self.assertEqual(R(-2100, 1),
665 R(*float(-2100.0).as_integer_ratio()))
666
667 self.assertRaises(OverflowError, float('inf').as_integer_ratio)
668 self.assertRaises(OverflowError, float('-inf').as_integer_ratio)
669 self.assertRaises(ValueError, float('nan').as_integer_ratio)
670
Walter Dörwald919497e2003-01-19 16:23:59 +0000671 def test_getattr(self):
672 import sys
673 self.assert_(getattr(sys, 'stdout') is sys.stdout)
674 self.assertRaises(TypeError, getattr, sys, 1)
675 self.assertRaises(TypeError, getattr, sys, 1, "foo")
676 self.assertRaises(TypeError, getattr)
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000677 self.assertRaises(AttributeError, getattr, sys, chr(sys.maxunicode))
Walter Dörwald919497e2003-01-19 16:23:59 +0000678
679 def test_hasattr(self):
680 import sys
681 self.assert_(hasattr(sys, 'stdout'))
682 self.assertRaises(TypeError, hasattr, sys, 1)
683 self.assertRaises(TypeError, hasattr)
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000684 self.assertEqual(False, hasattr(sys, chr(sys.maxunicode)))
Walter Dörwald919497e2003-01-19 16:23:59 +0000685
686 def test_hash(self):
687 hash(None)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000688 self.assertEqual(hash(1), hash(1))
Walter Dörwald919497e2003-01-19 16:23:59 +0000689 self.assertEqual(hash(1), hash(1.0))
690 hash('spam')
Guido van Rossum98297ee2007-11-06 21:34:58 +0000691 self.assertEqual(hash('spam'), hash(b'spam'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000692 hash((0,1,2,3))
693 def f(): pass
694 self.assertRaises(TypeError, hash, [])
695 self.assertRaises(TypeError, hash, {})
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000696 # Bug 1536021: Allow hash to return long objects
697 class X:
698 def __hash__(self):
699 return 2**100
700 self.assertEquals(type(hash(X())), int)
701 class Y(object):
702 def __hash__(self):
703 return 2**100
704 self.assertEquals(type(hash(Y())), int)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000705 class Z(int):
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000706 def __hash__(self):
707 return self
Guido van Rossume2a383d2007-01-15 16:59:06 +0000708 self.assertEquals(hash(Z(42)), hash(42))
Walter Dörwald919497e2003-01-19 16:23:59 +0000709
710 def test_hex(self):
711 self.assertEqual(hex(16), '0x10')
Guido van Rossume2a383d2007-01-15 16:59:06 +0000712 self.assertEqual(hex(16), '0x10')
Guido van Rossum6c9e1302003-11-29 23:52:13 +0000713 self.assertEqual(hex(-16), '-0x10')
Guido van Rossume2a383d2007-01-15 16:59:06 +0000714 self.assertEqual(hex(-16), '-0x10')
Walter Dörwald919497e2003-01-19 16:23:59 +0000715 self.assertRaises(TypeError, hex, {})
716
717 def test_id(self):
718 id(None)
719 id(1)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000720 id(1)
Walter Dörwald919497e2003-01-19 16:23:59 +0000721 id(1.0)
722 id('spam')
723 id((0,1,2,3))
724 id([0,1,2,3])
725 id({'spam': 1, 'eggs': 2, 'ham': 3})
726
Guido van Rossuma88a0332007-02-26 16:59:55 +0000727 # Test input() later, alphabetized as if it were raw_input
728
Walter Dörwald919497e2003-01-19 16:23:59 +0000729 def test_int(self):
730 self.assertEqual(int(314), 314)
731 self.assertEqual(int(3.14), 3)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000732 self.assertEqual(int(314), 314)
Walter Dörwald919497e2003-01-19 16:23:59 +0000733 # Check that conversion from float truncates towards zero
734 self.assertEqual(int(-3.14), -3)
735 self.assertEqual(int(3.9), 3)
736 self.assertEqual(int(-3.9), -3)
737 self.assertEqual(int(3.5), 3)
738 self.assertEqual(int(-3.5), -3)
739 # Different base:
Guido van Rossume2a383d2007-01-15 16:59:06 +0000740 self.assertEqual(int("10",16), 16)
Walter Dörwald919497e2003-01-19 16:23:59 +0000741 # Test conversion from strings and various anomalies
Facundo Batista2336bdd2008-01-19 19:12:01 +0000742 # Testing with no sign at front
743 for s, v in test_conv_no_sign:
744 for prefix in "", " ", "\t", " \t\t ":
745 ss = prefix + s
746 vv = v
747 try:
748 self.assertEqual(int(ss), vv)
749 except v:
750 pass
751 # No whitespaces allowed between + or - sign and the number
752 for s, v in test_conv_sign:
753 for sign in "+", "-":
Walter Dörwald919497e2003-01-19 16:23:59 +0000754 for prefix in "", " ", "\t", " \t\t ":
755 ss = prefix + sign + s
756 vv = v
757 if sign == "-" and v is not ValueError:
758 vv = -v
759 try:
760 self.assertEqual(int(ss), vv)
761 except v:
762 pass
763
Christian Heimesa37d4c62007-12-04 23:02:19 +0000764 s = repr(-1-sys.maxsize)
Thomas Wouters89f507f2006-12-13 04:49:30 +0000765 x = int(s)
Christian Heimesa37d4c62007-12-04 23:02:19 +0000766 self.assertEqual(x+1, -sys.maxsize)
Thomas Wouters89f507f2006-12-13 04:49:30 +0000767 self.assert_(isinstance(x, int))
Walter Dörwald919497e2003-01-19 16:23:59 +0000768 # should return long
Christian Heimesa37d4c62007-12-04 23:02:19 +0000769 self.assertEqual(int(s[1:]), sys.maxsize+1)
Walter Dörwald919497e2003-01-19 16:23:59 +0000770
771 # should return long
772 x = int(1e100)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000773 self.assert_(isinstance(x, int))
Walter Dörwald919497e2003-01-19 16:23:59 +0000774 x = int(-1e100)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000775 self.assert_(isinstance(x, int))
Walter Dörwald919497e2003-01-19 16:23:59 +0000776
777
778 # SF bug 434186: 0x80000000/2 != 0x80000000>>1.
779 # Worked by accident in Windows release build, but failed in debug build.
780 # Failed in all Linux builds.
Christian Heimesa37d4c62007-12-04 23:02:19 +0000781 x = -1-sys.maxsize
Walter Dörwald919497e2003-01-19 16:23:59 +0000782 self.assertEqual(x >> 1, x//2)
783
784 self.assertRaises(ValueError, int, '123\0')
785 self.assertRaises(ValueError, int, '53', 40)
786
Thomas Wouters89f507f2006-12-13 04:49:30 +0000787 # SF bug 1545497: embedded NULs were not detected with
788 # explicit base
789 self.assertRaises(ValueError, int, '123\0', 10)
790 self.assertRaises(ValueError, int, '123\x00 245', 20)
791
Walter Dörwald919497e2003-01-19 16:23:59 +0000792 x = int('1' * 600)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000793 self.assert_(isinstance(x, int))
Walter Dörwald919497e2003-01-19 16:23:59 +0000794
Walter Dörwald1f5947b2007-05-22 16:52:54 +0000795 x = int(chr(0x661) * 600)
796 self.assert_(isinstance(x, int))
Walter Dörwald919497e2003-01-19 16:23:59 +0000797
798 self.assertRaises(TypeError, int, 1, 12)
799
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000800 # tests with base 0
801 self.assertRaises(ValueError, int, ' 0123 ', 0) # old octal syntax
802 self.assertEqual(int('000', 0), 0)
803 self.assertEqual(int('0o123', 0), 83)
804 self.assertEqual(int('0x123', 0), 291)
805 self.assertEqual(int('0b100', 0), 4)
806 self.assertEqual(int(' 0O123 ', 0), 83)
807 self.assertEqual(int(' 0X123 ', 0), 291)
808 self.assertEqual(int(' 0B100 ', 0), 4)
809
810 # without base still base 10
811 self.assertEqual(int('0123'), 123)
812 self.assertEqual(int('0123', 10), 123)
813
814 # tests with prefix and base != 0
Neal Norwitz5898fa22005-11-22 05:17:40 +0000815 self.assertEqual(int('0x123', 16), 291)
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000816 self.assertEqual(int('0o123', 8), 83)
817 self.assertEqual(int('0b100', 2), 4)
818 self.assertEqual(int('0X123', 16), 291)
819 self.assertEqual(int('0O123', 8), 83)
820 self.assertEqual(int('0B100', 2), 4)
Walter Dörwald919497e2003-01-19 16:23:59 +0000821
Georg Brandlfceab5a2008-01-19 20:08:23 +0000822 # Bug 1679: "0x" is not a valid hex literal
823 self.assertRaises(ValueError, int, "0x", 16)
824 self.assertRaises(ValueError, int, "0x", 0)
825
826
Thomas Wouters477c8d52006-05-27 19:21:47 +0000827 # SF bug 1334662: int(string, base) wrong answers
828 # Various representations of 2**32 evaluated to 0
829 # rather than 2**32 in previous versions
830
Guido van Rossume2a383d2007-01-15 16:59:06 +0000831 self.assertEqual(int('100000000000000000000000000000000', 2), 4294967296)
832 self.assertEqual(int('102002022201221111211', 3), 4294967296)
833 self.assertEqual(int('10000000000000000', 4), 4294967296)
834 self.assertEqual(int('32244002423141', 5), 4294967296)
835 self.assertEqual(int('1550104015504', 6), 4294967296)
836 self.assertEqual(int('211301422354', 7), 4294967296)
837 self.assertEqual(int('40000000000', 8), 4294967296)
838 self.assertEqual(int('12068657454', 9), 4294967296)
839 self.assertEqual(int('4294967296', 10), 4294967296)
840 self.assertEqual(int('1904440554', 11), 4294967296)
841 self.assertEqual(int('9ba461594', 12), 4294967296)
842 self.assertEqual(int('535a79889', 13), 4294967296)
843 self.assertEqual(int('2ca5b7464', 14), 4294967296)
844 self.assertEqual(int('1a20dcd81', 15), 4294967296)
845 self.assertEqual(int('100000000', 16), 4294967296)
846 self.assertEqual(int('a7ffda91', 17), 4294967296)
847 self.assertEqual(int('704he7g4', 18), 4294967296)
848 self.assertEqual(int('4f5aff66', 19), 4294967296)
849 self.assertEqual(int('3723ai4g', 20), 4294967296)
850 self.assertEqual(int('281d55i4', 21), 4294967296)
851 self.assertEqual(int('1fj8b184', 22), 4294967296)
852 self.assertEqual(int('1606k7ic', 23), 4294967296)
853 self.assertEqual(int('mb994ag', 24), 4294967296)
854 self.assertEqual(int('hek2mgl', 25), 4294967296)
855 self.assertEqual(int('dnchbnm', 26), 4294967296)
856 self.assertEqual(int('b28jpdm', 27), 4294967296)
857 self.assertEqual(int('8pfgih4', 28), 4294967296)
858 self.assertEqual(int('76beigg', 29), 4294967296)
859 self.assertEqual(int('5qmcpqg', 30), 4294967296)
860 self.assertEqual(int('4q0jto4', 31), 4294967296)
861 self.assertEqual(int('4000000', 32), 4294967296)
862 self.assertEqual(int('3aokq94', 33), 4294967296)
863 self.assertEqual(int('2qhxjli', 34), 4294967296)
864 self.assertEqual(int('2br45qb', 35), 4294967296)
865 self.assertEqual(int('1z141z4', 36), 4294967296)
Thomas Wouters477c8d52006-05-27 19:21:47 +0000866
867 # SF bug 1334662: int(string, base) wrong answers
868 # Checks for proper evaluation of 2**32 + 1
Guido van Rossume2a383d2007-01-15 16:59:06 +0000869 self.assertEqual(int('100000000000000000000000000000001', 2), 4294967297)
870 self.assertEqual(int('102002022201221111212', 3), 4294967297)
871 self.assertEqual(int('10000000000000001', 4), 4294967297)
872 self.assertEqual(int('32244002423142', 5), 4294967297)
873 self.assertEqual(int('1550104015505', 6), 4294967297)
874 self.assertEqual(int('211301422355', 7), 4294967297)
875 self.assertEqual(int('40000000001', 8), 4294967297)
876 self.assertEqual(int('12068657455', 9), 4294967297)
877 self.assertEqual(int('4294967297', 10), 4294967297)
878 self.assertEqual(int('1904440555', 11), 4294967297)
879 self.assertEqual(int('9ba461595', 12), 4294967297)
880 self.assertEqual(int('535a7988a', 13), 4294967297)
881 self.assertEqual(int('2ca5b7465', 14), 4294967297)
882 self.assertEqual(int('1a20dcd82', 15), 4294967297)
883 self.assertEqual(int('100000001', 16), 4294967297)
884 self.assertEqual(int('a7ffda92', 17), 4294967297)
885 self.assertEqual(int('704he7g5', 18), 4294967297)
886 self.assertEqual(int('4f5aff67', 19), 4294967297)
887 self.assertEqual(int('3723ai4h', 20), 4294967297)
888 self.assertEqual(int('281d55i5', 21), 4294967297)
889 self.assertEqual(int('1fj8b185', 22), 4294967297)
890 self.assertEqual(int('1606k7id', 23), 4294967297)
891 self.assertEqual(int('mb994ah', 24), 4294967297)
892 self.assertEqual(int('hek2mgm', 25), 4294967297)
893 self.assertEqual(int('dnchbnn', 26), 4294967297)
894 self.assertEqual(int('b28jpdn', 27), 4294967297)
895 self.assertEqual(int('8pfgih5', 28), 4294967297)
896 self.assertEqual(int('76beigh', 29), 4294967297)
897 self.assertEqual(int('5qmcpqh', 30), 4294967297)
898 self.assertEqual(int('4q0jto5', 31), 4294967297)
899 self.assertEqual(int('4000001', 32), 4294967297)
900 self.assertEqual(int('3aokq95', 33), 4294967297)
901 self.assertEqual(int('2qhxjlj', 34), 4294967297)
902 self.assertEqual(int('2br45qc', 35), 4294967297)
903 self.assertEqual(int('1z141z5', 36), 4294967297)
Thomas Wouters477c8d52006-05-27 19:21:47 +0000904
Brett Cannonc3647ac2005-04-26 03:45:26 +0000905 def test_intconversion(self):
906 # Test __int__()
Christian Heimes15ebc882008-02-04 18:48:49 +0000907 class ClassicMissingMethods:
908 pass
909 self.assertRaises(TypeError, int, ClassicMissingMethods())
910
911 class MissingMethods(object):
912 pass
913 self.assertRaises(TypeError, int, MissingMethods())
914
Brett Cannonc3647ac2005-04-26 03:45:26 +0000915 class Foo0:
916 def __int__(self):
917 return 42
918
919 class Foo1(object):
920 def __int__(self):
921 return 42
922
923 class Foo2(int):
924 def __int__(self):
925 return 42
926
927 class Foo3(int):
928 def __int__(self):
929 return self
930
931 class Foo4(int):
932 def __int__(self):
Guido van Rossume2a383d2007-01-15 16:59:06 +0000933 return 42
Brett Cannonc3647ac2005-04-26 03:45:26 +0000934
935 class Foo5(int):
936 def __int__(self):
937 return 42.
938
939 self.assertEqual(int(Foo0()), 42)
940 self.assertEqual(int(Foo1()), 42)
941 self.assertEqual(int(Foo2()), 42)
942 self.assertEqual(int(Foo3()), 0)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000943 self.assertEqual(int(Foo4()), 42)
Brett Cannonc3647ac2005-04-26 03:45:26 +0000944 self.assertRaises(TypeError, int, Foo5())
945
Christian Heimes15ebc882008-02-04 18:48:49 +0000946 class Classic:
947 pass
948 for base in (object, Classic):
949 class IntOverridesTrunc(base):
950 def __int__(self):
951 return 42
952 def __trunc__(self):
953 return -12
954 self.assertEqual(int(IntOverridesTrunc()), 42)
955
956 class JustTrunc(base):
957 def __trunc__(self):
958 return 42
959 self.assertEqual(int(JustTrunc()), 42)
960
961 for trunc_result_base in (object, Classic):
962 class Integral(trunc_result_base):
963 def __int__(self):
964 return 42
965
966 class TruncReturnsNonInt(base):
967 def __trunc__(self):
968 return Integral()
969 self.assertEqual(int(TruncReturnsNonInt()), 42)
970
971 class NonIntegral(trunc_result_base):
972 def __trunc__(self):
973 # Check that we avoid infinite recursion.
974 return NonIntegral()
975
976 class TruncReturnsNonIntegral(base):
977 def __trunc__(self):
978 return NonIntegral()
979 try:
980 int(TruncReturnsNonIntegral())
981 except TypeError as e:
982 self.assertEquals(str(e),
983 "__trunc__ returned non-Integral"
984 " (type NonIntegral)")
985 else:
986 self.fail("Failed to raise TypeError with %s" %
987 ((base, trunc_result_base),))
988
Walter Dörwald919497e2003-01-19 16:23:59 +0000989 def test_iter(self):
990 self.assertRaises(TypeError, iter)
991 self.assertRaises(TypeError, iter, 42, 42)
992 lists = [("1", "2"), ["1", "2"], "12"]
Walter Dörwald919497e2003-01-19 16:23:59 +0000993 for l in lists:
994 i = iter(l)
Georg Brandla18af4e2007-04-21 15:47:16 +0000995 self.assertEqual(next(i), '1')
996 self.assertEqual(next(i), '2')
997 self.assertRaises(StopIteration, next, i)
Walter Dörwald919497e2003-01-19 16:23:59 +0000998
999 def test_isinstance(self):
1000 class C:
1001 pass
1002 class D(C):
1003 pass
1004 class E:
1005 pass
1006 c = C()
1007 d = D()
1008 e = E()
1009 self.assert_(isinstance(c, C))
1010 self.assert_(isinstance(d, C))
1011 self.assert_(not isinstance(e, C))
1012 self.assert_(not isinstance(c, D))
1013 self.assert_(not isinstance('foo', E))
1014 self.assertRaises(TypeError, isinstance, E, 'foo')
1015 self.assertRaises(TypeError, isinstance)
1016
1017 def test_issubclass(self):
1018 class C:
1019 pass
1020 class D(C):
1021 pass
1022 class E:
1023 pass
1024 c = C()
1025 d = D()
1026 e = E()
1027 self.assert_(issubclass(D, C))
1028 self.assert_(issubclass(C, C))
1029 self.assert_(not issubclass(C, D))
1030 self.assertRaises(TypeError, issubclass, 'foo', E)
1031 self.assertRaises(TypeError, issubclass, E, 'foo')
1032 self.assertRaises(TypeError, issubclass)
1033
1034 def test_len(self):
1035 self.assertEqual(len('123'), 3)
1036 self.assertEqual(len(()), 0)
1037 self.assertEqual(len((1, 2, 3, 4)), 4)
1038 self.assertEqual(len([1, 2, 3, 4]), 4)
1039 self.assertEqual(len({}), 0)
1040 self.assertEqual(len({'a':1, 'b': 2}), 2)
1041 class BadSeq:
1042 def __len__(self):
1043 raise ValueError
1044 self.assertRaises(ValueError, len, BadSeq())
1045
1046 def test_list(self):
1047 self.assertEqual(list([]), [])
1048 l0_3 = [0, 1, 2, 3]
1049 l0_3_bis = list(l0_3)
1050 self.assertEqual(l0_3, l0_3_bis)
1051 self.assert_(l0_3 is not l0_3_bis)
1052 self.assertEqual(list(()), [])
1053 self.assertEqual(list((0, 1, 2, 3)), [0, 1, 2, 3])
1054 self.assertEqual(list(''), [])
1055 self.assertEqual(list('spam'), ['s', 'p', 'a', 'm'])
1056
Christian Heimesa37d4c62007-12-04 23:02:19 +00001057 if sys.maxsize == 0x7fffffff:
Walter Dörwald919497e2003-01-19 16:23:59 +00001058 # This test can currently only work on 32-bit machines.
1059 # XXX If/when PySequence_Length() returns a ssize_t, it should be
1060 # XXX re-enabled.
1061 # Verify clearing of bug #556025.
Christian Heimesa37d4c62007-12-04 23:02:19 +00001062 # This assumes that the max data size (sys.maxsize) == max
Walter Dörwald919497e2003-01-19 16:23:59 +00001063 # address size this also assumes that the address size is at
1064 # least 4 bytes with 8 byte addresses, the bug is not well
1065 # tested
1066 #
1067 # Note: This test is expected to SEGV under Cygwin 1.3.12 or
1068 # earlier due to a newlib bug. See the following mailing list
1069 # thread for the details:
1070
1071 # http://sources.redhat.com/ml/newlib/2002/msg00369.html
Christian Heimesa37d4c62007-12-04 23:02:19 +00001072 self.assertRaises(MemoryError, list, range(sys.maxsize // 2))
Walter Dörwald919497e2003-01-19 16:23:59 +00001073
Raymond Hettingeraa241e02004-09-26 19:24:20 +00001074 # This code used to segfault in Py2.4a3
1075 x = []
1076 x.extend(-y for y in x)
1077 self.assertEqual(x, [])
1078
Walter Dörwald919497e2003-01-19 16:23:59 +00001079 def test_long(self):
Guido van Rossume2a383d2007-01-15 16:59:06 +00001080 self.assertEqual(int(314), 314)
1081 self.assertEqual(int(3.14), 3)
1082 self.assertEqual(int(314), 314)
Walter Dörwald919497e2003-01-19 16:23:59 +00001083 # Check that conversion from float truncates towards zero
Guido van Rossume2a383d2007-01-15 16:59:06 +00001084 self.assertEqual(int(-3.14), -3)
1085 self.assertEqual(int(3.9), 3)
1086 self.assertEqual(int(-3.9), -3)
1087 self.assertEqual(int(3.5), 3)
1088 self.assertEqual(int(-3.5), -3)
1089 self.assertEqual(int("-3"), -3)
Walter Dörwald919497e2003-01-19 16:23:59 +00001090 # Different base:
Guido van Rossume2a383d2007-01-15 16:59:06 +00001091 self.assertEqual(int("10",16), 16)
Walter Dörwald919497e2003-01-19 16:23:59 +00001092 # Check conversions from string (same test set as for int(), and then some)
1093 LL = [
Guido van Rossume2a383d2007-01-15 16:59:06 +00001094 ('1' + '0'*20, 10**20),
1095 ('1' + '0'*100, 10**100)
Walter Dörwald919497e2003-01-19 16:23:59 +00001096 ]
Walter Dörwald1f5947b2007-05-22 16:52:54 +00001097 for s, v in LL:
Walter Dörwald919497e2003-01-19 16:23:59 +00001098 for sign in "", "+", "-":
1099 for prefix in "", " ", "\t", " \t\t ":
1100 ss = prefix + sign + s
1101 vv = v
1102 if sign == "-" and v is not ValueError:
1103 vv = -v
1104 try:
Guido van Rossume2a383d2007-01-15 16:59:06 +00001105 self.assertEqual(int(ss), int(vv))
Walter Dörwald919497e2003-01-19 16:23:59 +00001106 except v:
1107 pass
1108
Guido van Rossume2a383d2007-01-15 16:59:06 +00001109 self.assertRaises(ValueError, int, '123\0')
1110 self.assertRaises(ValueError, int, '53', 40)
1111 self.assertRaises(TypeError, int, 1, 12)
Walter Dörwald919497e2003-01-19 16:23:59 +00001112
Guido van Rossumd8faa362007-04-27 19:54:29 +00001113 # SF patch #1638879: embedded NULs were not detected with
1114 # explicit base
1115 self.assertRaises(ValueError, int, '123\0', 10)
1116 self.assertRaises(ValueError, int, '123\x00 245', 20)
1117
Guido van Rossume2a383d2007-01-15 16:59:06 +00001118 self.assertEqual(int('100000000000000000000000000000000', 2),
Thomas Wouters477c8d52006-05-27 19:21:47 +00001119 4294967296)
Guido van Rossume2a383d2007-01-15 16:59:06 +00001120 self.assertEqual(int('102002022201221111211', 3), 4294967296)
1121 self.assertEqual(int('10000000000000000', 4), 4294967296)
1122 self.assertEqual(int('32244002423141', 5), 4294967296)
1123 self.assertEqual(int('1550104015504', 6), 4294967296)
1124 self.assertEqual(int('211301422354', 7), 4294967296)
1125 self.assertEqual(int('40000000000', 8), 4294967296)
1126 self.assertEqual(int('12068657454', 9), 4294967296)
1127 self.assertEqual(int('4294967296', 10), 4294967296)
1128 self.assertEqual(int('1904440554', 11), 4294967296)
1129 self.assertEqual(int('9ba461594', 12), 4294967296)
1130 self.assertEqual(int('535a79889', 13), 4294967296)
1131 self.assertEqual(int('2ca5b7464', 14), 4294967296)
1132 self.assertEqual(int('1a20dcd81', 15), 4294967296)
1133 self.assertEqual(int('100000000', 16), 4294967296)
1134 self.assertEqual(int('a7ffda91', 17), 4294967296)
1135 self.assertEqual(int('704he7g4', 18), 4294967296)
1136 self.assertEqual(int('4f5aff66', 19), 4294967296)
1137 self.assertEqual(int('3723ai4g', 20), 4294967296)
1138 self.assertEqual(int('281d55i4', 21), 4294967296)
1139 self.assertEqual(int('1fj8b184', 22), 4294967296)
1140 self.assertEqual(int('1606k7ic', 23), 4294967296)
1141 self.assertEqual(int('mb994ag', 24), 4294967296)
1142 self.assertEqual(int('hek2mgl', 25), 4294967296)
1143 self.assertEqual(int('dnchbnm', 26), 4294967296)
1144 self.assertEqual(int('b28jpdm', 27), 4294967296)
1145 self.assertEqual(int('8pfgih4', 28), 4294967296)
1146 self.assertEqual(int('76beigg', 29), 4294967296)
1147 self.assertEqual(int('5qmcpqg', 30), 4294967296)
1148 self.assertEqual(int('4q0jto4', 31), 4294967296)
1149 self.assertEqual(int('4000000', 32), 4294967296)
1150 self.assertEqual(int('3aokq94', 33), 4294967296)
1151 self.assertEqual(int('2qhxjli', 34), 4294967296)
1152 self.assertEqual(int('2br45qb', 35), 4294967296)
1153 self.assertEqual(int('1z141z4', 36), 4294967296)
Thomas Wouters477c8d52006-05-27 19:21:47 +00001154
Guido van Rossume2a383d2007-01-15 16:59:06 +00001155 self.assertEqual(int('100000000000000000000000000000001', 2),
Thomas Wouters477c8d52006-05-27 19:21:47 +00001156 4294967297)
Guido van Rossume2a383d2007-01-15 16:59:06 +00001157 self.assertEqual(int('102002022201221111212', 3), 4294967297)
1158 self.assertEqual(int('10000000000000001', 4), 4294967297)
1159 self.assertEqual(int('32244002423142', 5), 4294967297)
1160 self.assertEqual(int('1550104015505', 6), 4294967297)
1161 self.assertEqual(int('211301422355', 7), 4294967297)
1162 self.assertEqual(int('40000000001', 8), 4294967297)
1163 self.assertEqual(int('12068657455', 9), 4294967297)
1164 self.assertEqual(int('4294967297', 10), 4294967297)
1165 self.assertEqual(int('1904440555', 11), 4294967297)
1166 self.assertEqual(int('9ba461595', 12), 4294967297)
1167 self.assertEqual(int('535a7988a', 13), 4294967297)
1168 self.assertEqual(int('2ca5b7465', 14), 4294967297)
1169 self.assertEqual(int('1a20dcd82', 15), 4294967297)
1170 self.assertEqual(int('100000001', 16), 4294967297)
1171 self.assertEqual(int('a7ffda92', 17), 4294967297)
1172 self.assertEqual(int('704he7g5', 18), 4294967297)
1173 self.assertEqual(int('4f5aff67', 19), 4294967297)
1174 self.assertEqual(int('3723ai4h', 20), 4294967297)
1175 self.assertEqual(int('281d55i5', 21), 4294967297)
1176 self.assertEqual(int('1fj8b185', 22), 4294967297)
1177 self.assertEqual(int('1606k7id', 23), 4294967297)
1178 self.assertEqual(int('mb994ah', 24), 4294967297)
1179 self.assertEqual(int('hek2mgm', 25), 4294967297)
1180 self.assertEqual(int('dnchbnn', 26), 4294967297)
1181 self.assertEqual(int('b28jpdn', 27), 4294967297)
1182 self.assertEqual(int('8pfgih5', 28), 4294967297)
1183 self.assertEqual(int('76beigh', 29), 4294967297)
1184 self.assertEqual(int('5qmcpqh', 30), 4294967297)
1185 self.assertEqual(int('4q0jto5', 31), 4294967297)
1186 self.assertEqual(int('4000001', 32), 4294967297)
1187 self.assertEqual(int('3aokq95', 33), 4294967297)
1188 self.assertEqual(int('2qhxjlj', 34), 4294967297)
1189 self.assertEqual(int('2br45qc', 35), 4294967297)
1190 self.assertEqual(int('1z141z5', 36), 4294967297)
Thomas Wouters477c8d52006-05-27 19:21:47 +00001191
Brett Cannonc3647ac2005-04-26 03:45:26 +00001192 def test_longconversion(self):
1193 # Test __long__()
1194 class Foo0:
1195 def __long__(self):
Guido van Rossume2a383d2007-01-15 16:59:06 +00001196 return 42
Brett Cannonc3647ac2005-04-26 03:45:26 +00001197
1198 class Foo1(object):
1199 def __long__(self):
Guido van Rossume2a383d2007-01-15 16:59:06 +00001200 return 42
Brett Cannonc3647ac2005-04-26 03:45:26 +00001201
Guido van Rossume2a383d2007-01-15 16:59:06 +00001202 class Foo2(int):
Brett Cannonc3647ac2005-04-26 03:45:26 +00001203 def __long__(self):
1204 return 42
1205
Guido van Rossume2a383d2007-01-15 16:59:06 +00001206 class Foo3(int):
1207 def __long__(self):
1208 return self
1209
1210 class Foo4(int):
1211 def __long__(self):
1212 return 42
1213
1214 class Foo5(int):
Brett Cannonc3647ac2005-04-26 03:45:26 +00001215 def __long__(self):
1216 return 42.
1217
Guido van Rossume2a383d2007-01-15 16:59:06 +00001218 self.assertEqual(int(Foo0()), 42)
1219 self.assertEqual(int(Foo1()), 42)
Guido van Rossumd8faa362007-04-27 19:54:29 +00001220 # XXX invokes __int__ now
Guido van Rossumddefaf32007-01-14 03:31:43 +00001221 # self.assertEqual(long(Foo2()), 42L)
Guido van Rossume2a383d2007-01-15 16:59:06 +00001222 self.assertEqual(int(Foo3()), 0)
Guido van Rossumd8faa362007-04-27 19:54:29 +00001223 # XXX likewise
Guido van Rossumddefaf32007-01-14 03:31:43 +00001224 # self.assertEqual(long(Foo4()), 42)
1225 # self.assertRaises(TypeError, long, Foo5())
Brett Cannonc3647ac2005-04-26 03:45:26 +00001226
Walter Dörwald919497e2003-01-19 16:23:59 +00001227 def test_map(self):
1228 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001229 list(map(lambda x: x*x, range(1,4))),
Walter Dörwald919497e2003-01-19 16:23:59 +00001230 [1, 4, 9]
1231 )
1232 try:
1233 from math import sqrt
1234 except ImportError:
1235 def sqrt(x):
1236 return pow(x, 0.5)
1237 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001238 list(map(lambda x: list(map(sqrt, x)), [[16, 4], [81, 9]])),
Walter Dörwald919497e2003-01-19 16:23:59 +00001239 [[4.0, 2.0], [9.0, 3.0]]
1240 )
1241 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001242 list(map(lambda x, y: x+y, [1,3,2], [9,1,4])),
Walter Dörwald919497e2003-01-19 16:23:59 +00001243 [10, 4, 6]
1244 )
1245
1246 def plus(*v):
1247 accu = 0
1248 for i in v: accu = accu + i
1249 return accu
1250 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001251 list(map(plus, [1, 3, 7])),
Walter Dörwald919497e2003-01-19 16:23:59 +00001252 [1, 3, 7]
1253 )
1254 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001255 list(map(plus, [1, 3, 7], [4, 9, 2])),
Walter Dörwald919497e2003-01-19 16:23:59 +00001256 [1+4, 3+9, 7+2]
1257 )
1258 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001259 list(map(plus, [1, 3, 7], [4, 9, 2], [1, 1, 0])),
Walter Dörwald919497e2003-01-19 16:23:59 +00001260 [1+4+1, 3+9+1, 7+2+0]
1261 )
1262 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001263 list(map(int, Squares(10))),
Walter Dörwald919497e2003-01-19 16:23:59 +00001264 [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
1265 )
Guido van Rossum47b9ff62006-08-24 00:41:19 +00001266 def Max(a, b):
1267 if a is None:
1268 return b
1269 if b is None:
1270 return a
1271 return max(a, b)
Walter Dörwald919497e2003-01-19 16:23:59 +00001272 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001273 list(map(Max, Squares(3), Squares(2))),
1274 [0, 1]
Walter Dörwald919497e2003-01-19 16:23:59 +00001275 )
1276 self.assertRaises(TypeError, map)
1277 self.assertRaises(TypeError, map, lambda x: x, 42)
Walter Dörwald919497e2003-01-19 16:23:59 +00001278 class BadSeq:
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001279 def __iter__(self):
Walter Dörwald919497e2003-01-19 16:23:59 +00001280 raise ValueError
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001281 yield None
1282 self.assertRaises(ValueError, list, map(lambda x: x, BadSeq()))
Neal Norwitzfcf44352005-11-27 20:37:43 +00001283 def badfunc(x):
1284 raise RuntimeError
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001285 self.assertRaises(RuntimeError, list, map(badfunc, range(5)))
Walter Dörwald919497e2003-01-19 16:23:59 +00001286
1287 def test_max(self):
1288 self.assertEqual(max('123123'), '3')
1289 self.assertEqual(max(1, 2, 3), 3)
1290 self.assertEqual(max((1, 2, 3, 1, 2, 3)), 3)
1291 self.assertEqual(max([1, 2, 3, 1, 2, 3]), 3)
1292
Guido van Rossume2a383d2007-01-15 16:59:06 +00001293 self.assertEqual(max(1, 2, 3.0), 3.0)
1294 self.assertEqual(max(1, 2.0, 3), 3)
1295 self.assertEqual(max(1.0, 2, 3), 3)
Walter Dörwald919497e2003-01-19 16:23:59 +00001296
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001297 for stmt in (
1298 "max(key=int)", # no args
1299 "max(1, key=int)", # single arg not iterable
1300 "max(1, 2, keystone=int)", # wrong keyword
1301 "max(1, 2, key=int, abc=int)", # two many keywords
1302 "max(1, 2, key=1)", # keyfunc is not callable
1303 ):
Tim Peters7f061872004-12-07 21:17:46 +00001304 try:
Georg Brandl7cae87c2006-09-06 06:51:57 +00001305 exec(stmt, globals())
Tim Peters7f061872004-12-07 21:17:46 +00001306 except TypeError:
1307 pass
1308 else:
1309 self.fail(stmt)
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001310
1311 self.assertEqual(max((1,), key=neg), 1) # one elem iterable
1312 self.assertEqual(max((1,2), key=neg), 1) # two elem iterable
1313 self.assertEqual(max(1, 2, key=neg), 1) # two elems
1314
1315 data = [random.randrange(200) for i in range(100)]
1316 keys = dict((elem, random.randrange(50)) for elem in data)
1317 f = keys.__getitem__
1318 self.assertEqual(max(data, key=f),
1319 sorted(reversed(data), key=f)[-1])
1320
Walter Dörwald919497e2003-01-19 16:23:59 +00001321 def test_min(self):
1322 self.assertEqual(min('123123'), '1')
1323 self.assertEqual(min(1, 2, 3), 1)
1324 self.assertEqual(min((1, 2, 3, 1, 2, 3)), 1)
1325 self.assertEqual(min([1, 2, 3, 1, 2, 3]), 1)
1326
Guido van Rossume2a383d2007-01-15 16:59:06 +00001327 self.assertEqual(min(1, 2, 3.0), 1)
1328 self.assertEqual(min(1, 2.0, 3), 1)
1329 self.assertEqual(min(1.0, 2, 3), 1.0)
Walter Dörwald919497e2003-01-19 16:23:59 +00001330
1331 self.assertRaises(TypeError, min)
1332 self.assertRaises(TypeError, min, 42)
1333 self.assertRaises(ValueError, min, ())
1334 class BadSeq:
1335 def __getitem__(self, index):
1336 raise ValueError
1337 self.assertRaises(ValueError, min, BadSeq())
1338 class BadNumber:
1339 def __cmp__(self, other):
1340 raise ValueError
Guido van Rossum47b9ff62006-08-24 00:41:19 +00001341 self.assertRaises(TypeError, min, (42, BadNumber()))
Walter Dörwald919497e2003-01-19 16:23:59 +00001342
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001343 for stmt in (
1344 "min(key=int)", # no args
1345 "min(1, key=int)", # single arg not iterable
1346 "min(1, 2, keystone=int)", # wrong keyword
1347 "min(1, 2, key=int, abc=int)", # two many keywords
1348 "min(1, 2, key=1)", # keyfunc is not callable
1349 ):
Tim Peters7f061872004-12-07 21:17:46 +00001350 try:
Georg Brandl7cae87c2006-09-06 06:51:57 +00001351 exec(stmt, globals())
Tim Peters7f061872004-12-07 21:17:46 +00001352 except TypeError:
1353 pass
1354 else:
1355 self.fail(stmt)
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001356
1357 self.assertEqual(min((1,), key=neg), 1) # one elem iterable
1358 self.assertEqual(min((1,2), key=neg), 2) # two elem iterable
1359 self.assertEqual(min(1, 2, key=neg), 2) # two elems
1360
1361 data = [random.randrange(200) for i in range(100)]
1362 keys = dict((elem, random.randrange(50)) for elem in data)
1363 f = keys.__getitem__
1364 self.assertEqual(min(data, key=f),
1365 sorted(data, key=f)[0])
1366
Georg Brandla18af4e2007-04-21 15:47:16 +00001367 def test_next(self):
1368 it = iter(range(2))
1369 self.assertEqual(next(it), 0)
1370 self.assertEqual(next(it), 1)
1371 self.assertRaises(StopIteration, next, it)
1372 self.assertRaises(StopIteration, next, it)
1373 self.assertEquals(next(it, 42), 42)
1374
1375 class Iter(object):
1376 def __iter__(self):
1377 return self
1378 def __next__(self):
1379 raise StopIteration
1380
1381 it = iter(Iter())
1382 self.assertEquals(next(it, 42), 42)
1383 self.assertRaises(StopIteration, next, it)
1384
1385 def gen():
1386 yield 1
1387 return
1388
1389 it = gen()
1390 self.assertEquals(next(it), 1)
1391 self.assertRaises(StopIteration, next, it)
1392 self.assertEquals(next(it, 42), 42)
1393
Walter Dörwald919497e2003-01-19 16:23:59 +00001394 def test_oct(self):
Guido van Rossumcd16bf62007-06-13 18:07:49 +00001395 self.assertEqual(oct(100), '0o144')
1396 self.assertEqual(oct(100), '0o144')
1397 self.assertEqual(oct(-100), '-0o144')
1398 self.assertEqual(oct(-100), '-0o144')
Walter Dörwald919497e2003-01-19 16:23:59 +00001399 self.assertRaises(TypeError, oct, ())
1400
1401 def write_testfile(self):
Guido van Rossuma88a0332007-02-26 16:59:55 +00001402 # NB the first 4 lines are also used to test input, below
Walter Dörwald919497e2003-01-19 16:23:59 +00001403 fp = open(TESTFN, 'w')
1404 try:
1405 fp.write('1+1\n')
1406 fp.write('1+1\n')
1407 fp.write('The quick brown fox jumps over the lazy dog')
1408 fp.write('.\n')
1409 fp.write('Dear John\n')
1410 fp.write('XXX'*100)
1411 fp.write('YYY'*100)
1412 finally:
1413 fp.close()
1414
1415 def test_open(self):
1416 self.write_testfile()
1417 fp = open(TESTFN, 'r')
1418 try:
1419 self.assertEqual(fp.readline(4), '1+1\n')
1420 self.assertEqual(fp.readline(4), '1+1\n')
1421 self.assertEqual(fp.readline(), 'The quick brown fox jumps over the lazy dog.\n')
1422 self.assertEqual(fp.readline(4), 'Dear')
1423 self.assertEqual(fp.readline(100), ' John\n')
1424 self.assertEqual(fp.read(300), 'XXX'*100)
1425 self.assertEqual(fp.read(1000), 'YYY'*100)
1426 finally:
1427 fp.close()
1428 unlink(TESTFN)
1429
1430 def test_ord(self):
1431 self.assertEqual(ord(' '), 32)
1432 self.assertEqual(ord('A'), 65)
1433 self.assertEqual(ord('a'), 97)
Guido van Rossumf9e91c92007-05-08 21:05:48 +00001434 self.assertEqual(ord('\x80'), 128)
1435 self.assertEqual(ord('\xff'), 255)
1436
1437 self.assertEqual(ord(b' '), 32)
1438 self.assertEqual(ord(b'A'), 65)
1439 self.assertEqual(ord(b'a'), 97)
1440 self.assertEqual(ord(b'\x80'), 128)
1441 self.assertEqual(ord(b'\xff'), 255)
1442
Walter Dörwald1f5947b2007-05-22 16:52:54 +00001443 self.assertEqual(ord(chr(sys.maxunicode)), sys.maxunicode)
Walter Dörwald919497e2003-01-19 16:23:59 +00001444 self.assertRaises(TypeError, ord, 42)
Walter Dörwald919497e2003-01-19 16:23:59 +00001445
Guido van Rossum8ac004e2007-07-15 13:00:05 +00001446 self.assertEqual(ord(chr(0x10FFFF)), 0x10FFFF)
1447 self.assertEqual(ord("\U0000FFFF"), 0x0000FFFF)
1448 self.assertEqual(ord("\U00010000"), 0x00010000)
1449 self.assertEqual(ord("\U00010001"), 0x00010001)
1450 self.assertEqual(ord("\U000FFFFE"), 0x000FFFFE)
1451 self.assertEqual(ord("\U000FFFFF"), 0x000FFFFF)
1452 self.assertEqual(ord("\U00100000"), 0x00100000)
1453 self.assertEqual(ord("\U00100001"), 0x00100001)
1454 self.assertEqual(ord("\U0010FFFE"), 0x0010FFFE)
1455 self.assertEqual(ord("\U0010FFFF"), 0x0010FFFF)
1456
Walter Dörwald919497e2003-01-19 16:23:59 +00001457 def test_pow(self):
1458 self.assertEqual(pow(0,0), 1)
1459 self.assertEqual(pow(0,1), 0)
1460 self.assertEqual(pow(1,0), 1)
1461 self.assertEqual(pow(1,1), 1)
1462
1463 self.assertEqual(pow(2,0), 1)
1464 self.assertEqual(pow(2,10), 1024)
1465 self.assertEqual(pow(2,20), 1024*1024)
1466 self.assertEqual(pow(2,30), 1024*1024*1024)
1467
1468 self.assertEqual(pow(-2,0), 1)
1469 self.assertEqual(pow(-2,1), -2)
1470 self.assertEqual(pow(-2,2), 4)
1471 self.assertEqual(pow(-2,3), -8)
1472
Guido van Rossume2a383d2007-01-15 16:59:06 +00001473 self.assertEqual(pow(0,0), 1)
1474 self.assertEqual(pow(0,1), 0)
1475 self.assertEqual(pow(1,0), 1)
1476 self.assertEqual(pow(1,1), 1)
Walter Dörwald919497e2003-01-19 16:23:59 +00001477
Guido van Rossume2a383d2007-01-15 16:59:06 +00001478 self.assertEqual(pow(2,0), 1)
1479 self.assertEqual(pow(2,10), 1024)
1480 self.assertEqual(pow(2,20), 1024*1024)
1481 self.assertEqual(pow(2,30), 1024*1024*1024)
Walter Dörwald919497e2003-01-19 16:23:59 +00001482
Guido van Rossume2a383d2007-01-15 16:59:06 +00001483 self.assertEqual(pow(-2,0), 1)
1484 self.assertEqual(pow(-2,1), -2)
1485 self.assertEqual(pow(-2,2), 4)
1486 self.assertEqual(pow(-2,3), -8)
Walter Dörwald919497e2003-01-19 16:23:59 +00001487
1488 self.assertAlmostEqual(pow(0.,0), 1.)
1489 self.assertAlmostEqual(pow(0.,1), 0.)
1490 self.assertAlmostEqual(pow(1.,0), 1.)
1491 self.assertAlmostEqual(pow(1.,1), 1.)
1492
1493 self.assertAlmostEqual(pow(2.,0), 1.)
1494 self.assertAlmostEqual(pow(2.,10), 1024.)
1495 self.assertAlmostEqual(pow(2.,20), 1024.*1024.)
1496 self.assertAlmostEqual(pow(2.,30), 1024.*1024.*1024.)
1497
1498 self.assertAlmostEqual(pow(-2.,0), 1.)
1499 self.assertAlmostEqual(pow(-2.,1), -2.)
1500 self.assertAlmostEqual(pow(-2.,2), 4.)
1501 self.assertAlmostEqual(pow(-2.,3), -8.)
1502
Guido van Rossume2a383d2007-01-15 16:59:06 +00001503 for x in 2, 2, 2.0:
1504 for y in 10, 10, 10.0:
1505 for z in 1000, 1000, 1000.0:
Walter Dörwald919497e2003-01-19 16:23:59 +00001506 if isinstance(x, float) or \
1507 isinstance(y, float) or \
1508 isinstance(z, float):
1509 self.assertRaises(TypeError, pow, x, y, z)
1510 else:
1511 self.assertAlmostEqual(pow(x, y, z), 24.0)
1512
Jeffrey Yasskin3404b3c2007-09-07 15:15:49 +00001513 self.assertAlmostEqual(pow(-1, 0.5), 1j)
1514 self.assertAlmostEqual(pow(-1, 1/3), 0.5 + 0.8660254037844386j)
1515
Walter Dörwald919497e2003-01-19 16:23:59 +00001516 self.assertRaises(TypeError, pow, -1, -2, 3)
1517 self.assertRaises(ValueError, pow, 1, 2, 0)
Guido van Rossume2a383d2007-01-15 16:59:06 +00001518 self.assertRaises(TypeError, pow, -1, -2, 3)
1519 self.assertRaises(ValueError, pow, 1, 2, 0)
Walter Dörwald919497e2003-01-19 16:23:59 +00001520
1521 self.assertRaises(TypeError, pow)
1522
1523 def test_range(self):
Guido van Rossum805365e2007-05-07 22:24:25 +00001524 self.assertEqual(list(range(3)), [0, 1, 2])
1525 self.assertEqual(list(range(1, 5)), [1, 2, 3, 4])
1526 self.assertEqual(list(range(0)), [])
1527 self.assertEqual(list(range(-3)), [])
1528 self.assertEqual(list(range(1, 10, 3)), [1, 4, 7])
1529 #self.assertEqual(list(range(5, -5, -3)), [5, 2, -1, -4])
Walter Dörwald919497e2003-01-19 16:23:59 +00001530
Guido van Rossum805365e2007-05-07 22:24:25 +00001531 """ XXX(nnorwitz):
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001532 # Now test range() with longs
Guido van Rossum805365e2007-05-07 22:24:25 +00001533 self.assertEqual(list(range(-2**100)), [])
1534 self.assertEqual(list(range(0, -2**100)), [])
1535 self.assertEqual(list(range(0, 2**100, -1)), [])
1536 self.assertEqual(list(range(0, 2**100, -1)), [])
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001537
Christian Heimesa37d4c62007-12-04 23:02:19 +00001538 a = int(10 * sys.maxsize)
1539 b = int(100 * sys.maxsize)
1540 c = int(50 * sys.maxsize)
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001541
Guido van Rossum805365e2007-05-07 22:24:25 +00001542 self.assertEqual(list(range(a, a+2)), [a, a+1])
1543 self.assertEqual(list(range(a+2, a, -1)), [a+2, a+1])
1544 self.assertEqual(list(range(a+4, a, -2)), [a+4, a+2])
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001545
Guido van Rossum805365e2007-05-07 22:24:25 +00001546 seq = list(range(a, b, c))
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001547 self.assert_(a in seq)
1548 self.assert_(b not in seq)
1549 self.assertEqual(len(seq), 2)
1550
Guido van Rossum805365e2007-05-07 22:24:25 +00001551 seq = list(range(b, a, -c))
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001552 self.assert_(b in seq)
1553 self.assert_(a not in seq)
1554 self.assertEqual(len(seq), 2)
1555
Guido van Rossum805365e2007-05-07 22:24:25 +00001556 seq = list(range(-a, -b, -c))
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001557 self.assert_(-a in seq)
1558 self.assert_(-b not in seq)
1559 self.assertEqual(len(seq), 2)
1560
Walter Dörwald919497e2003-01-19 16:23:59 +00001561 self.assertRaises(TypeError, range)
1562 self.assertRaises(TypeError, range, 1, 2, 3, 4)
1563 self.assertRaises(ValueError, range, 1, 2, 0)
Guido van Rossume2a383d2007-01-15 16:59:06 +00001564 self.assertRaises(ValueError, range, a, a + 1, int(0))
Neal Norwitzfcf44352005-11-27 20:37:43 +00001565
1566 class badzero(int):
Guido van Rossum47b9ff62006-08-24 00:41:19 +00001567 def __eq__(self, other):
Neal Norwitzfcf44352005-11-27 20:37:43 +00001568 raise RuntimeError
Guido van Rossum47b9ff62006-08-24 00:41:19 +00001569 __ne__ = __lt__ = __gt__ = __le__ = __ge__ = __eq__
1570
1571 # XXX This won't (but should!) raise RuntimeError if a is an int...
Neal Norwitzfcf44352005-11-27 20:37:43 +00001572 self.assertRaises(RuntimeError, range, a, a + 1, badzero(1))
Guido van Rossum805365e2007-05-07 22:24:25 +00001573 """
Walter Dörwald919497e2003-01-19 16:23:59 +00001574
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001575 # Reject floats when it would require PyLongs to represent.
1576 # (smaller floats still accepted, but deprecated)
Tim Peters299b3df2003-04-15 14:40:03 +00001577 self.assertRaises(TypeError, range, 1e100, 1e101, 1e101)
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001578
Walter Dörwald357981e2003-04-15 18:59:28 +00001579 self.assertRaises(TypeError, range, 0, "spam")
1580 self.assertRaises(TypeError, range, 0, 42, "spam")
1581
Christian Heimesa37d4c62007-12-04 23:02:19 +00001582 #NEAL self.assertRaises(OverflowError, range, -sys.maxsize, sys.maxsize)
1583 #NEAL self.assertRaises(OverflowError, range, 0, 2*sys.maxsize)
Guido van Rossum805365e2007-05-07 22:24:25 +00001584
Christian Heimesa37d4c62007-12-04 23:02:19 +00001585 self.assertRaises(OverflowError, len, range(0, sys.maxsize**10))
Walter Dörwald357981e2003-04-15 18:59:28 +00001586
Guido van Rossuma88a0332007-02-26 16:59:55 +00001587 def test_input(self):
1588 self.write_testfile()
1589 fp = open(TESTFN, 'r')
1590 savestdin = sys.stdin
1591 savestdout = sys.stdout # Eats the echo
1592 try:
1593 sys.stdin = fp
1594 sys.stdout = BitBucket()
1595 self.assertEqual(input(), "1+1")
1596 self.assertEqual(input('testing\n'), "1+1")
1597 self.assertEqual(input(), 'The quick brown fox jumps over the lazy dog.')
1598 self.assertEqual(input('testing\n'), 'Dear John')
1599
1600 # SF 1535165: don't segfault on closed stdin
1601 # sys.stdout must be a regular file for triggering
1602 sys.stdout = savestdout
1603 sys.stdin.close()
1604 self.assertRaises(ValueError, input)
1605
1606 sys.stdout = BitBucket()
Guido van Rossum34d19282007-08-09 01:03:29 +00001607 sys.stdin = io.StringIO("NULL\0")
Guido van Rossuma88a0332007-02-26 16:59:55 +00001608 self.assertRaises(TypeError, input, 42, 42)
Guido van Rossum34d19282007-08-09 01:03:29 +00001609 sys.stdin = io.StringIO(" 'whitespace'")
Guido van Rossuma88a0332007-02-26 16:59:55 +00001610 self.assertEqual(input(), " 'whitespace'")
Guido van Rossum34d19282007-08-09 01:03:29 +00001611 sys.stdin = io.StringIO()
Guido van Rossuma88a0332007-02-26 16:59:55 +00001612 self.assertRaises(EOFError, input)
1613
1614 del sys.stdout
1615 self.assertRaises(RuntimeError, input, 'prompt')
1616 del sys.stdin
1617 self.assertRaises(RuntimeError, input, 'prompt')
1618 finally:
1619 sys.stdin = savestdin
1620 sys.stdout = savestdout
1621 fp.close()
1622 unlink(TESTFN)
1623
Walter Dörwald919497e2003-01-19 16:23:59 +00001624 def test_repr(self):
1625 self.assertEqual(repr(''), '\'\'')
1626 self.assertEqual(repr(0), '0')
Guido van Rossume2a383d2007-01-15 16:59:06 +00001627 self.assertEqual(repr(0), '0')
Walter Dörwald919497e2003-01-19 16:23:59 +00001628 self.assertEqual(repr(()), '()')
1629 self.assertEqual(repr([]), '[]')
1630 self.assertEqual(repr({}), '{}')
1631 a = []
1632 a.append(a)
1633 self.assertEqual(repr(a), '[[...]]')
1634 a = {}
1635 a[0] = a
1636 self.assertEqual(repr(a), '{0: {...}}')
1637
1638 def test_round(self):
1639 self.assertEqual(round(0.0), 0.0)
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001640 self.assertEqual(type(round(0.0)), int)
Walter Dörwald919497e2003-01-19 16:23:59 +00001641 self.assertEqual(round(1.0), 1.0)
1642 self.assertEqual(round(10.0), 10.0)
1643 self.assertEqual(round(1000000000.0), 1000000000.0)
1644 self.assertEqual(round(1e20), 1e20)
1645
1646 self.assertEqual(round(-1.0), -1.0)
1647 self.assertEqual(round(-10.0), -10.0)
1648 self.assertEqual(round(-1000000000.0), -1000000000.0)
1649 self.assertEqual(round(-1e20), -1e20)
1650
1651 self.assertEqual(round(0.1), 0.0)
1652 self.assertEqual(round(1.1), 1.0)
1653 self.assertEqual(round(10.1), 10.0)
1654 self.assertEqual(round(1000000000.1), 1000000000.0)
1655
1656 self.assertEqual(round(-1.1), -1.0)
1657 self.assertEqual(round(-10.1), -10.0)
1658 self.assertEqual(round(-1000000000.1), -1000000000.0)
1659
1660 self.assertEqual(round(0.9), 1.0)
1661 self.assertEqual(round(9.9), 10.0)
1662 self.assertEqual(round(999999999.9), 1000000000.0)
1663
1664 self.assertEqual(round(-0.9), -1.0)
1665 self.assertEqual(round(-9.9), -10.0)
1666 self.assertEqual(round(-999999999.9), -1000000000.0)
1667
1668 self.assertEqual(round(-8.0, -1), -10.0)
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001669 self.assertEqual(type(round(-8.0, -1)), float)
1670
1671 self.assertEqual(type(round(-8.0, 0)), float)
1672 self.assertEqual(type(round(-8.0, 1)), float)
1673
1674 # Check even / odd rounding behaviour
1675 self.assertEqual(round(5.5), 6)
1676 self.assertEqual(round(6.5), 6)
1677 self.assertEqual(round(-5.5), -6)
1678 self.assertEqual(round(-6.5), -6)
1679
1680 # Check behavior on ints
1681 self.assertEqual(round(0), 0)
1682 self.assertEqual(round(8), 8)
1683 self.assertEqual(round(-8), -8)
1684 self.assertEqual(type(round(0)), int)
1685 self.assertEqual(type(round(-8, -1)), float)
1686 self.assertEqual(type(round(-8, 0)), float)
1687 self.assertEqual(type(round(-8, 1)), float)
Walter Dörwald919497e2003-01-19 16:23:59 +00001688
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001689 # test new kwargs
1690 self.assertEqual(round(number=-8.0, ndigits=-1), -10.0)
1691
Walter Dörwald919497e2003-01-19 16:23:59 +00001692 self.assertRaises(TypeError, round)
1693
Alex Martelliae211f92007-08-22 23:21:33 +00001694 # test generic rounding delegation for reals
1695 class TestRound:
1696 def __round__(self):
1697 return 23
1698
1699 class TestNoRound:
1700 pass
1701
1702 self.assertEqual(round(TestRound()), 23)
1703
1704 self.assertRaises(TypeError, round, 1, 2, 3)
1705 self.assertRaises(TypeError, round, TestNoRound())
1706
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001707 t = TestNoRound()
1708 t.__round__ = lambda *args: args
1709 self.assertRaises(TypeError, round, t)
1710 self.assertRaises(TypeError, round, t, 0)
1711
Walter Dörwald919497e2003-01-19 16:23:59 +00001712 def test_setattr(self):
Tim Petersf2715e02003-02-19 02:35:07 +00001713 setattr(sys, 'spam', 1)
1714 self.assertEqual(sys.spam, 1)
1715 self.assertRaises(TypeError, setattr, sys, 1, 'spam')
1716 self.assertRaises(TypeError, setattr)
Walter Dörwald919497e2003-01-19 16:23:59 +00001717
1718 def test_str(self):
1719 self.assertEqual(str(''), '')
1720 self.assertEqual(str(0), '0')
Guido van Rossume2a383d2007-01-15 16:59:06 +00001721 self.assertEqual(str(0), '0')
Walter Dörwald919497e2003-01-19 16:23:59 +00001722 self.assertEqual(str(()), '()')
1723 self.assertEqual(str([]), '[]')
1724 self.assertEqual(str({}), '{}')
1725 a = []
1726 a.append(a)
1727 self.assertEqual(str(a), '[[...]]')
1728 a = {}
1729 a[0] = a
1730 self.assertEqual(str(a), '{0: {...}}')
1731
Alex Martellia70b1912003-04-22 08:12:33 +00001732 def test_sum(self):
1733 self.assertEqual(sum([]), 0)
Guido van Rossum805365e2007-05-07 22:24:25 +00001734 self.assertEqual(sum(list(range(2,8))), 27)
1735 self.assertEqual(sum(iter(list(range(2,8)))), 27)
Alex Martellia70b1912003-04-22 08:12:33 +00001736 self.assertEqual(sum(Squares(10)), 285)
1737 self.assertEqual(sum(iter(Squares(10))), 285)
1738 self.assertEqual(sum([[1], [2], [3]], []), [1, 2, 3])
1739
1740 self.assertRaises(TypeError, sum)
1741 self.assertRaises(TypeError, sum, 42)
1742 self.assertRaises(TypeError, sum, ['a', 'b', 'c'])
1743 self.assertRaises(TypeError, sum, ['a', 'b', 'c'], '')
1744 self.assertRaises(TypeError, sum, [[1], [2], [3]])
1745 self.assertRaises(TypeError, sum, [{2:3}])
1746 self.assertRaises(TypeError, sum, [{2:3}]*2, {2:3})
1747
1748 class BadSeq:
1749 def __getitem__(self, index):
1750 raise ValueError
1751 self.assertRaises(ValueError, sum, BadSeq())
1752
Walter Dörwald919497e2003-01-19 16:23:59 +00001753 def test_tuple(self):
1754 self.assertEqual(tuple(()), ())
1755 t0_3 = (0, 1, 2, 3)
1756 t0_3_bis = tuple(t0_3)
1757 self.assert_(t0_3 is t0_3_bis)
1758 self.assertEqual(tuple([]), ())
1759 self.assertEqual(tuple([0, 1, 2, 3]), (0, 1, 2, 3))
1760 self.assertEqual(tuple(''), ())
1761 self.assertEqual(tuple('spam'), ('s', 'p', 'a', 'm'))
1762
1763 def test_type(self):
1764 self.assertEqual(type(''), type('123'))
1765 self.assertNotEqual(type(''), type(()))
1766
Guido van Rossumfee7b932005-01-16 00:21:28 +00001767 # We don't want self in vars(), so these are static methods
1768
1769 @staticmethod
Walter Dörwald919497e2003-01-19 16:23:59 +00001770 def get_vars_f0():
1771 return vars()
Walter Dörwald919497e2003-01-19 16:23:59 +00001772
Guido van Rossumfee7b932005-01-16 00:21:28 +00001773 @staticmethod
Walter Dörwald919497e2003-01-19 16:23:59 +00001774 def get_vars_f2():
1775 BuiltinTest.get_vars_f0()
1776 a = 1
1777 b = 2
1778 return vars()
Walter Dörwald919497e2003-01-19 16:23:59 +00001779
1780 def test_vars(self):
Raymond Hettingera690a992003-11-16 16:17:49 +00001781 self.assertEqual(set(vars()), set(dir()))
Walter Dörwald919497e2003-01-19 16:23:59 +00001782 import sys
Raymond Hettingera690a992003-11-16 16:17:49 +00001783 self.assertEqual(set(vars(sys)), set(dir(sys)))
Walter Dörwald919497e2003-01-19 16:23:59 +00001784 self.assertEqual(self.get_vars_f0(), {})
1785 self.assertEqual(self.get_vars_f2(), {'a': 1, 'b': 2})
1786 self.assertRaises(TypeError, vars, 42, 42)
1787 self.assertRaises(TypeError, vars, 42)
1788
1789 def test_zip(self):
1790 a = (1, 2, 3)
1791 b = (4, 5, 6)
1792 t = [(1, 4), (2, 5), (3, 6)]
Guido van Rossum801f0d72006-08-24 19:48:10 +00001793 self.assertEqual(list(zip(a, b)), t)
Walter Dörwald919497e2003-01-19 16:23:59 +00001794 b = [4, 5, 6]
Guido van Rossum801f0d72006-08-24 19:48:10 +00001795 self.assertEqual(list(zip(a, b)), t)
Walter Dörwald919497e2003-01-19 16:23:59 +00001796 b = (4, 5, 6, 7)
Guido van Rossum801f0d72006-08-24 19:48:10 +00001797 self.assertEqual(list(zip(a, b)), t)
Walter Dörwald919497e2003-01-19 16:23:59 +00001798 class I:
1799 def __getitem__(self, i):
1800 if i < 0 or i > 2: raise IndexError
1801 return i + 4
Guido van Rossum801f0d72006-08-24 19:48:10 +00001802 self.assertEqual(list(zip(a, I())), t)
1803 self.assertEqual(list(zip()), [])
1804 self.assertEqual(list(zip(*[])), [])
Walter Dörwald919497e2003-01-19 16:23:59 +00001805 self.assertRaises(TypeError, zip, None)
1806 class G:
1807 pass
1808 self.assertRaises(TypeError, zip, a, G())
1809
1810 # Make sure zip doesn't try to allocate a billion elements for the
1811 # result list when one of its arguments doesn't say how long it is.
1812 # A MemoryError is the most likely failure mode.
1813 class SequenceWithoutALength:
1814 def __getitem__(self, i):
1815 if i == 5:
1816 raise IndexError
1817 else:
1818 return i
1819 self.assertEqual(
Guido van Rossum805365e2007-05-07 22:24:25 +00001820 list(zip(SequenceWithoutALength(), range(2**30))),
Walter Dörwald919497e2003-01-19 16:23:59 +00001821 list(enumerate(range(5)))
1822 )
1823
1824 class BadSeq:
1825 def __getitem__(self, i):
1826 if i == 5:
1827 raise ValueError
1828 else:
1829 return i
Guido van Rossum801f0d72006-08-24 19:48:10 +00001830 self.assertRaises(ValueError, list, zip(BadSeq(), BadSeq()))
Walter Dörwald919497e2003-01-19 16:23:59 +00001831
Raymond Hettinger64958a12003-12-17 20:43:33 +00001832class TestSorted(unittest.TestCase):
1833
1834 def test_basic(self):
Guido van Rossum805365e2007-05-07 22:24:25 +00001835 data = list(range(100))
Raymond Hettinger64958a12003-12-17 20:43:33 +00001836 copy = data[:]
1837 random.shuffle(copy)
1838 self.assertEqual(data, sorted(copy))
1839 self.assertNotEqual(data, copy)
1840
1841 data.reverse()
1842 random.shuffle(copy)
Raymond Hettinger64958a12003-12-17 20:43:33 +00001843 self.assertEqual(data, sorted(copy, key=lambda x: -x))
1844 self.assertNotEqual(data, copy)
1845 random.shuffle(copy)
1846 self.assertEqual(data, sorted(copy, reverse=1))
1847 self.assertNotEqual(data, copy)
1848
1849 def test_inputtypes(self):
1850 s = 'abracadabra'
Walter Dörwald1f5947b2007-05-22 16:52:54 +00001851 types = [list, tuple, str]
Walter Dörwald4e41a4b2005-08-03 17:09:04 +00001852 for T in types:
Raymond Hettinger64958a12003-12-17 20:43:33 +00001853 self.assertEqual(sorted(s), sorted(T(s)))
1854
Walter Dörwald1f5947b2007-05-22 16:52:54 +00001855 s = ''.join(set(s)) # unique letters only
1856 types = [str, set, frozenset, list, tuple, dict.fromkeys]
Walter Dörwald4e41a4b2005-08-03 17:09:04 +00001857 for T in types:
Raymond Hettinger64958a12003-12-17 20:43:33 +00001858 self.assertEqual(sorted(s), sorted(T(s)))
1859
1860 def test_baddecorator(self):
1861 data = 'The quick Brown fox Jumped over The lazy Dog'.split()
1862 self.assertRaises(TypeError, sorted, data, None, lambda x,y: 0)
1863
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001864def test_main(verbose=None):
1865 test_classes = (BuiltinTest, TestSorted)
1866
1867 run_unittest(*test_classes)
1868
1869 # verify reference counting
1870 if verbose and hasattr(sys, "gettotalrefcount"):
1871 import gc
1872 counts = [None] * 5
Guido van Rossum805365e2007-05-07 22:24:25 +00001873 for i in range(len(counts)):
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001874 run_unittest(*test_classes)
1875 gc.collect()
1876 counts[i] = sys.gettotalrefcount()
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001877 print(counts)
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001878
Walter Dörwald919497e2003-01-19 16:23:59 +00001879
1880if __name__ == "__main__":
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001881 test_main(verbose=True)