blob: 2718bbf13e4f1b96952e40aa24fa9927d51e1151 [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
Georg Brandlfceab5a2008-01-19 20:08:23 +0000746 # Bug 1679: "0x" is not a valid hex literal
747 self.assertRaises(ValueError, int, "0x", 16)
748 self.assertRaises(ValueError, int, "0x", 0)
749
750
Thomas Wouters477c8d52006-05-27 19:21:47 +0000751 # SF bug 1334662: int(string, base) wrong answers
752 # Various representations of 2**32 evaluated to 0
753 # rather than 2**32 in previous versions
754
Guido van Rossume2a383d2007-01-15 16:59:06 +0000755 self.assertEqual(int('100000000000000000000000000000000', 2), 4294967296)
756 self.assertEqual(int('102002022201221111211', 3), 4294967296)
757 self.assertEqual(int('10000000000000000', 4), 4294967296)
758 self.assertEqual(int('32244002423141', 5), 4294967296)
759 self.assertEqual(int('1550104015504', 6), 4294967296)
760 self.assertEqual(int('211301422354', 7), 4294967296)
761 self.assertEqual(int('40000000000', 8), 4294967296)
762 self.assertEqual(int('12068657454', 9), 4294967296)
763 self.assertEqual(int('4294967296', 10), 4294967296)
764 self.assertEqual(int('1904440554', 11), 4294967296)
765 self.assertEqual(int('9ba461594', 12), 4294967296)
766 self.assertEqual(int('535a79889', 13), 4294967296)
767 self.assertEqual(int('2ca5b7464', 14), 4294967296)
768 self.assertEqual(int('1a20dcd81', 15), 4294967296)
769 self.assertEqual(int('100000000', 16), 4294967296)
770 self.assertEqual(int('a7ffda91', 17), 4294967296)
771 self.assertEqual(int('704he7g4', 18), 4294967296)
772 self.assertEqual(int('4f5aff66', 19), 4294967296)
773 self.assertEqual(int('3723ai4g', 20), 4294967296)
774 self.assertEqual(int('281d55i4', 21), 4294967296)
775 self.assertEqual(int('1fj8b184', 22), 4294967296)
776 self.assertEqual(int('1606k7ic', 23), 4294967296)
777 self.assertEqual(int('mb994ag', 24), 4294967296)
778 self.assertEqual(int('hek2mgl', 25), 4294967296)
779 self.assertEqual(int('dnchbnm', 26), 4294967296)
780 self.assertEqual(int('b28jpdm', 27), 4294967296)
781 self.assertEqual(int('8pfgih4', 28), 4294967296)
782 self.assertEqual(int('76beigg', 29), 4294967296)
783 self.assertEqual(int('5qmcpqg', 30), 4294967296)
784 self.assertEqual(int('4q0jto4', 31), 4294967296)
785 self.assertEqual(int('4000000', 32), 4294967296)
786 self.assertEqual(int('3aokq94', 33), 4294967296)
787 self.assertEqual(int('2qhxjli', 34), 4294967296)
788 self.assertEqual(int('2br45qb', 35), 4294967296)
789 self.assertEqual(int('1z141z4', 36), 4294967296)
Thomas Wouters477c8d52006-05-27 19:21:47 +0000790
791 # SF bug 1334662: int(string, base) wrong answers
792 # Checks for proper evaluation of 2**32 + 1
Guido van Rossume2a383d2007-01-15 16:59:06 +0000793 self.assertEqual(int('100000000000000000000000000000001', 2), 4294967297)
794 self.assertEqual(int('102002022201221111212', 3), 4294967297)
795 self.assertEqual(int('10000000000000001', 4), 4294967297)
796 self.assertEqual(int('32244002423142', 5), 4294967297)
797 self.assertEqual(int('1550104015505', 6), 4294967297)
798 self.assertEqual(int('211301422355', 7), 4294967297)
799 self.assertEqual(int('40000000001', 8), 4294967297)
800 self.assertEqual(int('12068657455', 9), 4294967297)
801 self.assertEqual(int('4294967297', 10), 4294967297)
802 self.assertEqual(int('1904440555', 11), 4294967297)
803 self.assertEqual(int('9ba461595', 12), 4294967297)
804 self.assertEqual(int('535a7988a', 13), 4294967297)
805 self.assertEqual(int('2ca5b7465', 14), 4294967297)
806 self.assertEqual(int('1a20dcd82', 15), 4294967297)
807 self.assertEqual(int('100000001', 16), 4294967297)
808 self.assertEqual(int('a7ffda92', 17), 4294967297)
809 self.assertEqual(int('704he7g5', 18), 4294967297)
810 self.assertEqual(int('4f5aff67', 19), 4294967297)
811 self.assertEqual(int('3723ai4h', 20), 4294967297)
812 self.assertEqual(int('281d55i5', 21), 4294967297)
813 self.assertEqual(int('1fj8b185', 22), 4294967297)
814 self.assertEqual(int('1606k7id', 23), 4294967297)
815 self.assertEqual(int('mb994ah', 24), 4294967297)
816 self.assertEqual(int('hek2mgm', 25), 4294967297)
817 self.assertEqual(int('dnchbnn', 26), 4294967297)
818 self.assertEqual(int('b28jpdn', 27), 4294967297)
819 self.assertEqual(int('8pfgih5', 28), 4294967297)
820 self.assertEqual(int('76beigh', 29), 4294967297)
821 self.assertEqual(int('5qmcpqh', 30), 4294967297)
822 self.assertEqual(int('4q0jto5', 31), 4294967297)
823 self.assertEqual(int('4000001', 32), 4294967297)
824 self.assertEqual(int('3aokq95', 33), 4294967297)
825 self.assertEqual(int('2qhxjlj', 34), 4294967297)
826 self.assertEqual(int('2br45qc', 35), 4294967297)
827 self.assertEqual(int('1z141z5', 36), 4294967297)
Thomas Wouters477c8d52006-05-27 19:21:47 +0000828
Brett Cannonc3647ac2005-04-26 03:45:26 +0000829 def test_intconversion(self):
830 # Test __int__()
831 class Foo0:
832 def __int__(self):
833 return 42
834
835 class Foo1(object):
836 def __int__(self):
837 return 42
838
839 class Foo2(int):
840 def __int__(self):
841 return 42
842
843 class Foo3(int):
844 def __int__(self):
845 return self
846
847 class Foo4(int):
848 def __int__(self):
Guido van Rossume2a383d2007-01-15 16:59:06 +0000849 return 42
Brett Cannonc3647ac2005-04-26 03:45:26 +0000850
851 class Foo5(int):
852 def __int__(self):
853 return 42.
854
855 self.assertEqual(int(Foo0()), 42)
856 self.assertEqual(int(Foo1()), 42)
857 self.assertEqual(int(Foo2()), 42)
858 self.assertEqual(int(Foo3()), 0)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000859 self.assertEqual(int(Foo4()), 42)
Brett Cannonc3647ac2005-04-26 03:45:26 +0000860 self.assertRaises(TypeError, int, Foo5())
861
Walter Dörwald919497e2003-01-19 16:23:59 +0000862 def test_iter(self):
863 self.assertRaises(TypeError, iter)
864 self.assertRaises(TypeError, iter, 42, 42)
865 lists = [("1", "2"), ["1", "2"], "12"]
Walter Dörwald919497e2003-01-19 16:23:59 +0000866 for l in lists:
867 i = iter(l)
Georg Brandla18af4e2007-04-21 15:47:16 +0000868 self.assertEqual(next(i), '1')
869 self.assertEqual(next(i), '2')
870 self.assertRaises(StopIteration, next, i)
Walter Dörwald919497e2003-01-19 16:23:59 +0000871
872 def test_isinstance(self):
873 class C:
874 pass
875 class D(C):
876 pass
877 class E:
878 pass
879 c = C()
880 d = D()
881 e = E()
882 self.assert_(isinstance(c, C))
883 self.assert_(isinstance(d, C))
884 self.assert_(not isinstance(e, C))
885 self.assert_(not isinstance(c, D))
886 self.assert_(not isinstance('foo', E))
887 self.assertRaises(TypeError, isinstance, E, 'foo')
888 self.assertRaises(TypeError, isinstance)
889
890 def test_issubclass(self):
891 class C:
892 pass
893 class D(C):
894 pass
895 class E:
896 pass
897 c = C()
898 d = D()
899 e = E()
900 self.assert_(issubclass(D, C))
901 self.assert_(issubclass(C, C))
902 self.assert_(not issubclass(C, D))
903 self.assertRaises(TypeError, issubclass, 'foo', E)
904 self.assertRaises(TypeError, issubclass, E, 'foo')
905 self.assertRaises(TypeError, issubclass)
906
907 def test_len(self):
908 self.assertEqual(len('123'), 3)
909 self.assertEqual(len(()), 0)
910 self.assertEqual(len((1, 2, 3, 4)), 4)
911 self.assertEqual(len([1, 2, 3, 4]), 4)
912 self.assertEqual(len({}), 0)
913 self.assertEqual(len({'a':1, 'b': 2}), 2)
914 class BadSeq:
915 def __len__(self):
916 raise ValueError
917 self.assertRaises(ValueError, len, BadSeq())
918
919 def test_list(self):
920 self.assertEqual(list([]), [])
921 l0_3 = [0, 1, 2, 3]
922 l0_3_bis = list(l0_3)
923 self.assertEqual(l0_3, l0_3_bis)
924 self.assert_(l0_3 is not l0_3_bis)
925 self.assertEqual(list(()), [])
926 self.assertEqual(list((0, 1, 2, 3)), [0, 1, 2, 3])
927 self.assertEqual(list(''), [])
928 self.assertEqual(list('spam'), ['s', 'p', 'a', 'm'])
929
Christian Heimesa37d4c62007-12-04 23:02:19 +0000930 if sys.maxsize == 0x7fffffff:
Walter Dörwald919497e2003-01-19 16:23:59 +0000931 # This test can currently only work on 32-bit machines.
932 # XXX If/when PySequence_Length() returns a ssize_t, it should be
933 # XXX re-enabled.
934 # Verify clearing of bug #556025.
Christian Heimesa37d4c62007-12-04 23:02:19 +0000935 # This assumes that the max data size (sys.maxsize) == max
Walter Dörwald919497e2003-01-19 16:23:59 +0000936 # address size this also assumes that the address size is at
937 # least 4 bytes with 8 byte addresses, the bug is not well
938 # tested
939 #
940 # Note: This test is expected to SEGV under Cygwin 1.3.12 or
941 # earlier due to a newlib bug. See the following mailing list
942 # thread for the details:
943
944 # http://sources.redhat.com/ml/newlib/2002/msg00369.html
Christian Heimesa37d4c62007-12-04 23:02:19 +0000945 self.assertRaises(MemoryError, list, range(sys.maxsize // 2))
Walter Dörwald919497e2003-01-19 16:23:59 +0000946
Raymond Hettingeraa241e02004-09-26 19:24:20 +0000947 # This code used to segfault in Py2.4a3
948 x = []
949 x.extend(-y for y in x)
950 self.assertEqual(x, [])
951
Walter Dörwald919497e2003-01-19 16:23:59 +0000952 def test_long(self):
Guido van Rossume2a383d2007-01-15 16:59:06 +0000953 self.assertEqual(int(314), 314)
954 self.assertEqual(int(3.14), 3)
955 self.assertEqual(int(314), 314)
Walter Dörwald919497e2003-01-19 16:23:59 +0000956 # Check that conversion from float truncates towards zero
Guido van Rossume2a383d2007-01-15 16:59:06 +0000957 self.assertEqual(int(-3.14), -3)
958 self.assertEqual(int(3.9), 3)
959 self.assertEqual(int(-3.9), -3)
960 self.assertEqual(int(3.5), 3)
961 self.assertEqual(int(-3.5), -3)
962 self.assertEqual(int("-3"), -3)
Walter Dörwald919497e2003-01-19 16:23:59 +0000963 # Different base:
Guido van Rossume2a383d2007-01-15 16:59:06 +0000964 self.assertEqual(int("10",16), 16)
Walter Dörwald919497e2003-01-19 16:23:59 +0000965 # Check conversions from string (same test set as for int(), and then some)
966 LL = [
Guido van Rossume2a383d2007-01-15 16:59:06 +0000967 ('1' + '0'*20, 10**20),
968 ('1' + '0'*100, 10**100)
Walter Dörwald919497e2003-01-19 16:23:59 +0000969 ]
Walter Dörwald1f5947b2007-05-22 16:52:54 +0000970 for s, v in LL:
Walter Dörwald919497e2003-01-19 16:23:59 +0000971 for sign in "", "+", "-":
972 for prefix in "", " ", "\t", " \t\t ":
973 ss = prefix + sign + s
974 vv = v
975 if sign == "-" and v is not ValueError:
976 vv = -v
977 try:
Guido van Rossume2a383d2007-01-15 16:59:06 +0000978 self.assertEqual(int(ss), int(vv))
Walter Dörwald919497e2003-01-19 16:23:59 +0000979 except v:
980 pass
981
Guido van Rossume2a383d2007-01-15 16:59:06 +0000982 self.assertRaises(ValueError, int, '123\0')
983 self.assertRaises(ValueError, int, '53', 40)
984 self.assertRaises(TypeError, int, 1, 12)
Walter Dörwald919497e2003-01-19 16:23:59 +0000985
Guido van Rossumd8faa362007-04-27 19:54:29 +0000986 # SF patch #1638879: embedded NULs were not detected with
987 # explicit base
988 self.assertRaises(ValueError, int, '123\0', 10)
989 self.assertRaises(ValueError, int, '123\x00 245', 20)
990
Guido van Rossume2a383d2007-01-15 16:59:06 +0000991 self.assertEqual(int('100000000000000000000000000000000', 2),
Thomas Wouters477c8d52006-05-27 19:21:47 +0000992 4294967296)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000993 self.assertEqual(int('102002022201221111211', 3), 4294967296)
994 self.assertEqual(int('10000000000000000', 4), 4294967296)
995 self.assertEqual(int('32244002423141', 5), 4294967296)
996 self.assertEqual(int('1550104015504', 6), 4294967296)
997 self.assertEqual(int('211301422354', 7), 4294967296)
998 self.assertEqual(int('40000000000', 8), 4294967296)
999 self.assertEqual(int('12068657454', 9), 4294967296)
1000 self.assertEqual(int('4294967296', 10), 4294967296)
1001 self.assertEqual(int('1904440554', 11), 4294967296)
1002 self.assertEqual(int('9ba461594', 12), 4294967296)
1003 self.assertEqual(int('535a79889', 13), 4294967296)
1004 self.assertEqual(int('2ca5b7464', 14), 4294967296)
1005 self.assertEqual(int('1a20dcd81', 15), 4294967296)
1006 self.assertEqual(int('100000000', 16), 4294967296)
1007 self.assertEqual(int('a7ffda91', 17), 4294967296)
1008 self.assertEqual(int('704he7g4', 18), 4294967296)
1009 self.assertEqual(int('4f5aff66', 19), 4294967296)
1010 self.assertEqual(int('3723ai4g', 20), 4294967296)
1011 self.assertEqual(int('281d55i4', 21), 4294967296)
1012 self.assertEqual(int('1fj8b184', 22), 4294967296)
1013 self.assertEqual(int('1606k7ic', 23), 4294967296)
1014 self.assertEqual(int('mb994ag', 24), 4294967296)
1015 self.assertEqual(int('hek2mgl', 25), 4294967296)
1016 self.assertEqual(int('dnchbnm', 26), 4294967296)
1017 self.assertEqual(int('b28jpdm', 27), 4294967296)
1018 self.assertEqual(int('8pfgih4', 28), 4294967296)
1019 self.assertEqual(int('76beigg', 29), 4294967296)
1020 self.assertEqual(int('5qmcpqg', 30), 4294967296)
1021 self.assertEqual(int('4q0jto4', 31), 4294967296)
1022 self.assertEqual(int('4000000', 32), 4294967296)
1023 self.assertEqual(int('3aokq94', 33), 4294967296)
1024 self.assertEqual(int('2qhxjli', 34), 4294967296)
1025 self.assertEqual(int('2br45qb', 35), 4294967296)
1026 self.assertEqual(int('1z141z4', 36), 4294967296)
Thomas Wouters477c8d52006-05-27 19:21:47 +00001027
Guido van Rossume2a383d2007-01-15 16:59:06 +00001028 self.assertEqual(int('100000000000000000000000000000001', 2),
Thomas Wouters477c8d52006-05-27 19:21:47 +00001029 4294967297)
Guido van Rossume2a383d2007-01-15 16:59:06 +00001030 self.assertEqual(int('102002022201221111212', 3), 4294967297)
1031 self.assertEqual(int('10000000000000001', 4), 4294967297)
1032 self.assertEqual(int('32244002423142', 5), 4294967297)
1033 self.assertEqual(int('1550104015505', 6), 4294967297)
1034 self.assertEqual(int('211301422355', 7), 4294967297)
1035 self.assertEqual(int('40000000001', 8), 4294967297)
1036 self.assertEqual(int('12068657455', 9), 4294967297)
1037 self.assertEqual(int('4294967297', 10), 4294967297)
1038 self.assertEqual(int('1904440555', 11), 4294967297)
1039 self.assertEqual(int('9ba461595', 12), 4294967297)
1040 self.assertEqual(int('535a7988a', 13), 4294967297)
1041 self.assertEqual(int('2ca5b7465', 14), 4294967297)
1042 self.assertEqual(int('1a20dcd82', 15), 4294967297)
1043 self.assertEqual(int('100000001', 16), 4294967297)
1044 self.assertEqual(int('a7ffda92', 17), 4294967297)
1045 self.assertEqual(int('704he7g5', 18), 4294967297)
1046 self.assertEqual(int('4f5aff67', 19), 4294967297)
1047 self.assertEqual(int('3723ai4h', 20), 4294967297)
1048 self.assertEqual(int('281d55i5', 21), 4294967297)
1049 self.assertEqual(int('1fj8b185', 22), 4294967297)
1050 self.assertEqual(int('1606k7id', 23), 4294967297)
1051 self.assertEqual(int('mb994ah', 24), 4294967297)
1052 self.assertEqual(int('hek2mgm', 25), 4294967297)
1053 self.assertEqual(int('dnchbnn', 26), 4294967297)
1054 self.assertEqual(int('b28jpdn', 27), 4294967297)
1055 self.assertEqual(int('8pfgih5', 28), 4294967297)
1056 self.assertEqual(int('76beigh', 29), 4294967297)
1057 self.assertEqual(int('5qmcpqh', 30), 4294967297)
1058 self.assertEqual(int('4q0jto5', 31), 4294967297)
1059 self.assertEqual(int('4000001', 32), 4294967297)
1060 self.assertEqual(int('3aokq95', 33), 4294967297)
1061 self.assertEqual(int('2qhxjlj', 34), 4294967297)
1062 self.assertEqual(int('2br45qc', 35), 4294967297)
1063 self.assertEqual(int('1z141z5', 36), 4294967297)
Thomas Wouters477c8d52006-05-27 19:21:47 +00001064
1065
Brett Cannonc3647ac2005-04-26 03:45:26 +00001066 def test_longconversion(self):
1067 # Test __long__()
1068 class Foo0:
1069 def __long__(self):
Guido van Rossume2a383d2007-01-15 16:59:06 +00001070 return 42
Brett Cannonc3647ac2005-04-26 03:45:26 +00001071
1072 class Foo1(object):
1073 def __long__(self):
Guido van Rossume2a383d2007-01-15 16:59:06 +00001074 return 42
Brett Cannonc3647ac2005-04-26 03:45:26 +00001075
Guido van Rossume2a383d2007-01-15 16:59:06 +00001076 class Foo2(int):
Brett Cannonc3647ac2005-04-26 03:45:26 +00001077 def __long__(self):
1078 return 42
1079
Guido van Rossume2a383d2007-01-15 16:59:06 +00001080 class Foo3(int):
1081 def __long__(self):
1082 return self
1083
1084 class Foo4(int):
1085 def __long__(self):
1086 return 42
1087
1088 class Foo5(int):
Brett Cannonc3647ac2005-04-26 03:45:26 +00001089 def __long__(self):
1090 return 42.
1091
Guido van Rossume2a383d2007-01-15 16:59:06 +00001092 self.assertEqual(int(Foo0()), 42)
1093 self.assertEqual(int(Foo1()), 42)
Guido van Rossumd8faa362007-04-27 19:54:29 +00001094 # XXX invokes __int__ now
Guido van Rossumddefaf32007-01-14 03:31:43 +00001095 # self.assertEqual(long(Foo2()), 42L)
Guido van Rossume2a383d2007-01-15 16:59:06 +00001096 self.assertEqual(int(Foo3()), 0)
Guido van Rossumd8faa362007-04-27 19:54:29 +00001097 # XXX likewise
Guido van Rossumddefaf32007-01-14 03:31:43 +00001098 # self.assertEqual(long(Foo4()), 42)
1099 # self.assertRaises(TypeError, long, Foo5())
Brett Cannonc3647ac2005-04-26 03:45:26 +00001100
Walter Dörwald919497e2003-01-19 16:23:59 +00001101 def test_map(self):
1102 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001103 list(map(None, 'hello')),
1104 [('h',), ('e',), ('l',), ('l',), ('o',)]
Walter Dörwald919497e2003-01-19 16:23:59 +00001105 )
1106 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001107 list(map(None, 'abcd', 'efg')),
1108 [('a', 'e'), ('b', 'f'), ('c', 'g')]
Walter Dörwald919497e2003-01-19 16:23:59 +00001109 )
1110 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001111 list(map(None, range(3))),
1112 [(0,), (1,), (2,)]
Walter Dörwald919497e2003-01-19 16:23:59 +00001113 )
1114 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001115 list(map(lambda x: x*x, range(1,4))),
Walter Dörwald919497e2003-01-19 16:23:59 +00001116 [1, 4, 9]
1117 )
1118 try:
1119 from math import sqrt
1120 except ImportError:
1121 def sqrt(x):
1122 return pow(x, 0.5)
1123 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001124 list(map(lambda x: list(map(sqrt, x)), [[16, 4], [81, 9]])),
Walter Dörwald919497e2003-01-19 16:23:59 +00001125 [[4.0, 2.0], [9.0, 3.0]]
1126 )
1127 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001128 list(map(lambda x, y: x+y, [1,3,2], [9,1,4])),
Walter Dörwald919497e2003-01-19 16:23:59 +00001129 [10, 4, 6]
1130 )
1131
1132 def plus(*v):
1133 accu = 0
1134 for i in v: accu = accu + i
1135 return accu
1136 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001137 list(map(plus, [1, 3, 7])),
Walter Dörwald919497e2003-01-19 16:23:59 +00001138 [1, 3, 7]
1139 )
1140 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001141 list(map(plus, [1, 3, 7], [4, 9, 2])),
Walter Dörwald919497e2003-01-19 16:23:59 +00001142 [1+4, 3+9, 7+2]
1143 )
1144 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001145 list(map(plus, [1, 3, 7], [4, 9, 2], [1, 1, 0])),
Walter Dörwald919497e2003-01-19 16:23:59 +00001146 [1+4+1, 3+9+1, 7+2+0]
1147 )
1148 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001149 list(map(None, Squares(10))),
1150 [(0,), (1,), (4,), (9,), (16,), (25,), (36,), (49,), (64,), (81,)]
1151 )
1152 self.assertEqual(
1153 list(map(int, Squares(10))),
Walter Dörwald919497e2003-01-19 16:23:59 +00001154 [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
1155 )
1156 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001157 list(map(None, Squares(3), Squares(2))),
1158 [(0,0), (1,1)]
Walter Dörwald919497e2003-01-19 16:23:59 +00001159 )
Guido van Rossum47b9ff62006-08-24 00:41:19 +00001160 def Max(a, b):
1161 if a is None:
1162 return b
1163 if b is None:
1164 return a
1165 return max(a, b)
Walter Dörwald919497e2003-01-19 16:23:59 +00001166 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001167 list(map(Max, Squares(3), Squares(2))),
1168 [0, 1]
Walter Dörwald919497e2003-01-19 16:23:59 +00001169 )
1170 self.assertRaises(TypeError, map)
1171 self.assertRaises(TypeError, map, lambda x: x, 42)
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001172 self.assertEqual(list(map(None, [42])), [(42,)])
Walter Dörwald919497e2003-01-19 16:23:59 +00001173 class BadSeq:
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001174 def __iter__(self):
Walter Dörwald919497e2003-01-19 16:23:59 +00001175 raise ValueError
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001176 yield None
1177 self.assertRaises(ValueError, list, map(lambda x: x, BadSeq()))
Neal Norwitzfcf44352005-11-27 20:37:43 +00001178 def badfunc(x):
1179 raise RuntimeError
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001180 self.assertRaises(RuntimeError, list, map(badfunc, range(5)))
Walter Dörwald919497e2003-01-19 16:23:59 +00001181
1182 def test_max(self):
1183 self.assertEqual(max('123123'), '3')
1184 self.assertEqual(max(1, 2, 3), 3)
1185 self.assertEqual(max((1, 2, 3, 1, 2, 3)), 3)
1186 self.assertEqual(max([1, 2, 3, 1, 2, 3]), 3)
1187
Guido van Rossume2a383d2007-01-15 16:59:06 +00001188 self.assertEqual(max(1, 2, 3.0), 3.0)
1189 self.assertEqual(max(1, 2.0, 3), 3)
1190 self.assertEqual(max(1.0, 2, 3), 3)
Walter Dörwald919497e2003-01-19 16:23:59 +00001191
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001192 for stmt in (
1193 "max(key=int)", # no args
1194 "max(1, key=int)", # single arg not iterable
1195 "max(1, 2, keystone=int)", # wrong keyword
1196 "max(1, 2, key=int, abc=int)", # two many keywords
1197 "max(1, 2, key=1)", # keyfunc is not callable
1198 ):
Tim Peters7f061872004-12-07 21:17:46 +00001199 try:
Georg Brandl7cae87c2006-09-06 06:51:57 +00001200 exec(stmt, globals())
Tim Peters7f061872004-12-07 21:17:46 +00001201 except TypeError:
1202 pass
1203 else:
1204 self.fail(stmt)
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001205
1206 self.assertEqual(max((1,), key=neg), 1) # one elem iterable
1207 self.assertEqual(max((1,2), key=neg), 1) # two elem iterable
1208 self.assertEqual(max(1, 2, key=neg), 1) # two elems
1209
1210 data = [random.randrange(200) for i in range(100)]
1211 keys = dict((elem, random.randrange(50)) for elem in data)
1212 f = keys.__getitem__
1213 self.assertEqual(max(data, key=f),
1214 sorted(reversed(data), key=f)[-1])
1215
Walter Dörwald919497e2003-01-19 16:23:59 +00001216 def test_min(self):
1217 self.assertEqual(min('123123'), '1')
1218 self.assertEqual(min(1, 2, 3), 1)
1219 self.assertEqual(min((1, 2, 3, 1, 2, 3)), 1)
1220 self.assertEqual(min([1, 2, 3, 1, 2, 3]), 1)
1221
Guido van Rossume2a383d2007-01-15 16:59:06 +00001222 self.assertEqual(min(1, 2, 3.0), 1)
1223 self.assertEqual(min(1, 2.0, 3), 1)
1224 self.assertEqual(min(1.0, 2, 3), 1.0)
Walter Dörwald919497e2003-01-19 16:23:59 +00001225
1226 self.assertRaises(TypeError, min)
1227 self.assertRaises(TypeError, min, 42)
1228 self.assertRaises(ValueError, min, ())
1229 class BadSeq:
1230 def __getitem__(self, index):
1231 raise ValueError
1232 self.assertRaises(ValueError, min, BadSeq())
1233 class BadNumber:
1234 def __cmp__(self, other):
1235 raise ValueError
Guido van Rossum47b9ff62006-08-24 00:41:19 +00001236 self.assertRaises(TypeError, min, (42, BadNumber()))
Walter Dörwald919497e2003-01-19 16:23:59 +00001237
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001238 for stmt in (
1239 "min(key=int)", # no args
1240 "min(1, key=int)", # single arg not iterable
1241 "min(1, 2, keystone=int)", # wrong keyword
1242 "min(1, 2, key=int, abc=int)", # two many keywords
1243 "min(1, 2, key=1)", # keyfunc is not callable
1244 ):
Tim Peters7f061872004-12-07 21:17:46 +00001245 try:
Georg Brandl7cae87c2006-09-06 06:51:57 +00001246 exec(stmt, globals())
Tim Peters7f061872004-12-07 21:17:46 +00001247 except TypeError:
1248 pass
1249 else:
1250 self.fail(stmt)
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001251
1252 self.assertEqual(min((1,), key=neg), 1) # one elem iterable
1253 self.assertEqual(min((1,2), key=neg), 2) # two elem iterable
1254 self.assertEqual(min(1, 2, key=neg), 2) # two elems
1255
1256 data = [random.randrange(200) for i in range(100)]
1257 keys = dict((elem, random.randrange(50)) for elem in data)
1258 f = keys.__getitem__
1259 self.assertEqual(min(data, key=f),
1260 sorted(data, key=f)[0])
1261
Georg Brandla18af4e2007-04-21 15:47:16 +00001262 def test_next(self):
1263 it = iter(range(2))
1264 self.assertEqual(next(it), 0)
1265 self.assertEqual(next(it), 1)
1266 self.assertRaises(StopIteration, next, it)
1267 self.assertRaises(StopIteration, next, it)
1268 self.assertEquals(next(it, 42), 42)
1269
1270 class Iter(object):
1271 def __iter__(self):
1272 return self
1273 def __next__(self):
1274 raise StopIteration
1275
1276 it = iter(Iter())
1277 self.assertEquals(next(it, 42), 42)
1278 self.assertRaises(StopIteration, next, it)
1279
1280 def gen():
1281 yield 1
1282 return
1283
1284 it = gen()
1285 self.assertEquals(next(it), 1)
1286 self.assertRaises(StopIteration, next, it)
1287 self.assertEquals(next(it, 42), 42)
1288
Walter Dörwald919497e2003-01-19 16:23:59 +00001289 def test_oct(self):
Guido van Rossumcd16bf62007-06-13 18:07:49 +00001290 self.assertEqual(oct(100), '0o144')
1291 self.assertEqual(oct(100), '0o144')
1292 self.assertEqual(oct(-100), '-0o144')
1293 self.assertEqual(oct(-100), '-0o144')
Walter Dörwald919497e2003-01-19 16:23:59 +00001294 self.assertRaises(TypeError, oct, ())
1295
1296 def write_testfile(self):
Guido van Rossuma88a0332007-02-26 16:59:55 +00001297 # NB the first 4 lines are also used to test input, below
Walter Dörwald919497e2003-01-19 16:23:59 +00001298 fp = open(TESTFN, 'w')
1299 try:
1300 fp.write('1+1\n')
1301 fp.write('1+1\n')
1302 fp.write('The quick brown fox jumps over the lazy dog')
1303 fp.write('.\n')
1304 fp.write('Dear John\n')
1305 fp.write('XXX'*100)
1306 fp.write('YYY'*100)
1307 finally:
1308 fp.close()
1309
1310 def test_open(self):
1311 self.write_testfile()
1312 fp = open(TESTFN, 'r')
1313 try:
1314 self.assertEqual(fp.readline(4), '1+1\n')
1315 self.assertEqual(fp.readline(4), '1+1\n')
1316 self.assertEqual(fp.readline(), 'The quick brown fox jumps over the lazy dog.\n')
1317 self.assertEqual(fp.readline(4), 'Dear')
1318 self.assertEqual(fp.readline(100), ' John\n')
1319 self.assertEqual(fp.read(300), 'XXX'*100)
1320 self.assertEqual(fp.read(1000), 'YYY'*100)
1321 finally:
1322 fp.close()
1323 unlink(TESTFN)
1324
1325 def test_ord(self):
1326 self.assertEqual(ord(' '), 32)
1327 self.assertEqual(ord('A'), 65)
1328 self.assertEqual(ord('a'), 97)
Guido van Rossumf9e91c92007-05-08 21:05:48 +00001329 self.assertEqual(ord('\x80'), 128)
1330 self.assertEqual(ord('\xff'), 255)
1331
1332 self.assertEqual(ord(b' '), 32)
1333 self.assertEqual(ord(b'A'), 65)
1334 self.assertEqual(ord(b'a'), 97)
1335 self.assertEqual(ord(b'\x80'), 128)
1336 self.assertEqual(ord(b'\xff'), 255)
1337
Walter Dörwald1f5947b2007-05-22 16:52:54 +00001338 self.assertEqual(ord(chr(sys.maxunicode)), sys.maxunicode)
Walter Dörwald919497e2003-01-19 16:23:59 +00001339 self.assertRaises(TypeError, ord, 42)
Walter Dörwald919497e2003-01-19 16:23:59 +00001340
Guido van Rossum8ac004e2007-07-15 13:00:05 +00001341 self.assertEqual(ord(chr(0x10FFFF)), 0x10FFFF)
1342 self.assertEqual(ord("\U0000FFFF"), 0x0000FFFF)
1343 self.assertEqual(ord("\U00010000"), 0x00010000)
1344 self.assertEqual(ord("\U00010001"), 0x00010001)
1345 self.assertEqual(ord("\U000FFFFE"), 0x000FFFFE)
1346 self.assertEqual(ord("\U000FFFFF"), 0x000FFFFF)
1347 self.assertEqual(ord("\U00100000"), 0x00100000)
1348 self.assertEqual(ord("\U00100001"), 0x00100001)
1349 self.assertEqual(ord("\U0010FFFE"), 0x0010FFFE)
1350 self.assertEqual(ord("\U0010FFFF"), 0x0010FFFF)
1351
Walter Dörwald919497e2003-01-19 16:23:59 +00001352 def test_pow(self):
1353 self.assertEqual(pow(0,0), 1)
1354 self.assertEqual(pow(0,1), 0)
1355 self.assertEqual(pow(1,0), 1)
1356 self.assertEqual(pow(1,1), 1)
1357
1358 self.assertEqual(pow(2,0), 1)
1359 self.assertEqual(pow(2,10), 1024)
1360 self.assertEqual(pow(2,20), 1024*1024)
1361 self.assertEqual(pow(2,30), 1024*1024*1024)
1362
1363 self.assertEqual(pow(-2,0), 1)
1364 self.assertEqual(pow(-2,1), -2)
1365 self.assertEqual(pow(-2,2), 4)
1366 self.assertEqual(pow(-2,3), -8)
1367
Guido van Rossume2a383d2007-01-15 16:59:06 +00001368 self.assertEqual(pow(0,0), 1)
1369 self.assertEqual(pow(0,1), 0)
1370 self.assertEqual(pow(1,0), 1)
1371 self.assertEqual(pow(1,1), 1)
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,10), 1024)
1375 self.assertEqual(pow(2,20), 1024*1024)
1376 self.assertEqual(pow(2,30), 1024*1024*1024)
Walter Dörwald919497e2003-01-19 16:23:59 +00001377
Guido van Rossume2a383d2007-01-15 16:59:06 +00001378 self.assertEqual(pow(-2,0), 1)
1379 self.assertEqual(pow(-2,1), -2)
1380 self.assertEqual(pow(-2,2), 4)
1381 self.assertEqual(pow(-2,3), -8)
Walter Dörwald919497e2003-01-19 16:23:59 +00001382
1383 self.assertAlmostEqual(pow(0.,0), 1.)
1384 self.assertAlmostEqual(pow(0.,1), 0.)
1385 self.assertAlmostEqual(pow(1.,0), 1.)
1386 self.assertAlmostEqual(pow(1.,1), 1.)
1387
1388 self.assertAlmostEqual(pow(2.,0), 1.)
1389 self.assertAlmostEqual(pow(2.,10), 1024.)
1390 self.assertAlmostEqual(pow(2.,20), 1024.*1024.)
1391 self.assertAlmostEqual(pow(2.,30), 1024.*1024.*1024.)
1392
1393 self.assertAlmostEqual(pow(-2.,0), 1.)
1394 self.assertAlmostEqual(pow(-2.,1), -2.)
1395 self.assertAlmostEqual(pow(-2.,2), 4.)
1396 self.assertAlmostEqual(pow(-2.,3), -8.)
1397
Guido van Rossume2a383d2007-01-15 16:59:06 +00001398 for x in 2, 2, 2.0:
1399 for y in 10, 10, 10.0:
1400 for z in 1000, 1000, 1000.0:
Walter Dörwald919497e2003-01-19 16:23:59 +00001401 if isinstance(x, float) or \
1402 isinstance(y, float) or \
1403 isinstance(z, float):
1404 self.assertRaises(TypeError, pow, x, y, z)
1405 else:
1406 self.assertAlmostEqual(pow(x, y, z), 24.0)
1407
Jeffrey Yasskin3404b3c2007-09-07 15:15:49 +00001408 self.assertAlmostEqual(pow(-1, 0.5), 1j)
1409 self.assertAlmostEqual(pow(-1, 1/3), 0.5 + 0.8660254037844386j)
1410
Walter Dörwald919497e2003-01-19 16:23:59 +00001411 self.assertRaises(TypeError, pow, -1, -2, 3)
1412 self.assertRaises(ValueError, pow, 1, 2, 0)
Guido van Rossume2a383d2007-01-15 16:59:06 +00001413 self.assertRaises(TypeError, pow, -1, -2, 3)
1414 self.assertRaises(ValueError, pow, 1, 2, 0)
Walter Dörwald919497e2003-01-19 16:23:59 +00001415
1416 self.assertRaises(TypeError, pow)
1417
1418 def test_range(self):
Guido van Rossum805365e2007-05-07 22:24:25 +00001419 self.assertEqual(list(range(3)), [0, 1, 2])
1420 self.assertEqual(list(range(1, 5)), [1, 2, 3, 4])
1421 self.assertEqual(list(range(0)), [])
1422 self.assertEqual(list(range(-3)), [])
1423 self.assertEqual(list(range(1, 10, 3)), [1, 4, 7])
1424 #self.assertEqual(list(range(5, -5, -3)), [5, 2, -1, -4])
Walter Dörwald919497e2003-01-19 16:23:59 +00001425
Guido van Rossum805365e2007-05-07 22:24:25 +00001426 """ XXX(nnorwitz):
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001427 # Now test range() with longs
Guido van Rossum805365e2007-05-07 22:24:25 +00001428 self.assertEqual(list(range(-2**100)), [])
1429 self.assertEqual(list(range(0, -2**100)), [])
1430 self.assertEqual(list(range(0, 2**100, -1)), [])
1431 self.assertEqual(list(range(0, 2**100, -1)), [])
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001432
Christian Heimesa37d4c62007-12-04 23:02:19 +00001433 a = int(10 * sys.maxsize)
1434 b = int(100 * sys.maxsize)
1435 c = int(50 * sys.maxsize)
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001436
Guido van Rossum805365e2007-05-07 22:24:25 +00001437 self.assertEqual(list(range(a, a+2)), [a, a+1])
1438 self.assertEqual(list(range(a+2, a, -1)), [a+2, a+1])
1439 self.assertEqual(list(range(a+4, a, -2)), [a+4, a+2])
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001440
Guido van Rossum805365e2007-05-07 22:24:25 +00001441 seq = list(range(a, b, c))
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001442 self.assert_(a in seq)
1443 self.assert_(b not in seq)
1444 self.assertEqual(len(seq), 2)
1445
Guido van Rossum805365e2007-05-07 22:24:25 +00001446 seq = list(range(b, a, -c))
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001447 self.assert_(b in seq)
1448 self.assert_(a not in seq)
1449 self.assertEqual(len(seq), 2)
1450
Guido van Rossum805365e2007-05-07 22:24:25 +00001451 seq = list(range(-a, -b, -c))
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001452 self.assert_(-a in seq)
1453 self.assert_(-b not in seq)
1454 self.assertEqual(len(seq), 2)
1455
Walter Dörwald919497e2003-01-19 16:23:59 +00001456 self.assertRaises(TypeError, range)
1457 self.assertRaises(TypeError, range, 1, 2, 3, 4)
1458 self.assertRaises(ValueError, range, 1, 2, 0)
Guido van Rossume2a383d2007-01-15 16:59:06 +00001459 self.assertRaises(ValueError, range, a, a + 1, int(0))
Neal Norwitzfcf44352005-11-27 20:37:43 +00001460
1461 class badzero(int):
Guido van Rossum47b9ff62006-08-24 00:41:19 +00001462 def __eq__(self, other):
Neal Norwitzfcf44352005-11-27 20:37:43 +00001463 raise RuntimeError
Guido van Rossum47b9ff62006-08-24 00:41:19 +00001464 __ne__ = __lt__ = __gt__ = __le__ = __ge__ = __eq__
1465
1466 # XXX This won't (but should!) raise RuntimeError if a is an int...
Neal Norwitzfcf44352005-11-27 20:37:43 +00001467 self.assertRaises(RuntimeError, range, a, a + 1, badzero(1))
Guido van Rossum805365e2007-05-07 22:24:25 +00001468 """
Walter Dörwald919497e2003-01-19 16:23:59 +00001469
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001470 # Reject floats when it would require PyLongs to represent.
1471 # (smaller floats still accepted, but deprecated)
Tim Peters299b3df2003-04-15 14:40:03 +00001472 self.assertRaises(TypeError, range, 1e100, 1e101, 1e101)
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001473
Walter Dörwald357981e2003-04-15 18:59:28 +00001474 self.assertRaises(TypeError, range, 0, "spam")
1475 self.assertRaises(TypeError, range, 0, 42, "spam")
1476
Christian Heimesa37d4c62007-12-04 23:02:19 +00001477 #NEAL self.assertRaises(OverflowError, range, -sys.maxsize, sys.maxsize)
1478 #NEAL self.assertRaises(OverflowError, range, 0, 2*sys.maxsize)
Guido van Rossum805365e2007-05-07 22:24:25 +00001479
Christian Heimesa37d4c62007-12-04 23:02:19 +00001480 self.assertRaises(OverflowError, len, range(0, sys.maxsize**10))
Walter Dörwald357981e2003-04-15 18:59:28 +00001481
Guido van Rossuma88a0332007-02-26 16:59:55 +00001482 def test_input(self):
1483 self.write_testfile()
1484 fp = open(TESTFN, 'r')
1485 savestdin = sys.stdin
1486 savestdout = sys.stdout # Eats the echo
1487 try:
1488 sys.stdin = fp
1489 sys.stdout = BitBucket()
1490 self.assertEqual(input(), "1+1")
1491 self.assertEqual(input('testing\n'), "1+1")
1492 self.assertEqual(input(), 'The quick brown fox jumps over the lazy dog.')
1493 self.assertEqual(input('testing\n'), 'Dear John')
1494
1495 # SF 1535165: don't segfault on closed stdin
1496 # sys.stdout must be a regular file for triggering
1497 sys.stdout = savestdout
1498 sys.stdin.close()
1499 self.assertRaises(ValueError, input)
1500
1501 sys.stdout = BitBucket()
Guido van Rossum34d19282007-08-09 01:03:29 +00001502 sys.stdin = io.StringIO("NULL\0")
Guido van Rossuma88a0332007-02-26 16:59:55 +00001503 self.assertRaises(TypeError, input, 42, 42)
Guido van Rossum34d19282007-08-09 01:03:29 +00001504 sys.stdin = io.StringIO(" 'whitespace'")
Guido van Rossuma88a0332007-02-26 16:59:55 +00001505 self.assertEqual(input(), " 'whitespace'")
Guido van Rossum34d19282007-08-09 01:03:29 +00001506 sys.stdin = io.StringIO()
Guido van Rossuma88a0332007-02-26 16:59:55 +00001507 self.assertRaises(EOFError, input)
1508
1509 del sys.stdout
1510 self.assertRaises(RuntimeError, input, 'prompt')
1511 del sys.stdin
1512 self.assertRaises(RuntimeError, input, 'prompt')
1513 finally:
1514 sys.stdin = savestdin
1515 sys.stdout = savestdout
1516 fp.close()
1517 unlink(TESTFN)
1518
Walter Dörwald919497e2003-01-19 16:23:59 +00001519 def test_repr(self):
1520 self.assertEqual(repr(''), '\'\'')
1521 self.assertEqual(repr(0), '0')
Guido van Rossume2a383d2007-01-15 16:59:06 +00001522 self.assertEqual(repr(0), '0')
Walter Dörwald919497e2003-01-19 16:23:59 +00001523 self.assertEqual(repr(()), '()')
1524 self.assertEqual(repr([]), '[]')
1525 self.assertEqual(repr({}), '{}')
1526 a = []
1527 a.append(a)
1528 self.assertEqual(repr(a), '[[...]]')
1529 a = {}
1530 a[0] = a
1531 self.assertEqual(repr(a), '{0: {...}}')
1532
1533 def test_round(self):
1534 self.assertEqual(round(0.0), 0.0)
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001535 self.assertEqual(type(round(0.0)), int)
Walter Dörwald919497e2003-01-19 16:23:59 +00001536 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(-1.0), -1.0)
1542 self.assertEqual(round(-10.0), -10.0)
1543 self.assertEqual(round(-1000000000.0), -1000000000.0)
1544 self.assertEqual(round(-1e20), -1e20)
1545
1546 self.assertEqual(round(0.1), 0.0)
1547 self.assertEqual(round(1.1), 1.0)
1548 self.assertEqual(round(10.1), 10.0)
1549 self.assertEqual(round(1000000000.1), 1000000000.0)
1550
1551 self.assertEqual(round(-1.1), -1.0)
1552 self.assertEqual(round(-10.1), -10.0)
1553 self.assertEqual(round(-1000000000.1), -1000000000.0)
1554
1555 self.assertEqual(round(0.9), 1.0)
1556 self.assertEqual(round(9.9), 10.0)
1557 self.assertEqual(round(999999999.9), 1000000000.0)
1558
1559 self.assertEqual(round(-0.9), -1.0)
1560 self.assertEqual(round(-9.9), -10.0)
1561 self.assertEqual(round(-999999999.9), -1000000000.0)
1562
1563 self.assertEqual(round(-8.0, -1), -10.0)
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001564 self.assertEqual(type(round(-8.0, -1)), float)
1565
1566 self.assertEqual(type(round(-8.0, 0)), float)
1567 self.assertEqual(type(round(-8.0, 1)), float)
1568
1569 # Check even / odd rounding behaviour
1570 self.assertEqual(round(5.5), 6)
1571 self.assertEqual(round(6.5), 6)
1572 self.assertEqual(round(-5.5), -6)
1573 self.assertEqual(round(-6.5), -6)
1574
1575 # Check behavior on ints
1576 self.assertEqual(round(0), 0)
1577 self.assertEqual(round(8), 8)
1578 self.assertEqual(round(-8), -8)
1579 self.assertEqual(type(round(0)), int)
1580 self.assertEqual(type(round(-8, -1)), float)
1581 self.assertEqual(type(round(-8, 0)), float)
1582 self.assertEqual(type(round(-8, 1)), float)
Walter Dörwald919497e2003-01-19 16:23:59 +00001583
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001584 # test new kwargs
1585 self.assertEqual(round(number=-8.0, ndigits=-1), -10.0)
1586
Walter Dörwald919497e2003-01-19 16:23:59 +00001587 self.assertRaises(TypeError, round)
1588
Alex Martelliae211f92007-08-22 23:21:33 +00001589 # test generic rounding delegation for reals
1590 class TestRound:
1591 def __round__(self):
1592 return 23
1593
1594 class TestNoRound:
1595 pass
1596
1597 self.assertEqual(round(TestRound()), 23)
1598
1599 self.assertRaises(TypeError, round, 1, 2, 3)
1600 self.assertRaises(TypeError, round, TestNoRound())
1601
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001602 t = TestNoRound()
1603 t.__round__ = lambda *args: args
1604 self.assertRaises(TypeError, round, t)
1605 self.assertRaises(TypeError, round, t, 0)
1606
Walter Dörwald919497e2003-01-19 16:23:59 +00001607 def test_setattr(self):
Tim Petersf2715e02003-02-19 02:35:07 +00001608 setattr(sys, 'spam', 1)
1609 self.assertEqual(sys.spam, 1)
1610 self.assertRaises(TypeError, setattr, sys, 1, 'spam')
1611 self.assertRaises(TypeError, setattr)
Walter Dörwald919497e2003-01-19 16:23:59 +00001612
1613 def test_str(self):
1614 self.assertEqual(str(''), '')
1615 self.assertEqual(str(0), '0')
Guido van Rossume2a383d2007-01-15 16:59:06 +00001616 self.assertEqual(str(0), '0')
Walter Dörwald919497e2003-01-19 16:23:59 +00001617 self.assertEqual(str(()), '()')
1618 self.assertEqual(str([]), '[]')
1619 self.assertEqual(str({}), '{}')
1620 a = []
1621 a.append(a)
1622 self.assertEqual(str(a), '[[...]]')
1623 a = {}
1624 a[0] = a
1625 self.assertEqual(str(a), '{0: {...}}')
1626
Alex Martellia70b1912003-04-22 08:12:33 +00001627 def test_sum(self):
1628 self.assertEqual(sum([]), 0)
Guido van Rossum805365e2007-05-07 22:24:25 +00001629 self.assertEqual(sum(list(range(2,8))), 27)
1630 self.assertEqual(sum(iter(list(range(2,8)))), 27)
Alex Martellia70b1912003-04-22 08:12:33 +00001631 self.assertEqual(sum(Squares(10)), 285)
1632 self.assertEqual(sum(iter(Squares(10))), 285)
1633 self.assertEqual(sum([[1], [2], [3]], []), [1, 2, 3])
1634
1635 self.assertRaises(TypeError, sum)
1636 self.assertRaises(TypeError, sum, 42)
1637 self.assertRaises(TypeError, sum, ['a', 'b', 'c'])
1638 self.assertRaises(TypeError, sum, ['a', 'b', 'c'], '')
1639 self.assertRaises(TypeError, sum, [[1], [2], [3]])
1640 self.assertRaises(TypeError, sum, [{2:3}])
1641 self.assertRaises(TypeError, sum, [{2:3}]*2, {2:3})
1642
1643 class BadSeq:
1644 def __getitem__(self, index):
1645 raise ValueError
1646 self.assertRaises(ValueError, sum, BadSeq())
1647
Alex Martelli86d8b342007-08-22 22:39:42 +00001648 def test_trunc(self):
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001649
1650 self.assertEqual(trunc(1), 1)
1651 self.assertEqual(trunc(-1), -1)
1652 self.assertEqual(type(trunc(1)), int)
1653 self.assertEqual(type(trunc(1.5)), int)
1654 self.assertEqual(trunc(1.5), 1)
1655 self.assertEqual(trunc(-1.5), -1)
1656 self.assertEqual(trunc(1.999999), 1)
1657 self.assertEqual(trunc(-1.999999), -1)
1658 self.assertEqual(trunc(-0.999999), -0)
1659 self.assertEqual(trunc(-100.999), -100)
1660
Alex Martelli86d8b342007-08-22 22:39:42 +00001661 class TestTrunc:
1662 def __trunc__(self):
1663 return 23
1664
1665 class TestNoTrunc:
1666 pass
1667
1668 self.assertEqual(trunc(TestTrunc()), 23)
1669
1670 self.assertRaises(TypeError, trunc)
1671 self.assertRaises(TypeError, trunc, 1, 2)
1672 self.assertRaises(TypeError, trunc, TestNoTrunc())
1673
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001674 t = TestNoTrunc()
1675 t.__trunc__ = lambda *args: args
1676 self.assertRaises(TypeError, trunc, t)
1677 self.assertRaises(TypeError, trunc, t, 0)
1678
Walter Dörwald919497e2003-01-19 16:23:59 +00001679 def test_tuple(self):
1680 self.assertEqual(tuple(()), ())
1681 t0_3 = (0, 1, 2, 3)
1682 t0_3_bis = tuple(t0_3)
1683 self.assert_(t0_3 is t0_3_bis)
1684 self.assertEqual(tuple([]), ())
1685 self.assertEqual(tuple([0, 1, 2, 3]), (0, 1, 2, 3))
1686 self.assertEqual(tuple(''), ())
1687 self.assertEqual(tuple('spam'), ('s', 'p', 'a', 'm'))
1688
1689 def test_type(self):
1690 self.assertEqual(type(''), type('123'))
1691 self.assertNotEqual(type(''), type(()))
1692
Guido van Rossumfee7b932005-01-16 00:21:28 +00001693 # We don't want self in vars(), so these are static methods
1694
1695 @staticmethod
Walter Dörwald919497e2003-01-19 16:23:59 +00001696 def get_vars_f0():
1697 return vars()
Walter Dörwald919497e2003-01-19 16:23:59 +00001698
Guido van Rossumfee7b932005-01-16 00:21:28 +00001699 @staticmethod
Walter Dörwald919497e2003-01-19 16:23:59 +00001700 def get_vars_f2():
1701 BuiltinTest.get_vars_f0()
1702 a = 1
1703 b = 2
1704 return vars()
Walter Dörwald919497e2003-01-19 16:23:59 +00001705
1706 def test_vars(self):
Raymond Hettingera690a992003-11-16 16:17:49 +00001707 self.assertEqual(set(vars()), set(dir()))
Walter Dörwald919497e2003-01-19 16:23:59 +00001708 import sys
Raymond Hettingera690a992003-11-16 16:17:49 +00001709 self.assertEqual(set(vars(sys)), set(dir(sys)))
Walter Dörwald919497e2003-01-19 16:23:59 +00001710 self.assertEqual(self.get_vars_f0(), {})
1711 self.assertEqual(self.get_vars_f2(), {'a': 1, 'b': 2})
1712 self.assertRaises(TypeError, vars, 42, 42)
1713 self.assertRaises(TypeError, vars, 42)
1714
1715 def test_zip(self):
1716 a = (1, 2, 3)
1717 b = (4, 5, 6)
1718 t = [(1, 4), (2, 5), (3, 6)]
Guido van Rossum801f0d72006-08-24 19:48:10 +00001719 self.assertEqual(list(zip(a, b)), t)
Walter Dörwald919497e2003-01-19 16:23:59 +00001720 b = [4, 5, 6]
Guido van Rossum801f0d72006-08-24 19:48:10 +00001721 self.assertEqual(list(zip(a, b)), t)
Walter Dörwald919497e2003-01-19 16:23:59 +00001722 b = (4, 5, 6, 7)
Guido van Rossum801f0d72006-08-24 19:48:10 +00001723 self.assertEqual(list(zip(a, b)), t)
Walter Dörwald919497e2003-01-19 16:23:59 +00001724 class I:
1725 def __getitem__(self, i):
1726 if i < 0 or i > 2: raise IndexError
1727 return i + 4
Guido van Rossum801f0d72006-08-24 19:48:10 +00001728 self.assertEqual(list(zip(a, I())), t)
1729 self.assertEqual(list(zip()), [])
1730 self.assertEqual(list(zip(*[])), [])
Walter Dörwald919497e2003-01-19 16:23:59 +00001731 self.assertRaises(TypeError, zip, None)
1732 class G:
1733 pass
1734 self.assertRaises(TypeError, zip, a, G())
1735
1736 # Make sure zip doesn't try to allocate a billion elements for the
1737 # result list when one of its arguments doesn't say how long it is.
1738 # A MemoryError is the most likely failure mode.
1739 class SequenceWithoutALength:
1740 def __getitem__(self, i):
1741 if i == 5:
1742 raise IndexError
1743 else:
1744 return i
1745 self.assertEqual(
Guido van Rossum805365e2007-05-07 22:24:25 +00001746 list(zip(SequenceWithoutALength(), range(2**30))),
Walter Dörwald919497e2003-01-19 16:23:59 +00001747 list(enumerate(range(5)))
1748 )
1749
1750 class BadSeq:
1751 def __getitem__(self, i):
1752 if i == 5:
1753 raise ValueError
1754 else:
1755 return i
Guido van Rossum801f0d72006-08-24 19:48:10 +00001756 self.assertRaises(ValueError, list, zip(BadSeq(), BadSeq()))
Walter Dörwald919497e2003-01-19 16:23:59 +00001757
Raymond Hettinger64958a12003-12-17 20:43:33 +00001758class TestSorted(unittest.TestCase):
1759
1760 def test_basic(self):
Guido van Rossum805365e2007-05-07 22:24:25 +00001761 data = list(range(100))
Raymond Hettinger64958a12003-12-17 20:43:33 +00001762 copy = data[:]
1763 random.shuffle(copy)
1764 self.assertEqual(data, sorted(copy))
1765 self.assertNotEqual(data, copy)
1766
1767 data.reverse()
1768 random.shuffle(copy)
Guido van Rossum47b9ff62006-08-24 00:41:19 +00001769 self.assertEqual(data, sorted(copy, cmp=lambda x, y: (x < y) - (x > y)))
Raymond Hettinger64958a12003-12-17 20:43:33 +00001770 self.assertNotEqual(data, copy)
1771 random.shuffle(copy)
1772 self.assertEqual(data, sorted(copy, key=lambda x: -x))
1773 self.assertNotEqual(data, copy)
1774 random.shuffle(copy)
1775 self.assertEqual(data, sorted(copy, reverse=1))
1776 self.assertNotEqual(data, copy)
1777
1778 def test_inputtypes(self):
1779 s = 'abracadabra'
Walter Dörwald1f5947b2007-05-22 16:52:54 +00001780 types = [list, tuple, str]
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
Walter Dörwald1f5947b2007-05-22 16:52:54 +00001784 s = ''.join(set(s)) # unique letters only
1785 types = [str, set, frozenset, list, tuple, dict.fromkeys]
Walter Dörwald4e41a4b2005-08-03 17:09:04 +00001786 for T in types:
Raymond Hettinger64958a12003-12-17 20:43:33 +00001787 self.assertEqual(sorted(s), sorted(T(s)))
1788
1789 def test_baddecorator(self):
1790 data = 'The quick Brown fox Jumped over The lazy Dog'.split()
1791 self.assertRaises(TypeError, sorted, data, None, lambda x,y: 0)
1792
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001793def test_main(verbose=None):
1794 test_classes = (BuiltinTest, TestSorted)
1795
1796 run_unittest(*test_classes)
1797
1798 # verify reference counting
1799 if verbose and hasattr(sys, "gettotalrefcount"):
1800 import gc
1801 counts = [None] * 5
Guido van Rossum805365e2007-05-07 22:24:25 +00001802 for i in range(len(counts)):
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001803 run_unittest(*test_classes)
1804 gc.collect()
1805 counts[i] = sys.gettotalrefcount()
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001806 print(counts)
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001807
Walter Dörwald919497e2003-01-19 16:23:59 +00001808
1809if __name__ == "__main__":
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001810 test_main(verbose=True)