blob: e6ded8103b0cddc0aab338429997d0bf4a30da16 [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(lambda x: x*x, range(1,4))),
Walter Dörwald919497e2003-01-19 16:23:59 +00001104 [1, 4, 9]
1105 )
1106 try:
1107 from math import sqrt
1108 except ImportError:
1109 def sqrt(x):
1110 return pow(x, 0.5)
1111 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001112 list(map(lambda x: list(map(sqrt, x)), [[16, 4], [81, 9]])),
Walter Dörwald919497e2003-01-19 16:23:59 +00001113 [[4.0, 2.0], [9.0, 3.0]]
1114 )
1115 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001116 list(map(lambda x, y: x+y, [1,3,2], [9,1,4])),
Walter Dörwald919497e2003-01-19 16:23:59 +00001117 [10, 4, 6]
1118 )
1119
1120 def plus(*v):
1121 accu = 0
1122 for i in v: accu = accu + i
1123 return accu
1124 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001125 list(map(plus, [1, 3, 7])),
Walter Dörwald919497e2003-01-19 16:23:59 +00001126 [1, 3, 7]
1127 )
1128 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001129 list(map(plus, [1, 3, 7], [4, 9, 2])),
Walter Dörwald919497e2003-01-19 16:23:59 +00001130 [1+4, 3+9, 7+2]
1131 )
1132 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001133 list(map(plus, [1, 3, 7], [4, 9, 2], [1, 1, 0])),
Walter Dörwald919497e2003-01-19 16:23:59 +00001134 [1+4+1, 3+9+1, 7+2+0]
1135 )
1136 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001137 list(map(int, Squares(10))),
Walter Dörwald919497e2003-01-19 16:23:59 +00001138 [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
1139 )
Guido van Rossum47b9ff62006-08-24 00:41:19 +00001140 def Max(a, b):
1141 if a is None:
1142 return b
1143 if b is None:
1144 return a
1145 return max(a, b)
Walter Dörwald919497e2003-01-19 16:23:59 +00001146 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001147 list(map(Max, Squares(3), Squares(2))),
1148 [0, 1]
Walter Dörwald919497e2003-01-19 16:23:59 +00001149 )
1150 self.assertRaises(TypeError, map)
1151 self.assertRaises(TypeError, map, lambda x: x, 42)
Walter Dörwald919497e2003-01-19 16:23:59 +00001152 class BadSeq:
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001153 def __iter__(self):
Walter Dörwald919497e2003-01-19 16:23:59 +00001154 raise ValueError
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001155 yield None
1156 self.assertRaises(ValueError, list, map(lambda x: x, BadSeq()))
Neal Norwitzfcf44352005-11-27 20:37:43 +00001157 def badfunc(x):
1158 raise RuntimeError
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001159 self.assertRaises(RuntimeError, list, map(badfunc, range(5)))
Walter Dörwald919497e2003-01-19 16:23:59 +00001160
1161 def test_max(self):
1162 self.assertEqual(max('123123'), '3')
1163 self.assertEqual(max(1, 2, 3), 3)
1164 self.assertEqual(max((1, 2, 3, 1, 2, 3)), 3)
1165 self.assertEqual(max([1, 2, 3, 1, 2, 3]), 3)
1166
Guido van Rossume2a383d2007-01-15 16:59:06 +00001167 self.assertEqual(max(1, 2, 3.0), 3.0)
1168 self.assertEqual(max(1, 2.0, 3), 3)
1169 self.assertEqual(max(1.0, 2, 3), 3)
Walter Dörwald919497e2003-01-19 16:23:59 +00001170
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001171 for stmt in (
1172 "max(key=int)", # no args
1173 "max(1, key=int)", # single arg not iterable
1174 "max(1, 2, keystone=int)", # wrong keyword
1175 "max(1, 2, key=int, abc=int)", # two many keywords
1176 "max(1, 2, key=1)", # keyfunc is not callable
1177 ):
Tim Peters7f061872004-12-07 21:17:46 +00001178 try:
Georg Brandl7cae87c2006-09-06 06:51:57 +00001179 exec(stmt, globals())
Tim Peters7f061872004-12-07 21:17:46 +00001180 except TypeError:
1181 pass
1182 else:
1183 self.fail(stmt)
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001184
1185 self.assertEqual(max((1,), key=neg), 1) # one elem iterable
1186 self.assertEqual(max((1,2), key=neg), 1) # two elem iterable
1187 self.assertEqual(max(1, 2, key=neg), 1) # two elems
1188
1189 data = [random.randrange(200) for i in range(100)]
1190 keys = dict((elem, random.randrange(50)) for elem in data)
1191 f = keys.__getitem__
1192 self.assertEqual(max(data, key=f),
1193 sorted(reversed(data), key=f)[-1])
1194
Walter Dörwald919497e2003-01-19 16:23:59 +00001195 def test_min(self):
1196 self.assertEqual(min('123123'), '1')
1197 self.assertEqual(min(1, 2, 3), 1)
1198 self.assertEqual(min((1, 2, 3, 1, 2, 3)), 1)
1199 self.assertEqual(min([1, 2, 3, 1, 2, 3]), 1)
1200
Guido van Rossume2a383d2007-01-15 16:59:06 +00001201 self.assertEqual(min(1, 2, 3.0), 1)
1202 self.assertEqual(min(1, 2.0, 3), 1)
1203 self.assertEqual(min(1.0, 2, 3), 1.0)
Walter Dörwald919497e2003-01-19 16:23:59 +00001204
1205 self.assertRaises(TypeError, min)
1206 self.assertRaises(TypeError, min, 42)
1207 self.assertRaises(ValueError, min, ())
1208 class BadSeq:
1209 def __getitem__(self, index):
1210 raise ValueError
1211 self.assertRaises(ValueError, min, BadSeq())
1212 class BadNumber:
1213 def __cmp__(self, other):
1214 raise ValueError
Guido van Rossum47b9ff62006-08-24 00:41:19 +00001215 self.assertRaises(TypeError, min, (42, BadNumber()))
Walter Dörwald919497e2003-01-19 16:23:59 +00001216
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001217 for stmt in (
1218 "min(key=int)", # no args
1219 "min(1, key=int)", # single arg not iterable
1220 "min(1, 2, keystone=int)", # wrong keyword
1221 "min(1, 2, key=int, abc=int)", # two many keywords
1222 "min(1, 2, key=1)", # keyfunc is not callable
1223 ):
Tim Peters7f061872004-12-07 21:17:46 +00001224 try:
Georg Brandl7cae87c2006-09-06 06:51:57 +00001225 exec(stmt, globals())
Tim Peters7f061872004-12-07 21:17:46 +00001226 except TypeError:
1227 pass
1228 else:
1229 self.fail(stmt)
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001230
1231 self.assertEqual(min((1,), key=neg), 1) # one elem iterable
1232 self.assertEqual(min((1,2), key=neg), 2) # two elem iterable
1233 self.assertEqual(min(1, 2, key=neg), 2) # two elems
1234
1235 data = [random.randrange(200) for i in range(100)]
1236 keys = dict((elem, random.randrange(50)) for elem in data)
1237 f = keys.__getitem__
1238 self.assertEqual(min(data, key=f),
1239 sorted(data, key=f)[0])
1240
Georg Brandla18af4e2007-04-21 15:47:16 +00001241 def test_next(self):
1242 it = iter(range(2))
1243 self.assertEqual(next(it), 0)
1244 self.assertEqual(next(it), 1)
1245 self.assertRaises(StopIteration, next, it)
1246 self.assertRaises(StopIteration, next, it)
1247 self.assertEquals(next(it, 42), 42)
1248
1249 class Iter(object):
1250 def __iter__(self):
1251 return self
1252 def __next__(self):
1253 raise StopIteration
1254
1255 it = iter(Iter())
1256 self.assertEquals(next(it, 42), 42)
1257 self.assertRaises(StopIteration, next, it)
1258
1259 def gen():
1260 yield 1
1261 return
1262
1263 it = gen()
1264 self.assertEquals(next(it), 1)
1265 self.assertRaises(StopIteration, next, it)
1266 self.assertEquals(next(it, 42), 42)
1267
Walter Dörwald919497e2003-01-19 16:23:59 +00001268 def test_oct(self):
Guido van Rossumcd16bf62007-06-13 18:07:49 +00001269 self.assertEqual(oct(100), '0o144')
1270 self.assertEqual(oct(100), '0o144')
1271 self.assertEqual(oct(-100), '-0o144')
1272 self.assertEqual(oct(-100), '-0o144')
Walter Dörwald919497e2003-01-19 16:23:59 +00001273 self.assertRaises(TypeError, oct, ())
1274
1275 def write_testfile(self):
Guido van Rossuma88a0332007-02-26 16:59:55 +00001276 # NB the first 4 lines are also used to test input, below
Walter Dörwald919497e2003-01-19 16:23:59 +00001277 fp = open(TESTFN, 'w')
1278 try:
1279 fp.write('1+1\n')
1280 fp.write('1+1\n')
1281 fp.write('The quick brown fox jumps over the lazy dog')
1282 fp.write('.\n')
1283 fp.write('Dear John\n')
1284 fp.write('XXX'*100)
1285 fp.write('YYY'*100)
1286 finally:
1287 fp.close()
1288
1289 def test_open(self):
1290 self.write_testfile()
1291 fp = open(TESTFN, 'r')
1292 try:
1293 self.assertEqual(fp.readline(4), '1+1\n')
1294 self.assertEqual(fp.readline(4), '1+1\n')
1295 self.assertEqual(fp.readline(), 'The quick brown fox jumps over the lazy dog.\n')
1296 self.assertEqual(fp.readline(4), 'Dear')
1297 self.assertEqual(fp.readline(100), ' John\n')
1298 self.assertEqual(fp.read(300), 'XXX'*100)
1299 self.assertEqual(fp.read(1000), 'YYY'*100)
1300 finally:
1301 fp.close()
1302 unlink(TESTFN)
1303
1304 def test_ord(self):
1305 self.assertEqual(ord(' '), 32)
1306 self.assertEqual(ord('A'), 65)
1307 self.assertEqual(ord('a'), 97)
Guido van Rossumf9e91c92007-05-08 21:05:48 +00001308 self.assertEqual(ord('\x80'), 128)
1309 self.assertEqual(ord('\xff'), 255)
1310
1311 self.assertEqual(ord(b' '), 32)
1312 self.assertEqual(ord(b'A'), 65)
1313 self.assertEqual(ord(b'a'), 97)
1314 self.assertEqual(ord(b'\x80'), 128)
1315 self.assertEqual(ord(b'\xff'), 255)
1316
Walter Dörwald1f5947b2007-05-22 16:52:54 +00001317 self.assertEqual(ord(chr(sys.maxunicode)), sys.maxunicode)
Walter Dörwald919497e2003-01-19 16:23:59 +00001318 self.assertRaises(TypeError, ord, 42)
Walter Dörwald919497e2003-01-19 16:23:59 +00001319
Guido van Rossum8ac004e2007-07-15 13:00:05 +00001320 self.assertEqual(ord(chr(0x10FFFF)), 0x10FFFF)
1321 self.assertEqual(ord("\U0000FFFF"), 0x0000FFFF)
1322 self.assertEqual(ord("\U00010000"), 0x00010000)
1323 self.assertEqual(ord("\U00010001"), 0x00010001)
1324 self.assertEqual(ord("\U000FFFFE"), 0x000FFFFE)
1325 self.assertEqual(ord("\U000FFFFF"), 0x000FFFFF)
1326 self.assertEqual(ord("\U00100000"), 0x00100000)
1327 self.assertEqual(ord("\U00100001"), 0x00100001)
1328 self.assertEqual(ord("\U0010FFFE"), 0x0010FFFE)
1329 self.assertEqual(ord("\U0010FFFF"), 0x0010FFFF)
1330
Walter Dörwald919497e2003-01-19 16:23:59 +00001331 def test_pow(self):
1332 self.assertEqual(pow(0,0), 1)
1333 self.assertEqual(pow(0,1), 0)
1334 self.assertEqual(pow(1,0), 1)
1335 self.assertEqual(pow(1,1), 1)
1336
1337 self.assertEqual(pow(2,0), 1)
1338 self.assertEqual(pow(2,10), 1024)
1339 self.assertEqual(pow(2,20), 1024*1024)
1340 self.assertEqual(pow(2,30), 1024*1024*1024)
1341
1342 self.assertEqual(pow(-2,0), 1)
1343 self.assertEqual(pow(-2,1), -2)
1344 self.assertEqual(pow(-2,2), 4)
1345 self.assertEqual(pow(-2,3), -8)
1346
Guido van Rossume2a383d2007-01-15 16:59:06 +00001347 self.assertEqual(pow(0,0), 1)
1348 self.assertEqual(pow(0,1), 0)
1349 self.assertEqual(pow(1,0), 1)
1350 self.assertEqual(pow(1,1), 1)
Walter Dörwald919497e2003-01-19 16:23:59 +00001351
Guido van Rossume2a383d2007-01-15 16:59:06 +00001352 self.assertEqual(pow(2,0), 1)
1353 self.assertEqual(pow(2,10), 1024)
1354 self.assertEqual(pow(2,20), 1024*1024)
1355 self.assertEqual(pow(2,30), 1024*1024*1024)
Walter Dörwald919497e2003-01-19 16:23:59 +00001356
Guido van Rossume2a383d2007-01-15 16:59:06 +00001357 self.assertEqual(pow(-2,0), 1)
1358 self.assertEqual(pow(-2,1), -2)
1359 self.assertEqual(pow(-2,2), 4)
1360 self.assertEqual(pow(-2,3), -8)
Walter Dörwald919497e2003-01-19 16:23:59 +00001361
1362 self.assertAlmostEqual(pow(0.,0), 1.)
1363 self.assertAlmostEqual(pow(0.,1), 0.)
1364 self.assertAlmostEqual(pow(1.,0), 1.)
1365 self.assertAlmostEqual(pow(1.,1), 1.)
1366
1367 self.assertAlmostEqual(pow(2.,0), 1.)
1368 self.assertAlmostEqual(pow(2.,10), 1024.)
1369 self.assertAlmostEqual(pow(2.,20), 1024.*1024.)
1370 self.assertAlmostEqual(pow(2.,30), 1024.*1024.*1024.)
1371
1372 self.assertAlmostEqual(pow(-2.,0), 1.)
1373 self.assertAlmostEqual(pow(-2.,1), -2.)
1374 self.assertAlmostEqual(pow(-2.,2), 4.)
1375 self.assertAlmostEqual(pow(-2.,3), -8.)
1376
Guido van Rossume2a383d2007-01-15 16:59:06 +00001377 for x in 2, 2, 2.0:
1378 for y in 10, 10, 10.0:
1379 for z in 1000, 1000, 1000.0:
Walter Dörwald919497e2003-01-19 16:23:59 +00001380 if isinstance(x, float) or \
1381 isinstance(y, float) or \
1382 isinstance(z, float):
1383 self.assertRaises(TypeError, pow, x, y, z)
1384 else:
1385 self.assertAlmostEqual(pow(x, y, z), 24.0)
1386
Jeffrey Yasskin3404b3c2007-09-07 15:15:49 +00001387 self.assertAlmostEqual(pow(-1, 0.5), 1j)
1388 self.assertAlmostEqual(pow(-1, 1/3), 0.5 + 0.8660254037844386j)
1389
Walter Dörwald919497e2003-01-19 16:23:59 +00001390 self.assertRaises(TypeError, pow, -1, -2, 3)
1391 self.assertRaises(ValueError, pow, 1, 2, 0)
Guido van Rossume2a383d2007-01-15 16:59:06 +00001392 self.assertRaises(TypeError, pow, -1, -2, 3)
1393 self.assertRaises(ValueError, pow, 1, 2, 0)
Walter Dörwald919497e2003-01-19 16:23:59 +00001394
1395 self.assertRaises(TypeError, pow)
1396
1397 def test_range(self):
Guido van Rossum805365e2007-05-07 22:24:25 +00001398 self.assertEqual(list(range(3)), [0, 1, 2])
1399 self.assertEqual(list(range(1, 5)), [1, 2, 3, 4])
1400 self.assertEqual(list(range(0)), [])
1401 self.assertEqual(list(range(-3)), [])
1402 self.assertEqual(list(range(1, 10, 3)), [1, 4, 7])
1403 #self.assertEqual(list(range(5, -5, -3)), [5, 2, -1, -4])
Walter Dörwald919497e2003-01-19 16:23:59 +00001404
Guido van Rossum805365e2007-05-07 22:24:25 +00001405 """ XXX(nnorwitz):
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001406 # Now test range() with longs
Guido van Rossum805365e2007-05-07 22:24:25 +00001407 self.assertEqual(list(range(-2**100)), [])
1408 self.assertEqual(list(range(0, -2**100)), [])
1409 self.assertEqual(list(range(0, 2**100, -1)), [])
1410 self.assertEqual(list(range(0, 2**100, -1)), [])
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001411
Christian Heimesa37d4c62007-12-04 23:02:19 +00001412 a = int(10 * sys.maxsize)
1413 b = int(100 * sys.maxsize)
1414 c = int(50 * sys.maxsize)
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001415
Guido van Rossum805365e2007-05-07 22:24:25 +00001416 self.assertEqual(list(range(a, a+2)), [a, a+1])
1417 self.assertEqual(list(range(a+2, a, -1)), [a+2, a+1])
1418 self.assertEqual(list(range(a+4, a, -2)), [a+4, a+2])
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001419
Guido van Rossum805365e2007-05-07 22:24:25 +00001420 seq = list(range(a, b, c))
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001421 self.assert_(a in seq)
1422 self.assert_(b not in seq)
1423 self.assertEqual(len(seq), 2)
1424
Guido van Rossum805365e2007-05-07 22:24:25 +00001425 seq = list(range(b, a, -c))
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001426 self.assert_(b in seq)
1427 self.assert_(a not in seq)
1428 self.assertEqual(len(seq), 2)
1429
Guido van Rossum805365e2007-05-07 22:24:25 +00001430 seq = list(range(-a, -b, -c))
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001431 self.assert_(-a in seq)
1432 self.assert_(-b not in seq)
1433 self.assertEqual(len(seq), 2)
1434
Walter Dörwald919497e2003-01-19 16:23:59 +00001435 self.assertRaises(TypeError, range)
1436 self.assertRaises(TypeError, range, 1, 2, 3, 4)
1437 self.assertRaises(ValueError, range, 1, 2, 0)
Guido van Rossume2a383d2007-01-15 16:59:06 +00001438 self.assertRaises(ValueError, range, a, a + 1, int(0))
Neal Norwitzfcf44352005-11-27 20:37:43 +00001439
1440 class badzero(int):
Guido van Rossum47b9ff62006-08-24 00:41:19 +00001441 def __eq__(self, other):
Neal Norwitzfcf44352005-11-27 20:37:43 +00001442 raise RuntimeError
Guido van Rossum47b9ff62006-08-24 00:41:19 +00001443 __ne__ = __lt__ = __gt__ = __le__ = __ge__ = __eq__
1444
1445 # XXX This won't (but should!) raise RuntimeError if a is an int...
Neal Norwitzfcf44352005-11-27 20:37:43 +00001446 self.assertRaises(RuntimeError, range, a, a + 1, badzero(1))
Guido van Rossum805365e2007-05-07 22:24:25 +00001447 """
Walter Dörwald919497e2003-01-19 16:23:59 +00001448
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001449 # Reject floats when it would require PyLongs to represent.
1450 # (smaller floats still accepted, but deprecated)
Tim Peters299b3df2003-04-15 14:40:03 +00001451 self.assertRaises(TypeError, range, 1e100, 1e101, 1e101)
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001452
Walter Dörwald357981e2003-04-15 18:59:28 +00001453 self.assertRaises(TypeError, range, 0, "spam")
1454 self.assertRaises(TypeError, range, 0, 42, "spam")
1455
Christian Heimesa37d4c62007-12-04 23:02:19 +00001456 #NEAL self.assertRaises(OverflowError, range, -sys.maxsize, sys.maxsize)
1457 #NEAL self.assertRaises(OverflowError, range, 0, 2*sys.maxsize)
Guido van Rossum805365e2007-05-07 22:24:25 +00001458
Christian Heimesa37d4c62007-12-04 23:02:19 +00001459 self.assertRaises(OverflowError, len, range(0, sys.maxsize**10))
Walter Dörwald357981e2003-04-15 18:59:28 +00001460
Guido van Rossuma88a0332007-02-26 16:59:55 +00001461 def test_input(self):
1462 self.write_testfile()
1463 fp = open(TESTFN, 'r')
1464 savestdin = sys.stdin
1465 savestdout = sys.stdout # Eats the echo
1466 try:
1467 sys.stdin = fp
1468 sys.stdout = BitBucket()
1469 self.assertEqual(input(), "1+1")
1470 self.assertEqual(input('testing\n'), "1+1")
1471 self.assertEqual(input(), 'The quick brown fox jumps over the lazy dog.')
1472 self.assertEqual(input('testing\n'), 'Dear John')
1473
1474 # SF 1535165: don't segfault on closed stdin
1475 # sys.stdout must be a regular file for triggering
1476 sys.stdout = savestdout
1477 sys.stdin.close()
1478 self.assertRaises(ValueError, input)
1479
1480 sys.stdout = BitBucket()
Guido van Rossum34d19282007-08-09 01:03:29 +00001481 sys.stdin = io.StringIO("NULL\0")
Guido van Rossuma88a0332007-02-26 16:59:55 +00001482 self.assertRaises(TypeError, input, 42, 42)
Guido van Rossum34d19282007-08-09 01:03:29 +00001483 sys.stdin = io.StringIO(" 'whitespace'")
Guido van Rossuma88a0332007-02-26 16:59:55 +00001484 self.assertEqual(input(), " 'whitespace'")
Guido van Rossum34d19282007-08-09 01:03:29 +00001485 sys.stdin = io.StringIO()
Guido van Rossuma88a0332007-02-26 16:59:55 +00001486 self.assertRaises(EOFError, input)
1487
1488 del sys.stdout
1489 self.assertRaises(RuntimeError, input, 'prompt')
1490 del sys.stdin
1491 self.assertRaises(RuntimeError, input, 'prompt')
1492 finally:
1493 sys.stdin = savestdin
1494 sys.stdout = savestdout
1495 fp.close()
1496 unlink(TESTFN)
1497
Walter Dörwald919497e2003-01-19 16:23:59 +00001498 def test_repr(self):
1499 self.assertEqual(repr(''), '\'\'')
1500 self.assertEqual(repr(0), '0')
Guido van Rossume2a383d2007-01-15 16:59:06 +00001501 self.assertEqual(repr(0), '0')
Walter Dörwald919497e2003-01-19 16:23:59 +00001502 self.assertEqual(repr(()), '()')
1503 self.assertEqual(repr([]), '[]')
1504 self.assertEqual(repr({}), '{}')
1505 a = []
1506 a.append(a)
1507 self.assertEqual(repr(a), '[[...]]')
1508 a = {}
1509 a[0] = a
1510 self.assertEqual(repr(a), '{0: {...}}')
1511
1512 def test_round(self):
1513 self.assertEqual(round(0.0), 0.0)
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001514 self.assertEqual(type(round(0.0)), int)
Walter Dörwald919497e2003-01-19 16:23:59 +00001515 self.assertEqual(round(1.0), 1.0)
1516 self.assertEqual(round(10.0), 10.0)
1517 self.assertEqual(round(1000000000.0), 1000000000.0)
1518 self.assertEqual(round(1e20), 1e20)
1519
1520 self.assertEqual(round(-1.0), -1.0)
1521 self.assertEqual(round(-10.0), -10.0)
1522 self.assertEqual(round(-1000000000.0), -1000000000.0)
1523 self.assertEqual(round(-1e20), -1e20)
1524
1525 self.assertEqual(round(0.1), 0.0)
1526 self.assertEqual(round(1.1), 1.0)
1527 self.assertEqual(round(10.1), 10.0)
1528 self.assertEqual(round(1000000000.1), 1000000000.0)
1529
1530 self.assertEqual(round(-1.1), -1.0)
1531 self.assertEqual(round(-10.1), -10.0)
1532 self.assertEqual(round(-1000000000.1), -1000000000.0)
1533
1534 self.assertEqual(round(0.9), 1.0)
1535 self.assertEqual(round(9.9), 10.0)
1536 self.assertEqual(round(999999999.9), 1000000000.0)
1537
1538 self.assertEqual(round(-0.9), -1.0)
1539 self.assertEqual(round(-9.9), -10.0)
1540 self.assertEqual(round(-999999999.9), -1000000000.0)
1541
1542 self.assertEqual(round(-8.0, -1), -10.0)
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001543 self.assertEqual(type(round(-8.0, -1)), float)
1544
1545 self.assertEqual(type(round(-8.0, 0)), float)
1546 self.assertEqual(type(round(-8.0, 1)), float)
1547
1548 # Check even / odd rounding behaviour
1549 self.assertEqual(round(5.5), 6)
1550 self.assertEqual(round(6.5), 6)
1551 self.assertEqual(round(-5.5), -6)
1552 self.assertEqual(round(-6.5), -6)
1553
1554 # Check behavior on ints
1555 self.assertEqual(round(0), 0)
1556 self.assertEqual(round(8), 8)
1557 self.assertEqual(round(-8), -8)
1558 self.assertEqual(type(round(0)), int)
1559 self.assertEqual(type(round(-8, -1)), float)
1560 self.assertEqual(type(round(-8, 0)), float)
1561 self.assertEqual(type(round(-8, 1)), float)
Walter Dörwald919497e2003-01-19 16:23:59 +00001562
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001563 # test new kwargs
1564 self.assertEqual(round(number=-8.0, ndigits=-1), -10.0)
1565
Walter Dörwald919497e2003-01-19 16:23:59 +00001566 self.assertRaises(TypeError, round)
1567
Alex Martelliae211f92007-08-22 23:21:33 +00001568 # test generic rounding delegation for reals
1569 class TestRound:
1570 def __round__(self):
1571 return 23
1572
1573 class TestNoRound:
1574 pass
1575
1576 self.assertEqual(round(TestRound()), 23)
1577
1578 self.assertRaises(TypeError, round, 1, 2, 3)
1579 self.assertRaises(TypeError, round, TestNoRound())
1580
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001581 t = TestNoRound()
1582 t.__round__ = lambda *args: args
1583 self.assertRaises(TypeError, round, t)
1584 self.assertRaises(TypeError, round, t, 0)
1585
Walter Dörwald919497e2003-01-19 16:23:59 +00001586 def test_setattr(self):
Tim Petersf2715e02003-02-19 02:35:07 +00001587 setattr(sys, 'spam', 1)
1588 self.assertEqual(sys.spam, 1)
1589 self.assertRaises(TypeError, setattr, sys, 1, 'spam')
1590 self.assertRaises(TypeError, setattr)
Walter Dörwald919497e2003-01-19 16:23:59 +00001591
1592 def test_str(self):
1593 self.assertEqual(str(''), '')
1594 self.assertEqual(str(0), '0')
Guido van Rossume2a383d2007-01-15 16:59:06 +00001595 self.assertEqual(str(0), '0')
Walter Dörwald919497e2003-01-19 16:23:59 +00001596 self.assertEqual(str(()), '()')
1597 self.assertEqual(str([]), '[]')
1598 self.assertEqual(str({}), '{}')
1599 a = []
1600 a.append(a)
1601 self.assertEqual(str(a), '[[...]]')
1602 a = {}
1603 a[0] = a
1604 self.assertEqual(str(a), '{0: {...}}')
1605
Alex Martellia70b1912003-04-22 08:12:33 +00001606 def test_sum(self):
1607 self.assertEqual(sum([]), 0)
Guido van Rossum805365e2007-05-07 22:24:25 +00001608 self.assertEqual(sum(list(range(2,8))), 27)
1609 self.assertEqual(sum(iter(list(range(2,8)))), 27)
Alex Martellia70b1912003-04-22 08:12:33 +00001610 self.assertEqual(sum(Squares(10)), 285)
1611 self.assertEqual(sum(iter(Squares(10))), 285)
1612 self.assertEqual(sum([[1], [2], [3]], []), [1, 2, 3])
1613
1614 self.assertRaises(TypeError, sum)
1615 self.assertRaises(TypeError, sum, 42)
1616 self.assertRaises(TypeError, sum, ['a', 'b', 'c'])
1617 self.assertRaises(TypeError, sum, ['a', 'b', 'c'], '')
1618 self.assertRaises(TypeError, sum, [[1], [2], [3]])
1619 self.assertRaises(TypeError, sum, [{2:3}])
1620 self.assertRaises(TypeError, sum, [{2:3}]*2, {2:3})
1621
1622 class BadSeq:
1623 def __getitem__(self, index):
1624 raise ValueError
1625 self.assertRaises(ValueError, sum, BadSeq())
1626
Alex Martelli86d8b342007-08-22 22:39:42 +00001627 def test_trunc(self):
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001628
1629 self.assertEqual(trunc(1), 1)
1630 self.assertEqual(trunc(-1), -1)
1631 self.assertEqual(type(trunc(1)), int)
1632 self.assertEqual(type(trunc(1.5)), int)
1633 self.assertEqual(trunc(1.5), 1)
1634 self.assertEqual(trunc(-1.5), -1)
1635 self.assertEqual(trunc(1.999999), 1)
1636 self.assertEqual(trunc(-1.999999), -1)
1637 self.assertEqual(trunc(-0.999999), -0)
1638 self.assertEqual(trunc(-100.999), -100)
1639
Alex Martelli86d8b342007-08-22 22:39:42 +00001640 class TestTrunc:
1641 def __trunc__(self):
1642 return 23
1643
1644 class TestNoTrunc:
1645 pass
1646
1647 self.assertEqual(trunc(TestTrunc()), 23)
1648
1649 self.assertRaises(TypeError, trunc)
1650 self.assertRaises(TypeError, trunc, 1, 2)
1651 self.assertRaises(TypeError, trunc, TestNoTrunc())
1652
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001653 t = TestNoTrunc()
1654 t.__trunc__ = lambda *args: args
1655 self.assertRaises(TypeError, trunc, t)
1656 self.assertRaises(TypeError, trunc, t, 0)
1657
Walter Dörwald919497e2003-01-19 16:23:59 +00001658 def test_tuple(self):
1659 self.assertEqual(tuple(()), ())
1660 t0_3 = (0, 1, 2, 3)
1661 t0_3_bis = tuple(t0_3)
1662 self.assert_(t0_3 is t0_3_bis)
1663 self.assertEqual(tuple([]), ())
1664 self.assertEqual(tuple([0, 1, 2, 3]), (0, 1, 2, 3))
1665 self.assertEqual(tuple(''), ())
1666 self.assertEqual(tuple('spam'), ('s', 'p', 'a', 'm'))
1667
1668 def test_type(self):
1669 self.assertEqual(type(''), type('123'))
1670 self.assertNotEqual(type(''), type(()))
1671
Guido van Rossumfee7b932005-01-16 00:21:28 +00001672 # We don't want self in vars(), so these are static methods
1673
1674 @staticmethod
Walter Dörwald919497e2003-01-19 16:23:59 +00001675 def get_vars_f0():
1676 return vars()
Walter Dörwald919497e2003-01-19 16:23:59 +00001677
Guido van Rossumfee7b932005-01-16 00:21:28 +00001678 @staticmethod
Walter Dörwald919497e2003-01-19 16:23:59 +00001679 def get_vars_f2():
1680 BuiltinTest.get_vars_f0()
1681 a = 1
1682 b = 2
1683 return vars()
Walter Dörwald919497e2003-01-19 16:23:59 +00001684
1685 def test_vars(self):
Raymond Hettingera690a992003-11-16 16:17:49 +00001686 self.assertEqual(set(vars()), set(dir()))
Walter Dörwald919497e2003-01-19 16:23:59 +00001687 import sys
Raymond Hettingera690a992003-11-16 16:17:49 +00001688 self.assertEqual(set(vars(sys)), set(dir(sys)))
Walter Dörwald919497e2003-01-19 16:23:59 +00001689 self.assertEqual(self.get_vars_f0(), {})
1690 self.assertEqual(self.get_vars_f2(), {'a': 1, 'b': 2})
1691 self.assertRaises(TypeError, vars, 42, 42)
1692 self.assertRaises(TypeError, vars, 42)
1693
1694 def test_zip(self):
1695 a = (1, 2, 3)
1696 b = (4, 5, 6)
1697 t = [(1, 4), (2, 5), (3, 6)]
Guido van Rossum801f0d72006-08-24 19:48:10 +00001698 self.assertEqual(list(zip(a, b)), t)
Walter Dörwald919497e2003-01-19 16:23:59 +00001699 b = [4, 5, 6]
Guido van Rossum801f0d72006-08-24 19:48:10 +00001700 self.assertEqual(list(zip(a, b)), t)
Walter Dörwald919497e2003-01-19 16:23:59 +00001701 b = (4, 5, 6, 7)
Guido van Rossum801f0d72006-08-24 19:48:10 +00001702 self.assertEqual(list(zip(a, b)), t)
Walter Dörwald919497e2003-01-19 16:23:59 +00001703 class I:
1704 def __getitem__(self, i):
1705 if i < 0 or i > 2: raise IndexError
1706 return i + 4
Guido van Rossum801f0d72006-08-24 19:48:10 +00001707 self.assertEqual(list(zip(a, I())), t)
1708 self.assertEqual(list(zip()), [])
1709 self.assertEqual(list(zip(*[])), [])
Walter Dörwald919497e2003-01-19 16:23:59 +00001710 self.assertRaises(TypeError, zip, None)
1711 class G:
1712 pass
1713 self.assertRaises(TypeError, zip, a, G())
1714
1715 # Make sure zip doesn't try to allocate a billion elements for the
1716 # result list when one of its arguments doesn't say how long it is.
1717 # A MemoryError is the most likely failure mode.
1718 class SequenceWithoutALength:
1719 def __getitem__(self, i):
1720 if i == 5:
1721 raise IndexError
1722 else:
1723 return i
1724 self.assertEqual(
Guido van Rossum805365e2007-05-07 22:24:25 +00001725 list(zip(SequenceWithoutALength(), range(2**30))),
Walter Dörwald919497e2003-01-19 16:23:59 +00001726 list(enumerate(range(5)))
1727 )
1728
1729 class BadSeq:
1730 def __getitem__(self, i):
1731 if i == 5:
1732 raise ValueError
1733 else:
1734 return i
Guido van Rossum801f0d72006-08-24 19:48:10 +00001735 self.assertRaises(ValueError, list, zip(BadSeq(), BadSeq()))
Walter Dörwald919497e2003-01-19 16:23:59 +00001736
Raymond Hettinger64958a12003-12-17 20:43:33 +00001737class TestSorted(unittest.TestCase):
1738
1739 def test_basic(self):
Guido van Rossum805365e2007-05-07 22:24:25 +00001740 data = list(range(100))
Raymond Hettinger64958a12003-12-17 20:43:33 +00001741 copy = data[:]
1742 random.shuffle(copy)
1743 self.assertEqual(data, sorted(copy))
1744 self.assertNotEqual(data, copy)
1745
1746 data.reverse()
1747 random.shuffle(copy)
Guido van Rossum47b9ff62006-08-24 00:41:19 +00001748 self.assertEqual(data, sorted(copy, cmp=lambda x, y: (x < y) - (x > y)))
Raymond Hettinger64958a12003-12-17 20:43:33 +00001749 self.assertNotEqual(data, copy)
1750 random.shuffle(copy)
1751 self.assertEqual(data, sorted(copy, key=lambda x: -x))
1752 self.assertNotEqual(data, copy)
1753 random.shuffle(copy)
1754 self.assertEqual(data, sorted(copy, reverse=1))
1755 self.assertNotEqual(data, copy)
1756
1757 def test_inputtypes(self):
1758 s = 'abracadabra'
Walter Dörwald1f5947b2007-05-22 16:52:54 +00001759 types = [list, tuple, str]
Walter Dörwald4e41a4b2005-08-03 17:09:04 +00001760 for T in types:
Raymond Hettinger64958a12003-12-17 20:43:33 +00001761 self.assertEqual(sorted(s), sorted(T(s)))
1762
Walter Dörwald1f5947b2007-05-22 16:52:54 +00001763 s = ''.join(set(s)) # unique letters only
1764 types = [str, set, frozenset, list, tuple, dict.fromkeys]
Walter Dörwald4e41a4b2005-08-03 17:09:04 +00001765 for T in types:
Raymond Hettinger64958a12003-12-17 20:43:33 +00001766 self.assertEqual(sorted(s), sorted(T(s)))
1767
1768 def test_baddecorator(self):
1769 data = 'The quick Brown fox Jumped over The lazy Dog'.split()
1770 self.assertRaises(TypeError, sorted, data, None, lambda x,y: 0)
1771
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001772def test_main(verbose=None):
1773 test_classes = (BuiltinTest, TestSorted)
1774
1775 run_unittest(*test_classes)
1776
1777 # verify reference counting
1778 if verbose and hasattr(sys, "gettotalrefcount"):
1779 import gc
1780 counts = [None] * 5
Guido van Rossum805365e2007-05-07 22:24:25 +00001781 for i in range(len(counts)):
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001782 run_unittest(*test_classes)
1783 gc.collect()
1784 counts[i] = sys.gettotalrefcount()
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001785 print(counts)
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001786
Walter Dörwald919497e2003-01-19 16:23:59 +00001787
1788if __name__ == "__main__":
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001789 test_main(verbose=True)