1 # Python test set -- built-in functions
3 import test
.test_support
, unittest
4 from test
.test_support
import fcmp
, have_unicode
, TESTFN
, unlink
6 import sys
, warnings
, cStringIO
7 warnings
.filterwarnings("ignore", "hex../oct.. of negative int",
8 FutureWarning
, __name__
)
9 warnings
.filterwarnings("ignore", "integer argument expected",
10 DeprecationWarning, "unittest")
14 def __init__(self
, max):
18 def __len__(self
): return len(self
.sofar
)
20 def __getitem__(self
, i
):
21 if not 0 <= i
< self
.max: raise IndexError
24 self
.sofar
.append(n
*n
)
30 def __init__(self
, max):
35 return len(self
.sofar
)
37 def __getitem__(self
, i
):
38 if not 0 <= i
< self
.max:
42 self
.sofar
.append(str(n
*n
))
47 def write(self
, line
):
60 (' \t\t 314 \t\t ', 314),
61 (`sys
.maxint`
, sys
.maxint
),
64 (' 1\02 ', ValueError),
67 (' \t\t ', ValueError)
76 (unicode('100'), 100),
77 (unicode('314'), 314),
78 (unicode(' 314'), 314),
79 (unicode('\u0663\u0661\u0664 ','raw-unicode-escape'), 314),
80 (unicode(' \t\t 314 \t\t '), 314),
81 (unicode(' 1x'), ValueError),
83 (unicode(' 1\02 '), ValueError),
84 (unicode(''), ValueError),
85 (unicode(' '), ValueError),
86 (unicode(' \t\t '), ValueError),
87 (unichr(0x200), ValueError),
90 class BuiltinTest(unittest
.TestCase
):
92 def test_import(self
):
96 self
.assertRaises(ImportError, __import__, 'spamspam')
97 self
.assertRaises(TypeError, __import__, 1, 2, 3, 4)
101 self
.assertEqual(abs(0), 0)
102 self
.assertEqual(abs(1234), 1234)
103 self
.assertEqual(abs(-1234), 1234)
105 self
.assertEqual(abs(0.0), 0.0)
106 self
.assertEqual(abs(3.14), 3.14)
107 self
.assertEqual(abs(-3.14), 3.14)
109 self
.assertEqual(abs(0L), 0L)
110 self
.assertEqual(abs(1234L), 1234L)
111 self
.assertEqual(abs(-1234L), 1234L)
113 self
.assertRaises(TypeError, abs, 'a')
115 def test_apply(self
):
117 self
.assertEqual(args
, ())
119 self
.assertEqual(a1
, 1)
121 self
.assertEqual(a1
, 1)
122 self
.assertEqual(a2
, 2)
124 self
.assertEqual(a1
, 1)
125 self
.assertEqual(a2
, 2)
126 self
.assertEqual(a3
, 3)
132 # A PyCFunction that takes only positional parameters should allow an
133 # empty keyword dictionary to pass without a complaint, but raise a
134 # TypeError if the dictionary is non-empty.
136 self
.assertRaises(TypeError, apply, id, (1,), {"foo": 1})
137 self
.assertRaises(TypeError, apply)
138 self
.assertRaises(TypeError, apply, id, 42)
139 self
.assertRaises(TypeError, apply, id, (42,), 42)
141 def test_callable(self
):
142 self
.assert_(callable(len))
144 self
.assert_(callable(f
))
147 self
.assert_(callable(C
))
149 self
.assert_(callable(x
.meth
))
150 self
.assert_(not callable(x
))
152 def __call__(self
): pass
154 self
.assert_(callable(y
))
158 self
.assertEqual(chr(32), ' ')
159 self
.assertEqual(chr(65), 'A')
160 self
.assertEqual(chr(97), 'a')
161 self
.assertEqual(chr(0xff), '\xff')
162 self
.assertRaises(ValueError, chr, 256)
163 self
.assertRaises(TypeError, chr)
166 self
.assertEqual(cmp(-1, 1), -1)
167 self
.assertEqual(cmp(1, -1), 1)
168 self
.assertEqual(cmp(1, 1), 0)
169 # verify that circular objects are handled
172 from UserList
import UserList
173 c
= UserList(); c
.append(c
)
174 self
.assertEqual(cmp(a
, b
), 0)
175 self
.assertEqual(cmp(b
, c
), 0)
176 self
.assertEqual(cmp(c
, a
), 0)
177 self
.assertEqual(cmp(a
, c
), 0)
178 # okay, now break the cycles
179 a
.pop(); b
.pop(); c
.pop()
180 self
.assertRaises(TypeError, cmp)
182 def test_coerce(self
):
183 self
.assert_(not fcmp(coerce(1, 1.1), (1.0, 1.1)))
184 self
.assertEqual(coerce(1, 1L), (1L, 1L))
185 self
.assert_(not fcmp(coerce(1L, 1.1), (1.0, 1.1)))
186 self
.assertRaises(TypeError, coerce)
188 def __coerce__(self
, other
):
190 self
.assertRaises(ValueError, coerce, 42, BadNumber())
191 self
.assertRaises(OverflowError, coerce, 0.5, int("12345" * 1000))
193 def test_compile(self
):
194 compile('print 1\n', '', 'exec')
196 compile(bom
+ 'print 1\n', '', 'exec')
197 self
.assertRaises(TypeError, compile)
198 self
.assertRaises(ValueError, compile, 'print 42\n', '<string>', 'badmode')
199 self
.assertRaises(ValueError, compile, 'print 42\n', '<string>', 'single', 0xff)
201 compile(unicode('print u"\xc3\xa5"\n', 'utf8'), '', 'exec')
203 def test_complex(self
):
205 def __complex__(self
): return 1+10j
207 def __complex__(self
): return 1+10j
208 self
.assertEqual(complex(OS()), 1+10j
)
209 self
.assertEqual(complex(NS()), 1+10j
)
210 self
.assertEqual(complex("1+10j"), 1+10j
)
211 self
.assertEqual(complex(10), 10+0j
)
212 self
.assertEqual(complex(10.0), 10+0j
)
213 self
.assertEqual(complex(10L), 10+0j
)
214 self
.assertEqual(complex(10+0j
), 10+0j
)
215 self
.assertEqual(complex(1,10), 1+10j
)
216 self
.assertEqual(complex(1,10L), 1+10j
)
217 self
.assertEqual(complex(1,10.0), 1+10j
)
218 self
.assertEqual(complex(1L,10), 1+10j
)
219 self
.assertEqual(complex(1L,10L), 1+10j
)
220 self
.assertEqual(complex(1L,10.0), 1+10j
)
221 self
.assertEqual(complex(1.0,10), 1+10j
)
222 self
.assertEqual(complex(1.0,10L), 1+10j
)
223 self
.assertEqual(complex(1.0,10.0), 1+10j
)
224 self
.assertEqual(complex(3.14+0j
), 3.14+0j
)
225 self
.assertEqual(complex(3.14), 3.14+0j
)
226 self
.assertEqual(complex(314), 314.0+0j
)
227 self
.assertEqual(complex(314L), 314.0+0j
)
228 self
.assertEqual(complex(3.14+0j
, 0j
), 3.14+0j
)
229 self
.assertEqual(complex(3.14, 0.0), 3.14+0j
)
230 self
.assertEqual(complex(314, 0), 314.0+0j
)
231 self
.assertEqual(complex(314L, 0L), 314.0+0j
)
232 self
.assertEqual(complex(0j
, 3.14j
), -3.14+0j
)
233 self
.assertEqual(complex(0.0, 3.14j
), -3.14+0j
)
234 self
.assertEqual(complex(0j
, 3.14), 3.14j
)
235 self
.assertEqual(complex(0.0, 3.14), 3.14j
)
236 self
.assertEqual(complex("1"), 1+0j
)
237 self
.assertEqual(complex("1j"), 1j
)
240 self
.assert_(complex(c
) is c
)
243 self
.assertRaises(TypeError, complex, "1", "1")
244 self
.assertRaises(TypeError, complex, 1, "1")
246 self
.assertEqual(complex(" 3.14+J "), 3.14+1j
)
248 self
.assertEqual(complex(unicode(" 3.14+J ")), 3.14+1j
)
250 # SF bug 543840: complex(string) accepts strings with \0
252 self
.assertRaises(ValueError, complex, '1+1j\0j')
255 def __complex__(self
): return 3.14j
257 self
.assertEqual(complex(z
), 3.14j
)
259 def test_delattr(self
):
263 self
.assertRaises(TypeError, delattr)
267 self
.assert_('x' in dir())
269 self
.assert_('modules' in dir(sys
))
270 self
.assertRaises(TypeError, dir, 42, 42)
272 def test_divmod(self
):
273 self
.assertEqual(divmod(12, 7), (1, 5))
274 self
.assertEqual(divmod(-12, 7), (-2, 2))
275 self
.assertEqual(divmod(12, -7), (-2, -2))
276 self
.assertEqual(divmod(-12, -7), (1, -5))
278 self
.assertEqual(divmod(12L, 7L), (1L, 5L))
279 self
.assertEqual(divmod(-12L, 7L), (-2L, 2L))
280 self
.assertEqual(divmod(12L, -7L), (-2L, -2L))
281 self
.assertEqual(divmod(-12L, -7L), (1L, -5L))
283 self
.assertEqual(divmod(12, 7L), (1, 5L))
284 self
.assertEqual(divmod(-12, 7L), (-2, 2L))
285 self
.assertEqual(divmod(12L, -7), (-2L, -2))
286 self
.assertEqual(divmod(-12L, -7), (1L, -5))
288 self
.assert_(not fcmp(divmod(3.25, 1.0), (3.0, 0.25)))
289 self
.assert_(not fcmp(divmod(-3.25, 1.0), (-4.0, 0.75)))
290 self
.assert_(not fcmp(divmod(3.25, -1.0), (-4.0, -0.75)))
291 self
.assert_(not fcmp(divmod(-3.25, -1.0), (3.0, -0.25)))
293 self
.assertRaises(TypeError, divmod)
296 self
.assertEqual(eval('1+1'), 2)
297 self
.assertEqual(eval(' 1+1\n'), 2)
298 globals = {'a': 1, 'b': 2}
299 locals = {'b': 200, 'c': 300}
300 self
.assertEqual(eval('a', globals) , 1)
301 self
.assertEqual(eval('a', globals, locals), 1)
302 self
.assertEqual(eval('b', globals, locals), 200)
303 self
.assertEqual(eval('c', globals, locals), 300)
305 self
.assertEqual(eval(unicode('1+1')), 2)
306 self
.assertEqual(eval(unicode(' 1+1\n')), 2)
307 globals = {'a': 1, 'b': 2}
308 locals = {'b': 200, 'c': 300}
310 self
.assertEqual(eval(unicode('a'), globals), 1)
311 self
.assertEqual(eval(unicode('a'), globals, locals), 1)
312 self
.assertEqual(eval(unicode('b'), globals, locals), 200)
313 self
.assertEqual(eval(unicode('c'), globals, locals), 300)
315 self
.assertEqual(eval(bom
+ 'a', globals, locals), 1)
316 self
.assertEqual(eval(unicode('u"\xc3\xa5"', 'utf8'), globals),
317 unicode('\xc3\xa5', 'utf8'))
318 self
.assertRaises(TypeError, eval)
319 self
.assertRaises(TypeError, eval, ())
321 # Done outside of the method test_z to get the correct scope
323 f
= open(TESTFN
, 'w')
329 def test_execfile(self
):
330 globals = {'a': 1, 'b': 2}
331 locals = {'b': 200, 'c': 300}
333 self
.assertEqual(self
.__class
__.z
, 2)
335 execfile(TESTFN
, globals)
336 self
.assertEqual(globals['z'], 2)
338 execfile(TESTFN
, globals, locals)
339 self
.assertEqual(locals['z'], 2)
341 self
.assertRaises(TypeError, execfile)
343 self
.assertRaises(IOError, execfile, os
.curdir
)
344 self
.assertRaises(IOError, execfile, "I_dont_exist")
346 def test_filter(self
):
347 self
.assertEqual(filter(lambda c
: 'a' <= c
<= 'z', 'Hello World'), 'elloorld')
348 self
.assertEqual(filter(None, [1, 'hello', [], [3], '', None, 9, 0]), [1, 'hello', [3], 9])
349 self
.assertEqual(filter(lambda x
: x
> 0, [1, -3, 9, 0, 2]), [1, 9, 2])
350 self
.assertEqual(filter(None, Squares(10)), [1, 4, 9, 16, 25, 36, 49, 64, 81])
351 self
.assertEqual(filter(lambda x
: x
%2, Squares(10)), [1, 9, 25, 49, 81])
354 filter(identity
, Squares(5))
355 self
.assertRaises(TypeError, filter)
356 class BadSeq(object):
357 def __getitem__(self
, index
):
361 self
.assertRaises(ValueError, filter, lambda x
: x
, BadSeq())
364 self
.assertRaises(TypeError, filter, badfunc
, range(5))
366 # test bltinmodule.c::filtertuple()
367 self
.assertEqual(filter(None, (1, 2)), (1, 2))
368 self
.assertEqual(filter(lambda x
: x
>=3, (1, 2, 3, 4)), (3, 4))
369 self
.assertRaises(TypeError, filter, 42, (1, 2))
371 # test bltinmodule.c::filterstring()
372 self
.assertEqual(filter(None, "12"), "12")
373 self
.assertEqual(filter(lambda x
: x
>="3", "1234"), "34")
374 self
.assertRaises(TypeError, filter, 42, "12")
376 def __getitem__(self
, index
):
378 self
.assertRaises(ValueError, filter, lambda x
: x
>="3", badstr("1234"))
381 def __getitem__(self
, index
):
383 self
.assertRaises(TypeError, filter, lambda x
: x
>=42, badstr2("1234"))
386 def __getitem__(self
, index
):
387 return weirdstr(2*str.__getitem
__(self
, index
))
388 self
.assertEqual(filter(lambda x
: x
>="33", weirdstr("1234")), "3344")
391 def __getitem__(self
, index
):
392 return chr(ord(str.__getitem
__(self
, index
))+1)
393 self
.assertEqual(filter(lambda x
: x
>="3", shiftstr("1234")), "345")
396 # test bltinmodule.c::filterunicode()
397 self
.assertEqual(filter(None, unicode("12")), unicode("12"))
398 self
.assertEqual(filter(lambda x
: x
>="3", unicode("1234")), unicode("34"))
399 self
.assertRaises(TypeError, filter, 42, unicode("12"))
400 self
.assertRaises(ValueError, filter, lambda x
: x
>="3", badstr(unicode("1234")))
402 class badunicode(unicode):
403 def __getitem__(self
, index
):
405 self
.assertRaises(TypeError, filter, lambda x
: x
>=42, badunicode("1234"))
407 class weirdunicode(unicode):
408 def __getitem__(self
, index
):
409 return weirdunicode(2*unicode.__getitem
__(self
, index
))
411 filter(lambda x
: x
>=unicode("33"), weirdunicode("1234")), unicode("3344"))
413 class shiftunicode(unicode):
414 def __getitem__(self
, index
):
415 return unichr(ord(unicode.__getitem
__(self
, index
))+1)
417 filter(lambda x
: x
>=unicode("3"), shiftunicode("1234")),
421 def test_filter_subclasses(self
):
422 # test, that filter() never returns tuple, str or unicode subclasses
423 # and that the result always go's through __getitem__
424 funcs
= (None, lambda x
: True)
426 def __getitem__(self
, index
):
427 return 2*tuple.__getitem
__(self
, index
)
429 def __getitem__(self
, index
):
430 return 2*str.__getitem
__(self
, index
)
432 tuple2
: {(): (), (1, 2, 3): (2, 4, 6)},
433 str2
: {"": "", "123": "112233"}
436 class unicode2(unicode):
437 def __getitem__(self
, index
):
438 return 2*unicode.__getitem
__(self
, index
)
440 unicode(): unicode(),
441 unicode("123"): unicode("112233")
444 for (cls
, inps
) in inputs
.iteritems():
445 for (inp
, exp
) in inps
.iteritems():
446 # make sure the output goes through __getitem__
447 # even if func is None
449 filter(funcs
[0], cls(inp
)),
450 filter(funcs
[1], cls(inp
))
453 outp
= filter(func
, cls(inp
))
454 self
.assertEqual(outp
, exp
)
455 self
.assert_(not isinstance(outp
, cls
))
457 def test_float(self
):
458 self
.assertEqual(float(3.14), 3.14)
459 self
.assertEqual(float(314), 314.0)
460 self
.assertEqual(float(314L), 314.0)
461 self
.assertEqual(float(" 3.14 "), 3.14)
463 self
.assertEqual(float(unicode(" 3.14 ")), 3.14)
464 self
.assertEqual(float(unicode(" \u0663.\u0661\u0664 ",'raw-unicode-escape')), 3.14)
466 def test_getattr(self
):
468 self
.assert_(getattr(sys
, 'stdout') is sys
.stdout
)
469 self
.assertRaises(TypeError, getattr, sys
, 1)
470 self
.assertRaises(TypeError, getattr, sys
, 1, "foo")
471 self
.assertRaises(TypeError, getattr)
472 self
.assertRaises(UnicodeError, getattr, sys
, unichr(sys
.maxunicode
))
474 def test_hasattr(self
):
476 self
.assert_(hasattr(sys
, 'stdout'))
477 self
.assertRaises(TypeError, hasattr, sys
, 1)
478 self
.assertRaises(TypeError, hasattr)
479 self
.assertRaises(UnicodeError, hasattr, sys
, unichr(sys
.maxunicode
))
483 self
.assertEqual(hash(1), hash(1L))
484 self
.assertEqual(hash(1), hash(1.0))
487 self
.assertEqual(hash('spam'), hash(unicode('spam')))
490 self
.assertRaises(TypeError, hash, [])
491 self
.assertRaises(TypeError, hash, {})
494 self
.assertEqual(hex(16), '0x10')
495 self
.assertEqual(hex(16L), '0x10L')
496 self
.assertEqual(len(hex(-1)), len(hex(sys
.maxint
)))
497 self
.assert_(hex(-16) in ('0xfffffff0', '0xfffffffffffffff0'))
498 self
.assertEqual(hex(-16L), '-0x10L')
499 self
.assertRaises(TypeError, hex, {})
509 id({'spam': 1, 'eggs': 2, 'ham': 3})
511 # Test input() later, together with raw_input
514 self
.assertEqual(int(314), 314)
515 self
.assertEqual(int(3.14), 3)
516 self
.assertEqual(int(314L), 314)
517 # Check that conversion from float truncates towards zero
518 self
.assertEqual(int(-3.14), -3)
519 self
.assertEqual(int(3.9), 3)
520 self
.assertEqual(int(-3.9), -3)
521 self
.assertEqual(int(3.5), 3)
522 self
.assertEqual(int(-3.5), -3)
524 self
.assertEqual(int("10",16), 16L)
526 self
.assertEqual(int(unicode("10"),16), 16L)
527 # Test conversion from strings and various anomalies
529 for sign
in "", "+", "-":
530 for prefix
in "", " ", "\t", " \t\t ":
531 ss
= prefix
+ sign
+ s
533 if sign
== "-" and v
is not ValueError:
536 self
.assertEqual(int(ss
), vv
)
541 self
.assertEqual(int(s
)+1, -sys
.maxint
)
547 self
.assert_(isinstance(x
, long))
549 self
.assert_(isinstance(x
, long))
552 # SF bug 434186: 0x80000000/2 != 0x80000000>>1.
553 # Worked by accident in Windows release build, but failed in debug build.
554 # Failed in all Linux builds.
556 self
.assertEqual(x
>> 1, x
//2)
558 self
.assertRaises(ValueError, int, '123\0')
559 self
.assertRaises(ValueError, int, '53', 40)
562 self
.assert_(isinstance(x
, long))
565 x
= int(unichr(0x661) * 600)
566 self
.assert_(isinstance(x
, long))
568 self
.assertRaises(TypeError, int, 1, 12)
570 self
.assertEqual(int('0123', 0), 83)
572 def test_intern(self
):
573 self
.assertRaises(TypeError, intern)
574 s
= "never interned before"
575 self
.assert_(intern(s
) is s
)
576 s2
= s
.swapcase().swapcase()
577 self
.assert_(intern(s2
) is s
)
580 self
.assertRaises(TypeError, iter)
581 self
.assertRaises(TypeError, iter, 42, 42)
582 lists
= [("1", "2"), ["1", "2"], "12"]
584 lists
.append(unicode("12"))
587 self
.assertEqual(i
.next(), '1')
588 self
.assertEqual(i
.next(), '2')
589 self
.assertRaises(StopIteration, i
.next
)
591 def test_isinstance(self
):
601 self
.assert_(isinstance(c
, C
))
602 self
.assert_(isinstance(d
, C
))
603 self
.assert_(not isinstance(e
, C
))
604 self
.assert_(not isinstance(c
, D
))
605 self
.assert_(not isinstance('foo', E
))
606 self
.assertRaises(TypeError, isinstance, E
, 'foo')
607 self
.assertRaises(TypeError, isinstance)
609 def test_issubclass(self
):
619 self
.assert_(issubclass(D
, C
))
620 self
.assert_(issubclass(C
, C
))
621 self
.assert_(not issubclass(C
, D
))
622 self
.assertRaises(TypeError, issubclass, 'foo', E
)
623 self
.assertRaises(TypeError, issubclass, E
, 'foo')
624 self
.assertRaises(TypeError, issubclass)
627 self
.assertEqual(len('123'), 3)
628 self
.assertEqual(len(()), 0)
629 self
.assertEqual(len((1, 2, 3, 4)), 4)
630 self
.assertEqual(len([1, 2, 3, 4]), 4)
631 self
.assertEqual(len({}), 0)
632 self
.assertEqual(len({'a':1, 'b': 2}), 2)
636 self
.assertRaises(ValueError, len, BadSeq())
639 self
.assertEqual(list([]), [])
641 l0_3_bis
= list(l0_3
)
642 self
.assertEqual(l0_3
, l0_3_bis
)
643 self
.assert_(l0_3
is not l0_3_bis
)
644 self
.assertEqual(list(()), [])
645 self
.assertEqual(list((0, 1, 2, 3)), [0, 1, 2, 3])
646 self
.assertEqual(list(''), [])
647 self
.assertEqual(list('spam'), ['s', 'p', 'a', 'm'])
649 if sys
.maxint
== 0x7fffffff:
650 # This test can currently only work on 32-bit machines.
651 # XXX If/when PySequence_Length() returns a ssize_t, it should be
653 # Verify clearing of bug #556025.
654 # This assumes that the max data size (sys.maxint) == max
655 # address size this also assumes that the address size is at
656 # least 4 bytes with 8 byte addresses, the bug is not well
659 # Note: This test is expected to SEGV under Cygwin 1.3.12 or
660 # earlier due to a newlib bug. See the following mailing list
661 # thread for the details:
663 # http://sources.redhat.com/ml/newlib/2002/msg00369.html
664 self
.assertRaises(MemoryError, list, xrange(sys
.maxint
// 2))
667 self
.assertEqual(long(314), 314L)
668 self
.assertEqual(long(3.14), 3L)
669 self
.assertEqual(long(314L), 314L)
670 # Check that conversion from float truncates towards zero
671 self
.assertEqual(long(-3.14), -3L)
672 self
.assertEqual(long(3.9), 3L)
673 self
.assertEqual(long(-3.9), -3L)
674 self
.assertEqual(long(3.5), 3L)
675 self
.assertEqual(long(-3.5), -3L)
676 self
.assertEqual(long("-3"), -3L)
678 self
.assertEqual(long(unicode("-3")), -3L)
680 self
.assertEqual(long("10",16), 16L)
682 self
.assertEqual(long(unicode("10"),16), 16L)
683 # Check conversions from string (same test set as for int(), and then some)
685 ('1' + '0'*20, 10L**20),
686 ('1' + '0'*100, 10L**100)
691 (unicode('1') + unicode('0')*20, 10L**20),
692 (unicode('1') + unicode('0')*100, 10L**100),
695 for sign
in "", "+", "-":
696 for prefix
in "", " ", "\t", " \t\t ":
697 ss
= prefix
+ sign
+ s
699 if sign
== "-" and v
is not ValueError:
702 self
.assertEqual(long(ss
), long(vv
))
706 self
.assertRaises(ValueError, long, '123\0')
707 self
.assertRaises(ValueError, long, '53', 40)
708 self
.assertRaises(TypeError, long, 1, 12)
712 map(None, 'hello world'),
713 ['h','e','l','l','o',' ','w','o','r','l','d']
716 map(None, 'abcd', 'efg'),
717 [('a', 'e'), ('b', 'f'), ('c', 'g'), ('d', None)]
720 map(None, range(10)),
721 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
724 map(lambda x
: x
*x
, range(1,4)),
728 from math
import sqrt
733 map(lambda x
: map(sqrt
,x
), [[16, 4], [81, 9]]),
734 [[4.0, 2.0], [9.0, 3.0]]
737 map(lambda x
, y
: x
+y
, [1,3,2], [9,1,4]),
743 for i
in v
: accu
= accu
+ i
746 map(plus
, [1, 3, 7]),
750 map(plus
, [1, 3, 7], [4, 9, 2]),
754 map(plus
, [1, 3, 7], [4, 9, 2], [1, 1, 0]),
755 [1+4+1, 3+9+1, 7+2+0]
758 map(None, Squares(10)),
759 [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
762 map(int, Squares(10)),
763 [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
766 map(None, Squares(3), Squares(2)),
767 [(0,0), (1,1), (4,None)]
770 map(max, Squares(3), Squares(2)),
773 self
.assertRaises(TypeError, map)
774 self
.assertRaises(TypeError, map, lambda x
: x
, 42)
775 self
.assertEqual(map(None, [42]), [42])
777 def __getitem__(self
, index
):
779 self
.assertRaises(ValueError, map, lambda x
: x
, BadSeq())
782 self
.assertEqual(max('123123'), '3')
783 self
.assertEqual(max(1, 2, 3), 3)
784 self
.assertEqual(max((1, 2, 3, 1, 2, 3)), 3)
785 self
.assertEqual(max([1, 2, 3, 1, 2, 3]), 3)
787 self
.assertEqual(max(1, 2L, 3.0), 3.0)
788 self
.assertEqual(max(1L, 2.0, 3), 3)
789 self
.assertEqual(max(1.0, 2, 3L), 3L)
792 self
.assertEqual(min('123123'), '1')
793 self
.assertEqual(min(1, 2, 3), 1)
794 self
.assertEqual(min((1, 2, 3, 1, 2, 3)), 1)
795 self
.assertEqual(min([1, 2, 3, 1, 2, 3]), 1)
797 self
.assertEqual(min(1, 2L, 3.0), 1)
798 self
.assertEqual(min(1L, 2.0, 3), 1L)
799 self
.assertEqual(min(1.0, 2, 3L), 1.0)
801 self
.assertRaises(TypeError, min)
802 self
.assertRaises(TypeError, min, 42)
803 self
.assertRaises(ValueError, min, ())
805 def __getitem__(self
, index
):
807 self
.assertRaises(ValueError, min, BadSeq())
809 def __cmp__(self
, other
):
811 self
.assertRaises(ValueError, min, (42, BadNumber()))
814 self
.assertEqual(oct(100), '0144')
815 self
.assertEqual(oct(100L), '0144L')
816 self
.assert_(oct(-100) in ('037777777634', '01777777777777777777634'))
817 self
.assertEqual(oct(-100L), '-0144L')
818 self
.assertRaises(TypeError, oct, ())
820 def write_testfile(self
):
821 # NB the first 4 lines are also used to test input and raw_input, below
822 fp
= open(TESTFN
, 'w')
826 fp
.write('The quick brown fox jumps over the lazy dog')
828 fp
.write('Dear John\n')
835 self
.write_testfile()
836 fp
= open(TESTFN
, 'r')
838 self
.assertEqual(fp
.readline(4), '1+1\n')
839 self
.assertEqual(fp
.readline(4), '1+1\n')
840 self
.assertEqual(fp
.readline(), 'The quick brown fox jumps over the lazy dog.\n')
841 self
.assertEqual(fp
.readline(4), 'Dear')
842 self
.assertEqual(fp
.readline(100), ' John\n')
843 self
.assertEqual(fp
.read(300), 'XXX'*100)
844 self
.assertEqual(fp
.read(1000), 'YYY'*100)
850 self
.assertEqual(ord(' '), 32)
851 self
.assertEqual(ord('A'), 65)
852 self
.assertEqual(ord('a'), 97)
854 self
.assertEqual(ord(unichr(sys
.maxunicode
)), sys
.maxunicode
)
855 self
.assertRaises(TypeError, ord, 42)
856 self
.assertRaises(TypeError, ord, unicode("12"))
859 self
.assertEqual(pow(0,0), 1)
860 self
.assertEqual(pow(0,1), 0)
861 self
.assertEqual(pow(1,0), 1)
862 self
.assertEqual(pow(1,1), 1)
864 self
.assertEqual(pow(2,0), 1)
865 self
.assertEqual(pow(2,10), 1024)
866 self
.assertEqual(pow(2,20), 1024*1024)
867 self
.assertEqual(pow(2,30), 1024*1024*1024)
869 self
.assertEqual(pow(-2,0), 1)
870 self
.assertEqual(pow(-2,1), -2)
871 self
.assertEqual(pow(-2,2), 4)
872 self
.assertEqual(pow(-2,3), -8)
874 self
.assertEqual(pow(0L,0), 1)
875 self
.assertEqual(pow(0L,1), 0)
876 self
.assertEqual(pow(1L,0), 1)
877 self
.assertEqual(pow(1L,1), 1)
879 self
.assertEqual(pow(2L,0), 1)
880 self
.assertEqual(pow(2L,10), 1024)
881 self
.assertEqual(pow(2L,20), 1024*1024)
882 self
.assertEqual(pow(2L,30), 1024*1024*1024)
884 self
.assertEqual(pow(-2L,0), 1)
885 self
.assertEqual(pow(-2L,1), -2)
886 self
.assertEqual(pow(-2L,2), 4)
887 self
.assertEqual(pow(-2L,3), -8)
889 self
.assertAlmostEqual(pow(0.,0), 1.)
890 self
.assertAlmostEqual(pow(0.,1), 0.)
891 self
.assertAlmostEqual(pow(1.,0), 1.)
892 self
.assertAlmostEqual(pow(1.,1), 1.)
894 self
.assertAlmostEqual(pow(2.,0), 1.)
895 self
.assertAlmostEqual(pow(2.,10), 1024.)
896 self
.assertAlmostEqual(pow(2.,20), 1024.*1024.)
897 self
.assertAlmostEqual(pow(2.,30), 1024.*1024.*1024.)
899 self
.assertAlmostEqual(pow(-2.,0), 1.)
900 self
.assertAlmostEqual(pow(-2.,1), -2.)
901 self
.assertAlmostEqual(pow(-2.,2), 4.)
902 self
.assertAlmostEqual(pow(-2.,3), -8.)
905 for y
in 10, 10L, 10.0:
906 for z
in 1000, 1000L, 1000.0:
907 if isinstance(x
, float) or \
908 isinstance(y
, float) or \
909 isinstance(z
, float):
910 self
.assertRaises(TypeError, pow, x
, y
, z
)
912 self
.assertAlmostEqual(pow(x
, y
, z
), 24.0)
914 self
.assertRaises(TypeError, pow, -1, -2, 3)
915 self
.assertRaises(ValueError, pow, 1, 2, 0)
916 self
.assertRaises(TypeError, pow, -1L, -2L, 3L)
917 self
.assertRaises(ValueError, pow, 1L, 2L, 0L)
918 self
.assertRaises(ValueError, pow, -342.43, 0.234)
920 self
.assertRaises(TypeError, pow)
922 def test_range(self
):
923 self
.assertEqual(range(3), [0, 1, 2])
924 self
.assertEqual(range(1, 5), [1, 2, 3, 4])
925 self
.assertEqual(range(0), [])
926 self
.assertEqual(range(-3), [])
927 self
.assertEqual(range(1, 10, 3), [1, 4, 7])
928 self
.assertEqual(range(5, -5, -3), [5, 2, -1, -4])
930 # Now test range() with longs
931 self
.assertEqual(range(-2**100), [])
932 self
.assertEqual(range(0, -2**100), [])
933 self
.assertEqual(range(0, 2**100, -1), [])
934 self
.assertEqual(range(0, 2**100, -1), [])
936 a
= long(10 * sys
.maxint
)
937 b
= long(100 * sys
.maxint
)
938 c
= long(50 * sys
.maxint
)
940 self
.assertEqual(range(a
, a
+2), [a
, a
+1])
941 self
.assertEqual(range(a
+2, a
, -1L), [a
+2, a
+1])
942 self
.assertEqual(range(a
+4, a
, -2), [a
+4, a
+2])
945 self
.assert_(a
in seq
)
946 self
.assert_(b
not in seq
)
947 self
.assertEqual(len(seq
), 2)
949 seq
= range(b
, a
, -c
)
950 self
.assert_(b
in seq
)
951 self
.assert_(a
not in seq
)
952 self
.assertEqual(len(seq
), 2)
954 seq
= range(-a
, -b
, -c
)
955 self
.assert_(-a
in seq
)
956 self
.assert_(-b
not in seq
)
957 self
.assertEqual(len(seq
), 2)
959 self
.assertRaises(TypeError, range)
960 self
.assertRaises(TypeError, range, 1, 2, 3, 4)
961 self
.assertRaises(ValueError, range, 1, 2, 0)
963 # Reject floats when it would require PyLongs to represent.
964 # (smaller floats still accepted, but deprecated)
965 self
.assertRaises(TypeError, range, 1e100
, 1e101
, 1e101
)
967 self
.assertRaises(TypeError, range, 0, "spam")
968 self
.assertRaises(TypeError, range, 0, 42, "spam")
970 self
.assertRaises(OverflowError, range, -sys
.maxint
, sys
.maxint
)
971 self
.assertRaises(OverflowError, range, 0, 2*sys
.maxint
)
973 def test_input_and_raw_input(self
):
974 self
.write_testfile()
975 fp
= open(TESTFN
, 'r')
976 savestdin
= sys
.stdin
977 savestdout
= sys
.stdout
# Eats the echo
980 sys
.stdout
= BitBucket()
981 self
.assertEqual(input(), 2)
982 self
.assertEqual(input('testing\n'), 2)
983 self
.assertEqual(raw_input(), 'The quick brown fox jumps over the lazy dog.')
984 self
.assertEqual(raw_input('testing\n'), 'Dear John')
985 sys
.stdin
= cStringIO
.StringIO("NULL\0")
986 self
.assertRaises(TypeError, input, 42, 42)
987 sys
.stdin
= cStringIO
.StringIO(" 'whitespace'")
988 self
.assertEqual(input(), 'whitespace')
989 sys
.stdin
= cStringIO
.StringIO()
990 self
.assertRaises(EOFError, input)
992 self
.assertRaises(RuntimeError, input, 'prompt')
994 self
.assertRaises(RuntimeError, input, 'prompt')
996 sys
.stdin
= savestdin
997 sys
.stdout
= savestdout
1001 def test_reduce(self
):
1002 self
.assertEqual(reduce(lambda x
, y
: x
+y
, ['a', 'b', 'c'], ''), 'abc')
1004 reduce(lambda x
, y
: x
+y
, [['a', 'c'], [], ['d', 'w']], []),
1007 self
.assertEqual(reduce(lambda x
, y
: x
*y
, range(2,8), 1), 5040)
1009 reduce(lambda x
, y
: x
*y
, range(2,21), 1L),
1010 2432902008176640000L
1012 self
.assertEqual(reduce(lambda x
, y
: x
+y
, Squares(10)), 285)
1013 self
.assertEqual(reduce(lambda x
, y
: x
+y
, Squares(10), 0), 285)
1014 self
.assertEqual(reduce(lambda x
, y
: x
+y
, Squares(0), 0), 0)
1015 self
.assertRaises(TypeError, reduce)
1016 self
.assertRaises(TypeError, reduce, 42, 42)
1017 self
.assertRaises(TypeError, reduce, 42, 42, 42)
1018 self
.assertEqual(reduce(42, "1"), "1") # func is never called with one item
1019 self
.assertEqual(reduce(42, "", "1"), "1") # func is never called with one item
1020 self
.assertRaises(TypeError, reduce, 42, (42, 42))
1023 def __getitem__(self
, index
):
1025 self
.assertRaises(ValueError, reduce, 42, BadSeq())
1027 def test_reload(self
):
1033 ## self.assertRaises(ImportError, reload, sys)
1035 def test_repr(self
):
1036 self
.assertEqual(repr(''), '\'\'')
1037 self
.assertEqual(repr(0), '0')
1038 self
.assertEqual(repr(0L), '0L')
1039 self
.assertEqual(repr(()), '()')
1040 self
.assertEqual(repr([]), '[]')
1041 self
.assertEqual(repr({}), '{}')
1044 self
.assertEqual(repr(a
), '[[...]]')
1047 self
.assertEqual(repr(a
), '{0: {...}}')
1049 def test_round(self
):
1050 self
.assertEqual(round(0.0), 0.0)
1051 self
.assertEqual(round(1.0), 1.0)
1052 self
.assertEqual(round(10.0), 10.0)
1053 self
.assertEqual(round(1000000000.0), 1000000000.0)
1054 self
.assertEqual(round(1e20
), 1e20
)
1056 self
.assertEqual(round(-1.0), -1.0)
1057 self
.assertEqual(round(-10.0), -10.0)
1058 self
.assertEqual(round(-1000000000.0), -1000000000.0)
1059 self
.assertEqual(round(-1e20
), -1e20
)
1061 self
.assertEqual(round(0.1), 0.0)
1062 self
.assertEqual(round(1.1), 1.0)
1063 self
.assertEqual(round(10.1), 10.0)
1064 self
.assertEqual(round(1000000000.1), 1000000000.0)
1066 self
.assertEqual(round(-1.1), -1.0)
1067 self
.assertEqual(round(-10.1), -10.0)
1068 self
.assertEqual(round(-1000000000.1), -1000000000.0)
1070 self
.assertEqual(round(0.9), 1.0)
1071 self
.assertEqual(round(9.9), 10.0)
1072 self
.assertEqual(round(999999999.9), 1000000000.0)
1074 self
.assertEqual(round(-0.9), -1.0)
1075 self
.assertEqual(round(-9.9), -10.0)
1076 self
.assertEqual(round(-999999999.9), -1000000000.0)
1078 self
.assertEqual(round(-8.0, -1), -10.0)
1080 self
.assertRaises(TypeError, round)
1082 def test_setattr(self
):
1083 setattr(sys
, 'spam', 1)
1084 self
.assertEqual(sys
.spam
, 1)
1085 self
.assertRaises(TypeError, setattr, sys
, 1, 'spam')
1086 self
.assertRaises(TypeError, setattr)
1089 self
.assertEqual(str(''), '')
1090 self
.assertEqual(str(0), '0')
1091 self
.assertEqual(str(0L), '0')
1092 self
.assertEqual(str(()), '()')
1093 self
.assertEqual(str([]), '[]')
1094 self
.assertEqual(str({}), '{}')
1097 self
.assertEqual(str(a
), '[[...]]')
1100 self
.assertEqual(str(a
), '{0: {...}}')
1103 self
.assertEqual(sum([]), 0)
1104 self
.assertEqual(sum(range(2,8)), 27)
1105 self
.assertEqual(sum(iter(range(2,8))), 27)
1106 self
.assertEqual(sum(Squares(10)), 285)
1107 self
.assertEqual(sum(iter(Squares(10))), 285)
1108 self
.assertEqual(sum([[1], [2], [3]], []), [1, 2, 3])
1110 self
.assertRaises(TypeError, sum)
1111 self
.assertRaises(TypeError, sum, 42)
1112 self
.assertRaises(TypeError, sum, ['a', 'b', 'c'])
1113 self
.assertRaises(TypeError, sum, ['a', 'b', 'c'], '')
1114 self
.assertRaises(TypeError, sum, [[1], [2], [3]])
1115 self
.assertRaises(TypeError, sum, [{2:3}])
1116 self
.assertRaises(TypeError, sum, [{2:3}]*2, {2:3})
1119 def __getitem__(self
, index
):
1121 self
.assertRaises(ValueError, sum, BadSeq())
1123 def test_tuple(self
):
1124 self
.assertEqual(tuple(()), ())
1126 t0_3_bis
= tuple(t0_3
)
1127 self
.assert_(t0_3
is t0_3_bis
)
1128 self
.assertEqual(tuple([]), ())
1129 self
.assertEqual(tuple([0, 1, 2, 3]), (0, 1, 2, 3))
1130 self
.assertEqual(tuple(''), ())
1131 self
.assertEqual(tuple('spam'), ('s', 'p', 'a', 'm'))
1133 def test_type(self
):
1134 self
.assertEqual(type(''), type('123'))
1135 self
.assertNotEqual(type(''), type(()))
1137 def test_unichr(self
):
1139 self
.assertEqual(unichr(32), unicode(' '))
1140 self
.assertEqual(unichr(65), unicode('A'))
1141 self
.assertEqual(unichr(97), unicode('a'))
1143 unichr(sys
.maxunicode
),
1144 unicode('\\U%08x' % (sys
.maxunicode
), 'unicode-escape')
1146 self
.assertRaises(ValueError, unichr, sys
.maxunicode
+1)
1147 self
.assertRaises(TypeError, unichr)
1151 # we don't want self in vars(), so use staticmethod
1152 get_vars_f0
= staticmethod(get_vars_f0
)
1155 BuiltinTest
.get_vars_f0()
1159 get_vars_f2
= staticmethod(get_vars_f2
)
1161 def test_vars(self
):
1167 self
.assertEqual(a
, b
)
1169 a
= vars(sys
).keys()
1173 self
.assertEqual(a
, b
)
1174 self
.assertEqual(self
.get_vars_f0(), {})
1175 self
.assertEqual(self
.get_vars_f2(), {'a': 1, 'b': 2})
1176 self
.assertRaises(TypeError, vars, 42, 42)
1177 self
.assertRaises(TypeError, vars, 42)
1182 t
= [(1, 4), (2, 5), (3, 6)]
1183 self
.assertEqual(zip(a
, b
), t
)
1185 self
.assertEqual(zip(a
, b
), t
)
1187 self
.assertEqual(zip(a
, b
), t
)
1189 def __getitem__(self
, i
):
1190 if i
< 0 or i
> 2: raise IndexError
1192 self
.assertEqual(zip(a
, I()), t
)
1193 self
.assertRaises(TypeError, zip)
1194 self
.assertRaises(TypeError, zip, None)
1197 self
.assertRaises(TypeError, zip, a
, G())
1199 # Make sure zip doesn't try to allocate a billion elements for the
1200 # result list when one of its arguments doesn't say how long it is.
1201 # A MemoryError is the most likely failure mode.
1202 class SequenceWithoutALength
:
1203 def __getitem__(self
, i
):
1209 zip(SequenceWithoutALength(), xrange(2**30)),
1210 list(enumerate(range(5)))
1214 def __getitem__(self
, i
):
1219 self
.assertRaises(ValueError, zip, BadSeq(), BadSeq())
1222 suite
= unittest
.TestSuite()
1223 suite
.addTest(unittest
.makeSuite(BuiltinTest
))
1224 test
.test_support
.run_suite(suite
)
1226 if __name__
== "__main__":