blob: 4e09ca57061cfef7bd4a08689042852f1e1174dc [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
9import types
10import builtins
11import random
Brett Cannon77628992010-03-20 20:59:33 +000012from test.support import fcmp, TESTFN, unlink, run_unittest, check_warnings
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +000013from operator import neg
Guido van Rossum3bead091992-01-27 17:00:37 +000014
Guido van Rossum3bead091992-01-27 17:00:37 +000015
Walter Dörwald919497e2003-01-19 16:23:59 +000016class Squares:
Guido van Rossum3bead091992-01-27 17:00:37 +000017
Walter Dörwald919497e2003-01-19 16:23:59 +000018 def __init__(self, max):
19 self.max = max
20 self.sofar = []
21
22 def __len__(self): return len(self.sofar)
23
24 def __getitem__(self, i):
25 if not 0 <= i < self.max: raise IndexError
26 n = len(self.sofar)
27 while n <= i:
28 self.sofar.append(n*n)
29 n += 1
30 return self.sofar[i]
31
32class StrSquares:
33
34 def __init__(self, max):
35 self.max = max
36 self.sofar = []
37
38 def __len__(self):
39 return len(self.sofar)
40
41 def __getitem__(self, i):
42 if not 0 <= i < self.max:
43 raise IndexError
44 n = len(self.sofar)
45 while n <= i:
46 self.sofar.append(str(n*n))
47 n += 1
48 return self.sofar[i]
49
50class BitBucket:
51 def write(self, line):
52 pass
53
Facundo Batista2336bdd2008-01-19 19:12:01 +000054test_conv_no_sign = [
Walter Dörwald919497e2003-01-19 16:23:59 +000055 ('0', 0),
56 ('1', 1),
57 ('9', 9),
58 ('10', 10),
59 ('99', 99),
60 ('100', 100),
61 ('314', 314),
62 (' 314', 314),
63 ('314 ', 314),
64 (' \t\t 314 \t\t ', 314),
Christian Heimesa37d4c62007-12-04 23:02:19 +000065 (repr(sys.maxsize), sys.maxsize),
Walter Dörwald919497e2003-01-19 16:23:59 +000066 (' 1x', ValueError),
67 (' 1 ', 1),
68 (' 1\02 ', ValueError),
69 ('', ValueError),
70 (' ', ValueError),
Walter Dörwald1f5947b2007-05-22 16:52:54 +000071 (' \t\t ', ValueError),
Guido van Rossumef87d6e2007-05-02 19:09:54 +000072 (str(b'\u0663\u0661\u0664 ','raw-unicode-escape'), 314),
Guido van Rossum84fc66d2007-05-03 17:18:26 +000073 (chr(0x200), ValueError),
Walter Dörwald919497e2003-01-19 16:23:59 +000074]
75
Facundo Batista2336bdd2008-01-19 19:12:01 +000076test_conv_sign = [
77 ('0', 0),
78 ('1', 1),
79 ('9', 9),
80 ('10', 10),
81 ('99', 99),
82 ('100', 100),
83 ('314', 314),
84 (' 314', ValueError),
85 ('314 ', 314),
86 (' \t\t 314 \t\t ', ValueError),
87 (repr(sys.maxsize), sys.maxsize),
88 (' 1x', ValueError),
89 (' 1 ', ValueError),
90 (' 1\02 ', ValueError),
91 ('', ValueError),
92 (' ', ValueError),
93 (' \t\t ', ValueError),
94 (str(b'\u0663\u0661\u0664 ','raw-unicode-escape'), 314),
95 (chr(0x200), ValueError),
96]
97
Raymond Hettinger96229b12005-03-11 06:49:40 +000098class TestFailingBool:
Jack Diederich4dafcc42006-11-28 19:15:13 +000099 def __bool__(self):
Raymond Hettinger96229b12005-03-11 06:49:40 +0000100 raise RuntimeError
101
102class TestFailingIter:
103 def __iter__(self):
104 raise RuntimeError
105
Walter Dörwald919497e2003-01-19 16:23:59 +0000106class BuiltinTest(unittest.TestCase):
107
108 def test_import(self):
109 __import__('sys')
110 __import__('time')
111 __import__('string')
Guido van Rossumd8faa362007-04-27 19:54:29 +0000112 __import__(name='sys')
113 __import__(name='time', level=0)
Walter Dörwald919497e2003-01-19 16:23:59 +0000114 self.assertRaises(ImportError, __import__, 'spamspam')
115 self.assertRaises(TypeError, __import__, 1, 2, 3, 4)
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000116 self.assertRaises(ValueError, __import__, '')
Guido van Rossumd8faa362007-04-27 19:54:29 +0000117 self.assertRaises(TypeError, __import__, 'sys', name='sys')
Walter Dörwald919497e2003-01-19 16:23:59 +0000118
119 def test_abs(self):
120 # int
121 self.assertEqual(abs(0), 0)
122 self.assertEqual(abs(1234), 1234)
123 self.assertEqual(abs(-1234), 1234)
Christian Heimesa37d4c62007-12-04 23:02:19 +0000124 self.assertTrue(abs(-sys.maxsize-1) > 0)
Walter Dörwald919497e2003-01-19 16:23:59 +0000125 # float
126 self.assertEqual(abs(0.0), 0.0)
127 self.assertEqual(abs(3.14), 3.14)
128 self.assertEqual(abs(-3.14), 3.14)
Walter Dörwald919497e2003-01-19 16:23:59 +0000129 # str
130 self.assertRaises(TypeError, abs, 'a')
Mark Dickinsonfb3dc942010-05-25 19:06:24 +0000131 # bool
132 self.assertEqual(abs(True), 1)
133 self.assertEqual(abs(False), 0)
134 # other
135 self.assertRaises(TypeError, abs)
136 self.assertRaises(TypeError, abs, None)
137 class AbsClass(object):
138 def __abs__(self):
139 return -5
140 self.assertEqual(abs(AbsClass()), -5)
Walter Dörwald919497e2003-01-19 16:23:59 +0000141
Raymond Hettinger96229b12005-03-11 06:49:40 +0000142 def test_all(self):
143 self.assertEqual(all([2, 4, 6]), True)
144 self.assertEqual(all([2, None, 6]), False)
145 self.assertRaises(RuntimeError, all, [2, TestFailingBool(), 6])
146 self.assertRaises(RuntimeError, all, TestFailingIter())
147 self.assertRaises(TypeError, all, 10) # Non-iterable
148 self.assertRaises(TypeError, all) # No args
149 self.assertRaises(TypeError, all, [2, 4, 6], []) # Too many args
150 self.assertEqual(all([]), True) # Empty iterator
151 S = [50, 60]
152 self.assertEqual(all(x > 42 for x in S), True)
153 S = [50, 40, 60]
154 self.assertEqual(all(x > 42 for x in S), False)
155
156 def test_any(self):
157 self.assertEqual(any([None, None, None]), False)
158 self.assertEqual(any([None, 4, None]), True)
159 self.assertRaises(RuntimeError, any, [None, TestFailingBool(), 6])
160 self.assertRaises(RuntimeError, all, TestFailingIter())
161 self.assertRaises(TypeError, any, 10) # Non-iterable
162 self.assertRaises(TypeError, any) # No args
163 self.assertRaises(TypeError, any, [2, 4, 6], []) # Too many args
164 self.assertEqual(any([]), False) # Empty iterator
165 S = [40, 60, 30]
166 self.assertEqual(any(x > 42 for x in S), True)
167 S = [10, 20, 30]
168 self.assertEqual(any(x > 42 for x in S), False)
169
Georg Brandl559e5d72008-06-11 18:37:52 +0000170 def test_ascii(self):
171 self.assertEqual(ascii(''), '\'\'')
172 self.assertEqual(ascii(0), '0')
Georg Brandl559e5d72008-06-11 18:37:52 +0000173 self.assertEqual(ascii(()), '()')
174 self.assertEqual(ascii([]), '[]')
175 self.assertEqual(ascii({}), '{}')
176 a = []
177 a.append(a)
178 self.assertEqual(ascii(a), '[[...]]')
179 a = {}
180 a[0] = a
181 self.assertEqual(ascii(a), '{0: {...}}')
182
Thomas Wouters89f507f2006-12-13 04:49:30 +0000183 def test_neg(self):
Christian Heimesa37d4c62007-12-04 23:02:19 +0000184 x = -sys.maxsize-1
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000185 self.assertTrue(isinstance(x, int))
Christian Heimesa37d4c62007-12-04 23:02:19 +0000186 self.assertEqual(-x, sys.maxsize+1)
Thomas Wouters89f507f2006-12-13 04:49:30 +0000187
Guido van Rossumd59da4b2007-05-22 18:11:13 +0000188 # XXX(nnorwitz): This test case for callable should probably be removed.
Walter Dörwald919497e2003-01-19 16:23:59 +0000189 def test_callable(self):
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000190 self.assertTrue(hasattr(len, '__call__'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000191 def f(): pass
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000192 self.assertTrue(hasattr(f, '__call__'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000193 class C:
194 def meth(self): pass
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000195 self.assertTrue(hasattr(C, '__call__'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000196 x = C()
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000197 self.assertTrue(hasattr(x.meth, '__call__'))
198 self.assertTrue(not hasattr(x, '__call__'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000199 class D(C):
200 def __call__(self): pass
201 y = D()
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000202 self.assertTrue(hasattr(y, '__call__'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000203 y()
204
205 def test_chr(self):
206 self.assertEqual(chr(32), ' ')
207 self.assertEqual(chr(65), 'A')
208 self.assertEqual(chr(97), 'a')
209 self.assertEqual(chr(0xff), '\xff')
Guido van Rossum572dbf82007-04-27 23:53:51 +0000210 self.assertRaises(ValueError, chr, 1<<24)
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000211 self.assertEqual(chr(sys.maxunicode),
212 str(('\\U%08x' % (sys.maxunicode)).encode("ascii"),
213 'unicode-escape'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000214 self.assertRaises(TypeError, chr)
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000215 self.assertEqual(chr(0x0000FFFF), "\U0000FFFF")
216 self.assertEqual(chr(0x00010000), "\U00010000")
217 self.assertEqual(chr(0x00010001), "\U00010001")
218 self.assertEqual(chr(0x000FFFFE), "\U000FFFFE")
219 self.assertEqual(chr(0x000FFFFF), "\U000FFFFF")
220 self.assertEqual(chr(0x00100000), "\U00100000")
221 self.assertEqual(chr(0x00100001), "\U00100001")
222 self.assertEqual(chr(0x0010FFFE), "\U0010FFFE")
223 self.assertEqual(chr(0x0010FFFF), "\U0010FFFF")
224 self.assertRaises(ValueError, chr, -1)
225 self.assertRaises(ValueError, chr, 0x00110000)
Amaury Forgeot d'Arc7888d082008-08-01 01:06:32 +0000226 self.assertRaises((OverflowError, ValueError), chr, 2**32)
Walter Dörwald919497e2003-01-19 16:23:59 +0000227
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000228 def test_cmp(self):
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000229 self.assertTrue(not hasattr(builtins, "cmp"))
Walter Dörwald919497e2003-01-19 16:23:59 +0000230
Walter Dörwald919497e2003-01-19 16:23:59 +0000231 def test_compile(self):
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000232 compile('print(1)\n', '', 'exec')
Amaury Forgeot d'Arcaf593462007-11-22 20:53:01 +0000233 bom = b'\xef\xbb\xbf'
234 compile(bom + b'print(1)\n', '', 'exec')
Guido van Rossumd8faa362007-04-27 19:54:29 +0000235 compile(source='pass', filename='?', mode='exec')
236 compile(dont_inherit=0, filename='tmp', source='0', mode='eval')
237 compile('pass', '?', dont_inherit=1, mode='exec')
Benjamin Peterson60320cb2008-09-26 21:49:22 +0000238 compile(memoryview(b"text"), "name", "exec")
Walter Dörwald919497e2003-01-19 16:23:59 +0000239 self.assertRaises(TypeError, compile)
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000240 self.assertRaises(ValueError, compile, 'print(42)\n', '<string>', 'badmode')
241 self.assertRaises(ValueError, compile, 'print(42)\n', '<string>', 'single', 0xff)
Neal Norwitzfcf44352005-11-27 20:37:43 +0000242 self.assertRaises(TypeError, compile, chr(0), 'f', 'exec')
Guido van Rossumd8faa362007-04-27 19:54:29 +0000243 self.assertRaises(TypeError, compile, 'pass', '?', 'exec',
244 mode='eval', source='0', filename='tmp')
Walter Dörwald1f5947b2007-05-22 16:52:54 +0000245 compile('print("\xe5")\n', '', 'exec')
246 self.assertRaises(TypeError, compile, chr(0), 'f', 'exec')
247 self.assertRaises(ValueError, compile, str('a = 1'), 'f', 'bad')
Guido van Rossumd8faa362007-04-27 19:54:29 +0000248
Walter Dörwald919497e2003-01-19 16:23:59 +0000249 def test_delattr(self):
Walter Dörwald919497e2003-01-19 16:23:59 +0000250 sys.spam = 1
251 delattr(sys, 'spam')
252 self.assertRaises(TypeError, delattr)
253
254 def test_dir(self):
Georg Brandle32b4222007-03-10 22:13:27 +0000255 # dir(wrong number of arguments)
Walter Dörwald919497e2003-01-19 16:23:59 +0000256 self.assertRaises(TypeError, dir, 42, 42)
257
Georg Brandle32b4222007-03-10 22:13:27 +0000258 # dir() - local scope
259 local_var = 1
Benjamin Peterson577473f2010-01-19 00:09:57 +0000260 self.assertIn('local_var', dir())
Georg Brandle32b4222007-03-10 22:13:27 +0000261
262 # dir(module)
Benjamin Peterson577473f2010-01-19 00:09:57 +0000263 self.assertIn('exit', dir(sys))
Georg Brandle32b4222007-03-10 22:13:27 +0000264
265 # dir(module_with_invalid__dict__)
Georg Brandle32b4222007-03-10 22:13:27 +0000266 class Foo(types.ModuleType):
267 __dict__ = 8
268 f = Foo("foo")
269 self.assertRaises(TypeError, dir, f)
270
271 # dir(type)
Benjamin Peterson577473f2010-01-19 00:09:57 +0000272 self.assertIn("strip", dir(str))
273 self.assertNotIn("__mro__", dir(str))
Georg Brandle32b4222007-03-10 22:13:27 +0000274
275 # dir(obj)
276 class Foo(object):
277 def __init__(self):
278 self.x = 7
279 self.y = 8
280 self.z = 9
281 f = Foo()
Benjamin Peterson577473f2010-01-19 00:09:57 +0000282 self.assertIn("y", dir(f))
Georg Brandle32b4222007-03-10 22:13:27 +0000283
284 # dir(obj_no__dict__)
285 class Foo(object):
286 __slots__ = []
287 f = Foo()
Benjamin Peterson577473f2010-01-19 00:09:57 +0000288 self.assertIn("__repr__", dir(f))
Georg Brandle32b4222007-03-10 22:13:27 +0000289
290 # dir(obj_no__class__with__dict__)
291 # (an ugly trick to cause getattr(f, "__class__") to fail)
292 class Foo(object):
293 __slots__ = ["__class__", "__dict__"]
294 def __init__(self):
295 self.bar = "wow"
296 f = Foo()
Benjamin Peterson577473f2010-01-19 00:09:57 +0000297 self.assertNotIn("__repr__", dir(f))
298 self.assertIn("bar", dir(f))
Georg Brandle32b4222007-03-10 22:13:27 +0000299
300 # dir(obj_using __dir__)
301 class Foo(object):
302 def __dir__(self):
303 return ["kan", "ga", "roo"]
304 f = Foo()
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000305 self.assertTrue(dir(f) == ["ga", "kan", "roo"])
Georg Brandle32b4222007-03-10 22:13:27 +0000306
307 # dir(obj__dir__not_list)
308 class Foo(object):
309 def __dir__(self):
310 return 7
311 f = Foo()
312 self.assertRaises(TypeError, dir, f)
313
Collin Winter3eed7652007-08-14 17:53:54 +0000314 # dir(traceback)
315 try:
316 raise IndexError
317 except:
318 self.assertEqual(len(dir(sys.exc_info()[2])), 4)
319
320
Walter Dörwald919497e2003-01-19 16:23:59 +0000321 def test_divmod(self):
322 self.assertEqual(divmod(12, 7), (1, 5))
323 self.assertEqual(divmod(-12, 7), (-2, 2))
324 self.assertEqual(divmod(12, -7), (-2, -2))
325 self.assertEqual(divmod(-12, -7), (1, -5))
326
Mark Dickinson5c2db372009-12-05 20:28:34 +0000327 self.assertEqual(divmod(-sys.maxsize-1, -1), (sys.maxsize+1, 0))
Raymond Hettinger5ea7e312004-09-30 07:47:20 +0000328
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000329 self.assertTrue(not fcmp(divmod(3.25, 1.0), (3.0, 0.25)))
330 self.assertTrue(not fcmp(divmod(-3.25, 1.0), (-4.0, 0.75)))
331 self.assertTrue(not fcmp(divmod(3.25, -1.0), (-4.0, -0.75)))
332 self.assertTrue(not fcmp(divmod(-3.25, -1.0), (3.0, -0.25)))
Walter Dörwald919497e2003-01-19 16:23:59 +0000333
334 self.assertRaises(TypeError, divmod)
335
336 def test_eval(self):
337 self.assertEqual(eval('1+1'), 2)
338 self.assertEqual(eval(' 1+1\n'), 2)
339 globals = {'a': 1, 'b': 2}
340 locals = {'b': 200, 'c': 300}
341 self.assertEqual(eval('a', globals) , 1)
342 self.assertEqual(eval('a', globals, locals), 1)
343 self.assertEqual(eval('b', globals, locals), 200)
344 self.assertEqual(eval('c', globals, locals), 300)
Walter Dörwald919497e2003-01-19 16:23:59 +0000345 globals = {'a': 1, 'b': 2}
346 locals = {'b': 200, 'c': 300}
Amaury Forgeot d'Arcaf593462007-11-22 20:53:01 +0000347 bom = b'\xef\xbb\xbf'
348 self.assertEqual(eval(bom + b'a', globals, locals), 1)
Walter Dörwald1f5947b2007-05-22 16:52:54 +0000349 self.assertEqual(eval('"\xe5"', globals), "\xe5")
Walter Dörwald919497e2003-01-19 16:23:59 +0000350 self.assertRaises(TypeError, eval)
351 self.assertRaises(TypeError, eval, ())
Amaury Forgeot d'Arcaf593462007-11-22 20:53:01 +0000352 self.assertRaises(SyntaxError, eval, bom[:2] + b'a')
Walter Dörwald919497e2003-01-19 16:23:59 +0000353
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000354 def test_general_eval(self):
355 # Tests that general mappings can be used for the locals argument
356
357 class M:
358 "Test mapping interface versus possible calls from eval()."
359 def __getitem__(self, key):
360 if key == 'a':
361 return 12
362 raise KeyError
Guido van Rossumcd70eee2007-02-11 18:53:00 +0000363 def keys(self):
364 return list('xyz')
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000365
366 m = M()
367 g = globals()
368 self.assertEqual(eval('a', g, m), 12)
369 self.assertRaises(NameError, eval, 'b', g, m)
370 self.assertEqual(eval('dir()', g, m), list('xyz'))
371 self.assertEqual(eval('globals()', g, m), g)
372 self.assertEqual(eval('locals()', g, m), m)
Raymond Hettinger513ffe82004-07-06 13:44:41 +0000373 self.assertRaises(TypeError, eval, 'a', m)
Raymond Hettinger66bd2332004-08-02 08:30:07 +0000374 class A:
375 "Non-mapping"
376 pass
377 m = A()
378 self.assertRaises(TypeError, eval, 'a', g, m)
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000379
380 # Verify that dict subclasses work as well
381 class D(dict):
382 def __getitem__(self, key):
383 if key == 'a':
384 return 12
385 return dict.__getitem__(self, key)
Guido van Rossumcd70eee2007-02-11 18:53:00 +0000386 def keys(self):
387 return list('xyz')
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000388
389 d = D()
390 self.assertEqual(eval('a', g, d), 12)
391 self.assertRaises(NameError, eval, 'b', g, d)
392 self.assertEqual(eval('dir()', g, d), list('xyz'))
393 self.assertEqual(eval('globals()', g, d), g)
394 self.assertEqual(eval('locals()', g, d), d)
395
396 # Verify locals stores (used by list comps)
397 eval('[locals() for i in (2,3)]', g, d)
Raymond Hettingerf80680d2008-02-06 00:07:11 +0000398 eval('[locals() for i in (2,3)]', g, collections.UserDict())
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000399
400 class SpreadSheet:
401 "Sample application showing nested, calculated lookups."
402 _cells = {}
403 def __setitem__(self, key, formula):
404 self._cells[key] = formula
Thomas Wouters73e5a5b2006-06-08 15:35:45 +0000405 def __getitem__(self, key):
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000406 return eval(self._cells[key], globals(), self)
407
408 ss = SpreadSheet()
409 ss['a1'] = '5'
410 ss['a2'] = 'a1*6'
411 ss['a3'] = 'a2*7'
412 self.assertEqual(ss['a3'], 210)
413
Raymond Hettinger2a7dede2004-08-07 04:55:30 +0000414 # Verify that dir() catches a non-list returned by eval
415 # SF bug #1004669
416 class C:
417 def __getitem__(self, item):
418 raise KeyError(item)
Guido van Rossumcd70eee2007-02-11 18:53:00 +0000419 def keys(self):
420 return 1 # used to be 'a' but that's no longer an error
Raymond Hettinger2a7dede2004-08-07 04:55:30 +0000421 self.assertRaises(TypeError, eval, 'dir()', globals(), C())
422
Georg Brandl7cae87c2006-09-06 06:51:57 +0000423 def test_exec(self):
424 g = {}
425 exec('z = 1', g)
426 if '__builtins__' in g:
427 del g['__builtins__']
428 self.assertEqual(g, {'z': 1})
429
Guido van Rossumef87d6e2007-05-02 19:09:54 +0000430 exec('z = 1+1', g)
Georg Brandl7cae87c2006-09-06 06:51:57 +0000431 if '__builtins__' in g:
432 del g['__builtins__']
433 self.assertEqual(g, {'z': 2})
434 g = {}
435 l = {}
436
Brett Cannon77628992010-03-20 20:59:33 +0000437 with check_warnings():
438 warnings.filterwarnings("ignore", "global statement",
439 module="<string>")
440 exec('global a; a = 1; b = 2', g, l)
Georg Brandl7cae87c2006-09-06 06:51:57 +0000441 if '__builtins__' in g:
442 del g['__builtins__']
443 if '__builtins__' in l:
444 del l['__builtins__']
445 self.assertEqual((g, l), ({'a': 1}, {'b': 2}))
446
Amaury Forgeot d'Arc9ed77352008-04-04 23:25:27 +0000447 def test_exec_redirected(self):
448 savestdout = sys.stdout
449 sys.stdout = None # Whatever that cannot flush()
450 try:
451 # Used to raise SystemError('error return without exception set')
452 exec('a')
453 except NameError:
454 pass
455 finally:
456 sys.stdout = savestdout
457
Walter Dörwald919497e2003-01-19 16:23:59 +0000458 def test_filter(self):
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000459 self.assertEqual(list(filter(lambda c: 'a' <= c <= 'z', 'Hello World')), list('elloorld'))
460 self.assertEqual(list(filter(None, [1, 'hello', [], [3], '', None, 9, 0])), [1, 'hello', [3], 9])
461 self.assertEqual(list(filter(lambda x: x > 0, [1, -3, 9, 0, 2])), [1, 9, 2])
462 self.assertEqual(list(filter(None, Squares(10))), [1, 4, 9, 16, 25, 36, 49, 64, 81])
463 self.assertEqual(list(filter(lambda x: x%2, Squares(10))), [1, 9, 25, 49, 81])
Walter Dörwald919497e2003-01-19 16:23:59 +0000464 def identity(item):
465 return 1
466 filter(identity, Squares(5))
467 self.assertRaises(TypeError, filter)
468 class BadSeq(object):
Tim Petersf2715e02003-02-19 02:35:07 +0000469 def __getitem__(self, index):
470 if index<4:
471 return 42
472 raise ValueError
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000473 self.assertRaises(ValueError, list, filter(lambda x: x, BadSeq()))
Walter Dörwald919497e2003-01-19 16:23:59 +0000474 def badfunc():
475 pass
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000476 self.assertRaises(TypeError, list, filter(badfunc, range(5)))
Walter Dörwald919497e2003-01-19 16:23:59 +0000477
Walter Dörwaldbf517072003-01-27 15:57:14 +0000478 # test bltinmodule.c::filtertuple()
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000479 self.assertEqual(list(filter(None, (1, 2))), [1, 2])
480 self.assertEqual(list(filter(lambda x: x>=3, (1, 2, 3, 4))), [3, 4])
481 self.assertRaises(TypeError, list, filter(42, (1, 2)))
Walter Dörwaldc3da83f2003-02-04 20:24:45 +0000482
Walter Dörwald919497e2003-01-19 16:23:59 +0000483 def test_getattr(self):
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000484 self.assertTrue(getattr(sys, 'stdout') is sys.stdout)
Walter Dörwald919497e2003-01-19 16:23:59 +0000485 self.assertRaises(TypeError, getattr, sys, 1)
486 self.assertRaises(TypeError, getattr, sys, 1, "foo")
487 self.assertRaises(TypeError, getattr)
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000488 self.assertRaises(AttributeError, getattr, sys, chr(sys.maxunicode))
Victor Stinner624dbf62010-03-12 17:17:58 +0000489 # unicode surrogates are not encodable to the default encoding (utf8)
490 self.assertRaises(AttributeError, getattr, 1, "\uDAD1\uD51E")
Walter Dörwald919497e2003-01-19 16:23:59 +0000491
492 def test_hasattr(self):
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000493 self.assertTrue(hasattr(sys, 'stdout'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000494 self.assertRaises(TypeError, hasattr, sys, 1)
495 self.assertRaises(TypeError, hasattr)
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000496 self.assertEqual(False, hasattr(sys, chr(sys.maxunicode)))
Walter Dörwald919497e2003-01-19 16:23:59 +0000497
Benjamin Peterson17689992010-08-24 03:26:23 +0000498 # Check that hasattr propagates all exceptions outside of
499 # AttributeError.
Alexandre Vassalottieca20b62008-05-16 02:54:33 +0000500 class A:
501 def __getattr__(self, what):
Benjamin Peterson17689992010-08-24 03:26:23 +0000502 raise SystemExit
503 self.assertRaises(SystemExit, hasattr, A(), "b")
Alexandre Vassalottieca20b62008-05-16 02:54:33 +0000504 class B:
505 def __getattr__(self, what):
Benjamin Peterson17689992010-08-24 03:26:23 +0000506 raise ValueError
507 self.assertRaises(ValueError, hasattr, B(), "b")
Alexandre Vassalottieca20b62008-05-16 02:54:33 +0000508
Walter Dörwald919497e2003-01-19 16:23:59 +0000509 def test_hash(self):
510 hash(None)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000511 self.assertEqual(hash(1), hash(1))
Walter Dörwald919497e2003-01-19 16:23:59 +0000512 self.assertEqual(hash(1), hash(1.0))
513 hash('spam')
Guido van Rossum98297ee2007-11-06 21:34:58 +0000514 self.assertEqual(hash('spam'), hash(b'spam'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000515 hash((0,1,2,3))
516 def f(): pass
517 self.assertRaises(TypeError, hash, [])
518 self.assertRaises(TypeError, hash, {})
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000519 # Bug 1536021: Allow hash to return long objects
520 class X:
521 def __hash__(self):
522 return 2**100
523 self.assertEquals(type(hash(X())), int)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000524 class Z(int):
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000525 def __hash__(self):
526 return self
Guido van Rossume2a383d2007-01-15 16:59:06 +0000527 self.assertEquals(hash(Z(42)), hash(42))
Walter Dörwald919497e2003-01-19 16:23:59 +0000528
529 def test_hex(self):
530 self.assertEqual(hex(16), '0x10')
Guido van Rossume2a383d2007-01-15 16:59:06 +0000531 self.assertEqual(hex(-16), '-0x10')
Walter Dörwald919497e2003-01-19 16:23:59 +0000532 self.assertRaises(TypeError, hex, {})
533
534 def test_id(self):
535 id(None)
536 id(1)
Walter Dörwald919497e2003-01-19 16:23:59 +0000537 id(1.0)
538 id('spam')
539 id((0,1,2,3))
540 id([0,1,2,3])
541 id({'spam': 1, 'eggs': 2, 'ham': 3})
542
Guido van Rossuma88a0332007-02-26 16:59:55 +0000543 # Test input() later, alphabetized as if it were raw_input
544
Walter Dörwald919497e2003-01-19 16:23:59 +0000545 def test_iter(self):
546 self.assertRaises(TypeError, iter)
547 self.assertRaises(TypeError, iter, 42, 42)
548 lists = [("1", "2"), ["1", "2"], "12"]
Walter Dörwald919497e2003-01-19 16:23:59 +0000549 for l in lists:
550 i = iter(l)
Georg Brandla18af4e2007-04-21 15:47:16 +0000551 self.assertEqual(next(i), '1')
552 self.assertEqual(next(i), '2')
553 self.assertRaises(StopIteration, next, i)
Walter Dörwald919497e2003-01-19 16:23:59 +0000554
555 def test_isinstance(self):
556 class C:
557 pass
558 class D(C):
559 pass
560 class E:
561 pass
562 c = C()
563 d = D()
564 e = E()
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000565 self.assertTrue(isinstance(c, C))
566 self.assertTrue(isinstance(d, C))
567 self.assertTrue(not isinstance(e, C))
568 self.assertTrue(not isinstance(c, D))
569 self.assertTrue(not isinstance('foo', E))
Walter Dörwald919497e2003-01-19 16:23:59 +0000570 self.assertRaises(TypeError, isinstance, E, 'foo')
571 self.assertRaises(TypeError, isinstance)
572
573 def test_issubclass(self):
574 class C:
575 pass
576 class D(C):
577 pass
578 class E:
579 pass
580 c = C()
581 d = D()
582 e = E()
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000583 self.assertTrue(issubclass(D, C))
584 self.assertTrue(issubclass(C, C))
585 self.assertTrue(not issubclass(C, D))
Walter Dörwald919497e2003-01-19 16:23:59 +0000586 self.assertRaises(TypeError, issubclass, 'foo', E)
587 self.assertRaises(TypeError, issubclass, E, 'foo')
588 self.assertRaises(TypeError, issubclass)
589
590 def test_len(self):
591 self.assertEqual(len('123'), 3)
592 self.assertEqual(len(()), 0)
593 self.assertEqual(len((1, 2, 3, 4)), 4)
594 self.assertEqual(len([1, 2, 3, 4]), 4)
595 self.assertEqual(len({}), 0)
596 self.assertEqual(len({'a':1, 'b': 2}), 2)
597 class BadSeq:
598 def __len__(self):
599 raise ValueError
600 self.assertRaises(ValueError, len, BadSeq())
Benjamin Petersonee1ae7c2009-02-08 21:07:20 +0000601 class InvalidLen:
602 def __len__(self):
603 return None
604 self.assertRaises(TypeError, len, InvalidLen())
605 class FloatLen:
606 def __len__(self):
607 return 4.5
608 self.assertRaises(TypeError, len, FloatLen())
609 class HugeLen:
610 def __len__(self):
611 return sys.maxsize + 1
612 self.assertRaises(OverflowError, len, HugeLen())
Mark Dickinsonfb3dc942010-05-25 19:06:24 +0000613 class NoLenMethod(object): pass
614 self.assertRaises(TypeError, len, NoLenMethod())
Walter Dörwald919497e2003-01-19 16:23:59 +0000615
Walter Dörwald919497e2003-01-19 16:23:59 +0000616 def test_map(self):
617 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000618 list(map(lambda x: x*x, range(1,4))),
Walter Dörwald919497e2003-01-19 16:23:59 +0000619 [1, 4, 9]
620 )
621 try:
622 from math import sqrt
623 except ImportError:
624 def sqrt(x):
625 return pow(x, 0.5)
626 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000627 list(map(lambda x: list(map(sqrt, x)), [[16, 4], [81, 9]])),
Walter Dörwald919497e2003-01-19 16:23:59 +0000628 [[4.0, 2.0], [9.0, 3.0]]
629 )
630 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000631 list(map(lambda x, y: x+y, [1,3,2], [9,1,4])),
Walter Dörwald919497e2003-01-19 16:23:59 +0000632 [10, 4, 6]
633 )
634
635 def plus(*v):
636 accu = 0
637 for i in v: accu = accu + i
638 return accu
639 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000640 list(map(plus, [1, 3, 7])),
Walter Dörwald919497e2003-01-19 16:23:59 +0000641 [1, 3, 7]
642 )
643 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000644 list(map(plus, [1, 3, 7], [4, 9, 2])),
Walter Dörwald919497e2003-01-19 16:23:59 +0000645 [1+4, 3+9, 7+2]
646 )
647 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000648 list(map(plus, [1, 3, 7], [4, 9, 2], [1, 1, 0])),
Walter Dörwald919497e2003-01-19 16:23:59 +0000649 [1+4+1, 3+9+1, 7+2+0]
650 )
651 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000652 list(map(int, Squares(10))),
Walter Dörwald919497e2003-01-19 16:23:59 +0000653 [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
654 )
Guido van Rossum47b9ff62006-08-24 00:41:19 +0000655 def Max(a, b):
656 if a is None:
657 return b
658 if b is None:
659 return a
660 return max(a, b)
Walter Dörwald919497e2003-01-19 16:23:59 +0000661 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000662 list(map(Max, Squares(3), Squares(2))),
663 [0, 1]
Walter Dörwald919497e2003-01-19 16:23:59 +0000664 )
665 self.assertRaises(TypeError, map)
666 self.assertRaises(TypeError, map, lambda x: x, 42)
Walter Dörwald919497e2003-01-19 16:23:59 +0000667 class BadSeq:
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000668 def __iter__(self):
Walter Dörwald919497e2003-01-19 16:23:59 +0000669 raise ValueError
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000670 yield None
671 self.assertRaises(ValueError, list, map(lambda x: x, BadSeq()))
Neal Norwitzfcf44352005-11-27 20:37:43 +0000672 def badfunc(x):
673 raise RuntimeError
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000674 self.assertRaises(RuntimeError, list, map(badfunc, range(5)))
Walter Dörwald919497e2003-01-19 16:23:59 +0000675
676 def test_max(self):
677 self.assertEqual(max('123123'), '3')
678 self.assertEqual(max(1, 2, 3), 3)
679 self.assertEqual(max((1, 2, 3, 1, 2, 3)), 3)
680 self.assertEqual(max([1, 2, 3, 1, 2, 3]), 3)
681
Guido van Rossume2a383d2007-01-15 16:59:06 +0000682 self.assertEqual(max(1, 2, 3.0), 3.0)
683 self.assertEqual(max(1, 2.0, 3), 3)
684 self.assertEqual(max(1.0, 2, 3), 3)
Walter Dörwald919497e2003-01-19 16:23:59 +0000685
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +0000686 for stmt in (
687 "max(key=int)", # no args
688 "max(1, key=int)", # single arg not iterable
689 "max(1, 2, keystone=int)", # wrong keyword
690 "max(1, 2, key=int, abc=int)", # two many keywords
691 "max(1, 2, key=1)", # keyfunc is not callable
692 ):
Tim Peters7f061872004-12-07 21:17:46 +0000693 try:
Georg Brandl7cae87c2006-09-06 06:51:57 +0000694 exec(stmt, globals())
Tim Peters7f061872004-12-07 21:17:46 +0000695 except TypeError:
696 pass
697 else:
698 self.fail(stmt)
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +0000699
700 self.assertEqual(max((1,), key=neg), 1) # one elem iterable
701 self.assertEqual(max((1,2), key=neg), 1) # two elem iterable
702 self.assertEqual(max(1, 2, key=neg), 1) # two elems
703
704 data = [random.randrange(200) for i in range(100)]
705 keys = dict((elem, random.randrange(50)) for elem in data)
706 f = keys.__getitem__
707 self.assertEqual(max(data, key=f),
708 sorted(reversed(data), key=f)[-1])
709
Walter Dörwald919497e2003-01-19 16:23:59 +0000710 def test_min(self):
711 self.assertEqual(min('123123'), '1')
712 self.assertEqual(min(1, 2, 3), 1)
713 self.assertEqual(min((1, 2, 3, 1, 2, 3)), 1)
714 self.assertEqual(min([1, 2, 3, 1, 2, 3]), 1)
715
Guido van Rossume2a383d2007-01-15 16:59:06 +0000716 self.assertEqual(min(1, 2, 3.0), 1)
717 self.assertEqual(min(1, 2.0, 3), 1)
718 self.assertEqual(min(1.0, 2, 3), 1.0)
Walter Dörwald919497e2003-01-19 16:23:59 +0000719
720 self.assertRaises(TypeError, min)
721 self.assertRaises(TypeError, min, 42)
722 self.assertRaises(ValueError, min, ())
723 class BadSeq:
724 def __getitem__(self, index):
725 raise ValueError
726 self.assertRaises(ValueError, min, BadSeq())
Walter Dörwald919497e2003-01-19 16:23:59 +0000727
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +0000728 for stmt in (
729 "min(key=int)", # no args
730 "min(1, key=int)", # single arg not iterable
731 "min(1, 2, keystone=int)", # wrong keyword
732 "min(1, 2, key=int, abc=int)", # two many keywords
733 "min(1, 2, key=1)", # keyfunc is not callable
734 ):
Tim Peters7f061872004-12-07 21:17:46 +0000735 try:
Georg Brandl7cae87c2006-09-06 06:51:57 +0000736 exec(stmt, globals())
Tim Peters7f061872004-12-07 21:17:46 +0000737 except TypeError:
738 pass
739 else:
740 self.fail(stmt)
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +0000741
742 self.assertEqual(min((1,), key=neg), 1) # one elem iterable
743 self.assertEqual(min((1,2), key=neg), 2) # two elem iterable
744 self.assertEqual(min(1, 2, key=neg), 2) # two elems
745
746 data = [random.randrange(200) for i in range(100)]
747 keys = dict((elem, random.randrange(50)) for elem in data)
748 f = keys.__getitem__
749 self.assertEqual(min(data, key=f),
750 sorted(data, key=f)[0])
751
Georg Brandla18af4e2007-04-21 15:47:16 +0000752 def test_next(self):
753 it = iter(range(2))
754 self.assertEqual(next(it), 0)
755 self.assertEqual(next(it), 1)
756 self.assertRaises(StopIteration, next, it)
757 self.assertRaises(StopIteration, next, it)
758 self.assertEquals(next(it, 42), 42)
759
760 class Iter(object):
761 def __iter__(self):
762 return self
763 def __next__(self):
764 raise StopIteration
765
766 it = iter(Iter())
767 self.assertEquals(next(it, 42), 42)
768 self.assertRaises(StopIteration, next, it)
769
770 def gen():
771 yield 1
772 return
773
774 it = gen()
775 self.assertEquals(next(it), 1)
776 self.assertRaises(StopIteration, next, it)
777 self.assertEquals(next(it, 42), 42)
778
Walter Dörwald919497e2003-01-19 16:23:59 +0000779 def test_oct(self):
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000780 self.assertEqual(oct(100), '0o144')
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000781 self.assertEqual(oct(-100), '-0o144')
Walter Dörwald919497e2003-01-19 16:23:59 +0000782 self.assertRaises(TypeError, oct, ())
783
784 def write_testfile(self):
Guido van Rossuma88a0332007-02-26 16:59:55 +0000785 # NB the first 4 lines are also used to test input, below
Walter Dörwald919497e2003-01-19 16:23:59 +0000786 fp = open(TESTFN, 'w')
787 try:
788 fp.write('1+1\n')
Walter Dörwald919497e2003-01-19 16:23:59 +0000789 fp.write('The quick brown fox jumps over the lazy dog')
790 fp.write('.\n')
791 fp.write('Dear John\n')
792 fp.write('XXX'*100)
793 fp.write('YYY'*100)
794 finally:
795 fp.close()
796
797 def test_open(self):
798 self.write_testfile()
799 fp = open(TESTFN, 'r')
800 try:
801 self.assertEqual(fp.readline(4), '1+1\n')
Walter Dörwald919497e2003-01-19 16:23:59 +0000802 self.assertEqual(fp.readline(), 'The quick brown fox jumps over the lazy dog.\n')
803 self.assertEqual(fp.readline(4), 'Dear')
804 self.assertEqual(fp.readline(100), ' John\n')
805 self.assertEqual(fp.read(300), 'XXX'*100)
806 self.assertEqual(fp.read(1000), 'YYY'*100)
807 finally:
808 fp.close()
809 unlink(TESTFN)
810
811 def test_ord(self):
812 self.assertEqual(ord(' '), 32)
813 self.assertEqual(ord('A'), 65)
814 self.assertEqual(ord('a'), 97)
Guido van Rossumf9e91c92007-05-08 21:05:48 +0000815 self.assertEqual(ord('\x80'), 128)
816 self.assertEqual(ord('\xff'), 255)
817
818 self.assertEqual(ord(b' '), 32)
819 self.assertEqual(ord(b'A'), 65)
820 self.assertEqual(ord(b'a'), 97)
821 self.assertEqual(ord(b'\x80'), 128)
822 self.assertEqual(ord(b'\xff'), 255)
823
Walter Dörwald1f5947b2007-05-22 16:52:54 +0000824 self.assertEqual(ord(chr(sys.maxunicode)), sys.maxunicode)
Walter Dörwald919497e2003-01-19 16:23:59 +0000825 self.assertRaises(TypeError, ord, 42)
Walter Dörwald919497e2003-01-19 16:23:59 +0000826
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000827 self.assertEqual(ord(chr(0x10FFFF)), 0x10FFFF)
828 self.assertEqual(ord("\U0000FFFF"), 0x0000FFFF)
829 self.assertEqual(ord("\U00010000"), 0x00010000)
830 self.assertEqual(ord("\U00010001"), 0x00010001)
831 self.assertEqual(ord("\U000FFFFE"), 0x000FFFFE)
832 self.assertEqual(ord("\U000FFFFF"), 0x000FFFFF)
833 self.assertEqual(ord("\U00100000"), 0x00100000)
834 self.assertEqual(ord("\U00100001"), 0x00100001)
835 self.assertEqual(ord("\U0010FFFE"), 0x0010FFFE)
836 self.assertEqual(ord("\U0010FFFF"), 0x0010FFFF)
837
Walter Dörwald919497e2003-01-19 16:23:59 +0000838 def test_pow(self):
839 self.assertEqual(pow(0,0), 1)
840 self.assertEqual(pow(0,1), 0)
841 self.assertEqual(pow(1,0), 1)
842 self.assertEqual(pow(1,1), 1)
843
844 self.assertEqual(pow(2,0), 1)
845 self.assertEqual(pow(2,10), 1024)
846 self.assertEqual(pow(2,20), 1024*1024)
847 self.assertEqual(pow(2,30), 1024*1024*1024)
848
849 self.assertEqual(pow(-2,0), 1)
850 self.assertEqual(pow(-2,1), -2)
851 self.assertEqual(pow(-2,2), 4)
852 self.assertEqual(pow(-2,3), -8)
853
Walter Dörwald919497e2003-01-19 16:23:59 +0000854 self.assertAlmostEqual(pow(0.,0), 1.)
855 self.assertAlmostEqual(pow(0.,1), 0.)
856 self.assertAlmostEqual(pow(1.,0), 1.)
857 self.assertAlmostEqual(pow(1.,1), 1.)
858
859 self.assertAlmostEqual(pow(2.,0), 1.)
860 self.assertAlmostEqual(pow(2.,10), 1024.)
861 self.assertAlmostEqual(pow(2.,20), 1024.*1024.)
862 self.assertAlmostEqual(pow(2.,30), 1024.*1024.*1024.)
863
864 self.assertAlmostEqual(pow(-2.,0), 1.)
865 self.assertAlmostEqual(pow(-2.,1), -2.)
866 self.assertAlmostEqual(pow(-2.,2), 4.)
867 self.assertAlmostEqual(pow(-2.,3), -8.)
868
Mark Dickinson5c2db372009-12-05 20:28:34 +0000869 for x in 2, 2.0:
870 for y in 10, 10.0:
871 for z in 1000, 1000.0:
Walter Dörwald919497e2003-01-19 16:23:59 +0000872 if isinstance(x, float) or \
873 isinstance(y, float) or \
874 isinstance(z, float):
875 self.assertRaises(TypeError, pow, x, y, z)
876 else:
877 self.assertAlmostEqual(pow(x, y, z), 24.0)
878
Jeffrey Yasskin3404b3c2007-09-07 15:15:49 +0000879 self.assertAlmostEqual(pow(-1, 0.5), 1j)
880 self.assertAlmostEqual(pow(-1, 1/3), 0.5 + 0.8660254037844386j)
881
Walter Dörwald919497e2003-01-19 16:23:59 +0000882 self.assertRaises(TypeError, pow, -1, -2, 3)
883 self.assertRaises(ValueError, pow, 1, 2, 0)
Walter Dörwald919497e2003-01-19 16:23:59 +0000884
885 self.assertRaises(TypeError, pow)
886
887 def test_range(self):
Guido van Rossum805365e2007-05-07 22:24:25 +0000888 self.assertEqual(list(range(3)), [0, 1, 2])
889 self.assertEqual(list(range(1, 5)), [1, 2, 3, 4])
890 self.assertEqual(list(range(0)), [])
891 self.assertEqual(list(range(-3)), [])
892 self.assertEqual(list(range(1, 10, 3)), [1, 4, 7])
893 #self.assertEqual(list(range(5, -5, -3)), [5, 2, -1, -4])
Walter Dörwald919497e2003-01-19 16:23:59 +0000894
Mark Dickinsoneb36d312009-06-24 18:36:46 +0000895 #issue 6334: the internal stored range length was being
896 #computed incorrectly in some cases involving large arguments.
897 x = range(10**20, 10**20+10, 3)
898 self.assertEqual(len(x), 4)
899 self.assertEqual(len(list(x)), 4)
900
901 x = range(10**20+10, 10**20, 3)
902 self.assertEqual(len(x), 0)
903 self.assertEqual(len(list(x)), 0)
904
905 x = range(10**20, 10**20+10, -3)
906 self.assertEqual(len(x), 0)
907 self.assertEqual(len(list(x)), 0)
908
909 x = range(10**20+10, 10**20, -3)
910 self.assertEqual(len(x), 4)
911 self.assertEqual(len(list(x)), 4)
912
Guido van Rossumefbbb1c2003-04-11 18:43:06 +0000913 # Now test range() with longs
Guido van Rossum805365e2007-05-07 22:24:25 +0000914 self.assertEqual(list(range(-2**100)), [])
915 self.assertEqual(list(range(0, -2**100)), [])
916 self.assertEqual(list(range(0, 2**100, -1)), [])
917 self.assertEqual(list(range(0, 2**100, -1)), [])
Guido van Rossumefbbb1c2003-04-11 18:43:06 +0000918
Christian Heimesa37d4c62007-12-04 23:02:19 +0000919 a = int(10 * sys.maxsize)
920 b = int(100 * sys.maxsize)
921 c = int(50 * sys.maxsize)
Guido van Rossumefbbb1c2003-04-11 18:43:06 +0000922
Guido van Rossum805365e2007-05-07 22:24:25 +0000923 self.assertEqual(list(range(a, a+2)), [a, a+1])
924 self.assertEqual(list(range(a+2, a, -1)), [a+2, a+1])
925 self.assertEqual(list(range(a+4, a, -2)), [a+4, a+2])
Guido van Rossumefbbb1c2003-04-11 18:43:06 +0000926
Guido van Rossum805365e2007-05-07 22:24:25 +0000927 seq = list(range(a, b, c))
Benjamin Peterson577473f2010-01-19 00:09:57 +0000928 self.assertIn(a, seq)
929 self.assertNotIn(b, seq)
Guido van Rossumefbbb1c2003-04-11 18:43:06 +0000930 self.assertEqual(len(seq), 2)
931
Guido van Rossum805365e2007-05-07 22:24:25 +0000932 seq = list(range(b, a, -c))
Benjamin Peterson577473f2010-01-19 00:09:57 +0000933 self.assertIn(b, seq)
934 self.assertNotIn(a, seq)
Guido van Rossumefbbb1c2003-04-11 18:43:06 +0000935 self.assertEqual(len(seq), 2)
936
Guido van Rossum805365e2007-05-07 22:24:25 +0000937 seq = list(range(-a, -b, -c))
Benjamin Peterson577473f2010-01-19 00:09:57 +0000938 self.assertIn(-a, seq)
939 self.assertNotIn(-b, seq)
Guido van Rossumefbbb1c2003-04-11 18:43:06 +0000940 self.assertEqual(len(seq), 2)
941
Walter Dörwald919497e2003-01-19 16:23:59 +0000942 self.assertRaises(TypeError, range)
943 self.assertRaises(TypeError, range, 1, 2, 3, 4)
944 self.assertRaises(ValueError, range, 1, 2, 0)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000945 self.assertRaises(ValueError, range, a, a + 1, int(0))
Neal Norwitzfcf44352005-11-27 20:37:43 +0000946
Mark Dickinson5c2db372009-12-05 20:28:34 +0000947 """ XXX(nnorwitz):
Neal Norwitzfcf44352005-11-27 20:37:43 +0000948 class badzero(int):
Guido van Rossum47b9ff62006-08-24 00:41:19 +0000949 def __eq__(self, other):
Neal Norwitzfcf44352005-11-27 20:37:43 +0000950 raise RuntimeError
Guido van Rossum47b9ff62006-08-24 00:41:19 +0000951 __ne__ = __lt__ = __gt__ = __le__ = __ge__ = __eq__
952
953 # XXX This won't (but should!) raise RuntimeError if a is an int...
Neal Norwitzfcf44352005-11-27 20:37:43 +0000954 self.assertRaises(RuntimeError, range, a, a + 1, badzero(1))
Guido van Rossum805365e2007-05-07 22:24:25 +0000955 """
Walter Dörwald919497e2003-01-19 16:23:59 +0000956
Mark Dickinson85b53532010-05-05 22:39:58 +0000957 # Reject floats.
958 self.assertRaises(TypeError, range, 1., 1., 1.)
Tim Peters299b3df2003-04-15 14:40:03 +0000959 self.assertRaises(TypeError, range, 1e100, 1e101, 1e101)
Guido van Rossumefbbb1c2003-04-11 18:43:06 +0000960
Walter Dörwald357981e2003-04-15 18:59:28 +0000961 self.assertRaises(TypeError, range, 0, "spam")
962 self.assertRaises(TypeError, range, 0, 42, "spam")
963
Christian Heimesa37d4c62007-12-04 23:02:19 +0000964 #NEAL self.assertRaises(OverflowError, range, -sys.maxsize, sys.maxsize)
965 #NEAL self.assertRaises(OverflowError, range, 0, 2*sys.maxsize)
Guido van Rossum805365e2007-05-07 22:24:25 +0000966
Christian Heimesa37d4c62007-12-04 23:02:19 +0000967 self.assertRaises(OverflowError, len, range(0, sys.maxsize**10))
Walter Dörwald357981e2003-04-15 18:59:28 +0000968
Mark Dickinson85b53532010-05-05 22:39:58 +0000969 bignum = 2*sys.maxsize
970 smallnum = 42
971
972 # User-defined class with an __index__ method
973 class I:
974 def __init__(self, n):
975 self.n = int(n)
976 def __index__(self):
977 return self.n
978 self.assertEqual(list(range(I(bignum), I(bignum + 1))), [bignum])
979 self.assertEqual(list(range(I(smallnum), I(smallnum + 1))), [smallnum])
980
981 # User-defined class with a failing __index__ method
982 class IX:
983 def __index__(self):
984 raise RuntimeError
985 self.assertRaises(RuntimeError, range, IX())
986
987 # User-defined class with an invalid __index__ method
988 class IN:
989 def __index__(self):
990 return "not a number"
991
992 self.assertRaises(TypeError, range, IN())
993 # Exercise various combinations of bad arguments, to check
994 # refcounting logic
995 self.assertRaises(TypeError, range, 0.0)
996
997 self.assertRaises(TypeError, range, 0, 0.0)
998 self.assertRaises(TypeError, range, 0.0, 0)
999 self.assertRaises(TypeError, range, 0.0, 0.0)
1000
1001 self.assertRaises(TypeError, range, 0, 0, 1.0)
1002 self.assertRaises(TypeError, range, 0, 0.0, 1)
1003 self.assertRaises(TypeError, range, 0, 0.0, 1.0)
1004 self.assertRaises(TypeError, range, 0.0, 0, 1)
1005 self.assertRaises(TypeError, range, 0.0, 0, 1.0)
1006 self.assertRaises(TypeError, range, 0.0, 0.0, 1)
1007 self.assertRaises(TypeError, range, 0.0, 0.0, 1.0)
1008
Guido van Rossuma88a0332007-02-26 16:59:55 +00001009 def test_input(self):
1010 self.write_testfile()
1011 fp = open(TESTFN, 'r')
1012 savestdin = sys.stdin
1013 savestdout = sys.stdout # Eats the echo
1014 try:
1015 sys.stdin = fp
1016 sys.stdout = BitBucket()
1017 self.assertEqual(input(), "1+1")
Guido van Rossuma88a0332007-02-26 16:59:55 +00001018 self.assertEqual(input(), 'The quick brown fox jumps over the lazy dog.')
1019 self.assertEqual(input('testing\n'), 'Dear John')
1020
1021 # SF 1535165: don't segfault on closed stdin
1022 # sys.stdout must be a regular file for triggering
1023 sys.stdout = savestdout
1024 sys.stdin.close()
1025 self.assertRaises(ValueError, input)
1026
1027 sys.stdout = BitBucket()
Guido van Rossum34d19282007-08-09 01:03:29 +00001028 sys.stdin = io.StringIO("NULL\0")
Guido van Rossuma88a0332007-02-26 16:59:55 +00001029 self.assertRaises(TypeError, input, 42, 42)
Guido van Rossum34d19282007-08-09 01:03:29 +00001030 sys.stdin = io.StringIO(" 'whitespace'")
Guido van Rossuma88a0332007-02-26 16:59:55 +00001031 self.assertEqual(input(), " 'whitespace'")
Guido van Rossum34d19282007-08-09 01:03:29 +00001032 sys.stdin = io.StringIO()
Guido van Rossuma88a0332007-02-26 16:59:55 +00001033 self.assertRaises(EOFError, input)
1034
1035 del sys.stdout
1036 self.assertRaises(RuntimeError, input, 'prompt')
1037 del sys.stdin
1038 self.assertRaises(RuntimeError, input, 'prompt')
1039 finally:
1040 sys.stdin = savestdin
1041 sys.stdout = savestdout
1042 fp.close()
1043 unlink(TESTFN)
1044
Walter Dörwald919497e2003-01-19 16:23:59 +00001045 def test_repr(self):
1046 self.assertEqual(repr(''), '\'\'')
1047 self.assertEqual(repr(0), '0')
Walter Dörwald919497e2003-01-19 16:23:59 +00001048 self.assertEqual(repr(()), '()')
1049 self.assertEqual(repr([]), '[]')
1050 self.assertEqual(repr({}), '{}')
1051 a = []
1052 a.append(a)
1053 self.assertEqual(repr(a), '[[...]]')
1054 a = {}
1055 a[0] = a
1056 self.assertEqual(repr(a), '{0: {...}}')
1057
1058 def test_round(self):
1059 self.assertEqual(round(0.0), 0.0)
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001060 self.assertEqual(type(round(0.0)), int)
Walter Dörwald919497e2003-01-19 16:23:59 +00001061 self.assertEqual(round(1.0), 1.0)
1062 self.assertEqual(round(10.0), 10.0)
1063 self.assertEqual(round(1000000000.0), 1000000000.0)
1064 self.assertEqual(round(1e20), 1e20)
1065
1066 self.assertEqual(round(-1.0), -1.0)
1067 self.assertEqual(round(-10.0), -10.0)
1068 self.assertEqual(round(-1000000000.0), -1000000000.0)
1069 self.assertEqual(round(-1e20), -1e20)
1070
1071 self.assertEqual(round(0.1), 0.0)
1072 self.assertEqual(round(1.1), 1.0)
1073 self.assertEqual(round(10.1), 10.0)
1074 self.assertEqual(round(1000000000.1), 1000000000.0)
1075
1076 self.assertEqual(round(-1.1), -1.0)
1077 self.assertEqual(round(-10.1), -10.0)
1078 self.assertEqual(round(-1000000000.1), -1000000000.0)
1079
1080 self.assertEqual(round(0.9), 1.0)
1081 self.assertEqual(round(9.9), 10.0)
1082 self.assertEqual(round(999999999.9), 1000000000.0)
1083
1084 self.assertEqual(round(-0.9), -1.0)
1085 self.assertEqual(round(-9.9), -10.0)
1086 self.assertEqual(round(-999999999.9), -1000000000.0)
1087
1088 self.assertEqual(round(-8.0, -1), -10.0)
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001089 self.assertEqual(type(round(-8.0, -1)), float)
1090
1091 self.assertEqual(type(round(-8.0, 0)), float)
1092 self.assertEqual(type(round(-8.0, 1)), float)
1093
1094 # Check even / odd rounding behaviour
1095 self.assertEqual(round(5.5), 6)
1096 self.assertEqual(round(6.5), 6)
1097 self.assertEqual(round(-5.5), -6)
1098 self.assertEqual(round(-6.5), -6)
1099
1100 # Check behavior on ints
1101 self.assertEqual(round(0), 0)
1102 self.assertEqual(round(8), 8)
1103 self.assertEqual(round(-8), -8)
1104 self.assertEqual(type(round(0)), int)
Mark Dickinson1124e712009-01-28 21:25:58 +00001105 self.assertEqual(type(round(-8, -1)), int)
1106 self.assertEqual(type(round(-8, 0)), int)
1107 self.assertEqual(type(round(-8, 1)), int)
Walter Dörwald919497e2003-01-19 16:23:59 +00001108
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001109 # test new kwargs
1110 self.assertEqual(round(number=-8.0, ndigits=-1), -10.0)
1111
Walter Dörwald919497e2003-01-19 16:23:59 +00001112 self.assertRaises(TypeError, round)
1113
Alex Martelliae211f92007-08-22 23:21:33 +00001114 # test generic rounding delegation for reals
1115 class TestRound:
1116 def __round__(self):
1117 return 23
1118
1119 class TestNoRound:
1120 pass
1121
1122 self.assertEqual(round(TestRound()), 23)
1123
1124 self.assertRaises(TypeError, round, 1, 2, 3)
1125 self.assertRaises(TypeError, round, TestNoRound())
1126
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001127 t = TestNoRound()
1128 t.__round__ = lambda *args: args
1129 self.assertRaises(TypeError, round, t)
1130 self.assertRaises(TypeError, round, t, 0)
1131
Mark Dickinsonad731b92009-11-09 17:12:30 +00001132 # Some versions of glibc for alpha have a bug that affects
1133 # float -> integer rounding (floor, ceil, rint, round) for
1134 # values in the range [2**52, 2**53). See:
1135 #
1136 # http://sources.redhat.com/bugzilla/show_bug.cgi?id=5350
1137 #
1138 # We skip this test on Linux/alpha if it would fail.
1139 linux_alpha = (platform.system().startswith('Linux') and
1140 platform.machine().startswith('alpha'))
1141 system_round_bug = round(5e15+1) != 5e15+1
1142 @unittest.skipIf(linux_alpha and system_round_bug,
1143 "test will fail; failure is probably due to a "
1144 "buggy system round function")
1145 def test_round_large(self):
1146 # Issue #1869: integral floats should remain unchanged
1147 self.assertEqual(round(5e15-1), 5e15-1)
1148 self.assertEqual(round(5e15), 5e15)
1149 self.assertEqual(round(5e15+1), 5e15+1)
1150 self.assertEqual(round(5e15+2), 5e15+2)
1151 self.assertEqual(round(5e15+3), 5e15+3)
1152
Walter Dörwald919497e2003-01-19 16:23:59 +00001153 def test_setattr(self):
Tim Petersf2715e02003-02-19 02:35:07 +00001154 setattr(sys, 'spam', 1)
1155 self.assertEqual(sys.spam, 1)
1156 self.assertRaises(TypeError, setattr, sys, 1, 'spam')
1157 self.assertRaises(TypeError, setattr)
Walter Dörwald919497e2003-01-19 16:23:59 +00001158
Walter Dörwald919497e2003-01-19 16:23:59 +00001159
Alex Martellia70b1912003-04-22 08:12:33 +00001160 def test_sum(self):
1161 self.assertEqual(sum([]), 0)
Guido van Rossum805365e2007-05-07 22:24:25 +00001162 self.assertEqual(sum(list(range(2,8))), 27)
1163 self.assertEqual(sum(iter(list(range(2,8)))), 27)
Alex Martellia70b1912003-04-22 08:12:33 +00001164 self.assertEqual(sum(Squares(10)), 285)
1165 self.assertEqual(sum(iter(Squares(10))), 285)
1166 self.assertEqual(sum([[1], [2], [3]], []), [1, 2, 3])
1167
1168 self.assertRaises(TypeError, sum)
1169 self.assertRaises(TypeError, sum, 42)
1170 self.assertRaises(TypeError, sum, ['a', 'b', 'c'])
1171 self.assertRaises(TypeError, sum, ['a', 'b', 'c'], '')
1172 self.assertRaises(TypeError, sum, [[1], [2], [3]])
1173 self.assertRaises(TypeError, sum, [{2:3}])
1174 self.assertRaises(TypeError, sum, [{2:3}]*2, {2:3})
1175
1176 class BadSeq:
1177 def __getitem__(self, index):
1178 raise ValueError
1179 self.assertRaises(ValueError, sum, BadSeq())
1180
Mark Dickinson3a22b472009-10-17 21:48:16 +00001181 empty = []
1182 sum(([x] for x in range(10)), empty)
1183 self.assertEqual(empty, [])
1184
Walter Dörwald919497e2003-01-19 16:23:59 +00001185 def test_type(self):
1186 self.assertEqual(type(''), type('123'))
1187 self.assertNotEqual(type(''), type(()))
1188
Guido van Rossumfee7b932005-01-16 00:21:28 +00001189 # We don't want self in vars(), so these are static methods
1190
1191 @staticmethod
Walter Dörwald919497e2003-01-19 16:23:59 +00001192 def get_vars_f0():
1193 return vars()
Walter Dörwald919497e2003-01-19 16:23:59 +00001194
Guido van Rossumfee7b932005-01-16 00:21:28 +00001195 @staticmethod
Walter Dörwald919497e2003-01-19 16:23:59 +00001196 def get_vars_f2():
1197 BuiltinTest.get_vars_f0()
1198 a = 1
1199 b = 2
1200 return vars()
Walter Dörwald919497e2003-01-19 16:23:59 +00001201
Mark Dickinsonfb3dc942010-05-25 19:06:24 +00001202 class C_get_vars(object):
1203 def getDict(self):
1204 return {'a':2}
1205 __dict__ = property(fget=getDict)
1206
Walter Dörwald919497e2003-01-19 16:23:59 +00001207 def test_vars(self):
Raymond Hettingera690a992003-11-16 16:17:49 +00001208 self.assertEqual(set(vars()), set(dir()))
Raymond Hettingera690a992003-11-16 16:17:49 +00001209 self.assertEqual(set(vars(sys)), set(dir(sys)))
Walter Dörwald919497e2003-01-19 16:23:59 +00001210 self.assertEqual(self.get_vars_f0(), {})
1211 self.assertEqual(self.get_vars_f2(), {'a': 1, 'b': 2})
1212 self.assertRaises(TypeError, vars, 42, 42)
1213 self.assertRaises(TypeError, vars, 42)
Mark Dickinsonfb3dc942010-05-25 19:06:24 +00001214 self.assertEqual(vars(self.C_get_vars()), {'a':2})
Walter Dörwald919497e2003-01-19 16:23:59 +00001215
1216 def test_zip(self):
1217 a = (1, 2, 3)
1218 b = (4, 5, 6)
1219 t = [(1, 4), (2, 5), (3, 6)]
Guido van Rossum801f0d72006-08-24 19:48:10 +00001220 self.assertEqual(list(zip(a, b)), t)
Walter Dörwald919497e2003-01-19 16:23:59 +00001221 b = [4, 5, 6]
Guido van Rossum801f0d72006-08-24 19:48:10 +00001222 self.assertEqual(list(zip(a, b)), t)
Walter Dörwald919497e2003-01-19 16:23:59 +00001223 b = (4, 5, 6, 7)
Guido van Rossum801f0d72006-08-24 19:48:10 +00001224 self.assertEqual(list(zip(a, b)), t)
Walter Dörwald919497e2003-01-19 16:23:59 +00001225 class I:
1226 def __getitem__(self, i):
1227 if i < 0 or i > 2: raise IndexError
1228 return i + 4
Guido van Rossum801f0d72006-08-24 19:48:10 +00001229 self.assertEqual(list(zip(a, I())), t)
1230 self.assertEqual(list(zip()), [])
1231 self.assertEqual(list(zip(*[])), [])
Walter Dörwald919497e2003-01-19 16:23:59 +00001232 self.assertRaises(TypeError, zip, None)
1233 class G:
1234 pass
1235 self.assertRaises(TypeError, zip, a, G())
Alexander Belopolskye29e6bf2010-08-16 18:55:46 +00001236 self.assertRaises(RuntimeError, zip, a, TestFailingIter())
Walter Dörwald919497e2003-01-19 16:23:59 +00001237
1238 # Make sure zip doesn't try to allocate a billion elements for the
1239 # result list when one of its arguments doesn't say how long it is.
1240 # A MemoryError is the most likely failure mode.
1241 class SequenceWithoutALength:
1242 def __getitem__(self, i):
1243 if i == 5:
1244 raise IndexError
1245 else:
1246 return i
1247 self.assertEqual(
Guido van Rossum805365e2007-05-07 22:24:25 +00001248 list(zip(SequenceWithoutALength(), range(2**30))),
Walter Dörwald919497e2003-01-19 16:23:59 +00001249 list(enumerate(range(5)))
1250 )
1251
1252 class BadSeq:
1253 def __getitem__(self, i):
1254 if i == 5:
1255 raise ValueError
1256 else:
1257 return i
Guido van Rossum801f0d72006-08-24 19:48:10 +00001258 self.assertRaises(ValueError, list, zip(BadSeq(), BadSeq()))
Walter Dörwald919497e2003-01-19 16:23:59 +00001259
Christian Heimes90c3d9b2008-02-23 13:18:03 +00001260 def test_bin(self):
1261 self.assertEqual(bin(0), '0b0')
1262 self.assertEqual(bin(1), '0b1')
1263 self.assertEqual(bin(-1), '-0b1')
1264 self.assertEqual(bin(2**65), '0b1' + '0' * 65)
1265 self.assertEqual(bin(2**65-1), '0b' + '1' * 65)
1266 self.assertEqual(bin(-(2**65)), '-0b1' + '0' * 65)
1267 self.assertEqual(bin(-(2**65-1)), '-0b' + '1' * 65)
1268
Georg Brandl953152f2009-07-22 12:03:59 +00001269 def test_bytearray_translate(self):
1270 x = bytearray(b"abc")
1271 self.assertRaises(ValueError, x.translate, b"1", 1)
1272 self.assertRaises(TypeError, x.translate, b"1"*256, 1)
1273
Raymond Hettinger64958a12003-12-17 20:43:33 +00001274class TestSorted(unittest.TestCase):
1275
1276 def test_basic(self):
Guido van Rossum805365e2007-05-07 22:24:25 +00001277 data = list(range(100))
Raymond Hettinger64958a12003-12-17 20:43:33 +00001278 copy = data[:]
1279 random.shuffle(copy)
1280 self.assertEqual(data, sorted(copy))
1281 self.assertNotEqual(data, copy)
1282
1283 data.reverse()
1284 random.shuffle(copy)
Raymond Hettinger64958a12003-12-17 20:43:33 +00001285 self.assertEqual(data, sorted(copy, key=lambda x: -x))
1286 self.assertNotEqual(data, copy)
1287 random.shuffle(copy)
1288 self.assertEqual(data, sorted(copy, reverse=1))
1289 self.assertNotEqual(data, copy)
1290
1291 def test_inputtypes(self):
1292 s = 'abracadabra'
Walter Dörwald1f5947b2007-05-22 16:52:54 +00001293 types = [list, tuple, str]
Walter Dörwald4e41a4b2005-08-03 17:09:04 +00001294 for T in types:
Raymond Hettinger64958a12003-12-17 20:43:33 +00001295 self.assertEqual(sorted(s), sorted(T(s)))
1296
Walter Dörwald1f5947b2007-05-22 16:52:54 +00001297 s = ''.join(set(s)) # unique letters only
1298 types = [str, set, frozenset, list, tuple, dict.fromkeys]
Walter Dörwald4e41a4b2005-08-03 17:09:04 +00001299 for T in types:
Raymond Hettinger64958a12003-12-17 20:43:33 +00001300 self.assertEqual(sorted(s), sorted(T(s)))
1301
1302 def test_baddecorator(self):
1303 data = 'The quick Brown fox Jumped over The lazy Dog'.split()
1304 self.assertRaises(TypeError, sorted, data, None, lambda x,y: 0)
1305
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001306def test_main(verbose=None):
1307 test_classes = (BuiltinTest, TestSorted)
1308
1309 run_unittest(*test_classes)
1310
1311 # verify reference counting
1312 if verbose and hasattr(sys, "gettotalrefcount"):
1313 import gc
1314 counts = [None] * 5
Guido van Rossum805365e2007-05-07 22:24:25 +00001315 for i in range(len(counts)):
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001316 run_unittest(*test_classes)
1317 gc.collect()
1318 counts[i] = sys.gettotalrefcount()
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001319 print(counts)
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001320
Walter Dörwald919497e2003-01-19 16:23:59 +00001321
1322if __name__ == "__main__":
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001323 test_main(verbose=True)