blob: 4cf59166c42d5ebbcb57d60dcea7b0b3a594dc62 [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
Guido van Rossum34d19282007-08-09 01:03:29 +00008import sys, warnings, random, UserDict, io
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
Walter Dörwald919497e2003-01-19 16:23:59 +0000595 def test_getattr(self):
596 import sys
597 self.assert_(getattr(sys, 'stdout') is sys.stdout)
598 self.assertRaises(TypeError, getattr, sys, 1)
599 self.assertRaises(TypeError, getattr, sys, 1, "foo")
600 self.assertRaises(TypeError, getattr)
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000601 self.assertRaises(AttributeError, getattr, sys, chr(sys.maxunicode))
Walter Dörwald919497e2003-01-19 16:23:59 +0000602
603 def test_hasattr(self):
604 import sys
605 self.assert_(hasattr(sys, 'stdout'))
606 self.assertRaises(TypeError, hasattr, sys, 1)
607 self.assertRaises(TypeError, hasattr)
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000608 self.assertEqual(False, hasattr(sys, chr(sys.maxunicode)))
Walter Dörwald919497e2003-01-19 16:23:59 +0000609
610 def test_hash(self):
611 hash(None)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000612 self.assertEqual(hash(1), hash(1))
Walter Dörwald919497e2003-01-19 16:23:59 +0000613 self.assertEqual(hash(1), hash(1.0))
614 hash('spam')
Guido van Rossum98297ee2007-11-06 21:34:58 +0000615 self.assertEqual(hash('spam'), hash(b'spam'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000616 hash((0,1,2,3))
617 def f(): pass
618 self.assertRaises(TypeError, hash, [])
619 self.assertRaises(TypeError, hash, {})
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000620 # Bug 1536021: Allow hash to return long objects
621 class X:
622 def __hash__(self):
623 return 2**100
624 self.assertEquals(type(hash(X())), int)
625 class Y(object):
626 def __hash__(self):
627 return 2**100
628 self.assertEquals(type(hash(Y())), int)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000629 class Z(int):
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000630 def __hash__(self):
631 return self
Guido van Rossume2a383d2007-01-15 16:59:06 +0000632 self.assertEquals(hash(Z(42)), hash(42))
Walter Dörwald919497e2003-01-19 16:23:59 +0000633
634 def test_hex(self):
635 self.assertEqual(hex(16), '0x10')
Guido van Rossume2a383d2007-01-15 16:59:06 +0000636 self.assertEqual(hex(16), '0x10')
Guido van Rossum6c9e1302003-11-29 23:52:13 +0000637 self.assertEqual(hex(-16), '-0x10')
Guido van Rossume2a383d2007-01-15 16:59:06 +0000638 self.assertEqual(hex(-16), '-0x10')
Walter Dörwald919497e2003-01-19 16:23:59 +0000639 self.assertRaises(TypeError, hex, {})
640
641 def test_id(self):
642 id(None)
643 id(1)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000644 id(1)
Walter Dörwald919497e2003-01-19 16:23:59 +0000645 id(1.0)
646 id('spam')
647 id((0,1,2,3))
648 id([0,1,2,3])
649 id({'spam': 1, 'eggs': 2, 'ham': 3})
650
Guido van Rossuma88a0332007-02-26 16:59:55 +0000651 # Test input() later, alphabetized as if it were raw_input
652
Walter Dörwald919497e2003-01-19 16:23:59 +0000653 def test_int(self):
654 self.assertEqual(int(314), 314)
655 self.assertEqual(int(3.14), 3)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000656 self.assertEqual(int(314), 314)
Walter Dörwald919497e2003-01-19 16:23:59 +0000657 # Check that conversion from float truncates towards zero
658 self.assertEqual(int(-3.14), -3)
659 self.assertEqual(int(3.9), 3)
660 self.assertEqual(int(-3.9), -3)
661 self.assertEqual(int(3.5), 3)
662 self.assertEqual(int(-3.5), -3)
663 # Different base:
Guido van Rossume2a383d2007-01-15 16:59:06 +0000664 self.assertEqual(int("10",16), 16)
Walter Dörwald919497e2003-01-19 16:23:59 +0000665 # Test conversion from strings and various anomalies
Facundo Batista2336bdd2008-01-19 19:12:01 +0000666 # Testing with no sign at front
667 for s, v in test_conv_no_sign:
668 for prefix in "", " ", "\t", " \t\t ":
669 ss = prefix + s
670 vv = v
671 try:
672 self.assertEqual(int(ss), vv)
673 except v:
674 pass
675 # No whitespaces allowed between + or - sign and the number
676 for s, v in test_conv_sign:
677 for sign in "+", "-":
Walter Dörwald919497e2003-01-19 16:23:59 +0000678 for prefix in "", " ", "\t", " \t\t ":
679 ss = prefix + sign + s
680 vv = v
681 if sign == "-" and v is not ValueError:
682 vv = -v
683 try:
684 self.assertEqual(int(ss), vv)
685 except v:
686 pass
687
Christian Heimesa37d4c62007-12-04 23:02:19 +0000688 s = repr(-1-sys.maxsize)
Thomas Wouters89f507f2006-12-13 04:49:30 +0000689 x = int(s)
Christian Heimesa37d4c62007-12-04 23:02:19 +0000690 self.assertEqual(x+1, -sys.maxsize)
Thomas Wouters89f507f2006-12-13 04:49:30 +0000691 self.assert_(isinstance(x, int))
Walter Dörwald919497e2003-01-19 16:23:59 +0000692 # should return long
Christian Heimesa37d4c62007-12-04 23:02:19 +0000693 self.assertEqual(int(s[1:]), sys.maxsize+1)
Walter Dörwald919497e2003-01-19 16:23:59 +0000694
695 # should return long
696 x = int(1e100)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000697 self.assert_(isinstance(x, int))
Walter Dörwald919497e2003-01-19 16:23:59 +0000698 x = int(-1e100)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000699 self.assert_(isinstance(x, int))
Walter Dörwald919497e2003-01-19 16:23:59 +0000700
701
702 # SF bug 434186: 0x80000000/2 != 0x80000000>>1.
703 # Worked by accident in Windows release build, but failed in debug build.
704 # Failed in all Linux builds.
Christian Heimesa37d4c62007-12-04 23:02:19 +0000705 x = -1-sys.maxsize
Walter Dörwald919497e2003-01-19 16:23:59 +0000706 self.assertEqual(x >> 1, x//2)
707
708 self.assertRaises(ValueError, int, '123\0')
709 self.assertRaises(ValueError, int, '53', 40)
710
Thomas Wouters89f507f2006-12-13 04:49:30 +0000711 # SF bug 1545497: embedded NULs were not detected with
712 # explicit base
713 self.assertRaises(ValueError, int, '123\0', 10)
714 self.assertRaises(ValueError, int, '123\x00 245', 20)
715
Walter Dörwald919497e2003-01-19 16:23:59 +0000716 x = int('1' * 600)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000717 self.assert_(isinstance(x, int))
Walter Dörwald919497e2003-01-19 16:23:59 +0000718
Walter Dörwald1f5947b2007-05-22 16:52:54 +0000719 x = int(chr(0x661) * 600)
720 self.assert_(isinstance(x, int))
Walter Dörwald919497e2003-01-19 16:23:59 +0000721
722 self.assertRaises(TypeError, int, 1, 12)
723
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000724 # tests with base 0
725 self.assertRaises(ValueError, int, ' 0123 ', 0) # old octal syntax
726 self.assertEqual(int('000', 0), 0)
727 self.assertEqual(int('0o123', 0), 83)
728 self.assertEqual(int('0x123', 0), 291)
729 self.assertEqual(int('0b100', 0), 4)
730 self.assertEqual(int(' 0O123 ', 0), 83)
731 self.assertEqual(int(' 0X123 ', 0), 291)
732 self.assertEqual(int(' 0B100 ', 0), 4)
733
734 # without base still base 10
735 self.assertEqual(int('0123'), 123)
736 self.assertEqual(int('0123', 10), 123)
737
738 # tests with prefix and base != 0
Neal Norwitz5898fa22005-11-22 05:17:40 +0000739 self.assertEqual(int('0x123', 16), 291)
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000740 self.assertEqual(int('0o123', 8), 83)
741 self.assertEqual(int('0b100', 2), 4)
742 self.assertEqual(int('0X123', 16), 291)
743 self.assertEqual(int('0O123', 8), 83)
744 self.assertEqual(int('0B100', 2), 4)
Walter Dörwald919497e2003-01-19 16:23:59 +0000745
Thomas Wouters477c8d52006-05-27 19:21:47 +0000746 # SF bug 1334662: int(string, base) wrong answers
747 # Various representations of 2**32 evaluated to 0
748 # rather than 2**32 in previous versions
749
Guido van Rossume2a383d2007-01-15 16:59:06 +0000750 self.assertEqual(int('100000000000000000000000000000000', 2), 4294967296)
751 self.assertEqual(int('102002022201221111211', 3), 4294967296)
752 self.assertEqual(int('10000000000000000', 4), 4294967296)
753 self.assertEqual(int('32244002423141', 5), 4294967296)
754 self.assertEqual(int('1550104015504', 6), 4294967296)
755 self.assertEqual(int('211301422354', 7), 4294967296)
756 self.assertEqual(int('40000000000', 8), 4294967296)
757 self.assertEqual(int('12068657454', 9), 4294967296)
758 self.assertEqual(int('4294967296', 10), 4294967296)
759 self.assertEqual(int('1904440554', 11), 4294967296)
760 self.assertEqual(int('9ba461594', 12), 4294967296)
761 self.assertEqual(int('535a79889', 13), 4294967296)
762 self.assertEqual(int('2ca5b7464', 14), 4294967296)
763 self.assertEqual(int('1a20dcd81', 15), 4294967296)
764 self.assertEqual(int('100000000', 16), 4294967296)
765 self.assertEqual(int('a7ffda91', 17), 4294967296)
766 self.assertEqual(int('704he7g4', 18), 4294967296)
767 self.assertEqual(int('4f5aff66', 19), 4294967296)
768 self.assertEqual(int('3723ai4g', 20), 4294967296)
769 self.assertEqual(int('281d55i4', 21), 4294967296)
770 self.assertEqual(int('1fj8b184', 22), 4294967296)
771 self.assertEqual(int('1606k7ic', 23), 4294967296)
772 self.assertEqual(int('mb994ag', 24), 4294967296)
773 self.assertEqual(int('hek2mgl', 25), 4294967296)
774 self.assertEqual(int('dnchbnm', 26), 4294967296)
775 self.assertEqual(int('b28jpdm', 27), 4294967296)
776 self.assertEqual(int('8pfgih4', 28), 4294967296)
777 self.assertEqual(int('76beigg', 29), 4294967296)
778 self.assertEqual(int('5qmcpqg', 30), 4294967296)
779 self.assertEqual(int('4q0jto4', 31), 4294967296)
780 self.assertEqual(int('4000000', 32), 4294967296)
781 self.assertEqual(int('3aokq94', 33), 4294967296)
782 self.assertEqual(int('2qhxjli', 34), 4294967296)
783 self.assertEqual(int('2br45qb', 35), 4294967296)
784 self.assertEqual(int('1z141z4', 36), 4294967296)
Thomas Wouters477c8d52006-05-27 19:21:47 +0000785
786 # SF bug 1334662: int(string, base) wrong answers
787 # Checks for proper evaluation of 2**32 + 1
Guido van Rossume2a383d2007-01-15 16:59:06 +0000788 self.assertEqual(int('100000000000000000000000000000001', 2), 4294967297)
789 self.assertEqual(int('102002022201221111212', 3), 4294967297)
790 self.assertEqual(int('10000000000000001', 4), 4294967297)
791 self.assertEqual(int('32244002423142', 5), 4294967297)
792 self.assertEqual(int('1550104015505', 6), 4294967297)
793 self.assertEqual(int('211301422355', 7), 4294967297)
794 self.assertEqual(int('40000000001', 8), 4294967297)
795 self.assertEqual(int('12068657455', 9), 4294967297)
796 self.assertEqual(int('4294967297', 10), 4294967297)
797 self.assertEqual(int('1904440555', 11), 4294967297)
798 self.assertEqual(int('9ba461595', 12), 4294967297)
799 self.assertEqual(int('535a7988a', 13), 4294967297)
800 self.assertEqual(int('2ca5b7465', 14), 4294967297)
801 self.assertEqual(int('1a20dcd82', 15), 4294967297)
802 self.assertEqual(int('100000001', 16), 4294967297)
803 self.assertEqual(int('a7ffda92', 17), 4294967297)
804 self.assertEqual(int('704he7g5', 18), 4294967297)
805 self.assertEqual(int('4f5aff67', 19), 4294967297)
806 self.assertEqual(int('3723ai4h', 20), 4294967297)
807 self.assertEqual(int('281d55i5', 21), 4294967297)
808 self.assertEqual(int('1fj8b185', 22), 4294967297)
809 self.assertEqual(int('1606k7id', 23), 4294967297)
810 self.assertEqual(int('mb994ah', 24), 4294967297)
811 self.assertEqual(int('hek2mgm', 25), 4294967297)
812 self.assertEqual(int('dnchbnn', 26), 4294967297)
813 self.assertEqual(int('b28jpdn', 27), 4294967297)
814 self.assertEqual(int('8pfgih5', 28), 4294967297)
815 self.assertEqual(int('76beigh', 29), 4294967297)
816 self.assertEqual(int('5qmcpqh', 30), 4294967297)
817 self.assertEqual(int('4q0jto5', 31), 4294967297)
818 self.assertEqual(int('4000001', 32), 4294967297)
819 self.assertEqual(int('3aokq95', 33), 4294967297)
820 self.assertEqual(int('2qhxjlj', 34), 4294967297)
821 self.assertEqual(int('2br45qc', 35), 4294967297)
822 self.assertEqual(int('1z141z5', 36), 4294967297)
Thomas Wouters477c8d52006-05-27 19:21:47 +0000823
Brett Cannonc3647ac2005-04-26 03:45:26 +0000824 def test_intconversion(self):
825 # Test __int__()
826 class Foo0:
827 def __int__(self):
828 return 42
829
830 class Foo1(object):
831 def __int__(self):
832 return 42
833
834 class Foo2(int):
835 def __int__(self):
836 return 42
837
838 class Foo3(int):
839 def __int__(self):
840 return self
841
842 class Foo4(int):
843 def __int__(self):
Guido van Rossume2a383d2007-01-15 16:59:06 +0000844 return 42
Brett Cannonc3647ac2005-04-26 03:45:26 +0000845
846 class Foo5(int):
847 def __int__(self):
848 return 42.
849
850 self.assertEqual(int(Foo0()), 42)
851 self.assertEqual(int(Foo1()), 42)
852 self.assertEqual(int(Foo2()), 42)
853 self.assertEqual(int(Foo3()), 0)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000854 self.assertEqual(int(Foo4()), 42)
Brett Cannonc3647ac2005-04-26 03:45:26 +0000855 self.assertRaises(TypeError, int, Foo5())
856
Walter Dörwald919497e2003-01-19 16:23:59 +0000857 def test_iter(self):
858 self.assertRaises(TypeError, iter)
859 self.assertRaises(TypeError, iter, 42, 42)
860 lists = [("1", "2"), ["1", "2"], "12"]
Walter Dörwald919497e2003-01-19 16:23:59 +0000861 for l in lists:
862 i = iter(l)
Georg Brandla18af4e2007-04-21 15:47:16 +0000863 self.assertEqual(next(i), '1')
864 self.assertEqual(next(i), '2')
865 self.assertRaises(StopIteration, next, i)
Walter Dörwald919497e2003-01-19 16:23:59 +0000866
867 def test_isinstance(self):
868 class C:
869 pass
870 class D(C):
871 pass
872 class E:
873 pass
874 c = C()
875 d = D()
876 e = E()
877 self.assert_(isinstance(c, C))
878 self.assert_(isinstance(d, C))
879 self.assert_(not isinstance(e, C))
880 self.assert_(not isinstance(c, D))
881 self.assert_(not isinstance('foo', E))
882 self.assertRaises(TypeError, isinstance, E, 'foo')
883 self.assertRaises(TypeError, isinstance)
884
885 def test_issubclass(self):
886 class C:
887 pass
888 class D(C):
889 pass
890 class E:
891 pass
892 c = C()
893 d = D()
894 e = E()
895 self.assert_(issubclass(D, C))
896 self.assert_(issubclass(C, C))
897 self.assert_(not issubclass(C, D))
898 self.assertRaises(TypeError, issubclass, 'foo', E)
899 self.assertRaises(TypeError, issubclass, E, 'foo')
900 self.assertRaises(TypeError, issubclass)
901
902 def test_len(self):
903 self.assertEqual(len('123'), 3)
904 self.assertEqual(len(()), 0)
905 self.assertEqual(len((1, 2, 3, 4)), 4)
906 self.assertEqual(len([1, 2, 3, 4]), 4)
907 self.assertEqual(len({}), 0)
908 self.assertEqual(len({'a':1, 'b': 2}), 2)
909 class BadSeq:
910 def __len__(self):
911 raise ValueError
912 self.assertRaises(ValueError, len, BadSeq())
913
914 def test_list(self):
915 self.assertEqual(list([]), [])
916 l0_3 = [0, 1, 2, 3]
917 l0_3_bis = list(l0_3)
918 self.assertEqual(l0_3, l0_3_bis)
919 self.assert_(l0_3 is not l0_3_bis)
920 self.assertEqual(list(()), [])
921 self.assertEqual(list((0, 1, 2, 3)), [0, 1, 2, 3])
922 self.assertEqual(list(''), [])
923 self.assertEqual(list('spam'), ['s', 'p', 'a', 'm'])
924
Christian Heimesa37d4c62007-12-04 23:02:19 +0000925 if sys.maxsize == 0x7fffffff:
Walter Dörwald919497e2003-01-19 16:23:59 +0000926 # This test can currently only work on 32-bit machines.
927 # XXX If/when PySequence_Length() returns a ssize_t, it should be
928 # XXX re-enabled.
929 # Verify clearing of bug #556025.
Christian Heimesa37d4c62007-12-04 23:02:19 +0000930 # This assumes that the max data size (sys.maxsize) == max
Walter Dörwald919497e2003-01-19 16:23:59 +0000931 # address size this also assumes that the address size is at
932 # least 4 bytes with 8 byte addresses, the bug is not well
933 # tested
934 #
935 # Note: This test is expected to SEGV under Cygwin 1.3.12 or
936 # earlier due to a newlib bug. See the following mailing list
937 # thread for the details:
938
939 # http://sources.redhat.com/ml/newlib/2002/msg00369.html
Christian Heimesa37d4c62007-12-04 23:02:19 +0000940 self.assertRaises(MemoryError, list, range(sys.maxsize // 2))
Walter Dörwald919497e2003-01-19 16:23:59 +0000941
Raymond Hettingeraa241e02004-09-26 19:24:20 +0000942 # This code used to segfault in Py2.4a3
943 x = []
944 x.extend(-y for y in x)
945 self.assertEqual(x, [])
946
Walter Dörwald919497e2003-01-19 16:23:59 +0000947 def test_long(self):
Guido van Rossume2a383d2007-01-15 16:59:06 +0000948 self.assertEqual(int(314), 314)
949 self.assertEqual(int(3.14), 3)
950 self.assertEqual(int(314), 314)
Walter Dörwald919497e2003-01-19 16:23:59 +0000951 # Check that conversion from float truncates towards zero
Guido van Rossume2a383d2007-01-15 16:59:06 +0000952 self.assertEqual(int(-3.14), -3)
953 self.assertEqual(int(3.9), 3)
954 self.assertEqual(int(-3.9), -3)
955 self.assertEqual(int(3.5), 3)
956 self.assertEqual(int(-3.5), -3)
957 self.assertEqual(int("-3"), -3)
Walter Dörwald919497e2003-01-19 16:23:59 +0000958 # Different base:
Guido van Rossume2a383d2007-01-15 16:59:06 +0000959 self.assertEqual(int("10",16), 16)
Walter Dörwald919497e2003-01-19 16:23:59 +0000960 # Check conversions from string (same test set as for int(), and then some)
961 LL = [
Guido van Rossume2a383d2007-01-15 16:59:06 +0000962 ('1' + '0'*20, 10**20),
963 ('1' + '0'*100, 10**100)
Walter Dörwald919497e2003-01-19 16:23:59 +0000964 ]
Walter Dörwald1f5947b2007-05-22 16:52:54 +0000965 for s, v in LL:
Walter Dörwald919497e2003-01-19 16:23:59 +0000966 for sign in "", "+", "-":
967 for prefix in "", " ", "\t", " \t\t ":
968 ss = prefix + sign + s
969 vv = v
970 if sign == "-" and v is not ValueError:
971 vv = -v
972 try:
Guido van Rossume2a383d2007-01-15 16:59:06 +0000973 self.assertEqual(int(ss), int(vv))
Walter Dörwald919497e2003-01-19 16:23:59 +0000974 except v:
975 pass
976
Guido van Rossume2a383d2007-01-15 16:59:06 +0000977 self.assertRaises(ValueError, int, '123\0')
978 self.assertRaises(ValueError, int, '53', 40)
979 self.assertRaises(TypeError, int, 1, 12)
Walter Dörwald919497e2003-01-19 16:23:59 +0000980
Guido van Rossumd8faa362007-04-27 19:54:29 +0000981 # SF patch #1638879: embedded NULs were not detected with
982 # explicit base
983 self.assertRaises(ValueError, int, '123\0', 10)
984 self.assertRaises(ValueError, int, '123\x00 245', 20)
985
Guido van Rossume2a383d2007-01-15 16:59:06 +0000986 self.assertEqual(int('100000000000000000000000000000000', 2),
Thomas Wouters477c8d52006-05-27 19:21:47 +0000987 4294967296)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000988 self.assertEqual(int('102002022201221111211', 3), 4294967296)
989 self.assertEqual(int('10000000000000000', 4), 4294967296)
990 self.assertEqual(int('32244002423141', 5), 4294967296)
991 self.assertEqual(int('1550104015504', 6), 4294967296)
992 self.assertEqual(int('211301422354', 7), 4294967296)
993 self.assertEqual(int('40000000000', 8), 4294967296)
994 self.assertEqual(int('12068657454', 9), 4294967296)
995 self.assertEqual(int('4294967296', 10), 4294967296)
996 self.assertEqual(int('1904440554', 11), 4294967296)
997 self.assertEqual(int('9ba461594', 12), 4294967296)
998 self.assertEqual(int('535a79889', 13), 4294967296)
999 self.assertEqual(int('2ca5b7464', 14), 4294967296)
1000 self.assertEqual(int('1a20dcd81', 15), 4294967296)
1001 self.assertEqual(int('100000000', 16), 4294967296)
1002 self.assertEqual(int('a7ffda91', 17), 4294967296)
1003 self.assertEqual(int('704he7g4', 18), 4294967296)
1004 self.assertEqual(int('4f5aff66', 19), 4294967296)
1005 self.assertEqual(int('3723ai4g', 20), 4294967296)
1006 self.assertEqual(int('281d55i4', 21), 4294967296)
1007 self.assertEqual(int('1fj8b184', 22), 4294967296)
1008 self.assertEqual(int('1606k7ic', 23), 4294967296)
1009 self.assertEqual(int('mb994ag', 24), 4294967296)
1010 self.assertEqual(int('hek2mgl', 25), 4294967296)
1011 self.assertEqual(int('dnchbnm', 26), 4294967296)
1012 self.assertEqual(int('b28jpdm', 27), 4294967296)
1013 self.assertEqual(int('8pfgih4', 28), 4294967296)
1014 self.assertEqual(int('76beigg', 29), 4294967296)
1015 self.assertEqual(int('5qmcpqg', 30), 4294967296)
1016 self.assertEqual(int('4q0jto4', 31), 4294967296)
1017 self.assertEqual(int('4000000', 32), 4294967296)
1018 self.assertEqual(int('3aokq94', 33), 4294967296)
1019 self.assertEqual(int('2qhxjli', 34), 4294967296)
1020 self.assertEqual(int('2br45qb', 35), 4294967296)
1021 self.assertEqual(int('1z141z4', 36), 4294967296)
Thomas Wouters477c8d52006-05-27 19:21:47 +00001022
Guido van Rossume2a383d2007-01-15 16:59:06 +00001023 self.assertEqual(int('100000000000000000000000000000001', 2),
Thomas Wouters477c8d52006-05-27 19:21:47 +00001024 4294967297)
Guido van Rossume2a383d2007-01-15 16:59:06 +00001025 self.assertEqual(int('102002022201221111212', 3), 4294967297)
1026 self.assertEqual(int('10000000000000001', 4), 4294967297)
1027 self.assertEqual(int('32244002423142', 5), 4294967297)
1028 self.assertEqual(int('1550104015505', 6), 4294967297)
1029 self.assertEqual(int('211301422355', 7), 4294967297)
1030 self.assertEqual(int('40000000001', 8), 4294967297)
1031 self.assertEqual(int('12068657455', 9), 4294967297)
1032 self.assertEqual(int('4294967297', 10), 4294967297)
1033 self.assertEqual(int('1904440555', 11), 4294967297)
1034 self.assertEqual(int('9ba461595', 12), 4294967297)
1035 self.assertEqual(int('535a7988a', 13), 4294967297)
1036 self.assertEqual(int('2ca5b7465', 14), 4294967297)
1037 self.assertEqual(int('1a20dcd82', 15), 4294967297)
1038 self.assertEqual(int('100000001', 16), 4294967297)
1039 self.assertEqual(int('a7ffda92', 17), 4294967297)
1040 self.assertEqual(int('704he7g5', 18), 4294967297)
1041 self.assertEqual(int('4f5aff67', 19), 4294967297)
1042 self.assertEqual(int('3723ai4h', 20), 4294967297)
1043 self.assertEqual(int('281d55i5', 21), 4294967297)
1044 self.assertEqual(int('1fj8b185', 22), 4294967297)
1045 self.assertEqual(int('1606k7id', 23), 4294967297)
1046 self.assertEqual(int('mb994ah', 24), 4294967297)
1047 self.assertEqual(int('hek2mgm', 25), 4294967297)
1048 self.assertEqual(int('dnchbnn', 26), 4294967297)
1049 self.assertEqual(int('b28jpdn', 27), 4294967297)
1050 self.assertEqual(int('8pfgih5', 28), 4294967297)
1051 self.assertEqual(int('76beigh', 29), 4294967297)
1052 self.assertEqual(int('5qmcpqh', 30), 4294967297)
1053 self.assertEqual(int('4q0jto5', 31), 4294967297)
1054 self.assertEqual(int('4000001', 32), 4294967297)
1055 self.assertEqual(int('3aokq95', 33), 4294967297)
1056 self.assertEqual(int('2qhxjlj', 34), 4294967297)
1057 self.assertEqual(int('2br45qc', 35), 4294967297)
1058 self.assertEqual(int('1z141z5', 36), 4294967297)
Thomas Wouters477c8d52006-05-27 19:21:47 +00001059
1060
Brett Cannonc3647ac2005-04-26 03:45:26 +00001061 def test_longconversion(self):
1062 # Test __long__()
1063 class Foo0:
1064 def __long__(self):
Guido van Rossume2a383d2007-01-15 16:59:06 +00001065 return 42
Brett Cannonc3647ac2005-04-26 03:45:26 +00001066
1067 class Foo1(object):
1068 def __long__(self):
Guido van Rossume2a383d2007-01-15 16:59:06 +00001069 return 42
Brett Cannonc3647ac2005-04-26 03:45:26 +00001070
Guido van Rossume2a383d2007-01-15 16:59:06 +00001071 class Foo2(int):
Brett Cannonc3647ac2005-04-26 03:45:26 +00001072 def __long__(self):
1073 return 42
1074
Guido van Rossume2a383d2007-01-15 16:59:06 +00001075 class Foo3(int):
1076 def __long__(self):
1077 return self
1078
1079 class Foo4(int):
1080 def __long__(self):
1081 return 42
1082
1083 class Foo5(int):
Brett Cannonc3647ac2005-04-26 03:45:26 +00001084 def __long__(self):
1085 return 42.
1086
Guido van Rossume2a383d2007-01-15 16:59:06 +00001087 self.assertEqual(int(Foo0()), 42)
1088 self.assertEqual(int(Foo1()), 42)
Guido van Rossumd8faa362007-04-27 19:54:29 +00001089 # XXX invokes __int__ now
Guido van Rossumddefaf32007-01-14 03:31:43 +00001090 # self.assertEqual(long(Foo2()), 42L)
Guido van Rossume2a383d2007-01-15 16:59:06 +00001091 self.assertEqual(int(Foo3()), 0)
Guido van Rossumd8faa362007-04-27 19:54:29 +00001092 # XXX likewise
Guido van Rossumddefaf32007-01-14 03:31:43 +00001093 # self.assertEqual(long(Foo4()), 42)
1094 # self.assertRaises(TypeError, long, Foo5())
Brett Cannonc3647ac2005-04-26 03:45:26 +00001095
Walter Dörwald919497e2003-01-19 16:23:59 +00001096 def test_map(self):
1097 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001098 list(map(None, 'hello')),
1099 [('h',), ('e',), ('l',), ('l',), ('o',)]
Walter Dörwald919497e2003-01-19 16:23:59 +00001100 )
1101 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001102 list(map(None, 'abcd', 'efg')),
1103 [('a', 'e'), ('b', 'f'), ('c', 'g')]
Walter Dörwald919497e2003-01-19 16:23:59 +00001104 )
1105 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001106 list(map(None, range(3))),
1107 [(0,), (1,), (2,)]
Walter Dörwald919497e2003-01-19 16:23:59 +00001108 )
1109 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001110 list(map(lambda x: x*x, range(1,4))),
Walter Dörwald919497e2003-01-19 16:23:59 +00001111 [1, 4, 9]
1112 )
1113 try:
1114 from math import sqrt
1115 except ImportError:
1116 def sqrt(x):
1117 return pow(x, 0.5)
1118 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001119 list(map(lambda x: list(map(sqrt, x)), [[16, 4], [81, 9]])),
Walter Dörwald919497e2003-01-19 16:23:59 +00001120 [[4.0, 2.0], [9.0, 3.0]]
1121 )
1122 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001123 list(map(lambda x, y: x+y, [1,3,2], [9,1,4])),
Walter Dörwald919497e2003-01-19 16:23:59 +00001124 [10, 4, 6]
1125 )
1126
1127 def plus(*v):
1128 accu = 0
1129 for i in v: accu = accu + i
1130 return accu
1131 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001132 list(map(plus, [1, 3, 7])),
Walter Dörwald919497e2003-01-19 16:23:59 +00001133 [1, 3, 7]
1134 )
1135 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001136 list(map(plus, [1, 3, 7], [4, 9, 2])),
Walter Dörwald919497e2003-01-19 16:23:59 +00001137 [1+4, 3+9, 7+2]
1138 )
1139 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001140 list(map(plus, [1, 3, 7], [4, 9, 2], [1, 1, 0])),
Walter Dörwald919497e2003-01-19 16:23:59 +00001141 [1+4+1, 3+9+1, 7+2+0]
1142 )
1143 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001144 list(map(None, Squares(10))),
1145 [(0,), (1,), (4,), (9,), (16,), (25,), (36,), (49,), (64,), (81,)]
1146 )
1147 self.assertEqual(
1148 list(map(int, Squares(10))),
Walter Dörwald919497e2003-01-19 16:23:59 +00001149 [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
1150 )
1151 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001152 list(map(None, Squares(3), Squares(2))),
1153 [(0,0), (1,1)]
Walter Dörwald919497e2003-01-19 16:23:59 +00001154 )
Guido van Rossum47b9ff62006-08-24 00:41:19 +00001155 def Max(a, b):
1156 if a is None:
1157 return b
1158 if b is None:
1159 return a
1160 return max(a, b)
Walter Dörwald919497e2003-01-19 16:23:59 +00001161 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001162 list(map(Max, Squares(3), Squares(2))),
1163 [0, 1]
Walter Dörwald919497e2003-01-19 16:23:59 +00001164 )
1165 self.assertRaises(TypeError, map)
1166 self.assertRaises(TypeError, map, lambda x: x, 42)
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001167 self.assertEqual(list(map(None, [42])), [(42,)])
Walter Dörwald919497e2003-01-19 16:23:59 +00001168 class BadSeq:
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001169 def __iter__(self):
Walter Dörwald919497e2003-01-19 16:23:59 +00001170 raise ValueError
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001171 yield None
1172 self.assertRaises(ValueError, list, map(lambda x: x, BadSeq()))
Neal Norwitzfcf44352005-11-27 20:37:43 +00001173 def badfunc(x):
1174 raise RuntimeError
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001175 self.assertRaises(RuntimeError, list, map(badfunc, range(5)))
Walter Dörwald919497e2003-01-19 16:23:59 +00001176
1177 def test_max(self):
1178 self.assertEqual(max('123123'), '3')
1179 self.assertEqual(max(1, 2, 3), 3)
1180 self.assertEqual(max((1, 2, 3, 1, 2, 3)), 3)
1181 self.assertEqual(max([1, 2, 3, 1, 2, 3]), 3)
1182
Guido van Rossume2a383d2007-01-15 16:59:06 +00001183 self.assertEqual(max(1, 2, 3.0), 3.0)
1184 self.assertEqual(max(1, 2.0, 3), 3)
1185 self.assertEqual(max(1.0, 2, 3), 3)
Walter Dörwald919497e2003-01-19 16:23:59 +00001186
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001187 for stmt in (
1188 "max(key=int)", # no args
1189 "max(1, key=int)", # single arg not iterable
1190 "max(1, 2, keystone=int)", # wrong keyword
1191 "max(1, 2, key=int, abc=int)", # two many keywords
1192 "max(1, 2, key=1)", # keyfunc is not callable
1193 ):
Tim Peters7f061872004-12-07 21:17:46 +00001194 try:
Georg Brandl7cae87c2006-09-06 06:51:57 +00001195 exec(stmt, globals())
Tim Peters7f061872004-12-07 21:17:46 +00001196 except TypeError:
1197 pass
1198 else:
1199 self.fail(stmt)
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001200
1201 self.assertEqual(max((1,), key=neg), 1) # one elem iterable
1202 self.assertEqual(max((1,2), key=neg), 1) # two elem iterable
1203 self.assertEqual(max(1, 2, key=neg), 1) # two elems
1204
1205 data = [random.randrange(200) for i in range(100)]
1206 keys = dict((elem, random.randrange(50)) for elem in data)
1207 f = keys.__getitem__
1208 self.assertEqual(max(data, key=f),
1209 sorted(reversed(data), key=f)[-1])
1210
Walter Dörwald919497e2003-01-19 16:23:59 +00001211 def test_min(self):
1212 self.assertEqual(min('123123'), '1')
1213 self.assertEqual(min(1, 2, 3), 1)
1214 self.assertEqual(min((1, 2, 3, 1, 2, 3)), 1)
1215 self.assertEqual(min([1, 2, 3, 1, 2, 3]), 1)
1216
Guido van Rossume2a383d2007-01-15 16:59:06 +00001217 self.assertEqual(min(1, 2, 3.0), 1)
1218 self.assertEqual(min(1, 2.0, 3), 1)
1219 self.assertEqual(min(1.0, 2, 3), 1.0)
Walter Dörwald919497e2003-01-19 16:23:59 +00001220
1221 self.assertRaises(TypeError, min)
1222 self.assertRaises(TypeError, min, 42)
1223 self.assertRaises(ValueError, min, ())
1224 class BadSeq:
1225 def __getitem__(self, index):
1226 raise ValueError
1227 self.assertRaises(ValueError, min, BadSeq())
1228 class BadNumber:
1229 def __cmp__(self, other):
1230 raise ValueError
Guido van Rossum47b9ff62006-08-24 00:41:19 +00001231 self.assertRaises(TypeError, min, (42, BadNumber()))
Walter Dörwald919497e2003-01-19 16:23:59 +00001232
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001233 for stmt in (
1234 "min(key=int)", # no args
1235 "min(1, key=int)", # single arg not iterable
1236 "min(1, 2, keystone=int)", # wrong keyword
1237 "min(1, 2, key=int, abc=int)", # two many keywords
1238 "min(1, 2, key=1)", # keyfunc is not callable
1239 ):
Tim Peters7f061872004-12-07 21:17:46 +00001240 try:
Georg Brandl7cae87c2006-09-06 06:51:57 +00001241 exec(stmt, globals())
Tim Peters7f061872004-12-07 21:17:46 +00001242 except TypeError:
1243 pass
1244 else:
1245 self.fail(stmt)
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001246
1247 self.assertEqual(min((1,), key=neg), 1) # one elem iterable
1248 self.assertEqual(min((1,2), key=neg), 2) # two elem iterable
1249 self.assertEqual(min(1, 2, key=neg), 2) # two elems
1250
1251 data = [random.randrange(200) for i in range(100)]
1252 keys = dict((elem, random.randrange(50)) for elem in data)
1253 f = keys.__getitem__
1254 self.assertEqual(min(data, key=f),
1255 sorted(data, key=f)[0])
1256
Georg Brandla18af4e2007-04-21 15:47:16 +00001257 def test_next(self):
1258 it = iter(range(2))
1259 self.assertEqual(next(it), 0)
1260 self.assertEqual(next(it), 1)
1261 self.assertRaises(StopIteration, next, it)
1262 self.assertRaises(StopIteration, next, it)
1263 self.assertEquals(next(it, 42), 42)
1264
1265 class Iter(object):
1266 def __iter__(self):
1267 return self
1268 def __next__(self):
1269 raise StopIteration
1270
1271 it = iter(Iter())
1272 self.assertEquals(next(it, 42), 42)
1273 self.assertRaises(StopIteration, next, it)
1274
1275 def gen():
1276 yield 1
1277 return
1278
1279 it = gen()
1280 self.assertEquals(next(it), 1)
1281 self.assertRaises(StopIteration, next, it)
1282 self.assertEquals(next(it, 42), 42)
1283
Walter Dörwald919497e2003-01-19 16:23:59 +00001284 def test_oct(self):
Guido van Rossumcd16bf62007-06-13 18:07:49 +00001285 self.assertEqual(oct(100), '0o144')
1286 self.assertEqual(oct(100), '0o144')
1287 self.assertEqual(oct(-100), '-0o144')
1288 self.assertEqual(oct(-100), '-0o144')
Walter Dörwald919497e2003-01-19 16:23:59 +00001289 self.assertRaises(TypeError, oct, ())
1290
1291 def write_testfile(self):
Guido van Rossuma88a0332007-02-26 16:59:55 +00001292 # NB the first 4 lines are also used to test input, below
Walter Dörwald919497e2003-01-19 16:23:59 +00001293 fp = open(TESTFN, 'w')
1294 try:
1295 fp.write('1+1\n')
1296 fp.write('1+1\n')
1297 fp.write('The quick brown fox jumps over the lazy dog')
1298 fp.write('.\n')
1299 fp.write('Dear John\n')
1300 fp.write('XXX'*100)
1301 fp.write('YYY'*100)
1302 finally:
1303 fp.close()
1304
1305 def test_open(self):
1306 self.write_testfile()
1307 fp = open(TESTFN, 'r')
1308 try:
1309 self.assertEqual(fp.readline(4), '1+1\n')
1310 self.assertEqual(fp.readline(4), '1+1\n')
1311 self.assertEqual(fp.readline(), 'The quick brown fox jumps over the lazy dog.\n')
1312 self.assertEqual(fp.readline(4), 'Dear')
1313 self.assertEqual(fp.readline(100), ' John\n')
1314 self.assertEqual(fp.read(300), 'XXX'*100)
1315 self.assertEqual(fp.read(1000), 'YYY'*100)
1316 finally:
1317 fp.close()
1318 unlink(TESTFN)
1319
1320 def test_ord(self):
1321 self.assertEqual(ord(' '), 32)
1322 self.assertEqual(ord('A'), 65)
1323 self.assertEqual(ord('a'), 97)
Guido van Rossumf9e91c92007-05-08 21:05:48 +00001324 self.assertEqual(ord('\x80'), 128)
1325 self.assertEqual(ord('\xff'), 255)
1326
1327 self.assertEqual(ord(b' '), 32)
1328 self.assertEqual(ord(b'A'), 65)
1329 self.assertEqual(ord(b'a'), 97)
1330 self.assertEqual(ord(b'\x80'), 128)
1331 self.assertEqual(ord(b'\xff'), 255)
1332
Walter Dörwald1f5947b2007-05-22 16:52:54 +00001333 self.assertEqual(ord(chr(sys.maxunicode)), sys.maxunicode)
Walter Dörwald919497e2003-01-19 16:23:59 +00001334 self.assertRaises(TypeError, ord, 42)
Walter Dörwald919497e2003-01-19 16:23:59 +00001335
Guido van Rossum8ac004e2007-07-15 13:00:05 +00001336 self.assertEqual(ord(chr(0x10FFFF)), 0x10FFFF)
1337 self.assertEqual(ord("\U0000FFFF"), 0x0000FFFF)
1338 self.assertEqual(ord("\U00010000"), 0x00010000)
1339 self.assertEqual(ord("\U00010001"), 0x00010001)
1340 self.assertEqual(ord("\U000FFFFE"), 0x000FFFFE)
1341 self.assertEqual(ord("\U000FFFFF"), 0x000FFFFF)
1342 self.assertEqual(ord("\U00100000"), 0x00100000)
1343 self.assertEqual(ord("\U00100001"), 0x00100001)
1344 self.assertEqual(ord("\U0010FFFE"), 0x0010FFFE)
1345 self.assertEqual(ord("\U0010FFFF"), 0x0010FFFF)
1346
Walter Dörwald919497e2003-01-19 16:23:59 +00001347 def test_pow(self):
1348 self.assertEqual(pow(0,0), 1)
1349 self.assertEqual(pow(0,1), 0)
1350 self.assertEqual(pow(1,0), 1)
1351 self.assertEqual(pow(1,1), 1)
1352
1353 self.assertEqual(pow(2,0), 1)
1354 self.assertEqual(pow(2,10), 1024)
1355 self.assertEqual(pow(2,20), 1024*1024)
1356 self.assertEqual(pow(2,30), 1024*1024*1024)
1357
1358 self.assertEqual(pow(-2,0), 1)
1359 self.assertEqual(pow(-2,1), -2)
1360 self.assertEqual(pow(-2,2), 4)
1361 self.assertEqual(pow(-2,3), -8)
1362
Guido van Rossume2a383d2007-01-15 16:59:06 +00001363 self.assertEqual(pow(0,0), 1)
1364 self.assertEqual(pow(0,1), 0)
1365 self.assertEqual(pow(1,0), 1)
1366 self.assertEqual(pow(1,1), 1)
Walter Dörwald919497e2003-01-19 16:23:59 +00001367
Guido van Rossume2a383d2007-01-15 16:59:06 +00001368 self.assertEqual(pow(2,0), 1)
1369 self.assertEqual(pow(2,10), 1024)
1370 self.assertEqual(pow(2,20), 1024*1024)
1371 self.assertEqual(pow(2,30), 1024*1024*1024)
Walter Dörwald919497e2003-01-19 16:23:59 +00001372
Guido van Rossume2a383d2007-01-15 16:59:06 +00001373 self.assertEqual(pow(-2,0), 1)
1374 self.assertEqual(pow(-2,1), -2)
1375 self.assertEqual(pow(-2,2), 4)
1376 self.assertEqual(pow(-2,3), -8)
Walter Dörwald919497e2003-01-19 16:23:59 +00001377
1378 self.assertAlmostEqual(pow(0.,0), 1.)
1379 self.assertAlmostEqual(pow(0.,1), 0.)
1380 self.assertAlmostEqual(pow(1.,0), 1.)
1381 self.assertAlmostEqual(pow(1.,1), 1.)
1382
1383 self.assertAlmostEqual(pow(2.,0), 1.)
1384 self.assertAlmostEqual(pow(2.,10), 1024.)
1385 self.assertAlmostEqual(pow(2.,20), 1024.*1024.)
1386 self.assertAlmostEqual(pow(2.,30), 1024.*1024.*1024.)
1387
1388 self.assertAlmostEqual(pow(-2.,0), 1.)
1389 self.assertAlmostEqual(pow(-2.,1), -2.)
1390 self.assertAlmostEqual(pow(-2.,2), 4.)
1391 self.assertAlmostEqual(pow(-2.,3), -8.)
1392
Guido van Rossume2a383d2007-01-15 16:59:06 +00001393 for x in 2, 2, 2.0:
1394 for y in 10, 10, 10.0:
1395 for z in 1000, 1000, 1000.0:
Walter Dörwald919497e2003-01-19 16:23:59 +00001396 if isinstance(x, float) or \
1397 isinstance(y, float) or \
1398 isinstance(z, float):
1399 self.assertRaises(TypeError, pow, x, y, z)
1400 else:
1401 self.assertAlmostEqual(pow(x, y, z), 24.0)
1402
Jeffrey Yasskin3404b3c2007-09-07 15:15:49 +00001403 self.assertAlmostEqual(pow(-1, 0.5), 1j)
1404 self.assertAlmostEqual(pow(-1, 1/3), 0.5 + 0.8660254037844386j)
1405
Walter Dörwald919497e2003-01-19 16:23:59 +00001406 self.assertRaises(TypeError, pow, -1, -2, 3)
1407 self.assertRaises(ValueError, pow, 1, 2, 0)
Guido van Rossume2a383d2007-01-15 16:59:06 +00001408 self.assertRaises(TypeError, pow, -1, -2, 3)
1409 self.assertRaises(ValueError, pow, 1, 2, 0)
Walter Dörwald919497e2003-01-19 16:23:59 +00001410
1411 self.assertRaises(TypeError, pow)
1412
1413 def test_range(self):
Guido van Rossum805365e2007-05-07 22:24:25 +00001414 self.assertEqual(list(range(3)), [0, 1, 2])
1415 self.assertEqual(list(range(1, 5)), [1, 2, 3, 4])
1416 self.assertEqual(list(range(0)), [])
1417 self.assertEqual(list(range(-3)), [])
1418 self.assertEqual(list(range(1, 10, 3)), [1, 4, 7])
1419 #self.assertEqual(list(range(5, -5, -3)), [5, 2, -1, -4])
Walter Dörwald919497e2003-01-19 16:23:59 +00001420
Guido van Rossum805365e2007-05-07 22:24:25 +00001421 """ XXX(nnorwitz):
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001422 # Now test range() with longs
Guido van Rossum805365e2007-05-07 22:24:25 +00001423 self.assertEqual(list(range(-2**100)), [])
1424 self.assertEqual(list(range(0, -2**100)), [])
1425 self.assertEqual(list(range(0, 2**100, -1)), [])
1426 self.assertEqual(list(range(0, 2**100, -1)), [])
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001427
Christian Heimesa37d4c62007-12-04 23:02:19 +00001428 a = int(10 * sys.maxsize)
1429 b = int(100 * sys.maxsize)
1430 c = int(50 * sys.maxsize)
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001431
Guido van Rossum805365e2007-05-07 22:24:25 +00001432 self.assertEqual(list(range(a, a+2)), [a, a+1])
1433 self.assertEqual(list(range(a+2, a, -1)), [a+2, a+1])
1434 self.assertEqual(list(range(a+4, a, -2)), [a+4, a+2])
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001435
Guido van Rossum805365e2007-05-07 22:24:25 +00001436 seq = list(range(a, b, c))
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001437 self.assert_(a in seq)
1438 self.assert_(b not in seq)
1439 self.assertEqual(len(seq), 2)
1440
Guido van Rossum805365e2007-05-07 22:24:25 +00001441 seq = list(range(b, a, -c))
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001442 self.assert_(b in seq)
1443 self.assert_(a not in seq)
1444 self.assertEqual(len(seq), 2)
1445
Guido van Rossum805365e2007-05-07 22:24:25 +00001446 seq = list(range(-a, -b, -c))
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001447 self.assert_(-a in seq)
1448 self.assert_(-b not in seq)
1449 self.assertEqual(len(seq), 2)
1450
Walter Dörwald919497e2003-01-19 16:23:59 +00001451 self.assertRaises(TypeError, range)
1452 self.assertRaises(TypeError, range, 1, 2, 3, 4)
1453 self.assertRaises(ValueError, range, 1, 2, 0)
Guido van Rossume2a383d2007-01-15 16:59:06 +00001454 self.assertRaises(ValueError, range, a, a + 1, int(0))
Neal Norwitzfcf44352005-11-27 20:37:43 +00001455
1456 class badzero(int):
Guido van Rossum47b9ff62006-08-24 00:41:19 +00001457 def __eq__(self, other):
Neal Norwitzfcf44352005-11-27 20:37:43 +00001458 raise RuntimeError
Guido van Rossum47b9ff62006-08-24 00:41:19 +00001459 __ne__ = __lt__ = __gt__ = __le__ = __ge__ = __eq__
1460
1461 # XXX This won't (but should!) raise RuntimeError if a is an int...
Neal Norwitzfcf44352005-11-27 20:37:43 +00001462 self.assertRaises(RuntimeError, range, a, a + 1, badzero(1))
Guido van Rossum805365e2007-05-07 22:24:25 +00001463 """
Walter Dörwald919497e2003-01-19 16:23:59 +00001464
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001465 # Reject floats when it would require PyLongs to represent.
1466 # (smaller floats still accepted, but deprecated)
Tim Peters299b3df2003-04-15 14:40:03 +00001467 self.assertRaises(TypeError, range, 1e100, 1e101, 1e101)
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001468
Walter Dörwald357981e2003-04-15 18:59:28 +00001469 self.assertRaises(TypeError, range, 0, "spam")
1470 self.assertRaises(TypeError, range, 0, 42, "spam")
1471
Christian Heimesa37d4c62007-12-04 23:02:19 +00001472 #NEAL self.assertRaises(OverflowError, range, -sys.maxsize, sys.maxsize)
1473 #NEAL self.assertRaises(OverflowError, range, 0, 2*sys.maxsize)
Guido van Rossum805365e2007-05-07 22:24:25 +00001474
Christian Heimesa37d4c62007-12-04 23:02:19 +00001475 self.assertRaises(OverflowError, len, range(0, sys.maxsize**10))
Walter Dörwald357981e2003-04-15 18:59:28 +00001476
Guido van Rossuma88a0332007-02-26 16:59:55 +00001477 def test_input(self):
1478 self.write_testfile()
1479 fp = open(TESTFN, 'r')
1480 savestdin = sys.stdin
1481 savestdout = sys.stdout # Eats the echo
1482 try:
1483 sys.stdin = fp
1484 sys.stdout = BitBucket()
1485 self.assertEqual(input(), "1+1")
1486 self.assertEqual(input('testing\n'), "1+1")
1487 self.assertEqual(input(), 'The quick brown fox jumps over the lazy dog.')
1488 self.assertEqual(input('testing\n'), 'Dear John')
1489
1490 # SF 1535165: don't segfault on closed stdin
1491 # sys.stdout must be a regular file for triggering
1492 sys.stdout = savestdout
1493 sys.stdin.close()
1494 self.assertRaises(ValueError, input)
1495
1496 sys.stdout = BitBucket()
Guido van Rossum34d19282007-08-09 01:03:29 +00001497 sys.stdin = io.StringIO("NULL\0")
Guido van Rossuma88a0332007-02-26 16:59:55 +00001498 self.assertRaises(TypeError, input, 42, 42)
Guido van Rossum34d19282007-08-09 01:03:29 +00001499 sys.stdin = io.StringIO(" 'whitespace'")
Guido van Rossuma88a0332007-02-26 16:59:55 +00001500 self.assertEqual(input(), " 'whitespace'")
Guido van Rossum34d19282007-08-09 01:03:29 +00001501 sys.stdin = io.StringIO()
Guido van Rossuma88a0332007-02-26 16:59:55 +00001502 self.assertRaises(EOFError, input)
1503
1504 del sys.stdout
1505 self.assertRaises(RuntimeError, input, 'prompt')
1506 del sys.stdin
1507 self.assertRaises(RuntimeError, input, 'prompt')
1508 finally:
1509 sys.stdin = savestdin
1510 sys.stdout = savestdout
1511 fp.close()
1512 unlink(TESTFN)
1513
Walter Dörwald919497e2003-01-19 16:23:59 +00001514 def test_repr(self):
1515 self.assertEqual(repr(''), '\'\'')
1516 self.assertEqual(repr(0), '0')
Guido van Rossume2a383d2007-01-15 16:59:06 +00001517 self.assertEqual(repr(0), '0')
Walter Dörwald919497e2003-01-19 16:23:59 +00001518 self.assertEqual(repr(()), '()')
1519 self.assertEqual(repr([]), '[]')
1520 self.assertEqual(repr({}), '{}')
1521 a = []
1522 a.append(a)
1523 self.assertEqual(repr(a), '[[...]]')
1524 a = {}
1525 a[0] = a
1526 self.assertEqual(repr(a), '{0: {...}}')
1527
1528 def test_round(self):
1529 self.assertEqual(round(0.0), 0.0)
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001530 self.assertEqual(type(round(0.0)), int)
Walter Dörwald919497e2003-01-19 16:23:59 +00001531 self.assertEqual(round(1.0), 1.0)
1532 self.assertEqual(round(10.0), 10.0)
1533 self.assertEqual(round(1000000000.0), 1000000000.0)
1534 self.assertEqual(round(1e20), 1e20)
1535
1536 self.assertEqual(round(-1.0), -1.0)
1537 self.assertEqual(round(-10.0), -10.0)
1538 self.assertEqual(round(-1000000000.0), -1000000000.0)
1539 self.assertEqual(round(-1e20), -1e20)
1540
1541 self.assertEqual(round(0.1), 0.0)
1542 self.assertEqual(round(1.1), 1.0)
1543 self.assertEqual(round(10.1), 10.0)
1544 self.assertEqual(round(1000000000.1), 1000000000.0)
1545
1546 self.assertEqual(round(-1.1), -1.0)
1547 self.assertEqual(round(-10.1), -10.0)
1548 self.assertEqual(round(-1000000000.1), -1000000000.0)
1549
1550 self.assertEqual(round(0.9), 1.0)
1551 self.assertEqual(round(9.9), 10.0)
1552 self.assertEqual(round(999999999.9), 1000000000.0)
1553
1554 self.assertEqual(round(-0.9), -1.0)
1555 self.assertEqual(round(-9.9), -10.0)
1556 self.assertEqual(round(-999999999.9), -1000000000.0)
1557
1558 self.assertEqual(round(-8.0, -1), -10.0)
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001559 self.assertEqual(type(round(-8.0, -1)), float)
1560
1561 self.assertEqual(type(round(-8.0, 0)), float)
1562 self.assertEqual(type(round(-8.0, 1)), float)
1563
1564 # Check even / odd rounding behaviour
1565 self.assertEqual(round(5.5), 6)
1566 self.assertEqual(round(6.5), 6)
1567 self.assertEqual(round(-5.5), -6)
1568 self.assertEqual(round(-6.5), -6)
1569
1570 # Check behavior on ints
1571 self.assertEqual(round(0), 0)
1572 self.assertEqual(round(8), 8)
1573 self.assertEqual(round(-8), -8)
1574 self.assertEqual(type(round(0)), int)
1575 self.assertEqual(type(round(-8, -1)), float)
1576 self.assertEqual(type(round(-8, 0)), float)
1577 self.assertEqual(type(round(-8, 1)), float)
Walter Dörwald919497e2003-01-19 16:23:59 +00001578
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001579 # test new kwargs
1580 self.assertEqual(round(number=-8.0, ndigits=-1), -10.0)
1581
Walter Dörwald919497e2003-01-19 16:23:59 +00001582 self.assertRaises(TypeError, round)
1583
Alex Martelliae211f92007-08-22 23:21:33 +00001584 # test generic rounding delegation for reals
1585 class TestRound:
1586 def __round__(self):
1587 return 23
1588
1589 class TestNoRound:
1590 pass
1591
1592 self.assertEqual(round(TestRound()), 23)
1593
1594 self.assertRaises(TypeError, round, 1, 2, 3)
1595 self.assertRaises(TypeError, round, TestNoRound())
1596
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001597 t = TestNoRound()
1598 t.__round__ = lambda *args: args
1599 self.assertRaises(TypeError, round, t)
1600 self.assertRaises(TypeError, round, t, 0)
1601
Walter Dörwald919497e2003-01-19 16:23:59 +00001602 def test_setattr(self):
Tim Petersf2715e02003-02-19 02:35:07 +00001603 setattr(sys, 'spam', 1)
1604 self.assertEqual(sys.spam, 1)
1605 self.assertRaises(TypeError, setattr, sys, 1, 'spam')
1606 self.assertRaises(TypeError, setattr)
Walter Dörwald919497e2003-01-19 16:23:59 +00001607
1608 def test_str(self):
1609 self.assertEqual(str(''), '')
1610 self.assertEqual(str(0), '0')
Guido van Rossume2a383d2007-01-15 16:59:06 +00001611 self.assertEqual(str(0), '0')
Walter Dörwald919497e2003-01-19 16:23:59 +00001612 self.assertEqual(str(()), '()')
1613 self.assertEqual(str([]), '[]')
1614 self.assertEqual(str({}), '{}')
1615 a = []
1616 a.append(a)
1617 self.assertEqual(str(a), '[[...]]')
1618 a = {}
1619 a[0] = a
1620 self.assertEqual(str(a), '{0: {...}}')
1621
Alex Martellia70b1912003-04-22 08:12:33 +00001622 def test_sum(self):
1623 self.assertEqual(sum([]), 0)
Guido van Rossum805365e2007-05-07 22:24:25 +00001624 self.assertEqual(sum(list(range(2,8))), 27)
1625 self.assertEqual(sum(iter(list(range(2,8)))), 27)
Alex Martellia70b1912003-04-22 08:12:33 +00001626 self.assertEqual(sum(Squares(10)), 285)
1627 self.assertEqual(sum(iter(Squares(10))), 285)
1628 self.assertEqual(sum([[1], [2], [3]], []), [1, 2, 3])
1629
1630 self.assertRaises(TypeError, sum)
1631 self.assertRaises(TypeError, sum, 42)
1632 self.assertRaises(TypeError, sum, ['a', 'b', 'c'])
1633 self.assertRaises(TypeError, sum, ['a', 'b', 'c'], '')
1634 self.assertRaises(TypeError, sum, [[1], [2], [3]])
1635 self.assertRaises(TypeError, sum, [{2:3}])
1636 self.assertRaises(TypeError, sum, [{2:3}]*2, {2:3})
1637
1638 class BadSeq:
1639 def __getitem__(self, index):
1640 raise ValueError
1641 self.assertRaises(ValueError, sum, BadSeq())
1642
Alex Martelli86d8b342007-08-22 22:39:42 +00001643 def test_trunc(self):
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001644
1645 self.assertEqual(trunc(1), 1)
1646 self.assertEqual(trunc(-1), -1)
1647 self.assertEqual(type(trunc(1)), int)
1648 self.assertEqual(type(trunc(1.5)), int)
1649 self.assertEqual(trunc(1.5), 1)
1650 self.assertEqual(trunc(-1.5), -1)
1651 self.assertEqual(trunc(1.999999), 1)
1652 self.assertEqual(trunc(-1.999999), -1)
1653 self.assertEqual(trunc(-0.999999), -0)
1654 self.assertEqual(trunc(-100.999), -100)
1655
Alex Martelli86d8b342007-08-22 22:39:42 +00001656 class TestTrunc:
1657 def __trunc__(self):
1658 return 23
1659
1660 class TestNoTrunc:
1661 pass
1662
1663 self.assertEqual(trunc(TestTrunc()), 23)
1664
1665 self.assertRaises(TypeError, trunc)
1666 self.assertRaises(TypeError, trunc, 1, 2)
1667 self.assertRaises(TypeError, trunc, TestNoTrunc())
1668
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001669 t = TestNoTrunc()
1670 t.__trunc__ = lambda *args: args
1671 self.assertRaises(TypeError, trunc, t)
1672 self.assertRaises(TypeError, trunc, t, 0)
1673
Walter Dörwald919497e2003-01-19 16:23:59 +00001674 def test_tuple(self):
1675 self.assertEqual(tuple(()), ())
1676 t0_3 = (0, 1, 2, 3)
1677 t0_3_bis = tuple(t0_3)
1678 self.assert_(t0_3 is t0_3_bis)
1679 self.assertEqual(tuple([]), ())
1680 self.assertEqual(tuple([0, 1, 2, 3]), (0, 1, 2, 3))
1681 self.assertEqual(tuple(''), ())
1682 self.assertEqual(tuple('spam'), ('s', 'p', 'a', 'm'))
1683
1684 def test_type(self):
1685 self.assertEqual(type(''), type('123'))
1686 self.assertNotEqual(type(''), type(()))
1687
Guido van Rossumfee7b932005-01-16 00:21:28 +00001688 # We don't want self in vars(), so these are static methods
1689
1690 @staticmethod
Walter Dörwald919497e2003-01-19 16:23:59 +00001691 def get_vars_f0():
1692 return vars()
Walter Dörwald919497e2003-01-19 16:23:59 +00001693
Guido van Rossumfee7b932005-01-16 00:21:28 +00001694 @staticmethod
Walter Dörwald919497e2003-01-19 16:23:59 +00001695 def get_vars_f2():
1696 BuiltinTest.get_vars_f0()
1697 a = 1
1698 b = 2
1699 return vars()
Walter Dörwald919497e2003-01-19 16:23:59 +00001700
1701 def test_vars(self):
Raymond Hettingera690a992003-11-16 16:17:49 +00001702 self.assertEqual(set(vars()), set(dir()))
Walter Dörwald919497e2003-01-19 16:23:59 +00001703 import sys
Raymond Hettingera690a992003-11-16 16:17:49 +00001704 self.assertEqual(set(vars(sys)), set(dir(sys)))
Walter Dörwald919497e2003-01-19 16:23:59 +00001705 self.assertEqual(self.get_vars_f0(), {})
1706 self.assertEqual(self.get_vars_f2(), {'a': 1, 'b': 2})
1707 self.assertRaises(TypeError, vars, 42, 42)
1708 self.assertRaises(TypeError, vars, 42)
1709
1710 def test_zip(self):
1711 a = (1, 2, 3)
1712 b = (4, 5, 6)
1713 t = [(1, 4), (2, 5), (3, 6)]
Guido van Rossum801f0d72006-08-24 19:48:10 +00001714 self.assertEqual(list(zip(a, b)), t)
Walter Dörwald919497e2003-01-19 16:23:59 +00001715 b = [4, 5, 6]
Guido van Rossum801f0d72006-08-24 19:48:10 +00001716 self.assertEqual(list(zip(a, b)), t)
Walter Dörwald919497e2003-01-19 16:23:59 +00001717 b = (4, 5, 6, 7)
Guido van Rossum801f0d72006-08-24 19:48:10 +00001718 self.assertEqual(list(zip(a, b)), t)
Walter Dörwald919497e2003-01-19 16:23:59 +00001719 class I:
1720 def __getitem__(self, i):
1721 if i < 0 or i > 2: raise IndexError
1722 return i + 4
Guido van Rossum801f0d72006-08-24 19:48:10 +00001723 self.assertEqual(list(zip(a, I())), t)
1724 self.assertEqual(list(zip()), [])
1725 self.assertEqual(list(zip(*[])), [])
Walter Dörwald919497e2003-01-19 16:23:59 +00001726 self.assertRaises(TypeError, zip, None)
1727 class G:
1728 pass
1729 self.assertRaises(TypeError, zip, a, G())
1730
1731 # Make sure zip doesn't try to allocate a billion elements for the
1732 # result list when one of its arguments doesn't say how long it is.
1733 # A MemoryError is the most likely failure mode.
1734 class SequenceWithoutALength:
1735 def __getitem__(self, i):
1736 if i == 5:
1737 raise IndexError
1738 else:
1739 return i
1740 self.assertEqual(
Guido van Rossum805365e2007-05-07 22:24:25 +00001741 list(zip(SequenceWithoutALength(), range(2**30))),
Walter Dörwald919497e2003-01-19 16:23:59 +00001742 list(enumerate(range(5)))
1743 )
1744
1745 class BadSeq:
1746 def __getitem__(self, i):
1747 if i == 5:
1748 raise ValueError
1749 else:
1750 return i
Guido van Rossum801f0d72006-08-24 19:48:10 +00001751 self.assertRaises(ValueError, list, zip(BadSeq(), BadSeq()))
Walter Dörwald919497e2003-01-19 16:23:59 +00001752
Raymond Hettinger64958a12003-12-17 20:43:33 +00001753class TestSorted(unittest.TestCase):
1754
1755 def test_basic(self):
Guido van Rossum805365e2007-05-07 22:24:25 +00001756 data = list(range(100))
Raymond Hettinger64958a12003-12-17 20:43:33 +00001757 copy = data[:]
1758 random.shuffle(copy)
1759 self.assertEqual(data, sorted(copy))
1760 self.assertNotEqual(data, copy)
1761
1762 data.reverse()
1763 random.shuffle(copy)
Guido van Rossum47b9ff62006-08-24 00:41:19 +00001764 self.assertEqual(data, sorted(copy, cmp=lambda x, y: (x < y) - (x > y)))
Raymond Hettinger64958a12003-12-17 20:43:33 +00001765 self.assertNotEqual(data, copy)
1766 random.shuffle(copy)
1767 self.assertEqual(data, sorted(copy, key=lambda x: -x))
1768 self.assertNotEqual(data, copy)
1769 random.shuffle(copy)
1770 self.assertEqual(data, sorted(copy, reverse=1))
1771 self.assertNotEqual(data, copy)
1772
1773 def test_inputtypes(self):
1774 s = 'abracadabra'
Walter Dörwald1f5947b2007-05-22 16:52:54 +00001775 types = [list, tuple, str]
Walter Dörwald4e41a4b2005-08-03 17:09:04 +00001776 for T in types:
Raymond Hettinger64958a12003-12-17 20:43:33 +00001777 self.assertEqual(sorted(s), sorted(T(s)))
1778
Walter Dörwald1f5947b2007-05-22 16:52:54 +00001779 s = ''.join(set(s)) # unique letters only
1780 types = [str, set, frozenset, list, tuple, dict.fromkeys]
Walter Dörwald4e41a4b2005-08-03 17:09:04 +00001781 for T in types:
Raymond Hettinger64958a12003-12-17 20:43:33 +00001782 self.assertEqual(sorted(s), sorted(T(s)))
1783
1784 def test_baddecorator(self):
1785 data = 'The quick Brown fox Jumped over The lazy Dog'.split()
1786 self.assertRaises(TypeError, sorted, data, None, lambda x,y: 0)
1787
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001788def test_main(verbose=None):
1789 test_classes = (BuiltinTest, TestSorted)
1790
1791 run_unittest(*test_classes)
1792
1793 # verify reference counting
1794 if verbose and hasattr(sys, "gettotalrefcount"):
1795 import gc
1796 counts = [None] * 5
Guido van Rossum805365e2007-05-07 22:24:25 +00001797 for i in range(len(counts)):
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001798 run_unittest(*test_classes)
1799 gc.collect()
1800 counts[i] = sys.gettotalrefcount()
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001801 print(counts)
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001802
Walter Dörwald919497e2003-01-19 16:23:59 +00001803
1804if __name__ == "__main__":
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001805 test_main(verbose=True)