blob: 8c46ab8eb3f94b6a17b232a2105289413677cc69 [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
Mark Dickinsond058cd22008-02-10 21:29:51 +00008import sys, warnings, cStringIO, random, fractions, 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
Walter Dörwald919497e2003-01-19 16:23:59 +000056
Raymond Hettinger96229b12005-03-11 06:49:40 +000057class TestFailingBool:
58 def __nonzero__(self):
59 raise RuntimeError
60
61class TestFailingIter:
62 def __iter__(self):
63 raise RuntimeError
64
Walter Dörwald919497e2003-01-19 16:23:59 +000065class BuiltinTest(unittest.TestCase):
66
67 def test_import(self):
68 __import__('sys')
69 __import__('time')
70 __import__('string')
Georg Brandl5240d742007-03-13 20:46:32 +000071 __import__(name='sys')
72 __import__(name='time', level=0)
Walter Dörwald919497e2003-01-19 16:23:59 +000073 self.assertRaises(ImportError, __import__, 'spamspam')
74 self.assertRaises(TypeError, __import__, 1, 2, 3, 4)
Thomas Wouters8ddab272006-04-04 16:17:02 +000075 self.assertRaises(ValueError, __import__, '')
Georg Brandl5240d742007-03-13 20:46:32 +000076 self.assertRaises(TypeError, __import__, 'sys', name='sys')
Walter Dörwald919497e2003-01-19 16:23:59 +000077
78 def test_abs(self):
79 # int
80 self.assertEqual(abs(0), 0)
81 self.assertEqual(abs(1234), 1234)
82 self.assertEqual(abs(-1234), 1234)
Martin v. Löwis820d6ac2006-10-04 05:47:34 +000083 self.assertTrue(abs(-sys.maxint-1) > 0)
Walter Dörwald919497e2003-01-19 16:23:59 +000084 # float
85 self.assertEqual(abs(0.0), 0.0)
86 self.assertEqual(abs(3.14), 3.14)
87 self.assertEqual(abs(-3.14), 3.14)
88 # long
89 self.assertEqual(abs(0L), 0L)
90 self.assertEqual(abs(1234L), 1234L)
91 self.assertEqual(abs(-1234L), 1234L)
92 # str
93 self.assertRaises(TypeError, abs, 'a')
94
Raymond Hettinger96229b12005-03-11 06:49:40 +000095 def test_all(self):
96 self.assertEqual(all([2, 4, 6]), True)
97 self.assertEqual(all([2, None, 6]), False)
98 self.assertRaises(RuntimeError, all, [2, TestFailingBool(), 6])
99 self.assertRaises(RuntimeError, all, TestFailingIter())
100 self.assertRaises(TypeError, all, 10) # Non-iterable
101 self.assertRaises(TypeError, all) # No args
102 self.assertRaises(TypeError, all, [2, 4, 6], []) # Too many args
103 self.assertEqual(all([]), True) # Empty iterator
104 S = [50, 60]
105 self.assertEqual(all(x > 42 for x in S), True)
106 S = [50, 40, 60]
107 self.assertEqual(all(x > 42 for x in S), False)
108
109 def test_any(self):
110 self.assertEqual(any([None, None, None]), False)
111 self.assertEqual(any([None, 4, None]), True)
112 self.assertRaises(RuntimeError, any, [None, TestFailingBool(), 6])
113 self.assertRaises(RuntimeError, all, TestFailingIter())
114 self.assertRaises(TypeError, any, 10) # Non-iterable
115 self.assertRaises(TypeError, any) # No args
116 self.assertRaises(TypeError, any, [2, 4, 6], []) # Too many args
117 self.assertEqual(any([]), False) # Empty iterator
118 S = [40, 60, 30]
119 self.assertEqual(any(x > 42 for x in S), True)
120 S = [10, 20, 30]
121 self.assertEqual(any(x > 42 for x in S), False)
122
Armin Rigo7ccbca92006-10-04 12:17:45 +0000123 def test_neg(self):
124 x = -sys.maxint-1
125 self.assert_(isinstance(x, int))
126 self.assertEqual(-x, sys.maxint+1)
127
Walter Dörwald919497e2003-01-19 16:23:59 +0000128 def test_apply(self):
129 def f0(*args):
130 self.assertEqual(args, ())
131 def f1(a1):
132 self.assertEqual(a1, 1)
133 def f2(a1, a2):
134 self.assertEqual(a1, 1)
135 self.assertEqual(a2, 2)
136 def f3(a1, a2, a3):
137 self.assertEqual(a1, 1)
138 self.assertEqual(a2, 2)
139 self.assertEqual(a3, 3)
140 apply(f0, ())
141 apply(f1, (1,))
142 apply(f2, (1, 2))
143 apply(f3, (1, 2, 3))
144
145 # A PyCFunction that takes only positional parameters should allow an
146 # empty keyword dictionary to pass without a complaint, but raise a
147 # TypeError if the dictionary is non-empty.
148 apply(id, (1,), {})
149 self.assertRaises(TypeError, apply, id, (1,), {"foo": 1})
150 self.assertRaises(TypeError, apply)
151 self.assertRaises(TypeError, apply, id, 42)
152 self.assertRaises(TypeError, apply, id, (42,), 42)
153
154 def test_callable(self):
155 self.assert_(callable(len))
156 def f(): pass
157 self.assert_(callable(f))
158 class C:
159 def meth(self): pass
160 self.assert_(callable(C))
161 x = C()
162 self.assert_(callable(x.meth))
163 self.assert_(not callable(x))
164 class D(C):
165 def __call__(self): pass
166 y = D()
167 self.assert_(callable(y))
168 y()
169
170 def test_chr(self):
171 self.assertEqual(chr(32), ' ')
172 self.assertEqual(chr(65), 'A')
173 self.assertEqual(chr(97), 'a')
174 self.assertEqual(chr(0xff), '\xff')
175 self.assertRaises(ValueError, chr, 256)
176 self.assertRaises(TypeError, chr)
177
178 def test_cmp(self):
179 self.assertEqual(cmp(-1, 1), -1)
180 self.assertEqual(cmp(1, -1), 1)
181 self.assertEqual(cmp(1, 1), 0)
Armin Rigo2b3eb402003-10-28 12:05:48 +0000182 # verify that circular objects are not handled
Walter Dörwald919497e2003-01-19 16:23:59 +0000183 a = []; a.append(a)
184 b = []; b.append(b)
185 from UserList import UserList
186 c = UserList(); c.append(c)
Armin Rigo2b3eb402003-10-28 12:05:48 +0000187 self.assertRaises(RuntimeError, cmp, a, b)
188 self.assertRaises(RuntimeError, cmp, b, c)
189 self.assertRaises(RuntimeError, cmp, c, a)
190 self.assertRaises(RuntimeError, cmp, a, c)
191 # okay, now break the cycles
Walter Dörwald919497e2003-01-19 16:23:59 +0000192 a.pop(); b.pop(); c.pop()
193 self.assertRaises(TypeError, cmp)
194
195 def test_coerce(self):
196 self.assert_(not fcmp(coerce(1, 1.1), (1.0, 1.1)))
197 self.assertEqual(coerce(1, 1L), (1L, 1L))
198 self.assert_(not fcmp(coerce(1L, 1.1), (1.0, 1.1)))
199 self.assertRaises(TypeError, coerce)
200 class BadNumber:
201 def __coerce__(self, other):
202 raise ValueError
203 self.assertRaises(ValueError, coerce, 42, BadNumber())
Neal Norwitzabcb0c02003-01-28 19:21:24 +0000204 self.assertRaises(OverflowError, coerce, 0.5, int("12345" * 1000))
Walter Dörwald919497e2003-01-19 16:23:59 +0000205
206 def test_compile(self):
207 compile('print 1\n', '', 'exec')
Just van Rossumf032f862003-02-09 20:38:48 +0000208 bom = '\xef\xbb\xbf'
209 compile(bom + 'print 1\n', '', 'exec')
Georg Brandl5240d742007-03-13 20:46:32 +0000210 compile(source='pass', filename='?', mode='exec')
211 compile(dont_inherit=0, filename='tmp', source='0', mode='eval')
212 compile('pass', '?', dont_inherit=1, mode='exec')
Walter Dörwald919497e2003-01-19 16:23:59 +0000213 self.assertRaises(TypeError, compile)
214 self.assertRaises(ValueError, compile, 'print 42\n', '<string>', 'badmode')
215 self.assertRaises(ValueError, compile, 'print 42\n', '<string>', 'single', 0xff)
Neal Norwitzfcf44352005-11-27 20:37:43 +0000216 self.assertRaises(TypeError, compile, chr(0), 'f', 'exec')
Georg Brandl5240d742007-03-13 20:46:32 +0000217 self.assertRaises(TypeError, compile, 'pass', '?', 'exec',
218 mode='eval', source='0', filename='tmp')
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000219 if have_unicode:
220 compile(unicode('print u"\xc3\xa5"\n', 'utf8'), '', 'exec')
Neal Norwitzfcf44352005-11-27 20:37:43 +0000221 self.assertRaises(TypeError, compile, unichr(0), 'f', 'exec')
222 self.assertRaises(ValueError, compile, unicode('a = 1'), 'f', 'bad')
Walter Dörwald919497e2003-01-19 16:23:59 +0000223
Georg Brandl5240d742007-03-13 20:46:32 +0000224
Walter Dörwald919497e2003-01-19 16:23:59 +0000225 def test_delattr(self):
226 import sys
227 sys.spam = 1
228 delattr(sys, 'spam')
229 self.assertRaises(TypeError, delattr)
230
231 def test_dir(self):
Georg Brandl871f1bc2007-03-12 13:17:36 +0000232 # dir(wrong number of arguments)
Walter Dörwald919497e2003-01-19 16:23:59 +0000233 self.assertRaises(TypeError, dir, 42, 42)
234
Georg Brandl871f1bc2007-03-12 13:17:36 +0000235 # dir() - local scope
236 local_var = 1
237 self.assert_('local_var' in dir())
238
239 # dir(module)
240 import sys
241 self.assert_('exit' in dir(sys))
242
243 # dir(module_with_invalid__dict__)
244 import types
245 class Foo(types.ModuleType):
246 __dict__ = 8
247 f = Foo("foo")
248 self.assertRaises(TypeError, dir, f)
249
250 # dir(type)
251 self.assert_("strip" in dir(str))
252 self.assert_("__mro__" not in dir(str))
253
254 # dir(obj)
255 class Foo(object):
256 def __init__(self):
257 self.x = 7
258 self.y = 8
259 self.z = 9
260 f = Foo()
261 self.assert_("y" in dir(f))
262
263 # dir(obj_no__dict__)
264 class Foo(object):
265 __slots__ = []
266 f = Foo()
267 self.assert_("__repr__" in dir(f))
268
269 # dir(obj_no__class__with__dict__)
270 # (an ugly trick to cause getattr(f, "__class__") to fail)
271 class Foo(object):
272 __slots__ = ["__class__", "__dict__"]
273 def __init__(self):
274 self.bar = "wow"
275 f = Foo()
276 self.assert_("__repr__" not in dir(f))
277 self.assert_("bar" in dir(f))
278
279 # dir(obj_using __dir__)
280 class Foo(object):
281 def __dir__(self):
282 return ["kan", "ga", "roo"]
283 f = Foo()
284 self.assert_(dir(f) == ["ga", "kan", "roo"])
285
286 # dir(obj__dir__not_list)
287 class Foo(object):
288 def __dir__(self):
289 return 7
290 f = Foo()
291 self.assertRaises(TypeError, dir, f)
292
Walter Dörwald919497e2003-01-19 16:23:59 +0000293 def test_divmod(self):
294 self.assertEqual(divmod(12, 7), (1, 5))
295 self.assertEqual(divmod(-12, 7), (-2, 2))
296 self.assertEqual(divmod(12, -7), (-2, -2))
297 self.assertEqual(divmod(-12, -7), (1, -5))
298
299 self.assertEqual(divmod(12L, 7L), (1L, 5L))
300 self.assertEqual(divmod(-12L, 7L), (-2L, 2L))
301 self.assertEqual(divmod(12L, -7L), (-2L, -2L))
302 self.assertEqual(divmod(-12L, -7L), (1L, -5L))
303
304 self.assertEqual(divmod(12, 7L), (1, 5L))
305 self.assertEqual(divmod(-12, 7L), (-2, 2L))
306 self.assertEqual(divmod(12L, -7), (-2L, -2))
307 self.assertEqual(divmod(-12L, -7), (1L, -5))
308
Raymond Hettinger5ea7e312004-09-30 07:47:20 +0000309 self.assertEqual(divmod(-sys.maxint-1, -1),
310 (sys.maxint+1, 0))
311
Walter Dörwald919497e2003-01-19 16:23:59 +0000312 self.assert_(not fcmp(divmod(3.25, 1.0), (3.0, 0.25)))
313 self.assert_(not fcmp(divmod(-3.25, 1.0), (-4.0, 0.75)))
314 self.assert_(not fcmp(divmod(3.25, -1.0), (-4.0, -0.75)))
315 self.assert_(not fcmp(divmod(-3.25, -1.0), (3.0, -0.25)))
316
317 self.assertRaises(TypeError, divmod)
318
319 def test_eval(self):
320 self.assertEqual(eval('1+1'), 2)
321 self.assertEqual(eval(' 1+1\n'), 2)
322 globals = {'a': 1, 'b': 2}
323 locals = {'b': 200, 'c': 300}
324 self.assertEqual(eval('a', globals) , 1)
325 self.assertEqual(eval('a', globals, locals), 1)
326 self.assertEqual(eval('b', globals, locals), 200)
327 self.assertEqual(eval('c', globals, locals), 300)
328 if have_unicode:
329 self.assertEqual(eval(unicode('1+1')), 2)
330 self.assertEqual(eval(unicode(' 1+1\n')), 2)
331 globals = {'a': 1, 'b': 2}
332 locals = {'b': 200, 'c': 300}
333 if have_unicode:
334 self.assertEqual(eval(unicode('a'), globals), 1)
335 self.assertEqual(eval(unicode('a'), globals, locals), 1)
336 self.assertEqual(eval(unicode('b'), globals, locals), 200)
337 self.assertEqual(eval(unicode('c'), globals, locals), 300)
Just van Rossumf032f862003-02-09 20:38:48 +0000338 bom = '\xef\xbb\xbf'
339 self.assertEqual(eval(bom + 'a', globals, locals), 1)
Just van Rossum3aaf42c2003-02-10 08:21:10 +0000340 self.assertEqual(eval(unicode('u"\xc3\xa5"', 'utf8'), globals),
341 unicode('\xc3\xa5', 'utf8'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000342 self.assertRaises(TypeError, eval)
343 self.assertRaises(TypeError, eval, ())
344
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000345 def test_general_eval(self):
346 # Tests that general mappings can be used for the locals argument
347
348 class M:
349 "Test mapping interface versus possible calls from eval()."
350 def __getitem__(self, key):
351 if key == 'a':
352 return 12
353 raise KeyError
354 def keys(self):
355 return list('xyz')
356
357 m = M()
358 g = globals()
359 self.assertEqual(eval('a', g, m), 12)
360 self.assertRaises(NameError, eval, 'b', g, m)
361 self.assertEqual(eval('dir()', g, m), list('xyz'))
362 self.assertEqual(eval('globals()', g, m), g)
363 self.assertEqual(eval('locals()', g, m), m)
Raymond Hettinger513ffe82004-07-06 13:44:41 +0000364 self.assertRaises(TypeError, eval, 'a', m)
Raymond Hettinger66bd2332004-08-02 08:30:07 +0000365 class A:
366 "Non-mapping"
367 pass
368 m = A()
369 self.assertRaises(TypeError, eval, 'a', g, m)
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000370
371 # Verify that dict subclasses work as well
372 class D(dict):
373 def __getitem__(self, key):
374 if key == 'a':
375 return 12
376 return dict.__getitem__(self, key)
377 def keys(self):
378 return list('xyz')
379
380 d = D()
381 self.assertEqual(eval('a', g, d), 12)
382 self.assertRaises(NameError, eval, 'b', g, d)
383 self.assertEqual(eval('dir()', g, d), list('xyz'))
384 self.assertEqual(eval('globals()', g, d), g)
385 self.assertEqual(eval('locals()', g, d), d)
386
387 # Verify locals stores (used by list comps)
388 eval('[locals() for i in (2,3)]', g, d)
389 eval('[locals() for i in (2,3)]', g, UserDict.UserDict())
390
391 class SpreadSheet:
392 "Sample application showing nested, calculated lookups."
393 _cells = {}
394 def __setitem__(self, key, formula):
395 self._cells[key] = formula
Martin Blais215f13d2006-06-06 12:46:55 +0000396 def __getitem__(self, key):
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000397 return eval(self._cells[key], globals(), self)
398
399 ss = SpreadSheet()
400 ss['a1'] = '5'
401 ss['a2'] = 'a1*6'
402 ss['a3'] = 'a2*7'
403 self.assertEqual(ss['a3'], 210)
404
Raymond Hettinger2a7dede2004-08-07 04:55:30 +0000405 # Verify that dir() catches a non-list returned by eval
406 # SF bug #1004669
407 class C:
408 def __getitem__(self, item):
409 raise KeyError(item)
410 def keys(self):
411 return 'a'
412 self.assertRaises(TypeError, eval, 'dir()', globals(), C())
413
Walter Dörwald919497e2003-01-19 16:23:59 +0000414 # Done outside of the method test_z to get the correct scope
415 z = 0
416 f = open(TESTFN, 'w')
417 f.write('z = z+1\n')
418 f.write('z = z*2\n')
419 f.close()
420 execfile(TESTFN)
421
422 def test_execfile(self):
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +0000423 global numruns
424 if numruns:
425 return
426 numruns += 1
Tim Peters7f061872004-12-07 21:17:46 +0000427
Walter Dörwald919497e2003-01-19 16:23:59 +0000428 globals = {'a': 1, 'b': 2}
429 locals = {'b': 200, 'c': 300}
430
431 self.assertEqual(self.__class__.z, 2)
432 globals['z'] = 0
433 execfile(TESTFN, globals)
434 self.assertEqual(globals['z'], 2)
435 locals['z'] = 0
436 execfile(TESTFN, globals, locals)
437 self.assertEqual(locals['z'], 2)
Raymond Hettinger66bd2332004-08-02 08:30:07 +0000438
439 class M:
440 "Test mapping interface versus possible calls from execfile()."
441 def __init__(self):
442 self.z = 10
443 def __getitem__(self, key):
444 if key == 'z':
445 return self.z
446 raise KeyError
447 def __setitem__(self, key, value):
448 if key == 'z':
449 self.z = value
450 return
451 raise KeyError
452
453 locals = M()
454 locals['z'] = 0
455 execfile(TESTFN, globals, locals)
456 self.assertEqual(locals['z'], 2)
457
Walter Dörwald919497e2003-01-19 16:23:59 +0000458 unlink(TESTFN)
459 self.assertRaises(TypeError, execfile)
Neal Norwitzfcf44352005-11-27 20:37:43 +0000460 self.assertRaises(TypeError, execfile, TESTFN, {}, ())
Walter Dörwald919497e2003-01-19 16:23:59 +0000461 import os
462 self.assertRaises(IOError, execfile, os.curdir)
463 self.assertRaises(IOError, execfile, "I_dont_exist")
464
465 def test_filter(self):
466 self.assertEqual(filter(lambda c: 'a' <= c <= 'z', 'Hello World'), 'elloorld')
467 self.assertEqual(filter(None, [1, 'hello', [], [3], '', None, 9, 0]), [1, 'hello', [3], 9])
468 self.assertEqual(filter(lambda x: x > 0, [1, -3, 9, 0, 2]), [1, 9, 2])
469 self.assertEqual(filter(None, Squares(10)), [1, 4, 9, 16, 25, 36, 49, 64, 81])
470 self.assertEqual(filter(lambda x: x%2, Squares(10)), [1, 9, 25, 49, 81])
471 def identity(item):
472 return 1
473 filter(identity, Squares(5))
474 self.assertRaises(TypeError, filter)
475 class BadSeq(object):
Tim Petersf2715e02003-02-19 02:35:07 +0000476 def __getitem__(self, index):
477 if index<4:
478 return 42
479 raise ValueError
Walter Dörwald919497e2003-01-19 16:23:59 +0000480 self.assertRaises(ValueError, filter, lambda x: x, BadSeq())
481 def badfunc():
482 pass
483 self.assertRaises(TypeError, filter, badfunc, range(5))
484
Walter Dörwaldbf517072003-01-27 15:57:14 +0000485 # test bltinmodule.c::filtertuple()
Walter Dörwald919497e2003-01-19 16:23:59 +0000486 self.assertEqual(filter(None, (1, 2)), (1, 2))
487 self.assertEqual(filter(lambda x: x>=3, (1, 2, 3, 4)), (3, 4))
488 self.assertRaises(TypeError, filter, 42, (1, 2))
489
Walter Dörwaldbf517072003-01-27 15:57:14 +0000490 # test bltinmodule.c::filterstring()
Walter Dörwald919497e2003-01-19 16:23:59 +0000491 self.assertEqual(filter(None, "12"), "12")
492 self.assertEqual(filter(lambda x: x>="3", "1234"), "34")
493 self.assertRaises(TypeError, filter, 42, "12")
494 class badstr(str):
495 def __getitem__(self, index):
496 raise ValueError
497 self.assertRaises(ValueError, filter, lambda x: x >="3", badstr("1234"))
Walter Dörwaldbf517072003-01-27 15:57:14 +0000498
Walter Dörwald903f1e02003-02-04 16:28:00 +0000499 class badstr2(str):
500 def __getitem__(self, index):
501 return 42
502 self.assertRaises(TypeError, filter, lambda x: x >=42, badstr2("1234"))
503
504 class weirdstr(str):
505 def __getitem__(self, index):
506 return weirdstr(2*str.__getitem__(self, index))
507 self.assertEqual(filter(lambda x: x>="33", weirdstr("1234")), "3344")
508
Walter Dörwald5e61e242003-02-04 17:04:01 +0000509 class shiftstr(str):
510 def __getitem__(self, index):
511 return chr(ord(str.__getitem__(self, index))+1)
512 self.assertEqual(filter(lambda x: x>="3", shiftstr("1234")), "345")
513
Martin v. Löwis8afd7572003-01-25 22:46:11 +0000514 if have_unicode:
Walter Dörwaldbf517072003-01-27 15:57:14 +0000515 # test bltinmodule.c::filterunicode()
Martin v. Löwis8afd7572003-01-25 22:46:11 +0000516 self.assertEqual(filter(None, unicode("12")), unicode("12"))
517 self.assertEqual(filter(lambda x: x>="3", unicode("1234")), unicode("34"))
518 self.assertRaises(TypeError, filter, 42, unicode("12"))
519 self.assertRaises(ValueError, filter, lambda x: x >="3", badstr(unicode("1234")))
Walter Dörwald919497e2003-01-19 16:23:59 +0000520
Walter Dörwald903f1e02003-02-04 16:28:00 +0000521 class badunicode(unicode):
522 def __getitem__(self, index):
523 return 42
524 self.assertRaises(TypeError, filter, lambda x: x >=42, badunicode("1234"))
525
526 class weirdunicode(unicode):
527 def __getitem__(self, index):
528 return weirdunicode(2*unicode.__getitem__(self, index))
529 self.assertEqual(
530 filter(lambda x: x>=unicode("33"), weirdunicode("1234")), unicode("3344"))
531
Walter Dörwald5e61e242003-02-04 17:04:01 +0000532 class shiftunicode(unicode):
533 def __getitem__(self, index):
534 return unichr(ord(unicode.__getitem__(self, index))+1)
535 self.assertEqual(
536 filter(lambda x: x>=unicode("3"), shiftunicode("1234")),
537 unicode("345")
538 )
539
Walter Dörwaldc3da83f2003-02-04 20:24:45 +0000540 def test_filter_subclasses(self):
Walter Dörwaldc8cb5d92003-08-15 17:52:39 +0000541 # test that filter() never returns tuple, str or unicode subclasses
542 # and that the result always goes through __getitem__
543 funcs = (None, bool, lambda x: True)
Walter Dörwaldc3da83f2003-02-04 20:24:45 +0000544 class tuple2(tuple):
Walter Dörwald1918f772003-02-10 13:19:13 +0000545 def __getitem__(self, index):
546 return 2*tuple.__getitem__(self, index)
Walter Dörwaldc3da83f2003-02-04 20:24:45 +0000547 class str2(str):
Walter Dörwald1918f772003-02-10 13:19:13 +0000548 def __getitem__(self, index):
549 return 2*str.__getitem__(self, index)
Walter Dörwaldc3da83f2003-02-04 20:24:45 +0000550 inputs = {
Walter Dörwald8dd19322003-02-10 17:36:40 +0000551 tuple2: {(): (), (1, 2, 3): (2, 4, 6)},
Walter Dörwald1918f772003-02-10 13:19:13 +0000552 str2: {"": "", "123": "112233"}
Walter Dörwaldc3da83f2003-02-04 20:24:45 +0000553 }
554 if have_unicode:
555 class unicode2(unicode):
Walter Dörwald1918f772003-02-10 13:19:13 +0000556 def __getitem__(self, index):
557 return 2*unicode.__getitem__(self, index)
558 inputs[unicode2] = {
559 unicode(): unicode(),
560 unicode("123"): unicode("112233")
561 }
Walter Dörwaldc3da83f2003-02-04 20:24:45 +0000562
Walter Dörwald1918f772003-02-10 13:19:13 +0000563 for (cls, inps) in inputs.iteritems():
564 for (inp, exp) in inps.iteritems():
Tim Petersf2715e02003-02-19 02:35:07 +0000565 # make sure the output goes through __getitem__
566 # even if func is None
567 self.assertEqual(
568 filter(funcs[0], cls(inp)),
569 filter(funcs[1], cls(inp))
570 )
571 for func in funcs:
Walter Dörwald1918f772003-02-10 13:19:13 +0000572 outp = filter(func, cls(inp))
573 self.assertEqual(outp, exp)
574 self.assert_(not isinstance(outp, cls))
Walter Dörwaldc3da83f2003-02-04 20:24:45 +0000575
Walter Dörwald919497e2003-01-19 16:23:59 +0000576 def test_getattr(self):
577 import sys
578 self.assert_(getattr(sys, 'stdout') is sys.stdout)
579 self.assertRaises(TypeError, getattr, sys, 1)
580 self.assertRaises(TypeError, getattr, sys, 1, "foo")
581 self.assertRaises(TypeError, getattr)
Walter Dörwald4e41a4b2005-08-03 17:09:04 +0000582 if have_unicode:
583 self.assertRaises(UnicodeError, getattr, sys, unichr(sys.maxunicode))
Walter Dörwald919497e2003-01-19 16:23:59 +0000584
585 def test_hasattr(self):
586 import sys
587 self.assert_(hasattr(sys, 'stdout'))
588 self.assertRaises(TypeError, hasattr, sys, 1)
589 self.assertRaises(TypeError, hasattr)
Walter Dörwald4e41a4b2005-08-03 17:09:04 +0000590 if have_unicode:
591 self.assertRaises(UnicodeError, hasattr, sys, unichr(sys.maxunicode))
Walter Dörwald919497e2003-01-19 16:23:59 +0000592
Benjamin Petersonb9030f42008-05-12 00:41:23 +0000593 # Check that hasattr allows SystemExit and KeyboardInterrupts by
594 class A:
595 def __getattr__(self, what):
596 raise KeyboardInterrupt
597 self.assertRaises(KeyboardInterrupt, hasattr, A(), "b")
598 class B:
599 def __getattr__(self, what):
600 raise SystemExit
601 self.assertRaises(SystemExit, hasattr, B(), "b")
602
Walter Dörwald919497e2003-01-19 16:23:59 +0000603 def test_hash(self):
604 hash(None)
605 self.assertEqual(hash(1), hash(1L))
606 self.assertEqual(hash(1), hash(1.0))
607 hash('spam')
608 if have_unicode:
609 self.assertEqual(hash('spam'), hash(unicode('spam')))
610 hash((0,1,2,3))
611 def f(): pass
612 self.assertRaises(TypeError, hash, [])
613 self.assertRaises(TypeError, hash, {})
Martin v. Löwisab2f8f72006-08-09 07:57:39 +0000614 # Bug 1536021: Allow hash to return long objects
615 class X:
616 def __hash__(self):
617 return 2**100
618 self.assertEquals(type(hash(X())), int)
619 class Y(object):
620 def __hash__(self):
621 return 2**100
622 self.assertEquals(type(hash(Y())), int)
Armin Rigo51fc8c42006-08-09 14:55:26 +0000623 class Z(long):
624 def __hash__(self):
625 return self
626 self.assertEquals(hash(Z(42)), hash(42L))
Walter Dörwald919497e2003-01-19 16:23:59 +0000627
628 def test_hex(self):
629 self.assertEqual(hex(16), '0x10')
630 self.assertEqual(hex(16L), '0x10L')
Guido van Rossum6c9e1302003-11-29 23:52:13 +0000631 self.assertEqual(hex(-16), '-0x10')
Walter Dörwald919497e2003-01-19 16:23:59 +0000632 self.assertEqual(hex(-16L), '-0x10L')
633 self.assertRaises(TypeError, hex, {})
Raymond Hettingere0e71142008-06-21 06:39:53 +0000634 self.assertEqual(hex(3.125), '0x19 * 2.0 ** -3')
635 self.assertEqual(hex(0.0), '0x0 * 2.0 ** 0')
636 for sv in float('nan'), float('inf'), float('-inf'):
637 self.assertEqual(hex(sv), repr(sv))
638 for i in range(100):
639 x = random.expovariate(.05)
640 self.assertEqual(eval(hex(x)), x, (x, hex(x), eval(hex(x))))
641 self.assertEqual(eval(hex(-x)), -x)
642 self.assertEqual(hex(-x), ('-' + hex(x)))
Walter Dörwald919497e2003-01-19 16:23:59 +0000643
644 def test_id(self):
645 id(None)
646 id(1)
647 id(1L)
648 id(1.0)
649 id('spam')
650 id((0,1,2,3))
651 id([0,1,2,3])
652 id({'spam': 1, 'eggs': 2, 'ham': 3})
653
654 # Test input() later, together with raw_input
655
Walter Dörwald919497e2003-01-19 16:23:59 +0000656 def test_intern(self):
657 self.assertRaises(TypeError, intern)
658 s = "never interned before"
659 self.assert_(intern(s) is s)
660 s2 = s.swapcase().swapcase()
661 self.assert_(intern(s2) is s)
662
Jeremy Hylton4c989dd2004-08-07 19:20:05 +0000663 # Subclasses of string can't be interned, because they
664 # provide too much opportunity for insane things to happen.
665 # We don't want them in the interned dict and if they aren't
666 # actually interned, we don't want to create the appearance
667 # that they are by allowing intern() to succeeed.
668 class S(str):
669 def __hash__(self):
670 return 123
671
672 self.assertRaises(TypeError, intern, S("abc"))
673
674 # It's still safe to pass these strings to routines that
675 # call intern internally, e.g. PyObject_SetAttr().
676 s = S("abc")
677 setattr(s, s, s)
678 self.assertEqual(getattr(s, s), s)
679
Walter Dörwald919497e2003-01-19 16:23:59 +0000680 def test_iter(self):
681 self.assertRaises(TypeError, iter)
682 self.assertRaises(TypeError, iter, 42, 42)
683 lists = [("1", "2"), ["1", "2"], "12"]
684 if have_unicode:
685 lists.append(unicode("12"))
686 for l in lists:
687 i = iter(l)
688 self.assertEqual(i.next(), '1')
689 self.assertEqual(i.next(), '2')
690 self.assertRaises(StopIteration, i.next)
691
692 def test_isinstance(self):
693 class C:
694 pass
695 class D(C):
696 pass
697 class E:
698 pass
699 c = C()
700 d = D()
701 e = E()
702 self.assert_(isinstance(c, C))
703 self.assert_(isinstance(d, C))
704 self.assert_(not isinstance(e, C))
705 self.assert_(not isinstance(c, D))
706 self.assert_(not isinstance('foo', E))
707 self.assertRaises(TypeError, isinstance, E, 'foo')
708 self.assertRaises(TypeError, isinstance)
709
710 def test_issubclass(self):
711 class C:
712 pass
713 class D(C):
714 pass
715 class E:
716 pass
717 c = C()
718 d = D()
719 e = E()
720 self.assert_(issubclass(D, C))
721 self.assert_(issubclass(C, C))
722 self.assert_(not issubclass(C, D))
723 self.assertRaises(TypeError, issubclass, 'foo', E)
724 self.assertRaises(TypeError, issubclass, E, 'foo')
725 self.assertRaises(TypeError, issubclass)
726
727 def test_len(self):
728 self.assertEqual(len('123'), 3)
729 self.assertEqual(len(()), 0)
730 self.assertEqual(len((1, 2, 3, 4)), 4)
731 self.assertEqual(len([1, 2, 3, 4]), 4)
732 self.assertEqual(len({}), 0)
733 self.assertEqual(len({'a':1, 'b': 2}), 2)
734 class BadSeq:
735 def __len__(self):
736 raise ValueError
737 self.assertRaises(ValueError, len, BadSeq())
738
Walter Dörwald919497e2003-01-19 16:23:59 +0000739 def test_map(self):
740 self.assertEqual(
741 map(None, 'hello world'),
742 ['h','e','l','l','o',' ','w','o','r','l','d']
743 )
744 self.assertEqual(
745 map(None, 'abcd', 'efg'),
746 [('a', 'e'), ('b', 'f'), ('c', 'g'), ('d', None)]
747 )
748 self.assertEqual(
749 map(None, range(10)),
750 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
751 )
752 self.assertEqual(
753 map(lambda x: x*x, range(1,4)),
754 [1, 4, 9]
755 )
756 try:
757 from math import sqrt
758 except ImportError:
759 def sqrt(x):
760 return pow(x, 0.5)
761 self.assertEqual(
762 map(lambda x: map(sqrt,x), [[16, 4], [81, 9]]),
763 [[4.0, 2.0], [9.0, 3.0]]
764 )
765 self.assertEqual(
766 map(lambda x, y: x+y, [1,3,2], [9,1,4]),
767 [10, 4, 6]
768 )
769
770 def plus(*v):
771 accu = 0
772 for i in v: accu = accu + i
773 return accu
774 self.assertEqual(
775 map(plus, [1, 3, 7]),
776 [1, 3, 7]
777 )
778 self.assertEqual(
779 map(plus, [1, 3, 7], [4, 9, 2]),
780 [1+4, 3+9, 7+2]
781 )
782 self.assertEqual(
783 map(plus, [1, 3, 7], [4, 9, 2], [1, 1, 0]),
784 [1+4+1, 3+9+1, 7+2+0]
785 )
786 self.assertEqual(
787 map(None, Squares(10)),
788 [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
789 )
790 self.assertEqual(
791 map(int, Squares(10)),
792 [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
793 )
794 self.assertEqual(
795 map(None, Squares(3), Squares(2)),
796 [(0,0), (1,1), (4,None)]
797 )
798 self.assertEqual(
799 map(max, Squares(3), Squares(2)),
800 [0, 1, 4]
801 )
802 self.assertRaises(TypeError, map)
803 self.assertRaises(TypeError, map, lambda x: x, 42)
804 self.assertEqual(map(None, [42]), [42])
805 class BadSeq:
806 def __getitem__(self, index):
807 raise ValueError
808 self.assertRaises(ValueError, map, lambda x: x, BadSeq())
Neal Norwitzfcf44352005-11-27 20:37:43 +0000809 def badfunc(x):
810 raise RuntimeError
811 self.assertRaises(RuntimeError, map, badfunc, range(5))
Walter Dörwald919497e2003-01-19 16:23:59 +0000812
813 def test_max(self):
814 self.assertEqual(max('123123'), '3')
815 self.assertEqual(max(1, 2, 3), 3)
816 self.assertEqual(max((1, 2, 3, 1, 2, 3)), 3)
817 self.assertEqual(max([1, 2, 3, 1, 2, 3]), 3)
818
819 self.assertEqual(max(1, 2L, 3.0), 3.0)
820 self.assertEqual(max(1L, 2.0, 3), 3)
821 self.assertEqual(max(1.0, 2, 3L), 3L)
822
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +0000823 for stmt in (
824 "max(key=int)", # no args
825 "max(1, key=int)", # single arg not iterable
826 "max(1, 2, keystone=int)", # wrong keyword
827 "max(1, 2, key=int, abc=int)", # two many keywords
828 "max(1, 2, key=1)", # keyfunc is not callable
829 ):
Tim Peters7f061872004-12-07 21:17:46 +0000830 try:
831 exec(stmt) in globals()
832 except TypeError:
833 pass
834 else:
835 self.fail(stmt)
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +0000836
837 self.assertEqual(max((1,), key=neg), 1) # one elem iterable
838 self.assertEqual(max((1,2), key=neg), 1) # two elem iterable
839 self.assertEqual(max(1, 2, key=neg), 1) # two elems
840
841 data = [random.randrange(200) for i in range(100)]
842 keys = dict((elem, random.randrange(50)) for elem in data)
843 f = keys.__getitem__
844 self.assertEqual(max(data, key=f),
845 sorted(reversed(data), key=f)[-1])
846
Walter Dörwald919497e2003-01-19 16:23:59 +0000847 def test_min(self):
848 self.assertEqual(min('123123'), '1')
849 self.assertEqual(min(1, 2, 3), 1)
850 self.assertEqual(min((1, 2, 3, 1, 2, 3)), 1)
851 self.assertEqual(min([1, 2, 3, 1, 2, 3]), 1)
852
853 self.assertEqual(min(1, 2L, 3.0), 1)
854 self.assertEqual(min(1L, 2.0, 3), 1L)
855 self.assertEqual(min(1.0, 2, 3L), 1.0)
856
857 self.assertRaises(TypeError, min)
858 self.assertRaises(TypeError, min, 42)
859 self.assertRaises(ValueError, min, ())
860 class BadSeq:
861 def __getitem__(self, index):
862 raise ValueError
863 self.assertRaises(ValueError, min, BadSeq())
864 class BadNumber:
865 def __cmp__(self, other):
866 raise ValueError
867 self.assertRaises(ValueError, min, (42, BadNumber()))
868
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +0000869 for stmt in (
870 "min(key=int)", # no args
871 "min(1, key=int)", # single arg not iterable
872 "min(1, 2, keystone=int)", # wrong keyword
873 "min(1, 2, key=int, abc=int)", # two many keywords
874 "min(1, 2, key=1)", # keyfunc is not callable
875 ):
Tim Peters7f061872004-12-07 21:17:46 +0000876 try:
877 exec(stmt) in globals()
878 except TypeError:
879 pass
880 else:
881 self.fail(stmt)
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +0000882
883 self.assertEqual(min((1,), key=neg), 1) # one elem iterable
884 self.assertEqual(min((1,2), key=neg), 2) # two elem iterable
885 self.assertEqual(min(1, 2, key=neg), 2) # two elems
886
887 data = [random.randrange(200) for i in range(100)]
888 keys = dict((elem, random.randrange(50)) for elem in data)
889 f = keys.__getitem__
890 self.assertEqual(min(data, key=f),
891 sorted(data, key=f)[0])
892
Georg Brandl28e08732008-04-30 19:47:09 +0000893 def test_next(self):
894 it = iter(range(2))
895 self.assertEqual(next(it), 0)
896 self.assertEqual(next(it), 1)
897 self.assertRaises(StopIteration, next, it)
898 self.assertRaises(StopIteration, next, it)
899 self.assertEquals(next(it, 42), 42)
900
901 class Iter(object):
902 def __iter__(self):
903 return self
904 def next(self):
905 raise StopIteration
906
907 it = iter(Iter())
908 self.assertEquals(next(it, 42), 42)
909 self.assertRaises(StopIteration, next, it)
910
911 def gen():
912 yield 1
913 return
914
915 it = gen()
916 self.assertEquals(next(it), 1)
917 self.assertRaises(StopIteration, next, it)
918 self.assertEquals(next(it, 42), 42)
919
Walter Dörwald919497e2003-01-19 16:23:59 +0000920 def test_oct(self):
921 self.assertEqual(oct(100), '0144')
922 self.assertEqual(oct(100L), '0144L')
Guido van Rossum6c9e1302003-11-29 23:52:13 +0000923 self.assertEqual(oct(-100), '-0144')
Walter Dörwald919497e2003-01-19 16:23:59 +0000924 self.assertEqual(oct(-100L), '-0144L')
925 self.assertRaises(TypeError, oct, ())
Raymond Hettingere0e71142008-06-21 06:39:53 +0000926 self.assertEqual(oct(3.125), '031 * 2.0 ** -3')
927 self.assertEqual(oct(0.0), '0 * 2.0 ** 0')
928 for sv in float('nan'), float('inf'), float('-inf'):
929 self.assertEqual(oct(sv), repr(sv))
930 for i in range(100):
931 x = random.expovariate(.05)
932 self.assertEqual(eval(oct(x)), x)
933 self.assertEqual(eval(oct(-x)), -x)
934 self.assertEqual(oct(-x), ('-' + oct(x)))
Walter Dörwald919497e2003-01-19 16:23:59 +0000935
936 def write_testfile(self):
937 # NB the first 4 lines are also used to test input and raw_input, below
938 fp = open(TESTFN, 'w')
939 try:
940 fp.write('1+1\n')
941 fp.write('1+1\n')
942 fp.write('The quick brown fox jumps over the lazy dog')
943 fp.write('.\n')
944 fp.write('Dear John\n')
945 fp.write('XXX'*100)
946 fp.write('YYY'*100)
947 finally:
948 fp.close()
949
950 def test_open(self):
951 self.write_testfile()
952 fp = open(TESTFN, 'r')
953 try:
954 self.assertEqual(fp.readline(4), '1+1\n')
955 self.assertEqual(fp.readline(4), '1+1\n')
956 self.assertEqual(fp.readline(), 'The quick brown fox jumps over the lazy dog.\n')
957 self.assertEqual(fp.readline(4), 'Dear')
958 self.assertEqual(fp.readline(100), ' John\n')
959 self.assertEqual(fp.read(300), 'XXX'*100)
960 self.assertEqual(fp.read(1000), 'YYY'*100)
961 finally:
962 fp.close()
963 unlink(TESTFN)
964
965 def test_ord(self):
966 self.assertEqual(ord(' '), 32)
967 self.assertEqual(ord('A'), 65)
968 self.assertEqual(ord('a'), 97)
969 if have_unicode:
970 self.assertEqual(ord(unichr(sys.maxunicode)), sys.maxunicode)
971 self.assertRaises(TypeError, ord, 42)
Walter Dörwald4e41a4b2005-08-03 17:09:04 +0000972 if have_unicode:
973 self.assertRaises(TypeError, ord, unicode("12"))
Walter Dörwald919497e2003-01-19 16:23:59 +0000974
975 def test_pow(self):
976 self.assertEqual(pow(0,0), 1)
977 self.assertEqual(pow(0,1), 0)
978 self.assertEqual(pow(1,0), 1)
979 self.assertEqual(pow(1,1), 1)
980
981 self.assertEqual(pow(2,0), 1)
982 self.assertEqual(pow(2,10), 1024)
983 self.assertEqual(pow(2,20), 1024*1024)
984 self.assertEqual(pow(2,30), 1024*1024*1024)
985
986 self.assertEqual(pow(-2,0), 1)
987 self.assertEqual(pow(-2,1), -2)
988 self.assertEqual(pow(-2,2), 4)
989 self.assertEqual(pow(-2,3), -8)
990
991 self.assertEqual(pow(0L,0), 1)
992 self.assertEqual(pow(0L,1), 0)
993 self.assertEqual(pow(1L,0), 1)
994 self.assertEqual(pow(1L,1), 1)
995
996 self.assertEqual(pow(2L,0), 1)
997 self.assertEqual(pow(2L,10), 1024)
998 self.assertEqual(pow(2L,20), 1024*1024)
999 self.assertEqual(pow(2L,30), 1024*1024*1024)
1000
1001 self.assertEqual(pow(-2L,0), 1)
1002 self.assertEqual(pow(-2L,1), -2)
1003 self.assertEqual(pow(-2L,2), 4)
1004 self.assertEqual(pow(-2L,3), -8)
1005
1006 self.assertAlmostEqual(pow(0.,0), 1.)
1007 self.assertAlmostEqual(pow(0.,1), 0.)
1008 self.assertAlmostEqual(pow(1.,0), 1.)
1009 self.assertAlmostEqual(pow(1.,1), 1.)
1010
1011 self.assertAlmostEqual(pow(2.,0), 1.)
1012 self.assertAlmostEqual(pow(2.,10), 1024.)
1013 self.assertAlmostEqual(pow(2.,20), 1024.*1024.)
1014 self.assertAlmostEqual(pow(2.,30), 1024.*1024.*1024.)
1015
1016 self.assertAlmostEqual(pow(-2.,0), 1.)
1017 self.assertAlmostEqual(pow(-2.,1), -2.)
1018 self.assertAlmostEqual(pow(-2.,2), 4.)
1019 self.assertAlmostEqual(pow(-2.,3), -8.)
1020
1021 for x in 2, 2L, 2.0:
1022 for y in 10, 10L, 10.0:
1023 for z in 1000, 1000L, 1000.0:
1024 if isinstance(x, float) or \
1025 isinstance(y, float) or \
1026 isinstance(z, float):
1027 self.assertRaises(TypeError, pow, x, y, z)
1028 else:
1029 self.assertAlmostEqual(pow(x, y, z), 24.0)
1030
1031 self.assertRaises(TypeError, pow, -1, -2, 3)
1032 self.assertRaises(ValueError, pow, 1, 2, 0)
1033 self.assertRaises(TypeError, pow, -1L, -2L, 3L)
1034 self.assertRaises(ValueError, pow, 1L, 2L, 0L)
Jeffrey Yasskin9871d8f2008-01-05 08:47:13 +00001035 # Will return complex in 3.0:
1036 self.assertRaises(ValueError, pow, -342.43, 0.234)
Walter Dörwald919497e2003-01-19 16:23:59 +00001037
1038 self.assertRaises(TypeError, pow)
1039
1040 def test_range(self):
1041 self.assertEqual(range(3), [0, 1, 2])
1042 self.assertEqual(range(1, 5), [1, 2, 3, 4])
1043 self.assertEqual(range(0), [])
1044 self.assertEqual(range(-3), [])
1045 self.assertEqual(range(1, 10, 3), [1, 4, 7])
1046 self.assertEqual(range(5, -5, -3), [5, 2, -1, -4])
1047
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001048 # Now test range() with longs
1049 self.assertEqual(range(-2**100), [])
1050 self.assertEqual(range(0, -2**100), [])
1051 self.assertEqual(range(0, 2**100, -1), [])
1052 self.assertEqual(range(0, 2**100, -1), [])
1053
1054 a = long(10 * sys.maxint)
1055 b = long(100 * sys.maxint)
1056 c = long(50 * sys.maxint)
1057
1058 self.assertEqual(range(a, a+2), [a, a+1])
1059 self.assertEqual(range(a+2, a, -1L), [a+2, a+1])
1060 self.assertEqual(range(a+4, a, -2), [a+4, a+2])
1061
1062 seq = range(a, b, c)
1063 self.assert_(a in seq)
1064 self.assert_(b not in seq)
1065 self.assertEqual(len(seq), 2)
1066
1067 seq = range(b, a, -c)
1068 self.assert_(b in seq)
1069 self.assert_(a not in seq)
1070 self.assertEqual(len(seq), 2)
1071
1072 seq = range(-a, -b, -c)
1073 self.assert_(-a in seq)
1074 self.assert_(-b not in seq)
1075 self.assertEqual(len(seq), 2)
1076
Walter Dörwald919497e2003-01-19 16:23:59 +00001077 self.assertRaises(TypeError, range)
1078 self.assertRaises(TypeError, range, 1, 2, 3, 4)
1079 self.assertRaises(ValueError, range, 1, 2, 0)
Neal Norwitzfcf44352005-11-27 20:37:43 +00001080 self.assertRaises(ValueError, range, a, a + 1, long(0))
1081
1082 class badzero(int):
1083 def __cmp__(self, other):
1084 raise RuntimeError
1085 self.assertRaises(RuntimeError, range, a, a + 1, badzero(1))
Walter Dörwald919497e2003-01-19 16:23:59 +00001086
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001087 # Reject floats when it would require PyLongs to represent.
1088 # (smaller floats still accepted, but deprecated)
Tim Peters299b3df2003-04-15 14:40:03 +00001089 self.assertRaises(TypeError, range, 1e100, 1e101, 1e101)
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001090
Walter Dörwald357981e2003-04-15 18:59:28 +00001091 self.assertRaises(TypeError, range, 0, "spam")
1092 self.assertRaises(TypeError, range, 0, 42, "spam")
1093
1094 self.assertRaises(OverflowError, range, -sys.maxint, sys.maxint)
1095 self.assertRaises(OverflowError, range, 0, 2*sys.maxint)
1096
Walter Dörwald919497e2003-01-19 16:23:59 +00001097 def test_input_and_raw_input(self):
1098 self.write_testfile()
1099 fp = open(TESTFN, 'r')
1100 savestdin = sys.stdin
1101 savestdout = sys.stdout # Eats the echo
1102 try:
1103 sys.stdin = fp
1104 sys.stdout = BitBucket()
1105 self.assertEqual(input(), 2)
1106 self.assertEqual(input('testing\n'), 2)
1107 self.assertEqual(raw_input(), 'The quick brown fox jumps over the lazy dog.')
1108 self.assertEqual(raw_input('testing\n'), 'Dear John')
Tim Peters8e24a962006-08-09 00:52:26 +00001109
Georg Brandl7e3ba2a2006-08-06 08:23:54 +00001110 # SF 1535165: don't segfault on closed stdin
1111 # sys.stdout must be a regular file for triggering
1112 sys.stdout = savestdout
1113 sys.stdin.close()
Georg Brandld336e982006-08-06 09:17:16 +00001114 self.assertRaises(ValueError, input)
Georg Brandl7e3ba2a2006-08-06 08:23:54 +00001115
1116 sys.stdout = BitBucket()
Walter Dörwald919497e2003-01-19 16:23:59 +00001117 sys.stdin = cStringIO.StringIO("NULL\0")
1118 self.assertRaises(TypeError, input, 42, 42)
1119 sys.stdin = cStringIO.StringIO(" 'whitespace'")
1120 self.assertEqual(input(), 'whitespace')
1121 sys.stdin = cStringIO.StringIO()
1122 self.assertRaises(EOFError, input)
Hye-Shik Changff83c2b2004-02-02 13:39:01 +00001123
1124 # SF 876178: make sure input() respect future options.
1125 sys.stdin = cStringIO.StringIO('1/2')
1126 sys.stdout = cStringIO.StringIO()
1127 exec compile('print input()', 'test_builtin_tmp', 'exec')
1128 sys.stdin.seek(0, 0)
1129 exec compile('from __future__ import division;print input()',
1130 'test_builtin_tmp', 'exec')
1131 sys.stdin.seek(0, 0)
1132 exec compile('print input()', 'test_builtin_tmp', 'exec')
Tim Petersb82cb8d2006-03-28 07:39:22 +00001133 # The result we expect depends on whether new division semantics
1134 # are already in effect.
1135 if 1/2 == 0:
1136 # This test was compiled with old semantics.
1137 expected = ['0', '0.5', '0']
1138 else:
1139 # This test was compiled with new semantics (e.g., -Qnew
1140 # was given on the command line.
1141 expected = ['0.5', '0.5', '0.5']
1142 self.assertEqual(sys.stdout.getvalue().splitlines(), expected)
Hye-Shik Changff83c2b2004-02-02 13:39:01 +00001143
Walter Dörwald919497e2003-01-19 16:23:59 +00001144 del sys.stdout
1145 self.assertRaises(RuntimeError, input, 'prompt')
1146 del sys.stdin
1147 self.assertRaises(RuntimeError, input, 'prompt')
1148 finally:
1149 sys.stdin = savestdin
1150 sys.stdout = savestdout
1151 fp.close()
1152 unlink(TESTFN)
1153
1154 def test_reduce(self):
1155 self.assertEqual(reduce(lambda x, y: x+y, ['a', 'b', 'c'], ''), 'abc')
1156 self.assertEqual(
1157 reduce(lambda x, y: x+y, [['a', 'c'], [], ['d', 'w']], []),
1158 ['a','c','d','w']
1159 )
1160 self.assertEqual(reduce(lambda x, y: x*y, range(2,8), 1), 5040)
1161 self.assertEqual(
1162 reduce(lambda x, y: x*y, range(2,21), 1L),
1163 2432902008176640000L
1164 )
1165 self.assertEqual(reduce(lambda x, y: x+y, Squares(10)), 285)
1166 self.assertEqual(reduce(lambda x, y: x+y, Squares(10), 0), 285)
1167 self.assertEqual(reduce(lambda x, y: x+y, Squares(0), 0), 0)
1168 self.assertRaises(TypeError, reduce)
1169 self.assertRaises(TypeError, reduce, 42, 42)
1170 self.assertRaises(TypeError, reduce, 42, 42, 42)
1171 self.assertEqual(reduce(42, "1"), "1") # func is never called with one item
1172 self.assertEqual(reduce(42, "", "1"), "1") # func is never called with one item
1173 self.assertRaises(TypeError, reduce, 42, (42, 42))
1174
1175 class BadSeq:
1176 def __getitem__(self, index):
1177 raise ValueError
1178 self.assertRaises(ValueError, reduce, 42, BadSeq())
1179
1180 def test_reload(self):
1181 import marshal
1182 reload(marshal)
1183 import string
1184 reload(string)
1185 ## import sys
1186 ## self.assertRaises(ImportError, reload, sys)
1187
1188 def test_repr(self):
1189 self.assertEqual(repr(''), '\'\'')
1190 self.assertEqual(repr(0), '0')
1191 self.assertEqual(repr(0L), '0L')
1192 self.assertEqual(repr(()), '()')
1193 self.assertEqual(repr([]), '[]')
1194 self.assertEqual(repr({}), '{}')
1195 a = []
1196 a.append(a)
1197 self.assertEqual(repr(a), '[[...]]')
1198 a = {}
1199 a[0] = a
1200 self.assertEqual(repr(a), '{0: {...}}')
1201
1202 def test_round(self):
1203 self.assertEqual(round(0.0), 0.0)
Jeffrey Yasskin2f3c16b2008-01-03 02:21:52 +00001204 self.assertEqual(type(round(0.0)), float) # Will be int in 3.0.
Walter Dörwald919497e2003-01-19 16:23:59 +00001205 self.assertEqual(round(1.0), 1.0)
1206 self.assertEqual(round(10.0), 10.0)
1207 self.assertEqual(round(1000000000.0), 1000000000.0)
1208 self.assertEqual(round(1e20), 1e20)
1209
1210 self.assertEqual(round(-1.0), -1.0)
1211 self.assertEqual(round(-10.0), -10.0)
1212 self.assertEqual(round(-1000000000.0), -1000000000.0)
1213 self.assertEqual(round(-1e20), -1e20)
1214
1215 self.assertEqual(round(0.1), 0.0)
1216 self.assertEqual(round(1.1), 1.0)
1217 self.assertEqual(round(10.1), 10.0)
1218 self.assertEqual(round(1000000000.1), 1000000000.0)
1219
1220 self.assertEqual(round(-1.1), -1.0)
1221 self.assertEqual(round(-10.1), -10.0)
1222 self.assertEqual(round(-1000000000.1), -1000000000.0)
1223
1224 self.assertEqual(round(0.9), 1.0)
1225 self.assertEqual(round(9.9), 10.0)
1226 self.assertEqual(round(999999999.9), 1000000000.0)
1227
1228 self.assertEqual(round(-0.9), -1.0)
1229 self.assertEqual(round(-9.9), -10.0)
1230 self.assertEqual(round(-999999999.9), -1000000000.0)
1231
1232 self.assertEqual(round(-8.0, -1), -10.0)
Jeffrey Yasskin2f3c16b2008-01-03 02:21:52 +00001233 self.assertEqual(type(round(-8.0, -1)), float)
1234
1235 self.assertEqual(type(round(-8.0, 0)), float)
1236 self.assertEqual(type(round(-8.0, 1)), float)
1237
Jeffrey Yasskin9871d8f2008-01-05 08:47:13 +00001238 # Check half rounding behaviour.
Jeffrey Yasskin2f3c16b2008-01-03 02:21:52 +00001239 self.assertEqual(round(5.5), 6)
Jeffrey Yasskin9871d8f2008-01-05 08:47:13 +00001240 self.assertEqual(round(6.5), 7)
Jeffrey Yasskin2f3c16b2008-01-03 02:21:52 +00001241 self.assertEqual(round(-5.5), -6)
Jeffrey Yasskin9871d8f2008-01-05 08:47:13 +00001242 self.assertEqual(round(-6.5), -7)
Jeffrey Yasskin2f3c16b2008-01-03 02:21:52 +00001243
1244 # Check behavior on ints
1245 self.assertEqual(round(0), 0)
1246 self.assertEqual(round(8), 8)
1247 self.assertEqual(round(-8), -8)
1248 self.assertEqual(type(round(0)), float) # Will be int in 3.0.
1249 self.assertEqual(type(round(-8, -1)), float)
1250 self.assertEqual(type(round(-8, 0)), float)
1251 self.assertEqual(type(round(-8, 1)), float)
Walter Dörwald919497e2003-01-19 16:23:59 +00001252
Georg Brandlccadf842006-03-31 18:54:53 +00001253 # test new kwargs
1254 self.assertEqual(round(number=-8.0, ndigits=-1), -10.0)
1255
Walter Dörwald919497e2003-01-19 16:23:59 +00001256 self.assertRaises(TypeError, round)
1257
Jeffrey Yasskin2f3c16b2008-01-03 02:21:52 +00001258 # test generic rounding delegation for reals
1259 class TestRound(object):
Jeffrey Yasskin9871d8f2008-01-05 08:47:13 +00001260 def __float__(self):
1261 return 23.0
Jeffrey Yasskin2f3c16b2008-01-03 02:21:52 +00001262
1263 class TestNoRound(object):
1264 pass
1265
1266 self.assertEqual(round(TestRound()), 23)
1267
1268 self.assertRaises(TypeError, round, 1, 2, 3)
Jeffrey Yasskin9871d8f2008-01-05 08:47:13 +00001269 self.assertRaises(TypeError, round, TestNoRound())
Jeffrey Yasskin2f3c16b2008-01-03 02:21:52 +00001270
1271 t = TestNoRound()
Jeffrey Yasskin9871d8f2008-01-05 08:47:13 +00001272 t.__float__ = lambda *args: args
1273 self.assertRaises(TypeError, round, t)
1274 self.assertRaises(TypeError, round, t, 0)
Jeffrey Yasskin2f3c16b2008-01-03 02:21:52 +00001275
Walter Dörwald919497e2003-01-19 16:23:59 +00001276 def test_setattr(self):
Tim Petersf2715e02003-02-19 02:35:07 +00001277 setattr(sys, 'spam', 1)
1278 self.assertEqual(sys.spam, 1)
1279 self.assertRaises(TypeError, setattr, sys, 1, 'spam')
1280 self.assertRaises(TypeError, setattr)
Walter Dörwald919497e2003-01-19 16:23:59 +00001281
Alex Martellia70b1912003-04-22 08:12:33 +00001282 def test_sum(self):
1283 self.assertEqual(sum([]), 0)
1284 self.assertEqual(sum(range(2,8)), 27)
1285 self.assertEqual(sum(iter(range(2,8))), 27)
1286 self.assertEqual(sum(Squares(10)), 285)
1287 self.assertEqual(sum(iter(Squares(10))), 285)
1288 self.assertEqual(sum([[1], [2], [3]], []), [1, 2, 3])
1289
1290 self.assertRaises(TypeError, sum)
1291 self.assertRaises(TypeError, sum, 42)
1292 self.assertRaises(TypeError, sum, ['a', 'b', 'c'])
1293 self.assertRaises(TypeError, sum, ['a', 'b', 'c'], '')
1294 self.assertRaises(TypeError, sum, [[1], [2], [3]])
1295 self.assertRaises(TypeError, sum, [{2:3}])
1296 self.assertRaises(TypeError, sum, [{2:3}]*2, {2:3})
1297
1298 class BadSeq:
1299 def __getitem__(self, index):
1300 raise ValueError
1301 self.assertRaises(ValueError, sum, BadSeq())
1302
Walter Dörwald919497e2003-01-19 16:23:59 +00001303 def test_type(self):
1304 self.assertEqual(type(''), type('123'))
1305 self.assertNotEqual(type(''), type(()))
1306
1307 def test_unichr(self):
1308 if have_unicode:
1309 self.assertEqual(unichr(32), unicode(' '))
1310 self.assertEqual(unichr(65), unicode('A'))
1311 self.assertEqual(unichr(97), unicode('a'))
1312 self.assertEqual(
1313 unichr(sys.maxunicode),
1314 unicode('\\U%08x' % (sys.maxunicode), 'unicode-escape')
1315 )
1316 self.assertRaises(ValueError, unichr, sys.maxunicode+1)
1317 self.assertRaises(TypeError, unichr)
1318
Guido van Rossumfee7b932005-01-16 00:21:28 +00001319 # We don't want self in vars(), so these are static methods
1320
1321 @staticmethod
Walter Dörwald919497e2003-01-19 16:23:59 +00001322 def get_vars_f0():
1323 return vars()
Walter Dörwald919497e2003-01-19 16:23:59 +00001324
Guido van Rossumfee7b932005-01-16 00:21:28 +00001325 @staticmethod
Walter Dörwald919497e2003-01-19 16:23:59 +00001326 def get_vars_f2():
1327 BuiltinTest.get_vars_f0()
1328 a = 1
1329 b = 2
1330 return vars()
Walter Dörwald919497e2003-01-19 16:23:59 +00001331
1332 def test_vars(self):
Raymond Hettingera690a992003-11-16 16:17:49 +00001333 self.assertEqual(set(vars()), set(dir()))
Walter Dörwald919497e2003-01-19 16:23:59 +00001334 import sys
Raymond Hettingera690a992003-11-16 16:17:49 +00001335 self.assertEqual(set(vars(sys)), set(dir(sys)))
Walter Dörwald919497e2003-01-19 16:23:59 +00001336 self.assertEqual(self.get_vars_f0(), {})
1337 self.assertEqual(self.get_vars_f2(), {'a': 1, 'b': 2})
1338 self.assertRaises(TypeError, vars, 42, 42)
1339 self.assertRaises(TypeError, vars, 42)
1340
1341 def test_zip(self):
1342 a = (1, 2, 3)
1343 b = (4, 5, 6)
1344 t = [(1, 4), (2, 5), (3, 6)]
1345 self.assertEqual(zip(a, b), t)
1346 b = [4, 5, 6]
1347 self.assertEqual(zip(a, b), t)
1348 b = (4, 5, 6, 7)
1349 self.assertEqual(zip(a, b), t)
1350 class I:
1351 def __getitem__(self, i):
1352 if i < 0 or i > 2: raise IndexError
1353 return i + 4
1354 self.assertEqual(zip(a, I()), t)
Raymond Hettingereaef6152003-08-02 07:42:57 +00001355 self.assertEqual(zip(), [])
1356 self.assertEqual(zip(*[]), [])
Walter Dörwald919497e2003-01-19 16:23:59 +00001357 self.assertRaises(TypeError, zip, None)
1358 class G:
1359 pass
1360 self.assertRaises(TypeError, zip, a, G())
1361
1362 # Make sure zip doesn't try to allocate a billion elements for the
1363 # result list when one of its arguments doesn't say how long it is.
1364 # A MemoryError is the most likely failure mode.
1365 class SequenceWithoutALength:
1366 def __getitem__(self, i):
1367 if i == 5:
1368 raise IndexError
1369 else:
1370 return i
1371 self.assertEqual(
1372 zip(SequenceWithoutALength(), xrange(2**30)),
1373 list(enumerate(range(5)))
1374 )
1375
1376 class BadSeq:
1377 def __getitem__(self, i):
1378 if i == 5:
1379 raise ValueError
1380 else:
1381 return i
1382 self.assertRaises(ValueError, zip, BadSeq(), BadSeq())
1383
Eric Smitha9f7d622008-02-17 19:46:49 +00001384 def test_format(self):
1385 # Test the basic machinery of the format() builtin. Don't test
1386 # the specifics of the various formatters
1387 self.assertEqual(format(3, ''), '3')
1388
1389 # Returns some classes to use for various tests. There's
1390 # an old-style version, and a new-style version
1391 def classes_new():
1392 class A(object):
1393 def __init__(self, x):
1394 self.x = x
1395 def __format__(self, format_spec):
1396 return str(self.x) + format_spec
1397 class DerivedFromA(A):
1398 pass
1399
1400 class Simple(object): pass
1401 class DerivedFromSimple(Simple):
1402 def __init__(self, x):
1403 self.x = x
1404 def __format__(self, format_spec):
1405 return str(self.x) + format_spec
1406 class DerivedFromSimple2(DerivedFromSimple): pass
1407 return A, DerivedFromA, DerivedFromSimple, DerivedFromSimple2
1408
1409 # In 3.0, classes_classic has the same meaning as classes_new
1410 def classes_classic():
1411 class A:
1412 def __init__(self, x):
1413 self.x = x
1414 def __format__(self, format_spec):
1415 return str(self.x) + format_spec
1416 class DerivedFromA(A):
1417 pass
1418
1419 class Simple: pass
1420 class DerivedFromSimple(Simple):
1421 def __init__(self, x):
1422 self.x = x
1423 def __format__(self, format_spec):
1424 return str(self.x) + format_spec
1425 class DerivedFromSimple2(DerivedFromSimple): pass
1426 return A, DerivedFromA, DerivedFromSimple, DerivedFromSimple2
1427
1428 def class_test(A, DerivedFromA, DerivedFromSimple, DerivedFromSimple2):
1429 self.assertEqual(format(A(3), 'spec'), '3spec')
1430 self.assertEqual(format(DerivedFromA(4), 'spec'), '4spec')
1431 self.assertEqual(format(DerivedFromSimple(5), 'abc'), '5abc')
1432 self.assertEqual(format(DerivedFromSimple2(10), 'abcdef'),
1433 '10abcdef')
1434
1435 class_test(*classes_new())
1436 class_test(*classes_classic())
1437
1438 def empty_format_spec(value):
1439 # test that:
1440 # format(x, '') == str(x)
1441 # format(x) == str(x)
1442 self.assertEqual(format(value, ""), str(value))
1443 self.assertEqual(format(value), str(value))
1444
1445 # for builtin types, format(x, "") == str(x)
1446 empty_format_spec(17**13)
1447 empty_format_spec(1.0)
1448 empty_format_spec(3.1415e104)
1449 empty_format_spec(-3.1415e104)
1450 empty_format_spec(3.1415e-104)
1451 empty_format_spec(-3.1415e-104)
1452 empty_format_spec(object)
1453 empty_format_spec(None)
1454
1455 # TypeError because self.__format__ returns the wrong type
1456 class BadFormatResult:
1457 def __format__(self, format_spec):
1458 return 1.0
1459 self.assertRaises(TypeError, format, BadFormatResult(), "")
1460
1461 # TypeError because format_spec is not unicode or str
1462 self.assertRaises(TypeError, format, object(), 4)
1463 self.assertRaises(TypeError, format, object(), object())
1464
1465 # tests for object.__format__ really belong elsewhere, but
1466 # there's no good place to put them
1467 x = object().__format__('')
1468 self.assert_(x.startswith('<object object at'))
1469
1470 # first argument to object.__format__ must be string
1471 self.assertRaises(TypeError, object().__format__, 3)
1472 self.assertRaises(TypeError, object().__format__, object())
1473 self.assertRaises(TypeError, object().__format__, None)
1474
1475 # make sure we can take a subclass of str as a format spec
1476 class DerivedFromStr(str): pass
1477 self.assertEqual(format(0, DerivedFromStr('10')), ' 0')
1478
Eric Smithfb0742f2008-02-22 17:43:17 +00001479 def test_bin(self):
1480 self.assertEqual(bin(0), '0b0')
1481 self.assertEqual(bin(1), '0b1')
1482 self.assertEqual(bin(-1), '-0b1')
1483 self.assertEqual(bin(2**65), '0b1' + '0' * 65)
1484 self.assertEqual(bin(2**65-1), '0b' + '1' * 65)
1485 self.assertEqual(bin(-(2**65)), '-0b1' + '0' * 65)
1486 self.assertEqual(bin(-(2**65-1)), '-0b' + '1' * 65)
Raymond Hettingere0e71142008-06-21 06:39:53 +00001487 self.assertEqual(bin(3.125), '0b11001 * 2.0 ** -3')
1488 self.assertEqual(bin(0.0), '0b0 * 2.0 ** 0')
1489 for sv in float('nan'), float('inf'), float('-inf'):
1490 self.assertEqual(bin(sv), repr(sv))
1491 for i in range(100):
1492 x = random.expovariate(.05)
1493 self.assertEqual(eval(bin(x)), x)
1494 self.assertEqual(eval(bin(-x)), -x)
1495 self.assertEqual(bin(-x), ('-' + bin(x)))
Eric Smithfb0742f2008-02-22 17:43:17 +00001496
Eric Smithce584d42008-02-21 20:17:08 +00001497class TestSorted(unittest.TestCase):
1498
1499 def test_basic(self):
1500 data = range(100)
1501 copy = data[:]
1502 random.shuffle(copy)
1503 self.assertEqual(data, sorted(copy))
1504 self.assertNotEqual(data, copy)
1505
1506 data.reverse()
1507 random.shuffle(copy)
1508 self.assertEqual(data, sorted(copy, cmp=lambda x, y: cmp(y,x)))
1509 self.assertNotEqual(data, copy)
1510 random.shuffle(copy)
1511 self.assertEqual(data, sorted(copy, key=lambda x: -x))
1512 self.assertNotEqual(data, copy)
1513 random.shuffle(copy)
1514 self.assertEqual(data, sorted(copy, reverse=1))
1515 self.assertNotEqual(data, copy)
1516
1517 def test_inputtypes(self):
1518 s = 'abracadabra'
1519 types = [list, tuple]
1520 if have_unicode:
1521 types.insert(0, unicode)
1522 for T in types:
1523 self.assertEqual(sorted(s), sorted(T(s)))
1524
1525 s = ''.join(dict.fromkeys(s).keys()) # unique letters only
1526 types = [set, frozenset, list, tuple, dict.fromkeys]
1527 if have_unicode:
1528 types.insert(0, unicode)
1529 for T in types:
1530 self.assertEqual(sorted(s), sorted(T(s)))
1531
1532 def test_baddecorator(self):
1533 data = 'The quick Brown fox Jumped over The lazy Dog'.split()
1534 self.assertRaises(TypeError, sorted, data, None, lambda x,y: 0)
1535
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001536def test_main(verbose=None):
1537 test_classes = (BuiltinTest, TestSorted)
1538
1539 run_unittest(*test_classes)
1540
1541 # verify reference counting
1542 if verbose and hasattr(sys, "gettotalrefcount"):
1543 import gc
1544 counts = [None] * 5
1545 for i in xrange(len(counts)):
1546 run_unittest(*test_classes)
1547 gc.collect()
1548 counts[i] = sys.gettotalrefcount()
1549 print counts
1550
Walter Dörwald919497e2003-01-19 16:23:59 +00001551
1552if __name__ == "__main__":
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001553 test_main(verbose=True)