blob: 9af3233331cc00f9286e9f6480736639281dfddc [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
4from test.test_support import fcmp, have_unicode, TESTFN, unlink
Guido van Rossum3bead091992-01-27 17:00:37 +00005
Walter Dörwald919497e2003-01-19 16:23:59 +00006import sys, warnings, cStringIO
7warnings.filterwarnings("ignore", "hex../oct.. of negative int",
8 FutureWarning, __name__)
Guido van Rossum3bead091992-01-27 17:00:37 +00009
Walter Dörwald919497e2003-01-19 16:23:59 +000010class Squares:
Guido van Rossum3bead091992-01-27 17:00:37 +000011
Walter Dörwald919497e2003-01-19 16:23:59 +000012 def __init__(self, max):
13 self.max = max
14 self.sofar = []
15
16 def __len__(self): return len(self.sofar)
17
18 def __getitem__(self, i):
19 if not 0 <= i < self.max: raise IndexError
20 n = len(self.sofar)
21 while n <= i:
22 self.sofar.append(n*n)
23 n += 1
24 return self.sofar[i]
25
26class StrSquares:
27
28 def __init__(self, max):
29 self.max = max
30 self.sofar = []
31
32 def __len__(self):
33 return len(self.sofar)
34
35 def __getitem__(self, i):
36 if not 0 <= i < self.max:
37 raise IndexError
38 n = len(self.sofar)
39 while n <= i:
40 self.sofar.append(str(n*n))
41 n += 1
42 return self.sofar[i]
43
44class BitBucket:
45 def write(self, line):
46 pass
47
48L = [
49 ('0', 0),
50 ('1', 1),
51 ('9', 9),
52 ('10', 10),
53 ('99', 99),
54 ('100', 100),
55 ('314', 314),
56 (' 314', 314),
57 ('314 ', 314),
58 (' \t\t 314 \t\t ', 314),
59 (`sys.maxint`, sys.maxint),
60 (' 1x', ValueError),
61 (' 1 ', 1),
62 (' 1\02 ', ValueError),
63 ('', ValueError),
64 (' ', ValueError),
65 (' \t\t ', ValueError)
66]
67if have_unicode:
68 L += [
69 (unicode('0'), 0),
70 (unicode('1'), 1),
71 (unicode('9'), 9),
72 (unicode('10'), 10),
73 (unicode('99'), 99),
74 (unicode('100'), 100),
75 (unicode('314'), 314),
76 (unicode(' 314'), 314),
77 (unicode('\u0663\u0661\u0664 ','raw-unicode-escape'), 314),
78 (unicode(' \t\t 314 \t\t '), 314),
79 (unicode(' 1x'), ValueError),
80 (unicode(' 1 '), 1),
81 (unicode(' 1\02 '), ValueError),
82 (unicode(''), ValueError),
83 (unicode(' '), ValueError),
84 (unicode(' \t\t '), ValueError),
85 (unichr(0x200), ValueError),
86]
87
88class BuiltinTest(unittest.TestCase):
89
90 def test_import(self):
91 __import__('sys')
92 __import__('time')
93 __import__('string')
94 self.assertRaises(ImportError, __import__, 'spamspam')
95 self.assertRaises(TypeError, __import__, 1, 2, 3, 4)
96
97 def test_abs(self):
98 # int
99 self.assertEqual(abs(0), 0)
100 self.assertEqual(abs(1234), 1234)
101 self.assertEqual(abs(-1234), 1234)
102 # float
103 self.assertEqual(abs(0.0), 0.0)
104 self.assertEqual(abs(3.14), 3.14)
105 self.assertEqual(abs(-3.14), 3.14)
106 # long
107 self.assertEqual(abs(0L), 0L)
108 self.assertEqual(abs(1234L), 1234L)
109 self.assertEqual(abs(-1234L), 1234L)
110 # str
111 self.assertRaises(TypeError, abs, 'a')
112
113 def test_apply(self):
114 def f0(*args):
115 self.assertEqual(args, ())
116 def f1(a1):
117 self.assertEqual(a1, 1)
118 def f2(a1, a2):
119 self.assertEqual(a1, 1)
120 self.assertEqual(a2, 2)
121 def f3(a1, a2, a3):
122 self.assertEqual(a1, 1)
123 self.assertEqual(a2, 2)
124 self.assertEqual(a3, 3)
125 apply(f0, ())
126 apply(f1, (1,))
127 apply(f2, (1, 2))
128 apply(f3, (1, 2, 3))
129
130 # A PyCFunction that takes only positional parameters should allow an
131 # empty keyword dictionary to pass without a complaint, but raise a
132 # TypeError if the dictionary is non-empty.
133 apply(id, (1,), {})
134 self.assertRaises(TypeError, apply, id, (1,), {"foo": 1})
135 self.assertRaises(TypeError, apply)
136 self.assertRaises(TypeError, apply, id, 42)
137 self.assertRaises(TypeError, apply, id, (42,), 42)
138
139 def test_callable(self):
140 self.assert_(callable(len))
141 def f(): pass
142 self.assert_(callable(f))
143 class C:
144 def meth(self): pass
145 self.assert_(callable(C))
146 x = C()
147 self.assert_(callable(x.meth))
148 self.assert_(not callable(x))
149 class D(C):
150 def __call__(self): pass
151 y = D()
152 self.assert_(callable(y))
153 y()
154
155 def test_chr(self):
156 self.assertEqual(chr(32), ' ')
157 self.assertEqual(chr(65), 'A')
158 self.assertEqual(chr(97), 'a')
159 self.assertEqual(chr(0xff), '\xff')
160 self.assertRaises(ValueError, chr, 256)
161 self.assertRaises(TypeError, chr)
162
163 def test_cmp(self):
164 self.assertEqual(cmp(-1, 1), -1)
165 self.assertEqual(cmp(1, -1), 1)
166 self.assertEqual(cmp(1, 1), 0)
167 # verify that circular objects are handled
168 a = []; a.append(a)
169 b = []; b.append(b)
170 from UserList import UserList
171 c = UserList(); c.append(c)
172 self.assertEqual(cmp(a, b), 0)
173 self.assertEqual(cmp(b, c), 0)
174 self.assertEqual(cmp(c, a), 0)
175 self.assertEqual(cmp(a, c), 0)
176 # okay, now break the cycles
177 a.pop(); b.pop(); c.pop()
178 self.assertRaises(TypeError, cmp)
179
180 def test_coerce(self):
181 self.assert_(not fcmp(coerce(1, 1.1), (1.0, 1.1)))
182 self.assertEqual(coerce(1, 1L), (1L, 1L))
183 self.assert_(not fcmp(coerce(1L, 1.1), (1.0, 1.1)))
184 self.assertRaises(TypeError, coerce)
185 class BadNumber:
186 def __coerce__(self, other):
187 raise ValueError
188 self.assertRaises(ValueError, coerce, 42, BadNumber())
Neal Norwitzabcb0c02003-01-28 19:21:24 +0000189 self.assertRaises(OverflowError, coerce, 0.5, int("12345" * 1000))
Walter Dörwald919497e2003-01-19 16:23:59 +0000190
191 def test_compile(self):
192 compile('print 1\n', '', 'exec')
Just van Rossumf032f862003-02-09 20:38:48 +0000193 bom = '\xef\xbb\xbf'
194 compile(bom + 'print 1\n', '', 'exec')
Walter Dörwald919497e2003-01-19 16:23:59 +0000195 self.assertRaises(TypeError, compile)
196 self.assertRaises(ValueError, compile, 'print 42\n', '<string>', 'badmode')
197 self.assertRaises(ValueError, compile, 'print 42\n', '<string>', 'single', 0xff)
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000198 if have_unicode:
199 compile(unicode('print u"\xc3\xa5"\n', 'utf8'), '', 'exec')
Walter Dörwald919497e2003-01-19 16:23:59 +0000200
201 def test_complex(self):
202 class OS:
203 def __complex__(self): return 1+10j
204 class NS(object):
205 def __complex__(self): return 1+10j
206 self.assertEqual(complex(OS()), 1+10j)
207 self.assertEqual(complex(NS()), 1+10j)
208 self.assertEqual(complex("1+10j"), 1+10j)
209 self.assertEqual(complex(10), 10+0j)
210 self.assertEqual(complex(10.0), 10+0j)
211 self.assertEqual(complex(10L), 10+0j)
212 self.assertEqual(complex(10+0j), 10+0j)
213 self.assertEqual(complex(1,10), 1+10j)
214 self.assertEqual(complex(1,10L), 1+10j)
215 self.assertEqual(complex(1,10.0), 1+10j)
216 self.assertEqual(complex(1L,10), 1+10j)
217 self.assertEqual(complex(1L,10L), 1+10j)
218 self.assertEqual(complex(1L,10.0), 1+10j)
219 self.assertEqual(complex(1.0,10), 1+10j)
220 self.assertEqual(complex(1.0,10L), 1+10j)
221 self.assertEqual(complex(1.0,10.0), 1+10j)
222 self.assertEqual(complex(3.14+0j), 3.14+0j)
223 self.assertEqual(complex(3.14), 3.14+0j)
224 self.assertEqual(complex(314), 314.0+0j)
225 self.assertEqual(complex(314L), 314.0+0j)
226 self.assertEqual(complex(3.14+0j, 0j), 3.14+0j)
227 self.assertEqual(complex(3.14, 0.0), 3.14+0j)
228 self.assertEqual(complex(314, 0), 314.0+0j)
229 self.assertEqual(complex(314L, 0L), 314.0+0j)
230 self.assertEqual(complex(0j, 3.14j), -3.14+0j)
231 self.assertEqual(complex(0.0, 3.14j), -3.14+0j)
232 self.assertEqual(complex(0j, 3.14), 3.14j)
233 self.assertEqual(complex(0.0, 3.14), 3.14j)
234 self.assertEqual(complex("1"), 1+0j)
235 self.assertEqual(complex("1j"), 1j)
236
237 c = 3.14 + 1j
238 self.assert_(complex(c) is c)
239 del c
240
241 self.assertRaises(TypeError, complex, "1", "1")
242 self.assertRaises(TypeError, complex, 1, "1")
243
244 self.assertEqual(complex(" 3.14+J "), 3.14+1j)
245 if have_unicode:
246 self.assertEqual(complex(unicode(" 3.14+J ")), 3.14+1j)
247
248 # SF bug 543840: complex(string) accepts strings with \0
249 # Fixed in 2.3.
250 self.assertRaises(ValueError, complex, '1+1j\0j')
251
252 class Z:
253 def __complex__(self): return 3.14j
254 z = Z()
255 self.assertEqual(complex(z), 3.14j)
256
257 def test_delattr(self):
258 import sys
259 sys.spam = 1
260 delattr(sys, 'spam')
261 self.assertRaises(TypeError, delattr)
262
263 def test_dir(self):
264 x = 1
265 self.assert_('x' in dir())
266 import sys
267 self.assert_('modules' in dir(sys))
268 self.assertRaises(TypeError, dir, 42, 42)
269
270 def test_divmod(self):
271 self.assertEqual(divmod(12, 7), (1, 5))
272 self.assertEqual(divmod(-12, 7), (-2, 2))
273 self.assertEqual(divmod(12, -7), (-2, -2))
274 self.assertEqual(divmod(-12, -7), (1, -5))
275
276 self.assertEqual(divmod(12L, 7L), (1L, 5L))
277 self.assertEqual(divmod(-12L, 7L), (-2L, 2L))
278 self.assertEqual(divmod(12L, -7L), (-2L, -2L))
279 self.assertEqual(divmod(-12L, -7L), (1L, -5L))
280
281 self.assertEqual(divmod(12, 7L), (1, 5L))
282 self.assertEqual(divmod(-12, 7L), (-2, 2L))
283 self.assertEqual(divmod(12L, -7), (-2L, -2))
284 self.assertEqual(divmod(-12L, -7), (1L, -5))
285
286 self.assert_(not fcmp(divmod(3.25, 1.0), (3.0, 0.25)))
287 self.assert_(not fcmp(divmod(-3.25, 1.0), (-4.0, 0.75)))
288 self.assert_(not fcmp(divmod(3.25, -1.0), (-4.0, -0.75)))
289 self.assert_(not fcmp(divmod(-3.25, -1.0), (3.0, -0.25)))
290
291 self.assertRaises(TypeError, divmod)
292
293 def test_eval(self):
294 self.assertEqual(eval('1+1'), 2)
295 self.assertEqual(eval(' 1+1\n'), 2)
296 globals = {'a': 1, 'b': 2}
297 locals = {'b': 200, 'c': 300}
298 self.assertEqual(eval('a', globals) , 1)
299 self.assertEqual(eval('a', globals, locals), 1)
300 self.assertEqual(eval('b', globals, locals), 200)
301 self.assertEqual(eval('c', globals, locals), 300)
302 if have_unicode:
303 self.assertEqual(eval(unicode('1+1')), 2)
304 self.assertEqual(eval(unicode(' 1+1\n')), 2)
305 globals = {'a': 1, 'b': 2}
306 locals = {'b': 200, 'c': 300}
307 if have_unicode:
308 self.assertEqual(eval(unicode('a'), globals), 1)
309 self.assertEqual(eval(unicode('a'), globals, locals), 1)
310 self.assertEqual(eval(unicode('b'), globals, locals), 200)
311 self.assertEqual(eval(unicode('c'), globals, locals), 300)
Just van Rossumf032f862003-02-09 20:38:48 +0000312 bom = '\xef\xbb\xbf'
313 self.assertEqual(eval(bom + 'a', globals, locals), 1)
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000314 self.assertEqual(eval(unicode('u"\xc3\xa5"', 'utf8'), globals),
315 unicode('\xc3\xa5', 'utf8'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000316 self.assertRaises(TypeError, eval)
317 self.assertRaises(TypeError, eval, ())
318
319 # Done outside of the method test_z to get the correct scope
320 z = 0
321 f = open(TESTFN, 'w')
322 f.write('z = z+1\n')
323 f.write('z = z*2\n')
324 f.close()
325 execfile(TESTFN)
326
327 def test_execfile(self):
328 globals = {'a': 1, 'b': 2}
329 locals = {'b': 200, 'c': 300}
330
331 self.assertEqual(self.__class__.z, 2)
332 globals['z'] = 0
333 execfile(TESTFN, globals)
334 self.assertEqual(globals['z'], 2)
335 locals['z'] = 0
336 execfile(TESTFN, globals, locals)
337 self.assertEqual(locals['z'], 2)
338 unlink(TESTFN)
339 self.assertRaises(TypeError, execfile)
340 import os
341 self.assertRaises(IOError, execfile, os.curdir)
342 self.assertRaises(IOError, execfile, "I_dont_exist")
343
344 def test_filter(self):
345 self.assertEqual(filter(lambda c: 'a' <= c <= 'z', 'Hello World'), 'elloorld')
346 self.assertEqual(filter(None, [1, 'hello', [], [3], '', None, 9, 0]), [1, 'hello', [3], 9])
347 self.assertEqual(filter(lambda x: x > 0, [1, -3, 9, 0, 2]), [1, 9, 2])
348 self.assertEqual(filter(None, Squares(10)), [1, 4, 9, 16, 25, 36, 49, 64, 81])
349 self.assertEqual(filter(lambda x: x%2, Squares(10)), [1, 9, 25, 49, 81])
350 def identity(item):
351 return 1
352 filter(identity, Squares(5))
353 self.assertRaises(TypeError, filter)
354 class BadSeq(object):
355 def __getitem__(self, index):
356 if index<4:
357 return 42
358 raise ValueError
359 self.assertRaises(ValueError, filter, lambda x: x, BadSeq())
360 def badfunc():
361 pass
362 self.assertRaises(TypeError, filter, badfunc, range(5))
363
Walter Dörwaldbf517072003-01-27 15:57:14 +0000364 # test bltinmodule.c::filtertuple()
Walter Dörwald919497e2003-01-19 16:23:59 +0000365 self.assertEqual(filter(None, (1, 2)), (1, 2))
366 self.assertEqual(filter(lambda x: x>=3, (1, 2, 3, 4)), (3, 4))
367 self.assertRaises(TypeError, filter, 42, (1, 2))
368
Walter Dörwaldbf517072003-01-27 15:57:14 +0000369 # test bltinmodule.c::filterstring()
Walter Dörwald919497e2003-01-19 16:23:59 +0000370 self.assertEqual(filter(None, "12"), "12")
371 self.assertEqual(filter(lambda x: x>="3", "1234"), "34")
372 self.assertRaises(TypeError, filter, 42, "12")
373 class badstr(str):
374 def __getitem__(self, index):
375 raise ValueError
376 self.assertRaises(ValueError, filter, lambda x: x >="3", badstr("1234"))
Walter Dörwaldbf517072003-01-27 15:57:14 +0000377
Walter Dörwald903f1e02003-02-04 16:28:00 +0000378 class badstr2(str):
379 def __getitem__(self, index):
380 return 42
381 self.assertRaises(TypeError, filter, lambda x: x >=42, badstr2("1234"))
382
383 class weirdstr(str):
384 def __getitem__(self, index):
385 return weirdstr(2*str.__getitem__(self, index))
386 self.assertEqual(filter(lambda x: x>="33", weirdstr("1234")), "3344")
387
Walter Dörwald5e61e242003-02-04 17:04:01 +0000388 class shiftstr(str):
389 def __getitem__(self, index):
390 return chr(ord(str.__getitem__(self, index))+1)
391 self.assertEqual(filter(lambda x: x>="3", shiftstr("1234")), "345")
392
Martin v. Löwis8afd7572003-01-25 22:46:11 +0000393 if have_unicode:
Walter Dörwaldbf517072003-01-27 15:57:14 +0000394 # test bltinmodule.c::filterunicode()
Martin v. Löwis8afd7572003-01-25 22:46:11 +0000395 self.assertEqual(filter(None, unicode("12")), unicode("12"))
396 self.assertEqual(filter(lambda x: x>="3", unicode("1234")), unicode("34"))
397 self.assertRaises(TypeError, filter, 42, unicode("12"))
398 self.assertRaises(ValueError, filter, lambda x: x >="3", badstr(unicode("1234")))
Walter Dörwald919497e2003-01-19 16:23:59 +0000399
Walter Dörwald903f1e02003-02-04 16:28:00 +0000400 class badunicode(unicode):
401 def __getitem__(self, index):
402 return 42
403 self.assertRaises(TypeError, filter, lambda x: x >=42, badunicode("1234"))
404
405 class weirdunicode(unicode):
406 def __getitem__(self, index):
407 return weirdunicode(2*unicode.__getitem__(self, index))
408 self.assertEqual(
409 filter(lambda x: x>=unicode("33"), weirdunicode("1234")), unicode("3344"))
410
Walter Dörwald5e61e242003-02-04 17:04:01 +0000411 class shiftunicode(unicode):
412 def __getitem__(self, index):
413 return unichr(ord(unicode.__getitem__(self, index))+1)
414 self.assertEqual(
415 filter(lambda x: x>=unicode("3"), shiftunicode("1234")),
416 unicode("345")
417 )
418
Walter Dörwaldc3da83f2003-02-04 20:24:45 +0000419 def test_filter_subclasses(self):
420 # test, that filter() never returns tuple, str or unicode subclasses
Walter Dörwald1918f772003-02-10 13:19:13 +0000421 # and that the result always go's through __getitem__
422 # FIXME: For tuple currently it doesn't go through __getitem__
Walter Dörwaldc3da83f2003-02-04 20:24:45 +0000423 funcs = (None, lambda x: True)
424 class tuple2(tuple):
Walter Dörwald1918f772003-02-10 13:19:13 +0000425 def __getitem__(self, index):
426 return 2*tuple.__getitem__(self, index)
Walter Dörwaldc3da83f2003-02-04 20:24:45 +0000427 class str2(str):
Walter Dörwald1918f772003-02-10 13:19:13 +0000428 def __getitem__(self, index):
429 return 2*str.__getitem__(self, index)
Walter Dörwaldc3da83f2003-02-04 20:24:45 +0000430 inputs = {
Walter Dörwald1918f772003-02-10 13:19:13 +0000431 tuple2: {(): (), (1, 2, 3): (1, 2, 3)}, # FIXME
432 str2: {"": "", "123": "112233"}
Walter Dörwaldc3da83f2003-02-04 20:24:45 +0000433 }
434 if have_unicode:
435 class unicode2(unicode):
Walter Dörwald1918f772003-02-10 13:19:13 +0000436 def __getitem__(self, index):
437 return 2*unicode.__getitem__(self, index)
438 inputs[unicode2] = {
439 unicode(): unicode(),
440 unicode("123"): unicode("112233")
441 }
Walter Dörwaldc3da83f2003-02-04 20:24:45 +0000442
Walter Dörwald1918f772003-02-10 13:19:13 +0000443 for (cls, inps) in inputs.iteritems():
444 for (inp, exp) in inps.iteritems():
445 # make sure the output goes through __getitem__
446 # even if func is None
447 self.assertEqual(
448 filter(funcs[0], cls(inp)),
449 filter(funcs[1], cls(inp))
450 )
451 for func in funcs:
452 outp = filter(func, cls(inp))
453 self.assertEqual(outp, exp)
454 self.assert_(not isinstance(outp, cls))
Walter Dörwaldc3da83f2003-02-04 20:24:45 +0000455
Walter Dörwald919497e2003-01-19 16:23:59 +0000456 def test_float(self):
457 self.assertEqual(float(3.14), 3.14)
458 self.assertEqual(float(314), 314.0)
459 self.assertEqual(float(314L), 314.0)
460 self.assertEqual(float(" 3.14 "), 3.14)
461 if have_unicode:
462 self.assertEqual(float(unicode(" 3.14 ")), 3.14)
463 self.assertEqual(float(unicode(" \u0663.\u0661\u0664 ",'raw-unicode-escape')), 3.14)
464
465 def test_getattr(self):
466 import sys
467 self.assert_(getattr(sys, 'stdout') is sys.stdout)
468 self.assertRaises(TypeError, getattr, sys, 1)
469 self.assertRaises(TypeError, getattr, sys, 1, "foo")
470 self.assertRaises(TypeError, getattr)
471 self.assertRaises(UnicodeError, getattr, sys, unichr(sys.maxunicode))
472
473 def test_hasattr(self):
474 import sys
475 self.assert_(hasattr(sys, 'stdout'))
476 self.assertRaises(TypeError, hasattr, sys, 1)
477 self.assertRaises(TypeError, hasattr)
478 self.assertRaises(UnicodeError, hasattr, sys, unichr(sys.maxunicode))
479
480 def test_hash(self):
481 hash(None)
482 self.assertEqual(hash(1), hash(1L))
483 self.assertEqual(hash(1), hash(1.0))
484 hash('spam')
485 if have_unicode:
486 self.assertEqual(hash('spam'), hash(unicode('spam')))
487 hash((0,1,2,3))
488 def f(): pass
489 self.assertRaises(TypeError, hash, [])
490 self.assertRaises(TypeError, hash, {})
491
492 def test_hex(self):
493 self.assertEqual(hex(16), '0x10')
494 self.assertEqual(hex(16L), '0x10L')
495 self.assertEqual(len(hex(-1)), len(hex(sys.maxint)))
496 self.assert_(hex(-16) in ('0xfffffff0', '0xfffffffffffffff0'))
497 self.assertEqual(hex(-16L), '-0x10L')
498 self.assertRaises(TypeError, hex, {})
499
500 def test_id(self):
501 id(None)
502 id(1)
503 id(1L)
504 id(1.0)
505 id('spam')
506 id((0,1,2,3))
507 id([0,1,2,3])
508 id({'spam': 1, 'eggs': 2, 'ham': 3})
509
510 # Test input() later, together with raw_input
511
512 def test_int(self):
513 self.assertEqual(int(314), 314)
514 self.assertEqual(int(3.14), 3)
515 self.assertEqual(int(314L), 314)
516 # Check that conversion from float truncates towards zero
517 self.assertEqual(int(-3.14), -3)
518 self.assertEqual(int(3.9), 3)
519 self.assertEqual(int(-3.9), -3)
520 self.assertEqual(int(3.5), 3)
521 self.assertEqual(int(-3.5), -3)
522 # Different base:
523 self.assertEqual(int("10",16), 16L)
524 if have_unicode:
525 self.assertEqual(int(unicode("10"),16), 16L)
526 # Test conversion from strings and various anomalies
527 for s, v in L:
528 for sign in "", "+", "-":
529 for prefix in "", " ", "\t", " \t\t ":
530 ss = prefix + sign + s
531 vv = v
532 if sign == "-" and v is not ValueError:
533 vv = -v
534 try:
535 self.assertEqual(int(ss), vv)
536 except v:
537 pass
538
539 s = `-1-sys.maxint`
540 self.assertEqual(int(s)+1, -sys.maxint)
541 # should return long
542 int(s[1:])
543
544 # should return long
545 x = int(1e100)
546 self.assert_(isinstance(x, long))
547 x = int(-1e100)
548 self.assert_(isinstance(x, long))
549
550
551 # SF bug 434186: 0x80000000/2 != 0x80000000>>1.
552 # Worked by accident in Windows release build, but failed in debug build.
553 # Failed in all Linux builds.
554 x = -1-sys.maxint
555 self.assertEqual(x >> 1, x//2)
556
557 self.assertRaises(ValueError, int, '123\0')
558 self.assertRaises(ValueError, int, '53', 40)
559
560 x = int('1' * 600)
561 self.assert_(isinstance(x, long))
562
563 if have_unicode:
564 x = int(unichr(0x661) * 600)
565 self.assert_(isinstance(x, long))
566
567 self.assertRaises(TypeError, int, 1, 12)
568
569 self.assertEqual(int('0123', 0), 83)
570
571 def test_intern(self):
572 self.assertRaises(TypeError, intern)
573 s = "never interned before"
574 self.assert_(intern(s) is s)
575 s2 = s.swapcase().swapcase()
576 self.assert_(intern(s2) is s)
577
578 def test_iter(self):
579 self.assertRaises(TypeError, iter)
580 self.assertRaises(TypeError, iter, 42, 42)
581 lists = [("1", "2"), ["1", "2"], "12"]
582 if have_unicode:
583 lists.append(unicode("12"))
584 for l in lists:
585 i = iter(l)
586 self.assertEqual(i.next(), '1')
587 self.assertEqual(i.next(), '2')
588 self.assertRaises(StopIteration, i.next)
589
590 def test_isinstance(self):
591 class C:
592 pass
593 class D(C):
594 pass
595 class E:
596 pass
597 c = C()
598 d = D()
599 e = E()
600 self.assert_(isinstance(c, C))
601 self.assert_(isinstance(d, C))
602 self.assert_(not isinstance(e, C))
603 self.assert_(not isinstance(c, D))
604 self.assert_(not isinstance('foo', E))
605 self.assertRaises(TypeError, isinstance, E, 'foo')
606 self.assertRaises(TypeError, isinstance)
607
608 def test_issubclass(self):
609 class C:
610 pass
611 class D(C):
612 pass
613 class E:
614 pass
615 c = C()
616 d = D()
617 e = E()
618 self.assert_(issubclass(D, C))
619 self.assert_(issubclass(C, C))
620 self.assert_(not issubclass(C, D))
621 self.assertRaises(TypeError, issubclass, 'foo', E)
622 self.assertRaises(TypeError, issubclass, E, 'foo')
623 self.assertRaises(TypeError, issubclass)
624
625 def test_len(self):
626 self.assertEqual(len('123'), 3)
627 self.assertEqual(len(()), 0)
628 self.assertEqual(len((1, 2, 3, 4)), 4)
629 self.assertEqual(len([1, 2, 3, 4]), 4)
630 self.assertEqual(len({}), 0)
631 self.assertEqual(len({'a':1, 'b': 2}), 2)
632 class BadSeq:
633 def __len__(self):
634 raise ValueError
635 self.assertRaises(ValueError, len, BadSeq())
636
637 def test_list(self):
638 self.assertEqual(list([]), [])
639 l0_3 = [0, 1, 2, 3]
640 l0_3_bis = list(l0_3)
641 self.assertEqual(l0_3, l0_3_bis)
642 self.assert_(l0_3 is not l0_3_bis)
643 self.assertEqual(list(()), [])
644 self.assertEqual(list((0, 1, 2, 3)), [0, 1, 2, 3])
645 self.assertEqual(list(''), [])
646 self.assertEqual(list('spam'), ['s', 'p', 'a', 'm'])
647
648 if sys.maxint == 0x7fffffff:
649 # This test can currently only work on 32-bit machines.
650 # XXX If/when PySequence_Length() returns a ssize_t, it should be
651 # XXX re-enabled.
652 # Verify clearing of bug #556025.
653 # This assumes that the max data size (sys.maxint) == max
654 # address size this also assumes that the address size is at
655 # least 4 bytes with 8 byte addresses, the bug is not well
656 # tested
657 #
658 # Note: This test is expected to SEGV under Cygwin 1.3.12 or
659 # earlier due to a newlib bug. See the following mailing list
660 # thread for the details:
661
662 # http://sources.redhat.com/ml/newlib/2002/msg00369.html
663 self.assertRaises(MemoryError, list, xrange(sys.maxint // 2))
664
665 def test_long(self):
666 self.assertEqual(long(314), 314L)
667 self.assertEqual(long(3.14), 3L)
668 self.assertEqual(long(314L), 314L)
669 # Check that conversion from float truncates towards zero
670 self.assertEqual(long(-3.14), -3L)
671 self.assertEqual(long(3.9), 3L)
672 self.assertEqual(long(-3.9), -3L)
673 self.assertEqual(long(3.5), 3L)
674 self.assertEqual(long(-3.5), -3L)
675 self.assertEqual(long("-3"), -3L)
676 if have_unicode:
677 self.assertEqual(long(unicode("-3")), -3L)
678 # Different base:
679 self.assertEqual(long("10",16), 16L)
680 if have_unicode:
681 self.assertEqual(long(unicode("10"),16), 16L)
682 # Check conversions from string (same test set as for int(), and then some)
683 LL = [
684 ('1' + '0'*20, 10L**20),
685 ('1' + '0'*100, 10L**100)
686 ]
687 L2 = L
688 if have_unicode:
689 L2 += [
690 (unicode('1') + unicode('0')*20, 10L**20),
691 (unicode('1') + unicode('0')*100, 10L**100),
692 ]
693 for s, v in L2 + LL:
694 for sign in "", "+", "-":
695 for prefix in "", " ", "\t", " \t\t ":
696 ss = prefix + sign + s
697 vv = v
698 if sign == "-" and v is not ValueError:
699 vv = -v
700 try:
701 self.assertEqual(long(ss), long(vv))
702 except v:
703 pass
704
705 self.assertRaises(ValueError, long, '123\0')
706 self.assertRaises(ValueError, long, '53', 40)
707 self.assertRaises(TypeError, long, 1, 12)
708
709 def test_map(self):
710 self.assertEqual(
711 map(None, 'hello world'),
712 ['h','e','l','l','o',' ','w','o','r','l','d']
713 )
714 self.assertEqual(
715 map(None, 'abcd', 'efg'),
716 [('a', 'e'), ('b', 'f'), ('c', 'g'), ('d', None)]
717 )
718 self.assertEqual(
719 map(None, range(10)),
720 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
721 )
722 self.assertEqual(
723 map(lambda x: x*x, range(1,4)),
724 [1, 4, 9]
725 )
726 try:
727 from math import sqrt
728 except ImportError:
729 def sqrt(x):
730 return pow(x, 0.5)
731 self.assertEqual(
732 map(lambda x: map(sqrt,x), [[16, 4], [81, 9]]),
733 [[4.0, 2.0], [9.0, 3.0]]
734 )
735 self.assertEqual(
736 map(lambda x, y: x+y, [1,3,2], [9,1,4]),
737 [10, 4, 6]
738 )
739
740 def plus(*v):
741 accu = 0
742 for i in v: accu = accu + i
743 return accu
744 self.assertEqual(
745 map(plus, [1, 3, 7]),
746 [1, 3, 7]
747 )
748 self.assertEqual(
749 map(plus, [1, 3, 7], [4, 9, 2]),
750 [1+4, 3+9, 7+2]
751 )
752 self.assertEqual(
753 map(plus, [1, 3, 7], [4, 9, 2], [1, 1, 0]),
754 [1+4+1, 3+9+1, 7+2+0]
755 )
756 self.assertEqual(
757 map(None, Squares(10)),
758 [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
759 )
760 self.assertEqual(
761 map(int, Squares(10)),
762 [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
763 )
764 self.assertEqual(
765 map(None, Squares(3), Squares(2)),
766 [(0,0), (1,1), (4,None)]
767 )
768 self.assertEqual(
769 map(max, Squares(3), Squares(2)),
770 [0, 1, 4]
771 )
772 self.assertRaises(TypeError, map)
773 self.assertRaises(TypeError, map, lambda x: x, 42)
774 self.assertEqual(map(None, [42]), [42])
775 class BadSeq:
776 def __getitem__(self, index):
777 raise ValueError
778 self.assertRaises(ValueError, map, lambda x: x, BadSeq())
779
780 def test_max(self):
781 self.assertEqual(max('123123'), '3')
782 self.assertEqual(max(1, 2, 3), 3)
783 self.assertEqual(max((1, 2, 3, 1, 2, 3)), 3)
784 self.assertEqual(max([1, 2, 3, 1, 2, 3]), 3)
785
786 self.assertEqual(max(1, 2L, 3.0), 3.0)
787 self.assertEqual(max(1L, 2.0, 3), 3)
788 self.assertEqual(max(1.0, 2, 3L), 3L)
789
790 def test_min(self):
791 self.assertEqual(min('123123'), '1')
792 self.assertEqual(min(1, 2, 3), 1)
793 self.assertEqual(min((1, 2, 3, 1, 2, 3)), 1)
794 self.assertEqual(min([1, 2, 3, 1, 2, 3]), 1)
795
796 self.assertEqual(min(1, 2L, 3.0), 1)
797 self.assertEqual(min(1L, 2.0, 3), 1L)
798 self.assertEqual(min(1.0, 2, 3L), 1.0)
799
800 self.assertRaises(TypeError, min)
801 self.assertRaises(TypeError, min, 42)
802 self.assertRaises(ValueError, min, ())
803 class BadSeq:
804 def __getitem__(self, index):
805 raise ValueError
806 self.assertRaises(ValueError, min, BadSeq())
807 class BadNumber:
808 def __cmp__(self, other):
809 raise ValueError
810 self.assertRaises(ValueError, min, (42, BadNumber()))
811
812 def test_oct(self):
813 self.assertEqual(oct(100), '0144')
814 self.assertEqual(oct(100L), '0144L')
815 self.assert_(oct(-100) in ('037777777634', '01777777777777777777634'))
816 self.assertEqual(oct(-100L), '-0144L')
817 self.assertRaises(TypeError, oct, ())
818
819 def write_testfile(self):
820 # NB the first 4 lines are also used to test input and raw_input, below
821 fp = open(TESTFN, 'w')
822 try:
823 fp.write('1+1\n')
824 fp.write('1+1\n')
825 fp.write('The quick brown fox jumps over the lazy dog')
826 fp.write('.\n')
827 fp.write('Dear John\n')
828 fp.write('XXX'*100)
829 fp.write('YYY'*100)
830 finally:
831 fp.close()
832
833 def test_open(self):
834 self.write_testfile()
835 fp = open(TESTFN, 'r')
836 try:
837 self.assertEqual(fp.readline(4), '1+1\n')
838 self.assertEqual(fp.readline(4), '1+1\n')
839 self.assertEqual(fp.readline(), 'The quick brown fox jumps over the lazy dog.\n')
840 self.assertEqual(fp.readline(4), 'Dear')
841 self.assertEqual(fp.readline(100), ' John\n')
842 self.assertEqual(fp.read(300), 'XXX'*100)
843 self.assertEqual(fp.read(1000), 'YYY'*100)
844 finally:
845 fp.close()
846 unlink(TESTFN)
847
848 def test_ord(self):
849 self.assertEqual(ord(' '), 32)
850 self.assertEqual(ord('A'), 65)
851 self.assertEqual(ord('a'), 97)
852 if have_unicode:
853 self.assertEqual(ord(unichr(sys.maxunicode)), sys.maxunicode)
854 self.assertRaises(TypeError, ord, 42)
855 self.assertRaises(TypeError, ord, unicode("12"))
856
857 def test_pow(self):
858 self.assertEqual(pow(0,0), 1)
859 self.assertEqual(pow(0,1), 0)
860 self.assertEqual(pow(1,0), 1)
861 self.assertEqual(pow(1,1), 1)
862
863 self.assertEqual(pow(2,0), 1)
864 self.assertEqual(pow(2,10), 1024)
865 self.assertEqual(pow(2,20), 1024*1024)
866 self.assertEqual(pow(2,30), 1024*1024*1024)
867
868 self.assertEqual(pow(-2,0), 1)
869 self.assertEqual(pow(-2,1), -2)
870 self.assertEqual(pow(-2,2), 4)
871 self.assertEqual(pow(-2,3), -8)
872
873 self.assertEqual(pow(0L,0), 1)
874 self.assertEqual(pow(0L,1), 0)
875 self.assertEqual(pow(1L,0), 1)
876 self.assertEqual(pow(1L,1), 1)
877
878 self.assertEqual(pow(2L,0), 1)
879 self.assertEqual(pow(2L,10), 1024)
880 self.assertEqual(pow(2L,20), 1024*1024)
881 self.assertEqual(pow(2L,30), 1024*1024*1024)
882
883 self.assertEqual(pow(-2L,0), 1)
884 self.assertEqual(pow(-2L,1), -2)
885 self.assertEqual(pow(-2L,2), 4)
886 self.assertEqual(pow(-2L,3), -8)
887
888 self.assertAlmostEqual(pow(0.,0), 1.)
889 self.assertAlmostEqual(pow(0.,1), 0.)
890 self.assertAlmostEqual(pow(1.,0), 1.)
891 self.assertAlmostEqual(pow(1.,1), 1.)
892
893 self.assertAlmostEqual(pow(2.,0), 1.)
894 self.assertAlmostEqual(pow(2.,10), 1024.)
895 self.assertAlmostEqual(pow(2.,20), 1024.*1024.)
896 self.assertAlmostEqual(pow(2.,30), 1024.*1024.*1024.)
897
898 self.assertAlmostEqual(pow(-2.,0), 1.)
899 self.assertAlmostEqual(pow(-2.,1), -2.)
900 self.assertAlmostEqual(pow(-2.,2), 4.)
901 self.assertAlmostEqual(pow(-2.,3), -8.)
902
903 for x in 2, 2L, 2.0:
904 for y in 10, 10L, 10.0:
905 for z in 1000, 1000L, 1000.0:
906 if isinstance(x, float) or \
907 isinstance(y, float) or \
908 isinstance(z, float):
909 self.assertRaises(TypeError, pow, x, y, z)
910 else:
911 self.assertAlmostEqual(pow(x, y, z), 24.0)
912
913 self.assertRaises(TypeError, pow, -1, -2, 3)
914 self.assertRaises(ValueError, pow, 1, 2, 0)
915 self.assertRaises(TypeError, pow, -1L, -2L, 3L)
916 self.assertRaises(ValueError, pow, 1L, 2L, 0L)
917 self.assertRaises(ValueError, pow, -342.43, 0.234)
918
919 self.assertRaises(TypeError, pow)
920
921 def test_range(self):
922 self.assertEqual(range(3), [0, 1, 2])
923 self.assertEqual(range(1, 5), [1, 2, 3, 4])
924 self.assertEqual(range(0), [])
925 self.assertEqual(range(-3), [])
926 self.assertEqual(range(1, 10, 3), [1, 4, 7])
927 self.assertEqual(range(5, -5, -3), [5, 2, -1, -4])
928
929 self.assertRaises(TypeError, range)
930 self.assertRaises(TypeError, range, 1, 2, 3, 4)
931 self.assertRaises(ValueError, range, 1, 2, 0)
932
933 def test_input_and_raw_input(self):
934 self.write_testfile()
935 fp = open(TESTFN, 'r')
936 savestdin = sys.stdin
937 savestdout = sys.stdout # Eats the echo
938 try:
939 sys.stdin = fp
940 sys.stdout = BitBucket()
941 self.assertEqual(input(), 2)
942 self.assertEqual(input('testing\n'), 2)
943 self.assertEqual(raw_input(), 'The quick brown fox jumps over the lazy dog.')
944 self.assertEqual(raw_input('testing\n'), 'Dear John')
945 sys.stdin = cStringIO.StringIO("NULL\0")
946 self.assertRaises(TypeError, input, 42, 42)
947 sys.stdin = cStringIO.StringIO(" 'whitespace'")
948 self.assertEqual(input(), 'whitespace')
949 sys.stdin = cStringIO.StringIO()
950 self.assertRaises(EOFError, input)
951 del sys.stdout
952 self.assertRaises(RuntimeError, input, 'prompt')
953 del sys.stdin
954 self.assertRaises(RuntimeError, input, 'prompt')
955 finally:
956 sys.stdin = savestdin
957 sys.stdout = savestdout
958 fp.close()
959 unlink(TESTFN)
960
961 def test_reduce(self):
962 self.assertEqual(reduce(lambda x, y: x+y, ['a', 'b', 'c'], ''), 'abc')
963 self.assertEqual(
964 reduce(lambda x, y: x+y, [['a', 'c'], [], ['d', 'w']], []),
965 ['a','c','d','w']
966 )
967 self.assertEqual(reduce(lambda x, y: x*y, range(2,8), 1), 5040)
968 self.assertEqual(
969 reduce(lambda x, y: x*y, range(2,21), 1L),
970 2432902008176640000L
971 )
972 self.assertEqual(reduce(lambda x, y: x+y, Squares(10)), 285)
973 self.assertEqual(reduce(lambda x, y: x+y, Squares(10), 0), 285)
974 self.assertEqual(reduce(lambda x, y: x+y, Squares(0), 0), 0)
975 self.assertRaises(TypeError, reduce)
976 self.assertRaises(TypeError, reduce, 42, 42)
977 self.assertRaises(TypeError, reduce, 42, 42, 42)
978 self.assertEqual(reduce(42, "1"), "1") # func is never called with one item
979 self.assertEqual(reduce(42, "", "1"), "1") # func is never called with one item
980 self.assertRaises(TypeError, reduce, 42, (42, 42))
981
982 class BadSeq:
983 def __getitem__(self, index):
984 raise ValueError
985 self.assertRaises(ValueError, reduce, 42, BadSeq())
986
987 def test_reload(self):
988 import marshal
989 reload(marshal)
990 import string
991 reload(string)
992 ## import sys
993 ## self.assertRaises(ImportError, reload, sys)
994
995 def test_repr(self):
996 self.assertEqual(repr(''), '\'\'')
997 self.assertEqual(repr(0), '0')
998 self.assertEqual(repr(0L), '0L')
999 self.assertEqual(repr(()), '()')
1000 self.assertEqual(repr([]), '[]')
1001 self.assertEqual(repr({}), '{}')
1002 a = []
1003 a.append(a)
1004 self.assertEqual(repr(a), '[[...]]')
1005 a = {}
1006 a[0] = a
1007 self.assertEqual(repr(a), '{0: {...}}')
1008
1009 def test_round(self):
1010 self.assertEqual(round(0.0), 0.0)
1011 self.assertEqual(round(1.0), 1.0)
1012 self.assertEqual(round(10.0), 10.0)
1013 self.assertEqual(round(1000000000.0), 1000000000.0)
1014 self.assertEqual(round(1e20), 1e20)
1015
1016 self.assertEqual(round(-1.0), -1.0)
1017 self.assertEqual(round(-10.0), -10.0)
1018 self.assertEqual(round(-1000000000.0), -1000000000.0)
1019 self.assertEqual(round(-1e20), -1e20)
1020
1021 self.assertEqual(round(0.1), 0.0)
1022 self.assertEqual(round(1.1), 1.0)
1023 self.assertEqual(round(10.1), 10.0)
1024 self.assertEqual(round(1000000000.1), 1000000000.0)
1025
1026 self.assertEqual(round(-1.1), -1.0)
1027 self.assertEqual(round(-10.1), -10.0)
1028 self.assertEqual(round(-1000000000.1), -1000000000.0)
1029
1030 self.assertEqual(round(0.9), 1.0)
1031 self.assertEqual(round(9.9), 10.0)
1032 self.assertEqual(round(999999999.9), 1000000000.0)
1033
1034 self.assertEqual(round(-0.9), -1.0)
1035 self.assertEqual(round(-9.9), -10.0)
1036 self.assertEqual(round(-999999999.9), -1000000000.0)
1037
1038 self.assertEqual(round(-8.0, -1), -10.0)
1039
1040 self.assertRaises(TypeError, round)
1041
1042 def test_setattr(self):
1043 setattr(sys, 'spam', 1)
1044 self.assertEqual(sys.spam, 1)
1045 self.assertRaises(TypeError, setattr, sys, 1, 'spam')
1046 self.assertRaises(TypeError, setattr)
1047
1048 def test_str(self):
1049 self.assertEqual(str(''), '')
1050 self.assertEqual(str(0), '0')
1051 self.assertEqual(str(0L), '0')
1052 self.assertEqual(str(()), '()')
1053 self.assertEqual(str([]), '[]')
1054 self.assertEqual(str({}), '{}')
1055 a = []
1056 a.append(a)
1057 self.assertEqual(str(a), '[[...]]')
1058 a = {}
1059 a[0] = a
1060 self.assertEqual(str(a), '{0: {...}}')
1061
1062 def test_tuple(self):
1063 self.assertEqual(tuple(()), ())
1064 t0_3 = (0, 1, 2, 3)
1065 t0_3_bis = tuple(t0_3)
1066 self.assert_(t0_3 is t0_3_bis)
1067 self.assertEqual(tuple([]), ())
1068 self.assertEqual(tuple([0, 1, 2, 3]), (0, 1, 2, 3))
1069 self.assertEqual(tuple(''), ())
1070 self.assertEqual(tuple('spam'), ('s', 'p', 'a', 'm'))
1071
1072 def test_type(self):
1073 self.assertEqual(type(''), type('123'))
1074 self.assertNotEqual(type(''), type(()))
1075
1076 def test_unichr(self):
1077 if have_unicode:
1078 self.assertEqual(unichr(32), unicode(' '))
1079 self.assertEqual(unichr(65), unicode('A'))
1080 self.assertEqual(unichr(97), unicode('a'))
1081 self.assertEqual(
1082 unichr(sys.maxunicode),
1083 unicode('\\U%08x' % (sys.maxunicode), 'unicode-escape')
1084 )
1085 self.assertRaises(ValueError, unichr, sys.maxunicode+1)
1086 self.assertRaises(TypeError, unichr)
1087
1088 def get_vars_f0():
1089 return vars()
1090 # we don't want self in vars(), so use staticmethod
1091 get_vars_f0 = staticmethod(get_vars_f0)
1092
1093 def get_vars_f2():
1094 BuiltinTest.get_vars_f0()
1095 a = 1
1096 b = 2
1097 return vars()
1098 get_vars_f2 = staticmethod(get_vars_f2)
1099
1100 def test_vars(self):
1101 a = b = None
1102 a = vars().keys()
1103 b = dir()
1104 a.sort()
1105 b.sort()
1106 self.assertEqual(a, b)
1107 import sys
1108 a = vars(sys).keys()
1109 b = dir(sys)
1110 a.sort()
1111 b.sort()
1112 self.assertEqual(a, b)
1113 self.assertEqual(self.get_vars_f0(), {})
1114 self.assertEqual(self.get_vars_f2(), {'a': 1, 'b': 2})
1115 self.assertRaises(TypeError, vars, 42, 42)
1116 self.assertRaises(TypeError, vars, 42)
1117
1118 def test_zip(self):
1119 a = (1, 2, 3)
1120 b = (4, 5, 6)
1121 t = [(1, 4), (2, 5), (3, 6)]
1122 self.assertEqual(zip(a, b), t)
1123 b = [4, 5, 6]
1124 self.assertEqual(zip(a, b), t)
1125 b = (4, 5, 6, 7)
1126 self.assertEqual(zip(a, b), t)
1127 class I:
1128 def __getitem__(self, i):
1129 if i < 0 or i > 2: raise IndexError
1130 return i + 4
1131 self.assertEqual(zip(a, I()), t)
1132 self.assertRaises(TypeError, zip)
1133 self.assertRaises(TypeError, zip, None)
1134 class G:
1135 pass
1136 self.assertRaises(TypeError, zip, a, G())
1137
1138 # Make sure zip doesn't try to allocate a billion elements for the
1139 # result list when one of its arguments doesn't say how long it is.
1140 # A MemoryError is the most likely failure mode.
1141 class SequenceWithoutALength:
1142 def __getitem__(self, i):
1143 if i == 5:
1144 raise IndexError
1145 else:
1146 return i
1147 self.assertEqual(
1148 zip(SequenceWithoutALength(), xrange(2**30)),
1149 list(enumerate(range(5)))
1150 )
1151
1152 class BadSeq:
1153 def __getitem__(self, i):
1154 if i == 5:
1155 raise ValueError
1156 else:
1157 return i
1158 self.assertRaises(ValueError, zip, BadSeq(), BadSeq())
1159
1160def test_main():
1161 suite = unittest.TestSuite()
1162 suite.addTest(unittest.makeSuite(BuiltinTest))
1163 test.test_support.run_suite(suite)
1164
1165if __name__ == "__main__":
1166 test_main()