blob: 35cdcd43dc566aaf81ec80a546f40f0db0eda57b [file] [log] [blame]
Walter Dörwald919497e2003-01-19 16:23:59 +00001# Python test set -- built-in functions
Guido van Rossum3bead091992-01-27 17:00:37 +00002
Walter Dörwald919497e2003-01-19 16:23:59 +00003import test.test_support, unittest
Walter Dörwald1f5947b2007-05-22 16:52:54 +00004from test.test_support import fcmp, TESTFN, unlink, run_unittest, \
5 run_with_locale
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00006from operator import neg
Guido van Rossum3bead091992-01-27 17:00:37 +00007
Christian Heimes26855632008-01-27 23:50:43 +00008import sys, warnings, random, UserDict, io, rational
Walter Dörwald919497e2003-01-19 16:23:59 +00009warnings.filterwarnings("ignore", "hex../oct.. of negative int",
10 FutureWarning, __name__)
Guido van Rossumefbbb1c2003-04-11 18:43:06 +000011warnings.filterwarnings("ignore", "integer argument expected",
12 DeprecationWarning, "unittest")
Guido van Rossum3bead091992-01-27 17:00:37 +000013
Walter Dörwald919497e2003-01-19 16:23:59 +000014class Squares:
Guido van Rossum3bead091992-01-27 17:00:37 +000015
Walter Dörwald919497e2003-01-19 16:23:59 +000016 def __init__(self, max):
17 self.max = max
18 self.sofar = []
19
20 def __len__(self): return len(self.sofar)
21
22 def __getitem__(self, i):
23 if not 0 <= i < self.max: raise IndexError
24 n = len(self.sofar)
25 while n <= i:
26 self.sofar.append(n*n)
27 n += 1
28 return self.sofar[i]
29
30class StrSquares:
31
32 def __init__(self, max):
33 self.max = max
34 self.sofar = []
35
36 def __len__(self):
37 return len(self.sofar)
38
39 def __getitem__(self, i):
40 if not 0 <= i < self.max:
41 raise IndexError
42 n = len(self.sofar)
43 while n <= i:
44 self.sofar.append(str(n*n))
45 n += 1
46 return self.sofar[i]
47
48class BitBucket:
49 def write(self, line):
50 pass
51
Facundo Batista2336bdd2008-01-19 19:12:01 +000052test_conv_no_sign = [
Walter Dörwald919497e2003-01-19 16:23:59 +000053 ('0', 0),
54 ('1', 1),
55 ('9', 9),
56 ('10', 10),
57 ('99', 99),
58 ('100', 100),
59 ('314', 314),
60 (' 314', 314),
61 ('314 ', 314),
62 (' \t\t 314 \t\t ', 314),
Christian Heimesa37d4c62007-12-04 23:02:19 +000063 (repr(sys.maxsize), sys.maxsize),
Walter Dörwald919497e2003-01-19 16:23:59 +000064 (' 1x', ValueError),
65 (' 1 ', 1),
66 (' 1\02 ', ValueError),
67 ('', ValueError),
68 (' ', ValueError),
Walter Dörwald1f5947b2007-05-22 16:52:54 +000069 (' \t\t ', ValueError),
Guido van Rossumef87d6e2007-05-02 19:09:54 +000070 (str(b'\u0663\u0661\u0664 ','raw-unicode-escape'), 314),
Guido van Rossum84fc66d2007-05-03 17:18:26 +000071 (chr(0x200), ValueError),
Walter Dörwald919497e2003-01-19 16:23:59 +000072]
73
Facundo Batista2336bdd2008-01-19 19:12:01 +000074test_conv_sign = [
75 ('0', 0),
76 ('1', 1),
77 ('9', 9),
78 ('10', 10),
79 ('99', 99),
80 ('100', 100),
81 ('314', 314),
82 (' 314', ValueError),
83 ('314 ', 314),
84 (' \t\t 314 \t\t ', ValueError),
85 (repr(sys.maxsize), sys.maxsize),
86 (' 1x', ValueError),
87 (' 1 ', ValueError),
88 (' 1\02 ', ValueError),
89 ('', ValueError),
90 (' ', ValueError),
91 (' \t\t ', ValueError),
92 (str(b'\u0663\u0661\u0664 ','raw-unicode-escape'), 314),
93 (chr(0x200), ValueError),
94]
95
Raymond Hettinger96229b12005-03-11 06:49:40 +000096class TestFailingBool:
Jack Diederich4dafcc42006-11-28 19:15:13 +000097 def __bool__(self):
Raymond Hettinger96229b12005-03-11 06:49:40 +000098 raise RuntimeError
99
100class TestFailingIter:
101 def __iter__(self):
102 raise RuntimeError
103
Walter Dörwald919497e2003-01-19 16:23:59 +0000104class BuiltinTest(unittest.TestCase):
105
106 def test_import(self):
107 __import__('sys')
108 __import__('time')
109 __import__('string')
Guido van Rossumd8faa362007-04-27 19:54:29 +0000110 __import__(name='sys')
111 __import__(name='time', level=0)
Walter Dörwald919497e2003-01-19 16:23:59 +0000112 self.assertRaises(ImportError, __import__, 'spamspam')
113 self.assertRaises(TypeError, __import__, 1, 2, 3, 4)
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000114 self.assertRaises(ValueError, __import__, '')
Guido van Rossumd8faa362007-04-27 19:54:29 +0000115 self.assertRaises(TypeError, __import__, 'sys', name='sys')
Walter Dörwald919497e2003-01-19 16:23:59 +0000116
117 def test_abs(self):
118 # int
119 self.assertEqual(abs(0), 0)
120 self.assertEqual(abs(1234), 1234)
121 self.assertEqual(abs(-1234), 1234)
Christian Heimesa37d4c62007-12-04 23:02:19 +0000122 self.assertTrue(abs(-sys.maxsize-1) > 0)
Walter Dörwald919497e2003-01-19 16:23:59 +0000123 # float
124 self.assertEqual(abs(0.0), 0.0)
125 self.assertEqual(abs(3.14), 3.14)
126 self.assertEqual(abs(-3.14), 3.14)
127 # long
Guido van Rossume2a383d2007-01-15 16:59:06 +0000128 self.assertEqual(abs(0), 0)
129 self.assertEqual(abs(1234), 1234)
130 self.assertEqual(abs(-1234), 1234)
Walter Dörwald919497e2003-01-19 16:23:59 +0000131 # str
132 self.assertRaises(TypeError, abs, 'a')
133
Raymond Hettinger96229b12005-03-11 06:49:40 +0000134 def test_all(self):
135 self.assertEqual(all([2, 4, 6]), True)
136 self.assertEqual(all([2, None, 6]), False)
137 self.assertRaises(RuntimeError, all, [2, TestFailingBool(), 6])
138 self.assertRaises(RuntimeError, all, TestFailingIter())
139 self.assertRaises(TypeError, all, 10) # Non-iterable
140 self.assertRaises(TypeError, all) # No args
141 self.assertRaises(TypeError, all, [2, 4, 6], []) # Too many args
142 self.assertEqual(all([]), True) # Empty iterator
143 S = [50, 60]
144 self.assertEqual(all(x > 42 for x in S), True)
145 S = [50, 40, 60]
146 self.assertEqual(all(x > 42 for x in S), False)
147
148 def test_any(self):
149 self.assertEqual(any([None, None, None]), False)
150 self.assertEqual(any([None, 4, None]), True)
151 self.assertRaises(RuntimeError, any, [None, TestFailingBool(), 6])
152 self.assertRaises(RuntimeError, all, TestFailingIter())
153 self.assertRaises(TypeError, any, 10) # Non-iterable
154 self.assertRaises(TypeError, any) # No args
155 self.assertRaises(TypeError, any, [2, 4, 6], []) # Too many args
156 self.assertEqual(any([]), False) # Empty iterator
157 S = [40, 60, 30]
158 self.assertEqual(any(x > 42 for x in S), True)
159 S = [10, 20, 30]
160 self.assertEqual(any(x > 42 for x in S), False)
161
Thomas Wouters89f507f2006-12-13 04:49:30 +0000162 def test_neg(self):
Christian Heimesa37d4c62007-12-04 23:02:19 +0000163 x = -sys.maxsize-1
Thomas Wouters89f507f2006-12-13 04:49:30 +0000164 self.assert_(isinstance(x, int))
Christian Heimesa37d4c62007-12-04 23:02:19 +0000165 self.assertEqual(-x, sys.maxsize+1)
Thomas Wouters89f507f2006-12-13 04:49:30 +0000166
Guido van Rossumd59da4b2007-05-22 18:11:13 +0000167 # XXX(nnorwitz): This test case for callable should probably be removed.
Walter Dörwald919497e2003-01-19 16:23:59 +0000168 def test_callable(self):
Guido van Rossumd59da4b2007-05-22 18:11:13 +0000169 self.assert_(hasattr(len, '__call__'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000170 def f(): pass
Guido van Rossumd59da4b2007-05-22 18:11:13 +0000171 self.assert_(hasattr(f, '__call__'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000172 class C:
173 def meth(self): pass
Guido van Rossumd59da4b2007-05-22 18:11:13 +0000174 self.assert_(hasattr(C, '__call__'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000175 x = C()
Guido van Rossumd59da4b2007-05-22 18:11:13 +0000176 self.assert_(hasattr(x.meth, '__call__'))
177 self.assert_(not hasattr(x, '__call__'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000178 class D(C):
179 def __call__(self): pass
180 y = D()
Guido van Rossumd59da4b2007-05-22 18:11:13 +0000181 self.assert_(hasattr(y, '__call__'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000182 y()
183
184 def test_chr(self):
185 self.assertEqual(chr(32), ' ')
186 self.assertEqual(chr(65), 'A')
187 self.assertEqual(chr(97), 'a')
188 self.assertEqual(chr(0xff), '\xff')
Guido van Rossum572dbf82007-04-27 23:53:51 +0000189 self.assertRaises(ValueError, chr, 1<<24)
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000190 self.assertEqual(chr(sys.maxunicode),
191 str(('\\U%08x' % (sys.maxunicode)).encode("ascii"),
192 'unicode-escape'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000193 self.assertRaises(TypeError, chr)
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000194 self.assertEqual(chr(0x0000FFFF), "\U0000FFFF")
195 self.assertEqual(chr(0x00010000), "\U00010000")
196 self.assertEqual(chr(0x00010001), "\U00010001")
197 self.assertEqual(chr(0x000FFFFE), "\U000FFFFE")
198 self.assertEqual(chr(0x000FFFFF), "\U000FFFFF")
199 self.assertEqual(chr(0x00100000), "\U00100000")
200 self.assertEqual(chr(0x00100001), "\U00100001")
201 self.assertEqual(chr(0x0010FFFE), "\U0010FFFE")
202 self.assertEqual(chr(0x0010FFFF), "\U0010FFFF")
203 self.assertRaises(ValueError, chr, -1)
204 self.assertRaises(ValueError, chr, 0x00110000)
Walter Dörwald919497e2003-01-19 16:23:59 +0000205
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000206 def test_cmp(self):
Walter Dörwald919497e2003-01-19 16:23:59 +0000207 self.assertEqual(cmp(-1, 1), -1)
208 self.assertEqual(cmp(1, -1), 1)
209 self.assertEqual(cmp(1, 1), 0)
Armin Rigo2b3eb402003-10-28 12:05:48 +0000210 # verify that circular objects are not handled
Walter Dörwald919497e2003-01-19 16:23:59 +0000211 a = []; a.append(a)
212 b = []; b.append(b)
213 from UserList import UserList
214 c = UserList(); c.append(c)
Armin Rigo2b3eb402003-10-28 12:05:48 +0000215 self.assertRaises(RuntimeError, cmp, a, b)
216 self.assertRaises(RuntimeError, cmp, b, c)
217 self.assertRaises(RuntimeError, cmp, c, a)
218 self.assertRaises(RuntimeError, cmp, a, c)
219 # okay, now break the cycles
Walter Dörwald919497e2003-01-19 16:23:59 +0000220 a.pop(); b.pop(); c.pop()
221 self.assertRaises(TypeError, cmp)
222
Walter Dörwald919497e2003-01-19 16:23:59 +0000223 def test_compile(self):
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000224 compile('print(1)\n', '', 'exec')
Amaury Forgeot d'Arcaf593462007-11-22 20:53:01 +0000225 bom = b'\xef\xbb\xbf'
226 compile(bom + b'print(1)\n', '', 'exec')
Guido van Rossumd8faa362007-04-27 19:54:29 +0000227 compile(source='pass', filename='?', mode='exec')
228 compile(dont_inherit=0, filename='tmp', source='0', mode='eval')
229 compile('pass', '?', dont_inherit=1, mode='exec')
Walter Dörwald919497e2003-01-19 16:23:59 +0000230 self.assertRaises(TypeError, compile)
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000231 self.assertRaises(ValueError, compile, 'print(42)\n', '<string>', 'badmode')
232 self.assertRaises(ValueError, compile, 'print(42)\n', '<string>', 'single', 0xff)
Neal Norwitzfcf44352005-11-27 20:37:43 +0000233 self.assertRaises(TypeError, compile, chr(0), 'f', 'exec')
Guido van Rossumd8faa362007-04-27 19:54:29 +0000234 self.assertRaises(TypeError, compile, 'pass', '?', 'exec',
235 mode='eval', source='0', filename='tmp')
Walter Dörwald1f5947b2007-05-22 16:52:54 +0000236 compile('print("\xe5")\n', '', 'exec')
237 self.assertRaises(TypeError, compile, chr(0), 'f', 'exec')
238 self.assertRaises(ValueError, compile, str('a = 1'), 'f', 'bad')
Guido van Rossumd8faa362007-04-27 19:54:29 +0000239
Walter Dörwald919497e2003-01-19 16:23:59 +0000240 def test_delattr(self):
241 import sys
242 sys.spam = 1
243 delattr(sys, 'spam')
244 self.assertRaises(TypeError, delattr)
245
246 def test_dir(self):
Georg Brandle32b4222007-03-10 22:13:27 +0000247 # dir(wrong number of arguments)
Walter Dörwald919497e2003-01-19 16:23:59 +0000248 self.assertRaises(TypeError, dir, 42, 42)
249
Georg Brandle32b4222007-03-10 22:13:27 +0000250 # dir() - local scope
251 local_var = 1
252 self.assert_('local_var' in dir())
253
254 # dir(module)
255 import sys
256 self.assert_('exit' in dir(sys))
257
258 # dir(module_with_invalid__dict__)
259 import types
260 class Foo(types.ModuleType):
261 __dict__ = 8
262 f = Foo("foo")
263 self.assertRaises(TypeError, dir, f)
264
265 # dir(type)
266 self.assert_("strip" in dir(str))
267 self.assert_("__mro__" not in dir(str))
268
269 # dir(obj)
270 class Foo(object):
271 def __init__(self):
272 self.x = 7
273 self.y = 8
274 self.z = 9
275 f = Foo()
276 self.assert_("y" in dir(f))
277
278 # dir(obj_no__dict__)
279 class Foo(object):
280 __slots__ = []
281 f = Foo()
282 self.assert_("__repr__" in dir(f))
283
284 # dir(obj_no__class__with__dict__)
285 # (an ugly trick to cause getattr(f, "__class__") to fail)
286 class Foo(object):
287 __slots__ = ["__class__", "__dict__"]
288 def __init__(self):
289 self.bar = "wow"
290 f = Foo()
291 self.assert_("__repr__" not in dir(f))
292 self.assert_("bar" in dir(f))
293
294 # dir(obj_using __dir__)
295 class Foo(object):
296 def __dir__(self):
297 return ["kan", "ga", "roo"]
298 f = Foo()
299 self.assert_(dir(f) == ["ga", "kan", "roo"])
300
301 # dir(obj__dir__not_list)
302 class Foo(object):
303 def __dir__(self):
304 return 7
305 f = Foo()
306 self.assertRaises(TypeError, dir, f)
307
Collin Winter3eed7652007-08-14 17:53:54 +0000308 # dir(traceback)
309 try:
310 raise IndexError
311 except:
312 self.assertEqual(len(dir(sys.exc_info()[2])), 4)
313
314
Walter Dörwald919497e2003-01-19 16:23:59 +0000315 def test_divmod(self):
316 self.assertEqual(divmod(12, 7), (1, 5))
317 self.assertEqual(divmod(-12, 7), (-2, 2))
318 self.assertEqual(divmod(12, -7), (-2, -2))
319 self.assertEqual(divmod(-12, -7), (1, -5))
320
Guido van Rossume2a383d2007-01-15 16:59:06 +0000321 self.assertEqual(divmod(12, 7), (1, 5))
322 self.assertEqual(divmod(-12, 7), (-2, 2))
323 self.assertEqual(divmod(12, -7), (-2, -2))
324 self.assertEqual(divmod(-12, -7), (1, -5))
Walter Dörwald919497e2003-01-19 16:23:59 +0000325
Guido van Rossume2a383d2007-01-15 16:59:06 +0000326 self.assertEqual(divmod(12, 7), (1, 5))
327 self.assertEqual(divmod(-12, 7), (-2, 2))
328 self.assertEqual(divmod(12, -7), (-2, -2))
329 self.assertEqual(divmod(-12, -7), (1, -5))
Walter Dörwald919497e2003-01-19 16:23:59 +0000330
Christian Heimesa37d4c62007-12-04 23:02:19 +0000331 self.assertEqual(divmod(-sys.maxsize-1, -1),
332 (sys.maxsize+1, 0))
Raymond Hettinger5ea7e312004-09-30 07:47:20 +0000333
Walter Dörwald919497e2003-01-19 16:23:59 +0000334 self.assert_(not fcmp(divmod(3.25, 1.0), (3.0, 0.25)))
335 self.assert_(not fcmp(divmod(-3.25, 1.0), (-4.0, 0.75)))
336 self.assert_(not fcmp(divmod(3.25, -1.0), (-4.0, -0.75)))
337 self.assert_(not fcmp(divmod(-3.25, -1.0), (3.0, -0.25)))
338
339 self.assertRaises(TypeError, divmod)
340
341 def test_eval(self):
342 self.assertEqual(eval('1+1'), 2)
343 self.assertEqual(eval(' 1+1\n'), 2)
344 globals = {'a': 1, 'b': 2}
345 locals = {'b': 200, 'c': 300}
346 self.assertEqual(eval('a', globals) , 1)
347 self.assertEqual(eval('a', globals, locals), 1)
348 self.assertEqual(eval('b', globals, locals), 200)
349 self.assertEqual(eval('c', globals, locals), 300)
Walter Dörwald919497e2003-01-19 16:23:59 +0000350 globals = {'a': 1, 'b': 2}
351 locals = {'b': 200, 'c': 300}
Amaury Forgeot d'Arcaf593462007-11-22 20:53:01 +0000352 bom = b'\xef\xbb\xbf'
353 self.assertEqual(eval(bom + b'a', globals, locals), 1)
Walter Dörwald1f5947b2007-05-22 16:52:54 +0000354 self.assertEqual(eval('"\xe5"', globals), "\xe5")
Walter Dörwald919497e2003-01-19 16:23:59 +0000355 self.assertRaises(TypeError, eval)
356 self.assertRaises(TypeError, eval, ())
Amaury Forgeot d'Arcaf593462007-11-22 20:53:01 +0000357 self.assertRaises(SyntaxError, eval, bom[:2] + b'a')
Walter Dörwald919497e2003-01-19 16:23:59 +0000358
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000359 def test_general_eval(self):
360 # Tests that general mappings can be used for the locals argument
361
362 class M:
363 "Test mapping interface versus possible calls from eval()."
364 def __getitem__(self, key):
365 if key == 'a':
366 return 12
367 raise KeyError
Guido van Rossumcd70eee2007-02-11 18:53:00 +0000368 def keys(self):
369 return list('xyz')
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000370
371 m = M()
372 g = globals()
373 self.assertEqual(eval('a', g, m), 12)
374 self.assertRaises(NameError, eval, 'b', g, m)
375 self.assertEqual(eval('dir()', g, m), list('xyz'))
376 self.assertEqual(eval('globals()', g, m), g)
377 self.assertEqual(eval('locals()', g, m), m)
Raymond Hettinger513ffe82004-07-06 13:44:41 +0000378 self.assertRaises(TypeError, eval, 'a', m)
Raymond Hettinger66bd2332004-08-02 08:30:07 +0000379 class A:
380 "Non-mapping"
381 pass
382 m = A()
383 self.assertRaises(TypeError, eval, 'a', g, m)
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000384
385 # Verify that dict subclasses work as well
386 class D(dict):
387 def __getitem__(self, key):
388 if key == 'a':
389 return 12
390 return dict.__getitem__(self, key)
Guido van Rossumcd70eee2007-02-11 18:53:00 +0000391 def keys(self):
392 return list('xyz')
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000393
394 d = D()
395 self.assertEqual(eval('a', g, d), 12)
396 self.assertRaises(NameError, eval, 'b', g, d)
397 self.assertEqual(eval('dir()', g, d), list('xyz'))
398 self.assertEqual(eval('globals()', g, d), g)
399 self.assertEqual(eval('locals()', g, d), d)
400
401 # Verify locals stores (used by list comps)
402 eval('[locals() for i in (2,3)]', g, d)
403 eval('[locals() for i in (2,3)]', g, UserDict.UserDict())
404
405 class SpreadSheet:
406 "Sample application showing nested, calculated lookups."
407 _cells = {}
408 def __setitem__(self, key, formula):
409 self._cells[key] = formula
Thomas Wouters73e5a5b2006-06-08 15:35:45 +0000410 def __getitem__(self, key):
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000411 return eval(self._cells[key], globals(), self)
412
413 ss = SpreadSheet()
414 ss['a1'] = '5'
415 ss['a2'] = 'a1*6'
416 ss['a3'] = 'a2*7'
417 self.assertEqual(ss['a3'], 210)
418
Raymond Hettinger2a7dede2004-08-07 04:55:30 +0000419 # Verify that dir() catches a non-list returned by eval
420 # SF bug #1004669
421 class C:
422 def __getitem__(self, item):
423 raise KeyError(item)
Guido van Rossumcd70eee2007-02-11 18:53:00 +0000424 def keys(self):
425 return 1 # used to be 'a' but that's no longer an error
Raymond Hettinger2a7dede2004-08-07 04:55:30 +0000426 self.assertRaises(TypeError, eval, 'dir()', globals(), C())
427
Georg Brandl7cae87c2006-09-06 06:51:57 +0000428 def test_exec(self):
429 g = {}
430 exec('z = 1', g)
431 if '__builtins__' in g:
432 del g['__builtins__']
433 self.assertEqual(g, {'z': 1})
434
Guido van Rossumef87d6e2007-05-02 19:09:54 +0000435 exec('z = 1+1', g)
Georg Brandl7cae87c2006-09-06 06:51:57 +0000436 if '__builtins__' in g:
437 del g['__builtins__']
438 self.assertEqual(g, {'z': 2})
439 g = {}
440 l = {}
441
442 import warnings
443 warnings.filterwarnings("ignore", "global statement", module="<string>")
444 exec('global a; a = 1; b = 2', g, l)
445 if '__builtins__' in g:
446 del g['__builtins__']
447 if '__builtins__' in l:
448 del l['__builtins__']
449 self.assertEqual((g, l), ({'a': 1}, {'b': 2}))
450
Walter Dörwald919497e2003-01-19 16:23:59 +0000451 def test_filter(self):
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000452 self.assertEqual(list(filter(lambda c: 'a' <= c <= 'z', 'Hello World')), list('elloorld'))
453 self.assertEqual(list(filter(None, [1, 'hello', [], [3], '', None, 9, 0])), [1, 'hello', [3], 9])
454 self.assertEqual(list(filter(lambda x: x > 0, [1, -3, 9, 0, 2])), [1, 9, 2])
455 self.assertEqual(list(filter(None, Squares(10))), [1, 4, 9, 16, 25, 36, 49, 64, 81])
456 self.assertEqual(list(filter(lambda x: x%2, Squares(10))), [1, 9, 25, 49, 81])
Walter Dörwald919497e2003-01-19 16:23:59 +0000457 def identity(item):
458 return 1
459 filter(identity, Squares(5))
460 self.assertRaises(TypeError, filter)
461 class BadSeq(object):
Tim Petersf2715e02003-02-19 02:35:07 +0000462 def __getitem__(self, index):
463 if index<4:
464 return 42
465 raise ValueError
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000466 self.assertRaises(ValueError, list, filter(lambda x: x, BadSeq()))
Walter Dörwald919497e2003-01-19 16:23:59 +0000467 def badfunc():
468 pass
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000469 self.assertRaises(TypeError, list, filter(badfunc, range(5)))
Walter Dörwald919497e2003-01-19 16:23:59 +0000470
Walter Dörwaldbf517072003-01-27 15:57:14 +0000471 # test bltinmodule.c::filtertuple()
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000472 self.assertEqual(list(filter(None, (1, 2))), [1, 2])
473 self.assertEqual(list(filter(lambda x: x>=3, (1, 2, 3, 4))), [3, 4])
474 self.assertRaises(TypeError, list, filter(42, (1, 2)))
Walter Dörwaldc3da83f2003-02-04 20:24:45 +0000475
Walter Dörwald919497e2003-01-19 16:23:59 +0000476 def test_float(self):
477 self.assertEqual(float(3.14), 3.14)
478 self.assertEqual(float(314), 314.0)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000479 self.assertEqual(float(314), 314.0)
Walter Dörwald919497e2003-01-19 16:23:59 +0000480 self.assertEqual(float(" 3.14 "), 3.14)
Neal Norwitze7214a12005-12-18 05:03:17 +0000481 self.assertRaises(ValueError, float, " 0x3.1 ")
482 self.assertRaises(ValueError, float, " -0x3.p-1 ")
Walter Dörwald1f5947b2007-05-22 16:52:54 +0000483 self.assertEqual(float(str(b" \u0663.\u0661\u0664 ",'raw-unicode-escape')), 3.14)
484 self.assertEqual(float("1"*10000), 1e10000) # Inf on both sides
Walter Dörwald919497e2003-01-19 16:23:59 +0000485
Thomas Wouters477c8d52006-05-27 19:21:47 +0000486 @run_with_locale('LC_NUMERIC', 'fr_FR', 'de_DE')
Neal Norwitz5898fa22005-11-22 05:17:40 +0000487 def test_float_with_comma(self):
488 # set locale to something that doesn't use '.' for the decimal point
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000489 # float must not accept the locale specific decimal point but
490 # it still has to accept the normal python syntac
Thomas Wouters477c8d52006-05-27 19:21:47 +0000491 import locale
492 if not locale.localeconv()['decimal_point'] == ',':
Neal Norwitz5898fa22005-11-22 05:17:40 +0000493 return
494
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000495 self.assertEqual(float(" 3.14 "), 3.14)
496 self.assertEqual(float("+3.14 "), 3.14)
497 self.assertEqual(float("-3.14 "), -3.14)
498 self.assertEqual(float(".14 "), .14)
499 self.assertEqual(float("3. "), 3.0)
500 self.assertEqual(float("3.e3 "), 3000.0)
501 self.assertEqual(float("3.2e3 "), 3200.0)
502 self.assertEqual(float("2.5e-1 "), 0.25)
503 self.assertEqual(float("5e-1"), 0.5)
504 self.assertRaises(ValueError, float, " 3,14 ")
505 self.assertRaises(ValueError, float, " +3,14 ")
506 self.assertRaises(ValueError, float, " -3,14 ")
Thomas Wouters477c8d52006-05-27 19:21:47 +0000507 self.assertRaises(ValueError, float, " 0x3.1 ")
508 self.assertRaises(ValueError, float, " -0x3.p-1 ")
509 self.assertEqual(float(" 25.e-1 "), 2.5)
510 self.assertEqual(fcmp(float(" .25e-1 "), .025), 0)
Neal Norwitz5898fa22005-11-22 05:17:40 +0000511
Brett Cannonc3647ac2005-04-26 03:45:26 +0000512 def test_floatconversion(self):
513 # Make sure that calls to __float__() work properly
514 class Foo0:
515 def __float__(self):
516 return 42.
517
518 class Foo1(object):
519 def __float__(self):
520 return 42.
521
522 class Foo2(float):
523 def __float__(self):
524 return 42.
525
526 class Foo3(float):
527 def __new__(cls, value=0.):
528 return float.__new__(cls, 2*value)
529
530 def __float__(self):
531 return self
532
533 class Foo4(float):
534 def __float__(self):
535 return 42
536
537 self.assertAlmostEqual(float(Foo0()), 42.)
538 self.assertAlmostEqual(float(Foo1()), 42.)
539 self.assertAlmostEqual(float(Foo2()), 42.)
540 self.assertAlmostEqual(float(Foo3(21)), 42.)
541 self.assertRaises(TypeError, float, Foo4(42))
542
Eric Smith8c663262007-08-25 02:26:07 +0000543 def test_format(self):
544 class A:
545 def __init__(self, x):
546 self.x = x
547 def __format__(self, format_spec):
548 return str(self.x) + format_spec
549
550 # class that returns a bad type from __format__
Eric Smith37f10382007-09-01 10:56:01 +0000551 class B:
Eric Smith8c663262007-08-25 02:26:07 +0000552 def __format__(self, format_spec):
553 return 1.0
554
Eric Smith37f10382007-09-01 10:56:01 +0000555 # class that is derived from string, used
556 # as a format spec
557 class C(str):
558 pass
559
Eric Smith8c663262007-08-25 02:26:07 +0000560 self.assertEqual(format(3, ''), '3')
561 self.assertEqual(format(A(3), 'spec'), '3spec')
562
Eric Smith81936692007-08-31 01:14:01 +0000563 def empty_format_spec(value):
564 # test that:
565 # format(x, '') == str(x)
566 # format(x) == str(x)
567 self.assertEqual(format(value, ""), str(value))
568 self.assertEqual(format(value), str(value))
569
Eric Smith8c663262007-08-25 02:26:07 +0000570 # for builtin types, format(x, "") == str(x)
Eric Smith81936692007-08-31 01:14:01 +0000571 empty_format_spec(17**13)
572 empty_format_spec(1.0)
573 empty_format_spec(3.1415e104)
574 empty_format_spec(-3.1415e104)
575 empty_format_spec(3.1415e-104)
576 empty_format_spec(-3.1415e-104)
577 empty_format_spec(object)
578 empty_format_spec(None)
Eric Smith8c663262007-08-25 02:26:07 +0000579
Eric Smith739e2ad2007-08-27 19:07:22 +0000580 # TypeError because self.__format__ returns the wrong type
Eric Smith37f10382007-09-01 10:56:01 +0000581 self.assertRaises(TypeError, format, B(), "")
582
Eric Smithfc6e8fe2008-01-11 00:17:22 +0000583 # TypeError because format_spec is not unicode
584 self.assertRaises(TypeError, format, object(), 4)
585 self.assertRaises(TypeError, format, object(), object())
586
Eric Smith61ecb772008-01-11 00:32:16 +0000587 # first argument to object.__format__ must be string
588 self.assertRaises(TypeError, object().__format__, 3)
589 self.assertRaises(TypeError, object().__format__, object())
590 self.assertRaises(TypeError, object().__format__, None)
591
Eric Smith37f10382007-09-01 10:56:01 +0000592 # make sure we can take a subclass of str as a format spec
593 self.assertEqual(format(0, C('10')), ' 0')
Eric Smith8c663262007-08-25 02:26:07 +0000594
Christian Heimes26855632008-01-27 23:50:43 +0000595 def test_floatasratio(self):
596 R = rational.Rational
597 self.assertEqual(R(0, 1),
598 R(*float(0.0).as_integer_ratio()))
599 self.assertEqual(R(5, 2),
600 R(*float(2.5).as_integer_ratio()))
601 self.assertEqual(R(1, 2),
602 R(*float(0.5).as_integer_ratio()))
603 self.assertEqual(R(4728779608739021, 2251799813685248),
604 R(*float(2.1).as_integer_ratio()))
605 self.assertEqual(R(-4728779608739021, 2251799813685248),
606 R(*float(-2.1).as_integer_ratio()))
607 self.assertEqual(R(-2100, 1),
608 R(*float(-2100.0).as_integer_ratio()))
609
610 self.assertRaises(OverflowError, float('inf').as_integer_ratio)
611 self.assertRaises(OverflowError, float('-inf').as_integer_ratio)
612 self.assertRaises(ValueError, float('nan').as_integer_ratio)
613
Walter Dörwald919497e2003-01-19 16:23:59 +0000614 def test_getattr(self):
615 import sys
616 self.assert_(getattr(sys, 'stdout') is sys.stdout)
617 self.assertRaises(TypeError, getattr, sys, 1)
618 self.assertRaises(TypeError, getattr, sys, 1, "foo")
619 self.assertRaises(TypeError, getattr)
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000620 self.assertRaises(AttributeError, getattr, sys, chr(sys.maxunicode))
Walter Dörwald919497e2003-01-19 16:23:59 +0000621
622 def test_hasattr(self):
623 import sys
624 self.assert_(hasattr(sys, 'stdout'))
625 self.assertRaises(TypeError, hasattr, sys, 1)
626 self.assertRaises(TypeError, hasattr)
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000627 self.assertEqual(False, hasattr(sys, chr(sys.maxunicode)))
Walter Dörwald919497e2003-01-19 16:23:59 +0000628
629 def test_hash(self):
630 hash(None)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000631 self.assertEqual(hash(1), hash(1))
Walter Dörwald919497e2003-01-19 16:23:59 +0000632 self.assertEqual(hash(1), hash(1.0))
633 hash('spam')
Guido van Rossum98297ee2007-11-06 21:34:58 +0000634 self.assertEqual(hash('spam'), hash(b'spam'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000635 hash((0,1,2,3))
636 def f(): pass
637 self.assertRaises(TypeError, hash, [])
638 self.assertRaises(TypeError, hash, {})
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000639 # Bug 1536021: Allow hash to return long objects
640 class X:
641 def __hash__(self):
642 return 2**100
643 self.assertEquals(type(hash(X())), int)
644 class Y(object):
645 def __hash__(self):
646 return 2**100
647 self.assertEquals(type(hash(Y())), int)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000648 class Z(int):
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000649 def __hash__(self):
650 return self
Guido van Rossume2a383d2007-01-15 16:59:06 +0000651 self.assertEquals(hash(Z(42)), hash(42))
Walter Dörwald919497e2003-01-19 16:23:59 +0000652
653 def test_hex(self):
654 self.assertEqual(hex(16), '0x10')
Guido van Rossume2a383d2007-01-15 16:59:06 +0000655 self.assertEqual(hex(16), '0x10')
Guido van Rossum6c9e1302003-11-29 23:52:13 +0000656 self.assertEqual(hex(-16), '-0x10')
Guido van Rossume2a383d2007-01-15 16:59:06 +0000657 self.assertEqual(hex(-16), '-0x10')
Walter Dörwald919497e2003-01-19 16:23:59 +0000658 self.assertRaises(TypeError, hex, {})
659
660 def test_id(self):
661 id(None)
662 id(1)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000663 id(1)
Walter Dörwald919497e2003-01-19 16:23:59 +0000664 id(1.0)
665 id('spam')
666 id((0,1,2,3))
667 id([0,1,2,3])
668 id({'spam': 1, 'eggs': 2, 'ham': 3})
669
Guido van Rossuma88a0332007-02-26 16:59:55 +0000670 # Test input() later, alphabetized as if it were raw_input
671
Walter Dörwald919497e2003-01-19 16:23:59 +0000672 def test_int(self):
673 self.assertEqual(int(314), 314)
674 self.assertEqual(int(3.14), 3)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000675 self.assertEqual(int(314), 314)
Walter Dörwald919497e2003-01-19 16:23:59 +0000676 # Check that conversion from float truncates towards zero
677 self.assertEqual(int(-3.14), -3)
678 self.assertEqual(int(3.9), 3)
679 self.assertEqual(int(-3.9), -3)
680 self.assertEqual(int(3.5), 3)
681 self.assertEqual(int(-3.5), -3)
682 # Different base:
Guido van Rossume2a383d2007-01-15 16:59:06 +0000683 self.assertEqual(int("10",16), 16)
Walter Dörwald919497e2003-01-19 16:23:59 +0000684 # Test conversion from strings and various anomalies
Facundo Batista2336bdd2008-01-19 19:12:01 +0000685 # Testing with no sign at front
686 for s, v in test_conv_no_sign:
687 for prefix in "", " ", "\t", " \t\t ":
688 ss = prefix + s
689 vv = v
690 try:
691 self.assertEqual(int(ss), vv)
692 except v:
693 pass
694 # No whitespaces allowed between + or - sign and the number
695 for s, v in test_conv_sign:
696 for sign in "+", "-":
Walter Dörwald919497e2003-01-19 16:23:59 +0000697 for prefix in "", " ", "\t", " \t\t ":
698 ss = prefix + sign + s
699 vv = v
700 if sign == "-" and v is not ValueError:
701 vv = -v
702 try:
703 self.assertEqual(int(ss), vv)
704 except v:
705 pass
706
Christian Heimesa37d4c62007-12-04 23:02:19 +0000707 s = repr(-1-sys.maxsize)
Thomas Wouters89f507f2006-12-13 04:49:30 +0000708 x = int(s)
Christian Heimesa37d4c62007-12-04 23:02:19 +0000709 self.assertEqual(x+1, -sys.maxsize)
Thomas Wouters89f507f2006-12-13 04:49:30 +0000710 self.assert_(isinstance(x, int))
Walter Dörwald919497e2003-01-19 16:23:59 +0000711 # should return long
Christian Heimesa37d4c62007-12-04 23:02:19 +0000712 self.assertEqual(int(s[1:]), sys.maxsize+1)
Walter Dörwald919497e2003-01-19 16:23:59 +0000713
714 # should return long
715 x = int(1e100)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000716 self.assert_(isinstance(x, int))
Walter Dörwald919497e2003-01-19 16:23:59 +0000717 x = int(-1e100)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000718 self.assert_(isinstance(x, int))
Walter Dörwald919497e2003-01-19 16:23:59 +0000719
720
721 # SF bug 434186: 0x80000000/2 != 0x80000000>>1.
722 # Worked by accident in Windows release build, but failed in debug build.
723 # Failed in all Linux builds.
Christian Heimesa37d4c62007-12-04 23:02:19 +0000724 x = -1-sys.maxsize
Walter Dörwald919497e2003-01-19 16:23:59 +0000725 self.assertEqual(x >> 1, x//2)
726
727 self.assertRaises(ValueError, int, '123\0')
728 self.assertRaises(ValueError, int, '53', 40)
729
Thomas Wouters89f507f2006-12-13 04:49:30 +0000730 # SF bug 1545497: embedded NULs were not detected with
731 # explicit base
732 self.assertRaises(ValueError, int, '123\0', 10)
733 self.assertRaises(ValueError, int, '123\x00 245', 20)
734
Walter Dörwald919497e2003-01-19 16:23:59 +0000735 x = int('1' * 600)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000736 self.assert_(isinstance(x, int))
Walter Dörwald919497e2003-01-19 16:23:59 +0000737
Walter Dörwald1f5947b2007-05-22 16:52:54 +0000738 x = int(chr(0x661) * 600)
739 self.assert_(isinstance(x, int))
Walter Dörwald919497e2003-01-19 16:23:59 +0000740
741 self.assertRaises(TypeError, int, 1, 12)
742
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000743 # tests with base 0
744 self.assertRaises(ValueError, int, ' 0123 ', 0) # old octal syntax
745 self.assertEqual(int('000', 0), 0)
746 self.assertEqual(int('0o123', 0), 83)
747 self.assertEqual(int('0x123', 0), 291)
748 self.assertEqual(int('0b100', 0), 4)
749 self.assertEqual(int(' 0O123 ', 0), 83)
750 self.assertEqual(int(' 0X123 ', 0), 291)
751 self.assertEqual(int(' 0B100 ', 0), 4)
752
753 # without base still base 10
754 self.assertEqual(int('0123'), 123)
755 self.assertEqual(int('0123', 10), 123)
756
757 # tests with prefix and base != 0
Neal Norwitz5898fa22005-11-22 05:17:40 +0000758 self.assertEqual(int('0x123', 16), 291)
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000759 self.assertEqual(int('0o123', 8), 83)
760 self.assertEqual(int('0b100', 2), 4)
761 self.assertEqual(int('0X123', 16), 291)
762 self.assertEqual(int('0O123', 8), 83)
763 self.assertEqual(int('0B100', 2), 4)
Walter Dörwald919497e2003-01-19 16:23:59 +0000764
Georg Brandlfceab5a2008-01-19 20:08:23 +0000765 # Bug 1679: "0x" is not a valid hex literal
766 self.assertRaises(ValueError, int, "0x", 16)
767 self.assertRaises(ValueError, int, "0x", 0)
768
769
Thomas Wouters477c8d52006-05-27 19:21:47 +0000770 # SF bug 1334662: int(string, base) wrong answers
771 # Various representations of 2**32 evaluated to 0
772 # rather than 2**32 in previous versions
773
Guido van Rossume2a383d2007-01-15 16:59:06 +0000774 self.assertEqual(int('100000000000000000000000000000000', 2), 4294967296)
775 self.assertEqual(int('102002022201221111211', 3), 4294967296)
776 self.assertEqual(int('10000000000000000', 4), 4294967296)
777 self.assertEqual(int('32244002423141', 5), 4294967296)
778 self.assertEqual(int('1550104015504', 6), 4294967296)
779 self.assertEqual(int('211301422354', 7), 4294967296)
780 self.assertEqual(int('40000000000', 8), 4294967296)
781 self.assertEqual(int('12068657454', 9), 4294967296)
782 self.assertEqual(int('4294967296', 10), 4294967296)
783 self.assertEqual(int('1904440554', 11), 4294967296)
784 self.assertEqual(int('9ba461594', 12), 4294967296)
785 self.assertEqual(int('535a79889', 13), 4294967296)
786 self.assertEqual(int('2ca5b7464', 14), 4294967296)
787 self.assertEqual(int('1a20dcd81', 15), 4294967296)
788 self.assertEqual(int('100000000', 16), 4294967296)
789 self.assertEqual(int('a7ffda91', 17), 4294967296)
790 self.assertEqual(int('704he7g4', 18), 4294967296)
791 self.assertEqual(int('4f5aff66', 19), 4294967296)
792 self.assertEqual(int('3723ai4g', 20), 4294967296)
793 self.assertEqual(int('281d55i4', 21), 4294967296)
794 self.assertEqual(int('1fj8b184', 22), 4294967296)
795 self.assertEqual(int('1606k7ic', 23), 4294967296)
796 self.assertEqual(int('mb994ag', 24), 4294967296)
797 self.assertEqual(int('hek2mgl', 25), 4294967296)
798 self.assertEqual(int('dnchbnm', 26), 4294967296)
799 self.assertEqual(int('b28jpdm', 27), 4294967296)
800 self.assertEqual(int('8pfgih4', 28), 4294967296)
801 self.assertEqual(int('76beigg', 29), 4294967296)
802 self.assertEqual(int('5qmcpqg', 30), 4294967296)
803 self.assertEqual(int('4q0jto4', 31), 4294967296)
804 self.assertEqual(int('4000000', 32), 4294967296)
805 self.assertEqual(int('3aokq94', 33), 4294967296)
806 self.assertEqual(int('2qhxjli', 34), 4294967296)
807 self.assertEqual(int('2br45qb', 35), 4294967296)
808 self.assertEqual(int('1z141z4', 36), 4294967296)
Thomas Wouters477c8d52006-05-27 19:21:47 +0000809
810 # SF bug 1334662: int(string, base) wrong answers
811 # Checks for proper evaluation of 2**32 + 1
Guido van Rossume2a383d2007-01-15 16:59:06 +0000812 self.assertEqual(int('100000000000000000000000000000001', 2), 4294967297)
813 self.assertEqual(int('102002022201221111212', 3), 4294967297)
814 self.assertEqual(int('10000000000000001', 4), 4294967297)
815 self.assertEqual(int('32244002423142', 5), 4294967297)
816 self.assertEqual(int('1550104015505', 6), 4294967297)
817 self.assertEqual(int('211301422355', 7), 4294967297)
818 self.assertEqual(int('40000000001', 8), 4294967297)
819 self.assertEqual(int('12068657455', 9), 4294967297)
820 self.assertEqual(int('4294967297', 10), 4294967297)
821 self.assertEqual(int('1904440555', 11), 4294967297)
822 self.assertEqual(int('9ba461595', 12), 4294967297)
823 self.assertEqual(int('535a7988a', 13), 4294967297)
824 self.assertEqual(int('2ca5b7465', 14), 4294967297)
825 self.assertEqual(int('1a20dcd82', 15), 4294967297)
826 self.assertEqual(int('100000001', 16), 4294967297)
827 self.assertEqual(int('a7ffda92', 17), 4294967297)
828 self.assertEqual(int('704he7g5', 18), 4294967297)
829 self.assertEqual(int('4f5aff67', 19), 4294967297)
830 self.assertEqual(int('3723ai4h', 20), 4294967297)
831 self.assertEqual(int('281d55i5', 21), 4294967297)
832 self.assertEqual(int('1fj8b185', 22), 4294967297)
833 self.assertEqual(int('1606k7id', 23), 4294967297)
834 self.assertEqual(int('mb994ah', 24), 4294967297)
835 self.assertEqual(int('hek2mgm', 25), 4294967297)
836 self.assertEqual(int('dnchbnn', 26), 4294967297)
837 self.assertEqual(int('b28jpdn', 27), 4294967297)
838 self.assertEqual(int('8pfgih5', 28), 4294967297)
839 self.assertEqual(int('76beigh', 29), 4294967297)
840 self.assertEqual(int('5qmcpqh', 30), 4294967297)
841 self.assertEqual(int('4q0jto5', 31), 4294967297)
842 self.assertEqual(int('4000001', 32), 4294967297)
843 self.assertEqual(int('3aokq95', 33), 4294967297)
844 self.assertEqual(int('2qhxjlj', 34), 4294967297)
845 self.assertEqual(int('2br45qc', 35), 4294967297)
846 self.assertEqual(int('1z141z5', 36), 4294967297)
Thomas Wouters477c8d52006-05-27 19:21:47 +0000847
Brett Cannonc3647ac2005-04-26 03:45:26 +0000848 def test_intconversion(self):
849 # Test __int__()
850 class Foo0:
851 def __int__(self):
852 return 42
853
854 class Foo1(object):
855 def __int__(self):
856 return 42
857
858 class Foo2(int):
859 def __int__(self):
860 return 42
861
862 class Foo3(int):
863 def __int__(self):
864 return self
865
866 class Foo4(int):
867 def __int__(self):
Guido van Rossume2a383d2007-01-15 16:59:06 +0000868 return 42
Brett Cannonc3647ac2005-04-26 03:45:26 +0000869
870 class Foo5(int):
871 def __int__(self):
872 return 42.
873
874 self.assertEqual(int(Foo0()), 42)
875 self.assertEqual(int(Foo1()), 42)
876 self.assertEqual(int(Foo2()), 42)
877 self.assertEqual(int(Foo3()), 0)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000878 self.assertEqual(int(Foo4()), 42)
Brett Cannonc3647ac2005-04-26 03:45:26 +0000879 self.assertRaises(TypeError, int, Foo5())
880
Walter Dörwald919497e2003-01-19 16:23:59 +0000881 def test_iter(self):
882 self.assertRaises(TypeError, iter)
883 self.assertRaises(TypeError, iter, 42, 42)
884 lists = [("1", "2"), ["1", "2"], "12"]
Walter Dörwald919497e2003-01-19 16:23:59 +0000885 for l in lists:
886 i = iter(l)
Georg Brandla18af4e2007-04-21 15:47:16 +0000887 self.assertEqual(next(i), '1')
888 self.assertEqual(next(i), '2')
889 self.assertRaises(StopIteration, next, i)
Walter Dörwald919497e2003-01-19 16:23:59 +0000890
891 def test_isinstance(self):
892 class C:
893 pass
894 class D(C):
895 pass
896 class E:
897 pass
898 c = C()
899 d = D()
900 e = E()
901 self.assert_(isinstance(c, C))
902 self.assert_(isinstance(d, C))
903 self.assert_(not isinstance(e, C))
904 self.assert_(not isinstance(c, D))
905 self.assert_(not isinstance('foo', E))
906 self.assertRaises(TypeError, isinstance, E, 'foo')
907 self.assertRaises(TypeError, isinstance)
908
909 def test_issubclass(self):
910 class C:
911 pass
912 class D(C):
913 pass
914 class E:
915 pass
916 c = C()
917 d = D()
918 e = E()
919 self.assert_(issubclass(D, C))
920 self.assert_(issubclass(C, C))
921 self.assert_(not issubclass(C, D))
922 self.assertRaises(TypeError, issubclass, 'foo', E)
923 self.assertRaises(TypeError, issubclass, E, 'foo')
924 self.assertRaises(TypeError, issubclass)
925
926 def test_len(self):
927 self.assertEqual(len('123'), 3)
928 self.assertEqual(len(()), 0)
929 self.assertEqual(len((1, 2, 3, 4)), 4)
930 self.assertEqual(len([1, 2, 3, 4]), 4)
931 self.assertEqual(len({}), 0)
932 self.assertEqual(len({'a':1, 'b': 2}), 2)
933 class BadSeq:
934 def __len__(self):
935 raise ValueError
936 self.assertRaises(ValueError, len, BadSeq())
937
938 def test_list(self):
939 self.assertEqual(list([]), [])
940 l0_3 = [0, 1, 2, 3]
941 l0_3_bis = list(l0_3)
942 self.assertEqual(l0_3, l0_3_bis)
943 self.assert_(l0_3 is not l0_3_bis)
944 self.assertEqual(list(()), [])
945 self.assertEqual(list((0, 1, 2, 3)), [0, 1, 2, 3])
946 self.assertEqual(list(''), [])
947 self.assertEqual(list('spam'), ['s', 'p', 'a', 'm'])
948
Christian Heimesa37d4c62007-12-04 23:02:19 +0000949 if sys.maxsize == 0x7fffffff:
Walter Dörwald919497e2003-01-19 16:23:59 +0000950 # This test can currently only work on 32-bit machines.
951 # XXX If/when PySequence_Length() returns a ssize_t, it should be
952 # XXX re-enabled.
953 # Verify clearing of bug #556025.
Christian Heimesa37d4c62007-12-04 23:02:19 +0000954 # This assumes that the max data size (sys.maxsize) == max
Walter Dörwald919497e2003-01-19 16:23:59 +0000955 # address size this also assumes that the address size is at
956 # least 4 bytes with 8 byte addresses, the bug is not well
957 # tested
958 #
959 # Note: This test is expected to SEGV under Cygwin 1.3.12 or
960 # earlier due to a newlib bug. See the following mailing list
961 # thread for the details:
962
963 # http://sources.redhat.com/ml/newlib/2002/msg00369.html
Christian Heimesa37d4c62007-12-04 23:02:19 +0000964 self.assertRaises(MemoryError, list, range(sys.maxsize // 2))
Walter Dörwald919497e2003-01-19 16:23:59 +0000965
Raymond Hettingeraa241e02004-09-26 19:24:20 +0000966 # This code used to segfault in Py2.4a3
967 x = []
968 x.extend(-y for y in x)
969 self.assertEqual(x, [])
970
Walter Dörwald919497e2003-01-19 16:23:59 +0000971 def test_long(self):
Guido van Rossume2a383d2007-01-15 16:59:06 +0000972 self.assertEqual(int(314), 314)
973 self.assertEqual(int(3.14), 3)
974 self.assertEqual(int(314), 314)
Walter Dörwald919497e2003-01-19 16:23:59 +0000975 # Check that conversion from float truncates towards zero
Guido van Rossume2a383d2007-01-15 16:59:06 +0000976 self.assertEqual(int(-3.14), -3)
977 self.assertEqual(int(3.9), 3)
978 self.assertEqual(int(-3.9), -3)
979 self.assertEqual(int(3.5), 3)
980 self.assertEqual(int(-3.5), -3)
981 self.assertEqual(int("-3"), -3)
Walter Dörwald919497e2003-01-19 16:23:59 +0000982 # Different base:
Guido van Rossume2a383d2007-01-15 16:59:06 +0000983 self.assertEqual(int("10",16), 16)
Walter Dörwald919497e2003-01-19 16:23:59 +0000984 # Check conversions from string (same test set as for int(), and then some)
985 LL = [
Guido van Rossume2a383d2007-01-15 16:59:06 +0000986 ('1' + '0'*20, 10**20),
987 ('1' + '0'*100, 10**100)
Walter Dörwald919497e2003-01-19 16:23:59 +0000988 ]
Walter Dörwald1f5947b2007-05-22 16:52:54 +0000989 for s, v in LL:
Walter Dörwald919497e2003-01-19 16:23:59 +0000990 for sign in "", "+", "-":
991 for prefix in "", " ", "\t", " \t\t ":
992 ss = prefix + sign + s
993 vv = v
994 if sign == "-" and v is not ValueError:
995 vv = -v
996 try:
Guido van Rossume2a383d2007-01-15 16:59:06 +0000997 self.assertEqual(int(ss), int(vv))
Walter Dörwald919497e2003-01-19 16:23:59 +0000998 except v:
999 pass
1000
Guido van Rossume2a383d2007-01-15 16:59:06 +00001001 self.assertRaises(ValueError, int, '123\0')
1002 self.assertRaises(ValueError, int, '53', 40)
1003 self.assertRaises(TypeError, int, 1, 12)
Walter Dörwald919497e2003-01-19 16:23:59 +00001004
Guido van Rossumd8faa362007-04-27 19:54:29 +00001005 # SF patch #1638879: embedded NULs were not detected with
1006 # explicit base
1007 self.assertRaises(ValueError, int, '123\0', 10)
1008 self.assertRaises(ValueError, int, '123\x00 245', 20)
1009
Guido van Rossume2a383d2007-01-15 16:59:06 +00001010 self.assertEqual(int('100000000000000000000000000000000', 2),
Thomas Wouters477c8d52006-05-27 19:21:47 +00001011 4294967296)
Guido van Rossume2a383d2007-01-15 16:59:06 +00001012 self.assertEqual(int('102002022201221111211', 3), 4294967296)
1013 self.assertEqual(int('10000000000000000', 4), 4294967296)
1014 self.assertEqual(int('32244002423141', 5), 4294967296)
1015 self.assertEqual(int('1550104015504', 6), 4294967296)
1016 self.assertEqual(int('211301422354', 7), 4294967296)
1017 self.assertEqual(int('40000000000', 8), 4294967296)
1018 self.assertEqual(int('12068657454', 9), 4294967296)
1019 self.assertEqual(int('4294967296', 10), 4294967296)
1020 self.assertEqual(int('1904440554', 11), 4294967296)
1021 self.assertEqual(int('9ba461594', 12), 4294967296)
1022 self.assertEqual(int('535a79889', 13), 4294967296)
1023 self.assertEqual(int('2ca5b7464', 14), 4294967296)
1024 self.assertEqual(int('1a20dcd81', 15), 4294967296)
1025 self.assertEqual(int('100000000', 16), 4294967296)
1026 self.assertEqual(int('a7ffda91', 17), 4294967296)
1027 self.assertEqual(int('704he7g4', 18), 4294967296)
1028 self.assertEqual(int('4f5aff66', 19), 4294967296)
1029 self.assertEqual(int('3723ai4g', 20), 4294967296)
1030 self.assertEqual(int('281d55i4', 21), 4294967296)
1031 self.assertEqual(int('1fj8b184', 22), 4294967296)
1032 self.assertEqual(int('1606k7ic', 23), 4294967296)
1033 self.assertEqual(int('mb994ag', 24), 4294967296)
1034 self.assertEqual(int('hek2mgl', 25), 4294967296)
1035 self.assertEqual(int('dnchbnm', 26), 4294967296)
1036 self.assertEqual(int('b28jpdm', 27), 4294967296)
1037 self.assertEqual(int('8pfgih4', 28), 4294967296)
1038 self.assertEqual(int('76beigg', 29), 4294967296)
1039 self.assertEqual(int('5qmcpqg', 30), 4294967296)
1040 self.assertEqual(int('4q0jto4', 31), 4294967296)
1041 self.assertEqual(int('4000000', 32), 4294967296)
1042 self.assertEqual(int('3aokq94', 33), 4294967296)
1043 self.assertEqual(int('2qhxjli', 34), 4294967296)
1044 self.assertEqual(int('2br45qb', 35), 4294967296)
1045 self.assertEqual(int('1z141z4', 36), 4294967296)
Thomas Wouters477c8d52006-05-27 19:21:47 +00001046
Guido van Rossume2a383d2007-01-15 16:59:06 +00001047 self.assertEqual(int('100000000000000000000000000000001', 2),
Thomas Wouters477c8d52006-05-27 19:21:47 +00001048 4294967297)
Guido van Rossume2a383d2007-01-15 16:59:06 +00001049 self.assertEqual(int('102002022201221111212', 3), 4294967297)
1050 self.assertEqual(int('10000000000000001', 4), 4294967297)
1051 self.assertEqual(int('32244002423142', 5), 4294967297)
1052 self.assertEqual(int('1550104015505', 6), 4294967297)
1053 self.assertEqual(int('211301422355', 7), 4294967297)
1054 self.assertEqual(int('40000000001', 8), 4294967297)
1055 self.assertEqual(int('12068657455', 9), 4294967297)
1056 self.assertEqual(int('4294967297', 10), 4294967297)
1057 self.assertEqual(int('1904440555', 11), 4294967297)
1058 self.assertEqual(int('9ba461595', 12), 4294967297)
1059 self.assertEqual(int('535a7988a', 13), 4294967297)
1060 self.assertEqual(int('2ca5b7465', 14), 4294967297)
1061 self.assertEqual(int('1a20dcd82', 15), 4294967297)
1062 self.assertEqual(int('100000001', 16), 4294967297)
1063 self.assertEqual(int('a7ffda92', 17), 4294967297)
1064 self.assertEqual(int('704he7g5', 18), 4294967297)
1065 self.assertEqual(int('4f5aff67', 19), 4294967297)
1066 self.assertEqual(int('3723ai4h', 20), 4294967297)
1067 self.assertEqual(int('281d55i5', 21), 4294967297)
1068 self.assertEqual(int('1fj8b185', 22), 4294967297)
1069 self.assertEqual(int('1606k7id', 23), 4294967297)
1070 self.assertEqual(int('mb994ah', 24), 4294967297)
1071 self.assertEqual(int('hek2mgm', 25), 4294967297)
1072 self.assertEqual(int('dnchbnn', 26), 4294967297)
1073 self.assertEqual(int('b28jpdn', 27), 4294967297)
1074 self.assertEqual(int('8pfgih5', 28), 4294967297)
1075 self.assertEqual(int('76beigh', 29), 4294967297)
1076 self.assertEqual(int('5qmcpqh', 30), 4294967297)
1077 self.assertEqual(int('4q0jto5', 31), 4294967297)
1078 self.assertEqual(int('4000001', 32), 4294967297)
1079 self.assertEqual(int('3aokq95', 33), 4294967297)
1080 self.assertEqual(int('2qhxjlj', 34), 4294967297)
1081 self.assertEqual(int('2br45qc', 35), 4294967297)
1082 self.assertEqual(int('1z141z5', 36), 4294967297)
Thomas Wouters477c8d52006-05-27 19:21:47 +00001083
1084
Brett Cannonc3647ac2005-04-26 03:45:26 +00001085 def test_longconversion(self):
1086 # Test __long__()
1087 class Foo0:
1088 def __long__(self):
Guido van Rossume2a383d2007-01-15 16:59:06 +00001089 return 42
Brett Cannonc3647ac2005-04-26 03:45:26 +00001090
1091 class Foo1(object):
1092 def __long__(self):
Guido van Rossume2a383d2007-01-15 16:59:06 +00001093 return 42
Brett Cannonc3647ac2005-04-26 03:45:26 +00001094
Guido van Rossume2a383d2007-01-15 16:59:06 +00001095 class Foo2(int):
Brett Cannonc3647ac2005-04-26 03:45:26 +00001096 def __long__(self):
1097 return 42
1098
Guido van Rossume2a383d2007-01-15 16:59:06 +00001099 class Foo3(int):
1100 def __long__(self):
1101 return self
1102
1103 class Foo4(int):
1104 def __long__(self):
1105 return 42
1106
1107 class Foo5(int):
Brett Cannonc3647ac2005-04-26 03:45:26 +00001108 def __long__(self):
1109 return 42.
1110
Guido van Rossume2a383d2007-01-15 16:59:06 +00001111 self.assertEqual(int(Foo0()), 42)
1112 self.assertEqual(int(Foo1()), 42)
Guido van Rossumd8faa362007-04-27 19:54:29 +00001113 # XXX invokes __int__ now
Guido van Rossumddefaf32007-01-14 03:31:43 +00001114 # self.assertEqual(long(Foo2()), 42L)
Guido van Rossume2a383d2007-01-15 16:59:06 +00001115 self.assertEqual(int(Foo3()), 0)
Guido van Rossumd8faa362007-04-27 19:54:29 +00001116 # XXX likewise
Guido van Rossumddefaf32007-01-14 03:31:43 +00001117 # self.assertEqual(long(Foo4()), 42)
1118 # self.assertRaises(TypeError, long, Foo5())
Brett Cannonc3647ac2005-04-26 03:45:26 +00001119
Walter Dörwald919497e2003-01-19 16:23:59 +00001120 def test_map(self):
1121 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001122 list(map(lambda x: x*x, range(1,4))),
Walter Dörwald919497e2003-01-19 16:23:59 +00001123 [1, 4, 9]
1124 )
1125 try:
1126 from math import sqrt
1127 except ImportError:
1128 def sqrt(x):
1129 return pow(x, 0.5)
1130 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001131 list(map(lambda x: list(map(sqrt, x)), [[16, 4], [81, 9]])),
Walter Dörwald919497e2003-01-19 16:23:59 +00001132 [[4.0, 2.0], [9.0, 3.0]]
1133 )
1134 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001135 list(map(lambda x, y: x+y, [1,3,2], [9,1,4])),
Walter Dörwald919497e2003-01-19 16:23:59 +00001136 [10, 4, 6]
1137 )
1138
1139 def plus(*v):
1140 accu = 0
1141 for i in v: accu = accu + i
1142 return accu
1143 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001144 list(map(plus, [1, 3, 7])),
Walter Dörwald919497e2003-01-19 16:23:59 +00001145 [1, 3, 7]
1146 )
1147 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001148 list(map(plus, [1, 3, 7], [4, 9, 2])),
Walter Dörwald919497e2003-01-19 16:23:59 +00001149 [1+4, 3+9, 7+2]
1150 )
1151 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001152 list(map(plus, [1, 3, 7], [4, 9, 2], [1, 1, 0])),
Walter Dörwald919497e2003-01-19 16:23:59 +00001153 [1+4+1, 3+9+1, 7+2+0]
1154 )
1155 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001156 list(map(int, Squares(10))),
Walter Dörwald919497e2003-01-19 16:23:59 +00001157 [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
1158 )
Guido van Rossum47b9ff62006-08-24 00:41:19 +00001159 def Max(a, b):
1160 if a is None:
1161 return b
1162 if b is None:
1163 return a
1164 return max(a, b)
Walter Dörwald919497e2003-01-19 16:23:59 +00001165 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001166 list(map(Max, Squares(3), Squares(2))),
1167 [0, 1]
Walter Dörwald919497e2003-01-19 16:23:59 +00001168 )
1169 self.assertRaises(TypeError, map)
1170 self.assertRaises(TypeError, map, lambda x: x, 42)
Walter Dörwald919497e2003-01-19 16:23:59 +00001171 class BadSeq:
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001172 def __iter__(self):
Walter Dörwald919497e2003-01-19 16:23:59 +00001173 raise ValueError
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001174 yield None
1175 self.assertRaises(ValueError, list, map(lambda x: x, BadSeq()))
Neal Norwitzfcf44352005-11-27 20:37:43 +00001176 def badfunc(x):
1177 raise RuntimeError
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001178 self.assertRaises(RuntimeError, list, map(badfunc, range(5)))
Walter Dörwald919497e2003-01-19 16:23:59 +00001179
1180 def test_max(self):
1181 self.assertEqual(max('123123'), '3')
1182 self.assertEqual(max(1, 2, 3), 3)
1183 self.assertEqual(max((1, 2, 3, 1, 2, 3)), 3)
1184 self.assertEqual(max([1, 2, 3, 1, 2, 3]), 3)
1185
Guido van Rossume2a383d2007-01-15 16:59:06 +00001186 self.assertEqual(max(1, 2, 3.0), 3.0)
1187 self.assertEqual(max(1, 2.0, 3), 3)
1188 self.assertEqual(max(1.0, 2, 3), 3)
Walter Dörwald919497e2003-01-19 16:23:59 +00001189
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001190 for stmt in (
1191 "max(key=int)", # no args
1192 "max(1, key=int)", # single arg not iterable
1193 "max(1, 2, keystone=int)", # wrong keyword
1194 "max(1, 2, key=int, abc=int)", # two many keywords
1195 "max(1, 2, key=1)", # keyfunc is not callable
1196 ):
Tim Peters7f061872004-12-07 21:17:46 +00001197 try:
Georg Brandl7cae87c2006-09-06 06:51:57 +00001198 exec(stmt, globals())
Tim Peters7f061872004-12-07 21:17:46 +00001199 except TypeError:
1200 pass
1201 else:
1202 self.fail(stmt)
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001203
1204 self.assertEqual(max((1,), key=neg), 1) # one elem iterable
1205 self.assertEqual(max((1,2), key=neg), 1) # two elem iterable
1206 self.assertEqual(max(1, 2, key=neg), 1) # two elems
1207
1208 data = [random.randrange(200) for i in range(100)]
1209 keys = dict((elem, random.randrange(50)) for elem in data)
1210 f = keys.__getitem__
1211 self.assertEqual(max(data, key=f),
1212 sorted(reversed(data), key=f)[-1])
1213
Walter Dörwald919497e2003-01-19 16:23:59 +00001214 def test_min(self):
1215 self.assertEqual(min('123123'), '1')
1216 self.assertEqual(min(1, 2, 3), 1)
1217 self.assertEqual(min((1, 2, 3, 1, 2, 3)), 1)
1218 self.assertEqual(min([1, 2, 3, 1, 2, 3]), 1)
1219
Guido van Rossume2a383d2007-01-15 16:59:06 +00001220 self.assertEqual(min(1, 2, 3.0), 1)
1221 self.assertEqual(min(1, 2.0, 3), 1)
1222 self.assertEqual(min(1.0, 2, 3), 1.0)
Walter Dörwald919497e2003-01-19 16:23:59 +00001223
1224 self.assertRaises(TypeError, min)
1225 self.assertRaises(TypeError, min, 42)
1226 self.assertRaises(ValueError, min, ())
1227 class BadSeq:
1228 def __getitem__(self, index):
1229 raise ValueError
1230 self.assertRaises(ValueError, min, BadSeq())
1231 class BadNumber:
1232 def __cmp__(self, other):
1233 raise ValueError
Guido van Rossum47b9ff62006-08-24 00:41:19 +00001234 self.assertRaises(TypeError, min, (42, BadNumber()))
Walter Dörwald919497e2003-01-19 16:23:59 +00001235
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001236 for stmt in (
1237 "min(key=int)", # no args
1238 "min(1, key=int)", # single arg not iterable
1239 "min(1, 2, keystone=int)", # wrong keyword
1240 "min(1, 2, key=int, abc=int)", # two many keywords
1241 "min(1, 2, key=1)", # keyfunc is not callable
1242 ):
Tim Peters7f061872004-12-07 21:17:46 +00001243 try:
Georg Brandl7cae87c2006-09-06 06:51:57 +00001244 exec(stmt, globals())
Tim Peters7f061872004-12-07 21:17:46 +00001245 except TypeError:
1246 pass
1247 else:
1248 self.fail(stmt)
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001249
1250 self.assertEqual(min((1,), key=neg), 1) # one elem iterable
1251 self.assertEqual(min((1,2), key=neg), 2) # two elem iterable
1252 self.assertEqual(min(1, 2, key=neg), 2) # two elems
1253
1254 data = [random.randrange(200) for i in range(100)]
1255 keys = dict((elem, random.randrange(50)) for elem in data)
1256 f = keys.__getitem__
1257 self.assertEqual(min(data, key=f),
1258 sorted(data, key=f)[0])
1259
Georg Brandla18af4e2007-04-21 15:47:16 +00001260 def test_next(self):
1261 it = iter(range(2))
1262 self.assertEqual(next(it), 0)
1263 self.assertEqual(next(it), 1)
1264 self.assertRaises(StopIteration, next, it)
1265 self.assertRaises(StopIteration, next, it)
1266 self.assertEquals(next(it, 42), 42)
1267
1268 class Iter(object):
1269 def __iter__(self):
1270 return self
1271 def __next__(self):
1272 raise StopIteration
1273
1274 it = iter(Iter())
1275 self.assertEquals(next(it, 42), 42)
1276 self.assertRaises(StopIteration, next, it)
1277
1278 def gen():
1279 yield 1
1280 return
1281
1282 it = gen()
1283 self.assertEquals(next(it), 1)
1284 self.assertRaises(StopIteration, next, it)
1285 self.assertEquals(next(it, 42), 42)
1286
Walter Dörwald919497e2003-01-19 16:23:59 +00001287 def test_oct(self):
Guido van Rossumcd16bf62007-06-13 18:07:49 +00001288 self.assertEqual(oct(100), '0o144')
1289 self.assertEqual(oct(100), '0o144')
1290 self.assertEqual(oct(-100), '-0o144')
1291 self.assertEqual(oct(-100), '-0o144')
Walter Dörwald919497e2003-01-19 16:23:59 +00001292 self.assertRaises(TypeError, oct, ())
1293
1294 def write_testfile(self):
Guido van Rossuma88a0332007-02-26 16:59:55 +00001295 # NB the first 4 lines are also used to test input, below
Walter Dörwald919497e2003-01-19 16:23:59 +00001296 fp = open(TESTFN, 'w')
1297 try:
1298 fp.write('1+1\n')
1299 fp.write('1+1\n')
1300 fp.write('The quick brown fox jumps over the lazy dog')
1301 fp.write('.\n')
1302 fp.write('Dear John\n')
1303 fp.write('XXX'*100)
1304 fp.write('YYY'*100)
1305 finally:
1306 fp.close()
1307
1308 def test_open(self):
1309 self.write_testfile()
1310 fp = open(TESTFN, 'r')
1311 try:
1312 self.assertEqual(fp.readline(4), '1+1\n')
1313 self.assertEqual(fp.readline(4), '1+1\n')
1314 self.assertEqual(fp.readline(), 'The quick brown fox jumps over the lazy dog.\n')
1315 self.assertEqual(fp.readline(4), 'Dear')
1316 self.assertEqual(fp.readline(100), ' John\n')
1317 self.assertEqual(fp.read(300), 'XXX'*100)
1318 self.assertEqual(fp.read(1000), 'YYY'*100)
1319 finally:
1320 fp.close()
1321 unlink(TESTFN)
1322
1323 def test_ord(self):
1324 self.assertEqual(ord(' '), 32)
1325 self.assertEqual(ord('A'), 65)
1326 self.assertEqual(ord('a'), 97)
Guido van Rossumf9e91c92007-05-08 21:05:48 +00001327 self.assertEqual(ord('\x80'), 128)
1328 self.assertEqual(ord('\xff'), 255)
1329
1330 self.assertEqual(ord(b' '), 32)
1331 self.assertEqual(ord(b'A'), 65)
1332 self.assertEqual(ord(b'a'), 97)
1333 self.assertEqual(ord(b'\x80'), 128)
1334 self.assertEqual(ord(b'\xff'), 255)
1335
Walter Dörwald1f5947b2007-05-22 16:52:54 +00001336 self.assertEqual(ord(chr(sys.maxunicode)), sys.maxunicode)
Walter Dörwald919497e2003-01-19 16:23:59 +00001337 self.assertRaises(TypeError, ord, 42)
Walter Dörwald919497e2003-01-19 16:23:59 +00001338
Guido van Rossum8ac004e2007-07-15 13:00:05 +00001339 self.assertEqual(ord(chr(0x10FFFF)), 0x10FFFF)
1340 self.assertEqual(ord("\U0000FFFF"), 0x0000FFFF)
1341 self.assertEqual(ord("\U00010000"), 0x00010000)
1342 self.assertEqual(ord("\U00010001"), 0x00010001)
1343 self.assertEqual(ord("\U000FFFFE"), 0x000FFFFE)
1344 self.assertEqual(ord("\U000FFFFF"), 0x000FFFFF)
1345 self.assertEqual(ord("\U00100000"), 0x00100000)
1346 self.assertEqual(ord("\U00100001"), 0x00100001)
1347 self.assertEqual(ord("\U0010FFFE"), 0x0010FFFE)
1348 self.assertEqual(ord("\U0010FFFF"), 0x0010FFFF)
1349
Walter Dörwald919497e2003-01-19 16:23:59 +00001350 def test_pow(self):
1351 self.assertEqual(pow(0,0), 1)
1352 self.assertEqual(pow(0,1), 0)
1353 self.assertEqual(pow(1,0), 1)
1354 self.assertEqual(pow(1,1), 1)
1355
1356 self.assertEqual(pow(2,0), 1)
1357 self.assertEqual(pow(2,10), 1024)
1358 self.assertEqual(pow(2,20), 1024*1024)
1359 self.assertEqual(pow(2,30), 1024*1024*1024)
1360
1361 self.assertEqual(pow(-2,0), 1)
1362 self.assertEqual(pow(-2,1), -2)
1363 self.assertEqual(pow(-2,2), 4)
1364 self.assertEqual(pow(-2,3), -8)
1365
Guido van Rossume2a383d2007-01-15 16:59:06 +00001366 self.assertEqual(pow(0,0), 1)
1367 self.assertEqual(pow(0,1), 0)
1368 self.assertEqual(pow(1,0), 1)
1369 self.assertEqual(pow(1,1), 1)
Walter Dörwald919497e2003-01-19 16:23:59 +00001370
Guido van Rossume2a383d2007-01-15 16:59:06 +00001371 self.assertEqual(pow(2,0), 1)
1372 self.assertEqual(pow(2,10), 1024)
1373 self.assertEqual(pow(2,20), 1024*1024)
1374 self.assertEqual(pow(2,30), 1024*1024*1024)
Walter Dörwald919497e2003-01-19 16:23:59 +00001375
Guido van Rossume2a383d2007-01-15 16:59:06 +00001376 self.assertEqual(pow(-2,0), 1)
1377 self.assertEqual(pow(-2,1), -2)
1378 self.assertEqual(pow(-2,2), 4)
1379 self.assertEqual(pow(-2,3), -8)
Walter Dörwald919497e2003-01-19 16:23:59 +00001380
1381 self.assertAlmostEqual(pow(0.,0), 1.)
1382 self.assertAlmostEqual(pow(0.,1), 0.)
1383 self.assertAlmostEqual(pow(1.,0), 1.)
1384 self.assertAlmostEqual(pow(1.,1), 1.)
1385
1386 self.assertAlmostEqual(pow(2.,0), 1.)
1387 self.assertAlmostEqual(pow(2.,10), 1024.)
1388 self.assertAlmostEqual(pow(2.,20), 1024.*1024.)
1389 self.assertAlmostEqual(pow(2.,30), 1024.*1024.*1024.)
1390
1391 self.assertAlmostEqual(pow(-2.,0), 1.)
1392 self.assertAlmostEqual(pow(-2.,1), -2.)
1393 self.assertAlmostEqual(pow(-2.,2), 4.)
1394 self.assertAlmostEqual(pow(-2.,3), -8.)
1395
Guido van Rossume2a383d2007-01-15 16:59:06 +00001396 for x in 2, 2, 2.0:
1397 for y in 10, 10, 10.0:
1398 for z in 1000, 1000, 1000.0:
Walter Dörwald919497e2003-01-19 16:23:59 +00001399 if isinstance(x, float) or \
1400 isinstance(y, float) or \
1401 isinstance(z, float):
1402 self.assertRaises(TypeError, pow, x, y, z)
1403 else:
1404 self.assertAlmostEqual(pow(x, y, z), 24.0)
1405
Jeffrey Yasskin3404b3c2007-09-07 15:15:49 +00001406 self.assertAlmostEqual(pow(-1, 0.5), 1j)
1407 self.assertAlmostEqual(pow(-1, 1/3), 0.5 + 0.8660254037844386j)
1408
Walter Dörwald919497e2003-01-19 16:23:59 +00001409 self.assertRaises(TypeError, pow, -1, -2, 3)
1410 self.assertRaises(ValueError, pow, 1, 2, 0)
Guido van Rossume2a383d2007-01-15 16:59:06 +00001411 self.assertRaises(TypeError, pow, -1, -2, 3)
1412 self.assertRaises(ValueError, pow, 1, 2, 0)
Walter Dörwald919497e2003-01-19 16:23:59 +00001413
1414 self.assertRaises(TypeError, pow)
1415
1416 def test_range(self):
Guido van Rossum805365e2007-05-07 22:24:25 +00001417 self.assertEqual(list(range(3)), [0, 1, 2])
1418 self.assertEqual(list(range(1, 5)), [1, 2, 3, 4])
1419 self.assertEqual(list(range(0)), [])
1420 self.assertEqual(list(range(-3)), [])
1421 self.assertEqual(list(range(1, 10, 3)), [1, 4, 7])
1422 #self.assertEqual(list(range(5, -5, -3)), [5, 2, -1, -4])
Walter Dörwald919497e2003-01-19 16:23:59 +00001423
Guido van Rossum805365e2007-05-07 22:24:25 +00001424 """ XXX(nnorwitz):
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001425 # Now test range() with longs
Guido van Rossum805365e2007-05-07 22:24:25 +00001426 self.assertEqual(list(range(-2**100)), [])
1427 self.assertEqual(list(range(0, -2**100)), [])
1428 self.assertEqual(list(range(0, 2**100, -1)), [])
1429 self.assertEqual(list(range(0, 2**100, -1)), [])
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001430
Christian Heimesa37d4c62007-12-04 23:02:19 +00001431 a = int(10 * sys.maxsize)
1432 b = int(100 * sys.maxsize)
1433 c = int(50 * sys.maxsize)
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001434
Guido van Rossum805365e2007-05-07 22:24:25 +00001435 self.assertEqual(list(range(a, a+2)), [a, a+1])
1436 self.assertEqual(list(range(a+2, a, -1)), [a+2, a+1])
1437 self.assertEqual(list(range(a+4, a, -2)), [a+4, a+2])
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001438
Guido van Rossum805365e2007-05-07 22:24:25 +00001439 seq = list(range(a, b, c))
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001440 self.assert_(a in seq)
1441 self.assert_(b not in seq)
1442 self.assertEqual(len(seq), 2)
1443
Guido van Rossum805365e2007-05-07 22:24:25 +00001444 seq = list(range(b, a, -c))
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001445 self.assert_(b in seq)
1446 self.assert_(a not in seq)
1447 self.assertEqual(len(seq), 2)
1448
Guido van Rossum805365e2007-05-07 22:24:25 +00001449 seq = list(range(-a, -b, -c))
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001450 self.assert_(-a in seq)
1451 self.assert_(-b not in seq)
1452 self.assertEqual(len(seq), 2)
1453
Walter Dörwald919497e2003-01-19 16:23:59 +00001454 self.assertRaises(TypeError, range)
1455 self.assertRaises(TypeError, range, 1, 2, 3, 4)
1456 self.assertRaises(ValueError, range, 1, 2, 0)
Guido van Rossume2a383d2007-01-15 16:59:06 +00001457 self.assertRaises(ValueError, range, a, a + 1, int(0))
Neal Norwitzfcf44352005-11-27 20:37:43 +00001458
1459 class badzero(int):
Guido van Rossum47b9ff62006-08-24 00:41:19 +00001460 def __eq__(self, other):
Neal Norwitzfcf44352005-11-27 20:37:43 +00001461 raise RuntimeError
Guido van Rossum47b9ff62006-08-24 00:41:19 +00001462 __ne__ = __lt__ = __gt__ = __le__ = __ge__ = __eq__
1463
1464 # XXX This won't (but should!) raise RuntimeError if a is an int...
Neal Norwitzfcf44352005-11-27 20:37:43 +00001465 self.assertRaises(RuntimeError, range, a, a + 1, badzero(1))
Guido van Rossum805365e2007-05-07 22:24:25 +00001466 """
Walter Dörwald919497e2003-01-19 16:23:59 +00001467
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001468 # Reject floats when it would require PyLongs to represent.
1469 # (smaller floats still accepted, but deprecated)
Tim Peters299b3df2003-04-15 14:40:03 +00001470 self.assertRaises(TypeError, range, 1e100, 1e101, 1e101)
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001471
Walter Dörwald357981e2003-04-15 18:59:28 +00001472 self.assertRaises(TypeError, range, 0, "spam")
1473 self.assertRaises(TypeError, range, 0, 42, "spam")
1474
Christian Heimesa37d4c62007-12-04 23:02:19 +00001475 #NEAL self.assertRaises(OverflowError, range, -sys.maxsize, sys.maxsize)
1476 #NEAL self.assertRaises(OverflowError, range, 0, 2*sys.maxsize)
Guido van Rossum805365e2007-05-07 22:24:25 +00001477
Christian Heimesa37d4c62007-12-04 23:02:19 +00001478 self.assertRaises(OverflowError, len, range(0, sys.maxsize**10))
Walter Dörwald357981e2003-04-15 18:59:28 +00001479
Guido van Rossuma88a0332007-02-26 16:59:55 +00001480 def test_input(self):
1481 self.write_testfile()
1482 fp = open(TESTFN, 'r')
1483 savestdin = sys.stdin
1484 savestdout = sys.stdout # Eats the echo
1485 try:
1486 sys.stdin = fp
1487 sys.stdout = BitBucket()
1488 self.assertEqual(input(), "1+1")
1489 self.assertEqual(input('testing\n'), "1+1")
1490 self.assertEqual(input(), 'The quick brown fox jumps over the lazy dog.')
1491 self.assertEqual(input('testing\n'), 'Dear John')
1492
1493 # SF 1535165: don't segfault on closed stdin
1494 # sys.stdout must be a regular file for triggering
1495 sys.stdout = savestdout
1496 sys.stdin.close()
1497 self.assertRaises(ValueError, input)
1498
1499 sys.stdout = BitBucket()
Guido van Rossum34d19282007-08-09 01:03:29 +00001500 sys.stdin = io.StringIO("NULL\0")
Guido van Rossuma88a0332007-02-26 16:59:55 +00001501 self.assertRaises(TypeError, input, 42, 42)
Guido van Rossum34d19282007-08-09 01:03:29 +00001502 sys.stdin = io.StringIO(" 'whitespace'")
Guido van Rossuma88a0332007-02-26 16:59:55 +00001503 self.assertEqual(input(), " 'whitespace'")
Guido van Rossum34d19282007-08-09 01:03:29 +00001504 sys.stdin = io.StringIO()
Guido van Rossuma88a0332007-02-26 16:59:55 +00001505 self.assertRaises(EOFError, input)
1506
1507 del sys.stdout
1508 self.assertRaises(RuntimeError, input, 'prompt')
1509 del sys.stdin
1510 self.assertRaises(RuntimeError, input, 'prompt')
1511 finally:
1512 sys.stdin = savestdin
1513 sys.stdout = savestdout
1514 fp.close()
1515 unlink(TESTFN)
1516
Walter Dörwald919497e2003-01-19 16:23:59 +00001517 def test_repr(self):
1518 self.assertEqual(repr(''), '\'\'')
1519 self.assertEqual(repr(0), '0')
Guido van Rossume2a383d2007-01-15 16:59:06 +00001520 self.assertEqual(repr(0), '0')
Walter Dörwald919497e2003-01-19 16:23:59 +00001521 self.assertEqual(repr(()), '()')
1522 self.assertEqual(repr([]), '[]')
1523 self.assertEqual(repr({}), '{}')
1524 a = []
1525 a.append(a)
1526 self.assertEqual(repr(a), '[[...]]')
1527 a = {}
1528 a[0] = a
1529 self.assertEqual(repr(a), '{0: {...}}')
1530
1531 def test_round(self):
1532 self.assertEqual(round(0.0), 0.0)
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001533 self.assertEqual(type(round(0.0)), int)
Walter Dörwald919497e2003-01-19 16:23:59 +00001534 self.assertEqual(round(1.0), 1.0)
1535 self.assertEqual(round(10.0), 10.0)
1536 self.assertEqual(round(1000000000.0), 1000000000.0)
1537 self.assertEqual(round(1e20), 1e20)
1538
1539 self.assertEqual(round(-1.0), -1.0)
1540 self.assertEqual(round(-10.0), -10.0)
1541 self.assertEqual(round(-1000000000.0), -1000000000.0)
1542 self.assertEqual(round(-1e20), -1e20)
1543
1544 self.assertEqual(round(0.1), 0.0)
1545 self.assertEqual(round(1.1), 1.0)
1546 self.assertEqual(round(10.1), 10.0)
1547 self.assertEqual(round(1000000000.1), 1000000000.0)
1548
1549 self.assertEqual(round(-1.1), -1.0)
1550 self.assertEqual(round(-10.1), -10.0)
1551 self.assertEqual(round(-1000000000.1), -1000000000.0)
1552
1553 self.assertEqual(round(0.9), 1.0)
1554 self.assertEqual(round(9.9), 10.0)
1555 self.assertEqual(round(999999999.9), 1000000000.0)
1556
1557 self.assertEqual(round(-0.9), -1.0)
1558 self.assertEqual(round(-9.9), -10.0)
1559 self.assertEqual(round(-999999999.9), -1000000000.0)
1560
1561 self.assertEqual(round(-8.0, -1), -10.0)
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001562 self.assertEqual(type(round(-8.0, -1)), float)
1563
1564 self.assertEqual(type(round(-8.0, 0)), float)
1565 self.assertEqual(type(round(-8.0, 1)), float)
1566
1567 # Check even / odd rounding behaviour
1568 self.assertEqual(round(5.5), 6)
1569 self.assertEqual(round(6.5), 6)
1570 self.assertEqual(round(-5.5), -6)
1571 self.assertEqual(round(-6.5), -6)
1572
1573 # Check behavior on ints
1574 self.assertEqual(round(0), 0)
1575 self.assertEqual(round(8), 8)
1576 self.assertEqual(round(-8), -8)
1577 self.assertEqual(type(round(0)), int)
1578 self.assertEqual(type(round(-8, -1)), float)
1579 self.assertEqual(type(round(-8, 0)), float)
1580 self.assertEqual(type(round(-8, 1)), float)
Walter Dörwald919497e2003-01-19 16:23:59 +00001581
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001582 # test new kwargs
1583 self.assertEqual(round(number=-8.0, ndigits=-1), -10.0)
1584
Walter Dörwald919497e2003-01-19 16:23:59 +00001585 self.assertRaises(TypeError, round)
1586
Alex Martelliae211f92007-08-22 23:21:33 +00001587 # test generic rounding delegation for reals
1588 class TestRound:
1589 def __round__(self):
1590 return 23
1591
1592 class TestNoRound:
1593 pass
1594
1595 self.assertEqual(round(TestRound()), 23)
1596
1597 self.assertRaises(TypeError, round, 1, 2, 3)
1598 self.assertRaises(TypeError, round, TestNoRound())
1599
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001600 t = TestNoRound()
1601 t.__round__ = lambda *args: args
1602 self.assertRaises(TypeError, round, t)
1603 self.assertRaises(TypeError, round, t, 0)
1604
Walter Dörwald919497e2003-01-19 16:23:59 +00001605 def test_setattr(self):
Tim Petersf2715e02003-02-19 02:35:07 +00001606 setattr(sys, 'spam', 1)
1607 self.assertEqual(sys.spam, 1)
1608 self.assertRaises(TypeError, setattr, sys, 1, 'spam')
1609 self.assertRaises(TypeError, setattr)
Walter Dörwald919497e2003-01-19 16:23:59 +00001610
1611 def test_str(self):
1612 self.assertEqual(str(''), '')
1613 self.assertEqual(str(0), '0')
Guido van Rossume2a383d2007-01-15 16:59:06 +00001614 self.assertEqual(str(0), '0')
Walter Dörwald919497e2003-01-19 16:23:59 +00001615 self.assertEqual(str(()), '()')
1616 self.assertEqual(str([]), '[]')
1617 self.assertEqual(str({}), '{}')
1618 a = []
1619 a.append(a)
1620 self.assertEqual(str(a), '[[...]]')
1621 a = {}
1622 a[0] = a
1623 self.assertEqual(str(a), '{0: {...}}')
1624
Alex Martellia70b1912003-04-22 08:12:33 +00001625 def test_sum(self):
1626 self.assertEqual(sum([]), 0)
Guido van Rossum805365e2007-05-07 22:24:25 +00001627 self.assertEqual(sum(list(range(2,8))), 27)
1628 self.assertEqual(sum(iter(list(range(2,8)))), 27)
Alex Martellia70b1912003-04-22 08:12:33 +00001629 self.assertEqual(sum(Squares(10)), 285)
1630 self.assertEqual(sum(iter(Squares(10))), 285)
1631 self.assertEqual(sum([[1], [2], [3]], []), [1, 2, 3])
1632
1633 self.assertRaises(TypeError, sum)
1634 self.assertRaises(TypeError, sum, 42)
1635 self.assertRaises(TypeError, sum, ['a', 'b', 'c'])
1636 self.assertRaises(TypeError, sum, ['a', 'b', 'c'], '')
1637 self.assertRaises(TypeError, sum, [[1], [2], [3]])
1638 self.assertRaises(TypeError, sum, [{2:3}])
1639 self.assertRaises(TypeError, sum, [{2:3}]*2, {2:3})
1640
1641 class BadSeq:
1642 def __getitem__(self, index):
1643 raise ValueError
1644 self.assertRaises(ValueError, sum, BadSeq())
1645
Walter Dörwald919497e2003-01-19 16:23:59 +00001646 def test_tuple(self):
1647 self.assertEqual(tuple(()), ())
1648 t0_3 = (0, 1, 2, 3)
1649 t0_3_bis = tuple(t0_3)
1650 self.assert_(t0_3 is t0_3_bis)
1651 self.assertEqual(tuple([]), ())
1652 self.assertEqual(tuple([0, 1, 2, 3]), (0, 1, 2, 3))
1653 self.assertEqual(tuple(''), ())
1654 self.assertEqual(tuple('spam'), ('s', 'p', 'a', 'm'))
1655
1656 def test_type(self):
1657 self.assertEqual(type(''), type('123'))
1658 self.assertNotEqual(type(''), type(()))
1659
Guido van Rossumfee7b932005-01-16 00:21:28 +00001660 # We don't want self in vars(), so these are static methods
1661
1662 @staticmethod
Walter Dörwald919497e2003-01-19 16:23:59 +00001663 def get_vars_f0():
1664 return vars()
Walter Dörwald919497e2003-01-19 16:23:59 +00001665
Guido van Rossumfee7b932005-01-16 00:21:28 +00001666 @staticmethod
Walter Dörwald919497e2003-01-19 16:23:59 +00001667 def get_vars_f2():
1668 BuiltinTest.get_vars_f0()
1669 a = 1
1670 b = 2
1671 return vars()
Walter Dörwald919497e2003-01-19 16:23:59 +00001672
1673 def test_vars(self):
Raymond Hettingera690a992003-11-16 16:17:49 +00001674 self.assertEqual(set(vars()), set(dir()))
Walter Dörwald919497e2003-01-19 16:23:59 +00001675 import sys
Raymond Hettingera690a992003-11-16 16:17:49 +00001676 self.assertEqual(set(vars(sys)), set(dir(sys)))
Walter Dörwald919497e2003-01-19 16:23:59 +00001677 self.assertEqual(self.get_vars_f0(), {})
1678 self.assertEqual(self.get_vars_f2(), {'a': 1, 'b': 2})
1679 self.assertRaises(TypeError, vars, 42, 42)
1680 self.assertRaises(TypeError, vars, 42)
1681
1682 def test_zip(self):
1683 a = (1, 2, 3)
1684 b = (4, 5, 6)
1685 t = [(1, 4), (2, 5), (3, 6)]
Guido van Rossum801f0d72006-08-24 19:48:10 +00001686 self.assertEqual(list(zip(a, b)), t)
Walter Dörwald919497e2003-01-19 16:23:59 +00001687 b = [4, 5, 6]
Guido van Rossum801f0d72006-08-24 19:48:10 +00001688 self.assertEqual(list(zip(a, b)), t)
Walter Dörwald919497e2003-01-19 16:23:59 +00001689 b = (4, 5, 6, 7)
Guido van Rossum801f0d72006-08-24 19:48:10 +00001690 self.assertEqual(list(zip(a, b)), t)
Walter Dörwald919497e2003-01-19 16:23:59 +00001691 class I:
1692 def __getitem__(self, i):
1693 if i < 0 or i > 2: raise IndexError
1694 return i + 4
Guido van Rossum801f0d72006-08-24 19:48:10 +00001695 self.assertEqual(list(zip(a, I())), t)
1696 self.assertEqual(list(zip()), [])
1697 self.assertEqual(list(zip(*[])), [])
Walter Dörwald919497e2003-01-19 16:23:59 +00001698 self.assertRaises(TypeError, zip, None)
1699 class G:
1700 pass
1701 self.assertRaises(TypeError, zip, a, G())
1702
1703 # Make sure zip doesn't try to allocate a billion elements for the
1704 # result list when one of its arguments doesn't say how long it is.
1705 # A MemoryError is the most likely failure mode.
1706 class SequenceWithoutALength:
1707 def __getitem__(self, i):
1708 if i == 5:
1709 raise IndexError
1710 else:
1711 return i
1712 self.assertEqual(
Guido van Rossum805365e2007-05-07 22:24:25 +00001713 list(zip(SequenceWithoutALength(), range(2**30))),
Walter Dörwald919497e2003-01-19 16:23:59 +00001714 list(enumerate(range(5)))
1715 )
1716
1717 class BadSeq:
1718 def __getitem__(self, i):
1719 if i == 5:
1720 raise ValueError
1721 else:
1722 return i
Guido van Rossum801f0d72006-08-24 19:48:10 +00001723 self.assertRaises(ValueError, list, zip(BadSeq(), BadSeq()))
Walter Dörwald919497e2003-01-19 16:23:59 +00001724
Raymond Hettinger64958a12003-12-17 20:43:33 +00001725class TestSorted(unittest.TestCase):
1726
1727 def test_basic(self):
Guido van Rossum805365e2007-05-07 22:24:25 +00001728 data = list(range(100))
Raymond Hettinger64958a12003-12-17 20:43:33 +00001729 copy = data[:]
1730 random.shuffle(copy)
1731 self.assertEqual(data, sorted(copy))
1732 self.assertNotEqual(data, copy)
1733
1734 data.reverse()
1735 random.shuffle(copy)
Raymond Hettinger64958a12003-12-17 20:43:33 +00001736 self.assertEqual(data, sorted(copy, key=lambda x: -x))
1737 self.assertNotEqual(data, copy)
1738 random.shuffle(copy)
1739 self.assertEqual(data, sorted(copy, reverse=1))
1740 self.assertNotEqual(data, copy)
1741
1742 def test_inputtypes(self):
1743 s = 'abracadabra'
Walter Dörwald1f5947b2007-05-22 16:52:54 +00001744 types = [list, tuple, str]
Walter Dörwald4e41a4b2005-08-03 17:09:04 +00001745 for T in types:
Raymond Hettinger64958a12003-12-17 20:43:33 +00001746 self.assertEqual(sorted(s), sorted(T(s)))
1747
Walter Dörwald1f5947b2007-05-22 16:52:54 +00001748 s = ''.join(set(s)) # unique letters only
1749 types = [str, set, frozenset, list, tuple, dict.fromkeys]
Walter Dörwald4e41a4b2005-08-03 17:09:04 +00001750 for T in types:
Raymond Hettinger64958a12003-12-17 20:43:33 +00001751 self.assertEqual(sorted(s), sorted(T(s)))
1752
1753 def test_baddecorator(self):
1754 data = 'The quick Brown fox Jumped over The lazy Dog'.split()
1755 self.assertRaises(TypeError, sorted, data, None, lambda x,y: 0)
1756
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001757def test_main(verbose=None):
1758 test_classes = (BuiltinTest, TestSorted)
1759
1760 run_unittest(*test_classes)
1761
1762 # verify reference counting
1763 if verbose and hasattr(sys, "gettotalrefcount"):
1764 import gc
1765 counts = [None] * 5
Guido van Rossum805365e2007-05-07 22:24:25 +00001766 for i in range(len(counts)):
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001767 run_unittest(*test_classes)
1768 gc.collect()
1769 counts[i] = sys.gettotalrefcount()
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001770 print(counts)
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001771
Walter Dörwald919497e2003-01-19 16:23:59 +00001772
1773if __name__ == "__main__":
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001774 test_main(verbose=True)