blob: ce1586f98d8647cd31f6015b826c990973c0b661 [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
Benjamin Peterson3bbb7222011-06-11 16:12:08 -0500375 # dir(obj__dir__tuple)
376 class Foo(object):
377 def __dir__(self):
378 return ("b", "c", "a")
379 res = dir(Foo())
380 self.assertIsInstance(res, list)
381 self.assertTrue(res == ["a", "b", "c"])
382
383 # dir(obj__dir__not_sequence)
Georg Brandle32b4222007-03-10 22:13:27 +0000384 class Foo(object):
385 def __dir__(self):
386 return 7
387 f = Foo()
388 self.assertRaises(TypeError, dir, f)
389
Collin Winter3eed7652007-08-14 17:53:54 +0000390 # dir(traceback)
391 try:
392 raise IndexError
393 except:
394 self.assertEqual(len(dir(sys.exc_info()[2])), 4)
395
Benjamin Petersondac9ace2011-05-25 09:33:37 -0500396 # test that object has a __dir__()
397 self.assertEqual(sorted([].__dir__()), dir([]))
Collin Winter3eed7652007-08-14 17:53:54 +0000398
Walter Dörwald919497e2003-01-19 16:23:59 +0000399 def test_divmod(self):
400 self.assertEqual(divmod(12, 7), (1, 5))
401 self.assertEqual(divmod(-12, 7), (-2, 2))
402 self.assertEqual(divmod(12, -7), (-2, -2))
403 self.assertEqual(divmod(-12, -7), (1, -5))
404
Mark Dickinson5c2db372009-12-05 20:28:34 +0000405 self.assertEqual(divmod(-sys.maxsize-1, -1), (sys.maxsize+1, 0))
Raymond Hettinger5ea7e312004-09-30 07:47:20 +0000406
Eli Bendersky67ebabd2011-02-25 10:14:17 +0000407 for num, denom, exp_result in [ (3.25, 1.0, (3.0, 0.25)),
408 (-3.25, 1.0, (-4.0, 0.75)),
409 (3.25, -1.0, (-4.0, -0.75)),
410 (-3.25, -1.0, (3.0, -0.25))]:
411 result = divmod(num, denom)
412 self.assertAlmostEqual(result[0], exp_result[0])
413 self.assertAlmostEqual(result[1], exp_result[1])
Walter Dörwald919497e2003-01-19 16:23:59 +0000414
415 self.assertRaises(TypeError, divmod)
416
417 def test_eval(self):
418 self.assertEqual(eval('1+1'), 2)
419 self.assertEqual(eval(' 1+1\n'), 2)
420 globals = {'a': 1, 'b': 2}
421 locals = {'b': 200, 'c': 300}
422 self.assertEqual(eval('a', globals) , 1)
423 self.assertEqual(eval('a', globals, locals), 1)
424 self.assertEqual(eval('b', globals, locals), 200)
425 self.assertEqual(eval('c', globals, locals), 300)
Walter Dörwald919497e2003-01-19 16:23:59 +0000426 globals = {'a': 1, 'b': 2}
427 locals = {'b': 200, 'c': 300}
Amaury Forgeot d'Arcaf593462007-11-22 20:53:01 +0000428 bom = b'\xef\xbb\xbf'
429 self.assertEqual(eval(bom + b'a', globals, locals), 1)
Walter Dörwald1f5947b2007-05-22 16:52:54 +0000430 self.assertEqual(eval('"\xe5"', globals), "\xe5")
Walter Dörwald919497e2003-01-19 16:23:59 +0000431 self.assertRaises(TypeError, eval)
432 self.assertRaises(TypeError, eval, ())
Amaury Forgeot d'Arcaf593462007-11-22 20:53:01 +0000433 self.assertRaises(SyntaxError, eval, bom[:2] + b'a')
Walter Dörwald919497e2003-01-19 16:23:59 +0000434
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000435 def test_general_eval(self):
436 # Tests that general mappings can be used for the locals argument
437
438 class M:
439 "Test mapping interface versus possible calls from eval()."
440 def __getitem__(self, key):
441 if key == 'a':
442 return 12
443 raise KeyError
Guido van Rossumcd70eee2007-02-11 18:53:00 +0000444 def keys(self):
445 return list('xyz')
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000446
447 m = M()
448 g = globals()
449 self.assertEqual(eval('a', g, m), 12)
450 self.assertRaises(NameError, eval, 'b', g, m)
451 self.assertEqual(eval('dir()', g, m), list('xyz'))
452 self.assertEqual(eval('globals()', g, m), g)
453 self.assertEqual(eval('locals()', g, m), m)
Raymond Hettinger513ffe82004-07-06 13:44:41 +0000454 self.assertRaises(TypeError, eval, 'a', m)
Raymond Hettinger66bd2332004-08-02 08:30:07 +0000455 class A:
456 "Non-mapping"
457 pass
458 m = A()
459 self.assertRaises(TypeError, eval, 'a', g, m)
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000460
461 # Verify that dict subclasses work as well
462 class D(dict):
463 def __getitem__(self, key):
464 if key == 'a':
465 return 12
466 return dict.__getitem__(self, key)
Guido van Rossumcd70eee2007-02-11 18:53:00 +0000467 def keys(self):
468 return list('xyz')
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000469
470 d = D()
471 self.assertEqual(eval('a', g, d), 12)
472 self.assertRaises(NameError, eval, 'b', g, d)
473 self.assertEqual(eval('dir()', g, d), list('xyz'))
474 self.assertEqual(eval('globals()', g, d), g)
475 self.assertEqual(eval('locals()', g, d), d)
476
477 # Verify locals stores (used by list comps)
478 eval('[locals() for i in (2,3)]', g, d)
Raymond Hettingerf80680d2008-02-06 00:07:11 +0000479 eval('[locals() for i in (2,3)]', g, collections.UserDict())
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000480
481 class SpreadSheet:
482 "Sample application showing nested, calculated lookups."
483 _cells = {}
484 def __setitem__(self, key, formula):
485 self._cells[key] = formula
Thomas Wouters73e5a5b2006-06-08 15:35:45 +0000486 def __getitem__(self, key):
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000487 return eval(self._cells[key], globals(), self)
488
489 ss = SpreadSheet()
490 ss['a1'] = '5'
491 ss['a2'] = 'a1*6'
492 ss['a3'] = 'a2*7'
493 self.assertEqual(ss['a3'], 210)
494
Raymond Hettinger2a7dede2004-08-07 04:55:30 +0000495 # Verify that dir() catches a non-list returned by eval
496 # SF bug #1004669
497 class C:
498 def __getitem__(self, item):
499 raise KeyError(item)
Guido van Rossumcd70eee2007-02-11 18:53:00 +0000500 def keys(self):
501 return 1 # used to be 'a' but that's no longer an error
Raymond Hettinger2a7dede2004-08-07 04:55:30 +0000502 self.assertRaises(TypeError, eval, 'dir()', globals(), C())
503
Georg Brandl7cae87c2006-09-06 06:51:57 +0000504 def test_exec(self):
505 g = {}
506 exec('z = 1', g)
507 if '__builtins__' in g:
508 del g['__builtins__']
509 self.assertEqual(g, {'z': 1})
510
Guido van Rossumef87d6e2007-05-02 19:09:54 +0000511 exec('z = 1+1', g)
Georg Brandl7cae87c2006-09-06 06:51:57 +0000512 if '__builtins__' in g:
513 del g['__builtins__']
514 self.assertEqual(g, {'z': 2})
515 g = {}
516 l = {}
517
Brett Cannon77628992010-03-20 20:59:33 +0000518 with check_warnings():
519 warnings.filterwarnings("ignore", "global statement",
520 module="<string>")
521 exec('global a; a = 1; b = 2', g, l)
Georg Brandl7cae87c2006-09-06 06:51:57 +0000522 if '__builtins__' in g:
523 del g['__builtins__']
524 if '__builtins__' in l:
525 del l['__builtins__']
526 self.assertEqual((g, l), ({'a': 1}, {'b': 2}))
527
Amaury Forgeot d'Arc9ed77352008-04-04 23:25:27 +0000528 def test_exec_redirected(self):
529 savestdout = sys.stdout
530 sys.stdout = None # Whatever that cannot flush()
531 try:
532 # Used to raise SystemError('error return without exception set')
533 exec('a')
534 except NameError:
535 pass
536 finally:
537 sys.stdout = savestdout
538
Walter Dörwald919497e2003-01-19 16:23:59 +0000539 def test_filter(self):
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000540 self.assertEqual(list(filter(lambda c: 'a' <= c <= 'z', 'Hello World')), list('elloorld'))
541 self.assertEqual(list(filter(None, [1, 'hello', [], [3], '', None, 9, 0])), [1, 'hello', [3], 9])
542 self.assertEqual(list(filter(lambda x: x > 0, [1, -3, 9, 0, 2])), [1, 9, 2])
543 self.assertEqual(list(filter(None, Squares(10))), [1, 4, 9, 16, 25, 36, 49, 64, 81])
544 self.assertEqual(list(filter(lambda x: x%2, Squares(10))), [1, 9, 25, 49, 81])
Walter Dörwald919497e2003-01-19 16:23:59 +0000545 def identity(item):
546 return 1
547 filter(identity, Squares(5))
548 self.assertRaises(TypeError, filter)
549 class BadSeq(object):
Tim Petersf2715e02003-02-19 02:35:07 +0000550 def __getitem__(self, index):
551 if index<4:
552 return 42
553 raise ValueError
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000554 self.assertRaises(ValueError, list, filter(lambda x: x, BadSeq()))
Walter Dörwald919497e2003-01-19 16:23:59 +0000555 def badfunc():
556 pass
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000557 self.assertRaises(TypeError, list, filter(badfunc, range(5)))
Walter Dörwald919497e2003-01-19 16:23:59 +0000558
Walter Dörwaldbf517072003-01-27 15:57:14 +0000559 # test bltinmodule.c::filtertuple()
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000560 self.assertEqual(list(filter(None, (1, 2))), [1, 2])
561 self.assertEqual(list(filter(lambda x: x>=3, (1, 2, 3, 4))), [3, 4])
562 self.assertRaises(TypeError, list, filter(42, (1, 2)))
Walter Dörwaldc3da83f2003-02-04 20:24:45 +0000563
Walter Dörwald919497e2003-01-19 16:23:59 +0000564 def test_getattr(self):
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000565 self.assertTrue(getattr(sys, 'stdout') is sys.stdout)
Walter Dörwald919497e2003-01-19 16:23:59 +0000566 self.assertRaises(TypeError, getattr, sys, 1)
567 self.assertRaises(TypeError, getattr, sys, 1, "foo")
568 self.assertRaises(TypeError, getattr)
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000569 self.assertRaises(AttributeError, getattr, sys, chr(sys.maxunicode))
Victor Stinner624dbf62010-03-12 17:17:58 +0000570 # unicode surrogates are not encodable to the default encoding (utf8)
571 self.assertRaises(AttributeError, getattr, 1, "\uDAD1\uD51E")
Walter Dörwald919497e2003-01-19 16:23:59 +0000572
573 def test_hasattr(self):
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000574 self.assertTrue(hasattr(sys, 'stdout'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000575 self.assertRaises(TypeError, hasattr, sys, 1)
576 self.assertRaises(TypeError, hasattr)
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000577 self.assertEqual(False, hasattr(sys, chr(sys.maxunicode)))
Walter Dörwald919497e2003-01-19 16:23:59 +0000578
Benjamin Peterson17689992010-08-24 03:26:23 +0000579 # Check that hasattr propagates all exceptions outside of
580 # AttributeError.
Alexandre Vassalottieca20b62008-05-16 02:54:33 +0000581 class A:
582 def __getattr__(self, what):
Benjamin Peterson17689992010-08-24 03:26:23 +0000583 raise SystemExit
584 self.assertRaises(SystemExit, hasattr, A(), "b")
Alexandre Vassalottieca20b62008-05-16 02:54:33 +0000585 class B:
586 def __getattr__(self, what):
Benjamin Peterson17689992010-08-24 03:26:23 +0000587 raise ValueError
588 self.assertRaises(ValueError, hasattr, B(), "b")
Alexandre Vassalottieca20b62008-05-16 02:54:33 +0000589
Walter Dörwald919497e2003-01-19 16:23:59 +0000590 def test_hash(self):
591 hash(None)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000592 self.assertEqual(hash(1), hash(1))
Walter Dörwald919497e2003-01-19 16:23:59 +0000593 self.assertEqual(hash(1), hash(1.0))
594 hash('spam')
Guido van Rossum98297ee2007-11-06 21:34:58 +0000595 self.assertEqual(hash('spam'), hash(b'spam'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000596 hash((0,1,2,3))
597 def f(): pass
598 self.assertRaises(TypeError, hash, [])
599 self.assertRaises(TypeError, hash, {})
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000600 # Bug 1536021: Allow hash to return long objects
601 class X:
602 def __hash__(self):
603 return 2**100
Ezio Melottib3aedd42010-11-20 19:04:17 +0000604 self.assertEqual(type(hash(X())), int)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000605 class Z(int):
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000606 def __hash__(self):
607 return self
Ezio Melottib3aedd42010-11-20 19:04:17 +0000608 self.assertEqual(hash(Z(42)), hash(42))
Walter Dörwald919497e2003-01-19 16:23:59 +0000609
610 def test_hex(self):
611 self.assertEqual(hex(16), '0x10')
Guido van Rossume2a383d2007-01-15 16:59:06 +0000612 self.assertEqual(hex(-16), '-0x10')
Walter Dörwald919497e2003-01-19 16:23:59 +0000613 self.assertRaises(TypeError, hex, {})
614
615 def test_id(self):
616 id(None)
617 id(1)
Walter Dörwald919497e2003-01-19 16:23:59 +0000618 id(1.0)
619 id('spam')
620 id((0,1,2,3))
621 id([0,1,2,3])
622 id({'spam': 1, 'eggs': 2, 'ham': 3})
623
Guido van Rossuma88a0332007-02-26 16:59:55 +0000624 # Test input() later, alphabetized as if it were raw_input
625
Walter Dörwald919497e2003-01-19 16:23:59 +0000626 def test_iter(self):
627 self.assertRaises(TypeError, iter)
628 self.assertRaises(TypeError, iter, 42, 42)
629 lists = [("1", "2"), ["1", "2"], "12"]
Walter Dörwald919497e2003-01-19 16:23:59 +0000630 for l in lists:
631 i = iter(l)
Georg Brandla18af4e2007-04-21 15:47:16 +0000632 self.assertEqual(next(i), '1')
633 self.assertEqual(next(i), '2')
634 self.assertRaises(StopIteration, next, i)
Walter Dörwald919497e2003-01-19 16:23:59 +0000635
636 def test_isinstance(self):
637 class C:
638 pass
639 class D(C):
640 pass
641 class E:
642 pass
643 c = C()
644 d = D()
645 e = E()
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000646 self.assertTrue(isinstance(c, C))
647 self.assertTrue(isinstance(d, C))
648 self.assertTrue(not isinstance(e, C))
649 self.assertTrue(not isinstance(c, D))
650 self.assertTrue(not isinstance('foo', E))
Walter Dörwald919497e2003-01-19 16:23:59 +0000651 self.assertRaises(TypeError, isinstance, E, 'foo')
652 self.assertRaises(TypeError, isinstance)
653
654 def test_issubclass(self):
655 class C:
656 pass
657 class D(C):
658 pass
659 class E:
660 pass
661 c = C()
662 d = D()
663 e = E()
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000664 self.assertTrue(issubclass(D, C))
665 self.assertTrue(issubclass(C, C))
666 self.assertTrue(not issubclass(C, D))
Walter Dörwald919497e2003-01-19 16:23:59 +0000667 self.assertRaises(TypeError, issubclass, 'foo', E)
668 self.assertRaises(TypeError, issubclass, E, 'foo')
669 self.assertRaises(TypeError, issubclass)
670
671 def test_len(self):
672 self.assertEqual(len('123'), 3)
673 self.assertEqual(len(()), 0)
674 self.assertEqual(len((1, 2, 3, 4)), 4)
675 self.assertEqual(len([1, 2, 3, 4]), 4)
676 self.assertEqual(len({}), 0)
677 self.assertEqual(len({'a':1, 'b': 2}), 2)
678 class BadSeq:
679 def __len__(self):
680 raise ValueError
681 self.assertRaises(ValueError, len, BadSeq())
Benjamin Petersonee1ae7c2009-02-08 21:07:20 +0000682 class InvalidLen:
683 def __len__(self):
684 return None
685 self.assertRaises(TypeError, len, InvalidLen())
686 class FloatLen:
687 def __len__(self):
688 return 4.5
689 self.assertRaises(TypeError, len, FloatLen())
690 class HugeLen:
691 def __len__(self):
692 return sys.maxsize + 1
693 self.assertRaises(OverflowError, len, HugeLen())
Mark Dickinsonfb3dc942010-05-25 19:06:24 +0000694 class NoLenMethod(object): pass
695 self.assertRaises(TypeError, len, NoLenMethod())
Walter Dörwald919497e2003-01-19 16:23:59 +0000696
Walter Dörwald919497e2003-01-19 16:23:59 +0000697 def test_map(self):
698 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000699 list(map(lambda x: x*x, range(1,4))),
Walter Dörwald919497e2003-01-19 16:23:59 +0000700 [1, 4, 9]
701 )
702 try:
703 from math import sqrt
704 except ImportError:
705 def sqrt(x):
706 return pow(x, 0.5)
707 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000708 list(map(lambda x: list(map(sqrt, x)), [[16, 4], [81, 9]])),
Walter Dörwald919497e2003-01-19 16:23:59 +0000709 [[4.0, 2.0], [9.0, 3.0]]
710 )
711 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000712 list(map(lambda x, y: x+y, [1,3,2], [9,1,4])),
Walter Dörwald919497e2003-01-19 16:23:59 +0000713 [10, 4, 6]
714 )
715
716 def plus(*v):
717 accu = 0
718 for i in v: accu = accu + i
719 return accu
720 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000721 list(map(plus, [1, 3, 7])),
Walter Dörwald919497e2003-01-19 16:23:59 +0000722 [1, 3, 7]
723 )
724 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000725 list(map(plus, [1, 3, 7], [4, 9, 2])),
Walter Dörwald919497e2003-01-19 16:23:59 +0000726 [1+4, 3+9, 7+2]
727 )
728 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000729 list(map(plus, [1, 3, 7], [4, 9, 2], [1, 1, 0])),
Walter Dörwald919497e2003-01-19 16:23:59 +0000730 [1+4+1, 3+9+1, 7+2+0]
731 )
732 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000733 list(map(int, Squares(10))),
Walter Dörwald919497e2003-01-19 16:23:59 +0000734 [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
735 )
Guido van Rossum47b9ff62006-08-24 00:41:19 +0000736 def Max(a, b):
737 if a is None:
738 return b
739 if b is None:
740 return a
741 return max(a, b)
Walter Dörwald919497e2003-01-19 16:23:59 +0000742 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000743 list(map(Max, Squares(3), Squares(2))),
744 [0, 1]
Walter Dörwald919497e2003-01-19 16:23:59 +0000745 )
746 self.assertRaises(TypeError, map)
747 self.assertRaises(TypeError, map, lambda x: x, 42)
Walter Dörwald919497e2003-01-19 16:23:59 +0000748 class BadSeq:
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000749 def __iter__(self):
Walter Dörwald919497e2003-01-19 16:23:59 +0000750 raise ValueError
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000751 yield None
752 self.assertRaises(ValueError, list, map(lambda x: x, BadSeq()))
Neal Norwitzfcf44352005-11-27 20:37:43 +0000753 def badfunc(x):
754 raise RuntimeError
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000755 self.assertRaises(RuntimeError, list, map(badfunc, range(5)))
Walter Dörwald919497e2003-01-19 16:23:59 +0000756
757 def test_max(self):
758 self.assertEqual(max('123123'), '3')
759 self.assertEqual(max(1, 2, 3), 3)
760 self.assertEqual(max((1, 2, 3, 1, 2, 3)), 3)
761 self.assertEqual(max([1, 2, 3, 1, 2, 3]), 3)
762
Guido van Rossume2a383d2007-01-15 16:59:06 +0000763 self.assertEqual(max(1, 2, 3.0), 3.0)
764 self.assertEqual(max(1, 2.0, 3), 3)
765 self.assertEqual(max(1.0, 2, 3), 3)
Walter Dörwald919497e2003-01-19 16:23:59 +0000766
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +0000767 for stmt in (
768 "max(key=int)", # no args
769 "max(1, key=int)", # single arg not iterable
770 "max(1, 2, keystone=int)", # wrong keyword
771 "max(1, 2, key=int, abc=int)", # two many keywords
772 "max(1, 2, key=1)", # keyfunc is not callable
773 ):
Tim Peters7f061872004-12-07 21:17:46 +0000774 try:
Georg Brandl7cae87c2006-09-06 06:51:57 +0000775 exec(stmt, globals())
Tim Peters7f061872004-12-07 21:17:46 +0000776 except TypeError:
777 pass
778 else:
779 self.fail(stmt)
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +0000780
781 self.assertEqual(max((1,), key=neg), 1) # one elem iterable
782 self.assertEqual(max((1,2), key=neg), 1) # two elem iterable
783 self.assertEqual(max(1, 2, key=neg), 1) # two elems
784
785 data = [random.randrange(200) for i in range(100)]
786 keys = dict((elem, random.randrange(50)) for elem in data)
787 f = keys.__getitem__
788 self.assertEqual(max(data, key=f),
789 sorted(reversed(data), key=f)[-1])
790
Walter Dörwald919497e2003-01-19 16:23:59 +0000791 def test_min(self):
792 self.assertEqual(min('123123'), '1')
793 self.assertEqual(min(1, 2, 3), 1)
794 self.assertEqual(min((1, 2, 3, 1, 2, 3)), 1)
795 self.assertEqual(min([1, 2, 3, 1, 2, 3]), 1)
796
Guido van Rossume2a383d2007-01-15 16:59:06 +0000797 self.assertEqual(min(1, 2, 3.0), 1)
798 self.assertEqual(min(1, 2.0, 3), 1)
799 self.assertEqual(min(1.0, 2, 3), 1.0)
Walter Dörwald919497e2003-01-19 16:23:59 +0000800
801 self.assertRaises(TypeError, min)
802 self.assertRaises(TypeError, min, 42)
803 self.assertRaises(ValueError, min, ())
804 class BadSeq:
805 def __getitem__(self, index):
806 raise ValueError
807 self.assertRaises(ValueError, min, BadSeq())
Walter Dörwald919497e2003-01-19 16:23:59 +0000808
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +0000809 for stmt in (
810 "min(key=int)", # no args
811 "min(1, key=int)", # single arg not iterable
812 "min(1, 2, keystone=int)", # wrong keyword
813 "min(1, 2, key=int, abc=int)", # two many keywords
814 "min(1, 2, key=1)", # keyfunc is not callable
815 ):
Tim Peters7f061872004-12-07 21:17:46 +0000816 try:
Georg Brandl7cae87c2006-09-06 06:51:57 +0000817 exec(stmt, globals())
Tim Peters7f061872004-12-07 21:17:46 +0000818 except TypeError:
819 pass
820 else:
821 self.fail(stmt)
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +0000822
823 self.assertEqual(min((1,), key=neg), 1) # one elem iterable
824 self.assertEqual(min((1,2), key=neg), 2) # two elem iterable
825 self.assertEqual(min(1, 2, key=neg), 2) # two elems
826
827 data = [random.randrange(200) for i in range(100)]
828 keys = dict((elem, random.randrange(50)) for elem in data)
829 f = keys.__getitem__
830 self.assertEqual(min(data, key=f),
831 sorted(data, key=f)[0])
832
Georg Brandla18af4e2007-04-21 15:47:16 +0000833 def test_next(self):
834 it = iter(range(2))
835 self.assertEqual(next(it), 0)
836 self.assertEqual(next(it), 1)
837 self.assertRaises(StopIteration, next, it)
838 self.assertRaises(StopIteration, next, it)
Ezio Melottib3aedd42010-11-20 19:04:17 +0000839 self.assertEqual(next(it, 42), 42)
Georg Brandla18af4e2007-04-21 15:47:16 +0000840
841 class Iter(object):
842 def __iter__(self):
843 return self
844 def __next__(self):
845 raise StopIteration
846
847 it = iter(Iter())
Ezio Melottib3aedd42010-11-20 19:04:17 +0000848 self.assertEqual(next(it, 42), 42)
Georg Brandla18af4e2007-04-21 15:47:16 +0000849 self.assertRaises(StopIteration, next, it)
850
851 def gen():
852 yield 1
853 return
854
855 it = gen()
Ezio Melottib3aedd42010-11-20 19:04:17 +0000856 self.assertEqual(next(it), 1)
Georg Brandla18af4e2007-04-21 15:47:16 +0000857 self.assertRaises(StopIteration, next, it)
Ezio Melottib3aedd42010-11-20 19:04:17 +0000858 self.assertEqual(next(it, 42), 42)
Georg Brandla18af4e2007-04-21 15:47:16 +0000859
Walter Dörwald919497e2003-01-19 16:23:59 +0000860 def test_oct(self):
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000861 self.assertEqual(oct(100), '0o144')
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000862 self.assertEqual(oct(-100), '-0o144')
Walter Dörwald919497e2003-01-19 16:23:59 +0000863 self.assertRaises(TypeError, oct, ())
864
865 def write_testfile(self):
Guido van Rossuma88a0332007-02-26 16:59:55 +0000866 # NB the first 4 lines are also used to test input, below
Walter Dörwald919497e2003-01-19 16:23:59 +0000867 fp = open(TESTFN, 'w')
868 try:
869 fp.write('1+1\n')
Walter Dörwald919497e2003-01-19 16:23:59 +0000870 fp.write('The quick brown fox jumps over the lazy dog')
871 fp.write('.\n')
872 fp.write('Dear John\n')
873 fp.write('XXX'*100)
874 fp.write('YYY'*100)
875 finally:
876 fp.close()
877
878 def test_open(self):
879 self.write_testfile()
880 fp = open(TESTFN, 'r')
881 try:
882 self.assertEqual(fp.readline(4), '1+1\n')
Walter Dörwald919497e2003-01-19 16:23:59 +0000883 self.assertEqual(fp.readline(), 'The quick brown fox jumps over the lazy dog.\n')
884 self.assertEqual(fp.readline(4), 'Dear')
885 self.assertEqual(fp.readline(100), ' John\n')
886 self.assertEqual(fp.read(300), 'XXX'*100)
887 self.assertEqual(fp.read(1000), 'YYY'*100)
888 finally:
889 fp.close()
890 unlink(TESTFN)
891
892 def test_ord(self):
893 self.assertEqual(ord(' '), 32)
894 self.assertEqual(ord('A'), 65)
895 self.assertEqual(ord('a'), 97)
Guido van Rossumf9e91c92007-05-08 21:05:48 +0000896 self.assertEqual(ord('\x80'), 128)
897 self.assertEqual(ord('\xff'), 255)
898
899 self.assertEqual(ord(b' '), 32)
900 self.assertEqual(ord(b'A'), 65)
901 self.assertEqual(ord(b'a'), 97)
902 self.assertEqual(ord(b'\x80'), 128)
903 self.assertEqual(ord(b'\xff'), 255)
904
Walter Dörwald1f5947b2007-05-22 16:52:54 +0000905 self.assertEqual(ord(chr(sys.maxunicode)), sys.maxunicode)
Walter Dörwald919497e2003-01-19 16:23:59 +0000906 self.assertRaises(TypeError, ord, 42)
Walter Dörwald919497e2003-01-19 16:23:59 +0000907
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000908 self.assertEqual(ord(chr(0x10FFFF)), 0x10FFFF)
909 self.assertEqual(ord("\U0000FFFF"), 0x0000FFFF)
910 self.assertEqual(ord("\U00010000"), 0x00010000)
911 self.assertEqual(ord("\U00010001"), 0x00010001)
912 self.assertEqual(ord("\U000FFFFE"), 0x000FFFFE)
913 self.assertEqual(ord("\U000FFFFF"), 0x000FFFFF)
914 self.assertEqual(ord("\U00100000"), 0x00100000)
915 self.assertEqual(ord("\U00100001"), 0x00100001)
916 self.assertEqual(ord("\U0010FFFE"), 0x0010FFFE)
917 self.assertEqual(ord("\U0010FFFF"), 0x0010FFFF)
918
Walter Dörwald919497e2003-01-19 16:23:59 +0000919 def test_pow(self):
920 self.assertEqual(pow(0,0), 1)
921 self.assertEqual(pow(0,1), 0)
922 self.assertEqual(pow(1,0), 1)
923 self.assertEqual(pow(1,1), 1)
924
925 self.assertEqual(pow(2,0), 1)
926 self.assertEqual(pow(2,10), 1024)
927 self.assertEqual(pow(2,20), 1024*1024)
928 self.assertEqual(pow(2,30), 1024*1024*1024)
929
930 self.assertEqual(pow(-2,0), 1)
931 self.assertEqual(pow(-2,1), -2)
932 self.assertEqual(pow(-2,2), 4)
933 self.assertEqual(pow(-2,3), -8)
934
Walter Dörwald919497e2003-01-19 16:23:59 +0000935 self.assertAlmostEqual(pow(0.,0), 1.)
936 self.assertAlmostEqual(pow(0.,1), 0.)
937 self.assertAlmostEqual(pow(1.,0), 1.)
938 self.assertAlmostEqual(pow(1.,1), 1.)
939
940 self.assertAlmostEqual(pow(2.,0), 1.)
941 self.assertAlmostEqual(pow(2.,10), 1024.)
942 self.assertAlmostEqual(pow(2.,20), 1024.*1024.)
943 self.assertAlmostEqual(pow(2.,30), 1024.*1024.*1024.)
944
945 self.assertAlmostEqual(pow(-2.,0), 1.)
946 self.assertAlmostEqual(pow(-2.,1), -2.)
947 self.assertAlmostEqual(pow(-2.,2), 4.)
948 self.assertAlmostEqual(pow(-2.,3), -8.)
949
Mark Dickinson5c2db372009-12-05 20:28:34 +0000950 for x in 2, 2.0:
951 for y in 10, 10.0:
952 for z in 1000, 1000.0:
Walter Dörwald919497e2003-01-19 16:23:59 +0000953 if isinstance(x, float) or \
954 isinstance(y, float) or \
955 isinstance(z, float):
956 self.assertRaises(TypeError, pow, x, y, z)
957 else:
958 self.assertAlmostEqual(pow(x, y, z), 24.0)
959
Jeffrey Yasskin3404b3c2007-09-07 15:15:49 +0000960 self.assertAlmostEqual(pow(-1, 0.5), 1j)
961 self.assertAlmostEqual(pow(-1, 1/3), 0.5 + 0.8660254037844386j)
962
Walter Dörwald919497e2003-01-19 16:23:59 +0000963 self.assertRaises(TypeError, pow, -1, -2, 3)
964 self.assertRaises(ValueError, pow, 1, 2, 0)
Walter Dörwald919497e2003-01-19 16:23:59 +0000965
966 self.assertRaises(TypeError, pow)
967
Guido van Rossuma88a0332007-02-26 16:59:55 +0000968 def test_input(self):
969 self.write_testfile()
970 fp = open(TESTFN, 'r')
971 savestdin = sys.stdin
972 savestdout = sys.stdout # Eats the echo
973 try:
974 sys.stdin = fp
975 sys.stdout = BitBucket()
976 self.assertEqual(input(), "1+1")
Guido van Rossuma88a0332007-02-26 16:59:55 +0000977 self.assertEqual(input(), 'The quick brown fox jumps over the lazy dog.')
978 self.assertEqual(input('testing\n'), 'Dear John')
979
980 # SF 1535165: don't segfault on closed stdin
981 # sys.stdout must be a regular file for triggering
982 sys.stdout = savestdout
983 sys.stdin.close()
984 self.assertRaises(ValueError, input)
985
986 sys.stdout = BitBucket()
Guido van Rossum34d19282007-08-09 01:03:29 +0000987 sys.stdin = io.StringIO("NULL\0")
Guido van Rossuma88a0332007-02-26 16:59:55 +0000988 self.assertRaises(TypeError, input, 42, 42)
Guido van Rossum34d19282007-08-09 01:03:29 +0000989 sys.stdin = io.StringIO(" 'whitespace'")
Guido van Rossuma88a0332007-02-26 16:59:55 +0000990 self.assertEqual(input(), " 'whitespace'")
Guido van Rossum34d19282007-08-09 01:03:29 +0000991 sys.stdin = io.StringIO()
Guido van Rossuma88a0332007-02-26 16:59:55 +0000992 self.assertRaises(EOFError, input)
993
994 del sys.stdout
995 self.assertRaises(RuntimeError, input, 'prompt')
996 del sys.stdin
997 self.assertRaises(RuntimeError, input, 'prompt')
998 finally:
999 sys.stdin = savestdin
1000 sys.stdout = savestdout
1001 fp.close()
1002 unlink(TESTFN)
1003
Walter Dörwald919497e2003-01-19 16:23:59 +00001004 def test_repr(self):
1005 self.assertEqual(repr(''), '\'\'')
1006 self.assertEqual(repr(0), '0')
Walter Dörwald919497e2003-01-19 16:23:59 +00001007 self.assertEqual(repr(()), '()')
1008 self.assertEqual(repr([]), '[]')
1009 self.assertEqual(repr({}), '{}')
1010 a = []
1011 a.append(a)
1012 self.assertEqual(repr(a), '[[...]]')
1013 a = {}
1014 a[0] = a
1015 self.assertEqual(repr(a), '{0: {...}}')
1016
1017 def test_round(self):
1018 self.assertEqual(round(0.0), 0.0)
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001019 self.assertEqual(type(round(0.0)), int)
Walter Dörwald919497e2003-01-19 16:23:59 +00001020 self.assertEqual(round(1.0), 1.0)
1021 self.assertEqual(round(10.0), 10.0)
1022 self.assertEqual(round(1000000000.0), 1000000000.0)
1023 self.assertEqual(round(1e20), 1e20)
1024
1025 self.assertEqual(round(-1.0), -1.0)
1026 self.assertEqual(round(-10.0), -10.0)
1027 self.assertEqual(round(-1000000000.0), -1000000000.0)
1028 self.assertEqual(round(-1e20), -1e20)
1029
1030 self.assertEqual(round(0.1), 0.0)
1031 self.assertEqual(round(1.1), 1.0)
1032 self.assertEqual(round(10.1), 10.0)
1033 self.assertEqual(round(1000000000.1), 1000000000.0)
1034
1035 self.assertEqual(round(-1.1), -1.0)
1036 self.assertEqual(round(-10.1), -10.0)
1037 self.assertEqual(round(-1000000000.1), -1000000000.0)
1038
1039 self.assertEqual(round(0.9), 1.0)
1040 self.assertEqual(round(9.9), 10.0)
1041 self.assertEqual(round(999999999.9), 1000000000.0)
1042
1043 self.assertEqual(round(-0.9), -1.0)
1044 self.assertEqual(round(-9.9), -10.0)
1045 self.assertEqual(round(-999999999.9), -1000000000.0)
1046
1047 self.assertEqual(round(-8.0, -1), -10.0)
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001048 self.assertEqual(type(round(-8.0, -1)), float)
1049
1050 self.assertEqual(type(round(-8.0, 0)), float)
1051 self.assertEqual(type(round(-8.0, 1)), float)
1052
1053 # Check even / odd rounding behaviour
1054 self.assertEqual(round(5.5), 6)
1055 self.assertEqual(round(6.5), 6)
1056 self.assertEqual(round(-5.5), -6)
1057 self.assertEqual(round(-6.5), -6)
1058
1059 # Check behavior on ints
1060 self.assertEqual(round(0), 0)
1061 self.assertEqual(round(8), 8)
1062 self.assertEqual(round(-8), -8)
1063 self.assertEqual(type(round(0)), int)
Mark Dickinson1124e712009-01-28 21:25:58 +00001064 self.assertEqual(type(round(-8, -1)), int)
1065 self.assertEqual(type(round(-8, 0)), int)
1066 self.assertEqual(type(round(-8, 1)), int)
Walter Dörwald919497e2003-01-19 16:23:59 +00001067
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001068 # test new kwargs
1069 self.assertEqual(round(number=-8.0, ndigits=-1), -10.0)
1070
Walter Dörwald919497e2003-01-19 16:23:59 +00001071 self.assertRaises(TypeError, round)
1072
Alex Martelliae211f92007-08-22 23:21:33 +00001073 # test generic rounding delegation for reals
1074 class TestRound:
1075 def __round__(self):
1076 return 23
1077
1078 class TestNoRound:
1079 pass
1080
1081 self.assertEqual(round(TestRound()), 23)
1082
1083 self.assertRaises(TypeError, round, 1, 2, 3)
1084 self.assertRaises(TypeError, round, TestNoRound())
1085
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001086 t = TestNoRound()
1087 t.__round__ = lambda *args: args
1088 self.assertRaises(TypeError, round, t)
1089 self.assertRaises(TypeError, round, t, 0)
1090
Mark Dickinsonad731b92009-11-09 17:12:30 +00001091 # Some versions of glibc for alpha have a bug that affects
1092 # float -> integer rounding (floor, ceil, rint, round) for
1093 # values in the range [2**52, 2**53). See:
1094 #
1095 # http://sources.redhat.com/bugzilla/show_bug.cgi?id=5350
1096 #
1097 # We skip this test on Linux/alpha if it would fail.
1098 linux_alpha = (platform.system().startswith('Linux') and
1099 platform.machine().startswith('alpha'))
1100 system_round_bug = round(5e15+1) != 5e15+1
1101 @unittest.skipIf(linux_alpha and system_round_bug,
1102 "test will fail; failure is probably due to a "
1103 "buggy system round function")
1104 def test_round_large(self):
1105 # Issue #1869: integral floats should remain unchanged
1106 self.assertEqual(round(5e15-1), 5e15-1)
1107 self.assertEqual(round(5e15), 5e15)
1108 self.assertEqual(round(5e15+1), 5e15+1)
1109 self.assertEqual(round(5e15+2), 5e15+2)
1110 self.assertEqual(round(5e15+3), 5e15+3)
1111
Walter Dörwald919497e2003-01-19 16:23:59 +00001112 def test_setattr(self):
Tim Petersf2715e02003-02-19 02:35:07 +00001113 setattr(sys, 'spam', 1)
1114 self.assertEqual(sys.spam, 1)
1115 self.assertRaises(TypeError, setattr, sys, 1, 'spam')
1116 self.assertRaises(TypeError, setattr)
Walter Dörwald919497e2003-01-19 16:23:59 +00001117
Walter Dörwald919497e2003-01-19 16:23:59 +00001118
Alex Martellia70b1912003-04-22 08:12:33 +00001119 def test_sum(self):
1120 self.assertEqual(sum([]), 0)
Guido van Rossum805365e2007-05-07 22:24:25 +00001121 self.assertEqual(sum(list(range(2,8))), 27)
1122 self.assertEqual(sum(iter(list(range(2,8)))), 27)
Alex Martellia70b1912003-04-22 08:12:33 +00001123 self.assertEqual(sum(Squares(10)), 285)
1124 self.assertEqual(sum(iter(Squares(10))), 285)
1125 self.assertEqual(sum([[1], [2], [3]], []), [1, 2, 3])
1126
1127 self.assertRaises(TypeError, sum)
1128 self.assertRaises(TypeError, sum, 42)
1129 self.assertRaises(TypeError, sum, ['a', 'b', 'c'])
1130 self.assertRaises(TypeError, sum, ['a', 'b', 'c'], '')
1131 self.assertRaises(TypeError, sum, [[1], [2], [3]])
1132 self.assertRaises(TypeError, sum, [{2:3}])
1133 self.assertRaises(TypeError, sum, [{2:3}]*2, {2:3})
1134
1135 class BadSeq:
1136 def __getitem__(self, index):
1137 raise ValueError
1138 self.assertRaises(ValueError, sum, BadSeq())
1139
Mark Dickinson3a22b472009-10-17 21:48:16 +00001140 empty = []
1141 sum(([x] for x in range(10)), empty)
1142 self.assertEqual(empty, [])
1143
Walter Dörwald919497e2003-01-19 16:23:59 +00001144 def test_type(self):
1145 self.assertEqual(type(''), type('123'))
1146 self.assertNotEqual(type(''), type(()))
1147
Guido van Rossumfee7b932005-01-16 00:21:28 +00001148 # We don't want self in vars(), so these are static methods
1149
1150 @staticmethod
Walter Dörwald919497e2003-01-19 16:23:59 +00001151 def get_vars_f0():
1152 return vars()
Walter Dörwald919497e2003-01-19 16:23:59 +00001153
Guido van Rossumfee7b932005-01-16 00:21:28 +00001154 @staticmethod
Walter Dörwald919497e2003-01-19 16:23:59 +00001155 def get_vars_f2():
1156 BuiltinTest.get_vars_f0()
1157 a = 1
1158 b = 2
1159 return vars()
Walter Dörwald919497e2003-01-19 16:23:59 +00001160
Mark Dickinsonfb3dc942010-05-25 19:06:24 +00001161 class C_get_vars(object):
1162 def getDict(self):
1163 return {'a':2}
1164 __dict__ = property(fget=getDict)
1165
Walter Dörwald919497e2003-01-19 16:23:59 +00001166 def test_vars(self):
Raymond Hettingera690a992003-11-16 16:17:49 +00001167 self.assertEqual(set(vars()), set(dir()))
Raymond Hettingera690a992003-11-16 16:17:49 +00001168 self.assertEqual(set(vars(sys)), set(dir(sys)))
Walter Dörwald919497e2003-01-19 16:23:59 +00001169 self.assertEqual(self.get_vars_f0(), {})
1170 self.assertEqual(self.get_vars_f2(), {'a': 1, 'b': 2})
1171 self.assertRaises(TypeError, vars, 42, 42)
1172 self.assertRaises(TypeError, vars, 42)
Mark Dickinsonfb3dc942010-05-25 19:06:24 +00001173 self.assertEqual(vars(self.C_get_vars()), {'a':2})
Walter Dörwald919497e2003-01-19 16:23:59 +00001174
1175 def test_zip(self):
1176 a = (1, 2, 3)
1177 b = (4, 5, 6)
1178 t = [(1, 4), (2, 5), (3, 6)]
Guido van Rossum801f0d72006-08-24 19:48:10 +00001179 self.assertEqual(list(zip(a, b)), t)
Walter Dörwald919497e2003-01-19 16:23:59 +00001180 b = [4, 5, 6]
Guido van Rossum801f0d72006-08-24 19:48:10 +00001181 self.assertEqual(list(zip(a, b)), t)
Walter Dörwald919497e2003-01-19 16:23:59 +00001182 b = (4, 5, 6, 7)
Guido van Rossum801f0d72006-08-24 19:48:10 +00001183 self.assertEqual(list(zip(a, b)), t)
Walter Dörwald919497e2003-01-19 16:23:59 +00001184 class I:
1185 def __getitem__(self, i):
1186 if i < 0 or i > 2: raise IndexError
1187 return i + 4
Guido van Rossum801f0d72006-08-24 19:48:10 +00001188 self.assertEqual(list(zip(a, I())), t)
1189 self.assertEqual(list(zip()), [])
1190 self.assertEqual(list(zip(*[])), [])
Walter Dörwald919497e2003-01-19 16:23:59 +00001191 self.assertRaises(TypeError, zip, None)
1192 class G:
1193 pass
1194 self.assertRaises(TypeError, zip, a, G())
Alexander Belopolskye29e6bf2010-08-16 18:55:46 +00001195 self.assertRaises(RuntimeError, zip, a, TestFailingIter())
Walter Dörwald919497e2003-01-19 16:23:59 +00001196
1197 # Make sure zip doesn't try to allocate a billion elements for the
1198 # result list when one of its arguments doesn't say how long it is.
1199 # A MemoryError is the most likely failure mode.
1200 class SequenceWithoutALength:
1201 def __getitem__(self, i):
1202 if i == 5:
1203 raise IndexError
1204 else:
1205 return i
1206 self.assertEqual(
Guido van Rossum805365e2007-05-07 22:24:25 +00001207 list(zip(SequenceWithoutALength(), range(2**30))),
Walter Dörwald919497e2003-01-19 16:23:59 +00001208 list(enumerate(range(5)))
1209 )
1210
1211 class BadSeq:
1212 def __getitem__(self, i):
1213 if i == 5:
1214 raise ValueError
1215 else:
1216 return i
Guido van Rossum801f0d72006-08-24 19:48:10 +00001217 self.assertRaises(ValueError, list, zip(BadSeq(), BadSeq()))
Walter Dörwald919497e2003-01-19 16:23:59 +00001218
Eric Smithe4d63172010-09-13 20:48:43 +00001219 def test_format(self):
1220 # Test the basic machinery of the format() builtin. Don't test
1221 # the specifics of the various formatters
1222 self.assertEqual(format(3, ''), '3')
1223
1224 # Returns some classes to use for various tests. There's
1225 # an old-style version, and a new-style version
1226 def classes_new():
1227 class A(object):
1228 def __init__(self, x):
1229 self.x = x
1230 def __format__(self, format_spec):
1231 return str(self.x) + format_spec
1232 class DerivedFromA(A):
1233 pass
1234
1235 class Simple(object): pass
1236 class DerivedFromSimple(Simple):
1237 def __init__(self, x):
1238 self.x = x
1239 def __format__(self, format_spec):
1240 return str(self.x) + format_spec
1241 class DerivedFromSimple2(DerivedFromSimple): pass
1242 return A, DerivedFromA, DerivedFromSimple, DerivedFromSimple2
1243
1244 def class_test(A, DerivedFromA, DerivedFromSimple, DerivedFromSimple2):
1245 self.assertEqual(format(A(3), 'spec'), '3spec')
1246 self.assertEqual(format(DerivedFromA(4), 'spec'), '4spec')
1247 self.assertEqual(format(DerivedFromSimple(5), 'abc'), '5abc')
1248 self.assertEqual(format(DerivedFromSimple2(10), 'abcdef'),
1249 '10abcdef')
1250
1251 class_test(*classes_new())
1252
1253 def empty_format_spec(value):
1254 # test that:
1255 # format(x, '') == str(x)
1256 # format(x) == str(x)
1257 self.assertEqual(format(value, ""), str(value))
1258 self.assertEqual(format(value), str(value))
1259
1260 # for builtin types, format(x, "") == str(x)
1261 empty_format_spec(17**13)
1262 empty_format_spec(1.0)
1263 empty_format_spec(3.1415e104)
1264 empty_format_spec(-3.1415e104)
1265 empty_format_spec(3.1415e-104)
1266 empty_format_spec(-3.1415e-104)
1267 empty_format_spec(object)
1268 empty_format_spec(None)
1269
1270 # TypeError because self.__format__ returns the wrong type
1271 class BadFormatResult:
1272 def __format__(self, format_spec):
1273 return 1.0
1274 self.assertRaises(TypeError, format, BadFormatResult(), "")
1275
1276 # TypeError because format_spec is not unicode or str
1277 self.assertRaises(TypeError, format, object(), 4)
1278 self.assertRaises(TypeError, format, object(), object())
1279
1280 # tests for object.__format__ really belong elsewhere, but
1281 # there's no good place to put them
1282 x = object().__format__('')
1283 self.assertTrue(x.startswith('<object object at'))
1284
1285 # first argument to object.__format__ must be string
1286 self.assertRaises(TypeError, object().__format__, 3)
1287 self.assertRaises(TypeError, object().__format__, object())
1288 self.assertRaises(TypeError, object().__format__, None)
1289
1290 # --------------------------------------------------------------------
1291 # Issue #7994: object.__format__ with a non-empty format string is
Eric V. Smithb9cd3532011-03-12 10:08:48 -05001292 # deprecated
Eric Smithe4d63172010-09-13 20:48:43 +00001293 def test_deprecated_format_string(obj, fmt_str, should_raise_warning):
1294 with warnings.catch_warnings(record=True) as w:
Eric V. Smithb9cd3532011-03-12 10:08:48 -05001295 warnings.simplefilter("always", DeprecationWarning)
Eric Smithe4d63172010-09-13 20:48:43 +00001296 format(obj, fmt_str)
1297 if should_raise_warning:
1298 self.assertEqual(len(w), 1)
Eric V. Smithb9cd3532011-03-12 10:08:48 -05001299 self.assertIsInstance(w[0].message, DeprecationWarning)
Eric Smithe4d63172010-09-13 20:48:43 +00001300 self.assertIn('object.__format__ with a non-empty format '
1301 'string', str(w[0].message))
1302 else:
1303 self.assertEqual(len(w), 0)
1304
1305 fmt_strs = ['', 's']
1306
1307 class A:
1308 def __format__(self, fmt_str):
1309 return format('', fmt_str)
1310
1311 for fmt_str in fmt_strs:
1312 test_deprecated_format_string(A(), fmt_str, False)
1313
1314 class B:
1315 pass
1316
1317 class C(object):
1318 pass
1319
1320 for cls in [object, B, C]:
1321 for fmt_str in fmt_strs:
1322 test_deprecated_format_string(cls(), fmt_str, len(fmt_str) != 0)
1323 # --------------------------------------------------------------------
1324
1325 # make sure we can take a subclass of str as a format spec
1326 class DerivedFromStr(str): pass
1327 self.assertEqual(format(0, DerivedFromStr('10')), ' 0')
1328
Christian Heimes90c3d9b2008-02-23 13:18:03 +00001329 def test_bin(self):
1330 self.assertEqual(bin(0), '0b0')
1331 self.assertEqual(bin(1), '0b1')
1332 self.assertEqual(bin(-1), '-0b1')
1333 self.assertEqual(bin(2**65), '0b1' + '0' * 65)
1334 self.assertEqual(bin(2**65-1), '0b' + '1' * 65)
1335 self.assertEqual(bin(-(2**65)), '-0b1' + '0' * 65)
1336 self.assertEqual(bin(-(2**65-1)), '-0b' + '1' * 65)
1337
Georg Brandl953152f2009-07-22 12:03:59 +00001338 def test_bytearray_translate(self):
1339 x = bytearray(b"abc")
1340 self.assertRaises(ValueError, x.translate, b"1", 1)
1341 self.assertRaises(TypeError, x.translate, b"1"*256, 1)
1342
Raymond Hettinger64958a12003-12-17 20:43:33 +00001343class TestSorted(unittest.TestCase):
1344
1345 def test_basic(self):
Guido van Rossum805365e2007-05-07 22:24:25 +00001346 data = list(range(100))
Raymond Hettinger64958a12003-12-17 20:43:33 +00001347 copy = data[:]
1348 random.shuffle(copy)
1349 self.assertEqual(data, sorted(copy))
1350 self.assertNotEqual(data, copy)
1351
1352 data.reverse()
1353 random.shuffle(copy)
Raymond Hettinger64958a12003-12-17 20:43:33 +00001354 self.assertEqual(data, sorted(copy, key=lambda x: -x))
1355 self.assertNotEqual(data, copy)
1356 random.shuffle(copy)
1357 self.assertEqual(data, sorted(copy, reverse=1))
1358 self.assertNotEqual(data, copy)
1359
1360 def test_inputtypes(self):
1361 s = 'abracadabra'
Walter Dörwald1f5947b2007-05-22 16:52:54 +00001362 types = [list, tuple, str]
Walter Dörwald4e41a4b2005-08-03 17:09:04 +00001363 for T in types:
Raymond Hettinger64958a12003-12-17 20:43:33 +00001364 self.assertEqual(sorted(s), sorted(T(s)))
1365
Walter Dörwald1f5947b2007-05-22 16:52:54 +00001366 s = ''.join(set(s)) # unique letters only
1367 types = [str, set, frozenset, list, tuple, dict.fromkeys]
Walter Dörwald4e41a4b2005-08-03 17:09:04 +00001368 for T in types:
Raymond Hettinger64958a12003-12-17 20:43:33 +00001369 self.assertEqual(sorted(s), sorted(T(s)))
1370
1371 def test_baddecorator(self):
1372 data = 'The quick Brown fox Jumped over The lazy Dog'.split()
1373 self.assertRaises(TypeError, sorted, data, None, lambda x,y: 0)
1374
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001375def test_main(verbose=None):
1376 test_classes = (BuiltinTest, TestSorted)
1377
1378 run_unittest(*test_classes)
1379
1380 # verify reference counting
1381 if verbose and hasattr(sys, "gettotalrefcount"):
1382 import gc
1383 counts = [None] * 5
Guido van Rossum805365e2007-05-07 22:24:25 +00001384 for i in range(len(counts)):
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001385 run_unittest(*test_classes)
1386 gc.collect()
1387 counts[i] = sys.gettotalrefcount()
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001388 print(counts)
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001389
Walter Dörwald919497e2003-01-19 16:23:59 +00001390
1391if __name__ == "__main__":
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001392 test_main(verbose=True)