blob: 70480bef013bffd4632bc9944dbec5d6a1999bb9 [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
Georg Brandlde9b6242006-04-30 11:13:56 +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 += [
77 (unicode('0'), 0),
78 (unicode('1'), 1),
79 (unicode('9'), 9),
80 (unicode('10'), 10),
81 (unicode('99'), 99),
82 (unicode('100'), 100),
83 (unicode('314'), 314),
84 (unicode(' 314'), 314),
85 (unicode('\u0663\u0661\u0664 ','raw-unicode-escape'), 314),
86 (unicode(' \t\t 314 \t\t '), 314),
87 (unicode(' 1x'), ValueError),
88 (unicode(' 1 '), 1),
89 (unicode(' 1\02 '), ValueError),
90 (unicode(''), ValueError),
91 (unicode(' '), ValueError),
92 (unicode(' \t\t '), ValueError),
93 (unichr(0x200), ValueError),
94]
95
Raymond Hettinger96229b12005-03-11 06:49:40 +000096class TestFailingBool:
97 def __nonzero__(self):
98 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')
110 self.assertRaises(ImportError, __import__, 'spamspam')
111 self.assertRaises(TypeError, __import__, 1, 2, 3, 4)
Thomas Wouters8ddab272006-04-04 16:17:02 +0000112 self.assertRaises(ValueError, __import__, '')
Walter Dörwald919497e2003-01-19 16:23:59 +0000113
114 def test_abs(self):
115 # int
116 self.assertEqual(abs(0), 0)
117 self.assertEqual(abs(1234), 1234)
118 self.assertEqual(abs(-1234), 1234)
119 # float
120 self.assertEqual(abs(0.0), 0.0)
121 self.assertEqual(abs(3.14), 3.14)
122 self.assertEqual(abs(-3.14), 3.14)
123 # long
124 self.assertEqual(abs(0L), 0L)
125 self.assertEqual(abs(1234L), 1234L)
126 self.assertEqual(abs(-1234L), 1234L)
127 # str
128 self.assertRaises(TypeError, abs, 'a')
129
Raymond Hettinger96229b12005-03-11 06:49:40 +0000130 def test_all(self):
131 self.assertEqual(all([2, 4, 6]), True)
132 self.assertEqual(all([2, None, 6]), False)
133 self.assertRaises(RuntimeError, all, [2, TestFailingBool(), 6])
134 self.assertRaises(RuntimeError, all, TestFailingIter())
135 self.assertRaises(TypeError, all, 10) # Non-iterable
136 self.assertRaises(TypeError, all) # No args
137 self.assertRaises(TypeError, all, [2, 4, 6], []) # Too many args
138 self.assertEqual(all([]), True) # Empty iterator
139 S = [50, 60]
140 self.assertEqual(all(x > 42 for x in S), True)
141 S = [50, 40, 60]
142 self.assertEqual(all(x > 42 for x in S), False)
143
144 def test_any(self):
145 self.assertEqual(any([None, None, None]), False)
146 self.assertEqual(any([None, 4, None]), True)
147 self.assertRaises(RuntimeError, any, [None, TestFailingBool(), 6])
148 self.assertRaises(RuntimeError, all, TestFailingIter())
149 self.assertRaises(TypeError, any, 10) # Non-iterable
150 self.assertRaises(TypeError, any) # No args
151 self.assertRaises(TypeError, any, [2, 4, 6], []) # Too many args
152 self.assertEqual(any([]), False) # Empty iterator
153 S = [40, 60, 30]
154 self.assertEqual(any(x > 42 for x in S), True)
155 S = [10, 20, 30]
156 self.assertEqual(any(x > 42 for x in S), False)
157
Walter Dörwald919497e2003-01-19 16:23:59 +0000158 def test_apply(self):
159 def f0(*args):
160 self.assertEqual(args, ())
161 def f1(a1):
162 self.assertEqual(a1, 1)
163 def f2(a1, a2):
164 self.assertEqual(a1, 1)
165 self.assertEqual(a2, 2)
166 def f3(a1, a2, a3):
167 self.assertEqual(a1, 1)
168 self.assertEqual(a2, 2)
169 self.assertEqual(a3, 3)
170 apply(f0, ())
171 apply(f1, (1,))
172 apply(f2, (1, 2))
173 apply(f3, (1, 2, 3))
174
175 # A PyCFunction that takes only positional parameters should allow an
176 # empty keyword dictionary to pass without a complaint, but raise a
177 # TypeError if the dictionary is non-empty.
178 apply(id, (1,), {})
179 self.assertRaises(TypeError, apply, id, (1,), {"foo": 1})
180 self.assertRaises(TypeError, apply)
181 self.assertRaises(TypeError, apply, id, 42)
182 self.assertRaises(TypeError, apply, id, (42,), 42)
183
184 def test_callable(self):
185 self.assert_(callable(len))
186 def f(): pass
187 self.assert_(callable(f))
188 class C:
189 def meth(self): pass
190 self.assert_(callable(C))
191 x = C()
192 self.assert_(callable(x.meth))
193 self.assert_(not callable(x))
194 class D(C):
195 def __call__(self): pass
196 y = D()
197 self.assert_(callable(y))
198 y()
199
200 def test_chr(self):
201 self.assertEqual(chr(32), ' ')
202 self.assertEqual(chr(65), 'A')
203 self.assertEqual(chr(97), 'a')
204 self.assertEqual(chr(0xff), '\xff')
205 self.assertRaises(ValueError, chr, 256)
206 self.assertRaises(TypeError, chr)
207
208 def test_cmp(self):
209 self.assertEqual(cmp(-1, 1), -1)
210 self.assertEqual(cmp(1, -1), 1)
211 self.assertEqual(cmp(1, 1), 0)
Armin Rigo2b3eb402003-10-28 12:05:48 +0000212 # verify that circular objects are not handled
Walter Dörwald919497e2003-01-19 16:23:59 +0000213 a = []; a.append(a)
214 b = []; b.append(b)
215 from UserList import UserList
216 c = UserList(); c.append(c)
Armin Rigo2b3eb402003-10-28 12:05:48 +0000217 self.assertRaises(RuntimeError, cmp, a, b)
218 self.assertRaises(RuntimeError, cmp, b, c)
219 self.assertRaises(RuntimeError, cmp, c, a)
220 self.assertRaises(RuntimeError, cmp, a, c)
221 # okay, now break the cycles
Walter Dörwald919497e2003-01-19 16:23:59 +0000222 a.pop(); b.pop(); c.pop()
223 self.assertRaises(TypeError, cmp)
224
225 def test_coerce(self):
226 self.assert_(not fcmp(coerce(1, 1.1), (1.0, 1.1)))
227 self.assertEqual(coerce(1, 1L), (1L, 1L))
228 self.assert_(not fcmp(coerce(1L, 1.1), (1.0, 1.1)))
229 self.assertRaises(TypeError, coerce)
230 class BadNumber:
231 def __coerce__(self, other):
232 raise ValueError
233 self.assertRaises(ValueError, coerce, 42, BadNumber())
Neal Norwitzabcb0c02003-01-28 19:21:24 +0000234 self.assertRaises(OverflowError, coerce, 0.5, int("12345" * 1000))
Walter Dörwald919497e2003-01-19 16:23:59 +0000235
236 def test_compile(self):
237 compile('print 1\n', '', 'exec')
Just van Rossumf032f862003-02-09 20:38:48 +0000238 bom = '\xef\xbb\xbf'
239 compile(bom + 'print 1\n', '', 'exec')
Walter Dörwald919497e2003-01-19 16:23:59 +0000240 self.assertRaises(TypeError, compile)
241 self.assertRaises(ValueError, compile, 'print 42\n', '<string>', 'badmode')
242 self.assertRaises(ValueError, compile, 'print 42\n', '<string>', 'single', 0xff)
Neal Norwitzfcf44352005-11-27 20:37:43 +0000243 self.assertRaises(TypeError, compile, chr(0), 'f', 'exec')
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000244 if have_unicode:
245 compile(unicode('print u"\xc3\xa5"\n', 'utf8'), '', 'exec')
Neal Norwitzfcf44352005-11-27 20:37:43 +0000246 self.assertRaises(TypeError, compile, unichr(0), 'f', 'exec')
247 self.assertRaises(ValueError, compile, unicode('a = 1'), 'f', 'bad')
Walter Dörwald919497e2003-01-19 16:23:59 +0000248
Walter Dörwald919497e2003-01-19 16:23:59 +0000249 def test_delattr(self):
250 import sys
251 sys.spam = 1
252 delattr(sys, 'spam')
253 self.assertRaises(TypeError, delattr)
254
255 def test_dir(self):
256 x = 1
257 self.assert_('x' in dir())
258 import sys
259 self.assert_('modules' in dir(sys))
260 self.assertRaises(TypeError, dir, 42, 42)
261
262 def test_divmod(self):
263 self.assertEqual(divmod(12, 7), (1, 5))
264 self.assertEqual(divmod(-12, 7), (-2, 2))
265 self.assertEqual(divmod(12, -7), (-2, -2))
266 self.assertEqual(divmod(-12, -7), (1, -5))
267
268 self.assertEqual(divmod(12L, 7L), (1L, 5L))
269 self.assertEqual(divmod(-12L, 7L), (-2L, 2L))
270 self.assertEqual(divmod(12L, -7L), (-2L, -2L))
271 self.assertEqual(divmod(-12L, -7L), (1L, -5L))
272
273 self.assertEqual(divmod(12, 7L), (1, 5L))
274 self.assertEqual(divmod(-12, 7L), (-2, 2L))
275 self.assertEqual(divmod(12L, -7), (-2L, -2))
276 self.assertEqual(divmod(-12L, -7), (1L, -5))
277
Raymond Hettinger5ea7e312004-09-30 07:47:20 +0000278 self.assertEqual(divmod(-sys.maxint-1, -1),
279 (sys.maxint+1, 0))
280
Walter Dörwald919497e2003-01-19 16:23:59 +0000281 self.assert_(not fcmp(divmod(3.25, 1.0), (3.0, 0.25)))
282 self.assert_(not fcmp(divmod(-3.25, 1.0), (-4.0, 0.75)))
283 self.assert_(not fcmp(divmod(3.25, -1.0), (-4.0, -0.75)))
284 self.assert_(not fcmp(divmod(-3.25, -1.0), (3.0, -0.25)))
285
286 self.assertRaises(TypeError, divmod)
287
288 def test_eval(self):
289 self.assertEqual(eval('1+1'), 2)
290 self.assertEqual(eval(' 1+1\n'), 2)
291 globals = {'a': 1, 'b': 2}
292 locals = {'b': 200, 'c': 300}
293 self.assertEqual(eval('a', globals) , 1)
294 self.assertEqual(eval('a', globals, locals), 1)
295 self.assertEqual(eval('b', globals, locals), 200)
296 self.assertEqual(eval('c', globals, locals), 300)
297 if have_unicode:
298 self.assertEqual(eval(unicode('1+1')), 2)
299 self.assertEqual(eval(unicode(' 1+1\n')), 2)
300 globals = {'a': 1, 'b': 2}
301 locals = {'b': 200, 'c': 300}
302 if have_unicode:
303 self.assertEqual(eval(unicode('a'), globals), 1)
304 self.assertEqual(eval(unicode('a'), globals, locals), 1)
305 self.assertEqual(eval(unicode('b'), globals, locals), 200)
306 self.assertEqual(eval(unicode('c'), globals, locals), 300)
Just van Rossumf032f862003-02-09 20:38:48 +0000307 bom = '\xef\xbb\xbf'
308 self.assertEqual(eval(bom + 'a', globals, locals), 1)
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000309 self.assertEqual(eval(unicode('u"\xc3\xa5"', 'utf8'), globals),
310 unicode('\xc3\xa5', 'utf8'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000311 self.assertRaises(TypeError, eval)
312 self.assertRaises(TypeError, eval, ())
313
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000314 def test_general_eval(self):
315 # Tests that general mappings can be used for the locals argument
316
317 class M:
318 "Test mapping interface versus possible calls from eval()."
319 def __getitem__(self, key):
320 if key == 'a':
321 return 12
322 raise KeyError
323 def keys(self):
324 return list('xyz')
325
326 m = M()
327 g = globals()
328 self.assertEqual(eval('a', g, m), 12)
329 self.assertRaises(NameError, eval, 'b', g, m)
330 self.assertEqual(eval('dir()', g, m), list('xyz'))
331 self.assertEqual(eval('globals()', g, m), g)
332 self.assertEqual(eval('locals()', g, m), m)
Raymond Hettinger513ffe82004-07-06 13:44:41 +0000333 self.assertRaises(TypeError, eval, 'a', m)
Raymond Hettinger66bd2332004-08-02 08:30:07 +0000334 class A:
335 "Non-mapping"
336 pass
337 m = A()
338 self.assertRaises(TypeError, eval, 'a', g, m)
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000339
340 # Verify that dict subclasses work as well
341 class D(dict):
342 def __getitem__(self, key):
343 if key == 'a':
344 return 12
345 return dict.__getitem__(self, key)
346 def keys(self):
347 return list('xyz')
348
349 d = D()
350 self.assertEqual(eval('a', g, d), 12)
351 self.assertRaises(NameError, eval, 'b', g, d)
352 self.assertEqual(eval('dir()', g, d), list('xyz'))
353 self.assertEqual(eval('globals()', g, d), g)
354 self.assertEqual(eval('locals()', g, d), d)
355
356 # Verify locals stores (used by list comps)
357 eval('[locals() for i in (2,3)]', g, d)
358 eval('[locals() for i in (2,3)]', g, UserDict.UserDict())
359
360 class SpreadSheet:
361 "Sample application showing nested, calculated lookups."
362 _cells = {}
363 def __setitem__(self, key, formula):
364 self._cells[key] = formula
Martin Blais215f13d2006-06-06 12:46:55 +0000365 def __getitem__(self, key):
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000366 return eval(self._cells[key], globals(), self)
367
368 ss = SpreadSheet()
369 ss['a1'] = '5'
370 ss['a2'] = 'a1*6'
371 ss['a3'] = 'a2*7'
372 self.assertEqual(ss['a3'], 210)
373
Raymond Hettinger2a7dede2004-08-07 04:55:30 +0000374 # Verify that dir() catches a non-list returned by eval
375 # SF bug #1004669
376 class C:
377 def __getitem__(self, item):
378 raise KeyError(item)
379 def keys(self):
380 return 'a'
381 self.assertRaises(TypeError, eval, 'dir()', globals(), C())
382
Walter Dörwald919497e2003-01-19 16:23:59 +0000383 # Done outside of the method test_z to get the correct scope
384 z = 0
385 f = open(TESTFN, 'w')
386 f.write('z = z+1\n')
387 f.write('z = z*2\n')
388 f.close()
389 execfile(TESTFN)
390
391 def test_execfile(self):
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +0000392 global numruns
393 if numruns:
394 return
395 numruns += 1
Tim Peters7f061872004-12-07 21:17:46 +0000396
Walter Dörwald919497e2003-01-19 16:23:59 +0000397 globals = {'a': 1, 'b': 2}
398 locals = {'b': 200, 'c': 300}
399
400 self.assertEqual(self.__class__.z, 2)
401 globals['z'] = 0
402 execfile(TESTFN, globals)
403 self.assertEqual(globals['z'], 2)
404 locals['z'] = 0
405 execfile(TESTFN, globals, locals)
406 self.assertEqual(locals['z'], 2)
Raymond Hettinger66bd2332004-08-02 08:30:07 +0000407
408 class M:
409 "Test mapping interface versus possible calls from execfile()."
410 def __init__(self):
411 self.z = 10
412 def __getitem__(self, key):
413 if key == 'z':
414 return self.z
415 raise KeyError
416 def __setitem__(self, key, value):
417 if key == 'z':
418 self.z = value
419 return
420 raise KeyError
421
422 locals = M()
423 locals['z'] = 0
424 execfile(TESTFN, globals, locals)
425 self.assertEqual(locals['z'], 2)
426
Walter Dörwald919497e2003-01-19 16:23:59 +0000427 unlink(TESTFN)
428 self.assertRaises(TypeError, execfile)
Neal Norwitzfcf44352005-11-27 20:37:43 +0000429 self.assertRaises(TypeError, execfile, TESTFN, {}, ())
Walter Dörwald919497e2003-01-19 16:23:59 +0000430 import os
431 self.assertRaises(IOError, execfile, os.curdir)
432 self.assertRaises(IOError, execfile, "I_dont_exist")
433
434 def test_filter(self):
435 self.assertEqual(filter(lambda c: 'a' <= c <= 'z', 'Hello World'), 'elloorld')
436 self.assertEqual(filter(None, [1, 'hello', [], [3], '', None, 9, 0]), [1, 'hello', [3], 9])
437 self.assertEqual(filter(lambda x: x > 0, [1, -3, 9, 0, 2]), [1, 9, 2])
438 self.assertEqual(filter(None, Squares(10)), [1, 4, 9, 16, 25, 36, 49, 64, 81])
439 self.assertEqual(filter(lambda x: x%2, Squares(10)), [1, 9, 25, 49, 81])
440 def identity(item):
441 return 1
442 filter(identity, Squares(5))
443 self.assertRaises(TypeError, filter)
444 class BadSeq(object):
Tim Petersf2715e02003-02-19 02:35:07 +0000445 def __getitem__(self, index):
446 if index<4:
447 return 42
448 raise ValueError
Walter Dörwald919497e2003-01-19 16:23:59 +0000449 self.assertRaises(ValueError, filter, lambda x: x, BadSeq())
450 def badfunc():
451 pass
452 self.assertRaises(TypeError, filter, badfunc, range(5))
453
Walter Dörwaldbf517072003-01-27 15:57:14 +0000454 # test bltinmodule.c::filtertuple()
Walter Dörwald919497e2003-01-19 16:23:59 +0000455 self.assertEqual(filter(None, (1, 2)), (1, 2))
456 self.assertEqual(filter(lambda x: x>=3, (1, 2, 3, 4)), (3, 4))
457 self.assertRaises(TypeError, filter, 42, (1, 2))
458
Walter Dörwaldbf517072003-01-27 15:57:14 +0000459 # test bltinmodule.c::filterstring()
Walter Dörwald919497e2003-01-19 16:23:59 +0000460 self.assertEqual(filter(None, "12"), "12")
461 self.assertEqual(filter(lambda x: x>="3", "1234"), "34")
462 self.assertRaises(TypeError, filter, 42, "12")
463 class badstr(str):
464 def __getitem__(self, index):
465 raise ValueError
466 self.assertRaises(ValueError, filter, lambda x: x >="3", badstr("1234"))
Walter Dörwaldbf517072003-01-27 15:57:14 +0000467
Walter Dörwald903f1e02003-02-04 16:28:00 +0000468 class badstr2(str):
469 def __getitem__(self, index):
470 return 42
471 self.assertRaises(TypeError, filter, lambda x: x >=42, badstr2("1234"))
472
473 class weirdstr(str):
474 def __getitem__(self, index):
475 return weirdstr(2*str.__getitem__(self, index))
476 self.assertEqual(filter(lambda x: x>="33", weirdstr("1234")), "3344")
477
Walter Dörwald5e61e242003-02-04 17:04:01 +0000478 class shiftstr(str):
479 def __getitem__(self, index):
480 return chr(ord(str.__getitem__(self, index))+1)
481 self.assertEqual(filter(lambda x: x>="3", shiftstr("1234")), "345")
482
Martin v. Löwis8afd7572003-01-25 22:46:11 +0000483 if have_unicode:
Walter Dörwaldbf517072003-01-27 15:57:14 +0000484 # test bltinmodule.c::filterunicode()
Martin v. Löwis8afd7572003-01-25 22:46:11 +0000485 self.assertEqual(filter(None, unicode("12")), unicode("12"))
486 self.assertEqual(filter(lambda x: x>="3", unicode("1234")), unicode("34"))
487 self.assertRaises(TypeError, filter, 42, unicode("12"))
488 self.assertRaises(ValueError, filter, lambda x: x >="3", badstr(unicode("1234")))
Walter Dörwald919497e2003-01-19 16:23:59 +0000489
Walter Dörwald903f1e02003-02-04 16:28:00 +0000490 class badunicode(unicode):
491 def __getitem__(self, index):
492 return 42
493 self.assertRaises(TypeError, filter, lambda x: x >=42, badunicode("1234"))
494
495 class weirdunicode(unicode):
496 def __getitem__(self, index):
497 return weirdunicode(2*unicode.__getitem__(self, index))
498 self.assertEqual(
499 filter(lambda x: x>=unicode("33"), weirdunicode("1234")), unicode("3344"))
500
Walter Dörwald5e61e242003-02-04 17:04:01 +0000501 class shiftunicode(unicode):
502 def __getitem__(self, index):
503 return unichr(ord(unicode.__getitem__(self, index))+1)
504 self.assertEqual(
505 filter(lambda x: x>=unicode("3"), shiftunicode("1234")),
506 unicode("345")
507 )
508
Walter Dörwaldc3da83f2003-02-04 20:24:45 +0000509 def test_filter_subclasses(self):
Walter Dörwaldc8cb5d92003-08-15 17:52:39 +0000510 # test that filter() never returns tuple, str or unicode subclasses
511 # and that the result always goes through __getitem__
512 funcs = (None, bool, lambda x: True)
Walter Dörwaldc3da83f2003-02-04 20:24:45 +0000513 class tuple2(tuple):
Walter Dörwald1918f772003-02-10 13:19:13 +0000514 def __getitem__(self, index):
515 return 2*tuple.__getitem__(self, index)
Walter Dörwaldc3da83f2003-02-04 20:24:45 +0000516 class str2(str):
Walter Dörwald1918f772003-02-10 13:19:13 +0000517 def __getitem__(self, index):
518 return 2*str.__getitem__(self, index)
Walter Dörwaldc3da83f2003-02-04 20:24:45 +0000519 inputs = {
Walter Dörwald8dd19322003-02-10 17:36:40 +0000520 tuple2: {(): (), (1, 2, 3): (2, 4, 6)},
Walter Dörwald1918f772003-02-10 13:19:13 +0000521 str2: {"": "", "123": "112233"}
Walter Dörwaldc3da83f2003-02-04 20:24:45 +0000522 }
523 if have_unicode:
524 class unicode2(unicode):
Walter Dörwald1918f772003-02-10 13:19:13 +0000525 def __getitem__(self, index):
526 return 2*unicode.__getitem__(self, index)
527 inputs[unicode2] = {
528 unicode(): unicode(),
529 unicode("123"): unicode("112233")
530 }
Walter Dörwaldc3da83f2003-02-04 20:24:45 +0000531
Walter Dörwald1918f772003-02-10 13:19:13 +0000532 for (cls, inps) in inputs.iteritems():
533 for (inp, exp) in inps.iteritems():
Tim Petersf2715e02003-02-19 02:35:07 +0000534 # make sure the output goes through __getitem__
535 # even if func is None
536 self.assertEqual(
537 filter(funcs[0], cls(inp)),
538 filter(funcs[1], cls(inp))
539 )
540 for func in funcs:
Walter Dörwald1918f772003-02-10 13:19:13 +0000541 outp = filter(func, cls(inp))
542 self.assertEqual(outp, exp)
543 self.assert_(not isinstance(outp, cls))
Walter Dörwaldc3da83f2003-02-04 20:24:45 +0000544
Walter Dörwald919497e2003-01-19 16:23:59 +0000545 def test_float(self):
546 self.assertEqual(float(3.14), 3.14)
547 self.assertEqual(float(314), 314.0)
548 self.assertEqual(float(314L), 314.0)
549 self.assertEqual(float(" 3.14 "), 3.14)
Neal Norwitze7214a12005-12-18 05:03:17 +0000550 self.assertRaises(ValueError, float, " 0x3.1 ")
551 self.assertRaises(ValueError, float, " -0x3.p-1 ")
Walter Dörwald919497e2003-01-19 16:23:59 +0000552 if have_unicode:
553 self.assertEqual(float(unicode(" 3.14 ")), 3.14)
554 self.assertEqual(float(unicode(" \u0663.\u0661\u0664 ",'raw-unicode-escape')), 3.14)
Walter Dörwaldede187f2005-11-29 15:45:14 +0000555 # Implementation limitation in PyFloat_FromString()
556 self.assertRaises(ValueError, float, unicode("1"*10000))
Walter Dörwald919497e2003-01-19 16:23:59 +0000557
Georg Brandlde9b6242006-04-30 11:13:56 +0000558 @run_with_locale('LC_NUMERIC', 'fr_FR', 'de_DE')
Neal Norwitz5898fa22005-11-22 05:17:40 +0000559 def test_float_with_comma(self):
560 # set locale to something that doesn't use '.' for the decimal point
Martin v. Löwisfcfff0a2006-07-03 12:19:50 +0000561 # float must not accept the locale specific decimal point but
562 # it still has to accept the normal python syntac
Georg Brandlde9b6242006-04-30 11:13:56 +0000563 import locale
564 if not locale.localeconv()['decimal_point'] == ',':
Neal Norwitz5898fa22005-11-22 05:17:40 +0000565 return
566
Martin v. Löwisfcfff0a2006-07-03 12:19:50 +0000567 self.assertEqual(float(" 3.14 "), 3.14)
568 self.assertEqual(float("+3.14 "), 3.14)
569 self.assertEqual(float("-3.14 "), -3.14)
570 self.assertEqual(float(".14 "), .14)
571 self.assertEqual(float("3. "), 3.0)
572 self.assertEqual(float("3.e3 "), 3000.0)
573 self.assertEqual(float("3.2e3 "), 3200.0)
574 self.assertEqual(float("2.5e-1 "), 0.25)
575 self.assertEqual(float("5e-1"), 0.5)
576 self.assertRaises(ValueError, float, " 3,14 ")
577 self.assertRaises(ValueError, float, " +3,14 ")
578 self.assertRaises(ValueError, float, " -3,14 ")
Georg Brandlde9b6242006-04-30 11:13:56 +0000579 self.assertRaises(ValueError, float, " 0x3.1 ")
580 self.assertRaises(ValueError, float, " -0x3.p-1 ")
581 self.assertEqual(float(" 25.e-1 "), 2.5)
582 self.assertEqual(fcmp(float(" .25e-1 "), .025), 0)
Neal Norwitz5898fa22005-11-22 05:17:40 +0000583
Brett Cannonc3647ac2005-04-26 03:45:26 +0000584 def test_floatconversion(self):
585 # Make sure that calls to __float__() work properly
586 class Foo0:
587 def __float__(self):
588 return 42.
589
590 class Foo1(object):
591 def __float__(self):
592 return 42.
593
594 class Foo2(float):
595 def __float__(self):
596 return 42.
597
598 class Foo3(float):
599 def __new__(cls, value=0.):
600 return float.__new__(cls, 2*value)
601
602 def __float__(self):
603 return self
604
605 class Foo4(float):
606 def __float__(self):
607 return 42
608
609 self.assertAlmostEqual(float(Foo0()), 42.)
610 self.assertAlmostEqual(float(Foo1()), 42.)
611 self.assertAlmostEqual(float(Foo2()), 42.)
612 self.assertAlmostEqual(float(Foo3(21)), 42.)
613 self.assertRaises(TypeError, float, Foo4(42))
614
Walter Dörwald919497e2003-01-19 16:23:59 +0000615 def test_getattr(self):
616 import sys
617 self.assert_(getattr(sys, 'stdout') is sys.stdout)
618 self.assertRaises(TypeError, getattr, sys, 1)
619 self.assertRaises(TypeError, getattr, sys, 1, "foo")
620 self.assertRaises(TypeError, getattr)
Walter Dörwald4e41a4b2005-08-03 17:09:04 +0000621 if have_unicode:
622 self.assertRaises(UnicodeError, getattr, sys, unichr(sys.maxunicode))
Walter Dörwald919497e2003-01-19 16:23:59 +0000623
624 def test_hasattr(self):
625 import sys
626 self.assert_(hasattr(sys, 'stdout'))
627 self.assertRaises(TypeError, hasattr, sys, 1)
628 self.assertRaises(TypeError, hasattr)
Walter Dörwald4e41a4b2005-08-03 17:09:04 +0000629 if have_unicode:
630 self.assertRaises(UnicodeError, hasattr, sys, unichr(sys.maxunicode))
Walter Dörwald919497e2003-01-19 16:23:59 +0000631
632 def test_hash(self):
633 hash(None)
634 self.assertEqual(hash(1), hash(1L))
635 self.assertEqual(hash(1), hash(1.0))
636 hash('spam')
637 if have_unicode:
638 self.assertEqual(hash('spam'), hash(unicode('spam')))
639 hash((0,1,2,3))
640 def f(): pass
641 self.assertRaises(TypeError, hash, [])
642 self.assertRaises(TypeError, hash, {})
643
644 def test_hex(self):
645 self.assertEqual(hex(16), '0x10')
646 self.assertEqual(hex(16L), '0x10L')
Guido van Rossum6c9e1302003-11-29 23:52:13 +0000647 self.assertEqual(hex(-16), '-0x10')
Walter Dörwald919497e2003-01-19 16:23:59 +0000648 self.assertEqual(hex(-16L), '-0x10L')
649 self.assertRaises(TypeError, hex, {})
650
651 def test_id(self):
652 id(None)
653 id(1)
654 id(1L)
655 id(1.0)
656 id('spam')
657 id((0,1,2,3))
658 id([0,1,2,3])
659 id({'spam': 1, 'eggs': 2, 'ham': 3})
660
661 # Test input() later, together with raw_input
662
663 def test_int(self):
664 self.assertEqual(int(314), 314)
665 self.assertEqual(int(3.14), 3)
666 self.assertEqual(int(314L), 314)
667 # Check that conversion from float truncates towards zero
668 self.assertEqual(int(-3.14), -3)
669 self.assertEqual(int(3.9), 3)
670 self.assertEqual(int(-3.9), -3)
671 self.assertEqual(int(3.5), 3)
672 self.assertEqual(int(-3.5), -3)
673 # Different base:
674 self.assertEqual(int("10",16), 16L)
675 if have_unicode:
676 self.assertEqual(int(unicode("10"),16), 16L)
677 # Test conversion from strings and various anomalies
678 for s, v in L:
679 for sign in "", "+", "-":
680 for prefix in "", " ", "\t", " \t\t ":
681 ss = prefix + sign + s
682 vv = v
683 if sign == "-" and v is not ValueError:
684 vv = -v
685 try:
686 self.assertEqual(int(ss), vv)
687 except v:
688 pass
689
Walter Dörwald70a6b492004-02-12 17:35:32 +0000690 s = repr(-1-sys.maxint)
Walter Dörwald919497e2003-01-19 16:23:59 +0000691 self.assertEqual(int(s)+1, -sys.maxint)
692 # should return long
693 int(s[1:])
694
695 # should return long
696 x = int(1e100)
697 self.assert_(isinstance(x, long))
698 x = int(-1e100)
699 self.assert_(isinstance(x, long))
700
701
702 # SF bug 434186: 0x80000000/2 != 0x80000000>>1.
703 # Worked by accident in Windows release build, but failed in debug build.
704 # Failed in all Linux builds.
705 x = -1-sys.maxint
706 self.assertEqual(x >> 1, x//2)
707
708 self.assertRaises(ValueError, int, '123\0')
709 self.assertRaises(ValueError, int, '53', 40)
710
711 x = int('1' * 600)
712 self.assert_(isinstance(x, long))
713
714 if have_unicode:
715 x = int(unichr(0x661) * 600)
716 self.assert_(isinstance(x, long))
717
718 self.assertRaises(TypeError, int, 1, 12)
719
720 self.assertEqual(int('0123', 0), 83)
Neal Norwitz5898fa22005-11-22 05:17:40 +0000721 self.assertEqual(int('0x123', 16), 291)
Walter Dörwald919497e2003-01-19 16:23:59 +0000722
Tim Petersb713ec22006-05-23 18:45:30 +0000723 # SF bug 1334662: int(string, base) wrong answers
724 # Various representations of 2**32 evaluated to 0
725 # rather than 2**32 in previous versions
726
727 self.assertEqual(int('100000000000000000000000000000000', 2), 4294967296L)
728 self.assertEqual(int('102002022201221111211', 3), 4294967296L)
729 self.assertEqual(int('10000000000000000', 4), 4294967296L)
730 self.assertEqual(int('32244002423141', 5), 4294967296L)
731 self.assertEqual(int('1550104015504', 6), 4294967296L)
732 self.assertEqual(int('211301422354', 7), 4294967296L)
733 self.assertEqual(int('40000000000', 8), 4294967296L)
734 self.assertEqual(int('12068657454', 9), 4294967296L)
735 self.assertEqual(int('4294967296', 10), 4294967296L)
736 self.assertEqual(int('1904440554', 11), 4294967296L)
737 self.assertEqual(int('9ba461594', 12), 4294967296L)
738 self.assertEqual(int('535a79889', 13), 4294967296L)
739 self.assertEqual(int('2ca5b7464', 14), 4294967296L)
740 self.assertEqual(int('1a20dcd81', 15), 4294967296L)
741 self.assertEqual(int('100000000', 16), 4294967296L)
742 self.assertEqual(int('a7ffda91', 17), 4294967296L)
743 self.assertEqual(int('704he7g4', 18), 4294967296L)
744 self.assertEqual(int('4f5aff66', 19), 4294967296L)
745 self.assertEqual(int('3723ai4g', 20), 4294967296L)
746 self.assertEqual(int('281d55i4', 21), 4294967296L)
747 self.assertEqual(int('1fj8b184', 22), 4294967296L)
748 self.assertEqual(int('1606k7ic', 23), 4294967296L)
749 self.assertEqual(int('mb994ag', 24), 4294967296L)
750 self.assertEqual(int('hek2mgl', 25), 4294967296L)
751 self.assertEqual(int('dnchbnm', 26), 4294967296L)
752 self.assertEqual(int('b28jpdm', 27), 4294967296L)
753 self.assertEqual(int('8pfgih4', 28), 4294967296L)
754 self.assertEqual(int('76beigg', 29), 4294967296L)
755 self.assertEqual(int('5qmcpqg', 30), 4294967296L)
756 self.assertEqual(int('4q0jto4', 31), 4294967296L)
757 self.assertEqual(int('4000000', 32), 4294967296L)
758 self.assertEqual(int('3aokq94', 33), 4294967296L)
759 self.assertEqual(int('2qhxjli', 34), 4294967296L)
760 self.assertEqual(int('2br45qb', 35), 4294967296L)
761 self.assertEqual(int('1z141z4', 36), 4294967296L)
762
763 # SF bug 1334662: int(string, base) wrong answers
764 # Checks for proper evaluation of 2**32 + 1
765 self.assertEqual(int('100000000000000000000000000000001', 2), 4294967297L)
766 self.assertEqual(int('102002022201221111212', 3), 4294967297L)
767 self.assertEqual(int('10000000000000001', 4), 4294967297L)
768 self.assertEqual(int('32244002423142', 5), 4294967297L)
769 self.assertEqual(int('1550104015505', 6), 4294967297L)
770 self.assertEqual(int('211301422355', 7), 4294967297L)
771 self.assertEqual(int('40000000001', 8), 4294967297L)
772 self.assertEqual(int('12068657455', 9), 4294967297L)
773 self.assertEqual(int('4294967297', 10), 4294967297L)
774 self.assertEqual(int('1904440555', 11), 4294967297L)
775 self.assertEqual(int('9ba461595', 12), 4294967297L)
776 self.assertEqual(int('535a7988a', 13), 4294967297L)
777 self.assertEqual(int('2ca5b7465', 14), 4294967297L)
778 self.assertEqual(int('1a20dcd82', 15), 4294967297L)
779 self.assertEqual(int('100000001', 16), 4294967297L)
780 self.assertEqual(int('a7ffda92', 17), 4294967297L)
781 self.assertEqual(int('704he7g5', 18), 4294967297L)
782 self.assertEqual(int('4f5aff67', 19), 4294967297L)
783 self.assertEqual(int('3723ai4h', 20), 4294967297L)
784 self.assertEqual(int('281d55i5', 21), 4294967297L)
785 self.assertEqual(int('1fj8b185', 22), 4294967297L)
786 self.assertEqual(int('1606k7id', 23), 4294967297L)
787 self.assertEqual(int('mb994ah', 24), 4294967297L)
788 self.assertEqual(int('hek2mgm', 25), 4294967297L)
789 self.assertEqual(int('dnchbnn', 26), 4294967297L)
790 self.assertEqual(int('b28jpdn', 27), 4294967297L)
791 self.assertEqual(int('8pfgih5', 28), 4294967297L)
792 self.assertEqual(int('76beigh', 29), 4294967297L)
793 self.assertEqual(int('5qmcpqh', 30), 4294967297L)
794 self.assertEqual(int('4q0jto5', 31), 4294967297L)
795 self.assertEqual(int('4000001', 32), 4294967297L)
796 self.assertEqual(int('3aokq95', 33), 4294967297L)
797 self.assertEqual(int('2qhxjlj', 34), 4294967297L)
798 self.assertEqual(int('2br45qc', 35), 4294967297L)
799 self.assertEqual(int('1z141z5', 36), 4294967297L)
800
Brett Cannonc3647ac2005-04-26 03:45:26 +0000801 def test_intconversion(self):
802 # Test __int__()
803 class Foo0:
804 def __int__(self):
805 return 42
806
807 class Foo1(object):
808 def __int__(self):
809 return 42
810
811 class Foo2(int):
812 def __int__(self):
813 return 42
814
815 class Foo3(int):
816 def __int__(self):
817 return self
818
819 class Foo4(int):
820 def __int__(self):
821 return 42L
822
823 class Foo5(int):
824 def __int__(self):
825 return 42.
826
827 self.assertEqual(int(Foo0()), 42)
828 self.assertEqual(int(Foo1()), 42)
829 self.assertEqual(int(Foo2()), 42)
830 self.assertEqual(int(Foo3()), 0)
831 self.assertEqual(int(Foo4()), 42L)
832 self.assertRaises(TypeError, int, Foo5())
833
Walter Dörwald919497e2003-01-19 16:23:59 +0000834 def test_intern(self):
835 self.assertRaises(TypeError, intern)
836 s = "never interned before"
837 self.assert_(intern(s) is s)
838 s2 = s.swapcase().swapcase()
839 self.assert_(intern(s2) is s)
840
Jeremy Hylton4c989dd2004-08-07 19:20:05 +0000841 # Subclasses of string can't be interned, because they
842 # provide too much opportunity for insane things to happen.
843 # We don't want them in the interned dict and if they aren't
844 # actually interned, we don't want to create the appearance
845 # that they are by allowing intern() to succeeed.
846 class S(str):
847 def __hash__(self):
848 return 123
849
850 self.assertRaises(TypeError, intern, S("abc"))
851
852 # It's still safe to pass these strings to routines that
853 # call intern internally, e.g. PyObject_SetAttr().
854 s = S("abc")
855 setattr(s, s, s)
856 self.assertEqual(getattr(s, s), s)
857
Walter Dörwald919497e2003-01-19 16:23:59 +0000858 def test_iter(self):
859 self.assertRaises(TypeError, iter)
860 self.assertRaises(TypeError, iter, 42, 42)
861 lists = [("1", "2"), ["1", "2"], "12"]
862 if have_unicode:
863 lists.append(unicode("12"))
864 for l in lists:
865 i = iter(l)
866 self.assertEqual(i.next(), '1')
867 self.assertEqual(i.next(), '2')
868 self.assertRaises(StopIteration, i.next)
869
870 def test_isinstance(self):
871 class C:
872 pass
873 class D(C):
874 pass
875 class E:
876 pass
877 c = C()
878 d = D()
879 e = E()
880 self.assert_(isinstance(c, C))
881 self.assert_(isinstance(d, C))
882 self.assert_(not isinstance(e, C))
883 self.assert_(not isinstance(c, D))
884 self.assert_(not isinstance('foo', E))
885 self.assertRaises(TypeError, isinstance, E, 'foo')
886 self.assertRaises(TypeError, isinstance)
887
888 def test_issubclass(self):
889 class C:
890 pass
891 class D(C):
892 pass
893 class E:
894 pass
895 c = C()
896 d = D()
897 e = E()
898 self.assert_(issubclass(D, C))
899 self.assert_(issubclass(C, C))
900 self.assert_(not issubclass(C, D))
901 self.assertRaises(TypeError, issubclass, 'foo', E)
902 self.assertRaises(TypeError, issubclass, E, 'foo')
903 self.assertRaises(TypeError, issubclass)
904
905 def test_len(self):
906 self.assertEqual(len('123'), 3)
907 self.assertEqual(len(()), 0)
908 self.assertEqual(len((1, 2, 3, 4)), 4)
909 self.assertEqual(len([1, 2, 3, 4]), 4)
910 self.assertEqual(len({}), 0)
911 self.assertEqual(len({'a':1, 'b': 2}), 2)
912 class BadSeq:
913 def __len__(self):
914 raise ValueError
915 self.assertRaises(ValueError, len, BadSeq())
916
917 def test_list(self):
918 self.assertEqual(list([]), [])
919 l0_3 = [0, 1, 2, 3]
920 l0_3_bis = list(l0_3)
921 self.assertEqual(l0_3, l0_3_bis)
922 self.assert_(l0_3 is not l0_3_bis)
923 self.assertEqual(list(()), [])
924 self.assertEqual(list((0, 1, 2, 3)), [0, 1, 2, 3])
925 self.assertEqual(list(''), [])
926 self.assertEqual(list('spam'), ['s', 'p', 'a', 'm'])
927
928 if sys.maxint == 0x7fffffff:
929 # This test can currently only work on 32-bit machines.
930 # XXX If/when PySequence_Length() returns a ssize_t, it should be
931 # XXX re-enabled.
932 # Verify clearing of bug #556025.
933 # This assumes that the max data size (sys.maxint) == max
934 # address size this also assumes that the address size is at
935 # least 4 bytes with 8 byte addresses, the bug is not well
936 # tested
937 #
938 # Note: This test is expected to SEGV under Cygwin 1.3.12 or
939 # earlier due to a newlib bug. See the following mailing list
940 # thread for the details:
941
942 # http://sources.redhat.com/ml/newlib/2002/msg00369.html
943 self.assertRaises(MemoryError, list, xrange(sys.maxint // 2))
944
Raymond Hettingeraa241e02004-09-26 19:24:20 +0000945 # This code used to segfault in Py2.4a3
946 x = []
947 x.extend(-y for y in x)
948 self.assertEqual(x, [])
949
Walter Dörwald919497e2003-01-19 16:23:59 +0000950 def test_long(self):
951 self.assertEqual(long(314), 314L)
952 self.assertEqual(long(3.14), 3L)
953 self.assertEqual(long(314L), 314L)
954 # Check that conversion from float truncates towards zero
955 self.assertEqual(long(-3.14), -3L)
956 self.assertEqual(long(3.9), 3L)
957 self.assertEqual(long(-3.9), -3L)
958 self.assertEqual(long(3.5), 3L)
959 self.assertEqual(long(-3.5), -3L)
960 self.assertEqual(long("-3"), -3L)
961 if have_unicode:
962 self.assertEqual(long(unicode("-3")), -3L)
963 # Different base:
964 self.assertEqual(long("10",16), 16L)
965 if have_unicode:
966 self.assertEqual(long(unicode("10"),16), 16L)
967 # Check conversions from string (same test set as for int(), and then some)
968 LL = [
969 ('1' + '0'*20, 10L**20),
970 ('1' + '0'*100, 10L**100)
971 ]
Walter Dörwaldc8cb5d92003-08-15 17:52:39 +0000972 L2 = L[:]
Walter Dörwald919497e2003-01-19 16:23:59 +0000973 if have_unicode:
974 L2 += [
975 (unicode('1') + unicode('0')*20, 10L**20),
976 (unicode('1') + unicode('0')*100, 10L**100),
977 ]
978 for s, v in L2 + LL:
979 for sign in "", "+", "-":
980 for prefix in "", " ", "\t", " \t\t ":
981 ss = prefix + sign + s
982 vv = v
983 if sign == "-" and v is not ValueError:
984 vv = -v
985 try:
986 self.assertEqual(long(ss), long(vv))
987 except v:
988 pass
989
990 self.assertRaises(ValueError, long, '123\0')
991 self.assertRaises(ValueError, long, '53', 40)
992 self.assertRaises(TypeError, long, 1, 12)
993
Tim Peters696cf432006-05-24 21:10:40 +0000994 self.assertEqual(long('100000000000000000000000000000000', 2),
995 4294967296)
996 self.assertEqual(long('102002022201221111211', 3), 4294967296)
997 self.assertEqual(long('10000000000000000', 4), 4294967296)
998 self.assertEqual(long('32244002423141', 5), 4294967296)
999 self.assertEqual(long('1550104015504', 6), 4294967296)
1000 self.assertEqual(long('211301422354', 7), 4294967296)
1001 self.assertEqual(long('40000000000', 8), 4294967296)
1002 self.assertEqual(long('12068657454', 9), 4294967296)
1003 self.assertEqual(long('4294967296', 10), 4294967296)
1004 self.assertEqual(long('1904440554', 11), 4294967296)
1005 self.assertEqual(long('9ba461594', 12), 4294967296)
1006 self.assertEqual(long('535a79889', 13), 4294967296)
1007 self.assertEqual(long('2ca5b7464', 14), 4294967296)
1008 self.assertEqual(long('1a20dcd81', 15), 4294967296)
1009 self.assertEqual(long('100000000', 16), 4294967296)
1010 self.assertEqual(long('a7ffda91', 17), 4294967296)
1011 self.assertEqual(long('704he7g4', 18), 4294967296)
1012 self.assertEqual(long('4f5aff66', 19), 4294967296)
1013 self.assertEqual(long('3723ai4g', 20), 4294967296)
1014 self.assertEqual(long('281d55i4', 21), 4294967296)
1015 self.assertEqual(long('1fj8b184', 22), 4294967296)
1016 self.assertEqual(long('1606k7ic', 23), 4294967296)
1017 self.assertEqual(long('mb994ag', 24), 4294967296)
1018 self.assertEqual(long('hek2mgl', 25), 4294967296)
1019 self.assertEqual(long('dnchbnm', 26), 4294967296)
1020 self.assertEqual(long('b28jpdm', 27), 4294967296)
1021 self.assertEqual(long('8pfgih4', 28), 4294967296)
1022 self.assertEqual(long('76beigg', 29), 4294967296)
1023 self.assertEqual(long('5qmcpqg', 30), 4294967296)
1024 self.assertEqual(long('4q0jto4', 31), 4294967296)
1025 self.assertEqual(long('4000000', 32), 4294967296)
1026 self.assertEqual(long('3aokq94', 33), 4294967296)
1027 self.assertEqual(long('2qhxjli', 34), 4294967296)
1028 self.assertEqual(long('2br45qb', 35), 4294967296)
1029 self.assertEqual(long('1z141z4', 36), 4294967296)
1030
1031 self.assertEqual(long('100000000000000000000000000000001', 2),
1032 4294967297)
1033 self.assertEqual(long('102002022201221111212', 3), 4294967297)
1034 self.assertEqual(long('10000000000000001', 4), 4294967297)
1035 self.assertEqual(long('32244002423142', 5), 4294967297)
1036 self.assertEqual(long('1550104015505', 6), 4294967297)
1037 self.assertEqual(long('211301422355', 7), 4294967297)
1038 self.assertEqual(long('40000000001', 8), 4294967297)
1039 self.assertEqual(long('12068657455', 9), 4294967297)
1040 self.assertEqual(long('4294967297', 10), 4294967297)
1041 self.assertEqual(long('1904440555', 11), 4294967297)
1042 self.assertEqual(long('9ba461595', 12), 4294967297)
1043 self.assertEqual(long('535a7988a', 13), 4294967297)
1044 self.assertEqual(long('2ca5b7465', 14), 4294967297)
1045 self.assertEqual(long('1a20dcd82', 15), 4294967297)
1046 self.assertEqual(long('100000001', 16), 4294967297)
1047 self.assertEqual(long('a7ffda92', 17), 4294967297)
1048 self.assertEqual(long('704he7g5', 18), 4294967297)
1049 self.assertEqual(long('4f5aff67', 19), 4294967297)
1050 self.assertEqual(long('3723ai4h', 20), 4294967297)
1051 self.assertEqual(long('281d55i5', 21), 4294967297)
1052 self.assertEqual(long('1fj8b185', 22), 4294967297)
1053 self.assertEqual(long('1606k7id', 23), 4294967297)
1054 self.assertEqual(long('mb994ah', 24), 4294967297)
1055 self.assertEqual(long('hek2mgm', 25), 4294967297)
1056 self.assertEqual(long('dnchbnn', 26), 4294967297)
1057 self.assertEqual(long('b28jpdn', 27), 4294967297)
1058 self.assertEqual(long('8pfgih5', 28), 4294967297)
1059 self.assertEqual(long('76beigh', 29), 4294967297)
1060 self.assertEqual(long('5qmcpqh', 30), 4294967297)
1061 self.assertEqual(long('4q0jto5', 31), 4294967297)
1062 self.assertEqual(long('4000001', 32), 4294967297)
1063 self.assertEqual(long('3aokq95', 33), 4294967297)
1064 self.assertEqual(long('2qhxjlj', 34), 4294967297)
1065 self.assertEqual(long('2br45qc', 35), 4294967297)
1066 self.assertEqual(long('1z141z5', 36), 4294967297)
1067
1068
Brett Cannonc3647ac2005-04-26 03:45:26 +00001069 def test_longconversion(self):
1070 # Test __long__()
1071 class Foo0:
1072 def __long__(self):
1073 return 42L
1074
1075 class Foo1(object):
1076 def __long__(self):
1077 return 42L
1078
1079 class Foo2(long):
1080 def __long__(self):
1081 return 42L
1082
1083 class Foo3(long):
1084 def __long__(self):
1085 return self
1086
1087 class Foo4(long):
1088 def __long__(self):
1089 return 42
1090
1091 class Foo5(long):
1092 def __long__(self):
1093 return 42.
1094
1095 self.assertEqual(long(Foo0()), 42L)
1096 self.assertEqual(long(Foo1()), 42L)
1097 self.assertEqual(long(Foo2()), 42L)
1098 self.assertEqual(long(Foo3()), 0)
1099 self.assertEqual(long(Foo4()), 42)
1100 self.assertRaises(TypeError, long, Foo5())
1101
Walter Dörwald919497e2003-01-19 16:23:59 +00001102 def test_map(self):
1103 self.assertEqual(
1104 map(None, 'hello world'),
1105 ['h','e','l','l','o',' ','w','o','r','l','d']
1106 )
1107 self.assertEqual(
1108 map(None, 'abcd', 'efg'),
1109 [('a', 'e'), ('b', 'f'), ('c', 'g'), ('d', None)]
1110 )
1111 self.assertEqual(
1112 map(None, range(10)),
1113 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
1114 )
1115 self.assertEqual(
1116 map(lambda x: x*x, range(1,4)),
1117 [1, 4, 9]
1118 )
1119 try:
1120 from math import sqrt
1121 except ImportError:
1122 def sqrt(x):
1123 return pow(x, 0.5)
1124 self.assertEqual(
1125 map(lambda x: map(sqrt,x), [[16, 4], [81, 9]]),
1126 [[4.0, 2.0], [9.0, 3.0]]
1127 )
1128 self.assertEqual(
1129 map(lambda x, y: x+y, [1,3,2], [9,1,4]),
1130 [10, 4, 6]
1131 )
1132
1133 def plus(*v):
1134 accu = 0
1135 for i in v: accu = accu + i
1136 return accu
1137 self.assertEqual(
1138 map(plus, [1, 3, 7]),
1139 [1, 3, 7]
1140 )
1141 self.assertEqual(
1142 map(plus, [1, 3, 7], [4, 9, 2]),
1143 [1+4, 3+9, 7+2]
1144 )
1145 self.assertEqual(
1146 map(plus, [1, 3, 7], [4, 9, 2], [1, 1, 0]),
1147 [1+4+1, 3+9+1, 7+2+0]
1148 )
1149 self.assertEqual(
1150 map(None, Squares(10)),
1151 [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
1152 )
1153 self.assertEqual(
1154 map(int, Squares(10)),
1155 [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
1156 )
1157 self.assertEqual(
1158 map(None, Squares(3), Squares(2)),
1159 [(0,0), (1,1), (4,None)]
1160 )
1161 self.assertEqual(
1162 map(max, Squares(3), Squares(2)),
1163 [0, 1, 4]
1164 )
1165 self.assertRaises(TypeError, map)
1166 self.assertRaises(TypeError, map, lambda x: x, 42)
1167 self.assertEqual(map(None, [42]), [42])
1168 class BadSeq:
1169 def __getitem__(self, index):
1170 raise ValueError
1171 self.assertRaises(ValueError, map, lambda x: x, BadSeq())
Neal Norwitzfcf44352005-11-27 20:37:43 +00001172 def badfunc(x):
1173 raise RuntimeError
1174 self.assertRaises(RuntimeError, map, badfunc, range(5))
Walter Dörwald919497e2003-01-19 16:23:59 +00001175
1176 def test_max(self):
1177 self.assertEqual(max('123123'), '3')
1178 self.assertEqual(max(1, 2, 3), 3)
1179 self.assertEqual(max((1, 2, 3, 1, 2, 3)), 3)
1180 self.assertEqual(max([1, 2, 3, 1, 2, 3]), 3)
1181
1182 self.assertEqual(max(1, 2L, 3.0), 3.0)
1183 self.assertEqual(max(1L, 2.0, 3), 3)
1184 self.assertEqual(max(1.0, 2, 3L), 3L)
1185
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001186 for stmt in (
1187 "max(key=int)", # no args
1188 "max(1, key=int)", # single arg not iterable
1189 "max(1, 2, keystone=int)", # wrong keyword
1190 "max(1, 2, key=int, abc=int)", # two many keywords
1191 "max(1, 2, key=1)", # keyfunc is not callable
1192 ):
Tim Peters7f061872004-12-07 21:17:46 +00001193 try:
1194 exec(stmt) in globals()
1195 except TypeError:
1196 pass
1197 else:
1198 self.fail(stmt)
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001199
1200 self.assertEqual(max((1,), key=neg), 1) # one elem iterable
1201 self.assertEqual(max((1,2), key=neg), 1) # two elem iterable
1202 self.assertEqual(max(1, 2, key=neg), 1) # two elems
1203
1204 data = [random.randrange(200) for i in range(100)]
1205 keys = dict((elem, random.randrange(50)) for elem in data)
1206 f = keys.__getitem__
1207 self.assertEqual(max(data, key=f),
1208 sorted(reversed(data), key=f)[-1])
1209
Walter Dörwald919497e2003-01-19 16:23:59 +00001210 def test_min(self):
1211 self.assertEqual(min('123123'), '1')
1212 self.assertEqual(min(1, 2, 3), 1)
1213 self.assertEqual(min((1, 2, 3, 1, 2, 3)), 1)
1214 self.assertEqual(min([1, 2, 3, 1, 2, 3]), 1)
1215
1216 self.assertEqual(min(1, 2L, 3.0), 1)
1217 self.assertEqual(min(1L, 2.0, 3), 1L)
1218 self.assertEqual(min(1.0, 2, 3L), 1.0)
1219
1220 self.assertRaises(TypeError, min)
1221 self.assertRaises(TypeError, min, 42)
1222 self.assertRaises(ValueError, min, ())
1223 class BadSeq:
1224 def __getitem__(self, index):
1225 raise ValueError
1226 self.assertRaises(ValueError, min, BadSeq())
1227 class BadNumber:
1228 def __cmp__(self, other):
1229 raise ValueError
1230 self.assertRaises(ValueError, min, (42, BadNumber()))
1231
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001232 for stmt in (
1233 "min(key=int)", # no args
1234 "min(1, key=int)", # single arg not iterable
1235 "min(1, 2, keystone=int)", # wrong keyword
1236 "min(1, 2, key=int, abc=int)", # two many keywords
1237 "min(1, 2, key=1)", # keyfunc is not callable
1238 ):
Tim Peters7f061872004-12-07 21:17:46 +00001239 try:
1240 exec(stmt) in globals()
1241 except TypeError:
1242 pass
1243 else:
1244 self.fail(stmt)
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001245
1246 self.assertEqual(min((1,), key=neg), 1) # one elem iterable
1247 self.assertEqual(min((1,2), key=neg), 2) # two elem iterable
1248 self.assertEqual(min(1, 2, key=neg), 2) # two elems
1249
1250 data = [random.randrange(200) for i in range(100)]
1251 keys = dict((elem, random.randrange(50)) for elem in data)
1252 f = keys.__getitem__
1253 self.assertEqual(min(data, key=f),
1254 sorted(data, key=f)[0])
1255
Walter Dörwald919497e2003-01-19 16:23:59 +00001256 def test_oct(self):
1257 self.assertEqual(oct(100), '0144')
1258 self.assertEqual(oct(100L), '0144L')
Guido van Rossum6c9e1302003-11-29 23:52:13 +00001259 self.assertEqual(oct(-100), '-0144')
Walter Dörwald919497e2003-01-19 16:23:59 +00001260 self.assertEqual(oct(-100L), '-0144L')
1261 self.assertRaises(TypeError, oct, ())
1262
1263 def write_testfile(self):
1264 # NB the first 4 lines are also used to test input and raw_input, below
1265 fp = open(TESTFN, 'w')
1266 try:
1267 fp.write('1+1\n')
1268 fp.write('1+1\n')
1269 fp.write('The quick brown fox jumps over the lazy dog')
1270 fp.write('.\n')
1271 fp.write('Dear John\n')
1272 fp.write('XXX'*100)
1273 fp.write('YYY'*100)
1274 finally:
1275 fp.close()
1276
1277 def test_open(self):
1278 self.write_testfile()
1279 fp = open(TESTFN, 'r')
1280 try:
1281 self.assertEqual(fp.readline(4), '1+1\n')
1282 self.assertEqual(fp.readline(4), '1+1\n')
1283 self.assertEqual(fp.readline(), 'The quick brown fox jumps over the lazy dog.\n')
1284 self.assertEqual(fp.readline(4), 'Dear')
1285 self.assertEqual(fp.readline(100), ' John\n')
1286 self.assertEqual(fp.read(300), 'XXX'*100)
1287 self.assertEqual(fp.read(1000), 'YYY'*100)
1288 finally:
1289 fp.close()
1290 unlink(TESTFN)
1291
1292 def test_ord(self):
1293 self.assertEqual(ord(' '), 32)
1294 self.assertEqual(ord('A'), 65)
1295 self.assertEqual(ord('a'), 97)
1296 if have_unicode:
1297 self.assertEqual(ord(unichr(sys.maxunicode)), sys.maxunicode)
1298 self.assertRaises(TypeError, ord, 42)
Walter Dörwald4e41a4b2005-08-03 17:09:04 +00001299 if have_unicode:
1300 self.assertRaises(TypeError, ord, unicode("12"))
Walter Dörwald919497e2003-01-19 16:23:59 +00001301
1302 def test_pow(self):
1303 self.assertEqual(pow(0,0), 1)
1304 self.assertEqual(pow(0,1), 0)
1305 self.assertEqual(pow(1,0), 1)
1306 self.assertEqual(pow(1,1), 1)
1307
1308 self.assertEqual(pow(2,0), 1)
1309 self.assertEqual(pow(2,10), 1024)
1310 self.assertEqual(pow(2,20), 1024*1024)
1311 self.assertEqual(pow(2,30), 1024*1024*1024)
1312
1313 self.assertEqual(pow(-2,0), 1)
1314 self.assertEqual(pow(-2,1), -2)
1315 self.assertEqual(pow(-2,2), 4)
1316 self.assertEqual(pow(-2,3), -8)
1317
1318 self.assertEqual(pow(0L,0), 1)
1319 self.assertEqual(pow(0L,1), 0)
1320 self.assertEqual(pow(1L,0), 1)
1321 self.assertEqual(pow(1L,1), 1)
1322
1323 self.assertEqual(pow(2L,0), 1)
1324 self.assertEqual(pow(2L,10), 1024)
1325 self.assertEqual(pow(2L,20), 1024*1024)
1326 self.assertEqual(pow(2L,30), 1024*1024*1024)
1327
1328 self.assertEqual(pow(-2L,0), 1)
1329 self.assertEqual(pow(-2L,1), -2)
1330 self.assertEqual(pow(-2L,2), 4)
1331 self.assertEqual(pow(-2L,3), -8)
1332
1333 self.assertAlmostEqual(pow(0.,0), 1.)
1334 self.assertAlmostEqual(pow(0.,1), 0.)
1335 self.assertAlmostEqual(pow(1.,0), 1.)
1336 self.assertAlmostEqual(pow(1.,1), 1.)
1337
1338 self.assertAlmostEqual(pow(2.,0), 1.)
1339 self.assertAlmostEqual(pow(2.,10), 1024.)
1340 self.assertAlmostEqual(pow(2.,20), 1024.*1024.)
1341 self.assertAlmostEqual(pow(2.,30), 1024.*1024.*1024.)
1342
1343 self.assertAlmostEqual(pow(-2.,0), 1.)
1344 self.assertAlmostEqual(pow(-2.,1), -2.)
1345 self.assertAlmostEqual(pow(-2.,2), 4.)
1346 self.assertAlmostEqual(pow(-2.,3), -8.)
1347
1348 for x in 2, 2L, 2.0:
1349 for y in 10, 10L, 10.0:
1350 for z in 1000, 1000L, 1000.0:
1351 if isinstance(x, float) or \
1352 isinstance(y, float) or \
1353 isinstance(z, float):
1354 self.assertRaises(TypeError, pow, x, y, z)
1355 else:
1356 self.assertAlmostEqual(pow(x, y, z), 24.0)
1357
1358 self.assertRaises(TypeError, pow, -1, -2, 3)
1359 self.assertRaises(ValueError, pow, 1, 2, 0)
1360 self.assertRaises(TypeError, pow, -1L, -2L, 3L)
1361 self.assertRaises(ValueError, pow, 1L, 2L, 0L)
1362 self.assertRaises(ValueError, pow, -342.43, 0.234)
1363
1364 self.assertRaises(TypeError, pow)
1365
1366 def test_range(self):
1367 self.assertEqual(range(3), [0, 1, 2])
1368 self.assertEqual(range(1, 5), [1, 2, 3, 4])
1369 self.assertEqual(range(0), [])
1370 self.assertEqual(range(-3), [])
1371 self.assertEqual(range(1, 10, 3), [1, 4, 7])
1372 self.assertEqual(range(5, -5, -3), [5, 2, -1, -4])
1373
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001374 # Now test range() with longs
1375 self.assertEqual(range(-2**100), [])
1376 self.assertEqual(range(0, -2**100), [])
1377 self.assertEqual(range(0, 2**100, -1), [])
1378 self.assertEqual(range(0, 2**100, -1), [])
1379
1380 a = long(10 * sys.maxint)
1381 b = long(100 * sys.maxint)
1382 c = long(50 * sys.maxint)
1383
1384 self.assertEqual(range(a, a+2), [a, a+1])
1385 self.assertEqual(range(a+2, a, -1L), [a+2, a+1])
1386 self.assertEqual(range(a+4, a, -2), [a+4, a+2])
1387
1388 seq = range(a, b, c)
1389 self.assert_(a in seq)
1390 self.assert_(b not in seq)
1391 self.assertEqual(len(seq), 2)
1392
1393 seq = range(b, a, -c)
1394 self.assert_(b in seq)
1395 self.assert_(a not in seq)
1396 self.assertEqual(len(seq), 2)
1397
1398 seq = range(-a, -b, -c)
1399 self.assert_(-a in seq)
1400 self.assert_(-b not in seq)
1401 self.assertEqual(len(seq), 2)
1402
Walter Dörwald919497e2003-01-19 16:23:59 +00001403 self.assertRaises(TypeError, range)
1404 self.assertRaises(TypeError, range, 1, 2, 3, 4)
1405 self.assertRaises(ValueError, range, 1, 2, 0)
Neal Norwitzfcf44352005-11-27 20:37:43 +00001406 self.assertRaises(ValueError, range, a, a + 1, long(0))
1407
1408 class badzero(int):
1409 def __cmp__(self, other):
1410 raise RuntimeError
1411 self.assertRaises(RuntimeError, range, a, a + 1, badzero(1))
Walter Dörwald919497e2003-01-19 16:23:59 +00001412
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001413 # Reject floats when it would require PyLongs to represent.
1414 # (smaller floats still accepted, but deprecated)
Tim Peters299b3df2003-04-15 14:40:03 +00001415 self.assertRaises(TypeError, range, 1e100, 1e101, 1e101)
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001416
Walter Dörwald357981e2003-04-15 18:59:28 +00001417 self.assertRaises(TypeError, range, 0, "spam")
1418 self.assertRaises(TypeError, range, 0, 42, "spam")
1419
1420 self.assertRaises(OverflowError, range, -sys.maxint, sys.maxint)
1421 self.assertRaises(OverflowError, range, 0, 2*sys.maxint)
1422
Walter Dörwald919497e2003-01-19 16:23:59 +00001423 def test_input_and_raw_input(self):
1424 self.write_testfile()
1425 fp = open(TESTFN, 'r')
1426 savestdin = sys.stdin
1427 savestdout = sys.stdout # Eats the echo
1428 try:
1429 sys.stdin = fp
1430 sys.stdout = BitBucket()
1431 self.assertEqual(input(), 2)
1432 self.assertEqual(input('testing\n'), 2)
1433 self.assertEqual(raw_input(), 'The quick brown fox jumps over the lazy dog.')
1434 self.assertEqual(raw_input('testing\n'), 'Dear John')
Tim Peters8e24a962006-08-09 00:52:26 +00001435
Georg Brandl7e3ba2a2006-08-06 08:23:54 +00001436 # SF 1535165: don't segfault on closed stdin
1437 # sys.stdout must be a regular file for triggering
1438 sys.stdout = savestdout
1439 sys.stdin.close()
Georg Brandld336e982006-08-06 09:17:16 +00001440 self.assertRaises(ValueError, input)
Georg Brandl7e3ba2a2006-08-06 08:23:54 +00001441
1442 sys.stdout = BitBucket()
Walter Dörwald919497e2003-01-19 16:23:59 +00001443 sys.stdin = cStringIO.StringIO("NULL\0")
1444 self.assertRaises(TypeError, input, 42, 42)
1445 sys.stdin = cStringIO.StringIO(" 'whitespace'")
1446 self.assertEqual(input(), 'whitespace')
1447 sys.stdin = cStringIO.StringIO()
1448 self.assertRaises(EOFError, input)
Hye-Shik Changff83c2b2004-02-02 13:39:01 +00001449
1450 # SF 876178: make sure input() respect future options.
1451 sys.stdin = cStringIO.StringIO('1/2')
1452 sys.stdout = cStringIO.StringIO()
1453 exec compile('print input()', 'test_builtin_tmp', 'exec')
1454 sys.stdin.seek(0, 0)
1455 exec compile('from __future__ import division;print input()',
1456 'test_builtin_tmp', 'exec')
1457 sys.stdin.seek(0, 0)
1458 exec compile('print input()', 'test_builtin_tmp', 'exec')
Tim Petersb82cb8d2006-03-28 07:39:22 +00001459 # The result we expect depends on whether new division semantics
1460 # are already in effect.
1461 if 1/2 == 0:
1462 # This test was compiled with old semantics.
1463 expected = ['0', '0.5', '0']
1464 else:
1465 # This test was compiled with new semantics (e.g., -Qnew
1466 # was given on the command line.
1467 expected = ['0.5', '0.5', '0.5']
1468 self.assertEqual(sys.stdout.getvalue().splitlines(), expected)
Hye-Shik Changff83c2b2004-02-02 13:39:01 +00001469
Walter Dörwald919497e2003-01-19 16:23:59 +00001470 del sys.stdout
1471 self.assertRaises(RuntimeError, input, 'prompt')
1472 del sys.stdin
1473 self.assertRaises(RuntimeError, input, 'prompt')
1474 finally:
1475 sys.stdin = savestdin
1476 sys.stdout = savestdout
1477 fp.close()
1478 unlink(TESTFN)
1479
1480 def test_reduce(self):
1481 self.assertEqual(reduce(lambda x, y: x+y, ['a', 'b', 'c'], ''), 'abc')
1482 self.assertEqual(
1483 reduce(lambda x, y: x+y, [['a', 'c'], [], ['d', 'w']], []),
1484 ['a','c','d','w']
1485 )
1486 self.assertEqual(reduce(lambda x, y: x*y, range(2,8), 1), 5040)
1487 self.assertEqual(
1488 reduce(lambda x, y: x*y, range(2,21), 1L),
1489 2432902008176640000L
1490 )
1491 self.assertEqual(reduce(lambda x, y: x+y, Squares(10)), 285)
1492 self.assertEqual(reduce(lambda x, y: x+y, Squares(10), 0), 285)
1493 self.assertEqual(reduce(lambda x, y: x+y, Squares(0), 0), 0)
1494 self.assertRaises(TypeError, reduce)
1495 self.assertRaises(TypeError, reduce, 42, 42)
1496 self.assertRaises(TypeError, reduce, 42, 42, 42)
1497 self.assertEqual(reduce(42, "1"), "1") # func is never called with one item
1498 self.assertEqual(reduce(42, "", "1"), "1") # func is never called with one item
1499 self.assertRaises(TypeError, reduce, 42, (42, 42))
1500
1501 class BadSeq:
1502 def __getitem__(self, index):
1503 raise ValueError
1504 self.assertRaises(ValueError, reduce, 42, BadSeq())
1505
1506 def test_reload(self):
1507 import marshal
1508 reload(marshal)
1509 import string
1510 reload(string)
1511 ## import sys
1512 ## self.assertRaises(ImportError, reload, sys)
1513
1514 def test_repr(self):
1515 self.assertEqual(repr(''), '\'\'')
1516 self.assertEqual(repr(0), '0')
1517 self.assertEqual(repr(0L), '0L')
1518 self.assertEqual(repr(()), '()')
1519 self.assertEqual(repr([]), '[]')
1520 self.assertEqual(repr({}), '{}')
1521 a = []
1522 a.append(a)
1523 self.assertEqual(repr(a), '[[...]]')
1524 a = {}
1525 a[0] = a
1526 self.assertEqual(repr(a), '{0: {...}}')
1527
1528 def test_round(self):
1529 self.assertEqual(round(0.0), 0.0)
1530 self.assertEqual(round(1.0), 1.0)
1531 self.assertEqual(round(10.0), 10.0)
1532 self.assertEqual(round(1000000000.0), 1000000000.0)
1533 self.assertEqual(round(1e20), 1e20)
1534
1535 self.assertEqual(round(-1.0), -1.0)
1536 self.assertEqual(round(-10.0), -10.0)
1537 self.assertEqual(round(-1000000000.0), -1000000000.0)
1538 self.assertEqual(round(-1e20), -1e20)
1539
1540 self.assertEqual(round(0.1), 0.0)
1541 self.assertEqual(round(1.1), 1.0)
1542 self.assertEqual(round(10.1), 10.0)
1543 self.assertEqual(round(1000000000.1), 1000000000.0)
1544
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(0.9), 1.0)
1550 self.assertEqual(round(9.9), 10.0)
1551 self.assertEqual(round(999999999.9), 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(-8.0, -1), -10.0)
1558
Georg Brandlccadf842006-03-31 18:54:53 +00001559 # test new kwargs
1560 self.assertEqual(round(number=-8.0, ndigits=-1), -10.0)
1561
Walter Dörwald919497e2003-01-19 16:23:59 +00001562 self.assertRaises(TypeError, round)
1563
1564 def test_setattr(self):
Tim Petersf2715e02003-02-19 02:35:07 +00001565 setattr(sys, 'spam', 1)
1566 self.assertEqual(sys.spam, 1)
1567 self.assertRaises(TypeError, setattr, sys, 1, 'spam')
1568 self.assertRaises(TypeError, setattr)
Walter Dörwald919497e2003-01-19 16:23:59 +00001569
1570 def test_str(self):
1571 self.assertEqual(str(''), '')
1572 self.assertEqual(str(0), '0')
1573 self.assertEqual(str(0L), '0')
1574 self.assertEqual(str(()), '()')
1575 self.assertEqual(str([]), '[]')
1576 self.assertEqual(str({}), '{}')
1577 a = []
1578 a.append(a)
1579 self.assertEqual(str(a), '[[...]]')
1580 a = {}
1581 a[0] = a
1582 self.assertEqual(str(a), '{0: {...}}')
1583
Alex Martellia70b1912003-04-22 08:12:33 +00001584 def test_sum(self):
1585 self.assertEqual(sum([]), 0)
1586 self.assertEqual(sum(range(2,8)), 27)
1587 self.assertEqual(sum(iter(range(2,8))), 27)
1588 self.assertEqual(sum(Squares(10)), 285)
1589 self.assertEqual(sum(iter(Squares(10))), 285)
1590 self.assertEqual(sum([[1], [2], [3]], []), [1, 2, 3])
1591
1592 self.assertRaises(TypeError, sum)
1593 self.assertRaises(TypeError, sum, 42)
1594 self.assertRaises(TypeError, sum, ['a', 'b', 'c'])
1595 self.assertRaises(TypeError, sum, ['a', 'b', 'c'], '')
1596 self.assertRaises(TypeError, sum, [[1], [2], [3]])
1597 self.assertRaises(TypeError, sum, [{2:3}])
1598 self.assertRaises(TypeError, sum, [{2:3}]*2, {2:3})
1599
1600 class BadSeq:
1601 def __getitem__(self, index):
1602 raise ValueError
1603 self.assertRaises(ValueError, sum, BadSeq())
1604
Walter Dörwald919497e2003-01-19 16:23:59 +00001605 def test_tuple(self):
1606 self.assertEqual(tuple(()), ())
1607 t0_3 = (0, 1, 2, 3)
1608 t0_3_bis = tuple(t0_3)
1609 self.assert_(t0_3 is t0_3_bis)
1610 self.assertEqual(tuple([]), ())
1611 self.assertEqual(tuple([0, 1, 2, 3]), (0, 1, 2, 3))
1612 self.assertEqual(tuple(''), ())
1613 self.assertEqual(tuple('spam'), ('s', 'p', 'a', 'm'))
1614
1615 def test_type(self):
1616 self.assertEqual(type(''), type('123'))
1617 self.assertNotEqual(type(''), type(()))
1618
1619 def test_unichr(self):
1620 if have_unicode:
1621 self.assertEqual(unichr(32), unicode(' '))
1622 self.assertEqual(unichr(65), unicode('A'))
1623 self.assertEqual(unichr(97), unicode('a'))
1624 self.assertEqual(
1625 unichr(sys.maxunicode),
1626 unicode('\\U%08x' % (sys.maxunicode), 'unicode-escape')
1627 )
1628 self.assertRaises(ValueError, unichr, sys.maxunicode+1)
1629 self.assertRaises(TypeError, unichr)
1630
Guido van Rossumfee7b932005-01-16 00:21:28 +00001631 # We don't want self in vars(), so these are static methods
1632
1633 @staticmethod
Walter Dörwald919497e2003-01-19 16:23:59 +00001634 def get_vars_f0():
1635 return vars()
Walter Dörwald919497e2003-01-19 16:23:59 +00001636
Guido van Rossumfee7b932005-01-16 00:21:28 +00001637 @staticmethod
Walter Dörwald919497e2003-01-19 16:23:59 +00001638 def get_vars_f2():
1639 BuiltinTest.get_vars_f0()
1640 a = 1
1641 b = 2
1642 return vars()
Walter Dörwald919497e2003-01-19 16:23:59 +00001643
1644 def test_vars(self):
Raymond Hettingera690a992003-11-16 16:17:49 +00001645 self.assertEqual(set(vars()), set(dir()))
Walter Dörwald919497e2003-01-19 16:23:59 +00001646 import sys
Raymond Hettingera690a992003-11-16 16:17:49 +00001647 self.assertEqual(set(vars(sys)), set(dir(sys)))
Walter Dörwald919497e2003-01-19 16:23:59 +00001648 self.assertEqual(self.get_vars_f0(), {})
1649 self.assertEqual(self.get_vars_f2(), {'a': 1, 'b': 2})
1650 self.assertRaises(TypeError, vars, 42, 42)
1651 self.assertRaises(TypeError, vars, 42)
1652
1653 def test_zip(self):
1654 a = (1, 2, 3)
1655 b = (4, 5, 6)
1656 t = [(1, 4), (2, 5), (3, 6)]
1657 self.assertEqual(zip(a, b), t)
1658 b = [4, 5, 6]
1659 self.assertEqual(zip(a, b), t)
1660 b = (4, 5, 6, 7)
1661 self.assertEqual(zip(a, b), t)
1662 class I:
1663 def __getitem__(self, i):
1664 if i < 0 or i > 2: raise IndexError
1665 return i + 4
1666 self.assertEqual(zip(a, I()), t)
Raymond Hettingereaef6152003-08-02 07:42:57 +00001667 self.assertEqual(zip(), [])
1668 self.assertEqual(zip(*[]), [])
Walter Dörwald919497e2003-01-19 16:23:59 +00001669 self.assertRaises(TypeError, zip, None)
1670 class G:
1671 pass
1672 self.assertRaises(TypeError, zip, a, G())
1673
1674 # Make sure zip doesn't try to allocate a billion elements for the
1675 # result list when one of its arguments doesn't say how long it is.
1676 # A MemoryError is the most likely failure mode.
1677 class SequenceWithoutALength:
1678 def __getitem__(self, i):
1679 if i == 5:
1680 raise IndexError
1681 else:
1682 return i
1683 self.assertEqual(
1684 zip(SequenceWithoutALength(), xrange(2**30)),
1685 list(enumerate(range(5)))
1686 )
1687
1688 class BadSeq:
1689 def __getitem__(self, i):
1690 if i == 5:
1691 raise ValueError
1692 else:
1693 return i
1694 self.assertRaises(ValueError, zip, BadSeq(), BadSeq())
1695
Raymond Hettinger64958a12003-12-17 20:43:33 +00001696class TestSorted(unittest.TestCase):
1697
1698 def test_basic(self):
1699 data = range(100)
1700 copy = data[:]
1701 random.shuffle(copy)
1702 self.assertEqual(data, sorted(copy))
1703 self.assertNotEqual(data, copy)
1704
1705 data.reverse()
1706 random.shuffle(copy)
1707 self.assertEqual(data, sorted(copy, cmp=lambda x, y: cmp(y,x)))
1708 self.assertNotEqual(data, copy)
1709 random.shuffle(copy)
1710 self.assertEqual(data, sorted(copy, key=lambda x: -x))
1711 self.assertNotEqual(data, copy)
1712 random.shuffle(copy)
1713 self.assertEqual(data, sorted(copy, reverse=1))
1714 self.assertNotEqual(data, copy)
1715
1716 def test_inputtypes(self):
1717 s = 'abracadabra'
Walter Dörwald4e41a4b2005-08-03 17:09:04 +00001718 types = [list, tuple]
1719 if have_unicode:
1720 types.insert(0, unicode)
1721 for T in types:
Raymond Hettinger64958a12003-12-17 20:43:33 +00001722 self.assertEqual(sorted(s), sorted(T(s)))
1723
1724 s = ''.join(dict.fromkeys(s).keys()) # unique letters only
Walter Dörwald4e41a4b2005-08-03 17:09:04 +00001725 types = [set, frozenset, list, tuple, dict.fromkeys]
1726 if have_unicode:
1727 types.insert(0, unicode)
1728 for T in types:
Raymond Hettinger64958a12003-12-17 20:43:33 +00001729 self.assertEqual(sorted(s), sorted(T(s)))
1730
1731 def test_baddecorator(self):
1732 data = 'The quick Brown fox Jumped over The lazy Dog'.split()
1733 self.assertRaises(TypeError, sorted, data, None, lambda x,y: 0)
1734
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001735def test_main(verbose=None):
1736 test_classes = (BuiltinTest, TestSorted)
1737
1738 run_unittest(*test_classes)
1739
1740 # verify reference counting
1741 if verbose and hasattr(sys, "gettotalrefcount"):
1742 import gc
1743 counts = [None] * 5
1744 for i in xrange(len(counts)):
1745 run_unittest(*test_classes)
1746 gc.collect()
1747 counts[i] = sys.gettotalrefcount()
1748 print counts
1749
Walter Dörwald919497e2003-01-19 16:23:59 +00001750
1751if __name__ == "__main__":
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001752 test_main(verbose=True)