blob: 54df9e114d071dbeb1415cd2b18a8cdc56f66580 [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
Thomas Wouters477c8d52006-05-27 19:21:47 +00004from test.test_support import fcmp, have_unicode, TESTFN, unlink, \
5 run_unittest, run_with_locale
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00006from operator import neg
Guido van Rossum3bead091992-01-27 17:00:37 +00007
Raymond Hettinger214b1c32004-07-02 06:41:07 +00008import sys, warnings, cStringIO, random, UserDict
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
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +000014# count the number of test runs.
15# used to skip running test_execfile() multiple times
16numruns = 0
17
Walter Dörwald919497e2003-01-19 16:23:59 +000018class Squares:
Guido van Rossum3bead091992-01-27 17:00:37 +000019
Walter Dörwald919497e2003-01-19 16:23:59 +000020 def __init__(self, max):
21 self.max = max
22 self.sofar = []
23
24 def __len__(self): return len(self.sofar)
25
26 def __getitem__(self, i):
27 if not 0 <= i < self.max: raise IndexError
28 n = len(self.sofar)
29 while n <= i:
30 self.sofar.append(n*n)
31 n += 1
32 return self.sofar[i]
33
34class StrSquares:
35
36 def __init__(self, max):
37 self.max = max
38 self.sofar = []
39
40 def __len__(self):
41 return len(self.sofar)
42
43 def __getitem__(self, i):
44 if not 0 <= i < self.max:
45 raise IndexError
46 n = len(self.sofar)
47 while n <= i:
48 self.sofar.append(str(n*n))
49 n += 1
50 return self.sofar[i]
51
52class BitBucket:
53 def write(self, line):
54 pass
55
56L = [
57 ('0', 0),
58 ('1', 1),
59 ('9', 9),
60 ('10', 10),
61 ('99', 99),
62 ('100', 100),
63 ('314', 314),
64 (' 314', 314),
65 ('314 ', 314),
66 (' \t\t 314 \t\t ', 314),
Walter Dörwald70a6b492004-02-12 17:35:32 +000067 (repr(sys.maxint), sys.maxint),
Walter Dörwald919497e2003-01-19 16:23:59 +000068 (' 1x', ValueError),
69 (' 1 ', 1),
70 (' 1\02 ', ValueError),
71 ('', ValueError),
72 (' ', ValueError),
73 (' \t\t ', ValueError)
74]
75if have_unicode:
76 L += [
Guido van Rossumef87d6e2007-05-02 19:09:54 +000077 (str('0'), 0),
78 (str('1'), 1),
79 (str('9'), 9),
80 (str('10'), 10),
81 (str('99'), 99),
82 (str('100'), 100),
83 (str('314'), 314),
84 (str(' 314'), 314),
85 (str(b'\u0663\u0661\u0664 ','raw-unicode-escape'), 314),
86 (str(' \t\t 314 \t\t '), 314),
87 (str(' 1x'), ValueError),
88 (str(' 1 '), 1),
89 (str(' 1\02 '), ValueError),
90 (str(''), ValueError),
91 (str(' '), ValueError),
92 (str(' \t\t '), ValueError),
Guido van Rossum84fc66d2007-05-03 17:18:26 +000093 (chr(0x200), ValueError),
Walter Dörwald919497e2003-01-19 16:23:59 +000094]
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)
Thomas Wouters89f507f2006-12-13 04:49:30 +0000122 self.assertTrue(abs(-sys.maxint-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):
163 x = -sys.maxint-1
164 self.assert_(isinstance(x, int))
165 self.assertEqual(-x, sys.maxint+1)
166
Walter Dörwald919497e2003-01-19 16:23:59 +0000167 def test_callable(self):
168 self.assert_(callable(len))
169 def f(): pass
170 self.assert_(callable(f))
171 class C:
172 def meth(self): pass
173 self.assert_(callable(C))
174 x = C()
175 self.assert_(callable(x.meth))
176 self.assert_(not callable(x))
177 class D(C):
178 def __call__(self): pass
179 y = D()
180 self.assert_(callable(y))
181 y()
182
183 def test_chr(self):
184 self.assertEqual(chr(32), ' ')
185 self.assertEqual(chr(65), 'A')
186 self.assertEqual(chr(97), 'a')
187 self.assertEqual(chr(0xff), '\xff')
Guido van Rossum572dbf82007-04-27 23:53:51 +0000188 self.assertRaises(ValueError, chr, 1<<24)
Walter Dörwald919497e2003-01-19 16:23:59 +0000189 self.assertRaises(TypeError, chr)
190
Guido van Rossum47b9ff62006-08-24 00:41:19 +0000191 def XXX_test_cmp(self):
192 # cmp() is no longer supported
Walter Dörwald919497e2003-01-19 16:23:59 +0000193 self.assertEqual(cmp(-1, 1), -1)
194 self.assertEqual(cmp(1, -1), 1)
195 self.assertEqual(cmp(1, 1), 0)
Armin Rigo2b3eb402003-10-28 12:05:48 +0000196 # verify that circular objects are not handled
Walter Dörwald919497e2003-01-19 16:23:59 +0000197 a = []; a.append(a)
198 b = []; b.append(b)
199 from UserList import UserList
200 c = UserList(); c.append(c)
Armin Rigo2b3eb402003-10-28 12:05:48 +0000201 self.assertRaises(RuntimeError, cmp, a, b)
202 self.assertRaises(RuntimeError, cmp, b, c)
203 self.assertRaises(RuntimeError, cmp, c, a)
204 self.assertRaises(RuntimeError, cmp, a, c)
205 # okay, now break the cycles
Walter Dörwald919497e2003-01-19 16:23:59 +0000206 a.pop(); b.pop(); c.pop()
207 self.assertRaises(TypeError, cmp)
208
Walter Dörwald919497e2003-01-19 16:23:59 +0000209 def test_compile(self):
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000210 compile('print(1)\n', '', 'exec')
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000211## bom = b'\xef\xbb\xbf'
212## compile(bom + b'print(1)\n', '', 'exec')
Guido van Rossumd8faa362007-04-27 19:54:29 +0000213 compile(source='pass', filename='?', mode='exec')
214 compile(dont_inherit=0, filename='tmp', source='0', mode='eval')
215 compile('pass', '?', dont_inherit=1, mode='exec')
Walter Dörwald919497e2003-01-19 16:23:59 +0000216 self.assertRaises(TypeError, compile)
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000217 self.assertRaises(ValueError, compile, 'print(42)\n', '<string>', 'badmode')
218 self.assertRaises(ValueError, compile, 'print(42)\n', '<string>', 'single', 0xff)
Neal Norwitzfcf44352005-11-27 20:37:43 +0000219 self.assertRaises(TypeError, compile, chr(0), 'f', 'exec')
Guido van Rossumd8faa362007-04-27 19:54:29 +0000220 self.assertRaises(TypeError, compile, 'pass', '?', 'exec',
221 mode='eval', source='0', filename='tmp')
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000222 if have_unicode:
Guido van Rossume5e80b82007-05-08 18:51:25 +0000223 compile('print("\xe5")\n', '', 'exec')
Guido van Rossum84fc66d2007-05-03 17:18:26 +0000224 self.assertRaises(TypeError, compile, chr(0), 'f', 'exec')
Guido van Rossumef87d6e2007-05-02 19:09:54 +0000225 self.assertRaises(ValueError, compile, str('a = 1'), 'f', 'bad')
Walter Dörwald919497e2003-01-19 16:23:59 +0000226
Guido van Rossumd8faa362007-04-27 19:54:29 +0000227
Walter Dörwald919497e2003-01-19 16:23:59 +0000228 def test_delattr(self):
229 import sys
230 sys.spam = 1
231 delattr(sys, 'spam')
232 self.assertRaises(TypeError, delattr)
233
234 def test_dir(self):
Georg Brandle32b4222007-03-10 22:13:27 +0000235 # dir(wrong number of arguments)
Walter Dörwald919497e2003-01-19 16:23:59 +0000236 self.assertRaises(TypeError, dir, 42, 42)
237
Georg Brandle32b4222007-03-10 22:13:27 +0000238 # dir() - local scope
239 local_var = 1
240 self.assert_('local_var' in dir())
241
242 # dir(module)
243 import sys
244 self.assert_('exit' in dir(sys))
245
246 # dir(module_with_invalid__dict__)
247 import types
248 class Foo(types.ModuleType):
249 __dict__ = 8
250 f = Foo("foo")
251 self.assertRaises(TypeError, dir, f)
252
253 # dir(type)
254 self.assert_("strip" in dir(str))
255 self.assert_("__mro__" not in dir(str))
256
257 # dir(obj)
258 class Foo(object):
259 def __init__(self):
260 self.x = 7
261 self.y = 8
262 self.z = 9
263 f = Foo()
264 self.assert_("y" in dir(f))
265
266 # dir(obj_no__dict__)
267 class Foo(object):
268 __slots__ = []
269 f = Foo()
270 self.assert_("__repr__" in dir(f))
271
272 # dir(obj_no__class__with__dict__)
273 # (an ugly trick to cause getattr(f, "__class__") to fail)
274 class Foo(object):
275 __slots__ = ["__class__", "__dict__"]
276 def __init__(self):
277 self.bar = "wow"
278 f = Foo()
279 self.assert_("__repr__" not in dir(f))
280 self.assert_("bar" in dir(f))
281
282 # dir(obj_using __dir__)
283 class Foo(object):
284 def __dir__(self):
285 return ["kan", "ga", "roo"]
286 f = Foo()
287 self.assert_(dir(f) == ["ga", "kan", "roo"])
288
289 # dir(obj__dir__not_list)
290 class Foo(object):
291 def __dir__(self):
292 return 7
293 f = Foo()
294 self.assertRaises(TypeError, dir, f)
295
Walter Dörwald919497e2003-01-19 16:23:59 +0000296 def test_divmod(self):
297 self.assertEqual(divmod(12, 7), (1, 5))
298 self.assertEqual(divmod(-12, 7), (-2, 2))
299 self.assertEqual(divmod(12, -7), (-2, -2))
300 self.assertEqual(divmod(-12, -7), (1, -5))
301
Guido van Rossume2a383d2007-01-15 16:59:06 +0000302 self.assertEqual(divmod(12, 7), (1, 5))
303 self.assertEqual(divmod(-12, 7), (-2, 2))
304 self.assertEqual(divmod(12, -7), (-2, -2))
305 self.assertEqual(divmod(-12, -7), (1, -5))
Walter Dörwald919497e2003-01-19 16:23:59 +0000306
Guido van Rossume2a383d2007-01-15 16:59:06 +0000307 self.assertEqual(divmod(12, 7), (1, 5))
308 self.assertEqual(divmod(-12, 7), (-2, 2))
309 self.assertEqual(divmod(12, -7), (-2, -2))
310 self.assertEqual(divmod(-12, -7), (1, -5))
Walter Dörwald919497e2003-01-19 16:23:59 +0000311
Raymond Hettinger5ea7e312004-09-30 07:47:20 +0000312 self.assertEqual(divmod(-sys.maxint-1, -1),
313 (sys.maxint+1, 0))
314
Walter Dörwald919497e2003-01-19 16:23:59 +0000315 self.assert_(not fcmp(divmod(3.25, 1.0), (3.0, 0.25)))
316 self.assert_(not fcmp(divmod(-3.25, 1.0), (-4.0, 0.75)))
317 self.assert_(not fcmp(divmod(3.25, -1.0), (-4.0, -0.75)))
318 self.assert_(not fcmp(divmod(-3.25, -1.0), (3.0, -0.25)))
319
320 self.assertRaises(TypeError, divmod)
321
322 def test_eval(self):
323 self.assertEqual(eval('1+1'), 2)
324 self.assertEqual(eval(' 1+1\n'), 2)
325 globals = {'a': 1, 'b': 2}
326 locals = {'b': 200, 'c': 300}
327 self.assertEqual(eval('a', globals) , 1)
328 self.assertEqual(eval('a', globals, locals), 1)
329 self.assertEqual(eval('b', globals, locals), 200)
330 self.assertEqual(eval('c', globals, locals), 300)
331 if have_unicode:
Guido van Rossumef87d6e2007-05-02 19:09:54 +0000332 self.assertEqual(eval(str('1+1')), 2)
333 self.assertEqual(eval(str(' 1+1\n')), 2)
Walter Dörwald919497e2003-01-19 16:23:59 +0000334 globals = {'a': 1, 'b': 2}
335 locals = {'b': 200, 'c': 300}
336 if have_unicode:
Guido van Rossumef87d6e2007-05-02 19:09:54 +0000337 self.assertEqual(eval(str('a'), globals), 1)
338 self.assertEqual(eval(str('a'), globals, locals), 1)
339 self.assertEqual(eval(str('b'), globals, locals), 200)
340 self.assertEqual(eval(str('c'), globals, locals), 300)
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000341## bom = b'\xef\xbb\xbf'
342## self.assertEqual(eval(bom + b'a', globals, locals), 1)
Guido van Rossume5e80b82007-05-08 18:51:25 +0000343 self.assertEqual(eval('"\xe5"', globals), "\xe5")
Walter Dörwald919497e2003-01-19 16:23:59 +0000344 self.assertRaises(TypeError, eval)
345 self.assertRaises(TypeError, eval, ())
346
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000347 def test_general_eval(self):
348 # Tests that general mappings can be used for the locals argument
349
350 class M:
351 "Test mapping interface versus possible calls from eval()."
352 def __getitem__(self, key):
353 if key == 'a':
354 return 12
355 raise KeyError
Guido van Rossumcd70eee2007-02-11 18:53:00 +0000356 def keys(self):
357 return list('xyz')
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000358
359 m = M()
360 g = globals()
361 self.assertEqual(eval('a', g, m), 12)
362 self.assertRaises(NameError, eval, 'b', g, m)
363 self.assertEqual(eval('dir()', g, m), list('xyz'))
364 self.assertEqual(eval('globals()', g, m), g)
365 self.assertEqual(eval('locals()', g, m), m)
Raymond Hettinger513ffe82004-07-06 13:44:41 +0000366 self.assertRaises(TypeError, eval, 'a', m)
Raymond Hettinger66bd2332004-08-02 08:30:07 +0000367 class A:
368 "Non-mapping"
369 pass
370 m = A()
371 self.assertRaises(TypeError, eval, 'a', g, m)
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000372
373 # Verify that dict subclasses work as well
374 class D(dict):
375 def __getitem__(self, key):
376 if key == 'a':
377 return 12
378 return dict.__getitem__(self, key)
Guido van Rossumcd70eee2007-02-11 18:53:00 +0000379 def keys(self):
380 return list('xyz')
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000381
382 d = D()
383 self.assertEqual(eval('a', g, d), 12)
384 self.assertRaises(NameError, eval, 'b', g, d)
385 self.assertEqual(eval('dir()', g, d), list('xyz'))
386 self.assertEqual(eval('globals()', g, d), g)
387 self.assertEqual(eval('locals()', g, d), d)
388
389 # Verify locals stores (used by list comps)
390 eval('[locals() for i in (2,3)]', g, d)
391 eval('[locals() for i in (2,3)]', g, UserDict.UserDict())
392
393 class SpreadSheet:
394 "Sample application showing nested, calculated lookups."
395 _cells = {}
396 def __setitem__(self, key, formula):
397 self._cells[key] = formula
Thomas Wouters73e5a5b2006-06-08 15:35:45 +0000398 def __getitem__(self, key):
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000399 return eval(self._cells[key], globals(), self)
400
401 ss = SpreadSheet()
402 ss['a1'] = '5'
403 ss['a2'] = 'a1*6'
404 ss['a3'] = 'a2*7'
405 self.assertEqual(ss['a3'], 210)
406
Raymond Hettinger2a7dede2004-08-07 04:55:30 +0000407 # Verify that dir() catches a non-list returned by eval
408 # SF bug #1004669
409 class C:
410 def __getitem__(self, item):
411 raise KeyError(item)
Guido van Rossumcd70eee2007-02-11 18:53:00 +0000412 def keys(self):
413 return 1 # used to be 'a' but that's no longer an error
Raymond Hettinger2a7dede2004-08-07 04:55:30 +0000414 self.assertRaises(TypeError, eval, 'dir()', globals(), C())
415
Walter Dörwald919497e2003-01-19 16:23:59 +0000416 # Done outside of the method test_z to get the correct scope
417 z = 0
418 f = open(TESTFN, 'w')
419 f.write('z = z+1\n')
420 f.write('z = z*2\n')
421 f.close()
422 execfile(TESTFN)
423
424 def test_execfile(self):
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +0000425 global numruns
426 if numruns:
427 return
428 numruns += 1
Tim Peters7f061872004-12-07 21:17:46 +0000429
Walter Dörwald919497e2003-01-19 16:23:59 +0000430 globals = {'a': 1, 'b': 2}
431 locals = {'b': 200, 'c': 300}
432
433 self.assertEqual(self.__class__.z, 2)
434 globals['z'] = 0
435 execfile(TESTFN, globals)
436 self.assertEqual(globals['z'], 2)
437 locals['z'] = 0
438 execfile(TESTFN, globals, locals)
439 self.assertEqual(locals['z'], 2)
Raymond Hettinger66bd2332004-08-02 08:30:07 +0000440
441 class M:
442 "Test mapping interface versus possible calls from execfile()."
443 def __init__(self):
444 self.z = 10
445 def __getitem__(self, key):
446 if key == 'z':
447 return self.z
448 raise KeyError
449 def __setitem__(self, key, value):
450 if key == 'z':
451 self.z = value
452 return
453 raise KeyError
454
455 locals = M()
456 locals['z'] = 0
457 execfile(TESTFN, globals, locals)
458 self.assertEqual(locals['z'], 2)
459
Walter Dörwald919497e2003-01-19 16:23:59 +0000460 unlink(TESTFN)
461 self.assertRaises(TypeError, execfile)
Neal Norwitzfcf44352005-11-27 20:37:43 +0000462 self.assertRaises(TypeError, execfile, TESTFN, {}, ())
Walter Dörwald919497e2003-01-19 16:23:59 +0000463 import os
464 self.assertRaises(IOError, execfile, os.curdir)
465 self.assertRaises(IOError, execfile, "I_dont_exist")
466
Georg Brandl7cae87c2006-09-06 06:51:57 +0000467 def test_exec(self):
468 g = {}
469 exec('z = 1', g)
470 if '__builtins__' in g:
471 del g['__builtins__']
472 self.assertEqual(g, {'z': 1})
473
Guido van Rossumef87d6e2007-05-02 19:09:54 +0000474 exec('z = 1+1', g)
Georg Brandl7cae87c2006-09-06 06:51:57 +0000475 if '__builtins__' in g:
476 del g['__builtins__']
477 self.assertEqual(g, {'z': 2})
478 g = {}
479 l = {}
480
481 import warnings
482 warnings.filterwarnings("ignore", "global statement", module="<string>")
483 exec('global a; a = 1; b = 2', g, l)
484 if '__builtins__' in g:
485 del g['__builtins__']
486 if '__builtins__' in l:
487 del l['__builtins__']
488 self.assertEqual((g, l), ({'a': 1}, {'b': 2}))
489
Walter Dörwald919497e2003-01-19 16:23:59 +0000490 def test_filter(self):
491 self.assertEqual(filter(lambda c: 'a' <= c <= 'z', 'Hello World'), 'elloorld')
492 self.assertEqual(filter(None, [1, 'hello', [], [3], '', None, 9, 0]), [1, 'hello', [3], 9])
493 self.assertEqual(filter(lambda x: x > 0, [1, -3, 9, 0, 2]), [1, 9, 2])
494 self.assertEqual(filter(None, Squares(10)), [1, 4, 9, 16, 25, 36, 49, 64, 81])
495 self.assertEqual(filter(lambda x: x%2, Squares(10)), [1, 9, 25, 49, 81])
496 def identity(item):
497 return 1
498 filter(identity, Squares(5))
499 self.assertRaises(TypeError, filter)
500 class BadSeq(object):
Tim Petersf2715e02003-02-19 02:35:07 +0000501 def __getitem__(self, index):
502 if index<4:
503 return 42
504 raise ValueError
Walter Dörwald919497e2003-01-19 16:23:59 +0000505 self.assertRaises(ValueError, filter, lambda x: x, BadSeq())
506 def badfunc():
507 pass
508 self.assertRaises(TypeError, filter, badfunc, range(5))
509
Walter Dörwaldbf517072003-01-27 15:57:14 +0000510 # test bltinmodule.c::filtertuple()
Walter Dörwald919497e2003-01-19 16:23:59 +0000511 self.assertEqual(filter(None, (1, 2)), (1, 2))
512 self.assertEqual(filter(lambda x: x>=3, (1, 2, 3, 4)), (3, 4))
513 self.assertRaises(TypeError, filter, 42, (1, 2))
514
Walter Dörwaldbf517072003-01-27 15:57:14 +0000515 # test bltinmodule.c::filterstring()
Walter Dörwald919497e2003-01-19 16:23:59 +0000516 self.assertEqual(filter(None, "12"), "12")
517 self.assertEqual(filter(lambda x: x>="3", "1234"), "34")
518 self.assertRaises(TypeError, filter, 42, "12")
519 class badstr(str):
520 def __getitem__(self, index):
521 raise ValueError
522 self.assertRaises(ValueError, filter, lambda x: x >="3", badstr("1234"))
Walter Dörwaldbf517072003-01-27 15:57:14 +0000523
Walter Dörwald903f1e02003-02-04 16:28:00 +0000524 class badstr2(str):
525 def __getitem__(self, index):
526 return 42
527 self.assertRaises(TypeError, filter, lambda x: x >=42, badstr2("1234"))
528
529 class weirdstr(str):
530 def __getitem__(self, index):
531 return weirdstr(2*str.__getitem__(self, index))
532 self.assertEqual(filter(lambda x: x>="33", weirdstr("1234")), "3344")
533
Walter Dörwald5e61e242003-02-04 17:04:01 +0000534 class shiftstr(str):
535 def __getitem__(self, index):
536 return chr(ord(str.__getitem__(self, index))+1)
537 self.assertEqual(filter(lambda x: x>="3", shiftstr("1234")), "345")
538
Martin v. Löwis8afd7572003-01-25 22:46:11 +0000539 if have_unicode:
Walter Dörwaldbf517072003-01-27 15:57:14 +0000540 # test bltinmodule.c::filterunicode()
Guido van Rossumef87d6e2007-05-02 19:09:54 +0000541 self.assertEqual(filter(None, str("12")), str("12"))
542 self.assertEqual(filter(lambda x: x>="3", str("1234")), str("34"))
543 self.assertRaises(TypeError, filter, 42, str("12"))
544 self.assertRaises(ValueError, filter, lambda x: x >="3", badstr(str("1234")))
Walter Dörwald919497e2003-01-19 16:23:59 +0000545
Guido van Rossumef87d6e2007-05-02 19:09:54 +0000546 class badunicode(str):
Walter Dörwald903f1e02003-02-04 16:28:00 +0000547 def __getitem__(self, index):
548 return 42
549 self.assertRaises(TypeError, filter, lambda x: x >=42, badunicode("1234"))
550
Guido van Rossumef87d6e2007-05-02 19:09:54 +0000551 class weirdunicode(str):
Walter Dörwald903f1e02003-02-04 16:28:00 +0000552 def __getitem__(self, index):
Guido van Rossumef87d6e2007-05-02 19:09:54 +0000553 return weirdunicode(2*str.__getitem__(self, index))
Walter Dörwald903f1e02003-02-04 16:28:00 +0000554 self.assertEqual(
Guido van Rossumef87d6e2007-05-02 19:09:54 +0000555 filter(lambda x: x>=str("33"), weirdunicode("1234")), str("3344"))
Walter Dörwald903f1e02003-02-04 16:28:00 +0000556
Guido van Rossumef87d6e2007-05-02 19:09:54 +0000557 class shiftunicode(str):
Walter Dörwald5e61e242003-02-04 17:04:01 +0000558 def __getitem__(self, index):
Guido van Rossum84fc66d2007-05-03 17:18:26 +0000559 return chr(ord(str.__getitem__(self, index))+1)
Walter Dörwald5e61e242003-02-04 17:04:01 +0000560 self.assertEqual(
Guido van Rossumef87d6e2007-05-02 19:09:54 +0000561 filter(lambda x: x>=str("3"), shiftunicode("1234")),
562 str("345")
Walter Dörwald5e61e242003-02-04 17:04:01 +0000563 )
564
Walter Dörwaldc3da83f2003-02-04 20:24:45 +0000565 def test_filter_subclasses(self):
Walter Dörwaldc8cb5d92003-08-15 17:52:39 +0000566 # test that filter() never returns tuple, str or unicode subclasses
567 # and that the result always goes through __getitem__
568 funcs = (None, bool, lambda x: True)
Walter Dörwaldc3da83f2003-02-04 20:24:45 +0000569 class tuple2(tuple):
Walter Dörwald1918f772003-02-10 13:19:13 +0000570 def __getitem__(self, index):
571 return 2*tuple.__getitem__(self, index)
Walter Dörwaldc3da83f2003-02-04 20:24:45 +0000572 class str2(str):
Walter Dörwald1918f772003-02-10 13:19:13 +0000573 def __getitem__(self, index):
574 return 2*str.__getitem__(self, index)
Walter Dörwaldc3da83f2003-02-04 20:24:45 +0000575 inputs = {
Walter Dörwald8dd19322003-02-10 17:36:40 +0000576 tuple2: {(): (), (1, 2, 3): (2, 4, 6)},
Walter Dörwald1918f772003-02-10 13:19:13 +0000577 str2: {"": "", "123": "112233"}
Walter Dörwaldc3da83f2003-02-04 20:24:45 +0000578 }
579 if have_unicode:
Guido van Rossumef87d6e2007-05-02 19:09:54 +0000580 class unicode2(str):
Walter Dörwald1918f772003-02-10 13:19:13 +0000581 def __getitem__(self, index):
Guido van Rossumef87d6e2007-05-02 19:09:54 +0000582 return 2*str.__getitem__(self, index)
Walter Dörwald1918f772003-02-10 13:19:13 +0000583 inputs[unicode2] = {
Guido van Rossumef87d6e2007-05-02 19:09:54 +0000584 str(): str(),
585 str("123"): str("112233")
Walter Dörwald1918f772003-02-10 13:19:13 +0000586 }
Walter Dörwaldc3da83f2003-02-04 20:24:45 +0000587
Guido van Rossumcc2b0162007-02-11 06:12:03 +0000588 for (cls, inps) in inputs.items():
589 for (inp, exp) in inps.items():
Tim Petersf2715e02003-02-19 02:35:07 +0000590 # make sure the output goes through __getitem__
591 # even if func is None
592 self.assertEqual(
593 filter(funcs[0], cls(inp)),
594 filter(funcs[1], cls(inp))
595 )
596 for func in funcs:
Walter Dörwald1918f772003-02-10 13:19:13 +0000597 outp = filter(func, cls(inp))
598 self.assertEqual(outp, exp)
599 self.assert_(not isinstance(outp, cls))
Walter Dörwaldc3da83f2003-02-04 20:24:45 +0000600
Walter Dörwald919497e2003-01-19 16:23:59 +0000601 def test_float(self):
602 self.assertEqual(float(3.14), 3.14)
603 self.assertEqual(float(314), 314.0)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000604 self.assertEqual(float(314), 314.0)
Walter Dörwald919497e2003-01-19 16:23:59 +0000605 self.assertEqual(float(" 3.14 "), 3.14)
Neal Norwitze7214a12005-12-18 05:03:17 +0000606 self.assertRaises(ValueError, float, " 0x3.1 ")
607 self.assertRaises(ValueError, float, " -0x3.p-1 ")
Walter Dörwald919497e2003-01-19 16:23:59 +0000608 if have_unicode:
Guido van Rossumef87d6e2007-05-02 19:09:54 +0000609 self.assertEqual(float(str(" 3.14 ")), 3.14)
610 self.assertEqual(float(str(b" \u0663.\u0661\u0664 ",'raw-unicode-escape')), 3.14)
Guido van Rossume1083732007-05-15 21:32:59 +0000611 self.assertEqual(float("1"*10000), 1e10000) # Inf on both sides
Walter Dörwald919497e2003-01-19 16:23:59 +0000612
Thomas Wouters477c8d52006-05-27 19:21:47 +0000613 @run_with_locale('LC_NUMERIC', 'fr_FR', 'de_DE')
Neal Norwitz5898fa22005-11-22 05:17:40 +0000614 def test_float_with_comma(self):
615 # set locale to something that doesn't use '.' for the decimal point
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000616 # float must not accept the locale specific decimal point but
617 # it still has to accept the normal python syntac
Thomas Wouters477c8d52006-05-27 19:21:47 +0000618 import locale
619 if not locale.localeconv()['decimal_point'] == ',':
Neal Norwitz5898fa22005-11-22 05:17:40 +0000620 return
621
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000622 self.assertEqual(float(" 3.14 "), 3.14)
623 self.assertEqual(float("+3.14 "), 3.14)
624 self.assertEqual(float("-3.14 "), -3.14)
625 self.assertEqual(float(".14 "), .14)
626 self.assertEqual(float("3. "), 3.0)
627 self.assertEqual(float("3.e3 "), 3000.0)
628 self.assertEqual(float("3.2e3 "), 3200.0)
629 self.assertEqual(float("2.5e-1 "), 0.25)
630 self.assertEqual(float("5e-1"), 0.5)
631 self.assertRaises(ValueError, float, " 3,14 ")
632 self.assertRaises(ValueError, float, " +3,14 ")
633 self.assertRaises(ValueError, float, " -3,14 ")
Thomas Wouters477c8d52006-05-27 19:21:47 +0000634 self.assertRaises(ValueError, float, " 0x3.1 ")
635 self.assertRaises(ValueError, float, " -0x3.p-1 ")
636 self.assertEqual(float(" 25.e-1 "), 2.5)
637 self.assertEqual(fcmp(float(" .25e-1 "), .025), 0)
Neal Norwitz5898fa22005-11-22 05:17:40 +0000638
Brett Cannonc3647ac2005-04-26 03:45:26 +0000639 def test_floatconversion(self):
640 # Make sure that calls to __float__() work properly
641 class Foo0:
642 def __float__(self):
643 return 42.
644
645 class Foo1(object):
646 def __float__(self):
647 return 42.
648
649 class Foo2(float):
650 def __float__(self):
651 return 42.
652
653 class Foo3(float):
654 def __new__(cls, value=0.):
655 return float.__new__(cls, 2*value)
656
657 def __float__(self):
658 return self
659
660 class Foo4(float):
661 def __float__(self):
662 return 42
663
664 self.assertAlmostEqual(float(Foo0()), 42.)
665 self.assertAlmostEqual(float(Foo1()), 42.)
666 self.assertAlmostEqual(float(Foo2()), 42.)
667 self.assertAlmostEqual(float(Foo3(21)), 42.)
668 self.assertRaises(TypeError, float, Foo4(42))
669
Walter Dörwald919497e2003-01-19 16:23:59 +0000670 def test_getattr(self):
671 import sys
672 self.assert_(getattr(sys, 'stdout') is sys.stdout)
673 self.assertRaises(TypeError, getattr, sys, 1)
674 self.assertRaises(TypeError, getattr, sys, 1, "foo")
675 self.assertRaises(TypeError, getattr)
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000676 self.assertRaises(AttributeError, getattr, sys, chr(sys.maxunicode))
Walter Dörwald919497e2003-01-19 16:23:59 +0000677
678 def test_hasattr(self):
679 import sys
680 self.assert_(hasattr(sys, 'stdout'))
681 self.assertRaises(TypeError, hasattr, sys, 1)
682 self.assertRaises(TypeError, hasattr)
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000683 self.assertEqual(False, hasattr(sys, chr(sys.maxunicode)))
Walter Dörwald919497e2003-01-19 16:23:59 +0000684
685 def test_hash(self):
686 hash(None)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000687 self.assertEqual(hash(1), hash(1))
Walter Dörwald919497e2003-01-19 16:23:59 +0000688 self.assertEqual(hash(1), hash(1.0))
689 hash('spam')
690 if have_unicode:
Guido van Rossumef87d6e2007-05-02 19:09:54 +0000691 self.assertEqual(hash('spam'), hash(str('spam')))
Walter Dörwald919497e2003-01-19 16:23:59 +0000692 hash((0,1,2,3))
693 def f(): pass
694 self.assertRaises(TypeError, hash, [])
695 self.assertRaises(TypeError, hash, {})
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000696 # Bug 1536021: Allow hash to return long objects
697 class X:
698 def __hash__(self):
699 return 2**100
700 self.assertEquals(type(hash(X())), int)
701 class Y(object):
702 def __hash__(self):
703 return 2**100
704 self.assertEquals(type(hash(Y())), int)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000705 class Z(int):
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000706 def __hash__(self):
707 return self
Guido van Rossume2a383d2007-01-15 16:59:06 +0000708 self.assertEquals(hash(Z(42)), hash(42))
Walter Dörwald919497e2003-01-19 16:23:59 +0000709
710 def test_hex(self):
711 self.assertEqual(hex(16), '0x10')
Guido van Rossume2a383d2007-01-15 16:59:06 +0000712 self.assertEqual(hex(16), '0x10')
Guido van Rossum6c9e1302003-11-29 23:52:13 +0000713 self.assertEqual(hex(-16), '-0x10')
Guido van Rossume2a383d2007-01-15 16:59:06 +0000714 self.assertEqual(hex(-16), '-0x10')
Walter Dörwald919497e2003-01-19 16:23:59 +0000715 self.assertRaises(TypeError, hex, {})
716
717 def test_id(self):
718 id(None)
719 id(1)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000720 id(1)
Walter Dörwald919497e2003-01-19 16:23:59 +0000721 id(1.0)
722 id('spam')
723 id((0,1,2,3))
724 id([0,1,2,3])
725 id({'spam': 1, 'eggs': 2, 'ham': 3})
726
Guido van Rossuma88a0332007-02-26 16:59:55 +0000727 # Test input() later, alphabetized as if it were raw_input
728
Walter Dörwald919497e2003-01-19 16:23:59 +0000729 def test_int(self):
730 self.assertEqual(int(314), 314)
731 self.assertEqual(int(3.14), 3)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000732 self.assertEqual(int(314), 314)
Walter Dörwald919497e2003-01-19 16:23:59 +0000733 # Check that conversion from float truncates towards zero
734 self.assertEqual(int(-3.14), -3)
735 self.assertEqual(int(3.9), 3)
736 self.assertEqual(int(-3.9), -3)
737 self.assertEqual(int(3.5), 3)
738 self.assertEqual(int(-3.5), -3)
739 # Different base:
Guido van Rossume2a383d2007-01-15 16:59:06 +0000740 self.assertEqual(int("10",16), 16)
Walter Dörwald919497e2003-01-19 16:23:59 +0000741 if have_unicode:
Guido van Rossumef87d6e2007-05-02 19:09:54 +0000742 self.assertEqual(int(str("10"),16), 16)
Walter Dörwald919497e2003-01-19 16:23:59 +0000743 # Test conversion from strings and various anomalies
744 for s, v in L:
745 for sign in "", "+", "-":
746 for prefix in "", " ", "\t", " \t\t ":
747 ss = prefix + sign + s
748 vv = v
749 if sign == "-" and v is not ValueError:
750 vv = -v
751 try:
752 self.assertEqual(int(ss), vv)
753 except v:
754 pass
755
Walter Dörwald70a6b492004-02-12 17:35:32 +0000756 s = repr(-1-sys.maxint)
Thomas Wouters89f507f2006-12-13 04:49:30 +0000757 x = int(s)
758 self.assertEqual(x+1, -sys.maxint)
759 self.assert_(isinstance(x, int))
Walter Dörwald919497e2003-01-19 16:23:59 +0000760 # should return long
Thomas Wouters89f507f2006-12-13 04:49:30 +0000761 self.assertEqual(int(s[1:]), sys.maxint+1)
Walter Dörwald919497e2003-01-19 16:23:59 +0000762
763 # should return long
764 x = int(1e100)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000765 self.assert_(isinstance(x, int))
Walter Dörwald919497e2003-01-19 16:23:59 +0000766 x = int(-1e100)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000767 self.assert_(isinstance(x, int))
Walter Dörwald919497e2003-01-19 16:23:59 +0000768
769
770 # SF bug 434186: 0x80000000/2 != 0x80000000>>1.
771 # Worked by accident in Windows release build, but failed in debug build.
772 # Failed in all Linux builds.
773 x = -1-sys.maxint
774 self.assertEqual(x >> 1, x//2)
775
776 self.assertRaises(ValueError, int, '123\0')
777 self.assertRaises(ValueError, int, '53', 40)
778
Thomas Wouters89f507f2006-12-13 04:49:30 +0000779 # SF bug 1545497: embedded NULs were not detected with
780 # explicit base
781 self.assertRaises(ValueError, int, '123\0', 10)
782 self.assertRaises(ValueError, int, '123\x00 245', 20)
783
Walter Dörwald919497e2003-01-19 16:23:59 +0000784 x = int('1' * 600)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000785 self.assert_(isinstance(x, int))
Walter Dörwald919497e2003-01-19 16:23:59 +0000786
787 if have_unicode:
Guido van Rossum84fc66d2007-05-03 17:18:26 +0000788 x = int(chr(0x661) * 600)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000789 self.assert_(isinstance(x, int))
Walter Dörwald919497e2003-01-19 16:23:59 +0000790
791 self.assertRaises(TypeError, int, 1, 12)
792
793 self.assertEqual(int('0123', 0), 83)
Neal Norwitz5898fa22005-11-22 05:17:40 +0000794 self.assertEqual(int('0x123', 16), 291)
Walter Dörwald919497e2003-01-19 16:23:59 +0000795
Thomas Wouters477c8d52006-05-27 19:21:47 +0000796 # SF bug 1334662: int(string, base) wrong answers
797 # Various representations of 2**32 evaluated to 0
798 # rather than 2**32 in previous versions
799
Guido van Rossume2a383d2007-01-15 16:59:06 +0000800 self.assertEqual(int('100000000000000000000000000000000', 2), 4294967296)
801 self.assertEqual(int('102002022201221111211', 3), 4294967296)
802 self.assertEqual(int('10000000000000000', 4), 4294967296)
803 self.assertEqual(int('32244002423141', 5), 4294967296)
804 self.assertEqual(int('1550104015504', 6), 4294967296)
805 self.assertEqual(int('211301422354', 7), 4294967296)
806 self.assertEqual(int('40000000000', 8), 4294967296)
807 self.assertEqual(int('12068657454', 9), 4294967296)
808 self.assertEqual(int('4294967296', 10), 4294967296)
809 self.assertEqual(int('1904440554', 11), 4294967296)
810 self.assertEqual(int('9ba461594', 12), 4294967296)
811 self.assertEqual(int('535a79889', 13), 4294967296)
812 self.assertEqual(int('2ca5b7464', 14), 4294967296)
813 self.assertEqual(int('1a20dcd81', 15), 4294967296)
814 self.assertEqual(int('100000000', 16), 4294967296)
815 self.assertEqual(int('a7ffda91', 17), 4294967296)
816 self.assertEqual(int('704he7g4', 18), 4294967296)
817 self.assertEqual(int('4f5aff66', 19), 4294967296)
818 self.assertEqual(int('3723ai4g', 20), 4294967296)
819 self.assertEqual(int('281d55i4', 21), 4294967296)
820 self.assertEqual(int('1fj8b184', 22), 4294967296)
821 self.assertEqual(int('1606k7ic', 23), 4294967296)
822 self.assertEqual(int('mb994ag', 24), 4294967296)
823 self.assertEqual(int('hek2mgl', 25), 4294967296)
824 self.assertEqual(int('dnchbnm', 26), 4294967296)
825 self.assertEqual(int('b28jpdm', 27), 4294967296)
826 self.assertEqual(int('8pfgih4', 28), 4294967296)
827 self.assertEqual(int('76beigg', 29), 4294967296)
828 self.assertEqual(int('5qmcpqg', 30), 4294967296)
829 self.assertEqual(int('4q0jto4', 31), 4294967296)
830 self.assertEqual(int('4000000', 32), 4294967296)
831 self.assertEqual(int('3aokq94', 33), 4294967296)
832 self.assertEqual(int('2qhxjli', 34), 4294967296)
833 self.assertEqual(int('2br45qb', 35), 4294967296)
834 self.assertEqual(int('1z141z4', 36), 4294967296)
Thomas Wouters477c8d52006-05-27 19:21:47 +0000835
836 # SF bug 1334662: int(string, base) wrong answers
837 # Checks for proper evaluation of 2**32 + 1
Guido van Rossume2a383d2007-01-15 16:59:06 +0000838 self.assertEqual(int('100000000000000000000000000000001', 2), 4294967297)
839 self.assertEqual(int('102002022201221111212', 3), 4294967297)
840 self.assertEqual(int('10000000000000001', 4), 4294967297)
841 self.assertEqual(int('32244002423142', 5), 4294967297)
842 self.assertEqual(int('1550104015505', 6), 4294967297)
843 self.assertEqual(int('211301422355', 7), 4294967297)
844 self.assertEqual(int('40000000001', 8), 4294967297)
845 self.assertEqual(int('12068657455', 9), 4294967297)
846 self.assertEqual(int('4294967297', 10), 4294967297)
847 self.assertEqual(int('1904440555', 11), 4294967297)
848 self.assertEqual(int('9ba461595', 12), 4294967297)
849 self.assertEqual(int('535a7988a', 13), 4294967297)
850 self.assertEqual(int('2ca5b7465', 14), 4294967297)
851 self.assertEqual(int('1a20dcd82', 15), 4294967297)
852 self.assertEqual(int('100000001', 16), 4294967297)
853 self.assertEqual(int('a7ffda92', 17), 4294967297)
854 self.assertEqual(int('704he7g5', 18), 4294967297)
855 self.assertEqual(int('4f5aff67', 19), 4294967297)
856 self.assertEqual(int('3723ai4h', 20), 4294967297)
857 self.assertEqual(int('281d55i5', 21), 4294967297)
858 self.assertEqual(int('1fj8b185', 22), 4294967297)
859 self.assertEqual(int('1606k7id', 23), 4294967297)
860 self.assertEqual(int('mb994ah', 24), 4294967297)
861 self.assertEqual(int('hek2mgm', 25), 4294967297)
862 self.assertEqual(int('dnchbnn', 26), 4294967297)
863 self.assertEqual(int('b28jpdn', 27), 4294967297)
864 self.assertEqual(int('8pfgih5', 28), 4294967297)
865 self.assertEqual(int('76beigh', 29), 4294967297)
866 self.assertEqual(int('5qmcpqh', 30), 4294967297)
867 self.assertEqual(int('4q0jto5', 31), 4294967297)
868 self.assertEqual(int('4000001', 32), 4294967297)
869 self.assertEqual(int('3aokq95', 33), 4294967297)
870 self.assertEqual(int('2qhxjlj', 34), 4294967297)
871 self.assertEqual(int('2br45qc', 35), 4294967297)
872 self.assertEqual(int('1z141z5', 36), 4294967297)
Thomas Wouters477c8d52006-05-27 19:21:47 +0000873
Brett Cannonc3647ac2005-04-26 03:45:26 +0000874 def test_intconversion(self):
875 # Test __int__()
876 class Foo0:
877 def __int__(self):
878 return 42
879
880 class Foo1(object):
881 def __int__(self):
882 return 42
883
884 class Foo2(int):
885 def __int__(self):
886 return 42
887
888 class Foo3(int):
889 def __int__(self):
890 return self
891
892 class Foo4(int):
893 def __int__(self):
Guido van Rossume2a383d2007-01-15 16:59:06 +0000894 return 42
Brett Cannonc3647ac2005-04-26 03:45:26 +0000895
896 class Foo5(int):
897 def __int__(self):
898 return 42.
899
900 self.assertEqual(int(Foo0()), 42)
901 self.assertEqual(int(Foo1()), 42)
902 self.assertEqual(int(Foo2()), 42)
903 self.assertEqual(int(Foo3()), 0)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000904 self.assertEqual(int(Foo4()), 42)
Brett Cannonc3647ac2005-04-26 03:45:26 +0000905 self.assertRaises(TypeError, int, Foo5())
906
Walter Dörwald919497e2003-01-19 16:23:59 +0000907 def test_iter(self):
908 self.assertRaises(TypeError, iter)
909 self.assertRaises(TypeError, iter, 42, 42)
910 lists = [("1", "2"), ["1", "2"], "12"]
911 if have_unicode:
Guido van Rossumef87d6e2007-05-02 19:09:54 +0000912 lists.append(str("12"))
Walter Dörwald919497e2003-01-19 16:23:59 +0000913 for l in lists:
914 i = iter(l)
Georg Brandla18af4e2007-04-21 15:47:16 +0000915 self.assertEqual(next(i), '1')
916 self.assertEqual(next(i), '2')
917 self.assertRaises(StopIteration, next, i)
Walter Dörwald919497e2003-01-19 16:23:59 +0000918
919 def test_isinstance(self):
920 class C:
921 pass
922 class D(C):
923 pass
924 class E:
925 pass
926 c = C()
927 d = D()
928 e = E()
929 self.assert_(isinstance(c, C))
930 self.assert_(isinstance(d, C))
931 self.assert_(not isinstance(e, C))
932 self.assert_(not isinstance(c, D))
933 self.assert_(not isinstance('foo', E))
934 self.assertRaises(TypeError, isinstance, E, 'foo')
935 self.assertRaises(TypeError, isinstance)
936
937 def test_issubclass(self):
938 class C:
939 pass
940 class D(C):
941 pass
942 class E:
943 pass
944 c = C()
945 d = D()
946 e = E()
947 self.assert_(issubclass(D, C))
948 self.assert_(issubclass(C, C))
949 self.assert_(not issubclass(C, D))
950 self.assertRaises(TypeError, issubclass, 'foo', E)
951 self.assertRaises(TypeError, issubclass, E, 'foo')
952 self.assertRaises(TypeError, issubclass)
953
954 def test_len(self):
955 self.assertEqual(len('123'), 3)
956 self.assertEqual(len(()), 0)
957 self.assertEqual(len((1, 2, 3, 4)), 4)
958 self.assertEqual(len([1, 2, 3, 4]), 4)
959 self.assertEqual(len({}), 0)
960 self.assertEqual(len({'a':1, 'b': 2}), 2)
961 class BadSeq:
962 def __len__(self):
963 raise ValueError
964 self.assertRaises(ValueError, len, BadSeq())
965
966 def test_list(self):
967 self.assertEqual(list([]), [])
968 l0_3 = [0, 1, 2, 3]
969 l0_3_bis = list(l0_3)
970 self.assertEqual(l0_3, l0_3_bis)
971 self.assert_(l0_3 is not l0_3_bis)
972 self.assertEqual(list(()), [])
973 self.assertEqual(list((0, 1, 2, 3)), [0, 1, 2, 3])
974 self.assertEqual(list(''), [])
975 self.assertEqual(list('spam'), ['s', 'p', 'a', 'm'])
976
977 if sys.maxint == 0x7fffffff:
978 # This test can currently only work on 32-bit machines.
979 # XXX If/when PySequence_Length() returns a ssize_t, it should be
980 # XXX re-enabled.
981 # Verify clearing of bug #556025.
982 # This assumes that the max data size (sys.maxint) == max
983 # address size this also assumes that the address size is at
984 # least 4 bytes with 8 byte addresses, the bug is not well
985 # tested
986 #
987 # Note: This test is expected to SEGV under Cygwin 1.3.12 or
988 # earlier due to a newlib bug. See the following mailing list
989 # thread for the details:
990
991 # http://sources.redhat.com/ml/newlib/2002/msg00369.html
Guido van Rossum805365e2007-05-07 22:24:25 +0000992 self.assertRaises(MemoryError, list, range(sys.maxint // 2))
Walter Dörwald919497e2003-01-19 16:23:59 +0000993
Raymond Hettingeraa241e02004-09-26 19:24:20 +0000994 # This code used to segfault in Py2.4a3
995 x = []
996 x.extend(-y for y in x)
997 self.assertEqual(x, [])
998
Walter Dörwald919497e2003-01-19 16:23:59 +0000999 def test_long(self):
Guido van Rossume2a383d2007-01-15 16:59:06 +00001000 self.assertEqual(int(314), 314)
1001 self.assertEqual(int(3.14), 3)
1002 self.assertEqual(int(314), 314)
Walter Dörwald919497e2003-01-19 16:23:59 +00001003 # Check that conversion from float truncates towards zero
Guido van Rossume2a383d2007-01-15 16:59:06 +00001004 self.assertEqual(int(-3.14), -3)
1005 self.assertEqual(int(3.9), 3)
1006 self.assertEqual(int(-3.9), -3)
1007 self.assertEqual(int(3.5), 3)
1008 self.assertEqual(int(-3.5), -3)
1009 self.assertEqual(int("-3"), -3)
Walter Dörwald919497e2003-01-19 16:23:59 +00001010 if have_unicode:
Guido van Rossumef87d6e2007-05-02 19:09:54 +00001011 self.assertEqual(int(str("-3")), -3)
Walter Dörwald919497e2003-01-19 16:23:59 +00001012 # Different base:
Guido van Rossume2a383d2007-01-15 16:59:06 +00001013 self.assertEqual(int("10",16), 16)
Walter Dörwald919497e2003-01-19 16:23:59 +00001014 if have_unicode:
Guido van Rossumef87d6e2007-05-02 19:09:54 +00001015 self.assertEqual(int(str("10"),16), 16)
Walter Dörwald919497e2003-01-19 16:23:59 +00001016 # Check conversions from string (same test set as for int(), and then some)
1017 LL = [
Guido van Rossume2a383d2007-01-15 16:59:06 +00001018 ('1' + '0'*20, 10**20),
1019 ('1' + '0'*100, 10**100)
Walter Dörwald919497e2003-01-19 16:23:59 +00001020 ]
Walter Dörwaldc8cb5d92003-08-15 17:52:39 +00001021 L2 = L[:]
Walter Dörwald919497e2003-01-19 16:23:59 +00001022 if have_unicode:
1023 L2 += [
Guido van Rossumef87d6e2007-05-02 19:09:54 +00001024 (str('1') + str('0')*20, 10**20),
1025 (str('1') + str('0')*100, 10**100),
Walter Dörwald919497e2003-01-19 16:23:59 +00001026 ]
1027 for s, v in L2 + LL:
1028 for sign in "", "+", "-":
1029 for prefix in "", " ", "\t", " \t\t ":
1030 ss = prefix + sign + s
1031 vv = v
1032 if sign == "-" and v is not ValueError:
1033 vv = -v
1034 try:
Guido van Rossume2a383d2007-01-15 16:59:06 +00001035 self.assertEqual(int(ss), int(vv))
Walter Dörwald919497e2003-01-19 16:23:59 +00001036 except v:
1037 pass
1038
Guido van Rossume2a383d2007-01-15 16:59:06 +00001039 self.assertRaises(ValueError, int, '123\0')
1040 self.assertRaises(ValueError, int, '53', 40)
1041 self.assertRaises(TypeError, int, 1, 12)
Walter Dörwald919497e2003-01-19 16:23:59 +00001042
Guido van Rossumd8faa362007-04-27 19:54:29 +00001043 # SF patch #1638879: embedded NULs were not detected with
1044 # explicit base
1045 self.assertRaises(ValueError, int, '123\0', 10)
1046 self.assertRaises(ValueError, int, '123\x00 245', 20)
1047
Guido van Rossume2a383d2007-01-15 16:59:06 +00001048 self.assertEqual(int('100000000000000000000000000000000', 2),
Thomas Wouters477c8d52006-05-27 19:21:47 +00001049 4294967296)
Guido van Rossume2a383d2007-01-15 16:59:06 +00001050 self.assertEqual(int('102002022201221111211', 3), 4294967296)
1051 self.assertEqual(int('10000000000000000', 4), 4294967296)
1052 self.assertEqual(int('32244002423141', 5), 4294967296)
1053 self.assertEqual(int('1550104015504', 6), 4294967296)
1054 self.assertEqual(int('211301422354', 7), 4294967296)
1055 self.assertEqual(int('40000000000', 8), 4294967296)
1056 self.assertEqual(int('12068657454', 9), 4294967296)
1057 self.assertEqual(int('4294967296', 10), 4294967296)
1058 self.assertEqual(int('1904440554', 11), 4294967296)
1059 self.assertEqual(int('9ba461594', 12), 4294967296)
1060 self.assertEqual(int('535a79889', 13), 4294967296)
1061 self.assertEqual(int('2ca5b7464', 14), 4294967296)
1062 self.assertEqual(int('1a20dcd81', 15), 4294967296)
1063 self.assertEqual(int('100000000', 16), 4294967296)
1064 self.assertEqual(int('a7ffda91', 17), 4294967296)
1065 self.assertEqual(int('704he7g4', 18), 4294967296)
1066 self.assertEqual(int('4f5aff66', 19), 4294967296)
1067 self.assertEqual(int('3723ai4g', 20), 4294967296)
1068 self.assertEqual(int('281d55i4', 21), 4294967296)
1069 self.assertEqual(int('1fj8b184', 22), 4294967296)
1070 self.assertEqual(int('1606k7ic', 23), 4294967296)
1071 self.assertEqual(int('mb994ag', 24), 4294967296)
1072 self.assertEqual(int('hek2mgl', 25), 4294967296)
1073 self.assertEqual(int('dnchbnm', 26), 4294967296)
1074 self.assertEqual(int('b28jpdm', 27), 4294967296)
1075 self.assertEqual(int('8pfgih4', 28), 4294967296)
1076 self.assertEqual(int('76beigg', 29), 4294967296)
1077 self.assertEqual(int('5qmcpqg', 30), 4294967296)
1078 self.assertEqual(int('4q0jto4', 31), 4294967296)
1079 self.assertEqual(int('4000000', 32), 4294967296)
1080 self.assertEqual(int('3aokq94', 33), 4294967296)
1081 self.assertEqual(int('2qhxjli', 34), 4294967296)
1082 self.assertEqual(int('2br45qb', 35), 4294967296)
1083 self.assertEqual(int('1z141z4', 36), 4294967296)
Thomas Wouters477c8d52006-05-27 19:21:47 +00001084
Guido van Rossume2a383d2007-01-15 16:59:06 +00001085 self.assertEqual(int('100000000000000000000000000000001', 2),
Thomas Wouters477c8d52006-05-27 19:21:47 +00001086 4294967297)
Guido van Rossume2a383d2007-01-15 16:59:06 +00001087 self.assertEqual(int('102002022201221111212', 3), 4294967297)
1088 self.assertEqual(int('10000000000000001', 4), 4294967297)
1089 self.assertEqual(int('32244002423142', 5), 4294967297)
1090 self.assertEqual(int('1550104015505', 6), 4294967297)
1091 self.assertEqual(int('211301422355', 7), 4294967297)
1092 self.assertEqual(int('40000000001', 8), 4294967297)
1093 self.assertEqual(int('12068657455', 9), 4294967297)
1094 self.assertEqual(int('4294967297', 10), 4294967297)
1095 self.assertEqual(int('1904440555', 11), 4294967297)
1096 self.assertEqual(int('9ba461595', 12), 4294967297)
1097 self.assertEqual(int('535a7988a', 13), 4294967297)
1098 self.assertEqual(int('2ca5b7465', 14), 4294967297)
1099 self.assertEqual(int('1a20dcd82', 15), 4294967297)
1100 self.assertEqual(int('100000001', 16), 4294967297)
1101 self.assertEqual(int('a7ffda92', 17), 4294967297)
1102 self.assertEqual(int('704he7g5', 18), 4294967297)
1103 self.assertEqual(int('4f5aff67', 19), 4294967297)
1104 self.assertEqual(int('3723ai4h', 20), 4294967297)
1105 self.assertEqual(int('281d55i5', 21), 4294967297)
1106 self.assertEqual(int('1fj8b185', 22), 4294967297)
1107 self.assertEqual(int('1606k7id', 23), 4294967297)
1108 self.assertEqual(int('mb994ah', 24), 4294967297)
1109 self.assertEqual(int('hek2mgm', 25), 4294967297)
1110 self.assertEqual(int('dnchbnn', 26), 4294967297)
1111 self.assertEqual(int('b28jpdn', 27), 4294967297)
1112 self.assertEqual(int('8pfgih5', 28), 4294967297)
1113 self.assertEqual(int('76beigh', 29), 4294967297)
1114 self.assertEqual(int('5qmcpqh', 30), 4294967297)
1115 self.assertEqual(int('4q0jto5', 31), 4294967297)
1116 self.assertEqual(int('4000001', 32), 4294967297)
1117 self.assertEqual(int('3aokq95', 33), 4294967297)
1118 self.assertEqual(int('2qhxjlj', 34), 4294967297)
1119 self.assertEqual(int('2br45qc', 35), 4294967297)
1120 self.assertEqual(int('1z141z5', 36), 4294967297)
Thomas Wouters477c8d52006-05-27 19:21:47 +00001121
1122
Brett Cannonc3647ac2005-04-26 03:45:26 +00001123 def test_longconversion(self):
1124 # Test __long__()
1125 class Foo0:
1126 def __long__(self):
Guido van Rossume2a383d2007-01-15 16:59:06 +00001127 return 42
Brett Cannonc3647ac2005-04-26 03:45:26 +00001128
1129 class Foo1(object):
1130 def __long__(self):
Guido van Rossume2a383d2007-01-15 16:59:06 +00001131 return 42
Brett Cannonc3647ac2005-04-26 03:45:26 +00001132
Guido van Rossume2a383d2007-01-15 16:59:06 +00001133 class Foo2(int):
Brett Cannonc3647ac2005-04-26 03:45:26 +00001134 def __long__(self):
1135 return 42
1136
Guido van Rossume2a383d2007-01-15 16:59:06 +00001137 class Foo3(int):
1138 def __long__(self):
1139 return self
1140
1141 class Foo4(int):
1142 def __long__(self):
1143 return 42
1144
1145 class Foo5(int):
Brett Cannonc3647ac2005-04-26 03:45:26 +00001146 def __long__(self):
1147 return 42.
1148
Guido van Rossume2a383d2007-01-15 16:59:06 +00001149 self.assertEqual(int(Foo0()), 42)
1150 self.assertEqual(int(Foo1()), 42)
Guido van Rossumd8faa362007-04-27 19:54:29 +00001151 # XXX invokes __int__ now
Guido van Rossumddefaf32007-01-14 03:31:43 +00001152 # self.assertEqual(long(Foo2()), 42L)
Guido van Rossume2a383d2007-01-15 16:59:06 +00001153 self.assertEqual(int(Foo3()), 0)
Guido van Rossumd8faa362007-04-27 19:54:29 +00001154 # XXX likewise
Guido van Rossumddefaf32007-01-14 03:31:43 +00001155 # self.assertEqual(long(Foo4()), 42)
1156 # self.assertRaises(TypeError, long, Foo5())
Brett Cannonc3647ac2005-04-26 03:45:26 +00001157
Walter Dörwald919497e2003-01-19 16:23:59 +00001158 def test_map(self):
1159 self.assertEqual(
1160 map(None, 'hello world'),
1161 ['h','e','l','l','o',' ','w','o','r','l','d']
1162 )
1163 self.assertEqual(
1164 map(None, 'abcd', 'efg'),
1165 [('a', 'e'), ('b', 'f'), ('c', 'g'), ('d', None)]
1166 )
1167 self.assertEqual(
1168 map(None, range(10)),
1169 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
1170 )
1171 self.assertEqual(
1172 map(lambda x: x*x, range(1,4)),
1173 [1, 4, 9]
1174 )
1175 try:
1176 from math import sqrt
1177 except ImportError:
1178 def sqrt(x):
1179 return pow(x, 0.5)
1180 self.assertEqual(
1181 map(lambda x: map(sqrt,x), [[16, 4], [81, 9]]),
1182 [[4.0, 2.0], [9.0, 3.0]]
1183 )
1184 self.assertEqual(
1185 map(lambda x, y: x+y, [1,3,2], [9,1,4]),
1186 [10, 4, 6]
1187 )
1188
1189 def plus(*v):
1190 accu = 0
1191 for i in v: accu = accu + i
1192 return accu
1193 self.assertEqual(
1194 map(plus, [1, 3, 7]),
1195 [1, 3, 7]
1196 )
1197 self.assertEqual(
1198 map(plus, [1, 3, 7], [4, 9, 2]),
1199 [1+4, 3+9, 7+2]
1200 )
1201 self.assertEqual(
1202 map(plus, [1, 3, 7], [4, 9, 2], [1, 1, 0]),
1203 [1+4+1, 3+9+1, 7+2+0]
1204 )
1205 self.assertEqual(
1206 map(None, Squares(10)),
1207 [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
1208 )
1209 self.assertEqual(
1210 map(int, Squares(10)),
1211 [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
1212 )
1213 self.assertEqual(
1214 map(None, Squares(3), Squares(2)),
1215 [(0,0), (1,1), (4,None)]
1216 )
Guido van Rossum47b9ff62006-08-24 00:41:19 +00001217 def Max(a, b):
1218 if a is None:
1219 return b
1220 if b is None:
1221 return a
1222 return max(a, b)
Walter Dörwald919497e2003-01-19 16:23:59 +00001223 self.assertEqual(
Guido van Rossum47b9ff62006-08-24 00:41:19 +00001224 map(Max, Squares(3), Squares(2)),
Walter Dörwald919497e2003-01-19 16:23:59 +00001225 [0, 1, 4]
1226 )
1227 self.assertRaises(TypeError, map)
1228 self.assertRaises(TypeError, map, lambda x: x, 42)
1229 self.assertEqual(map(None, [42]), [42])
1230 class BadSeq:
1231 def __getitem__(self, index):
1232 raise ValueError
1233 self.assertRaises(ValueError, map, lambda x: x, BadSeq())
Neal Norwitzfcf44352005-11-27 20:37:43 +00001234 def badfunc(x):
1235 raise RuntimeError
1236 self.assertRaises(RuntimeError, map, badfunc, range(5))
Walter Dörwald919497e2003-01-19 16:23:59 +00001237
1238 def test_max(self):
1239 self.assertEqual(max('123123'), '3')
1240 self.assertEqual(max(1, 2, 3), 3)
1241 self.assertEqual(max((1, 2, 3, 1, 2, 3)), 3)
1242 self.assertEqual(max([1, 2, 3, 1, 2, 3]), 3)
1243
Guido van Rossume2a383d2007-01-15 16:59:06 +00001244 self.assertEqual(max(1, 2, 3.0), 3.0)
1245 self.assertEqual(max(1, 2.0, 3), 3)
1246 self.assertEqual(max(1.0, 2, 3), 3)
Walter Dörwald919497e2003-01-19 16:23:59 +00001247
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001248 for stmt in (
1249 "max(key=int)", # no args
1250 "max(1, key=int)", # single arg not iterable
1251 "max(1, 2, keystone=int)", # wrong keyword
1252 "max(1, 2, key=int, abc=int)", # two many keywords
1253 "max(1, 2, key=1)", # keyfunc is not callable
1254 ):
Tim Peters7f061872004-12-07 21:17:46 +00001255 try:
Georg Brandl7cae87c2006-09-06 06:51:57 +00001256 exec(stmt, globals())
Tim Peters7f061872004-12-07 21:17:46 +00001257 except TypeError:
1258 pass
1259 else:
1260 self.fail(stmt)
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001261
1262 self.assertEqual(max((1,), key=neg), 1) # one elem iterable
1263 self.assertEqual(max((1,2), key=neg), 1) # two elem iterable
1264 self.assertEqual(max(1, 2, key=neg), 1) # two elems
1265
1266 data = [random.randrange(200) for i in range(100)]
1267 keys = dict((elem, random.randrange(50)) for elem in data)
1268 f = keys.__getitem__
1269 self.assertEqual(max(data, key=f),
1270 sorted(reversed(data), key=f)[-1])
1271
Walter Dörwald919497e2003-01-19 16:23:59 +00001272 def test_min(self):
1273 self.assertEqual(min('123123'), '1')
1274 self.assertEqual(min(1, 2, 3), 1)
1275 self.assertEqual(min((1, 2, 3, 1, 2, 3)), 1)
1276 self.assertEqual(min([1, 2, 3, 1, 2, 3]), 1)
1277
Guido van Rossume2a383d2007-01-15 16:59:06 +00001278 self.assertEqual(min(1, 2, 3.0), 1)
1279 self.assertEqual(min(1, 2.0, 3), 1)
1280 self.assertEqual(min(1.0, 2, 3), 1.0)
Walter Dörwald919497e2003-01-19 16:23:59 +00001281
1282 self.assertRaises(TypeError, min)
1283 self.assertRaises(TypeError, min, 42)
1284 self.assertRaises(ValueError, min, ())
1285 class BadSeq:
1286 def __getitem__(self, index):
1287 raise ValueError
1288 self.assertRaises(ValueError, min, BadSeq())
1289 class BadNumber:
1290 def __cmp__(self, other):
1291 raise ValueError
Guido van Rossum47b9ff62006-08-24 00:41:19 +00001292 self.assertRaises(TypeError, min, (42, BadNumber()))
Walter Dörwald919497e2003-01-19 16:23:59 +00001293
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001294 for stmt in (
1295 "min(key=int)", # no args
1296 "min(1, key=int)", # single arg not iterable
1297 "min(1, 2, keystone=int)", # wrong keyword
1298 "min(1, 2, key=int, abc=int)", # two many keywords
1299 "min(1, 2, key=1)", # keyfunc is not callable
1300 ):
Tim Peters7f061872004-12-07 21:17:46 +00001301 try:
Georg Brandl7cae87c2006-09-06 06:51:57 +00001302 exec(stmt, globals())
Tim Peters7f061872004-12-07 21:17:46 +00001303 except TypeError:
1304 pass
1305 else:
1306 self.fail(stmt)
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001307
1308 self.assertEqual(min((1,), key=neg), 1) # one elem iterable
1309 self.assertEqual(min((1,2), key=neg), 2) # two elem iterable
1310 self.assertEqual(min(1, 2, key=neg), 2) # two elems
1311
1312 data = [random.randrange(200) for i in range(100)]
1313 keys = dict((elem, random.randrange(50)) for elem in data)
1314 f = keys.__getitem__
1315 self.assertEqual(min(data, key=f),
1316 sorted(data, key=f)[0])
1317
Georg Brandla18af4e2007-04-21 15:47:16 +00001318 def test_next(self):
1319 it = iter(range(2))
1320 self.assertEqual(next(it), 0)
1321 self.assertEqual(next(it), 1)
1322 self.assertRaises(StopIteration, next, it)
1323 self.assertRaises(StopIteration, next, it)
1324 self.assertEquals(next(it, 42), 42)
1325
1326 class Iter(object):
1327 def __iter__(self):
1328 return self
1329 def __next__(self):
1330 raise StopIteration
1331
1332 it = iter(Iter())
1333 self.assertEquals(next(it, 42), 42)
1334 self.assertRaises(StopIteration, next, it)
1335
1336 def gen():
1337 yield 1
1338 return
1339
1340 it = gen()
1341 self.assertEquals(next(it), 1)
1342 self.assertRaises(StopIteration, next, it)
1343 self.assertEquals(next(it, 42), 42)
1344
Walter Dörwald919497e2003-01-19 16:23:59 +00001345 def test_oct(self):
1346 self.assertEqual(oct(100), '0144')
Guido van Rossume2a383d2007-01-15 16:59:06 +00001347 self.assertEqual(oct(100), '0144')
Guido van Rossum6c9e1302003-11-29 23:52:13 +00001348 self.assertEqual(oct(-100), '-0144')
Guido van Rossume2a383d2007-01-15 16:59:06 +00001349 self.assertEqual(oct(-100), '-0144')
Walter Dörwald919497e2003-01-19 16:23:59 +00001350 self.assertRaises(TypeError, oct, ())
1351
1352 def write_testfile(self):
Guido van Rossuma88a0332007-02-26 16:59:55 +00001353 # NB the first 4 lines are also used to test input, below
Walter Dörwald919497e2003-01-19 16:23:59 +00001354 fp = open(TESTFN, 'w')
1355 try:
1356 fp.write('1+1\n')
1357 fp.write('1+1\n')
1358 fp.write('The quick brown fox jumps over the lazy dog')
1359 fp.write('.\n')
1360 fp.write('Dear John\n')
1361 fp.write('XXX'*100)
1362 fp.write('YYY'*100)
1363 finally:
1364 fp.close()
1365
1366 def test_open(self):
1367 self.write_testfile()
1368 fp = open(TESTFN, 'r')
1369 try:
1370 self.assertEqual(fp.readline(4), '1+1\n')
1371 self.assertEqual(fp.readline(4), '1+1\n')
1372 self.assertEqual(fp.readline(), 'The quick brown fox jumps over the lazy dog.\n')
1373 self.assertEqual(fp.readline(4), 'Dear')
1374 self.assertEqual(fp.readline(100), ' John\n')
1375 self.assertEqual(fp.read(300), 'XXX'*100)
1376 self.assertEqual(fp.read(1000), 'YYY'*100)
1377 finally:
1378 fp.close()
1379 unlink(TESTFN)
1380
1381 def test_ord(self):
1382 self.assertEqual(ord(' '), 32)
1383 self.assertEqual(ord('A'), 65)
1384 self.assertEqual(ord('a'), 97)
Guido van Rossumf9e91c92007-05-08 21:05:48 +00001385 self.assertEqual(ord('\x80'), 128)
1386 self.assertEqual(ord('\xff'), 255)
1387
1388 self.assertEqual(ord(b' '), 32)
1389 self.assertEqual(ord(b'A'), 65)
1390 self.assertEqual(ord(b'a'), 97)
1391 self.assertEqual(ord(b'\x80'), 128)
1392 self.assertEqual(ord(b'\xff'), 255)
1393
Walter Dörwald919497e2003-01-19 16:23:59 +00001394 if have_unicode:
Guido van Rossum84fc66d2007-05-03 17:18:26 +00001395 self.assertEqual(ord(chr(sys.maxunicode)), sys.maxunicode)
Walter Dörwald919497e2003-01-19 16:23:59 +00001396 self.assertRaises(TypeError, ord, 42)
Walter Dörwald4e41a4b2005-08-03 17:09:04 +00001397 if have_unicode:
Guido van Rossumef87d6e2007-05-02 19:09:54 +00001398 self.assertRaises(TypeError, ord, str("12"))
Walter Dörwald919497e2003-01-19 16:23:59 +00001399
1400 def test_pow(self):
1401 self.assertEqual(pow(0,0), 1)
1402 self.assertEqual(pow(0,1), 0)
1403 self.assertEqual(pow(1,0), 1)
1404 self.assertEqual(pow(1,1), 1)
1405
1406 self.assertEqual(pow(2,0), 1)
1407 self.assertEqual(pow(2,10), 1024)
1408 self.assertEqual(pow(2,20), 1024*1024)
1409 self.assertEqual(pow(2,30), 1024*1024*1024)
1410
1411 self.assertEqual(pow(-2,0), 1)
1412 self.assertEqual(pow(-2,1), -2)
1413 self.assertEqual(pow(-2,2), 4)
1414 self.assertEqual(pow(-2,3), -8)
1415
Guido van Rossume2a383d2007-01-15 16:59:06 +00001416 self.assertEqual(pow(0,0), 1)
1417 self.assertEqual(pow(0,1), 0)
1418 self.assertEqual(pow(1,0), 1)
1419 self.assertEqual(pow(1,1), 1)
Walter Dörwald919497e2003-01-19 16:23:59 +00001420
Guido van Rossume2a383d2007-01-15 16:59:06 +00001421 self.assertEqual(pow(2,0), 1)
1422 self.assertEqual(pow(2,10), 1024)
1423 self.assertEqual(pow(2,20), 1024*1024)
1424 self.assertEqual(pow(2,30), 1024*1024*1024)
Walter Dörwald919497e2003-01-19 16:23:59 +00001425
Guido van Rossume2a383d2007-01-15 16:59:06 +00001426 self.assertEqual(pow(-2,0), 1)
1427 self.assertEqual(pow(-2,1), -2)
1428 self.assertEqual(pow(-2,2), 4)
1429 self.assertEqual(pow(-2,3), -8)
Walter Dörwald919497e2003-01-19 16:23:59 +00001430
1431 self.assertAlmostEqual(pow(0.,0), 1.)
1432 self.assertAlmostEqual(pow(0.,1), 0.)
1433 self.assertAlmostEqual(pow(1.,0), 1.)
1434 self.assertAlmostEqual(pow(1.,1), 1.)
1435
1436 self.assertAlmostEqual(pow(2.,0), 1.)
1437 self.assertAlmostEqual(pow(2.,10), 1024.)
1438 self.assertAlmostEqual(pow(2.,20), 1024.*1024.)
1439 self.assertAlmostEqual(pow(2.,30), 1024.*1024.*1024.)
1440
1441 self.assertAlmostEqual(pow(-2.,0), 1.)
1442 self.assertAlmostEqual(pow(-2.,1), -2.)
1443 self.assertAlmostEqual(pow(-2.,2), 4.)
1444 self.assertAlmostEqual(pow(-2.,3), -8.)
1445
Guido van Rossume2a383d2007-01-15 16:59:06 +00001446 for x in 2, 2, 2.0:
1447 for y in 10, 10, 10.0:
1448 for z in 1000, 1000, 1000.0:
Walter Dörwald919497e2003-01-19 16:23:59 +00001449 if isinstance(x, float) or \
1450 isinstance(y, float) or \
1451 isinstance(z, float):
1452 self.assertRaises(TypeError, pow, x, y, z)
1453 else:
1454 self.assertAlmostEqual(pow(x, y, z), 24.0)
1455
1456 self.assertRaises(TypeError, pow, -1, -2, 3)
1457 self.assertRaises(ValueError, pow, 1, 2, 0)
Guido van Rossume2a383d2007-01-15 16:59:06 +00001458 self.assertRaises(TypeError, pow, -1, -2, 3)
1459 self.assertRaises(ValueError, pow, 1, 2, 0)
Walter Dörwald919497e2003-01-19 16:23:59 +00001460 self.assertRaises(ValueError, pow, -342.43, 0.234)
1461
1462 self.assertRaises(TypeError, pow)
1463
1464 def test_range(self):
Guido van Rossum805365e2007-05-07 22:24:25 +00001465 self.assertEqual(list(range(3)), [0, 1, 2])
1466 self.assertEqual(list(range(1, 5)), [1, 2, 3, 4])
1467 self.assertEqual(list(range(0)), [])
1468 self.assertEqual(list(range(-3)), [])
1469 self.assertEqual(list(range(1, 10, 3)), [1, 4, 7])
1470 #self.assertEqual(list(range(5, -5, -3)), [5, 2, -1, -4])
Walter Dörwald919497e2003-01-19 16:23:59 +00001471
Guido van Rossum805365e2007-05-07 22:24:25 +00001472 """ XXX(nnorwitz):
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001473 # Now test range() with longs
Guido van Rossum805365e2007-05-07 22:24:25 +00001474 self.assertEqual(list(range(-2**100)), [])
1475 self.assertEqual(list(range(0, -2**100)), [])
1476 self.assertEqual(list(range(0, 2**100, -1)), [])
1477 self.assertEqual(list(range(0, 2**100, -1)), [])
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001478
Guido van Rossume2a383d2007-01-15 16:59:06 +00001479 a = int(10 * sys.maxint)
1480 b = int(100 * sys.maxint)
1481 c = int(50 * sys.maxint)
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001482
Guido van Rossum805365e2007-05-07 22:24:25 +00001483 self.assertEqual(list(range(a, a+2)), [a, a+1])
1484 self.assertEqual(list(range(a+2, a, -1)), [a+2, a+1])
1485 self.assertEqual(list(range(a+4, a, -2)), [a+4, a+2])
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001486
Guido van Rossum805365e2007-05-07 22:24:25 +00001487 seq = list(range(a, b, c))
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001488 self.assert_(a in seq)
1489 self.assert_(b not in seq)
1490 self.assertEqual(len(seq), 2)
1491
Guido van Rossum805365e2007-05-07 22:24:25 +00001492 seq = list(range(b, a, -c))
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001493 self.assert_(b in seq)
1494 self.assert_(a not in seq)
1495 self.assertEqual(len(seq), 2)
1496
Guido van Rossum805365e2007-05-07 22:24:25 +00001497 seq = list(range(-a, -b, -c))
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001498 self.assert_(-a in seq)
1499 self.assert_(-b not in seq)
1500 self.assertEqual(len(seq), 2)
1501
Walter Dörwald919497e2003-01-19 16:23:59 +00001502 self.assertRaises(TypeError, range)
1503 self.assertRaises(TypeError, range, 1, 2, 3, 4)
1504 self.assertRaises(ValueError, range, 1, 2, 0)
Guido van Rossume2a383d2007-01-15 16:59:06 +00001505 self.assertRaises(ValueError, range, a, a + 1, int(0))
Neal Norwitzfcf44352005-11-27 20:37:43 +00001506
1507 class badzero(int):
Guido van Rossum47b9ff62006-08-24 00:41:19 +00001508 def __eq__(self, other):
Neal Norwitzfcf44352005-11-27 20:37:43 +00001509 raise RuntimeError
Guido van Rossum47b9ff62006-08-24 00:41:19 +00001510 __ne__ = __lt__ = __gt__ = __le__ = __ge__ = __eq__
1511
1512 # XXX This won't (but should!) raise RuntimeError if a is an int...
Neal Norwitzfcf44352005-11-27 20:37:43 +00001513 self.assertRaises(RuntimeError, range, a, a + 1, badzero(1))
Guido van Rossum805365e2007-05-07 22:24:25 +00001514 """
Walter Dörwald919497e2003-01-19 16:23:59 +00001515
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001516 # Reject floats when it would require PyLongs to represent.
1517 # (smaller floats still accepted, but deprecated)
Tim Peters299b3df2003-04-15 14:40:03 +00001518 self.assertRaises(TypeError, range, 1e100, 1e101, 1e101)
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001519
Walter Dörwald357981e2003-04-15 18:59:28 +00001520 self.assertRaises(TypeError, range, 0, "spam")
1521 self.assertRaises(TypeError, range, 0, 42, "spam")
1522
Guido van Rossum805365e2007-05-07 22:24:25 +00001523 #NEAL self.assertRaises(OverflowError, range, -sys.maxint, sys.maxint)
1524 #NEAL self.assertRaises(OverflowError, range, 0, 2*sys.maxint)
1525
1526 self.assertRaises(OverflowError, len, range(0, sys.maxint**10))
Walter Dörwald357981e2003-04-15 18:59:28 +00001527
Guido van Rossuma88a0332007-02-26 16:59:55 +00001528 def test_input(self):
1529 self.write_testfile()
1530 fp = open(TESTFN, 'r')
1531 savestdin = sys.stdin
1532 savestdout = sys.stdout # Eats the echo
1533 try:
1534 sys.stdin = fp
1535 sys.stdout = BitBucket()
1536 self.assertEqual(input(), "1+1")
1537 self.assertEqual(input('testing\n'), "1+1")
1538 self.assertEqual(input(), 'The quick brown fox jumps over the lazy dog.')
1539 self.assertEqual(input('testing\n'), 'Dear John')
1540
1541 # SF 1535165: don't segfault on closed stdin
1542 # sys.stdout must be a regular file for triggering
1543 sys.stdout = savestdout
1544 sys.stdin.close()
1545 self.assertRaises(ValueError, input)
1546
1547 sys.stdout = BitBucket()
1548 sys.stdin = cStringIO.StringIO("NULL\0")
1549 self.assertRaises(TypeError, input, 42, 42)
1550 sys.stdin = cStringIO.StringIO(" 'whitespace'")
1551 self.assertEqual(input(), " 'whitespace'")
1552 sys.stdin = cStringIO.StringIO()
1553 self.assertRaises(EOFError, input)
1554
1555 del sys.stdout
1556 self.assertRaises(RuntimeError, input, 'prompt')
1557 del sys.stdin
1558 self.assertRaises(RuntimeError, input, 'prompt')
1559 finally:
1560 sys.stdin = savestdin
1561 sys.stdout = savestdout
1562 fp.close()
1563 unlink(TESTFN)
1564
Walter Dörwald919497e2003-01-19 16:23:59 +00001565 def test_reload(self):
1566 import marshal
1567 reload(marshal)
1568 import string
1569 reload(string)
1570 ## import sys
1571 ## self.assertRaises(ImportError, reload, sys)
1572
1573 def test_repr(self):
1574 self.assertEqual(repr(''), '\'\'')
1575 self.assertEqual(repr(0), '0')
Guido van Rossume2a383d2007-01-15 16:59:06 +00001576 self.assertEqual(repr(0), '0')
Walter Dörwald919497e2003-01-19 16:23:59 +00001577 self.assertEqual(repr(()), '()')
1578 self.assertEqual(repr([]), '[]')
1579 self.assertEqual(repr({}), '{}')
1580 a = []
1581 a.append(a)
1582 self.assertEqual(repr(a), '[[...]]')
1583 a = {}
1584 a[0] = a
1585 self.assertEqual(repr(a), '{0: {...}}')
1586
1587 def test_round(self):
1588 self.assertEqual(round(0.0), 0.0)
1589 self.assertEqual(round(1.0), 1.0)
1590 self.assertEqual(round(10.0), 10.0)
1591 self.assertEqual(round(1000000000.0), 1000000000.0)
1592 self.assertEqual(round(1e20), 1e20)
1593
1594 self.assertEqual(round(-1.0), -1.0)
1595 self.assertEqual(round(-10.0), -10.0)
1596 self.assertEqual(round(-1000000000.0), -1000000000.0)
1597 self.assertEqual(round(-1e20), -1e20)
1598
1599 self.assertEqual(round(0.1), 0.0)
1600 self.assertEqual(round(1.1), 1.0)
1601 self.assertEqual(round(10.1), 10.0)
1602 self.assertEqual(round(1000000000.1), 1000000000.0)
1603
1604 self.assertEqual(round(-1.1), -1.0)
1605 self.assertEqual(round(-10.1), -10.0)
1606 self.assertEqual(round(-1000000000.1), -1000000000.0)
1607
1608 self.assertEqual(round(0.9), 1.0)
1609 self.assertEqual(round(9.9), 10.0)
1610 self.assertEqual(round(999999999.9), 1000000000.0)
1611
1612 self.assertEqual(round(-0.9), -1.0)
1613 self.assertEqual(round(-9.9), -10.0)
1614 self.assertEqual(round(-999999999.9), -1000000000.0)
1615
1616 self.assertEqual(round(-8.0, -1), -10.0)
1617
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001618 # test new kwargs
1619 self.assertEqual(round(number=-8.0, ndigits=-1), -10.0)
1620
Walter Dörwald919497e2003-01-19 16:23:59 +00001621 self.assertRaises(TypeError, round)
1622
1623 def test_setattr(self):
Tim Petersf2715e02003-02-19 02:35:07 +00001624 setattr(sys, 'spam', 1)
1625 self.assertEqual(sys.spam, 1)
1626 self.assertRaises(TypeError, setattr, sys, 1, 'spam')
1627 self.assertRaises(TypeError, setattr)
Walter Dörwald919497e2003-01-19 16:23:59 +00001628
1629 def test_str(self):
1630 self.assertEqual(str(''), '')
1631 self.assertEqual(str(0), '0')
Guido van Rossume2a383d2007-01-15 16:59:06 +00001632 self.assertEqual(str(0), '0')
Walter Dörwald919497e2003-01-19 16:23:59 +00001633 self.assertEqual(str(()), '()')
1634 self.assertEqual(str([]), '[]')
1635 self.assertEqual(str({}), '{}')
1636 a = []
1637 a.append(a)
1638 self.assertEqual(str(a), '[[...]]')
1639 a = {}
1640 a[0] = a
1641 self.assertEqual(str(a), '{0: {...}}')
1642
Alex Martellia70b1912003-04-22 08:12:33 +00001643 def test_sum(self):
1644 self.assertEqual(sum([]), 0)
Guido van Rossum805365e2007-05-07 22:24:25 +00001645 self.assertEqual(sum(list(range(2,8))), 27)
1646 self.assertEqual(sum(iter(list(range(2,8)))), 27)
Alex Martellia70b1912003-04-22 08:12:33 +00001647 self.assertEqual(sum(Squares(10)), 285)
1648 self.assertEqual(sum(iter(Squares(10))), 285)
1649 self.assertEqual(sum([[1], [2], [3]], []), [1, 2, 3])
1650
1651 self.assertRaises(TypeError, sum)
1652 self.assertRaises(TypeError, sum, 42)
1653 self.assertRaises(TypeError, sum, ['a', 'b', 'c'])
1654 self.assertRaises(TypeError, sum, ['a', 'b', 'c'], '')
1655 self.assertRaises(TypeError, sum, [[1], [2], [3]])
1656 self.assertRaises(TypeError, sum, [{2:3}])
1657 self.assertRaises(TypeError, sum, [{2:3}]*2, {2:3})
1658
1659 class BadSeq:
1660 def __getitem__(self, index):
1661 raise ValueError
1662 self.assertRaises(ValueError, sum, BadSeq())
1663
Walter Dörwald919497e2003-01-19 16:23:59 +00001664 def test_tuple(self):
1665 self.assertEqual(tuple(()), ())
1666 t0_3 = (0, 1, 2, 3)
1667 t0_3_bis = tuple(t0_3)
1668 self.assert_(t0_3 is t0_3_bis)
1669 self.assertEqual(tuple([]), ())
1670 self.assertEqual(tuple([0, 1, 2, 3]), (0, 1, 2, 3))
1671 self.assertEqual(tuple(''), ())
1672 self.assertEqual(tuple('spam'), ('s', 'p', 'a', 'm'))
1673
1674 def test_type(self):
1675 self.assertEqual(type(''), type('123'))
1676 self.assertNotEqual(type(''), type(()))
1677
1678 def test_unichr(self):
1679 if have_unicode:
Guido van Rossum84fc66d2007-05-03 17:18:26 +00001680 self.assertEqual(chr(32), str(' '))
1681 self.assertEqual(chr(65), str('A'))
1682 self.assertEqual(chr(97), str('a'))
Walter Dörwald919497e2003-01-19 16:23:59 +00001683 self.assertEqual(
Guido van Rossum84fc66d2007-05-03 17:18:26 +00001684 chr(sys.maxunicode),
Guido van Rossumef87d6e2007-05-02 19:09:54 +00001685 str(('\\U%08x' % (sys.maxunicode)).encode("ascii"), 'unicode-escape')
Walter Dörwald919497e2003-01-19 16:23:59 +00001686 )
Guido van Rossum84fc66d2007-05-03 17:18:26 +00001687 self.assertRaises(ValueError, chr, sys.maxunicode+1)
1688 self.assertRaises(TypeError, chr)
Walter Dörwald919497e2003-01-19 16:23:59 +00001689
Guido van Rossumfee7b932005-01-16 00:21:28 +00001690 # We don't want self in vars(), so these are static methods
1691
1692 @staticmethod
Walter Dörwald919497e2003-01-19 16:23:59 +00001693 def get_vars_f0():
1694 return vars()
Walter Dörwald919497e2003-01-19 16:23:59 +00001695
Guido van Rossumfee7b932005-01-16 00:21:28 +00001696 @staticmethod
Walter Dörwald919497e2003-01-19 16:23:59 +00001697 def get_vars_f2():
1698 BuiltinTest.get_vars_f0()
1699 a = 1
1700 b = 2
1701 return vars()
Walter Dörwald919497e2003-01-19 16:23:59 +00001702
1703 def test_vars(self):
Raymond Hettingera690a992003-11-16 16:17:49 +00001704 self.assertEqual(set(vars()), set(dir()))
Walter Dörwald919497e2003-01-19 16:23:59 +00001705 import sys
Raymond Hettingera690a992003-11-16 16:17:49 +00001706 self.assertEqual(set(vars(sys)), set(dir(sys)))
Walter Dörwald919497e2003-01-19 16:23:59 +00001707 self.assertEqual(self.get_vars_f0(), {})
1708 self.assertEqual(self.get_vars_f2(), {'a': 1, 'b': 2})
1709 self.assertRaises(TypeError, vars, 42, 42)
1710 self.assertRaises(TypeError, vars, 42)
1711
1712 def test_zip(self):
1713 a = (1, 2, 3)
1714 b = (4, 5, 6)
1715 t = [(1, 4), (2, 5), (3, 6)]
Guido van Rossum801f0d72006-08-24 19:48:10 +00001716 self.assertEqual(list(zip(a, b)), t)
Walter Dörwald919497e2003-01-19 16:23:59 +00001717 b = [4, 5, 6]
Guido van Rossum801f0d72006-08-24 19:48:10 +00001718 self.assertEqual(list(zip(a, b)), t)
Walter Dörwald919497e2003-01-19 16:23:59 +00001719 b = (4, 5, 6, 7)
Guido van Rossum801f0d72006-08-24 19:48:10 +00001720 self.assertEqual(list(zip(a, b)), t)
Walter Dörwald919497e2003-01-19 16:23:59 +00001721 class I:
1722 def __getitem__(self, i):
1723 if i < 0 or i > 2: raise IndexError
1724 return i + 4
Guido van Rossum801f0d72006-08-24 19:48:10 +00001725 self.assertEqual(list(zip(a, I())), t)
1726 self.assertEqual(list(zip()), [])
1727 self.assertEqual(list(zip(*[])), [])
Walter Dörwald919497e2003-01-19 16:23:59 +00001728 self.assertRaises(TypeError, zip, None)
1729 class G:
1730 pass
1731 self.assertRaises(TypeError, zip, a, G())
1732
1733 # Make sure zip doesn't try to allocate a billion elements for the
1734 # result list when one of its arguments doesn't say how long it is.
1735 # A MemoryError is the most likely failure mode.
1736 class SequenceWithoutALength:
1737 def __getitem__(self, i):
1738 if i == 5:
1739 raise IndexError
1740 else:
1741 return i
1742 self.assertEqual(
Guido van Rossum805365e2007-05-07 22:24:25 +00001743 list(zip(SequenceWithoutALength(), range(2**30))),
Walter Dörwald919497e2003-01-19 16:23:59 +00001744 list(enumerate(range(5)))
1745 )
1746
1747 class BadSeq:
1748 def __getitem__(self, i):
1749 if i == 5:
1750 raise ValueError
1751 else:
1752 return i
Guido van Rossum801f0d72006-08-24 19:48:10 +00001753 self.assertRaises(ValueError, list, zip(BadSeq(), BadSeq()))
Walter Dörwald919497e2003-01-19 16:23:59 +00001754
Raymond Hettinger64958a12003-12-17 20:43:33 +00001755class TestSorted(unittest.TestCase):
1756
1757 def test_basic(self):
Guido van Rossum805365e2007-05-07 22:24:25 +00001758 data = list(range(100))
Raymond Hettinger64958a12003-12-17 20:43:33 +00001759 copy = data[:]
1760 random.shuffle(copy)
1761 self.assertEqual(data, sorted(copy))
1762 self.assertNotEqual(data, copy)
1763
1764 data.reverse()
1765 random.shuffle(copy)
Guido van Rossum47b9ff62006-08-24 00:41:19 +00001766 self.assertEqual(data, sorted(copy, cmp=lambda x, y: (x < y) - (x > y)))
Raymond Hettinger64958a12003-12-17 20:43:33 +00001767 self.assertNotEqual(data, copy)
1768 random.shuffle(copy)
1769 self.assertEqual(data, sorted(copy, key=lambda x: -x))
1770 self.assertNotEqual(data, copy)
1771 random.shuffle(copy)
1772 self.assertEqual(data, sorted(copy, reverse=1))
1773 self.assertNotEqual(data, copy)
1774
1775 def test_inputtypes(self):
1776 s = 'abracadabra'
Walter Dörwald4e41a4b2005-08-03 17:09:04 +00001777 types = [list, tuple]
1778 if have_unicode:
Guido van Rossumef87d6e2007-05-02 19:09:54 +00001779 types.insert(0, str)
Walter Dörwald4e41a4b2005-08-03 17:09:04 +00001780 for T in types:
Raymond Hettinger64958a12003-12-17 20:43:33 +00001781 self.assertEqual(sorted(s), sorted(T(s)))
1782
1783 s = ''.join(dict.fromkeys(s).keys()) # unique letters only
Walter Dörwald4e41a4b2005-08-03 17:09:04 +00001784 types = [set, frozenset, list, tuple, dict.fromkeys]
1785 if have_unicode:
Guido van Rossumef87d6e2007-05-02 19:09:54 +00001786 types.insert(0, str)
Walter Dörwald4e41a4b2005-08-03 17:09:04 +00001787 for T in types:
Raymond Hettinger64958a12003-12-17 20:43:33 +00001788 self.assertEqual(sorted(s), sorted(T(s)))
1789
1790 def test_baddecorator(self):
1791 data = 'The quick Brown fox Jumped over The lazy Dog'.split()
1792 self.assertRaises(TypeError, sorted, data, None, lambda x,y: 0)
1793
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001794def test_main(verbose=None):
1795 test_classes = (BuiltinTest, TestSorted)
1796
1797 run_unittest(*test_classes)
1798
1799 # verify reference counting
1800 if verbose and hasattr(sys, "gettotalrefcount"):
1801 import gc
1802 counts = [None] * 5
Guido van Rossum805365e2007-05-07 22:24:25 +00001803 for i in range(len(counts)):
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001804 run_unittest(*test_classes)
1805 gc.collect()
1806 counts[i] = sys.gettotalrefcount()
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001807 print(counts)
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001808
Walter Dörwald919497e2003-01-19 16:23:59 +00001809
1810if __name__ == "__main__":
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001811 test_main(verbose=True)