blob: cc31e937bf15fcee3f7ee300a024b93f94287611 [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
Christian Heimes26855632008-01-27 23:50:43 +00008import sys, warnings, random, UserDict, io, rational
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)
213 from UserList import UserList
214 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)
403 eval('[locals() for i in (2,3)]', g, UserDict.UserDict())
404
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):
544 class A:
545 def __init__(self, x):
546 self.x = x
547 def __format__(self, format_spec):
548 return str(self.x) + format_spec
549
550 # class that returns a bad type from __format__
Eric Smith37f10382007-09-01 10:56:01 +0000551 class B:
Eric Smith8c663262007-08-25 02:26:07 +0000552 def __format__(self, format_spec):
553 return 1.0
554
Eric Smith37f10382007-09-01 10:56:01 +0000555 # class that is derived from string, used
556 # as a format spec
557 class C(str):
558 pass
559
Eric Smith8c663262007-08-25 02:26:07 +0000560 self.assertEqual(format(3, ''), '3')
561 self.assertEqual(format(A(3), 'spec'), '3spec')
562
Eric Smith81936692007-08-31 01:14:01 +0000563 def empty_format_spec(value):
564 # test that:
565 # format(x, '') == str(x)
566 # format(x) == str(x)
567 self.assertEqual(format(value, ""), str(value))
568 self.assertEqual(format(value), str(value))
569
Eric Smith8c663262007-08-25 02:26:07 +0000570 # for builtin types, format(x, "") == str(x)
Eric Smith81936692007-08-31 01:14:01 +0000571 empty_format_spec(17**13)
572 empty_format_spec(1.0)
573 empty_format_spec(3.1415e104)
574 empty_format_spec(-3.1415e104)
575 empty_format_spec(3.1415e-104)
576 empty_format_spec(-3.1415e-104)
577 empty_format_spec(object)
578 empty_format_spec(None)
Eric Smith8c663262007-08-25 02:26:07 +0000579
Eric Smith739e2ad2007-08-27 19:07:22 +0000580 # TypeError because self.__format__ returns the wrong type
Eric Smith37f10382007-09-01 10:56:01 +0000581 self.assertRaises(TypeError, format, B(), "")
582
Eric Smithfc6e8fe2008-01-11 00:17:22 +0000583 # TypeError because format_spec is not unicode
584 self.assertRaises(TypeError, format, object(), 4)
585 self.assertRaises(TypeError, format, object(), object())
586
Eric Smith61ecb772008-01-11 00:32:16 +0000587 # first argument to object.__format__ must be string
588 self.assertRaises(TypeError, object().__format__, 3)
589 self.assertRaises(TypeError, object().__format__, object())
590 self.assertRaises(TypeError, object().__format__, None)
591
Eric Smith37f10382007-09-01 10:56:01 +0000592 # make sure we can take a subclass of str as a format spec
593 self.assertEqual(format(0, C('10')), ' 0')
Eric Smith8c663262007-08-25 02:26:07 +0000594
Christian Heimes26855632008-01-27 23:50:43 +0000595 def test_floatasratio(self):
Christian Heimes292d3512008-02-03 16:51:08 +0000596 for f, ratio in [
597 (0.875, (7, 8)),
598 (-0.875, (-7, 8)),
599 (0.0, (0, 1)),
600 (11.5, (23, 2)),
601 ]:
602 self.assertEqual(f.as_integer_ratio(), ratio)
603
604 for i in range(10000):
605 f = random.random()
606 f *= 10 ** random.randint(-100, 100)
607 n, d = f.as_integer_ratio()
608 self.assertEqual(float(n).__truediv__(d), f)
609
Christian Heimes26855632008-01-27 23:50:43 +0000610 R = rational.Rational
611 self.assertEqual(R(0, 1),
612 R(*float(0.0).as_integer_ratio()))
613 self.assertEqual(R(5, 2),
614 R(*float(2.5).as_integer_ratio()))
615 self.assertEqual(R(1, 2),
616 R(*float(0.5).as_integer_ratio()))
617 self.assertEqual(R(4728779608739021, 2251799813685248),
618 R(*float(2.1).as_integer_ratio()))
619 self.assertEqual(R(-4728779608739021, 2251799813685248),
620 R(*float(-2.1).as_integer_ratio()))
621 self.assertEqual(R(-2100, 1),
622 R(*float(-2100.0).as_integer_ratio()))
623
624 self.assertRaises(OverflowError, float('inf').as_integer_ratio)
625 self.assertRaises(OverflowError, float('-inf').as_integer_ratio)
626 self.assertRaises(ValueError, float('nan').as_integer_ratio)
627
Walter Dörwald919497e2003-01-19 16:23:59 +0000628 def test_getattr(self):
629 import sys
630 self.assert_(getattr(sys, 'stdout') is sys.stdout)
631 self.assertRaises(TypeError, getattr, sys, 1)
632 self.assertRaises(TypeError, getattr, sys, 1, "foo")
633 self.assertRaises(TypeError, getattr)
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000634 self.assertRaises(AttributeError, getattr, sys, chr(sys.maxunicode))
Walter Dörwald919497e2003-01-19 16:23:59 +0000635
636 def test_hasattr(self):
637 import sys
638 self.assert_(hasattr(sys, 'stdout'))
639 self.assertRaises(TypeError, hasattr, sys, 1)
640 self.assertRaises(TypeError, hasattr)
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000641 self.assertEqual(False, hasattr(sys, chr(sys.maxunicode)))
Walter Dörwald919497e2003-01-19 16:23:59 +0000642
643 def test_hash(self):
644 hash(None)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000645 self.assertEqual(hash(1), hash(1))
Walter Dörwald919497e2003-01-19 16:23:59 +0000646 self.assertEqual(hash(1), hash(1.0))
647 hash('spam')
Guido van Rossum98297ee2007-11-06 21:34:58 +0000648 self.assertEqual(hash('spam'), hash(b'spam'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000649 hash((0,1,2,3))
650 def f(): pass
651 self.assertRaises(TypeError, hash, [])
652 self.assertRaises(TypeError, hash, {})
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000653 # Bug 1536021: Allow hash to return long objects
654 class X:
655 def __hash__(self):
656 return 2**100
657 self.assertEquals(type(hash(X())), int)
658 class Y(object):
659 def __hash__(self):
660 return 2**100
661 self.assertEquals(type(hash(Y())), int)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000662 class Z(int):
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000663 def __hash__(self):
664 return self
Guido van Rossume2a383d2007-01-15 16:59:06 +0000665 self.assertEquals(hash(Z(42)), hash(42))
Walter Dörwald919497e2003-01-19 16:23:59 +0000666
667 def test_hex(self):
668 self.assertEqual(hex(16), '0x10')
Guido van Rossume2a383d2007-01-15 16:59:06 +0000669 self.assertEqual(hex(16), '0x10')
Guido van Rossum6c9e1302003-11-29 23:52:13 +0000670 self.assertEqual(hex(-16), '-0x10')
Guido van Rossume2a383d2007-01-15 16:59:06 +0000671 self.assertEqual(hex(-16), '-0x10')
Walter Dörwald919497e2003-01-19 16:23:59 +0000672 self.assertRaises(TypeError, hex, {})
673
674 def test_id(self):
675 id(None)
676 id(1)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000677 id(1)
Walter Dörwald919497e2003-01-19 16:23:59 +0000678 id(1.0)
679 id('spam')
680 id((0,1,2,3))
681 id([0,1,2,3])
682 id({'spam': 1, 'eggs': 2, 'ham': 3})
683
Guido van Rossuma88a0332007-02-26 16:59:55 +0000684 # Test input() later, alphabetized as if it were raw_input
685
Walter Dörwald919497e2003-01-19 16:23:59 +0000686 def test_int(self):
687 self.assertEqual(int(314), 314)
688 self.assertEqual(int(3.14), 3)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000689 self.assertEqual(int(314), 314)
Walter Dörwald919497e2003-01-19 16:23:59 +0000690 # Check that conversion from float truncates towards zero
691 self.assertEqual(int(-3.14), -3)
692 self.assertEqual(int(3.9), 3)
693 self.assertEqual(int(-3.9), -3)
694 self.assertEqual(int(3.5), 3)
695 self.assertEqual(int(-3.5), -3)
696 # Different base:
Guido van Rossume2a383d2007-01-15 16:59:06 +0000697 self.assertEqual(int("10",16), 16)
Walter Dörwald919497e2003-01-19 16:23:59 +0000698 # Test conversion from strings and various anomalies
Facundo Batista2336bdd2008-01-19 19:12:01 +0000699 # Testing with no sign at front
700 for s, v in test_conv_no_sign:
701 for prefix in "", " ", "\t", " \t\t ":
702 ss = prefix + s
703 vv = v
704 try:
705 self.assertEqual(int(ss), vv)
706 except v:
707 pass
708 # No whitespaces allowed between + or - sign and the number
709 for s, v in test_conv_sign:
710 for sign in "+", "-":
Walter Dörwald919497e2003-01-19 16:23:59 +0000711 for prefix in "", " ", "\t", " \t\t ":
712 ss = prefix + sign + s
713 vv = v
714 if sign == "-" and v is not ValueError:
715 vv = -v
716 try:
717 self.assertEqual(int(ss), vv)
718 except v:
719 pass
720
Christian Heimesa37d4c62007-12-04 23:02:19 +0000721 s = repr(-1-sys.maxsize)
Thomas Wouters89f507f2006-12-13 04:49:30 +0000722 x = int(s)
Christian Heimesa37d4c62007-12-04 23:02:19 +0000723 self.assertEqual(x+1, -sys.maxsize)
Thomas Wouters89f507f2006-12-13 04:49:30 +0000724 self.assert_(isinstance(x, int))
Walter Dörwald919497e2003-01-19 16:23:59 +0000725 # should return long
Christian Heimesa37d4c62007-12-04 23:02:19 +0000726 self.assertEqual(int(s[1:]), sys.maxsize+1)
Walter Dörwald919497e2003-01-19 16:23:59 +0000727
728 # should return long
729 x = int(1e100)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000730 self.assert_(isinstance(x, int))
Walter Dörwald919497e2003-01-19 16:23:59 +0000731 x = int(-1e100)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000732 self.assert_(isinstance(x, int))
Walter Dörwald919497e2003-01-19 16:23:59 +0000733
734
735 # SF bug 434186: 0x80000000/2 != 0x80000000>>1.
736 # Worked by accident in Windows release build, but failed in debug build.
737 # Failed in all Linux builds.
Christian Heimesa37d4c62007-12-04 23:02:19 +0000738 x = -1-sys.maxsize
Walter Dörwald919497e2003-01-19 16:23:59 +0000739 self.assertEqual(x >> 1, x//2)
740
741 self.assertRaises(ValueError, int, '123\0')
742 self.assertRaises(ValueError, int, '53', 40)
743
Thomas Wouters89f507f2006-12-13 04:49:30 +0000744 # SF bug 1545497: embedded NULs were not detected with
745 # explicit base
746 self.assertRaises(ValueError, int, '123\0', 10)
747 self.assertRaises(ValueError, int, '123\x00 245', 20)
748
Walter Dörwald919497e2003-01-19 16:23:59 +0000749 x = int('1' * 600)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000750 self.assert_(isinstance(x, int))
Walter Dörwald919497e2003-01-19 16:23:59 +0000751
Walter Dörwald1f5947b2007-05-22 16:52:54 +0000752 x = int(chr(0x661) * 600)
753 self.assert_(isinstance(x, int))
Walter Dörwald919497e2003-01-19 16:23:59 +0000754
755 self.assertRaises(TypeError, int, 1, 12)
756
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000757 # tests with base 0
758 self.assertRaises(ValueError, int, ' 0123 ', 0) # old octal syntax
759 self.assertEqual(int('000', 0), 0)
760 self.assertEqual(int('0o123', 0), 83)
761 self.assertEqual(int('0x123', 0), 291)
762 self.assertEqual(int('0b100', 0), 4)
763 self.assertEqual(int(' 0O123 ', 0), 83)
764 self.assertEqual(int(' 0X123 ', 0), 291)
765 self.assertEqual(int(' 0B100 ', 0), 4)
766
767 # without base still base 10
768 self.assertEqual(int('0123'), 123)
769 self.assertEqual(int('0123', 10), 123)
770
771 # tests with prefix and base != 0
Neal Norwitz5898fa22005-11-22 05:17:40 +0000772 self.assertEqual(int('0x123', 16), 291)
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000773 self.assertEqual(int('0o123', 8), 83)
774 self.assertEqual(int('0b100', 2), 4)
775 self.assertEqual(int('0X123', 16), 291)
776 self.assertEqual(int('0O123', 8), 83)
777 self.assertEqual(int('0B100', 2), 4)
Walter Dörwald919497e2003-01-19 16:23:59 +0000778
Georg Brandlfceab5a2008-01-19 20:08:23 +0000779 # Bug 1679: "0x" is not a valid hex literal
780 self.assertRaises(ValueError, int, "0x", 16)
781 self.assertRaises(ValueError, int, "0x", 0)
782
783
Thomas Wouters477c8d52006-05-27 19:21:47 +0000784 # SF bug 1334662: int(string, base) wrong answers
785 # Various representations of 2**32 evaluated to 0
786 # rather than 2**32 in previous versions
787
Guido van Rossume2a383d2007-01-15 16:59:06 +0000788 self.assertEqual(int('100000000000000000000000000000000', 2), 4294967296)
789 self.assertEqual(int('102002022201221111211', 3), 4294967296)
790 self.assertEqual(int('10000000000000000', 4), 4294967296)
791 self.assertEqual(int('32244002423141', 5), 4294967296)
792 self.assertEqual(int('1550104015504', 6), 4294967296)
793 self.assertEqual(int('211301422354', 7), 4294967296)
794 self.assertEqual(int('40000000000', 8), 4294967296)
795 self.assertEqual(int('12068657454', 9), 4294967296)
796 self.assertEqual(int('4294967296', 10), 4294967296)
797 self.assertEqual(int('1904440554', 11), 4294967296)
798 self.assertEqual(int('9ba461594', 12), 4294967296)
799 self.assertEqual(int('535a79889', 13), 4294967296)
800 self.assertEqual(int('2ca5b7464', 14), 4294967296)
801 self.assertEqual(int('1a20dcd81', 15), 4294967296)
802 self.assertEqual(int('100000000', 16), 4294967296)
803 self.assertEqual(int('a7ffda91', 17), 4294967296)
804 self.assertEqual(int('704he7g4', 18), 4294967296)
805 self.assertEqual(int('4f5aff66', 19), 4294967296)
806 self.assertEqual(int('3723ai4g', 20), 4294967296)
807 self.assertEqual(int('281d55i4', 21), 4294967296)
808 self.assertEqual(int('1fj8b184', 22), 4294967296)
809 self.assertEqual(int('1606k7ic', 23), 4294967296)
810 self.assertEqual(int('mb994ag', 24), 4294967296)
811 self.assertEqual(int('hek2mgl', 25), 4294967296)
812 self.assertEqual(int('dnchbnm', 26), 4294967296)
813 self.assertEqual(int('b28jpdm', 27), 4294967296)
814 self.assertEqual(int('8pfgih4', 28), 4294967296)
815 self.assertEqual(int('76beigg', 29), 4294967296)
816 self.assertEqual(int('5qmcpqg', 30), 4294967296)
817 self.assertEqual(int('4q0jto4', 31), 4294967296)
818 self.assertEqual(int('4000000', 32), 4294967296)
819 self.assertEqual(int('3aokq94', 33), 4294967296)
820 self.assertEqual(int('2qhxjli', 34), 4294967296)
821 self.assertEqual(int('2br45qb', 35), 4294967296)
822 self.assertEqual(int('1z141z4', 36), 4294967296)
Thomas Wouters477c8d52006-05-27 19:21:47 +0000823
824 # SF bug 1334662: int(string, base) wrong answers
825 # Checks for proper evaluation of 2**32 + 1
Guido van Rossume2a383d2007-01-15 16:59:06 +0000826 self.assertEqual(int('100000000000000000000000000000001', 2), 4294967297)
827 self.assertEqual(int('102002022201221111212', 3), 4294967297)
828 self.assertEqual(int('10000000000000001', 4), 4294967297)
829 self.assertEqual(int('32244002423142', 5), 4294967297)
830 self.assertEqual(int('1550104015505', 6), 4294967297)
831 self.assertEqual(int('211301422355', 7), 4294967297)
832 self.assertEqual(int('40000000001', 8), 4294967297)
833 self.assertEqual(int('12068657455', 9), 4294967297)
834 self.assertEqual(int('4294967297', 10), 4294967297)
835 self.assertEqual(int('1904440555', 11), 4294967297)
836 self.assertEqual(int('9ba461595', 12), 4294967297)
837 self.assertEqual(int('535a7988a', 13), 4294967297)
838 self.assertEqual(int('2ca5b7465', 14), 4294967297)
839 self.assertEqual(int('1a20dcd82', 15), 4294967297)
840 self.assertEqual(int('100000001', 16), 4294967297)
841 self.assertEqual(int('a7ffda92', 17), 4294967297)
842 self.assertEqual(int('704he7g5', 18), 4294967297)
843 self.assertEqual(int('4f5aff67', 19), 4294967297)
844 self.assertEqual(int('3723ai4h', 20), 4294967297)
845 self.assertEqual(int('281d55i5', 21), 4294967297)
846 self.assertEqual(int('1fj8b185', 22), 4294967297)
847 self.assertEqual(int('1606k7id', 23), 4294967297)
848 self.assertEqual(int('mb994ah', 24), 4294967297)
849 self.assertEqual(int('hek2mgm', 25), 4294967297)
850 self.assertEqual(int('dnchbnn', 26), 4294967297)
851 self.assertEqual(int('b28jpdn', 27), 4294967297)
852 self.assertEqual(int('8pfgih5', 28), 4294967297)
853 self.assertEqual(int('76beigh', 29), 4294967297)
854 self.assertEqual(int('5qmcpqh', 30), 4294967297)
855 self.assertEqual(int('4q0jto5', 31), 4294967297)
856 self.assertEqual(int('4000001', 32), 4294967297)
857 self.assertEqual(int('3aokq95', 33), 4294967297)
858 self.assertEqual(int('2qhxjlj', 34), 4294967297)
859 self.assertEqual(int('2br45qc', 35), 4294967297)
860 self.assertEqual(int('1z141z5', 36), 4294967297)
Thomas Wouters477c8d52006-05-27 19:21:47 +0000861
Brett Cannonc3647ac2005-04-26 03:45:26 +0000862 def test_intconversion(self):
863 # Test __int__()
864 class Foo0:
865 def __int__(self):
866 return 42
867
868 class Foo1(object):
869 def __int__(self):
870 return 42
871
872 class Foo2(int):
873 def __int__(self):
874 return 42
875
876 class Foo3(int):
877 def __int__(self):
878 return self
879
880 class Foo4(int):
881 def __int__(self):
Guido van Rossume2a383d2007-01-15 16:59:06 +0000882 return 42
Brett Cannonc3647ac2005-04-26 03:45:26 +0000883
884 class Foo5(int):
885 def __int__(self):
886 return 42.
887
888 self.assertEqual(int(Foo0()), 42)
889 self.assertEqual(int(Foo1()), 42)
890 self.assertEqual(int(Foo2()), 42)
891 self.assertEqual(int(Foo3()), 0)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000892 self.assertEqual(int(Foo4()), 42)
Brett Cannonc3647ac2005-04-26 03:45:26 +0000893 self.assertRaises(TypeError, int, Foo5())
894
Walter Dörwald919497e2003-01-19 16:23:59 +0000895 def test_iter(self):
896 self.assertRaises(TypeError, iter)
897 self.assertRaises(TypeError, iter, 42, 42)
898 lists = [("1", "2"), ["1", "2"], "12"]
Walter Dörwald919497e2003-01-19 16:23:59 +0000899 for l in lists:
900 i = iter(l)
Georg Brandla18af4e2007-04-21 15:47:16 +0000901 self.assertEqual(next(i), '1')
902 self.assertEqual(next(i), '2')
903 self.assertRaises(StopIteration, next, i)
Walter Dörwald919497e2003-01-19 16:23:59 +0000904
905 def test_isinstance(self):
906 class C:
907 pass
908 class D(C):
909 pass
910 class E:
911 pass
912 c = C()
913 d = D()
914 e = E()
915 self.assert_(isinstance(c, C))
916 self.assert_(isinstance(d, C))
917 self.assert_(not isinstance(e, C))
918 self.assert_(not isinstance(c, D))
919 self.assert_(not isinstance('foo', E))
920 self.assertRaises(TypeError, isinstance, E, 'foo')
921 self.assertRaises(TypeError, isinstance)
922
923 def test_issubclass(self):
924 class C:
925 pass
926 class D(C):
927 pass
928 class E:
929 pass
930 c = C()
931 d = D()
932 e = E()
933 self.assert_(issubclass(D, C))
934 self.assert_(issubclass(C, C))
935 self.assert_(not issubclass(C, D))
936 self.assertRaises(TypeError, issubclass, 'foo', E)
937 self.assertRaises(TypeError, issubclass, E, 'foo')
938 self.assertRaises(TypeError, issubclass)
939
940 def test_len(self):
941 self.assertEqual(len('123'), 3)
942 self.assertEqual(len(()), 0)
943 self.assertEqual(len((1, 2, 3, 4)), 4)
944 self.assertEqual(len([1, 2, 3, 4]), 4)
945 self.assertEqual(len({}), 0)
946 self.assertEqual(len({'a':1, 'b': 2}), 2)
947 class BadSeq:
948 def __len__(self):
949 raise ValueError
950 self.assertRaises(ValueError, len, BadSeq())
951
952 def test_list(self):
953 self.assertEqual(list([]), [])
954 l0_3 = [0, 1, 2, 3]
955 l0_3_bis = list(l0_3)
956 self.assertEqual(l0_3, l0_3_bis)
957 self.assert_(l0_3 is not l0_3_bis)
958 self.assertEqual(list(()), [])
959 self.assertEqual(list((0, 1, 2, 3)), [0, 1, 2, 3])
960 self.assertEqual(list(''), [])
961 self.assertEqual(list('spam'), ['s', 'p', 'a', 'm'])
962
Christian Heimesa37d4c62007-12-04 23:02:19 +0000963 if sys.maxsize == 0x7fffffff:
Walter Dörwald919497e2003-01-19 16:23:59 +0000964 # This test can currently only work on 32-bit machines.
965 # XXX If/when PySequence_Length() returns a ssize_t, it should be
966 # XXX re-enabled.
967 # Verify clearing of bug #556025.
Christian Heimesa37d4c62007-12-04 23:02:19 +0000968 # This assumes that the max data size (sys.maxsize) == max
Walter Dörwald919497e2003-01-19 16:23:59 +0000969 # address size this also assumes that the address size is at
970 # least 4 bytes with 8 byte addresses, the bug is not well
971 # tested
972 #
973 # Note: This test is expected to SEGV under Cygwin 1.3.12 or
974 # earlier due to a newlib bug. See the following mailing list
975 # thread for the details:
976
977 # http://sources.redhat.com/ml/newlib/2002/msg00369.html
Christian Heimesa37d4c62007-12-04 23:02:19 +0000978 self.assertRaises(MemoryError, list, range(sys.maxsize // 2))
Walter Dörwald919497e2003-01-19 16:23:59 +0000979
Raymond Hettingeraa241e02004-09-26 19:24:20 +0000980 # This code used to segfault in Py2.4a3
981 x = []
982 x.extend(-y for y in x)
983 self.assertEqual(x, [])
984
Walter Dörwald919497e2003-01-19 16:23:59 +0000985 def test_long(self):
Guido van Rossume2a383d2007-01-15 16:59:06 +0000986 self.assertEqual(int(314), 314)
987 self.assertEqual(int(3.14), 3)
988 self.assertEqual(int(314), 314)
Walter Dörwald919497e2003-01-19 16:23:59 +0000989 # Check that conversion from float truncates towards zero
Guido van Rossume2a383d2007-01-15 16:59:06 +0000990 self.assertEqual(int(-3.14), -3)
991 self.assertEqual(int(3.9), 3)
992 self.assertEqual(int(-3.9), -3)
993 self.assertEqual(int(3.5), 3)
994 self.assertEqual(int(-3.5), -3)
995 self.assertEqual(int("-3"), -3)
Walter Dörwald919497e2003-01-19 16:23:59 +0000996 # Different base:
Guido van Rossume2a383d2007-01-15 16:59:06 +0000997 self.assertEqual(int("10",16), 16)
Walter Dörwald919497e2003-01-19 16:23:59 +0000998 # Check conversions from string (same test set as for int(), and then some)
999 LL = [
Guido van Rossume2a383d2007-01-15 16:59:06 +00001000 ('1' + '0'*20, 10**20),
1001 ('1' + '0'*100, 10**100)
Walter Dörwald919497e2003-01-19 16:23:59 +00001002 ]
Walter Dörwald1f5947b2007-05-22 16:52:54 +00001003 for s, v in LL:
Walter Dörwald919497e2003-01-19 16:23:59 +00001004 for sign in "", "+", "-":
1005 for prefix in "", " ", "\t", " \t\t ":
1006 ss = prefix + sign + s
1007 vv = v
1008 if sign == "-" and v is not ValueError:
1009 vv = -v
1010 try:
Guido van Rossume2a383d2007-01-15 16:59:06 +00001011 self.assertEqual(int(ss), int(vv))
Walter Dörwald919497e2003-01-19 16:23:59 +00001012 except v:
1013 pass
1014
Guido van Rossume2a383d2007-01-15 16:59:06 +00001015 self.assertRaises(ValueError, int, '123\0')
1016 self.assertRaises(ValueError, int, '53', 40)
1017 self.assertRaises(TypeError, int, 1, 12)
Walter Dörwald919497e2003-01-19 16:23:59 +00001018
Guido van Rossumd8faa362007-04-27 19:54:29 +00001019 # SF patch #1638879: embedded NULs were not detected with
1020 # explicit base
1021 self.assertRaises(ValueError, int, '123\0', 10)
1022 self.assertRaises(ValueError, int, '123\x00 245', 20)
1023
Guido van Rossume2a383d2007-01-15 16:59:06 +00001024 self.assertEqual(int('100000000000000000000000000000000', 2),
Thomas Wouters477c8d52006-05-27 19:21:47 +00001025 4294967296)
Guido van Rossume2a383d2007-01-15 16:59:06 +00001026 self.assertEqual(int('102002022201221111211', 3), 4294967296)
1027 self.assertEqual(int('10000000000000000', 4), 4294967296)
1028 self.assertEqual(int('32244002423141', 5), 4294967296)
1029 self.assertEqual(int('1550104015504', 6), 4294967296)
1030 self.assertEqual(int('211301422354', 7), 4294967296)
1031 self.assertEqual(int('40000000000', 8), 4294967296)
1032 self.assertEqual(int('12068657454', 9), 4294967296)
1033 self.assertEqual(int('4294967296', 10), 4294967296)
1034 self.assertEqual(int('1904440554', 11), 4294967296)
1035 self.assertEqual(int('9ba461594', 12), 4294967296)
1036 self.assertEqual(int('535a79889', 13), 4294967296)
1037 self.assertEqual(int('2ca5b7464', 14), 4294967296)
1038 self.assertEqual(int('1a20dcd81', 15), 4294967296)
1039 self.assertEqual(int('100000000', 16), 4294967296)
1040 self.assertEqual(int('a7ffda91', 17), 4294967296)
1041 self.assertEqual(int('704he7g4', 18), 4294967296)
1042 self.assertEqual(int('4f5aff66', 19), 4294967296)
1043 self.assertEqual(int('3723ai4g', 20), 4294967296)
1044 self.assertEqual(int('281d55i4', 21), 4294967296)
1045 self.assertEqual(int('1fj8b184', 22), 4294967296)
1046 self.assertEqual(int('1606k7ic', 23), 4294967296)
1047 self.assertEqual(int('mb994ag', 24), 4294967296)
1048 self.assertEqual(int('hek2mgl', 25), 4294967296)
1049 self.assertEqual(int('dnchbnm', 26), 4294967296)
1050 self.assertEqual(int('b28jpdm', 27), 4294967296)
1051 self.assertEqual(int('8pfgih4', 28), 4294967296)
1052 self.assertEqual(int('76beigg', 29), 4294967296)
1053 self.assertEqual(int('5qmcpqg', 30), 4294967296)
1054 self.assertEqual(int('4q0jto4', 31), 4294967296)
1055 self.assertEqual(int('4000000', 32), 4294967296)
1056 self.assertEqual(int('3aokq94', 33), 4294967296)
1057 self.assertEqual(int('2qhxjli', 34), 4294967296)
1058 self.assertEqual(int('2br45qb', 35), 4294967296)
1059 self.assertEqual(int('1z141z4', 36), 4294967296)
Thomas Wouters477c8d52006-05-27 19:21:47 +00001060
Guido van Rossume2a383d2007-01-15 16:59:06 +00001061 self.assertEqual(int('100000000000000000000000000000001', 2),
Thomas Wouters477c8d52006-05-27 19:21:47 +00001062 4294967297)
Guido van Rossume2a383d2007-01-15 16:59:06 +00001063 self.assertEqual(int('102002022201221111212', 3), 4294967297)
1064 self.assertEqual(int('10000000000000001', 4), 4294967297)
1065 self.assertEqual(int('32244002423142', 5), 4294967297)
1066 self.assertEqual(int('1550104015505', 6), 4294967297)
1067 self.assertEqual(int('211301422355', 7), 4294967297)
1068 self.assertEqual(int('40000000001', 8), 4294967297)
1069 self.assertEqual(int('12068657455', 9), 4294967297)
1070 self.assertEqual(int('4294967297', 10), 4294967297)
1071 self.assertEqual(int('1904440555', 11), 4294967297)
1072 self.assertEqual(int('9ba461595', 12), 4294967297)
1073 self.assertEqual(int('535a7988a', 13), 4294967297)
1074 self.assertEqual(int('2ca5b7465', 14), 4294967297)
1075 self.assertEqual(int('1a20dcd82', 15), 4294967297)
1076 self.assertEqual(int('100000001', 16), 4294967297)
1077 self.assertEqual(int('a7ffda92', 17), 4294967297)
1078 self.assertEqual(int('704he7g5', 18), 4294967297)
1079 self.assertEqual(int('4f5aff67', 19), 4294967297)
1080 self.assertEqual(int('3723ai4h', 20), 4294967297)
1081 self.assertEqual(int('281d55i5', 21), 4294967297)
1082 self.assertEqual(int('1fj8b185', 22), 4294967297)
1083 self.assertEqual(int('1606k7id', 23), 4294967297)
1084 self.assertEqual(int('mb994ah', 24), 4294967297)
1085 self.assertEqual(int('hek2mgm', 25), 4294967297)
1086 self.assertEqual(int('dnchbnn', 26), 4294967297)
1087 self.assertEqual(int('b28jpdn', 27), 4294967297)
1088 self.assertEqual(int('8pfgih5', 28), 4294967297)
1089 self.assertEqual(int('76beigh', 29), 4294967297)
1090 self.assertEqual(int('5qmcpqh', 30), 4294967297)
1091 self.assertEqual(int('4q0jto5', 31), 4294967297)
1092 self.assertEqual(int('4000001', 32), 4294967297)
1093 self.assertEqual(int('3aokq95', 33), 4294967297)
1094 self.assertEqual(int('2qhxjlj', 34), 4294967297)
1095 self.assertEqual(int('2br45qc', 35), 4294967297)
1096 self.assertEqual(int('1z141z5', 36), 4294967297)
Thomas Wouters477c8d52006-05-27 19:21:47 +00001097
1098
Brett Cannonc3647ac2005-04-26 03:45:26 +00001099 def test_longconversion(self):
1100 # Test __long__()
1101 class Foo0:
1102 def __long__(self):
Guido van Rossume2a383d2007-01-15 16:59:06 +00001103 return 42
Brett Cannonc3647ac2005-04-26 03:45:26 +00001104
1105 class Foo1(object):
1106 def __long__(self):
Guido van Rossume2a383d2007-01-15 16:59:06 +00001107 return 42
Brett Cannonc3647ac2005-04-26 03:45:26 +00001108
Guido van Rossume2a383d2007-01-15 16:59:06 +00001109 class Foo2(int):
Brett Cannonc3647ac2005-04-26 03:45:26 +00001110 def __long__(self):
1111 return 42
1112
Guido van Rossume2a383d2007-01-15 16:59:06 +00001113 class Foo3(int):
1114 def __long__(self):
1115 return self
1116
1117 class Foo4(int):
1118 def __long__(self):
1119 return 42
1120
1121 class Foo5(int):
Brett Cannonc3647ac2005-04-26 03:45:26 +00001122 def __long__(self):
1123 return 42.
1124
Guido van Rossume2a383d2007-01-15 16:59:06 +00001125 self.assertEqual(int(Foo0()), 42)
1126 self.assertEqual(int(Foo1()), 42)
Guido van Rossumd8faa362007-04-27 19:54:29 +00001127 # XXX invokes __int__ now
Guido van Rossumddefaf32007-01-14 03:31:43 +00001128 # self.assertEqual(long(Foo2()), 42L)
Guido van Rossume2a383d2007-01-15 16:59:06 +00001129 self.assertEqual(int(Foo3()), 0)
Guido van Rossumd8faa362007-04-27 19:54:29 +00001130 # XXX likewise
Guido van Rossumddefaf32007-01-14 03:31:43 +00001131 # self.assertEqual(long(Foo4()), 42)
1132 # self.assertRaises(TypeError, long, Foo5())
Brett Cannonc3647ac2005-04-26 03:45:26 +00001133
Walter Dörwald919497e2003-01-19 16:23:59 +00001134 def test_map(self):
1135 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001136 list(map(lambda x: x*x, range(1,4))),
Walter Dörwald919497e2003-01-19 16:23:59 +00001137 [1, 4, 9]
1138 )
1139 try:
1140 from math import sqrt
1141 except ImportError:
1142 def sqrt(x):
1143 return pow(x, 0.5)
1144 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001145 list(map(lambda x: list(map(sqrt, x)), [[16, 4], [81, 9]])),
Walter Dörwald919497e2003-01-19 16:23:59 +00001146 [[4.0, 2.0], [9.0, 3.0]]
1147 )
1148 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001149 list(map(lambda x, y: x+y, [1,3,2], [9,1,4])),
Walter Dörwald919497e2003-01-19 16:23:59 +00001150 [10, 4, 6]
1151 )
1152
1153 def plus(*v):
1154 accu = 0
1155 for i in v: accu = accu + i
1156 return accu
1157 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001158 list(map(plus, [1, 3, 7])),
Walter Dörwald919497e2003-01-19 16:23:59 +00001159 [1, 3, 7]
1160 )
1161 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001162 list(map(plus, [1, 3, 7], [4, 9, 2])),
Walter Dörwald919497e2003-01-19 16:23:59 +00001163 [1+4, 3+9, 7+2]
1164 )
1165 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001166 list(map(plus, [1, 3, 7], [4, 9, 2], [1, 1, 0])),
Walter Dörwald919497e2003-01-19 16:23:59 +00001167 [1+4+1, 3+9+1, 7+2+0]
1168 )
1169 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001170 list(map(int, Squares(10))),
Walter Dörwald919497e2003-01-19 16:23:59 +00001171 [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
1172 )
Guido van Rossum47b9ff62006-08-24 00:41:19 +00001173 def Max(a, b):
1174 if a is None:
1175 return b
1176 if b is None:
1177 return a
1178 return max(a, b)
Walter Dörwald919497e2003-01-19 16:23:59 +00001179 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001180 list(map(Max, Squares(3), Squares(2))),
1181 [0, 1]
Walter Dörwald919497e2003-01-19 16:23:59 +00001182 )
1183 self.assertRaises(TypeError, map)
1184 self.assertRaises(TypeError, map, lambda x: x, 42)
Walter Dörwald919497e2003-01-19 16:23:59 +00001185 class BadSeq:
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001186 def __iter__(self):
Walter Dörwald919497e2003-01-19 16:23:59 +00001187 raise ValueError
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001188 yield None
1189 self.assertRaises(ValueError, list, map(lambda x: x, BadSeq()))
Neal Norwitzfcf44352005-11-27 20:37:43 +00001190 def badfunc(x):
1191 raise RuntimeError
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001192 self.assertRaises(RuntimeError, list, map(badfunc, range(5)))
Walter Dörwald919497e2003-01-19 16:23:59 +00001193
1194 def test_max(self):
1195 self.assertEqual(max('123123'), '3')
1196 self.assertEqual(max(1, 2, 3), 3)
1197 self.assertEqual(max((1, 2, 3, 1, 2, 3)), 3)
1198 self.assertEqual(max([1, 2, 3, 1, 2, 3]), 3)
1199
Guido van Rossume2a383d2007-01-15 16:59:06 +00001200 self.assertEqual(max(1, 2, 3.0), 3.0)
1201 self.assertEqual(max(1, 2.0, 3), 3)
1202 self.assertEqual(max(1.0, 2, 3), 3)
Walter Dörwald919497e2003-01-19 16:23:59 +00001203
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001204 for stmt in (
1205 "max(key=int)", # no args
1206 "max(1, key=int)", # single arg not iterable
1207 "max(1, 2, keystone=int)", # wrong keyword
1208 "max(1, 2, key=int, abc=int)", # two many keywords
1209 "max(1, 2, key=1)", # keyfunc is not callable
1210 ):
Tim Peters7f061872004-12-07 21:17:46 +00001211 try:
Georg Brandl7cae87c2006-09-06 06:51:57 +00001212 exec(stmt, globals())
Tim Peters7f061872004-12-07 21:17:46 +00001213 except TypeError:
1214 pass
1215 else:
1216 self.fail(stmt)
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001217
1218 self.assertEqual(max((1,), key=neg), 1) # one elem iterable
1219 self.assertEqual(max((1,2), key=neg), 1) # two elem iterable
1220 self.assertEqual(max(1, 2, key=neg), 1) # two elems
1221
1222 data = [random.randrange(200) for i in range(100)]
1223 keys = dict((elem, random.randrange(50)) for elem in data)
1224 f = keys.__getitem__
1225 self.assertEqual(max(data, key=f),
1226 sorted(reversed(data), key=f)[-1])
1227
Walter Dörwald919497e2003-01-19 16:23:59 +00001228 def test_min(self):
1229 self.assertEqual(min('123123'), '1')
1230 self.assertEqual(min(1, 2, 3), 1)
1231 self.assertEqual(min((1, 2, 3, 1, 2, 3)), 1)
1232 self.assertEqual(min([1, 2, 3, 1, 2, 3]), 1)
1233
Guido van Rossume2a383d2007-01-15 16:59:06 +00001234 self.assertEqual(min(1, 2, 3.0), 1)
1235 self.assertEqual(min(1, 2.0, 3), 1)
1236 self.assertEqual(min(1.0, 2, 3), 1.0)
Walter Dörwald919497e2003-01-19 16:23:59 +00001237
1238 self.assertRaises(TypeError, min)
1239 self.assertRaises(TypeError, min, 42)
1240 self.assertRaises(ValueError, min, ())
1241 class BadSeq:
1242 def __getitem__(self, index):
1243 raise ValueError
1244 self.assertRaises(ValueError, min, BadSeq())
1245 class BadNumber:
1246 def __cmp__(self, other):
1247 raise ValueError
Guido van Rossum47b9ff62006-08-24 00:41:19 +00001248 self.assertRaises(TypeError, min, (42, BadNumber()))
Walter Dörwald919497e2003-01-19 16:23:59 +00001249
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001250 for stmt in (
1251 "min(key=int)", # no args
1252 "min(1, key=int)", # single arg not iterable
1253 "min(1, 2, keystone=int)", # wrong keyword
1254 "min(1, 2, key=int, abc=int)", # two many keywords
1255 "min(1, 2, key=1)", # keyfunc is not callable
1256 ):
Tim Peters7f061872004-12-07 21:17:46 +00001257 try:
Georg Brandl7cae87c2006-09-06 06:51:57 +00001258 exec(stmt, globals())
Tim Peters7f061872004-12-07 21:17:46 +00001259 except TypeError:
1260 pass
1261 else:
1262 self.fail(stmt)
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001263
1264 self.assertEqual(min((1,), key=neg), 1) # one elem iterable
1265 self.assertEqual(min((1,2), key=neg), 2) # two elem iterable
1266 self.assertEqual(min(1, 2, key=neg), 2) # two elems
1267
1268 data = [random.randrange(200) for i in range(100)]
1269 keys = dict((elem, random.randrange(50)) for elem in data)
1270 f = keys.__getitem__
1271 self.assertEqual(min(data, key=f),
1272 sorted(data, key=f)[0])
1273
Georg Brandla18af4e2007-04-21 15:47:16 +00001274 def test_next(self):
1275 it = iter(range(2))
1276 self.assertEqual(next(it), 0)
1277 self.assertEqual(next(it), 1)
1278 self.assertRaises(StopIteration, next, it)
1279 self.assertRaises(StopIteration, next, it)
1280 self.assertEquals(next(it, 42), 42)
1281
1282 class Iter(object):
1283 def __iter__(self):
1284 return self
1285 def __next__(self):
1286 raise StopIteration
1287
1288 it = iter(Iter())
1289 self.assertEquals(next(it, 42), 42)
1290 self.assertRaises(StopIteration, next, it)
1291
1292 def gen():
1293 yield 1
1294 return
1295
1296 it = gen()
1297 self.assertEquals(next(it), 1)
1298 self.assertRaises(StopIteration, next, it)
1299 self.assertEquals(next(it, 42), 42)
1300
Walter Dörwald919497e2003-01-19 16:23:59 +00001301 def test_oct(self):
Guido van Rossumcd16bf62007-06-13 18:07:49 +00001302 self.assertEqual(oct(100), '0o144')
1303 self.assertEqual(oct(100), '0o144')
1304 self.assertEqual(oct(-100), '-0o144')
1305 self.assertEqual(oct(-100), '-0o144')
Walter Dörwald919497e2003-01-19 16:23:59 +00001306 self.assertRaises(TypeError, oct, ())
1307
1308 def write_testfile(self):
Guido van Rossuma88a0332007-02-26 16:59:55 +00001309 # NB the first 4 lines are also used to test input, below
Walter Dörwald919497e2003-01-19 16:23:59 +00001310 fp = open(TESTFN, 'w')
1311 try:
1312 fp.write('1+1\n')
1313 fp.write('1+1\n')
1314 fp.write('The quick brown fox jumps over the lazy dog')
1315 fp.write('.\n')
1316 fp.write('Dear John\n')
1317 fp.write('XXX'*100)
1318 fp.write('YYY'*100)
1319 finally:
1320 fp.close()
1321
1322 def test_open(self):
1323 self.write_testfile()
1324 fp = open(TESTFN, 'r')
1325 try:
1326 self.assertEqual(fp.readline(4), '1+1\n')
1327 self.assertEqual(fp.readline(4), '1+1\n')
1328 self.assertEqual(fp.readline(), 'The quick brown fox jumps over the lazy dog.\n')
1329 self.assertEqual(fp.readline(4), 'Dear')
1330 self.assertEqual(fp.readline(100), ' John\n')
1331 self.assertEqual(fp.read(300), 'XXX'*100)
1332 self.assertEqual(fp.read(1000), 'YYY'*100)
1333 finally:
1334 fp.close()
1335 unlink(TESTFN)
1336
1337 def test_ord(self):
1338 self.assertEqual(ord(' '), 32)
1339 self.assertEqual(ord('A'), 65)
1340 self.assertEqual(ord('a'), 97)
Guido van Rossumf9e91c92007-05-08 21:05:48 +00001341 self.assertEqual(ord('\x80'), 128)
1342 self.assertEqual(ord('\xff'), 255)
1343
1344 self.assertEqual(ord(b' '), 32)
1345 self.assertEqual(ord(b'A'), 65)
1346 self.assertEqual(ord(b'a'), 97)
1347 self.assertEqual(ord(b'\x80'), 128)
1348 self.assertEqual(ord(b'\xff'), 255)
1349
Walter Dörwald1f5947b2007-05-22 16:52:54 +00001350 self.assertEqual(ord(chr(sys.maxunicode)), sys.maxunicode)
Walter Dörwald919497e2003-01-19 16:23:59 +00001351 self.assertRaises(TypeError, ord, 42)
Walter Dörwald919497e2003-01-19 16:23:59 +00001352
Guido van Rossum8ac004e2007-07-15 13:00:05 +00001353 self.assertEqual(ord(chr(0x10FFFF)), 0x10FFFF)
1354 self.assertEqual(ord("\U0000FFFF"), 0x0000FFFF)
1355 self.assertEqual(ord("\U00010000"), 0x00010000)
1356 self.assertEqual(ord("\U00010001"), 0x00010001)
1357 self.assertEqual(ord("\U000FFFFE"), 0x000FFFFE)
1358 self.assertEqual(ord("\U000FFFFF"), 0x000FFFFF)
1359 self.assertEqual(ord("\U00100000"), 0x00100000)
1360 self.assertEqual(ord("\U00100001"), 0x00100001)
1361 self.assertEqual(ord("\U0010FFFE"), 0x0010FFFE)
1362 self.assertEqual(ord("\U0010FFFF"), 0x0010FFFF)
1363
Walter Dörwald919497e2003-01-19 16:23:59 +00001364 def test_pow(self):
1365 self.assertEqual(pow(0,0), 1)
1366 self.assertEqual(pow(0,1), 0)
1367 self.assertEqual(pow(1,0), 1)
1368 self.assertEqual(pow(1,1), 1)
1369
1370 self.assertEqual(pow(2,0), 1)
1371 self.assertEqual(pow(2,10), 1024)
1372 self.assertEqual(pow(2,20), 1024*1024)
1373 self.assertEqual(pow(2,30), 1024*1024*1024)
1374
1375 self.assertEqual(pow(-2,0), 1)
1376 self.assertEqual(pow(-2,1), -2)
1377 self.assertEqual(pow(-2,2), 4)
1378 self.assertEqual(pow(-2,3), -8)
1379
Guido van Rossume2a383d2007-01-15 16:59:06 +00001380 self.assertEqual(pow(0,0), 1)
1381 self.assertEqual(pow(0,1), 0)
1382 self.assertEqual(pow(1,0), 1)
1383 self.assertEqual(pow(1,1), 1)
Walter Dörwald919497e2003-01-19 16:23:59 +00001384
Guido van Rossume2a383d2007-01-15 16:59:06 +00001385 self.assertEqual(pow(2,0), 1)
1386 self.assertEqual(pow(2,10), 1024)
1387 self.assertEqual(pow(2,20), 1024*1024)
1388 self.assertEqual(pow(2,30), 1024*1024*1024)
Walter Dörwald919497e2003-01-19 16:23:59 +00001389
Guido van Rossume2a383d2007-01-15 16:59:06 +00001390 self.assertEqual(pow(-2,0), 1)
1391 self.assertEqual(pow(-2,1), -2)
1392 self.assertEqual(pow(-2,2), 4)
1393 self.assertEqual(pow(-2,3), -8)
Walter Dörwald919497e2003-01-19 16:23:59 +00001394
1395 self.assertAlmostEqual(pow(0.,0), 1.)
1396 self.assertAlmostEqual(pow(0.,1), 0.)
1397 self.assertAlmostEqual(pow(1.,0), 1.)
1398 self.assertAlmostEqual(pow(1.,1), 1.)
1399
1400 self.assertAlmostEqual(pow(2.,0), 1.)
1401 self.assertAlmostEqual(pow(2.,10), 1024.)
1402 self.assertAlmostEqual(pow(2.,20), 1024.*1024.)
1403 self.assertAlmostEqual(pow(2.,30), 1024.*1024.*1024.)
1404
1405 self.assertAlmostEqual(pow(-2.,0), 1.)
1406 self.assertAlmostEqual(pow(-2.,1), -2.)
1407 self.assertAlmostEqual(pow(-2.,2), 4.)
1408 self.assertAlmostEqual(pow(-2.,3), -8.)
1409
Guido van Rossume2a383d2007-01-15 16:59:06 +00001410 for x in 2, 2, 2.0:
1411 for y in 10, 10, 10.0:
1412 for z in 1000, 1000, 1000.0:
Walter Dörwald919497e2003-01-19 16:23:59 +00001413 if isinstance(x, float) or \
1414 isinstance(y, float) or \
1415 isinstance(z, float):
1416 self.assertRaises(TypeError, pow, x, y, z)
1417 else:
1418 self.assertAlmostEqual(pow(x, y, z), 24.0)
1419
Jeffrey Yasskin3404b3c2007-09-07 15:15:49 +00001420 self.assertAlmostEqual(pow(-1, 0.5), 1j)
1421 self.assertAlmostEqual(pow(-1, 1/3), 0.5 + 0.8660254037844386j)
1422
Walter Dörwald919497e2003-01-19 16:23:59 +00001423 self.assertRaises(TypeError, pow, -1, -2, 3)
1424 self.assertRaises(ValueError, pow, 1, 2, 0)
Guido van Rossume2a383d2007-01-15 16:59:06 +00001425 self.assertRaises(TypeError, pow, -1, -2, 3)
1426 self.assertRaises(ValueError, pow, 1, 2, 0)
Walter Dörwald919497e2003-01-19 16:23:59 +00001427
1428 self.assertRaises(TypeError, pow)
1429
1430 def test_range(self):
Guido van Rossum805365e2007-05-07 22:24:25 +00001431 self.assertEqual(list(range(3)), [0, 1, 2])
1432 self.assertEqual(list(range(1, 5)), [1, 2, 3, 4])
1433 self.assertEqual(list(range(0)), [])
1434 self.assertEqual(list(range(-3)), [])
1435 self.assertEqual(list(range(1, 10, 3)), [1, 4, 7])
1436 #self.assertEqual(list(range(5, -5, -3)), [5, 2, -1, -4])
Walter Dörwald919497e2003-01-19 16:23:59 +00001437
Guido van Rossum805365e2007-05-07 22:24:25 +00001438 """ XXX(nnorwitz):
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001439 # Now test range() with longs
Guido van Rossum805365e2007-05-07 22:24:25 +00001440 self.assertEqual(list(range(-2**100)), [])
1441 self.assertEqual(list(range(0, -2**100)), [])
1442 self.assertEqual(list(range(0, 2**100, -1)), [])
1443 self.assertEqual(list(range(0, 2**100, -1)), [])
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001444
Christian Heimesa37d4c62007-12-04 23:02:19 +00001445 a = int(10 * sys.maxsize)
1446 b = int(100 * sys.maxsize)
1447 c = int(50 * sys.maxsize)
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001448
Guido van Rossum805365e2007-05-07 22:24:25 +00001449 self.assertEqual(list(range(a, a+2)), [a, a+1])
1450 self.assertEqual(list(range(a+2, a, -1)), [a+2, a+1])
1451 self.assertEqual(list(range(a+4, a, -2)), [a+4, a+2])
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001452
Guido van Rossum805365e2007-05-07 22:24:25 +00001453 seq = list(range(a, b, c))
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001454 self.assert_(a in seq)
1455 self.assert_(b not in seq)
1456 self.assertEqual(len(seq), 2)
1457
Guido van Rossum805365e2007-05-07 22:24:25 +00001458 seq = list(range(b, a, -c))
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001459 self.assert_(b in seq)
1460 self.assert_(a not in seq)
1461 self.assertEqual(len(seq), 2)
1462
Guido van Rossum805365e2007-05-07 22:24:25 +00001463 seq = list(range(-a, -b, -c))
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001464 self.assert_(-a in seq)
1465 self.assert_(-b not in seq)
1466 self.assertEqual(len(seq), 2)
1467
Walter Dörwald919497e2003-01-19 16:23:59 +00001468 self.assertRaises(TypeError, range)
1469 self.assertRaises(TypeError, range, 1, 2, 3, 4)
1470 self.assertRaises(ValueError, range, 1, 2, 0)
Guido van Rossume2a383d2007-01-15 16:59:06 +00001471 self.assertRaises(ValueError, range, a, a + 1, int(0))
Neal Norwitzfcf44352005-11-27 20:37:43 +00001472
1473 class badzero(int):
Guido van Rossum47b9ff62006-08-24 00:41:19 +00001474 def __eq__(self, other):
Neal Norwitzfcf44352005-11-27 20:37:43 +00001475 raise RuntimeError
Guido van Rossum47b9ff62006-08-24 00:41:19 +00001476 __ne__ = __lt__ = __gt__ = __le__ = __ge__ = __eq__
1477
1478 # XXX This won't (but should!) raise RuntimeError if a is an int...
Neal Norwitzfcf44352005-11-27 20:37:43 +00001479 self.assertRaises(RuntimeError, range, a, a + 1, badzero(1))
Guido van Rossum805365e2007-05-07 22:24:25 +00001480 """
Walter Dörwald919497e2003-01-19 16:23:59 +00001481
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001482 # Reject floats when it would require PyLongs to represent.
1483 # (smaller floats still accepted, but deprecated)
Tim Peters299b3df2003-04-15 14:40:03 +00001484 self.assertRaises(TypeError, range, 1e100, 1e101, 1e101)
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001485
Walter Dörwald357981e2003-04-15 18:59:28 +00001486 self.assertRaises(TypeError, range, 0, "spam")
1487 self.assertRaises(TypeError, range, 0, 42, "spam")
1488
Christian Heimesa37d4c62007-12-04 23:02:19 +00001489 #NEAL self.assertRaises(OverflowError, range, -sys.maxsize, sys.maxsize)
1490 #NEAL self.assertRaises(OverflowError, range, 0, 2*sys.maxsize)
Guido van Rossum805365e2007-05-07 22:24:25 +00001491
Christian Heimesa37d4c62007-12-04 23:02:19 +00001492 self.assertRaises(OverflowError, len, range(0, sys.maxsize**10))
Walter Dörwald357981e2003-04-15 18:59:28 +00001493
Guido van Rossuma88a0332007-02-26 16:59:55 +00001494 def test_input(self):
1495 self.write_testfile()
1496 fp = open(TESTFN, 'r')
1497 savestdin = sys.stdin
1498 savestdout = sys.stdout # Eats the echo
1499 try:
1500 sys.stdin = fp
1501 sys.stdout = BitBucket()
1502 self.assertEqual(input(), "1+1")
1503 self.assertEqual(input('testing\n'), "1+1")
1504 self.assertEqual(input(), 'The quick brown fox jumps over the lazy dog.')
1505 self.assertEqual(input('testing\n'), 'Dear John')
1506
1507 # SF 1535165: don't segfault on closed stdin
1508 # sys.stdout must be a regular file for triggering
1509 sys.stdout = savestdout
1510 sys.stdin.close()
1511 self.assertRaises(ValueError, input)
1512
1513 sys.stdout = BitBucket()
Guido van Rossum34d19282007-08-09 01:03:29 +00001514 sys.stdin = io.StringIO("NULL\0")
Guido van Rossuma88a0332007-02-26 16:59:55 +00001515 self.assertRaises(TypeError, input, 42, 42)
Guido van Rossum34d19282007-08-09 01:03:29 +00001516 sys.stdin = io.StringIO(" 'whitespace'")
Guido van Rossuma88a0332007-02-26 16:59:55 +00001517 self.assertEqual(input(), " 'whitespace'")
Guido van Rossum34d19282007-08-09 01:03:29 +00001518 sys.stdin = io.StringIO()
Guido van Rossuma88a0332007-02-26 16:59:55 +00001519 self.assertRaises(EOFError, input)
1520
1521 del sys.stdout
1522 self.assertRaises(RuntimeError, input, 'prompt')
1523 del sys.stdin
1524 self.assertRaises(RuntimeError, input, 'prompt')
1525 finally:
1526 sys.stdin = savestdin
1527 sys.stdout = savestdout
1528 fp.close()
1529 unlink(TESTFN)
1530
Walter Dörwald919497e2003-01-19 16:23:59 +00001531 def test_repr(self):
1532 self.assertEqual(repr(''), '\'\'')
1533 self.assertEqual(repr(0), '0')
Guido van Rossume2a383d2007-01-15 16:59:06 +00001534 self.assertEqual(repr(0), '0')
Walter Dörwald919497e2003-01-19 16:23:59 +00001535 self.assertEqual(repr(()), '()')
1536 self.assertEqual(repr([]), '[]')
1537 self.assertEqual(repr({}), '{}')
1538 a = []
1539 a.append(a)
1540 self.assertEqual(repr(a), '[[...]]')
1541 a = {}
1542 a[0] = a
1543 self.assertEqual(repr(a), '{0: {...}}')
1544
1545 def test_round(self):
1546 self.assertEqual(round(0.0), 0.0)
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001547 self.assertEqual(type(round(0.0)), int)
Walter Dörwald919497e2003-01-19 16:23:59 +00001548 self.assertEqual(round(1.0), 1.0)
1549 self.assertEqual(round(10.0), 10.0)
1550 self.assertEqual(round(1000000000.0), 1000000000.0)
1551 self.assertEqual(round(1e20), 1e20)
1552
1553 self.assertEqual(round(-1.0), -1.0)
1554 self.assertEqual(round(-10.0), -10.0)
1555 self.assertEqual(round(-1000000000.0), -1000000000.0)
1556 self.assertEqual(round(-1e20), -1e20)
1557
1558 self.assertEqual(round(0.1), 0.0)
1559 self.assertEqual(round(1.1), 1.0)
1560 self.assertEqual(round(10.1), 10.0)
1561 self.assertEqual(round(1000000000.1), 1000000000.0)
1562
1563 self.assertEqual(round(-1.1), -1.0)
1564 self.assertEqual(round(-10.1), -10.0)
1565 self.assertEqual(round(-1000000000.1), -1000000000.0)
1566
1567 self.assertEqual(round(0.9), 1.0)
1568 self.assertEqual(round(9.9), 10.0)
1569 self.assertEqual(round(999999999.9), 1000000000.0)
1570
1571 self.assertEqual(round(-0.9), -1.0)
1572 self.assertEqual(round(-9.9), -10.0)
1573 self.assertEqual(round(-999999999.9), -1000000000.0)
1574
1575 self.assertEqual(round(-8.0, -1), -10.0)
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001576 self.assertEqual(type(round(-8.0, -1)), float)
1577
1578 self.assertEqual(type(round(-8.0, 0)), float)
1579 self.assertEqual(type(round(-8.0, 1)), float)
1580
1581 # Check even / odd rounding behaviour
1582 self.assertEqual(round(5.5), 6)
1583 self.assertEqual(round(6.5), 6)
1584 self.assertEqual(round(-5.5), -6)
1585 self.assertEqual(round(-6.5), -6)
1586
1587 # Check behavior on ints
1588 self.assertEqual(round(0), 0)
1589 self.assertEqual(round(8), 8)
1590 self.assertEqual(round(-8), -8)
1591 self.assertEqual(type(round(0)), int)
1592 self.assertEqual(type(round(-8, -1)), float)
1593 self.assertEqual(type(round(-8, 0)), float)
1594 self.assertEqual(type(round(-8, 1)), float)
Walter Dörwald919497e2003-01-19 16:23:59 +00001595
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001596 # test new kwargs
1597 self.assertEqual(round(number=-8.0, ndigits=-1), -10.0)
1598
Walter Dörwald919497e2003-01-19 16:23:59 +00001599 self.assertRaises(TypeError, round)
1600
Alex Martelliae211f92007-08-22 23:21:33 +00001601 # test generic rounding delegation for reals
1602 class TestRound:
1603 def __round__(self):
1604 return 23
1605
1606 class TestNoRound:
1607 pass
1608
1609 self.assertEqual(round(TestRound()), 23)
1610
1611 self.assertRaises(TypeError, round, 1, 2, 3)
1612 self.assertRaises(TypeError, round, TestNoRound())
1613
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001614 t = TestNoRound()
1615 t.__round__ = lambda *args: args
1616 self.assertRaises(TypeError, round, t)
1617 self.assertRaises(TypeError, round, t, 0)
1618
Walter Dörwald919497e2003-01-19 16:23:59 +00001619 def test_setattr(self):
Tim Petersf2715e02003-02-19 02:35:07 +00001620 setattr(sys, 'spam', 1)
1621 self.assertEqual(sys.spam, 1)
1622 self.assertRaises(TypeError, setattr, sys, 1, 'spam')
1623 self.assertRaises(TypeError, setattr)
Walter Dörwald919497e2003-01-19 16:23:59 +00001624
1625 def test_str(self):
1626 self.assertEqual(str(''), '')
1627 self.assertEqual(str(0), '0')
Guido van Rossume2a383d2007-01-15 16:59:06 +00001628 self.assertEqual(str(0), '0')
Walter Dörwald919497e2003-01-19 16:23:59 +00001629 self.assertEqual(str(()), '()')
1630 self.assertEqual(str([]), '[]')
1631 self.assertEqual(str({}), '{}')
1632 a = []
1633 a.append(a)
1634 self.assertEqual(str(a), '[[...]]')
1635 a = {}
1636 a[0] = a
1637 self.assertEqual(str(a), '{0: {...}}')
1638
Alex Martellia70b1912003-04-22 08:12:33 +00001639 def test_sum(self):
1640 self.assertEqual(sum([]), 0)
Guido van Rossum805365e2007-05-07 22:24:25 +00001641 self.assertEqual(sum(list(range(2,8))), 27)
1642 self.assertEqual(sum(iter(list(range(2,8)))), 27)
Alex Martellia70b1912003-04-22 08:12:33 +00001643 self.assertEqual(sum(Squares(10)), 285)
1644 self.assertEqual(sum(iter(Squares(10))), 285)
1645 self.assertEqual(sum([[1], [2], [3]], []), [1, 2, 3])
1646
1647 self.assertRaises(TypeError, sum)
1648 self.assertRaises(TypeError, sum, 42)
1649 self.assertRaises(TypeError, sum, ['a', 'b', 'c'])
1650 self.assertRaises(TypeError, sum, ['a', 'b', 'c'], '')
1651 self.assertRaises(TypeError, sum, [[1], [2], [3]])
1652 self.assertRaises(TypeError, sum, [{2:3}])
1653 self.assertRaises(TypeError, sum, [{2:3}]*2, {2:3})
1654
1655 class BadSeq:
1656 def __getitem__(self, index):
1657 raise ValueError
1658 self.assertRaises(ValueError, sum, BadSeq())
1659
Walter Dörwald919497e2003-01-19 16:23:59 +00001660 def test_tuple(self):
1661 self.assertEqual(tuple(()), ())
1662 t0_3 = (0, 1, 2, 3)
1663 t0_3_bis = tuple(t0_3)
1664 self.assert_(t0_3 is t0_3_bis)
1665 self.assertEqual(tuple([]), ())
1666 self.assertEqual(tuple([0, 1, 2, 3]), (0, 1, 2, 3))
1667 self.assertEqual(tuple(''), ())
1668 self.assertEqual(tuple('spam'), ('s', 'p', 'a', 'm'))
1669
1670 def test_type(self):
1671 self.assertEqual(type(''), type('123'))
1672 self.assertNotEqual(type(''), type(()))
1673
Guido van Rossumfee7b932005-01-16 00:21:28 +00001674 # We don't want self in vars(), so these are static methods
1675
1676 @staticmethod
Walter Dörwald919497e2003-01-19 16:23:59 +00001677 def get_vars_f0():
1678 return vars()
Walter Dörwald919497e2003-01-19 16:23:59 +00001679
Guido van Rossumfee7b932005-01-16 00:21:28 +00001680 @staticmethod
Walter Dörwald919497e2003-01-19 16:23:59 +00001681 def get_vars_f2():
1682 BuiltinTest.get_vars_f0()
1683 a = 1
1684 b = 2
1685 return vars()
Walter Dörwald919497e2003-01-19 16:23:59 +00001686
1687 def test_vars(self):
Raymond Hettingera690a992003-11-16 16:17:49 +00001688 self.assertEqual(set(vars()), set(dir()))
Walter Dörwald919497e2003-01-19 16:23:59 +00001689 import sys
Raymond Hettingera690a992003-11-16 16:17:49 +00001690 self.assertEqual(set(vars(sys)), set(dir(sys)))
Walter Dörwald919497e2003-01-19 16:23:59 +00001691 self.assertEqual(self.get_vars_f0(), {})
1692 self.assertEqual(self.get_vars_f2(), {'a': 1, 'b': 2})
1693 self.assertRaises(TypeError, vars, 42, 42)
1694 self.assertRaises(TypeError, vars, 42)
1695
1696 def test_zip(self):
1697 a = (1, 2, 3)
1698 b = (4, 5, 6)
1699 t = [(1, 4), (2, 5), (3, 6)]
Guido van Rossum801f0d72006-08-24 19:48:10 +00001700 self.assertEqual(list(zip(a, b)), t)
Walter Dörwald919497e2003-01-19 16:23:59 +00001701 b = [4, 5, 6]
Guido van Rossum801f0d72006-08-24 19:48:10 +00001702 self.assertEqual(list(zip(a, b)), t)
Walter Dörwald919497e2003-01-19 16:23:59 +00001703 b = (4, 5, 6, 7)
Guido van Rossum801f0d72006-08-24 19:48:10 +00001704 self.assertEqual(list(zip(a, b)), t)
Walter Dörwald919497e2003-01-19 16:23:59 +00001705 class I:
1706 def __getitem__(self, i):
1707 if i < 0 or i > 2: raise IndexError
1708 return i + 4
Guido van Rossum801f0d72006-08-24 19:48:10 +00001709 self.assertEqual(list(zip(a, I())), t)
1710 self.assertEqual(list(zip()), [])
1711 self.assertEqual(list(zip(*[])), [])
Walter Dörwald919497e2003-01-19 16:23:59 +00001712 self.assertRaises(TypeError, zip, None)
1713 class G:
1714 pass
1715 self.assertRaises(TypeError, zip, a, G())
1716
1717 # Make sure zip doesn't try to allocate a billion elements for the
1718 # result list when one of its arguments doesn't say how long it is.
1719 # A MemoryError is the most likely failure mode.
1720 class SequenceWithoutALength:
1721 def __getitem__(self, i):
1722 if i == 5:
1723 raise IndexError
1724 else:
1725 return i
1726 self.assertEqual(
Guido van Rossum805365e2007-05-07 22:24:25 +00001727 list(zip(SequenceWithoutALength(), range(2**30))),
Walter Dörwald919497e2003-01-19 16:23:59 +00001728 list(enumerate(range(5)))
1729 )
1730
1731 class BadSeq:
1732 def __getitem__(self, i):
1733 if i == 5:
1734 raise ValueError
1735 else:
1736 return i
Guido van Rossum801f0d72006-08-24 19:48:10 +00001737 self.assertRaises(ValueError, list, zip(BadSeq(), BadSeq()))
Walter Dörwald919497e2003-01-19 16:23:59 +00001738
Raymond Hettinger64958a12003-12-17 20:43:33 +00001739class TestSorted(unittest.TestCase):
1740
1741 def test_basic(self):
Guido van Rossum805365e2007-05-07 22:24:25 +00001742 data = list(range(100))
Raymond Hettinger64958a12003-12-17 20:43:33 +00001743 copy = data[:]
1744 random.shuffle(copy)
1745 self.assertEqual(data, sorted(copy))
1746 self.assertNotEqual(data, copy)
1747
1748 data.reverse()
1749 random.shuffle(copy)
Raymond Hettinger64958a12003-12-17 20:43:33 +00001750 self.assertEqual(data, sorted(copy, key=lambda x: -x))
1751 self.assertNotEqual(data, copy)
1752 random.shuffle(copy)
1753 self.assertEqual(data, sorted(copy, reverse=1))
1754 self.assertNotEqual(data, copy)
1755
1756 def test_inputtypes(self):
1757 s = 'abracadabra'
Walter Dörwald1f5947b2007-05-22 16:52:54 +00001758 types = [list, tuple, str]
Walter Dörwald4e41a4b2005-08-03 17:09:04 +00001759 for T in types:
Raymond Hettinger64958a12003-12-17 20:43:33 +00001760 self.assertEqual(sorted(s), sorted(T(s)))
1761
Walter Dörwald1f5947b2007-05-22 16:52:54 +00001762 s = ''.join(set(s)) # unique letters only
1763 types = [str, set, frozenset, list, tuple, dict.fromkeys]
Walter Dörwald4e41a4b2005-08-03 17:09:04 +00001764 for T in types:
Raymond Hettinger64958a12003-12-17 20:43:33 +00001765 self.assertEqual(sorted(s), sorted(T(s)))
1766
1767 def test_baddecorator(self):
1768 data = 'The quick Brown fox Jumped over The lazy Dog'.split()
1769 self.assertRaises(TypeError, sorted, data, None, lambda x,y: 0)
1770
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001771def test_main(verbose=None):
1772 test_classes = (BuiltinTest, TestSorted)
1773
1774 run_unittest(*test_classes)
1775
1776 # verify reference counting
1777 if verbose and hasattr(sys, "gettotalrefcount"):
1778 import gc
1779 counts = [None] * 5
Guido van Rossum805365e2007-05-07 22:24:25 +00001780 for i in range(len(counts)):
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001781 run_unittest(*test_classes)
1782 gc.collect()
1783 counts[i] = sys.gettotalrefcount()
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001784 print(counts)
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001785
Walter Dörwald919497e2003-01-19 16:23:59 +00001786
1787if __name__ == "__main__":
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001788 test_main(verbose=True)