blob: 97619cf9ef4119bae4aa6169ac9df4000837a10e [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
Mark Dickinsonad731b92009-11-09 17:12:30 +00003import platform
Georg Brandl1b37e872010-03-14 10:45:50 +00004import unittest
Benjamin Peterson076e0312010-08-23 21:58:59 +00005import sys
6import warnings
7import collections
8import io
Georg Brandl8334fd92010-12-04 10:26:46 +00009import ast
Benjamin Peterson076e0312010-08-23 21:58:59 +000010import types
11import builtins
12import random
Eli Bendersky67ebabd2011-02-25 10:14:17 +000013from test.support import TESTFN, unlink, run_unittest, check_warnings
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +000014from operator import neg
Guido van Rossum3bead091992-01-27 17:00:37 +000015
Guido van Rossum3bead091992-01-27 17:00:37 +000016
Walter Dörwald919497e2003-01-19 16:23:59 +000017class Squares:
Guido van Rossum3bead091992-01-27 17:00:37 +000018
Walter Dörwald919497e2003-01-19 16:23:59 +000019 def __init__(self, max):
20 self.max = max
21 self.sofar = []
22
23 def __len__(self): return len(self.sofar)
24
25 def __getitem__(self, i):
26 if not 0 <= i < self.max: raise IndexError
27 n = len(self.sofar)
28 while n <= i:
29 self.sofar.append(n*n)
30 n += 1
31 return self.sofar[i]
32
33class StrSquares:
34
35 def __init__(self, max):
36 self.max = max
37 self.sofar = []
38
39 def __len__(self):
40 return len(self.sofar)
41
42 def __getitem__(self, i):
43 if not 0 <= i < self.max:
44 raise IndexError
45 n = len(self.sofar)
46 while n <= i:
47 self.sofar.append(str(n*n))
48 n += 1
49 return self.sofar[i]
50
51class BitBucket:
52 def write(self, line):
53 pass
54
Facundo Batista2336bdd2008-01-19 19:12:01 +000055test_conv_no_sign = [
Walter Dörwald919497e2003-01-19 16:23:59 +000056 ('0', 0),
57 ('1', 1),
58 ('9', 9),
59 ('10', 10),
60 ('99', 99),
61 ('100', 100),
62 ('314', 314),
63 (' 314', 314),
64 ('314 ', 314),
65 (' \t\t 314 \t\t ', 314),
Christian Heimesa37d4c62007-12-04 23:02:19 +000066 (repr(sys.maxsize), sys.maxsize),
Walter Dörwald919497e2003-01-19 16:23:59 +000067 (' 1x', ValueError),
68 (' 1 ', 1),
69 (' 1\02 ', ValueError),
70 ('', ValueError),
71 (' ', ValueError),
Walter Dörwald1f5947b2007-05-22 16:52:54 +000072 (' \t\t ', ValueError),
Guido van Rossumef87d6e2007-05-02 19:09:54 +000073 (str(b'\u0663\u0661\u0664 ','raw-unicode-escape'), 314),
Guido van Rossum84fc66d2007-05-03 17:18:26 +000074 (chr(0x200), ValueError),
Walter Dörwald919497e2003-01-19 16:23:59 +000075]
76
Facundo Batista2336bdd2008-01-19 19:12:01 +000077test_conv_sign = [
78 ('0', 0),
79 ('1', 1),
80 ('9', 9),
81 ('10', 10),
82 ('99', 99),
83 ('100', 100),
84 ('314', 314),
85 (' 314', ValueError),
86 ('314 ', 314),
87 (' \t\t 314 \t\t ', ValueError),
88 (repr(sys.maxsize), sys.maxsize),
89 (' 1x', ValueError),
90 (' 1 ', ValueError),
91 (' 1\02 ', ValueError),
92 ('', ValueError),
93 (' ', ValueError),
94 (' \t\t ', ValueError),
95 (str(b'\u0663\u0661\u0664 ','raw-unicode-escape'), 314),
96 (chr(0x200), ValueError),
97]
98
Raymond Hettinger96229b12005-03-11 06:49:40 +000099class TestFailingBool:
Jack Diederich4dafcc42006-11-28 19:15:13 +0000100 def __bool__(self):
Raymond Hettinger96229b12005-03-11 06:49:40 +0000101 raise RuntimeError
102
103class TestFailingIter:
104 def __iter__(self):
105 raise RuntimeError
106
Walter Dörwald919497e2003-01-19 16:23:59 +0000107class BuiltinTest(unittest.TestCase):
108
109 def test_import(self):
110 __import__('sys')
111 __import__('time')
112 __import__('string')
Guido van Rossumd8faa362007-04-27 19:54:29 +0000113 __import__(name='sys')
114 __import__(name='time', level=0)
Walter Dörwald919497e2003-01-19 16:23:59 +0000115 self.assertRaises(ImportError, __import__, 'spamspam')
116 self.assertRaises(TypeError, __import__, 1, 2, 3, 4)
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000117 self.assertRaises(ValueError, __import__, '')
Guido van Rossumd8faa362007-04-27 19:54:29 +0000118 self.assertRaises(TypeError, __import__, 'sys', name='sys')
Walter Dörwald919497e2003-01-19 16:23:59 +0000119
120 def test_abs(self):
121 # int
122 self.assertEqual(abs(0), 0)
123 self.assertEqual(abs(1234), 1234)
124 self.assertEqual(abs(-1234), 1234)
Christian Heimesa37d4c62007-12-04 23:02:19 +0000125 self.assertTrue(abs(-sys.maxsize-1) > 0)
Walter Dörwald919497e2003-01-19 16:23:59 +0000126 # float
127 self.assertEqual(abs(0.0), 0.0)
128 self.assertEqual(abs(3.14), 3.14)
129 self.assertEqual(abs(-3.14), 3.14)
Walter Dörwald919497e2003-01-19 16:23:59 +0000130 # str
131 self.assertRaises(TypeError, abs, 'a')
Mark Dickinsonfb3dc942010-05-25 19:06:24 +0000132 # bool
133 self.assertEqual(abs(True), 1)
134 self.assertEqual(abs(False), 0)
135 # other
136 self.assertRaises(TypeError, abs)
137 self.assertRaises(TypeError, abs, None)
138 class AbsClass(object):
139 def __abs__(self):
140 return -5
141 self.assertEqual(abs(AbsClass()), -5)
Walter Dörwald919497e2003-01-19 16:23:59 +0000142
Raymond Hettinger96229b12005-03-11 06:49:40 +0000143 def test_all(self):
144 self.assertEqual(all([2, 4, 6]), True)
145 self.assertEqual(all([2, None, 6]), False)
146 self.assertRaises(RuntimeError, all, [2, TestFailingBool(), 6])
147 self.assertRaises(RuntimeError, all, TestFailingIter())
148 self.assertRaises(TypeError, all, 10) # Non-iterable
149 self.assertRaises(TypeError, all) # No args
150 self.assertRaises(TypeError, all, [2, 4, 6], []) # Too many args
151 self.assertEqual(all([]), True) # Empty iterator
152 S = [50, 60]
153 self.assertEqual(all(x > 42 for x in S), True)
154 S = [50, 40, 60]
155 self.assertEqual(all(x > 42 for x in S), False)
156
157 def test_any(self):
158 self.assertEqual(any([None, None, None]), False)
159 self.assertEqual(any([None, 4, None]), True)
160 self.assertRaises(RuntimeError, any, [None, TestFailingBool(), 6])
161 self.assertRaises(RuntimeError, all, TestFailingIter())
162 self.assertRaises(TypeError, any, 10) # Non-iterable
163 self.assertRaises(TypeError, any) # No args
164 self.assertRaises(TypeError, any, [2, 4, 6], []) # Too many args
165 self.assertEqual(any([]), False) # Empty iterator
166 S = [40, 60, 30]
167 self.assertEqual(any(x > 42 for x in S), True)
168 S = [10, 20, 30]
169 self.assertEqual(any(x > 42 for x in S), False)
170
Georg Brandl559e5d72008-06-11 18:37:52 +0000171 def test_ascii(self):
172 self.assertEqual(ascii(''), '\'\'')
173 self.assertEqual(ascii(0), '0')
Georg Brandl559e5d72008-06-11 18:37:52 +0000174 self.assertEqual(ascii(()), '()')
175 self.assertEqual(ascii([]), '[]')
176 self.assertEqual(ascii({}), '{}')
177 a = []
178 a.append(a)
179 self.assertEqual(ascii(a), '[[...]]')
180 a = {}
181 a[0] = a
182 self.assertEqual(ascii(a), '{0: {...}}')
Antoine Pitroue4a18922010-09-09 20:30:23 +0000183 # Advanced checks for unicode strings
184 def _check_uni(s):
185 self.assertEqual(ascii(s), repr(s))
186 _check_uni("'")
187 _check_uni('"')
188 _check_uni('"\'')
189 _check_uni('\0')
190 _check_uni('\r\n\t .')
191 # Unprintable non-ASCII characters
192 _check_uni('\x85')
193 _check_uni('\u1fff')
194 _check_uni('\U00012fff')
195 # Lone surrogates
196 _check_uni('\ud800')
197 _check_uni('\udfff')
198 # Issue #9804: surrogates should be joined even for printable
199 # wide characters (UCS-2 builds).
200 self.assertEqual(ascii('\U0001d121'), "'\\U0001d121'")
201 # All together
202 s = "'\0\"\n\r\t abcd\x85é\U00012fff\uD800\U0001D121xxx."
203 self.assertEqual(ascii(s),
204 r"""'\'\x00"\n\r\t abcd\x85\xe9\U00012fff\ud800\U0001d121xxx.'""")
Georg Brandl559e5d72008-06-11 18:37:52 +0000205
Thomas Wouters89f507f2006-12-13 04:49:30 +0000206 def test_neg(self):
Christian Heimesa37d4c62007-12-04 23:02:19 +0000207 x = -sys.maxsize-1
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000208 self.assertTrue(isinstance(x, int))
Christian Heimesa37d4c62007-12-04 23:02:19 +0000209 self.assertEqual(-x, sys.maxsize+1)
Thomas Wouters89f507f2006-12-13 04:49:30 +0000210
Walter Dörwald919497e2003-01-19 16:23:59 +0000211 def test_callable(self):
Antoine Pitroue71362d2010-11-27 22:00:11 +0000212 self.assertTrue(callable(len))
213 self.assertFalse(callable("a"))
214 self.assertTrue(callable(callable))
215 self.assertTrue(callable(lambda x, y: x + y))
216 self.assertFalse(callable(__builtins__))
Walter Dörwald919497e2003-01-19 16:23:59 +0000217 def f(): pass
Antoine Pitroue71362d2010-11-27 22:00:11 +0000218 self.assertTrue(callable(f))
219
220 class C1:
Walter Dörwald919497e2003-01-19 16:23:59 +0000221 def meth(self): pass
Antoine Pitroue71362d2010-11-27 22:00:11 +0000222 self.assertTrue(callable(C1))
223 c = C1()
224 self.assertTrue(callable(c.meth))
225 self.assertFalse(callable(c))
226
227 # __call__ is looked up on the class, not the instance
228 c.__call__ = None
229 self.assertFalse(callable(c))
230 c.__call__ = lambda self: 0
231 self.assertFalse(callable(c))
232 del c.__call__
233 self.assertFalse(callable(c))
234
235 class C2(object):
Walter Dörwald919497e2003-01-19 16:23:59 +0000236 def __call__(self): pass
Antoine Pitroue71362d2010-11-27 22:00:11 +0000237 c2 = C2()
238 self.assertTrue(callable(c2))
239 c2.__call__ = None
240 self.assertTrue(callable(c2))
241 class C3(C2): pass
242 c3 = C3()
243 self.assertTrue(callable(c3))
Walter Dörwald919497e2003-01-19 16:23:59 +0000244
245 def test_chr(self):
246 self.assertEqual(chr(32), ' ')
247 self.assertEqual(chr(65), 'A')
248 self.assertEqual(chr(97), 'a')
249 self.assertEqual(chr(0xff), '\xff')
Guido van Rossum572dbf82007-04-27 23:53:51 +0000250 self.assertRaises(ValueError, chr, 1<<24)
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000251 self.assertEqual(chr(sys.maxunicode),
252 str(('\\U%08x' % (sys.maxunicode)).encode("ascii"),
253 'unicode-escape'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000254 self.assertRaises(TypeError, chr)
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000255 self.assertEqual(chr(0x0000FFFF), "\U0000FFFF")
256 self.assertEqual(chr(0x00010000), "\U00010000")
257 self.assertEqual(chr(0x00010001), "\U00010001")
258 self.assertEqual(chr(0x000FFFFE), "\U000FFFFE")
259 self.assertEqual(chr(0x000FFFFF), "\U000FFFFF")
260 self.assertEqual(chr(0x00100000), "\U00100000")
261 self.assertEqual(chr(0x00100001), "\U00100001")
262 self.assertEqual(chr(0x0010FFFE), "\U0010FFFE")
263 self.assertEqual(chr(0x0010FFFF), "\U0010FFFF")
264 self.assertRaises(ValueError, chr, -1)
265 self.assertRaises(ValueError, chr, 0x00110000)
Amaury Forgeot d'Arc7888d082008-08-01 01:06:32 +0000266 self.assertRaises((OverflowError, ValueError), chr, 2**32)
Walter Dörwald919497e2003-01-19 16:23:59 +0000267
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000268 def test_cmp(self):
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000269 self.assertTrue(not hasattr(builtins, "cmp"))
Walter Dörwald919497e2003-01-19 16:23:59 +0000270
Walter Dörwald919497e2003-01-19 16:23:59 +0000271 def test_compile(self):
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000272 compile('print(1)\n', '', 'exec')
Amaury Forgeot d'Arcaf593462007-11-22 20:53:01 +0000273 bom = b'\xef\xbb\xbf'
274 compile(bom + b'print(1)\n', '', 'exec')
Guido van Rossumd8faa362007-04-27 19:54:29 +0000275 compile(source='pass', filename='?', mode='exec')
276 compile(dont_inherit=0, filename='tmp', source='0', mode='eval')
277 compile('pass', '?', dont_inherit=1, mode='exec')
Benjamin Peterson60320cb2008-09-26 21:49:22 +0000278 compile(memoryview(b"text"), "name", "exec")
Walter Dörwald919497e2003-01-19 16:23:59 +0000279 self.assertRaises(TypeError, compile)
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000280 self.assertRaises(ValueError, compile, 'print(42)\n', '<string>', 'badmode')
281 self.assertRaises(ValueError, compile, 'print(42)\n', '<string>', 'single', 0xff)
Neal Norwitzfcf44352005-11-27 20:37:43 +0000282 self.assertRaises(TypeError, compile, chr(0), 'f', 'exec')
Guido van Rossumd8faa362007-04-27 19:54:29 +0000283 self.assertRaises(TypeError, compile, 'pass', '?', 'exec',
284 mode='eval', source='0', filename='tmp')
Walter Dörwald1f5947b2007-05-22 16:52:54 +0000285 compile('print("\xe5")\n', '', 'exec')
286 self.assertRaises(TypeError, compile, chr(0), 'f', 'exec')
287 self.assertRaises(ValueError, compile, str('a = 1'), 'f', 'bad')
Guido van Rossumd8faa362007-04-27 19:54:29 +0000288
Georg Brandl8334fd92010-12-04 10:26:46 +0000289 # test the optimize argument
290
291 codestr = '''def f():
292 """doc"""
293 try:
294 assert False
295 except AssertionError:
296 return (True, f.__doc__)
297 else:
298 return (False, f.__doc__)
299 '''
300 def f(): """doc"""
301 values = [(-1, __debug__, f.__doc__),
302 (0, True, 'doc'),
303 (1, False, 'doc'),
304 (2, False, None)]
305 for optval, debugval, docstring in values:
306 # test both direct compilation and compilation via AST
307 codeobjs = []
308 codeobjs.append(compile(codestr, "<test>", "exec", optimize=optval))
309 tree = ast.parse(codestr)
310 codeobjs.append(compile(tree, "<test>", "exec", optimize=optval))
311 for code in codeobjs:
312 ns = {}
313 exec(code, ns)
314 rv = ns['f']()
315 self.assertEqual(rv, (debugval, docstring))
316
Walter Dörwald919497e2003-01-19 16:23:59 +0000317 def test_delattr(self):
Walter Dörwald919497e2003-01-19 16:23:59 +0000318 sys.spam = 1
319 delattr(sys, 'spam')
320 self.assertRaises(TypeError, delattr)
321
322 def test_dir(self):
Georg Brandle32b4222007-03-10 22:13:27 +0000323 # dir(wrong number of arguments)
Walter Dörwald919497e2003-01-19 16:23:59 +0000324 self.assertRaises(TypeError, dir, 42, 42)
325
Georg Brandle32b4222007-03-10 22:13:27 +0000326 # dir() - local scope
327 local_var = 1
Benjamin Peterson577473f2010-01-19 00:09:57 +0000328 self.assertIn('local_var', dir())
Georg Brandle32b4222007-03-10 22:13:27 +0000329
330 # dir(module)
Benjamin Peterson577473f2010-01-19 00:09:57 +0000331 self.assertIn('exit', dir(sys))
Georg Brandle32b4222007-03-10 22:13:27 +0000332
333 # dir(module_with_invalid__dict__)
Georg Brandle32b4222007-03-10 22:13:27 +0000334 class Foo(types.ModuleType):
335 __dict__ = 8
336 f = Foo("foo")
337 self.assertRaises(TypeError, dir, f)
338
339 # dir(type)
Benjamin Peterson577473f2010-01-19 00:09:57 +0000340 self.assertIn("strip", dir(str))
341 self.assertNotIn("__mro__", dir(str))
Georg Brandle32b4222007-03-10 22:13:27 +0000342
343 # dir(obj)
344 class Foo(object):
345 def __init__(self):
346 self.x = 7
347 self.y = 8
348 self.z = 9
349 f = Foo()
Benjamin Peterson577473f2010-01-19 00:09:57 +0000350 self.assertIn("y", dir(f))
Georg Brandle32b4222007-03-10 22:13:27 +0000351
352 # dir(obj_no__dict__)
353 class Foo(object):
354 __slots__ = []
355 f = Foo()
Benjamin Peterson577473f2010-01-19 00:09:57 +0000356 self.assertIn("__repr__", dir(f))
Georg Brandle32b4222007-03-10 22:13:27 +0000357
358 # dir(obj_no__class__with__dict__)
359 # (an ugly trick to cause getattr(f, "__class__") to fail)
360 class Foo(object):
361 __slots__ = ["__class__", "__dict__"]
362 def __init__(self):
363 self.bar = "wow"
364 f = Foo()
Benjamin Peterson577473f2010-01-19 00:09:57 +0000365 self.assertNotIn("__repr__", dir(f))
366 self.assertIn("bar", dir(f))
Georg Brandle32b4222007-03-10 22:13:27 +0000367
368 # dir(obj_using __dir__)
369 class Foo(object):
370 def __dir__(self):
371 return ["kan", "ga", "roo"]
372 f = Foo()
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000373 self.assertTrue(dir(f) == ["ga", "kan", "roo"])
Georg Brandle32b4222007-03-10 22:13:27 +0000374
375 # dir(obj__dir__not_list)
376 class Foo(object):
377 def __dir__(self):
378 return 7
379 f = Foo()
380 self.assertRaises(TypeError, dir, f)
381
Collin Winter3eed7652007-08-14 17:53:54 +0000382 # dir(traceback)
383 try:
384 raise IndexError
385 except:
386 self.assertEqual(len(dir(sys.exc_info()[2])), 4)
387
Benjamin Petersondac9ace2011-05-25 09:33:37 -0500388 # test that object has a __dir__()
389 self.assertEqual(sorted([].__dir__()), dir([]))
Collin Winter3eed7652007-08-14 17:53:54 +0000390
Walter Dörwald919497e2003-01-19 16:23:59 +0000391 def test_divmod(self):
392 self.assertEqual(divmod(12, 7), (1, 5))
393 self.assertEqual(divmod(-12, 7), (-2, 2))
394 self.assertEqual(divmod(12, -7), (-2, -2))
395 self.assertEqual(divmod(-12, -7), (1, -5))
396
Mark Dickinson5c2db372009-12-05 20:28:34 +0000397 self.assertEqual(divmod(-sys.maxsize-1, -1), (sys.maxsize+1, 0))
Raymond Hettinger5ea7e312004-09-30 07:47:20 +0000398
Eli Bendersky67ebabd2011-02-25 10:14:17 +0000399 for num, denom, exp_result in [ (3.25, 1.0, (3.0, 0.25)),
400 (-3.25, 1.0, (-4.0, 0.75)),
401 (3.25, -1.0, (-4.0, -0.75)),
402 (-3.25, -1.0, (3.0, -0.25))]:
403 result = divmod(num, denom)
404 self.assertAlmostEqual(result[0], exp_result[0])
405 self.assertAlmostEqual(result[1], exp_result[1])
Walter Dörwald919497e2003-01-19 16:23:59 +0000406
407 self.assertRaises(TypeError, divmod)
408
409 def test_eval(self):
410 self.assertEqual(eval('1+1'), 2)
411 self.assertEqual(eval(' 1+1\n'), 2)
412 globals = {'a': 1, 'b': 2}
413 locals = {'b': 200, 'c': 300}
414 self.assertEqual(eval('a', globals) , 1)
415 self.assertEqual(eval('a', globals, locals), 1)
416 self.assertEqual(eval('b', globals, locals), 200)
417 self.assertEqual(eval('c', globals, locals), 300)
Walter Dörwald919497e2003-01-19 16:23:59 +0000418 globals = {'a': 1, 'b': 2}
419 locals = {'b': 200, 'c': 300}
Amaury Forgeot d'Arcaf593462007-11-22 20:53:01 +0000420 bom = b'\xef\xbb\xbf'
421 self.assertEqual(eval(bom + b'a', globals, locals), 1)
Walter Dörwald1f5947b2007-05-22 16:52:54 +0000422 self.assertEqual(eval('"\xe5"', globals), "\xe5")
Walter Dörwald919497e2003-01-19 16:23:59 +0000423 self.assertRaises(TypeError, eval)
424 self.assertRaises(TypeError, eval, ())
Amaury Forgeot d'Arcaf593462007-11-22 20:53:01 +0000425 self.assertRaises(SyntaxError, eval, bom[:2] + b'a')
Walter Dörwald919497e2003-01-19 16:23:59 +0000426
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000427 def test_general_eval(self):
428 # Tests that general mappings can be used for the locals argument
429
430 class M:
431 "Test mapping interface versus possible calls from eval()."
432 def __getitem__(self, key):
433 if key == 'a':
434 return 12
435 raise KeyError
Guido van Rossumcd70eee2007-02-11 18:53:00 +0000436 def keys(self):
437 return list('xyz')
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000438
439 m = M()
440 g = globals()
441 self.assertEqual(eval('a', g, m), 12)
442 self.assertRaises(NameError, eval, 'b', g, m)
443 self.assertEqual(eval('dir()', g, m), list('xyz'))
444 self.assertEqual(eval('globals()', g, m), g)
445 self.assertEqual(eval('locals()', g, m), m)
Raymond Hettinger513ffe82004-07-06 13:44:41 +0000446 self.assertRaises(TypeError, eval, 'a', m)
Raymond Hettinger66bd2332004-08-02 08:30:07 +0000447 class A:
448 "Non-mapping"
449 pass
450 m = A()
451 self.assertRaises(TypeError, eval, 'a', g, m)
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000452
453 # Verify that dict subclasses work as well
454 class D(dict):
455 def __getitem__(self, key):
456 if key == 'a':
457 return 12
458 return dict.__getitem__(self, key)
Guido van Rossumcd70eee2007-02-11 18:53:00 +0000459 def keys(self):
460 return list('xyz')
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000461
462 d = D()
463 self.assertEqual(eval('a', g, d), 12)
464 self.assertRaises(NameError, eval, 'b', g, d)
465 self.assertEqual(eval('dir()', g, d), list('xyz'))
466 self.assertEqual(eval('globals()', g, d), g)
467 self.assertEqual(eval('locals()', g, d), d)
468
469 # Verify locals stores (used by list comps)
470 eval('[locals() for i in (2,3)]', g, d)
Raymond Hettingerf80680d2008-02-06 00:07:11 +0000471 eval('[locals() for i in (2,3)]', g, collections.UserDict())
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000472
473 class SpreadSheet:
474 "Sample application showing nested, calculated lookups."
475 _cells = {}
476 def __setitem__(self, key, formula):
477 self._cells[key] = formula
Thomas Wouters73e5a5b2006-06-08 15:35:45 +0000478 def __getitem__(self, key):
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000479 return eval(self._cells[key], globals(), self)
480
481 ss = SpreadSheet()
482 ss['a1'] = '5'
483 ss['a2'] = 'a1*6'
484 ss['a3'] = 'a2*7'
485 self.assertEqual(ss['a3'], 210)
486
Raymond Hettinger2a7dede2004-08-07 04:55:30 +0000487 # Verify that dir() catches a non-list returned by eval
488 # SF bug #1004669
489 class C:
490 def __getitem__(self, item):
491 raise KeyError(item)
Guido van Rossumcd70eee2007-02-11 18:53:00 +0000492 def keys(self):
493 return 1 # used to be 'a' but that's no longer an error
Raymond Hettinger2a7dede2004-08-07 04:55:30 +0000494 self.assertRaises(TypeError, eval, 'dir()', globals(), C())
495
Georg Brandl7cae87c2006-09-06 06:51:57 +0000496 def test_exec(self):
497 g = {}
498 exec('z = 1', g)
499 if '__builtins__' in g:
500 del g['__builtins__']
501 self.assertEqual(g, {'z': 1})
502
Guido van Rossumef87d6e2007-05-02 19:09:54 +0000503 exec('z = 1+1', g)
Georg Brandl7cae87c2006-09-06 06:51:57 +0000504 if '__builtins__' in g:
505 del g['__builtins__']
506 self.assertEqual(g, {'z': 2})
507 g = {}
508 l = {}
509
Brett Cannon77628992010-03-20 20:59:33 +0000510 with check_warnings():
511 warnings.filterwarnings("ignore", "global statement",
512 module="<string>")
513 exec('global a; a = 1; b = 2', g, l)
Georg Brandl7cae87c2006-09-06 06:51:57 +0000514 if '__builtins__' in g:
515 del g['__builtins__']
516 if '__builtins__' in l:
517 del l['__builtins__']
518 self.assertEqual((g, l), ({'a': 1}, {'b': 2}))
519
Amaury Forgeot d'Arc9ed77352008-04-04 23:25:27 +0000520 def test_exec_redirected(self):
521 savestdout = sys.stdout
522 sys.stdout = None # Whatever that cannot flush()
523 try:
524 # Used to raise SystemError('error return without exception set')
525 exec('a')
526 except NameError:
527 pass
528 finally:
529 sys.stdout = savestdout
530
Walter Dörwald919497e2003-01-19 16:23:59 +0000531 def test_filter(self):
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000532 self.assertEqual(list(filter(lambda c: 'a' <= c <= 'z', 'Hello World')), list('elloorld'))
533 self.assertEqual(list(filter(None, [1, 'hello', [], [3], '', None, 9, 0])), [1, 'hello', [3], 9])
534 self.assertEqual(list(filter(lambda x: x > 0, [1, -3, 9, 0, 2])), [1, 9, 2])
535 self.assertEqual(list(filter(None, Squares(10))), [1, 4, 9, 16, 25, 36, 49, 64, 81])
536 self.assertEqual(list(filter(lambda x: x%2, Squares(10))), [1, 9, 25, 49, 81])
Walter Dörwald919497e2003-01-19 16:23:59 +0000537 def identity(item):
538 return 1
539 filter(identity, Squares(5))
540 self.assertRaises(TypeError, filter)
541 class BadSeq(object):
Tim Petersf2715e02003-02-19 02:35:07 +0000542 def __getitem__(self, index):
543 if index<4:
544 return 42
545 raise ValueError
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000546 self.assertRaises(ValueError, list, filter(lambda x: x, BadSeq()))
Walter Dörwald919497e2003-01-19 16:23:59 +0000547 def badfunc():
548 pass
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000549 self.assertRaises(TypeError, list, filter(badfunc, range(5)))
Walter Dörwald919497e2003-01-19 16:23:59 +0000550
Walter Dörwaldbf517072003-01-27 15:57:14 +0000551 # test bltinmodule.c::filtertuple()
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000552 self.assertEqual(list(filter(None, (1, 2))), [1, 2])
553 self.assertEqual(list(filter(lambda x: x>=3, (1, 2, 3, 4))), [3, 4])
554 self.assertRaises(TypeError, list, filter(42, (1, 2)))
Walter Dörwaldc3da83f2003-02-04 20:24:45 +0000555
Walter Dörwald919497e2003-01-19 16:23:59 +0000556 def test_getattr(self):
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000557 self.assertTrue(getattr(sys, 'stdout') is sys.stdout)
Walter Dörwald919497e2003-01-19 16:23:59 +0000558 self.assertRaises(TypeError, getattr, sys, 1)
559 self.assertRaises(TypeError, getattr, sys, 1, "foo")
560 self.assertRaises(TypeError, getattr)
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000561 self.assertRaises(AttributeError, getattr, sys, chr(sys.maxunicode))
Victor Stinner624dbf62010-03-12 17:17:58 +0000562 # unicode surrogates are not encodable to the default encoding (utf8)
563 self.assertRaises(AttributeError, getattr, 1, "\uDAD1\uD51E")
Walter Dörwald919497e2003-01-19 16:23:59 +0000564
565 def test_hasattr(self):
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000566 self.assertTrue(hasattr(sys, 'stdout'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000567 self.assertRaises(TypeError, hasattr, sys, 1)
568 self.assertRaises(TypeError, hasattr)
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000569 self.assertEqual(False, hasattr(sys, chr(sys.maxunicode)))
Walter Dörwald919497e2003-01-19 16:23:59 +0000570
Benjamin Peterson17689992010-08-24 03:26:23 +0000571 # Check that hasattr propagates all exceptions outside of
572 # AttributeError.
Alexandre Vassalottieca20b62008-05-16 02:54:33 +0000573 class A:
574 def __getattr__(self, what):
Benjamin Peterson17689992010-08-24 03:26:23 +0000575 raise SystemExit
576 self.assertRaises(SystemExit, hasattr, A(), "b")
Alexandre Vassalottieca20b62008-05-16 02:54:33 +0000577 class B:
578 def __getattr__(self, what):
Benjamin Peterson17689992010-08-24 03:26:23 +0000579 raise ValueError
580 self.assertRaises(ValueError, hasattr, B(), "b")
Alexandre Vassalottieca20b62008-05-16 02:54:33 +0000581
Walter Dörwald919497e2003-01-19 16:23:59 +0000582 def test_hash(self):
583 hash(None)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000584 self.assertEqual(hash(1), hash(1))
Walter Dörwald919497e2003-01-19 16:23:59 +0000585 self.assertEqual(hash(1), hash(1.0))
586 hash('spam')
Guido van Rossum98297ee2007-11-06 21:34:58 +0000587 self.assertEqual(hash('spam'), hash(b'spam'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000588 hash((0,1,2,3))
589 def f(): pass
590 self.assertRaises(TypeError, hash, [])
591 self.assertRaises(TypeError, hash, {})
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000592 # Bug 1536021: Allow hash to return long objects
593 class X:
594 def __hash__(self):
595 return 2**100
Ezio Melottib3aedd42010-11-20 19:04:17 +0000596 self.assertEqual(type(hash(X())), int)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000597 class Z(int):
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000598 def __hash__(self):
599 return self
Ezio Melottib3aedd42010-11-20 19:04:17 +0000600 self.assertEqual(hash(Z(42)), hash(42))
Walter Dörwald919497e2003-01-19 16:23:59 +0000601
602 def test_hex(self):
603 self.assertEqual(hex(16), '0x10')
Guido van Rossume2a383d2007-01-15 16:59:06 +0000604 self.assertEqual(hex(-16), '-0x10')
Walter Dörwald919497e2003-01-19 16:23:59 +0000605 self.assertRaises(TypeError, hex, {})
606
607 def test_id(self):
608 id(None)
609 id(1)
Walter Dörwald919497e2003-01-19 16:23:59 +0000610 id(1.0)
611 id('spam')
612 id((0,1,2,3))
613 id([0,1,2,3])
614 id({'spam': 1, 'eggs': 2, 'ham': 3})
615
Guido van Rossuma88a0332007-02-26 16:59:55 +0000616 # Test input() later, alphabetized as if it were raw_input
617
Walter Dörwald919497e2003-01-19 16:23:59 +0000618 def test_iter(self):
619 self.assertRaises(TypeError, iter)
620 self.assertRaises(TypeError, iter, 42, 42)
621 lists = [("1", "2"), ["1", "2"], "12"]
Walter Dörwald919497e2003-01-19 16:23:59 +0000622 for l in lists:
623 i = iter(l)
Georg Brandla18af4e2007-04-21 15:47:16 +0000624 self.assertEqual(next(i), '1')
625 self.assertEqual(next(i), '2')
626 self.assertRaises(StopIteration, next, i)
Walter Dörwald919497e2003-01-19 16:23:59 +0000627
628 def test_isinstance(self):
629 class C:
630 pass
631 class D(C):
632 pass
633 class E:
634 pass
635 c = C()
636 d = D()
637 e = E()
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000638 self.assertTrue(isinstance(c, C))
639 self.assertTrue(isinstance(d, C))
640 self.assertTrue(not isinstance(e, C))
641 self.assertTrue(not isinstance(c, D))
642 self.assertTrue(not isinstance('foo', E))
Walter Dörwald919497e2003-01-19 16:23:59 +0000643 self.assertRaises(TypeError, isinstance, E, 'foo')
644 self.assertRaises(TypeError, isinstance)
645
646 def test_issubclass(self):
647 class C:
648 pass
649 class D(C):
650 pass
651 class E:
652 pass
653 c = C()
654 d = D()
655 e = E()
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000656 self.assertTrue(issubclass(D, C))
657 self.assertTrue(issubclass(C, C))
658 self.assertTrue(not issubclass(C, D))
Walter Dörwald919497e2003-01-19 16:23:59 +0000659 self.assertRaises(TypeError, issubclass, 'foo', E)
660 self.assertRaises(TypeError, issubclass, E, 'foo')
661 self.assertRaises(TypeError, issubclass)
662
663 def test_len(self):
664 self.assertEqual(len('123'), 3)
665 self.assertEqual(len(()), 0)
666 self.assertEqual(len((1, 2, 3, 4)), 4)
667 self.assertEqual(len([1, 2, 3, 4]), 4)
668 self.assertEqual(len({}), 0)
669 self.assertEqual(len({'a':1, 'b': 2}), 2)
670 class BadSeq:
671 def __len__(self):
672 raise ValueError
673 self.assertRaises(ValueError, len, BadSeq())
Benjamin Petersonee1ae7c2009-02-08 21:07:20 +0000674 class InvalidLen:
675 def __len__(self):
676 return None
677 self.assertRaises(TypeError, len, InvalidLen())
678 class FloatLen:
679 def __len__(self):
680 return 4.5
681 self.assertRaises(TypeError, len, FloatLen())
682 class HugeLen:
683 def __len__(self):
684 return sys.maxsize + 1
685 self.assertRaises(OverflowError, len, HugeLen())
Mark Dickinsonfb3dc942010-05-25 19:06:24 +0000686 class NoLenMethod(object): pass
687 self.assertRaises(TypeError, len, NoLenMethod())
Walter Dörwald919497e2003-01-19 16:23:59 +0000688
Walter Dörwald919497e2003-01-19 16:23:59 +0000689 def test_map(self):
690 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000691 list(map(lambda x: x*x, range(1,4))),
Walter Dörwald919497e2003-01-19 16:23:59 +0000692 [1, 4, 9]
693 )
694 try:
695 from math import sqrt
696 except ImportError:
697 def sqrt(x):
698 return pow(x, 0.5)
699 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000700 list(map(lambda x: list(map(sqrt, x)), [[16, 4], [81, 9]])),
Walter Dörwald919497e2003-01-19 16:23:59 +0000701 [[4.0, 2.0], [9.0, 3.0]]
702 )
703 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000704 list(map(lambda x, y: x+y, [1,3,2], [9,1,4])),
Walter Dörwald919497e2003-01-19 16:23:59 +0000705 [10, 4, 6]
706 )
707
708 def plus(*v):
709 accu = 0
710 for i in v: accu = accu + i
711 return accu
712 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000713 list(map(plus, [1, 3, 7])),
Walter Dörwald919497e2003-01-19 16:23:59 +0000714 [1, 3, 7]
715 )
716 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000717 list(map(plus, [1, 3, 7], [4, 9, 2])),
Walter Dörwald919497e2003-01-19 16:23:59 +0000718 [1+4, 3+9, 7+2]
719 )
720 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000721 list(map(plus, [1, 3, 7], [4, 9, 2], [1, 1, 0])),
Walter Dörwald919497e2003-01-19 16:23:59 +0000722 [1+4+1, 3+9+1, 7+2+0]
723 )
724 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000725 list(map(int, Squares(10))),
Walter Dörwald919497e2003-01-19 16:23:59 +0000726 [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
727 )
Guido van Rossum47b9ff62006-08-24 00:41:19 +0000728 def Max(a, b):
729 if a is None:
730 return b
731 if b is None:
732 return a
733 return max(a, b)
Walter Dörwald919497e2003-01-19 16:23:59 +0000734 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000735 list(map(Max, Squares(3), Squares(2))),
736 [0, 1]
Walter Dörwald919497e2003-01-19 16:23:59 +0000737 )
738 self.assertRaises(TypeError, map)
739 self.assertRaises(TypeError, map, lambda x: x, 42)
Walter Dörwald919497e2003-01-19 16:23:59 +0000740 class BadSeq:
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000741 def __iter__(self):
Walter Dörwald919497e2003-01-19 16:23:59 +0000742 raise ValueError
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000743 yield None
744 self.assertRaises(ValueError, list, map(lambda x: x, BadSeq()))
Neal Norwitzfcf44352005-11-27 20:37:43 +0000745 def badfunc(x):
746 raise RuntimeError
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000747 self.assertRaises(RuntimeError, list, map(badfunc, range(5)))
Walter Dörwald919497e2003-01-19 16:23:59 +0000748
749 def test_max(self):
750 self.assertEqual(max('123123'), '3')
751 self.assertEqual(max(1, 2, 3), 3)
752 self.assertEqual(max((1, 2, 3, 1, 2, 3)), 3)
753 self.assertEqual(max([1, 2, 3, 1, 2, 3]), 3)
754
Guido van Rossume2a383d2007-01-15 16:59:06 +0000755 self.assertEqual(max(1, 2, 3.0), 3.0)
756 self.assertEqual(max(1, 2.0, 3), 3)
757 self.assertEqual(max(1.0, 2, 3), 3)
Walter Dörwald919497e2003-01-19 16:23:59 +0000758
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +0000759 for stmt in (
760 "max(key=int)", # no args
761 "max(1, key=int)", # single arg not iterable
762 "max(1, 2, keystone=int)", # wrong keyword
763 "max(1, 2, key=int, abc=int)", # two many keywords
764 "max(1, 2, key=1)", # keyfunc is not callable
765 ):
Tim Peters7f061872004-12-07 21:17:46 +0000766 try:
Georg Brandl7cae87c2006-09-06 06:51:57 +0000767 exec(stmt, globals())
Tim Peters7f061872004-12-07 21:17:46 +0000768 except TypeError:
769 pass
770 else:
771 self.fail(stmt)
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +0000772
773 self.assertEqual(max((1,), key=neg), 1) # one elem iterable
774 self.assertEqual(max((1,2), key=neg), 1) # two elem iterable
775 self.assertEqual(max(1, 2, key=neg), 1) # two elems
776
777 data = [random.randrange(200) for i in range(100)]
778 keys = dict((elem, random.randrange(50)) for elem in data)
779 f = keys.__getitem__
780 self.assertEqual(max(data, key=f),
781 sorted(reversed(data), key=f)[-1])
782
Walter Dörwald919497e2003-01-19 16:23:59 +0000783 def test_min(self):
784 self.assertEqual(min('123123'), '1')
785 self.assertEqual(min(1, 2, 3), 1)
786 self.assertEqual(min((1, 2, 3, 1, 2, 3)), 1)
787 self.assertEqual(min([1, 2, 3, 1, 2, 3]), 1)
788
Guido van Rossume2a383d2007-01-15 16:59:06 +0000789 self.assertEqual(min(1, 2, 3.0), 1)
790 self.assertEqual(min(1, 2.0, 3), 1)
791 self.assertEqual(min(1.0, 2, 3), 1.0)
Walter Dörwald919497e2003-01-19 16:23:59 +0000792
793 self.assertRaises(TypeError, min)
794 self.assertRaises(TypeError, min, 42)
795 self.assertRaises(ValueError, min, ())
796 class BadSeq:
797 def __getitem__(self, index):
798 raise ValueError
799 self.assertRaises(ValueError, min, BadSeq())
Walter Dörwald919497e2003-01-19 16:23:59 +0000800
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +0000801 for stmt in (
802 "min(key=int)", # no args
803 "min(1, key=int)", # single arg not iterable
804 "min(1, 2, keystone=int)", # wrong keyword
805 "min(1, 2, key=int, abc=int)", # two many keywords
806 "min(1, 2, key=1)", # keyfunc is not callable
807 ):
Tim Peters7f061872004-12-07 21:17:46 +0000808 try:
Georg Brandl7cae87c2006-09-06 06:51:57 +0000809 exec(stmt, globals())
Tim Peters7f061872004-12-07 21:17:46 +0000810 except TypeError:
811 pass
812 else:
813 self.fail(stmt)
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +0000814
815 self.assertEqual(min((1,), key=neg), 1) # one elem iterable
816 self.assertEqual(min((1,2), key=neg), 2) # two elem iterable
817 self.assertEqual(min(1, 2, key=neg), 2) # two elems
818
819 data = [random.randrange(200) for i in range(100)]
820 keys = dict((elem, random.randrange(50)) for elem in data)
821 f = keys.__getitem__
822 self.assertEqual(min(data, key=f),
823 sorted(data, key=f)[0])
824
Georg Brandla18af4e2007-04-21 15:47:16 +0000825 def test_next(self):
826 it = iter(range(2))
827 self.assertEqual(next(it), 0)
828 self.assertEqual(next(it), 1)
829 self.assertRaises(StopIteration, next, it)
830 self.assertRaises(StopIteration, next, it)
Ezio Melottib3aedd42010-11-20 19:04:17 +0000831 self.assertEqual(next(it, 42), 42)
Georg Brandla18af4e2007-04-21 15:47:16 +0000832
833 class Iter(object):
834 def __iter__(self):
835 return self
836 def __next__(self):
837 raise StopIteration
838
839 it = iter(Iter())
Ezio Melottib3aedd42010-11-20 19:04:17 +0000840 self.assertEqual(next(it, 42), 42)
Georg Brandla18af4e2007-04-21 15:47:16 +0000841 self.assertRaises(StopIteration, next, it)
842
843 def gen():
844 yield 1
845 return
846
847 it = gen()
Ezio Melottib3aedd42010-11-20 19:04:17 +0000848 self.assertEqual(next(it), 1)
Georg Brandla18af4e2007-04-21 15:47:16 +0000849 self.assertRaises(StopIteration, next, it)
Ezio Melottib3aedd42010-11-20 19:04:17 +0000850 self.assertEqual(next(it, 42), 42)
Georg Brandla18af4e2007-04-21 15:47:16 +0000851
Walter Dörwald919497e2003-01-19 16:23:59 +0000852 def test_oct(self):
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000853 self.assertEqual(oct(100), '0o144')
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000854 self.assertEqual(oct(-100), '-0o144')
Walter Dörwald919497e2003-01-19 16:23:59 +0000855 self.assertRaises(TypeError, oct, ())
856
857 def write_testfile(self):
Guido van Rossuma88a0332007-02-26 16:59:55 +0000858 # NB the first 4 lines are also used to test input, below
Walter Dörwald919497e2003-01-19 16:23:59 +0000859 fp = open(TESTFN, 'w')
860 try:
861 fp.write('1+1\n')
Walter Dörwald919497e2003-01-19 16:23:59 +0000862 fp.write('The quick brown fox jumps over the lazy dog')
863 fp.write('.\n')
864 fp.write('Dear John\n')
865 fp.write('XXX'*100)
866 fp.write('YYY'*100)
867 finally:
868 fp.close()
869
870 def test_open(self):
871 self.write_testfile()
872 fp = open(TESTFN, 'r')
873 try:
874 self.assertEqual(fp.readline(4), '1+1\n')
Walter Dörwald919497e2003-01-19 16:23:59 +0000875 self.assertEqual(fp.readline(), 'The quick brown fox jumps over the lazy dog.\n')
876 self.assertEqual(fp.readline(4), 'Dear')
877 self.assertEqual(fp.readline(100), ' John\n')
878 self.assertEqual(fp.read(300), 'XXX'*100)
879 self.assertEqual(fp.read(1000), 'YYY'*100)
880 finally:
881 fp.close()
882 unlink(TESTFN)
883
884 def test_ord(self):
885 self.assertEqual(ord(' '), 32)
886 self.assertEqual(ord('A'), 65)
887 self.assertEqual(ord('a'), 97)
Guido van Rossumf9e91c92007-05-08 21:05:48 +0000888 self.assertEqual(ord('\x80'), 128)
889 self.assertEqual(ord('\xff'), 255)
890
891 self.assertEqual(ord(b' '), 32)
892 self.assertEqual(ord(b'A'), 65)
893 self.assertEqual(ord(b'a'), 97)
894 self.assertEqual(ord(b'\x80'), 128)
895 self.assertEqual(ord(b'\xff'), 255)
896
Walter Dörwald1f5947b2007-05-22 16:52:54 +0000897 self.assertEqual(ord(chr(sys.maxunicode)), sys.maxunicode)
Walter Dörwald919497e2003-01-19 16:23:59 +0000898 self.assertRaises(TypeError, ord, 42)
Walter Dörwald919497e2003-01-19 16:23:59 +0000899
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000900 self.assertEqual(ord(chr(0x10FFFF)), 0x10FFFF)
901 self.assertEqual(ord("\U0000FFFF"), 0x0000FFFF)
902 self.assertEqual(ord("\U00010000"), 0x00010000)
903 self.assertEqual(ord("\U00010001"), 0x00010001)
904 self.assertEqual(ord("\U000FFFFE"), 0x000FFFFE)
905 self.assertEqual(ord("\U000FFFFF"), 0x000FFFFF)
906 self.assertEqual(ord("\U00100000"), 0x00100000)
907 self.assertEqual(ord("\U00100001"), 0x00100001)
908 self.assertEqual(ord("\U0010FFFE"), 0x0010FFFE)
909 self.assertEqual(ord("\U0010FFFF"), 0x0010FFFF)
910
Walter Dörwald919497e2003-01-19 16:23:59 +0000911 def test_pow(self):
912 self.assertEqual(pow(0,0), 1)
913 self.assertEqual(pow(0,1), 0)
914 self.assertEqual(pow(1,0), 1)
915 self.assertEqual(pow(1,1), 1)
916
917 self.assertEqual(pow(2,0), 1)
918 self.assertEqual(pow(2,10), 1024)
919 self.assertEqual(pow(2,20), 1024*1024)
920 self.assertEqual(pow(2,30), 1024*1024*1024)
921
922 self.assertEqual(pow(-2,0), 1)
923 self.assertEqual(pow(-2,1), -2)
924 self.assertEqual(pow(-2,2), 4)
925 self.assertEqual(pow(-2,3), -8)
926
Walter Dörwald919497e2003-01-19 16:23:59 +0000927 self.assertAlmostEqual(pow(0.,0), 1.)
928 self.assertAlmostEqual(pow(0.,1), 0.)
929 self.assertAlmostEqual(pow(1.,0), 1.)
930 self.assertAlmostEqual(pow(1.,1), 1.)
931
932 self.assertAlmostEqual(pow(2.,0), 1.)
933 self.assertAlmostEqual(pow(2.,10), 1024.)
934 self.assertAlmostEqual(pow(2.,20), 1024.*1024.)
935 self.assertAlmostEqual(pow(2.,30), 1024.*1024.*1024.)
936
937 self.assertAlmostEqual(pow(-2.,0), 1.)
938 self.assertAlmostEqual(pow(-2.,1), -2.)
939 self.assertAlmostEqual(pow(-2.,2), 4.)
940 self.assertAlmostEqual(pow(-2.,3), -8.)
941
Mark Dickinson5c2db372009-12-05 20:28:34 +0000942 for x in 2, 2.0:
943 for y in 10, 10.0:
944 for z in 1000, 1000.0:
Walter Dörwald919497e2003-01-19 16:23:59 +0000945 if isinstance(x, float) or \
946 isinstance(y, float) or \
947 isinstance(z, float):
948 self.assertRaises(TypeError, pow, x, y, z)
949 else:
950 self.assertAlmostEqual(pow(x, y, z), 24.0)
951
Jeffrey Yasskin3404b3c2007-09-07 15:15:49 +0000952 self.assertAlmostEqual(pow(-1, 0.5), 1j)
953 self.assertAlmostEqual(pow(-1, 1/3), 0.5 + 0.8660254037844386j)
954
Walter Dörwald919497e2003-01-19 16:23:59 +0000955 self.assertRaises(TypeError, pow, -1, -2, 3)
956 self.assertRaises(ValueError, pow, 1, 2, 0)
Walter Dörwald919497e2003-01-19 16:23:59 +0000957
958 self.assertRaises(TypeError, pow)
959
Guido van Rossuma88a0332007-02-26 16:59:55 +0000960 def test_input(self):
961 self.write_testfile()
962 fp = open(TESTFN, 'r')
963 savestdin = sys.stdin
964 savestdout = sys.stdout # Eats the echo
965 try:
966 sys.stdin = fp
967 sys.stdout = BitBucket()
968 self.assertEqual(input(), "1+1")
Guido van Rossuma88a0332007-02-26 16:59:55 +0000969 self.assertEqual(input(), 'The quick brown fox jumps over the lazy dog.')
970 self.assertEqual(input('testing\n'), 'Dear John')
971
972 # SF 1535165: don't segfault on closed stdin
973 # sys.stdout must be a regular file for triggering
974 sys.stdout = savestdout
975 sys.stdin.close()
976 self.assertRaises(ValueError, input)
977
978 sys.stdout = BitBucket()
Guido van Rossum34d19282007-08-09 01:03:29 +0000979 sys.stdin = io.StringIO("NULL\0")
Guido van Rossuma88a0332007-02-26 16:59:55 +0000980 self.assertRaises(TypeError, input, 42, 42)
Guido van Rossum34d19282007-08-09 01:03:29 +0000981 sys.stdin = io.StringIO(" 'whitespace'")
Guido van Rossuma88a0332007-02-26 16:59:55 +0000982 self.assertEqual(input(), " 'whitespace'")
Guido van Rossum34d19282007-08-09 01:03:29 +0000983 sys.stdin = io.StringIO()
Guido van Rossuma88a0332007-02-26 16:59:55 +0000984 self.assertRaises(EOFError, input)
985
986 del sys.stdout
987 self.assertRaises(RuntimeError, input, 'prompt')
988 del sys.stdin
989 self.assertRaises(RuntimeError, input, 'prompt')
990 finally:
991 sys.stdin = savestdin
992 sys.stdout = savestdout
993 fp.close()
994 unlink(TESTFN)
995
Walter Dörwald919497e2003-01-19 16:23:59 +0000996 def test_repr(self):
997 self.assertEqual(repr(''), '\'\'')
998 self.assertEqual(repr(0), '0')
Walter Dörwald919497e2003-01-19 16:23:59 +0000999 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)
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001011 self.assertEqual(type(round(0.0)), int)
Walter Dörwald919497e2003-01-19 16:23:59 +00001012 self.assertEqual(round(1.0), 1.0)
1013 self.assertEqual(round(10.0), 10.0)
1014 self.assertEqual(round(1000000000.0), 1000000000.0)
1015 self.assertEqual(round(1e20), 1e20)
1016
1017 self.assertEqual(round(-1.0), -1.0)
1018 self.assertEqual(round(-10.0), -10.0)
1019 self.assertEqual(round(-1000000000.0), -1000000000.0)
1020 self.assertEqual(round(-1e20), -1e20)
1021
1022 self.assertEqual(round(0.1), 0.0)
1023 self.assertEqual(round(1.1), 1.0)
1024 self.assertEqual(round(10.1), 10.0)
1025 self.assertEqual(round(1000000000.1), 1000000000.0)
1026
1027 self.assertEqual(round(-1.1), -1.0)
1028 self.assertEqual(round(-10.1), -10.0)
1029 self.assertEqual(round(-1000000000.1), -1000000000.0)
1030
1031 self.assertEqual(round(0.9), 1.0)
1032 self.assertEqual(round(9.9), 10.0)
1033 self.assertEqual(round(999999999.9), 1000000000.0)
1034
1035 self.assertEqual(round(-0.9), -1.0)
1036 self.assertEqual(round(-9.9), -10.0)
1037 self.assertEqual(round(-999999999.9), -1000000000.0)
1038
1039 self.assertEqual(round(-8.0, -1), -10.0)
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001040 self.assertEqual(type(round(-8.0, -1)), float)
1041
1042 self.assertEqual(type(round(-8.0, 0)), float)
1043 self.assertEqual(type(round(-8.0, 1)), float)
1044
1045 # Check even / odd rounding behaviour
1046 self.assertEqual(round(5.5), 6)
1047 self.assertEqual(round(6.5), 6)
1048 self.assertEqual(round(-5.5), -6)
1049 self.assertEqual(round(-6.5), -6)
1050
1051 # Check behavior on ints
1052 self.assertEqual(round(0), 0)
1053 self.assertEqual(round(8), 8)
1054 self.assertEqual(round(-8), -8)
1055 self.assertEqual(type(round(0)), int)
Mark Dickinson1124e712009-01-28 21:25:58 +00001056 self.assertEqual(type(round(-8, -1)), int)
1057 self.assertEqual(type(round(-8, 0)), int)
1058 self.assertEqual(type(round(-8, 1)), int)
Walter Dörwald919497e2003-01-19 16:23:59 +00001059
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001060 # test new kwargs
1061 self.assertEqual(round(number=-8.0, ndigits=-1), -10.0)
1062
Walter Dörwald919497e2003-01-19 16:23:59 +00001063 self.assertRaises(TypeError, round)
1064
Alex Martelliae211f92007-08-22 23:21:33 +00001065 # test generic rounding delegation for reals
1066 class TestRound:
1067 def __round__(self):
1068 return 23
1069
1070 class TestNoRound:
1071 pass
1072
1073 self.assertEqual(round(TestRound()), 23)
1074
1075 self.assertRaises(TypeError, round, 1, 2, 3)
1076 self.assertRaises(TypeError, round, TestNoRound())
1077
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001078 t = TestNoRound()
1079 t.__round__ = lambda *args: args
1080 self.assertRaises(TypeError, round, t)
1081 self.assertRaises(TypeError, round, t, 0)
1082
Mark Dickinsonad731b92009-11-09 17:12:30 +00001083 # Some versions of glibc for alpha have a bug that affects
1084 # float -> integer rounding (floor, ceil, rint, round) for
1085 # values in the range [2**52, 2**53). See:
1086 #
1087 # http://sources.redhat.com/bugzilla/show_bug.cgi?id=5350
1088 #
1089 # We skip this test on Linux/alpha if it would fail.
1090 linux_alpha = (platform.system().startswith('Linux') and
1091 platform.machine().startswith('alpha'))
1092 system_round_bug = round(5e15+1) != 5e15+1
1093 @unittest.skipIf(linux_alpha and system_round_bug,
1094 "test will fail; failure is probably due to a "
1095 "buggy system round function")
1096 def test_round_large(self):
1097 # Issue #1869: integral floats should remain unchanged
1098 self.assertEqual(round(5e15-1), 5e15-1)
1099 self.assertEqual(round(5e15), 5e15)
1100 self.assertEqual(round(5e15+1), 5e15+1)
1101 self.assertEqual(round(5e15+2), 5e15+2)
1102 self.assertEqual(round(5e15+3), 5e15+3)
1103
Walter Dörwald919497e2003-01-19 16:23:59 +00001104 def test_setattr(self):
Tim Petersf2715e02003-02-19 02:35:07 +00001105 setattr(sys, 'spam', 1)
1106 self.assertEqual(sys.spam, 1)
1107 self.assertRaises(TypeError, setattr, sys, 1, 'spam')
1108 self.assertRaises(TypeError, setattr)
Walter Dörwald919497e2003-01-19 16:23:59 +00001109
Walter Dörwald919497e2003-01-19 16:23:59 +00001110
Alex Martellia70b1912003-04-22 08:12:33 +00001111 def test_sum(self):
1112 self.assertEqual(sum([]), 0)
Guido van Rossum805365e2007-05-07 22:24:25 +00001113 self.assertEqual(sum(list(range(2,8))), 27)
1114 self.assertEqual(sum(iter(list(range(2,8)))), 27)
Alex Martellia70b1912003-04-22 08:12:33 +00001115 self.assertEqual(sum(Squares(10)), 285)
1116 self.assertEqual(sum(iter(Squares(10))), 285)
1117 self.assertEqual(sum([[1], [2], [3]], []), [1, 2, 3])
1118
1119 self.assertRaises(TypeError, sum)
1120 self.assertRaises(TypeError, sum, 42)
1121 self.assertRaises(TypeError, sum, ['a', 'b', 'c'])
1122 self.assertRaises(TypeError, sum, ['a', 'b', 'c'], '')
1123 self.assertRaises(TypeError, sum, [[1], [2], [3]])
1124 self.assertRaises(TypeError, sum, [{2:3}])
1125 self.assertRaises(TypeError, sum, [{2:3}]*2, {2:3})
1126
1127 class BadSeq:
1128 def __getitem__(self, index):
1129 raise ValueError
1130 self.assertRaises(ValueError, sum, BadSeq())
1131
Mark Dickinson3a22b472009-10-17 21:48:16 +00001132 empty = []
1133 sum(([x] for x in range(10)), empty)
1134 self.assertEqual(empty, [])
1135
Walter Dörwald919497e2003-01-19 16:23:59 +00001136 def test_type(self):
1137 self.assertEqual(type(''), type('123'))
1138 self.assertNotEqual(type(''), type(()))
1139
Guido van Rossumfee7b932005-01-16 00:21:28 +00001140 # We don't want self in vars(), so these are static methods
1141
1142 @staticmethod
Walter Dörwald919497e2003-01-19 16:23:59 +00001143 def get_vars_f0():
1144 return vars()
Walter Dörwald919497e2003-01-19 16:23:59 +00001145
Guido van Rossumfee7b932005-01-16 00:21:28 +00001146 @staticmethod
Walter Dörwald919497e2003-01-19 16:23:59 +00001147 def get_vars_f2():
1148 BuiltinTest.get_vars_f0()
1149 a = 1
1150 b = 2
1151 return vars()
Walter Dörwald919497e2003-01-19 16:23:59 +00001152
Mark Dickinsonfb3dc942010-05-25 19:06:24 +00001153 class C_get_vars(object):
1154 def getDict(self):
1155 return {'a':2}
1156 __dict__ = property(fget=getDict)
1157
Walter Dörwald919497e2003-01-19 16:23:59 +00001158 def test_vars(self):
Raymond Hettingera690a992003-11-16 16:17:49 +00001159 self.assertEqual(set(vars()), set(dir()))
Raymond Hettingera690a992003-11-16 16:17:49 +00001160 self.assertEqual(set(vars(sys)), set(dir(sys)))
Walter Dörwald919497e2003-01-19 16:23:59 +00001161 self.assertEqual(self.get_vars_f0(), {})
1162 self.assertEqual(self.get_vars_f2(), {'a': 1, 'b': 2})
1163 self.assertRaises(TypeError, vars, 42, 42)
1164 self.assertRaises(TypeError, vars, 42)
Mark Dickinsonfb3dc942010-05-25 19:06:24 +00001165 self.assertEqual(vars(self.C_get_vars()), {'a':2})
Walter Dörwald919497e2003-01-19 16:23:59 +00001166
1167 def test_zip(self):
1168 a = (1, 2, 3)
1169 b = (4, 5, 6)
1170 t = [(1, 4), (2, 5), (3, 6)]
Guido van Rossum801f0d72006-08-24 19:48:10 +00001171 self.assertEqual(list(zip(a, b)), t)
Walter Dörwald919497e2003-01-19 16:23:59 +00001172 b = [4, 5, 6]
Guido van Rossum801f0d72006-08-24 19:48:10 +00001173 self.assertEqual(list(zip(a, b)), t)
Walter Dörwald919497e2003-01-19 16:23:59 +00001174 b = (4, 5, 6, 7)
Guido van Rossum801f0d72006-08-24 19:48:10 +00001175 self.assertEqual(list(zip(a, b)), t)
Walter Dörwald919497e2003-01-19 16:23:59 +00001176 class I:
1177 def __getitem__(self, i):
1178 if i < 0 or i > 2: raise IndexError
1179 return i + 4
Guido van Rossum801f0d72006-08-24 19:48:10 +00001180 self.assertEqual(list(zip(a, I())), t)
1181 self.assertEqual(list(zip()), [])
1182 self.assertEqual(list(zip(*[])), [])
Walter Dörwald919497e2003-01-19 16:23:59 +00001183 self.assertRaises(TypeError, zip, None)
1184 class G:
1185 pass
1186 self.assertRaises(TypeError, zip, a, G())
Alexander Belopolskye29e6bf2010-08-16 18:55:46 +00001187 self.assertRaises(RuntimeError, zip, a, TestFailingIter())
Walter Dörwald919497e2003-01-19 16:23:59 +00001188
1189 # Make sure zip doesn't try to allocate a billion elements for the
1190 # result list when one of its arguments doesn't say how long it is.
1191 # A MemoryError is the most likely failure mode.
1192 class SequenceWithoutALength:
1193 def __getitem__(self, i):
1194 if i == 5:
1195 raise IndexError
1196 else:
1197 return i
1198 self.assertEqual(
Guido van Rossum805365e2007-05-07 22:24:25 +00001199 list(zip(SequenceWithoutALength(), range(2**30))),
Walter Dörwald919497e2003-01-19 16:23:59 +00001200 list(enumerate(range(5)))
1201 )
1202
1203 class BadSeq:
1204 def __getitem__(self, i):
1205 if i == 5:
1206 raise ValueError
1207 else:
1208 return i
Guido van Rossum801f0d72006-08-24 19:48:10 +00001209 self.assertRaises(ValueError, list, zip(BadSeq(), BadSeq()))
Walter Dörwald919497e2003-01-19 16:23:59 +00001210
Eric Smithe4d63172010-09-13 20:48:43 +00001211 def test_format(self):
1212 # Test the basic machinery of the format() builtin. Don't test
1213 # the specifics of the various formatters
1214 self.assertEqual(format(3, ''), '3')
1215
1216 # Returns some classes to use for various tests. There's
1217 # an old-style version, and a new-style version
1218 def classes_new():
1219 class A(object):
1220 def __init__(self, x):
1221 self.x = x
1222 def __format__(self, format_spec):
1223 return str(self.x) + format_spec
1224 class DerivedFromA(A):
1225 pass
1226
1227 class Simple(object): pass
1228 class DerivedFromSimple(Simple):
1229 def __init__(self, x):
1230 self.x = x
1231 def __format__(self, format_spec):
1232 return str(self.x) + format_spec
1233 class DerivedFromSimple2(DerivedFromSimple): pass
1234 return A, DerivedFromA, DerivedFromSimple, DerivedFromSimple2
1235
1236 def class_test(A, DerivedFromA, DerivedFromSimple, DerivedFromSimple2):
1237 self.assertEqual(format(A(3), 'spec'), '3spec')
1238 self.assertEqual(format(DerivedFromA(4), 'spec'), '4spec')
1239 self.assertEqual(format(DerivedFromSimple(5), 'abc'), '5abc')
1240 self.assertEqual(format(DerivedFromSimple2(10), 'abcdef'),
1241 '10abcdef')
1242
1243 class_test(*classes_new())
1244
1245 def empty_format_spec(value):
1246 # test that:
1247 # format(x, '') == str(x)
1248 # format(x) == str(x)
1249 self.assertEqual(format(value, ""), str(value))
1250 self.assertEqual(format(value), str(value))
1251
1252 # for builtin types, format(x, "") == str(x)
1253 empty_format_spec(17**13)
1254 empty_format_spec(1.0)
1255 empty_format_spec(3.1415e104)
1256 empty_format_spec(-3.1415e104)
1257 empty_format_spec(3.1415e-104)
1258 empty_format_spec(-3.1415e-104)
1259 empty_format_spec(object)
1260 empty_format_spec(None)
1261
1262 # TypeError because self.__format__ returns the wrong type
1263 class BadFormatResult:
1264 def __format__(self, format_spec):
1265 return 1.0
1266 self.assertRaises(TypeError, format, BadFormatResult(), "")
1267
1268 # TypeError because format_spec is not unicode or str
1269 self.assertRaises(TypeError, format, object(), 4)
1270 self.assertRaises(TypeError, format, object(), object())
1271
1272 # tests for object.__format__ really belong elsewhere, but
1273 # there's no good place to put them
1274 x = object().__format__('')
1275 self.assertTrue(x.startswith('<object object at'))
1276
1277 # first argument to object.__format__ must be string
1278 self.assertRaises(TypeError, object().__format__, 3)
1279 self.assertRaises(TypeError, object().__format__, object())
1280 self.assertRaises(TypeError, object().__format__, None)
1281
1282 # --------------------------------------------------------------------
1283 # Issue #7994: object.__format__ with a non-empty format string is
Eric V. Smithb9cd3532011-03-12 10:08:48 -05001284 # deprecated
Eric Smithe4d63172010-09-13 20:48:43 +00001285 def test_deprecated_format_string(obj, fmt_str, should_raise_warning):
1286 with warnings.catch_warnings(record=True) as w:
Eric V. Smithb9cd3532011-03-12 10:08:48 -05001287 warnings.simplefilter("always", DeprecationWarning)
Eric Smithe4d63172010-09-13 20:48:43 +00001288 format(obj, fmt_str)
1289 if should_raise_warning:
1290 self.assertEqual(len(w), 1)
Eric V. Smithb9cd3532011-03-12 10:08:48 -05001291 self.assertIsInstance(w[0].message, DeprecationWarning)
Eric Smithe4d63172010-09-13 20:48:43 +00001292 self.assertIn('object.__format__ with a non-empty format '
1293 'string', str(w[0].message))
1294 else:
1295 self.assertEqual(len(w), 0)
1296
1297 fmt_strs = ['', 's']
1298
1299 class A:
1300 def __format__(self, fmt_str):
1301 return format('', fmt_str)
1302
1303 for fmt_str in fmt_strs:
1304 test_deprecated_format_string(A(), fmt_str, False)
1305
1306 class B:
1307 pass
1308
1309 class C(object):
1310 pass
1311
1312 for cls in [object, B, C]:
1313 for fmt_str in fmt_strs:
1314 test_deprecated_format_string(cls(), fmt_str, len(fmt_str) != 0)
1315 # --------------------------------------------------------------------
1316
1317 # make sure we can take a subclass of str as a format spec
1318 class DerivedFromStr(str): pass
1319 self.assertEqual(format(0, DerivedFromStr('10')), ' 0')
1320
Christian Heimes90c3d9b2008-02-23 13:18:03 +00001321 def test_bin(self):
1322 self.assertEqual(bin(0), '0b0')
1323 self.assertEqual(bin(1), '0b1')
1324 self.assertEqual(bin(-1), '-0b1')
1325 self.assertEqual(bin(2**65), '0b1' + '0' * 65)
1326 self.assertEqual(bin(2**65-1), '0b' + '1' * 65)
1327 self.assertEqual(bin(-(2**65)), '-0b1' + '0' * 65)
1328 self.assertEqual(bin(-(2**65-1)), '-0b' + '1' * 65)
1329
Georg Brandl953152f2009-07-22 12:03:59 +00001330 def test_bytearray_translate(self):
1331 x = bytearray(b"abc")
1332 self.assertRaises(ValueError, x.translate, b"1", 1)
1333 self.assertRaises(TypeError, x.translate, b"1"*256, 1)
1334
Raymond Hettinger64958a12003-12-17 20:43:33 +00001335class TestSorted(unittest.TestCase):
1336
1337 def test_basic(self):
Guido van Rossum805365e2007-05-07 22:24:25 +00001338 data = list(range(100))
Raymond Hettinger64958a12003-12-17 20:43:33 +00001339 copy = data[:]
1340 random.shuffle(copy)
1341 self.assertEqual(data, sorted(copy))
1342 self.assertNotEqual(data, copy)
1343
1344 data.reverse()
1345 random.shuffle(copy)
Raymond Hettinger64958a12003-12-17 20:43:33 +00001346 self.assertEqual(data, sorted(copy, key=lambda x: -x))
1347 self.assertNotEqual(data, copy)
1348 random.shuffle(copy)
1349 self.assertEqual(data, sorted(copy, reverse=1))
1350 self.assertNotEqual(data, copy)
1351
1352 def test_inputtypes(self):
1353 s = 'abracadabra'
Walter Dörwald1f5947b2007-05-22 16:52:54 +00001354 types = [list, tuple, str]
Walter Dörwald4e41a4b2005-08-03 17:09:04 +00001355 for T in types:
Raymond Hettinger64958a12003-12-17 20:43:33 +00001356 self.assertEqual(sorted(s), sorted(T(s)))
1357
Walter Dörwald1f5947b2007-05-22 16:52:54 +00001358 s = ''.join(set(s)) # unique letters only
1359 types = [str, set, frozenset, list, tuple, dict.fromkeys]
Walter Dörwald4e41a4b2005-08-03 17:09:04 +00001360 for T in types:
Raymond Hettinger64958a12003-12-17 20:43:33 +00001361 self.assertEqual(sorted(s), sorted(T(s)))
1362
1363 def test_baddecorator(self):
1364 data = 'The quick Brown fox Jumped over The lazy Dog'.split()
1365 self.assertRaises(TypeError, sorted, data, None, lambda x,y: 0)
1366
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001367def test_main(verbose=None):
1368 test_classes = (BuiltinTest, TestSorted)
1369
1370 run_unittest(*test_classes)
1371
1372 # verify reference counting
1373 if verbose and hasattr(sys, "gettotalrefcount"):
1374 import gc
1375 counts = [None] * 5
Guido van Rossum805365e2007-05-07 22:24:25 +00001376 for i in range(len(counts)):
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001377 run_unittest(*test_classes)
1378 gc.collect()
1379 counts[i] = sys.gettotalrefcount()
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001380 print(counts)
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001381
Walter Dörwald919497e2003-01-19 16:23:59 +00001382
1383if __name__ == "__main__":
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001384 test_main(verbose=True)