blob: 35b652bd92cea9ba4567b198c23aadc9191e98f0 [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: {...}}')
Antoine Pitroue4a18922010-09-09 20:30:23 +0000182 # Advanced checks for unicode strings
183 def _check_uni(s):
184 self.assertEqual(ascii(s), repr(s))
185 _check_uni("'")
186 _check_uni('"')
187 _check_uni('"\'')
188 _check_uni('\0')
189 _check_uni('\r\n\t .')
190 # Unprintable non-ASCII characters
191 _check_uni('\x85')
192 _check_uni('\u1fff')
193 _check_uni('\U00012fff')
194 # Lone surrogates
195 _check_uni('\ud800')
196 _check_uni('\udfff')
197 # Issue #9804: surrogates should be joined even for printable
198 # wide characters (UCS-2 builds).
199 self.assertEqual(ascii('\U0001d121'), "'\\U0001d121'")
200 # All together
201 s = "'\0\"\n\r\t abcd\x85é\U00012fff\uD800\U0001D121xxx."
202 self.assertEqual(ascii(s),
203 r"""'\'\x00"\n\r\t abcd\x85\xe9\U00012fff\ud800\U0001d121xxx.'""")
Georg Brandl559e5d72008-06-11 18:37:52 +0000204
Thomas Wouters89f507f2006-12-13 04:49:30 +0000205 def test_neg(self):
Christian Heimesa37d4c62007-12-04 23:02:19 +0000206 x = -sys.maxsize-1
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000207 self.assertTrue(isinstance(x, int))
Christian Heimesa37d4c62007-12-04 23:02:19 +0000208 self.assertEqual(-x, sys.maxsize+1)
Thomas Wouters89f507f2006-12-13 04:49:30 +0000209
Guido van Rossumd59da4b2007-05-22 18:11:13 +0000210 # XXX(nnorwitz): This test case for callable should probably be removed.
Walter Dörwald919497e2003-01-19 16:23:59 +0000211 def test_callable(self):
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000212 self.assertTrue(hasattr(len, '__call__'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000213 def f(): pass
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000214 self.assertTrue(hasattr(f, '__call__'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000215 class C:
216 def meth(self): pass
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000217 self.assertTrue(hasattr(C, '__call__'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000218 x = C()
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000219 self.assertTrue(hasattr(x.meth, '__call__'))
220 self.assertTrue(not hasattr(x, '__call__'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000221 class D(C):
222 def __call__(self): pass
223 y = D()
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000224 self.assertTrue(hasattr(y, '__call__'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000225 y()
226
227 def test_chr(self):
228 self.assertEqual(chr(32), ' ')
229 self.assertEqual(chr(65), 'A')
230 self.assertEqual(chr(97), 'a')
231 self.assertEqual(chr(0xff), '\xff')
Guido van Rossum572dbf82007-04-27 23:53:51 +0000232 self.assertRaises(ValueError, chr, 1<<24)
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000233 self.assertEqual(chr(sys.maxunicode),
234 str(('\\U%08x' % (sys.maxunicode)).encode("ascii"),
235 'unicode-escape'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000236 self.assertRaises(TypeError, chr)
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000237 self.assertEqual(chr(0x0000FFFF), "\U0000FFFF")
238 self.assertEqual(chr(0x00010000), "\U00010000")
239 self.assertEqual(chr(0x00010001), "\U00010001")
240 self.assertEqual(chr(0x000FFFFE), "\U000FFFFE")
241 self.assertEqual(chr(0x000FFFFF), "\U000FFFFF")
242 self.assertEqual(chr(0x00100000), "\U00100000")
243 self.assertEqual(chr(0x00100001), "\U00100001")
244 self.assertEqual(chr(0x0010FFFE), "\U0010FFFE")
245 self.assertEqual(chr(0x0010FFFF), "\U0010FFFF")
246 self.assertRaises(ValueError, chr, -1)
247 self.assertRaises(ValueError, chr, 0x00110000)
Amaury Forgeot d'Arc7888d082008-08-01 01:06:32 +0000248 self.assertRaises((OverflowError, ValueError), chr, 2**32)
Walter Dörwald919497e2003-01-19 16:23:59 +0000249
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000250 def test_cmp(self):
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000251 self.assertTrue(not hasattr(builtins, "cmp"))
Walter Dörwald919497e2003-01-19 16:23:59 +0000252
Walter Dörwald919497e2003-01-19 16:23:59 +0000253 def test_compile(self):
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000254 compile('print(1)\n', '', 'exec')
Amaury Forgeot d'Arcaf593462007-11-22 20:53:01 +0000255 bom = b'\xef\xbb\xbf'
256 compile(bom + b'print(1)\n', '', 'exec')
Guido van Rossumd8faa362007-04-27 19:54:29 +0000257 compile(source='pass', filename='?', mode='exec')
258 compile(dont_inherit=0, filename='tmp', source='0', mode='eval')
259 compile('pass', '?', dont_inherit=1, mode='exec')
Benjamin Peterson60320cb2008-09-26 21:49:22 +0000260 compile(memoryview(b"text"), "name", "exec")
Walter Dörwald919497e2003-01-19 16:23:59 +0000261 self.assertRaises(TypeError, compile)
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000262 self.assertRaises(ValueError, compile, 'print(42)\n', '<string>', 'badmode')
263 self.assertRaises(ValueError, compile, 'print(42)\n', '<string>', 'single', 0xff)
Neal Norwitzfcf44352005-11-27 20:37:43 +0000264 self.assertRaises(TypeError, compile, chr(0), 'f', 'exec')
Guido van Rossumd8faa362007-04-27 19:54:29 +0000265 self.assertRaises(TypeError, compile, 'pass', '?', 'exec',
266 mode='eval', source='0', filename='tmp')
Walter Dörwald1f5947b2007-05-22 16:52:54 +0000267 compile('print("\xe5")\n', '', 'exec')
268 self.assertRaises(TypeError, compile, chr(0), 'f', 'exec')
269 self.assertRaises(ValueError, compile, str('a = 1'), 'f', 'bad')
Guido van Rossumd8faa362007-04-27 19:54:29 +0000270
Walter Dörwald919497e2003-01-19 16:23:59 +0000271 def test_delattr(self):
Walter Dörwald919497e2003-01-19 16:23:59 +0000272 sys.spam = 1
273 delattr(sys, 'spam')
274 self.assertRaises(TypeError, delattr)
275
276 def test_dir(self):
Georg Brandle32b4222007-03-10 22:13:27 +0000277 # dir(wrong number of arguments)
Walter Dörwald919497e2003-01-19 16:23:59 +0000278 self.assertRaises(TypeError, dir, 42, 42)
279
Georg Brandle32b4222007-03-10 22:13:27 +0000280 # dir() - local scope
281 local_var = 1
Benjamin Peterson577473f2010-01-19 00:09:57 +0000282 self.assertIn('local_var', dir())
Georg Brandle32b4222007-03-10 22:13:27 +0000283
284 # dir(module)
Benjamin Peterson577473f2010-01-19 00:09:57 +0000285 self.assertIn('exit', dir(sys))
Georg Brandle32b4222007-03-10 22:13:27 +0000286
287 # dir(module_with_invalid__dict__)
Georg Brandle32b4222007-03-10 22:13:27 +0000288 class Foo(types.ModuleType):
289 __dict__ = 8
290 f = Foo("foo")
291 self.assertRaises(TypeError, dir, f)
292
293 # dir(type)
Benjamin Peterson577473f2010-01-19 00:09:57 +0000294 self.assertIn("strip", dir(str))
295 self.assertNotIn("__mro__", dir(str))
Georg Brandle32b4222007-03-10 22:13:27 +0000296
297 # dir(obj)
298 class Foo(object):
299 def __init__(self):
300 self.x = 7
301 self.y = 8
302 self.z = 9
303 f = Foo()
Benjamin Peterson577473f2010-01-19 00:09:57 +0000304 self.assertIn("y", dir(f))
Georg Brandle32b4222007-03-10 22:13:27 +0000305
306 # dir(obj_no__dict__)
307 class Foo(object):
308 __slots__ = []
309 f = Foo()
Benjamin Peterson577473f2010-01-19 00:09:57 +0000310 self.assertIn("__repr__", dir(f))
Georg Brandle32b4222007-03-10 22:13:27 +0000311
312 # dir(obj_no__class__with__dict__)
313 # (an ugly trick to cause getattr(f, "__class__") to fail)
314 class Foo(object):
315 __slots__ = ["__class__", "__dict__"]
316 def __init__(self):
317 self.bar = "wow"
318 f = Foo()
Benjamin Peterson577473f2010-01-19 00:09:57 +0000319 self.assertNotIn("__repr__", dir(f))
320 self.assertIn("bar", dir(f))
Georg Brandle32b4222007-03-10 22:13:27 +0000321
322 # dir(obj_using __dir__)
323 class Foo(object):
324 def __dir__(self):
325 return ["kan", "ga", "roo"]
326 f = Foo()
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000327 self.assertTrue(dir(f) == ["ga", "kan", "roo"])
Georg Brandle32b4222007-03-10 22:13:27 +0000328
329 # dir(obj__dir__not_list)
330 class Foo(object):
331 def __dir__(self):
332 return 7
333 f = Foo()
334 self.assertRaises(TypeError, dir, f)
335
Collin Winter3eed7652007-08-14 17:53:54 +0000336 # dir(traceback)
337 try:
338 raise IndexError
339 except:
340 self.assertEqual(len(dir(sys.exc_info()[2])), 4)
341
342
Walter Dörwald919497e2003-01-19 16:23:59 +0000343 def test_divmod(self):
344 self.assertEqual(divmod(12, 7), (1, 5))
345 self.assertEqual(divmod(-12, 7), (-2, 2))
346 self.assertEqual(divmod(12, -7), (-2, -2))
347 self.assertEqual(divmod(-12, -7), (1, -5))
348
Mark Dickinson5c2db372009-12-05 20:28:34 +0000349 self.assertEqual(divmod(-sys.maxsize-1, -1), (sys.maxsize+1, 0))
Raymond Hettinger5ea7e312004-09-30 07:47:20 +0000350
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000351 self.assertTrue(not fcmp(divmod(3.25, 1.0), (3.0, 0.25)))
352 self.assertTrue(not fcmp(divmod(-3.25, 1.0), (-4.0, 0.75)))
353 self.assertTrue(not fcmp(divmod(3.25, -1.0), (-4.0, -0.75)))
354 self.assertTrue(not fcmp(divmod(-3.25, -1.0), (3.0, -0.25)))
Walter Dörwald919497e2003-01-19 16:23:59 +0000355
356 self.assertRaises(TypeError, divmod)
357
358 def test_eval(self):
359 self.assertEqual(eval('1+1'), 2)
360 self.assertEqual(eval(' 1+1\n'), 2)
361 globals = {'a': 1, 'b': 2}
362 locals = {'b': 200, 'c': 300}
363 self.assertEqual(eval('a', globals) , 1)
364 self.assertEqual(eval('a', globals, locals), 1)
365 self.assertEqual(eval('b', globals, locals), 200)
366 self.assertEqual(eval('c', globals, locals), 300)
Walter Dörwald919497e2003-01-19 16:23:59 +0000367 globals = {'a': 1, 'b': 2}
368 locals = {'b': 200, 'c': 300}
Amaury Forgeot d'Arcaf593462007-11-22 20:53:01 +0000369 bom = b'\xef\xbb\xbf'
370 self.assertEqual(eval(bom + b'a', globals, locals), 1)
Walter Dörwald1f5947b2007-05-22 16:52:54 +0000371 self.assertEqual(eval('"\xe5"', globals), "\xe5")
Walter Dörwald919497e2003-01-19 16:23:59 +0000372 self.assertRaises(TypeError, eval)
373 self.assertRaises(TypeError, eval, ())
Amaury Forgeot d'Arcaf593462007-11-22 20:53:01 +0000374 self.assertRaises(SyntaxError, eval, bom[:2] + b'a')
Walter Dörwald919497e2003-01-19 16:23:59 +0000375
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000376 def test_general_eval(self):
377 # Tests that general mappings can be used for the locals argument
378
379 class M:
380 "Test mapping interface versus possible calls from eval()."
381 def __getitem__(self, key):
382 if key == 'a':
383 return 12
384 raise KeyError
Guido van Rossumcd70eee2007-02-11 18:53:00 +0000385 def keys(self):
386 return list('xyz')
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000387
388 m = M()
389 g = globals()
390 self.assertEqual(eval('a', g, m), 12)
391 self.assertRaises(NameError, eval, 'b', g, m)
392 self.assertEqual(eval('dir()', g, m), list('xyz'))
393 self.assertEqual(eval('globals()', g, m), g)
394 self.assertEqual(eval('locals()', g, m), m)
Raymond Hettinger513ffe82004-07-06 13:44:41 +0000395 self.assertRaises(TypeError, eval, 'a', m)
Raymond Hettinger66bd2332004-08-02 08:30:07 +0000396 class A:
397 "Non-mapping"
398 pass
399 m = A()
400 self.assertRaises(TypeError, eval, 'a', g, m)
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000401
402 # Verify that dict subclasses work as well
403 class D(dict):
404 def __getitem__(self, key):
405 if key == 'a':
406 return 12
407 return dict.__getitem__(self, key)
Guido van Rossumcd70eee2007-02-11 18:53:00 +0000408 def keys(self):
409 return list('xyz')
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000410
411 d = D()
412 self.assertEqual(eval('a', g, d), 12)
413 self.assertRaises(NameError, eval, 'b', g, d)
414 self.assertEqual(eval('dir()', g, d), list('xyz'))
415 self.assertEqual(eval('globals()', g, d), g)
416 self.assertEqual(eval('locals()', g, d), d)
417
418 # Verify locals stores (used by list comps)
419 eval('[locals() for i in (2,3)]', g, d)
Raymond Hettingerf80680d2008-02-06 00:07:11 +0000420 eval('[locals() for i in (2,3)]', g, collections.UserDict())
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000421
422 class SpreadSheet:
423 "Sample application showing nested, calculated lookups."
424 _cells = {}
425 def __setitem__(self, key, formula):
426 self._cells[key] = formula
Thomas Wouters73e5a5b2006-06-08 15:35:45 +0000427 def __getitem__(self, key):
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000428 return eval(self._cells[key], globals(), self)
429
430 ss = SpreadSheet()
431 ss['a1'] = '5'
432 ss['a2'] = 'a1*6'
433 ss['a3'] = 'a2*7'
434 self.assertEqual(ss['a3'], 210)
435
Raymond Hettinger2a7dede2004-08-07 04:55:30 +0000436 # Verify that dir() catches a non-list returned by eval
437 # SF bug #1004669
438 class C:
439 def __getitem__(self, item):
440 raise KeyError(item)
Guido van Rossumcd70eee2007-02-11 18:53:00 +0000441 def keys(self):
442 return 1 # used to be 'a' but that's no longer an error
Raymond Hettinger2a7dede2004-08-07 04:55:30 +0000443 self.assertRaises(TypeError, eval, 'dir()', globals(), C())
444
Georg Brandl7cae87c2006-09-06 06:51:57 +0000445 def test_exec(self):
446 g = {}
447 exec('z = 1', g)
448 if '__builtins__' in g:
449 del g['__builtins__']
450 self.assertEqual(g, {'z': 1})
451
Guido van Rossumef87d6e2007-05-02 19:09:54 +0000452 exec('z = 1+1', g)
Georg Brandl7cae87c2006-09-06 06:51:57 +0000453 if '__builtins__' in g:
454 del g['__builtins__']
455 self.assertEqual(g, {'z': 2})
456 g = {}
457 l = {}
458
Brett Cannon77628992010-03-20 20:59:33 +0000459 with check_warnings():
460 warnings.filterwarnings("ignore", "global statement",
461 module="<string>")
462 exec('global a; a = 1; b = 2', g, l)
Georg Brandl7cae87c2006-09-06 06:51:57 +0000463 if '__builtins__' in g:
464 del g['__builtins__']
465 if '__builtins__' in l:
466 del l['__builtins__']
467 self.assertEqual((g, l), ({'a': 1}, {'b': 2}))
468
Amaury Forgeot d'Arc9ed77352008-04-04 23:25:27 +0000469 def test_exec_redirected(self):
470 savestdout = sys.stdout
471 sys.stdout = None # Whatever that cannot flush()
472 try:
473 # Used to raise SystemError('error return without exception set')
474 exec('a')
475 except NameError:
476 pass
477 finally:
478 sys.stdout = savestdout
479
Walter Dörwald919497e2003-01-19 16:23:59 +0000480 def test_filter(self):
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000481 self.assertEqual(list(filter(lambda c: 'a' <= c <= 'z', 'Hello World')), list('elloorld'))
482 self.assertEqual(list(filter(None, [1, 'hello', [], [3], '', None, 9, 0])), [1, 'hello', [3], 9])
483 self.assertEqual(list(filter(lambda x: x > 0, [1, -3, 9, 0, 2])), [1, 9, 2])
484 self.assertEqual(list(filter(None, Squares(10))), [1, 4, 9, 16, 25, 36, 49, 64, 81])
485 self.assertEqual(list(filter(lambda x: x%2, Squares(10))), [1, 9, 25, 49, 81])
Walter Dörwald919497e2003-01-19 16:23:59 +0000486 def identity(item):
487 return 1
488 filter(identity, Squares(5))
489 self.assertRaises(TypeError, filter)
490 class BadSeq(object):
Tim Petersf2715e02003-02-19 02:35:07 +0000491 def __getitem__(self, index):
492 if index<4:
493 return 42
494 raise ValueError
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000495 self.assertRaises(ValueError, list, filter(lambda x: x, BadSeq()))
Walter Dörwald919497e2003-01-19 16:23:59 +0000496 def badfunc():
497 pass
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000498 self.assertRaises(TypeError, list, filter(badfunc, range(5)))
Walter Dörwald919497e2003-01-19 16:23:59 +0000499
Walter Dörwaldbf517072003-01-27 15:57:14 +0000500 # test bltinmodule.c::filtertuple()
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000501 self.assertEqual(list(filter(None, (1, 2))), [1, 2])
502 self.assertEqual(list(filter(lambda x: x>=3, (1, 2, 3, 4))), [3, 4])
503 self.assertRaises(TypeError, list, filter(42, (1, 2)))
Walter Dörwaldc3da83f2003-02-04 20:24:45 +0000504
Walter Dörwald919497e2003-01-19 16:23:59 +0000505 def test_getattr(self):
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000506 self.assertTrue(getattr(sys, 'stdout') is sys.stdout)
Walter Dörwald919497e2003-01-19 16:23:59 +0000507 self.assertRaises(TypeError, getattr, sys, 1)
508 self.assertRaises(TypeError, getattr, sys, 1, "foo")
509 self.assertRaises(TypeError, getattr)
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000510 self.assertRaises(AttributeError, getattr, sys, chr(sys.maxunicode))
Victor Stinner624dbf62010-03-12 17:17:58 +0000511 # unicode surrogates are not encodable to the default encoding (utf8)
512 self.assertRaises(AttributeError, getattr, 1, "\uDAD1\uD51E")
Walter Dörwald919497e2003-01-19 16:23:59 +0000513
514 def test_hasattr(self):
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000515 self.assertTrue(hasattr(sys, 'stdout'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000516 self.assertRaises(TypeError, hasattr, sys, 1)
517 self.assertRaises(TypeError, hasattr)
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000518 self.assertEqual(False, hasattr(sys, chr(sys.maxunicode)))
Walter Dörwald919497e2003-01-19 16:23:59 +0000519
Benjamin Peterson17689992010-08-24 03:26:23 +0000520 # Check that hasattr propagates all exceptions outside of
521 # AttributeError.
Alexandre Vassalottieca20b62008-05-16 02:54:33 +0000522 class A:
523 def __getattr__(self, what):
Benjamin Peterson17689992010-08-24 03:26:23 +0000524 raise SystemExit
525 self.assertRaises(SystemExit, hasattr, A(), "b")
Alexandre Vassalottieca20b62008-05-16 02:54:33 +0000526 class B:
527 def __getattr__(self, what):
Benjamin Peterson17689992010-08-24 03:26:23 +0000528 raise ValueError
529 self.assertRaises(ValueError, hasattr, B(), "b")
Alexandre Vassalottieca20b62008-05-16 02:54:33 +0000530
Walter Dörwald919497e2003-01-19 16:23:59 +0000531 def test_hash(self):
532 hash(None)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000533 self.assertEqual(hash(1), hash(1))
Walter Dörwald919497e2003-01-19 16:23:59 +0000534 self.assertEqual(hash(1), hash(1.0))
535 hash('spam')
Guido van Rossum98297ee2007-11-06 21:34:58 +0000536 self.assertEqual(hash('spam'), hash(b'spam'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000537 hash((0,1,2,3))
538 def f(): pass
539 self.assertRaises(TypeError, hash, [])
540 self.assertRaises(TypeError, hash, {})
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000541 # Bug 1536021: Allow hash to return long objects
542 class X:
543 def __hash__(self):
544 return 2**100
545 self.assertEquals(type(hash(X())), int)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000546 class Z(int):
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000547 def __hash__(self):
548 return self
Guido van Rossume2a383d2007-01-15 16:59:06 +0000549 self.assertEquals(hash(Z(42)), hash(42))
Walter Dörwald919497e2003-01-19 16:23:59 +0000550
551 def test_hex(self):
552 self.assertEqual(hex(16), '0x10')
Guido van Rossume2a383d2007-01-15 16:59:06 +0000553 self.assertEqual(hex(-16), '-0x10')
Walter Dörwald919497e2003-01-19 16:23:59 +0000554 self.assertRaises(TypeError, hex, {})
555
556 def test_id(self):
557 id(None)
558 id(1)
Walter Dörwald919497e2003-01-19 16:23:59 +0000559 id(1.0)
560 id('spam')
561 id((0,1,2,3))
562 id([0,1,2,3])
563 id({'spam': 1, 'eggs': 2, 'ham': 3})
564
Guido van Rossuma88a0332007-02-26 16:59:55 +0000565 # Test input() later, alphabetized as if it were raw_input
566
Walter Dörwald919497e2003-01-19 16:23:59 +0000567 def test_iter(self):
568 self.assertRaises(TypeError, iter)
569 self.assertRaises(TypeError, iter, 42, 42)
570 lists = [("1", "2"), ["1", "2"], "12"]
Walter Dörwald919497e2003-01-19 16:23:59 +0000571 for l in lists:
572 i = iter(l)
Georg Brandla18af4e2007-04-21 15:47:16 +0000573 self.assertEqual(next(i), '1')
574 self.assertEqual(next(i), '2')
575 self.assertRaises(StopIteration, next, i)
Walter Dörwald919497e2003-01-19 16:23:59 +0000576
577 def test_isinstance(self):
578 class C:
579 pass
580 class D(C):
581 pass
582 class E:
583 pass
584 c = C()
585 d = D()
586 e = E()
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000587 self.assertTrue(isinstance(c, C))
588 self.assertTrue(isinstance(d, C))
589 self.assertTrue(not isinstance(e, C))
590 self.assertTrue(not isinstance(c, D))
591 self.assertTrue(not isinstance('foo', E))
Walter Dörwald919497e2003-01-19 16:23:59 +0000592 self.assertRaises(TypeError, isinstance, E, 'foo')
593 self.assertRaises(TypeError, isinstance)
594
595 def test_issubclass(self):
596 class C:
597 pass
598 class D(C):
599 pass
600 class E:
601 pass
602 c = C()
603 d = D()
604 e = E()
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000605 self.assertTrue(issubclass(D, C))
606 self.assertTrue(issubclass(C, C))
607 self.assertTrue(not issubclass(C, D))
Walter Dörwald919497e2003-01-19 16:23:59 +0000608 self.assertRaises(TypeError, issubclass, 'foo', E)
609 self.assertRaises(TypeError, issubclass, E, 'foo')
610 self.assertRaises(TypeError, issubclass)
611
612 def test_len(self):
613 self.assertEqual(len('123'), 3)
614 self.assertEqual(len(()), 0)
615 self.assertEqual(len((1, 2, 3, 4)), 4)
616 self.assertEqual(len([1, 2, 3, 4]), 4)
617 self.assertEqual(len({}), 0)
618 self.assertEqual(len({'a':1, 'b': 2}), 2)
619 class BadSeq:
620 def __len__(self):
621 raise ValueError
622 self.assertRaises(ValueError, len, BadSeq())
Benjamin Petersonee1ae7c2009-02-08 21:07:20 +0000623 class InvalidLen:
624 def __len__(self):
625 return None
626 self.assertRaises(TypeError, len, InvalidLen())
627 class FloatLen:
628 def __len__(self):
629 return 4.5
630 self.assertRaises(TypeError, len, FloatLen())
631 class HugeLen:
632 def __len__(self):
633 return sys.maxsize + 1
634 self.assertRaises(OverflowError, len, HugeLen())
Mark Dickinsonfb3dc942010-05-25 19:06:24 +0000635 class NoLenMethod(object): pass
636 self.assertRaises(TypeError, len, NoLenMethod())
Walter Dörwald919497e2003-01-19 16:23:59 +0000637
Walter Dörwald919497e2003-01-19 16:23:59 +0000638 def test_map(self):
639 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000640 list(map(lambda x: x*x, range(1,4))),
Walter Dörwald919497e2003-01-19 16:23:59 +0000641 [1, 4, 9]
642 )
643 try:
644 from math import sqrt
645 except ImportError:
646 def sqrt(x):
647 return pow(x, 0.5)
648 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000649 list(map(lambda x: list(map(sqrt, x)), [[16, 4], [81, 9]])),
Walter Dörwald919497e2003-01-19 16:23:59 +0000650 [[4.0, 2.0], [9.0, 3.0]]
651 )
652 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000653 list(map(lambda x, y: x+y, [1,3,2], [9,1,4])),
Walter Dörwald919497e2003-01-19 16:23:59 +0000654 [10, 4, 6]
655 )
656
657 def plus(*v):
658 accu = 0
659 for i in v: accu = accu + i
660 return accu
661 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000662 list(map(plus, [1, 3, 7])),
Walter Dörwald919497e2003-01-19 16:23:59 +0000663 [1, 3, 7]
664 )
665 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000666 list(map(plus, [1, 3, 7], [4, 9, 2])),
Walter Dörwald919497e2003-01-19 16:23:59 +0000667 [1+4, 3+9, 7+2]
668 )
669 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000670 list(map(plus, [1, 3, 7], [4, 9, 2], [1, 1, 0])),
Walter Dörwald919497e2003-01-19 16:23:59 +0000671 [1+4+1, 3+9+1, 7+2+0]
672 )
673 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000674 list(map(int, Squares(10))),
Walter Dörwald919497e2003-01-19 16:23:59 +0000675 [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
676 )
Guido van Rossum47b9ff62006-08-24 00:41:19 +0000677 def Max(a, b):
678 if a is None:
679 return b
680 if b is None:
681 return a
682 return max(a, b)
Walter Dörwald919497e2003-01-19 16:23:59 +0000683 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000684 list(map(Max, Squares(3), Squares(2))),
685 [0, 1]
Walter Dörwald919497e2003-01-19 16:23:59 +0000686 )
687 self.assertRaises(TypeError, map)
688 self.assertRaises(TypeError, map, lambda x: x, 42)
Walter Dörwald919497e2003-01-19 16:23:59 +0000689 class BadSeq:
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000690 def __iter__(self):
Walter Dörwald919497e2003-01-19 16:23:59 +0000691 raise ValueError
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000692 yield None
693 self.assertRaises(ValueError, list, map(lambda x: x, BadSeq()))
Neal Norwitzfcf44352005-11-27 20:37:43 +0000694 def badfunc(x):
695 raise RuntimeError
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000696 self.assertRaises(RuntimeError, list, map(badfunc, range(5)))
Walter Dörwald919497e2003-01-19 16:23:59 +0000697
698 def test_max(self):
699 self.assertEqual(max('123123'), '3')
700 self.assertEqual(max(1, 2, 3), 3)
701 self.assertEqual(max((1, 2, 3, 1, 2, 3)), 3)
702 self.assertEqual(max([1, 2, 3, 1, 2, 3]), 3)
703
Guido van Rossume2a383d2007-01-15 16:59:06 +0000704 self.assertEqual(max(1, 2, 3.0), 3.0)
705 self.assertEqual(max(1, 2.0, 3), 3)
706 self.assertEqual(max(1.0, 2, 3), 3)
Walter Dörwald919497e2003-01-19 16:23:59 +0000707
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +0000708 for stmt in (
709 "max(key=int)", # no args
710 "max(1, key=int)", # single arg not iterable
711 "max(1, 2, keystone=int)", # wrong keyword
712 "max(1, 2, key=int, abc=int)", # two many keywords
713 "max(1, 2, key=1)", # keyfunc is not callable
714 ):
Tim Peters7f061872004-12-07 21:17:46 +0000715 try:
Georg Brandl7cae87c2006-09-06 06:51:57 +0000716 exec(stmt, globals())
Tim Peters7f061872004-12-07 21:17:46 +0000717 except TypeError:
718 pass
719 else:
720 self.fail(stmt)
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +0000721
722 self.assertEqual(max((1,), key=neg), 1) # one elem iterable
723 self.assertEqual(max((1,2), key=neg), 1) # two elem iterable
724 self.assertEqual(max(1, 2, key=neg), 1) # two elems
725
726 data = [random.randrange(200) for i in range(100)]
727 keys = dict((elem, random.randrange(50)) for elem in data)
728 f = keys.__getitem__
729 self.assertEqual(max(data, key=f),
730 sorted(reversed(data), key=f)[-1])
731
Walter Dörwald919497e2003-01-19 16:23:59 +0000732 def test_min(self):
733 self.assertEqual(min('123123'), '1')
734 self.assertEqual(min(1, 2, 3), 1)
735 self.assertEqual(min((1, 2, 3, 1, 2, 3)), 1)
736 self.assertEqual(min([1, 2, 3, 1, 2, 3]), 1)
737
Guido van Rossume2a383d2007-01-15 16:59:06 +0000738 self.assertEqual(min(1, 2, 3.0), 1)
739 self.assertEqual(min(1, 2.0, 3), 1)
740 self.assertEqual(min(1.0, 2, 3), 1.0)
Walter Dörwald919497e2003-01-19 16:23:59 +0000741
742 self.assertRaises(TypeError, min)
743 self.assertRaises(TypeError, min, 42)
744 self.assertRaises(ValueError, min, ())
745 class BadSeq:
746 def __getitem__(self, index):
747 raise ValueError
748 self.assertRaises(ValueError, min, BadSeq())
Walter Dörwald919497e2003-01-19 16:23:59 +0000749
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +0000750 for stmt in (
751 "min(key=int)", # no args
752 "min(1, key=int)", # single arg not iterable
753 "min(1, 2, keystone=int)", # wrong keyword
754 "min(1, 2, key=int, abc=int)", # two many keywords
755 "min(1, 2, key=1)", # keyfunc is not callable
756 ):
Tim Peters7f061872004-12-07 21:17:46 +0000757 try:
Georg Brandl7cae87c2006-09-06 06:51:57 +0000758 exec(stmt, globals())
Tim Peters7f061872004-12-07 21:17:46 +0000759 except TypeError:
760 pass
761 else:
762 self.fail(stmt)
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +0000763
764 self.assertEqual(min((1,), key=neg), 1) # one elem iterable
765 self.assertEqual(min((1,2), key=neg), 2) # two elem iterable
766 self.assertEqual(min(1, 2, key=neg), 2) # two elems
767
768 data = [random.randrange(200) for i in range(100)]
769 keys = dict((elem, random.randrange(50)) for elem in data)
770 f = keys.__getitem__
771 self.assertEqual(min(data, key=f),
772 sorted(data, key=f)[0])
773
Georg Brandla18af4e2007-04-21 15:47:16 +0000774 def test_next(self):
775 it = iter(range(2))
776 self.assertEqual(next(it), 0)
777 self.assertEqual(next(it), 1)
778 self.assertRaises(StopIteration, next, it)
779 self.assertRaises(StopIteration, next, it)
780 self.assertEquals(next(it, 42), 42)
781
782 class Iter(object):
783 def __iter__(self):
784 return self
785 def __next__(self):
786 raise StopIteration
787
788 it = iter(Iter())
789 self.assertEquals(next(it, 42), 42)
790 self.assertRaises(StopIteration, next, it)
791
792 def gen():
793 yield 1
794 return
795
796 it = gen()
797 self.assertEquals(next(it), 1)
798 self.assertRaises(StopIteration, next, it)
799 self.assertEquals(next(it, 42), 42)
800
Walter Dörwald919497e2003-01-19 16:23:59 +0000801 def test_oct(self):
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000802 self.assertEqual(oct(100), '0o144')
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000803 self.assertEqual(oct(-100), '-0o144')
Walter Dörwald919497e2003-01-19 16:23:59 +0000804 self.assertRaises(TypeError, oct, ())
805
806 def write_testfile(self):
Guido van Rossuma88a0332007-02-26 16:59:55 +0000807 # NB the first 4 lines are also used to test input, below
Walter Dörwald919497e2003-01-19 16:23:59 +0000808 fp = open(TESTFN, 'w')
809 try:
810 fp.write('1+1\n')
Walter Dörwald919497e2003-01-19 16:23:59 +0000811 fp.write('The quick brown fox jumps over the lazy dog')
812 fp.write('.\n')
813 fp.write('Dear John\n')
814 fp.write('XXX'*100)
815 fp.write('YYY'*100)
816 finally:
817 fp.close()
818
819 def test_open(self):
820 self.write_testfile()
821 fp = open(TESTFN, 'r')
822 try:
823 self.assertEqual(fp.readline(4), '1+1\n')
Walter Dörwald919497e2003-01-19 16:23:59 +0000824 self.assertEqual(fp.readline(), 'The quick brown fox jumps over the lazy dog.\n')
825 self.assertEqual(fp.readline(4), 'Dear')
826 self.assertEqual(fp.readline(100), ' John\n')
827 self.assertEqual(fp.read(300), 'XXX'*100)
828 self.assertEqual(fp.read(1000), 'YYY'*100)
829 finally:
830 fp.close()
831 unlink(TESTFN)
832
833 def test_ord(self):
834 self.assertEqual(ord(' '), 32)
835 self.assertEqual(ord('A'), 65)
836 self.assertEqual(ord('a'), 97)
Guido van Rossumf9e91c92007-05-08 21:05:48 +0000837 self.assertEqual(ord('\x80'), 128)
838 self.assertEqual(ord('\xff'), 255)
839
840 self.assertEqual(ord(b' '), 32)
841 self.assertEqual(ord(b'A'), 65)
842 self.assertEqual(ord(b'a'), 97)
843 self.assertEqual(ord(b'\x80'), 128)
844 self.assertEqual(ord(b'\xff'), 255)
845
Walter Dörwald1f5947b2007-05-22 16:52:54 +0000846 self.assertEqual(ord(chr(sys.maxunicode)), sys.maxunicode)
Walter Dörwald919497e2003-01-19 16:23:59 +0000847 self.assertRaises(TypeError, ord, 42)
Walter Dörwald919497e2003-01-19 16:23:59 +0000848
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000849 self.assertEqual(ord(chr(0x10FFFF)), 0x10FFFF)
850 self.assertEqual(ord("\U0000FFFF"), 0x0000FFFF)
851 self.assertEqual(ord("\U00010000"), 0x00010000)
852 self.assertEqual(ord("\U00010001"), 0x00010001)
853 self.assertEqual(ord("\U000FFFFE"), 0x000FFFFE)
854 self.assertEqual(ord("\U000FFFFF"), 0x000FFFFF)
855 self.assertEqual(ord("\U00100000"), 0x00100000)
856 self.assertEqual(ord("\U00100001"), 0x00100001)
857 self.assertEqual(ord("\U0010FFFE"), 0x0010FFFE)
858 self.assertEqual(ord("\U0010FFFF"), 0x0010FFFF)
859
Walter Dörwald919497e2003-01-19 16:23:59 +0000860 def test_pow(self):
861 self.assertEqual(pow(0,0), 1)
862 self.assertEqual(pow(0,1), 0)
863 self.assertEqual(pow(1,0), 1)
864 self.assertEqual(pow(1,1), 1)
865
866 self.assertEqual(pow(2,0), 1)
867 self.assertEqual(pow(2,10), 1024)
868 self.assertEqual(pow(2,20), 1024*1024)
869 self.assertEqual(pow(2,30), 1024*1024*1024)
870
871 self.assertEqual(pow(-2,0), 1)
872 self.assertEqual(pow(-2,1), -2)
873 self.assertEqual(pow(-2,2), 4)
874 self.assertEqual(pow(-2,3), -8)
875
Walter Dörwald919497e2003-01-19 16:23:59 +0000876 self.assertAlmostEqual(pow(0.,0), 1.)
877 self.assertAlmostEqual(pow(0.,1), 0.)
878 self.assertAlmostEqual(pow(1.,0), 1.)
879 self.assertAlmostEqual(pow(1.,1), 1.)
880
881 self.assertAlmostEqual(pow(2.,0), 1.)
882 self.assertAlmostEqual(pow(2.,10), 1024.)
883 self.assertAlmostEqual(pow(2.,20), 1024.*1024.)
884 self.assertAlmostEqual(pow(2.,30), 1024.*1024.*1024.)
885
886 self.assertAlmostEqual(pow(-2.,0), 1.)
887 self.assertAlmostEqual(pow(-2.,1), -2.)
888 self.assertAlmostEqual(pow(-2.,2), 4.)
889 self.assertAlmostEqual(pow(-2.,3), -8.)
890
Mark Dickinson5c2db372009-12-05 20:28:34 +0000891 for x in 2, 2.0:
892 for y in 10, 10.0:
893 for z in 1000, 1000.0:
Walter Dörwald919497e2003-01-19 16:23:59 +0000894 if isinstance(x, float) or \
895 isinstance(y, float) or \
896 isinstance(z, float):
897 self.assertRaises(TypeError, pow, x, y, z)
898 else:
899 self.assertAlmostEqual(pow(x, y, z), 24.0)
900
Jeffrey Yasskin3404b3c2007-09-07 15:15:49 +0000901 self.assertAlmostEqual(pow(-1, 0.5), 1j)
902 self.assertAlmostEqual(pow(-1, 1/3), 0.5 + 0.8660254037844386j)
903
Walter Dörwald919497e2003-01-19 16:23:59 +0000904 self.assertRaises(TypeError, pow, -1, -2, 3)
905 self.assertRaises(ValueError, pow, 1, 2, 0)
Walter Dörwald919497e2003-01-19 16:23:59 +0000906
907 self.assertRaises(TypeError, pow)
908
909 def test_range(self):
Guido van Rossum805365e2007-05-07 22:24:25 +0000910 self.assertEqual(list(range(3)), [0, 1, 2])
911 self.assertEqual(list(range(1, 5)), [1, 2, 3, 4])
912 self.assertEqual(list(range(0)), [])
913 self.assertEqual(list(range(-3)), [])
914 self.assertEqual(list(range(1, 10, 3)), [1, 4, 7])
915 #self.assertEqual(list(range(5, -5, -3)), [5, 2, -1, -4])
Walter Dörwald919497e2003-01-19 16:23:59 +0000916
Mark Dickinsoneb36d312009-06-24 18:36:46 +0000917 #issue 6334: the internal stored range length was being
918 #computed incorrectly in some cases involving large arguments.
919 x = range(10**20, 10**20+10, 3)
920 self.assertEqual(len(x), 4)
921 self.assertEqual(len(list(x)), 4)
922
923 x = range(10**20+10, 10**20, 3)
924 self.assertEqual(len(x), 0)
925 self.assertEqual(len(list(x)), 0)
926
927 x = range(10**20, 10**20+10, -3)
928 self.assertEqual(len(x), 0)
929 self.assertEqual(len(list(x)), 0)
930
931 x = range(10**20+10, 10**20, -3)
932 self.assertEqual(len(x), 4)
933 self.assertEqual(len(list(x)), 4)
934
Guido van Rossumefbbb1c2003-04-11 18:43:06 +0000935 # Now test range() with longs
Guido van Rossum805365e2007-05-07 22:24:25 +0000936 self.assertEqual(list(range(-2**100)), [])
937 self.assertEqual(list(range(0, -2**100)), [])
938 self.assertEqual(list(range(0, 2**100, -1)), [])
939 self.assertEqual(list(range(0, 2**100, -1)), [])
Guido van Rossumefbbb1c2003-04-11 18:43:06 +0000940
Christian Heimesa37d4c62007-12-04 23:02:19 +0000941 a = int(10 * sys.maxsize)
942 b = int(100 * sys.maxsize)
943 c = int(50 * sys.maxsize)
Guido van Rossumefbbb1c2003-04-11 18:43:06 +0000944
Guido van Rossum805365e2007-05-07 22:24:25 +0000945 self.assertEqual(list(range(a, a+2)), [a, a+1])
946 self.assertEqual(list(range(a+2, a, -1)), [a+2, a+1])
947 self.assertEqual(list(range(a+4, a, -2)), [a+4, a+2])
Guido van Rossumefbbb1c2003-04-11 18:43:06 +0000948
Guido van Rossum805365e2007-05-07 22:24:25 +0000949 seq = list(range(a, b, c))
Benjamin Peterson577473f2010-01-19 00:09:57 +0000950 self.assertIn(a, seq)
951 self.assertNotIn(b, seq)
Guido van Rossumefbbb1c2003-04-11 18:43:06 +0000952 self.assertEqual(len(seq), 2)
953
Guido van Rossum805365e2007-05-07 22:24:25 +0000954 seq = list(range(b, a, -c))
Benjamin Peterson577473f2010-01-19 00:09:57 +0000955 self.assertIn(b, seq)
956 self.assertNotIn(a, seq)
Guido van Rossumefbbb1c2003-04-11 18:43:06 +0000957 self.assertEqual(len(seq), 2)
958
Guido van Rossum805365e2007-05-07 22:24:25 +0000959 seq = list(range(-a, -b, -c))
Benjamin Peterson577473f2010-01-19 00:09:57 +0000960 self.assertIn(-a, seq)
961 self.assertNotIn(-b, seq)
Guido van Rossumefbbb1c2003-04-11 18:43:06 +0000962 self.assertEqual(len(seq), 2)
963
Walter Dörwald919497e2003-01-19 16:23:59 +0000964 self.assertRaises(TypeError, range)
965 self.assertRaises(TypeError, range, 1, 2, 3, 4)
966 self.assertRaises(ValueError, range, 1, 2, 0)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000967 self.assertRaises(ValueError, range, a, a + 1, int(0))
Neal Norwitzfcf44352005-11-27 20:37:43 +0000968
Mark Dickinson5c2db372009-12-05 20:28:34 +0000969 """ XXX(nnorwitz):
Neal Norwitzfcf44352005-11-27 20:37:43 +0000970 class badzero(int):
Guido van Rossum47b9ff62006-08-24 00:41:19 +0000971 def __eq__(self, other):
Neal Norwitzfcf44352005-11-27 20:37:43 +0000972 raise RuntimeError
Guido van Rossum47b9ff62006-08-24 00:41:19 +0000973 __ne__ = __lt__ = __gt__ = __le__ = __ge__ = __eq__
974
975 # XXX This won't (but should!) raise RuntimeError if a is an int...
Neal Norwitzfcf44352005-11-27 20:37:43 +0000976 self.assertRaises(RuntimeError, range, a, a + 1, badzero(1))
Guido van Rossum805365e2007-05-07 22:24:25 +0000977 """
Walter Dörwald919497e2003-01-19 16:23:59 +0000978
Mark Dickinson85b53532010-05-05 22:39:58 +0000979 # Reject floats.
980 self.assertRaises(TypeError, range, 1., 1., 1.)
Tim Peters299b3df2003-04-15 14:40:03 +0000981 self.assertRaises(TypeError, range, 1e100, 1e101, 1e101)
Guido van Rossumefbbb1c2003-04-11 18:43:06 +0000982
Walter Dörwald357981e2003-04-15 18:59:28 +0000983 self.assertRaises(TypeError, range, 0, "spam")
984 self.assertRaises(TypeError, range, 0, 42, "spam")
985
Christian Heimesa37d4c62007-12-04 23:02:19 +0000986 #NEAL self.assertRaises(OverflowError, range, -sys.maxsize, sys.maxsize)
987 #NEAL self.assertRaises(OverflowError, range, 0, 2*sys.maxsize)
Guido van Rossum805365e2007-05-07 22:24:25 +0000988
Christian Heimesa37d4c62007-12-04 23:02:19 +0000989 self.assertRaises(OverflowError, len, range(0, sys.maxsize**10))
Walter Dörwald357981e2003-04-15 18:59:28 +0000990
Mark Dickinson85b53532010-05-05 22:39:58 +0000991 bignum = 2*sys.maxsize
992 smallnum = 42
993
994 # User-defined class with an __index__ method
995 class I:
996 def __init__(self, n):
997 self.n = int(n)
998 def __index__(self):
999 return self.n
1000 self.assertEqual(list(range(I(bignum), I(bignum + 1))), [bignum])
1001 self.assertEqual(list(range(I(smallnum), I(smallnum + 1))), [smallnum])
1002
1003 # User-defined class with a failing __index__ method
1004 class IX:
1005 def __index__(self):
1006 raise RuntimeError
1007 self.assertRaises(RuntimeError, range, IX())
1008
1009 # User-defined class with an invalid __index__ method
1010 class IN:
1011 def __index__(self):
1012 return "not a number"
1013
1014 self.assertRaises(TypeError, range, IN())
1015 # Exercise various combinations of bad arguments, to check
1016 # refcounting logic
1017 self.assertRaises(TypeError, range, 0.0)
1018
1019 self.assertRaises(TypeError, range, 0, 0.0)
1020 self.assertRaises(TypeError, range, 0.0, 0)
1021 self.assertRaises(TypeError, range, 0.0, 0.0)
1022
1023 self.assertRaises(TypeError, range, 0, 0, 1.0)
1024 self.assertRaises(TypeError, range, 0, 0.0, 1)
1025 self.assertRaises(TypeError, range, 0, 0.0, 1.0)
1026 self.assertRaises(TypeError, range, 0.0, 0, 1)
1027 self.assertRaises(TypeError, range, 0.0, 0, 1.0)
1028 self.assertRaises(TypeError, range, 0.0, 0.0, 1)
1029 self.assertRaises(TypeError, range, 0.0, 0.0, 1.0)
1030
Guido van Rossuma88a0332007-02-26 16:59:55 +00001031 def test_input(self):
1032 self.write_testfile()
1033 fp = open(TESTFN, 'r')
1034 savestdin = sys.stdin
1035 savestdout = sys.stdout # Eats the echo
1036 try:
1037 sys.stdin = fp
1038 sys.stdout = BitBucket()
1039 self.assertEqual(input(), "1+1")
Guido van Rossuma88a0332007-02-26 16:59:55 +00001040 self.assertEqual(input(), 'The quick brown fox jumps over the lazy dog.')
1041 self.assertEqual(input('testing\n'), 'Dear John')
1042
1043 # SF 1535165: don't segfault on closed stdin
1044 # sys.stdout must be a regular file for triggering
1045 sys.stdout = savestdout
1046 sys.stdin.close()
1047 self.assertRaises(ValueError, input)
1048
1049 sys.stdout = BitBucket()
Guido van Rossum34d19282007-08-09 01:03:29 +00001050 sys.stdin = io.StringIO("NULL\0")
Guido van Rossuma88a0332007-02-26 16:59:55 +00001051 self.assertRaises(TypeError, input, 42, 42)
Guido van Rossum34d19282007-08-09 01:03:29 +00001052 sys.stdin = io.StringIO(" 'whitespace'")
Guido van Rossuma88a0332007-02-26 16:59:55 +00001053 self.assertEqual(input(), " 'whitespace'")
Guido van Rossum34d19282007-08-09 01:03:29 +00001054 sys.stdin = io.StringIO()
Guido van Rossuma88a0332007-02-26 16:59:55 +00001055 self.assertRaises(EOFError, input)
1056
1057 del sys.stdout
1058 self.assertRaises(RuntimeError, input, 'prompt')
1059 del sys.stdin
1060 self.assertRaises(RuntimeError, input, 'prompt')
1061 finally:
1062 sys.stdin = savestdin
1063 sys.stdout = savestdout
1064 fp.close()
1065 unlink(TESTFN)
1066
Walter Dörwald919497e2003-01-19 16:23:59 +00001067 def test_repr(self):
1068 self.assertEqual(repr(''), '\'\'')
1069 self.assertEqual(repr(0), '0')
Walter Dörwald919497e2003-01-19 16:23:59 +00001070 self.assertEqual(repr(()), '()')
1071 self.assertEqual(repr([]), '[]')
1072 self.assertEqual(repr({}), '{}')
1073 a = []
1074 a.append(a)
1075 self.assertEqual(repr(a), '[[...]]')
1076 a = {}
1077 a[0] = a
1078 self.assertEqual(repr(a), '{0: {...}}')
1079
1080 def test_round(self):
1081 self.assertEqual(round(0.0), 0.0)
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001082 self.assertEqual(type(round(0.0)), int)
Walter Dörwald919497e2003-01-19 16:23:59 +00001083 self.assertEqual(round(1.0), 1.0)
1084 self.assertEqual(round(10.0), 10.0)
1085 self.assertEqual(round(1000000000.0), 1000000000.0)
1086 self.assertEqual(round(1e20), 1e20)
1087
1088 self.assertEqual(round(-1.0), -1.0)
1089 self.assertEqual(round(-10.0), -10.0)
1090 self.assertEqual(round(-1000000000.0), -1000000000.0)
1091 self.assertEqual(round(-1e20), -1e20)
1092
1093 self.assertEqual(round(0.1), 0.0)
1094 self.assertEqual(round(1.1), 1.0)
1095 self.assertEqual(round(10.1), 10.0)
1096 self.assertEqual(round(1000000000.1), 1000000000.0)
1097
1098 self.assertEqual(round(-1.1), -1.0)
1099 self.assertEqual(round(-10.1), -10.0)
1100 self.assertEqual(round(-1000000000.1), -1000000000.0)
1101
1102 self.assertEqual(round(0.9), 1.0)
1103 self.assertEqual(round(9.9), 10.0)
1104 self.assertEqual(round(999999999.9), 1000000000.0)
1105
1106 self.assertEqual(round(-0.9), -1.0)
1107 self.assertEqual(round(-9.9), -10.0)
1108 self.assertEqual(round(-999999999.9), -1000000000.0)
1109
1110 self.assertEqual(round(-8.0, -1), -10.0)
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001111 self.assertEqual(type(round(-8.0, -1)), float)
1112
1113 self.assertEqual(type(round(-8.0, 0)), float)
1114 self.assertEqual(type(round(-8.0, 1)), float)
1115
1116 # Check even / odd rounding behaviour
1117 self.assertEqual(round(5.5), 6)
1118 self.assertEqual(round(6.5), 6)
1119 self.assertEqual(round(-5.5), -6)
1120 self.assertEqual(round(-6.5), -6)
1121
1122 # Check behavior on ints
1123 self.assertEqual(round(0), 0)
1124 self.assertEqual(round(8), 8)
1125 self.assertEqual(round(-8), -8)
1126 self.assertEqual(type(round(0)), int)
Mark Dickinson1124e712009-01-28 21:25:58 +00001127 self.assertEqual(type(round(-8, -1)), int)
1128 self.assertEqual(type(round(-8, 0)), int)
1129 self.assertEqual(type(round(-8, 1)), int)
Walter Dörwald919497e2003-01-19 16:23:59 +00001130
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001131 # test new kwargs
1132 self.assertEqual(round(number=-8.0, ndigits=-1), -10.0)
1133
Walter Dörwald919497e2003-01-19 16:23:59 +00001134 self.assertRaises(TypeError, round)
1135
Alex Martelliae211f92007-08-22 23:21:33 +00001136 # test generic rounding delegation for reals
1137 class TestRound:
1138 def __round__(self):
1139 return 23
1140
1141 class TestNoRound:
1142 pass
1143
1144 self.assertEqual(round(TestRound()), 23)
1145
1146 self.assertRaises(TypeError, round, 1, 2, 3)
1147 self.assertRaises(TypeError, round, TestNoRound())
1148
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001149 t = TestNoRound()
1150 t.__round__ = lambda *args: args
1151 self.assertRaises(TypeError, round, t)
1152 self.assertRaises(TypeError, round, t, 0)
1153
Mark Dickinsonad731b92009-11-09 17:12:30 +00001154 # Some versions of glibc for alpha have a bug that affects
1155 # float -> integer rounding (floor, ceil, rint, round) for
1156 # values in the range [2**52, 2**53). See:
1157 #
1158 # http://sources.redhat.com/bugzilla/show_bug.cgi?id=5350
1159 #
1160 # We skip this test on Linux/alpha if it would fail.
1161 linux_alpha = (platform.system().startswith('Linux') and
1162 platform.machine().startswith('alpha'))
1163 system_round_bug = round(5e15+1) != 5e15+1
1164 @unittest.skipIf(linux_alpha and system_round_bug,
1165 "test will fail; failure is probably due to a "
1166 "buggy system round function")
1167 def test_round_large(self):
1168 # Issue #1869: integral floats should remain unchanged
1169 self.assertEqual(round(5e15-1), 5e15-1)
1170 self.assertEqual(round(5e15), 5e15)
1171 self.assertEqual(round(5e15+1), 5e15+1)
1172 self.assertEqual(round(5e15+2), 5e15+2)
1173 self.assertEqual(round(5e15+3), 5e15+3)
1174
Walter Dörwald919497e2003-01-19 16:23:59 +00001175 def test_setattr(self):
Tim Petersf2715e02003-02-19 02:35:07 +00001176 setattr(sys, 'spam', 1)
1177 self.assertEqual(sys.spam, 1)
1178 self.assertRaises(TypeError, setattr, sys, 1, 'spam')
1179 self.assertRaises(TypeError, setattr)
Walter Dörwald919497e2003-01-19 16:23:59 +00001180
Walter Dörwald919497e2003-01-19 16:23:59 +00001181
Alex Martellia70b1912003-04-22 08:12:33 +00001182 def test_sum(self):
1183 self.assertEqual(sum([]), 0)
Guido van Rossum805365e2007-05-07 22:24:25 +00001184 self.assertEqual(sum(list(range(2,8))), 27)
1185 self.assertEqual(sum(iter(list(range(2,8)))), 27)
Alex Martellia70b1912003-04-22 08:12:33 +00001186 self.assertEqual(sum(Squares(10)), 285)
1187 self.assertEqual(sum(iter(Squares(10))), 285)
1188 self.assertEqual(sum([[1], [2], [3]], []), [1, 2, 3])
1189
1190 self.assertRaises(TypeError, sum)
1191 self.assertRaises(TypeError, sum, 42)
1192 self.assertRaises(TypeError, sum, ['a', 'b', 'c'])
1193 self.assertRaises(TypeError, sum, ['a', 'b', 'c'], '')
1194 self.assertRaises(TypeError, sum, [[1], [2], [3]])
1195 self.assertRaises(TypeError, sum, [{2:3}])
1196 self.assertRaises(TypeError, sum, [{2:3}]*2, {2:3})
1197
1198 class BadSeq:
1199 def __getitem__(self, index):
1200 raise ValueError
1201 self.assertRaises(ValueError, sum, BadSeq())
1202
Mark Dickinson3a22b472009-10-17 21:48:16 +00001203 empty = []
1204 sum(([x] for x in range(10)), empty)
1205 self.assertEqual(empty, [])
1206
Walter Dörwald919497e2003-01-19 16:23:59 +00001207 def test_type(self):
1208 self.assertEqual(type(''), type('123'))
1209 self.assertNotEqual(type(''), type(()))
1210
Guido van Rossumfee7b932005-01-16 00:21:28 +00001211 # We don't want self in vars(), so these are static methods
1212
1213 @staticmethod
Walter Dörwald919497e2003-01-19 16:23:59 +00001214 def get_vars_f0():
1215 return vars()
Walter Dörwald919497e2003-01-19 16:23:59 +00001216
Guido van Rossumfee7b932005-01-16 00:21:28 +00001217 @staticmethod
Walter Dörwald919497e2003-01-19 16:23:59 +00001218 def get_vars_f2():
1219 BuiltinTest.get_vars_f0()
1220 a = 1
1221 b = 2
1222 return vars()
Walter Dörwald919497e2003-01-19 16:23:59 +00001223
Mark Dickinsonfb3dc942010-05-25 19:06:24 +00001224 class C_get_vars(object):
1225 def getDict(self):
1226 return {'a':2}
1227 __dict__ = property(fget=getDict)
1228
Walter Dörwald919497e2003-01-19 16:23:59 +00001229 def test_vars(self):
Raymond Hettingera690a992003-11-16 16:17:49 +00001230 self.assertEqual(set(vars()), set(dir()))
Raymond Hettingera690a992003-11-16 16:17:49 +00001231 self.assertEqual(set(vars(sys)), set(dir(sys)))
Walter Dörwald919497e2003-01-19 16:23:59 +00001232 self.assertEqual(self.get_vars_f0(), {})
1233 self.assertEqual(self.get_vars_f2(), {'a': 1, 'b': 2})
1234 self.assertRaises(TypeError, vars, 42, 42)
1235 self.assertRaises(TypeError, vars, 42)
Mark Dickinsonfb3dc942010-05-25 19:06:24 +00001236 self.assertEqual(vars(self.C_get_vars()), {'a':2})
Walter Dörwald919497e2003-01-19 16:23:59 +00001237
1238 def test_zip(self):
1239 a = (1, 2, 3)
1240 b = (4, 5, 6)
1241 t = [(1, 4), (2, 5), (3, 6)]
Guido van Rossum801f0d72006-08-24 19:48:10 +00001242 self.assertEqual(list(zip(a, b)), t)
Walter Dörwald919497e2003-01-19 16:23:59 +00001243 b = [4, 5, 6]
Guido van Rossum801f0d72006-08-24 19:48:10 +00001244 self.assertEqual(list(zip(a, b)), t)
Walter Dörwald919497e2003-01-19 16:23:59 +00001245 b = (4, 5, 6, 7)
Guido van Rossum801f0d72006-08-24 19:48:10 +00001246 self.assertEqual(list(zip(a, b)), t)
Walter Dörwald919497e2003-01-19 16:23:59 +00001247 class I:
1248 def __getitem__(self, i):
1249 if i < 0 or i > 2: raise IndexError
1250 return i + 4
Guido van Rossum801f0d72006-08-24 19:48:10 +00001251 self.assertEqual(list(zip(a, I())), t)
1252 self.assertEqual(list(zip()), [])
1253 self.assertEqual(list(zip(*[])), [])
Walter Dörwald919497e2003-01-19 16:23:59 +00001254 self.assertRaises(TypeError, zip, None)
1255 class G:
1256 pass
1257 self.assertRaises(TypeError, zip, a, G())
Alexander Belopolskye29e6bf2010-08-16 18:55:46 +00001258 self.assertRaises(RuntimeError, zip, a, TestFailingIter())
Walter Dörwald919497e2003-01-19 16:23:59 +00001259
1260 # Make sure zip doesn't try to allocate a billion elements for the
1261 # result list when one of its arguments doesn't say how long it is.
1262 # A MemoryError is the most likely failure mode.
1263 class SequenceWithoutALength:
1264 def __getitem__(self, i):
1265 if i == 5:
1266 raise IndexError
1267 else:
1268 return i
1269 self.assertEqual(
Guido van Rossum805365e2007-05-07 22:24:25 +00001270 list(zip(SequenceWithoutALength(), range(2**30))),
Walter Dörwald919497e2003-01-19 16:23:59 +00001271 list(enumerate(range(5)))
1272 )
1273
1274 class BadSeq:
1275 def __getitem__(self, i):
1276 if i == 5:
1277 raise ValueError
1278 else:
1279 return i
Guido van Rossum801f0d72006-08-24 19:48:10 +00001280 self.assertRaises(ValueError, list, zip(BadSeq(), BadSeq()))
Walter Dörwald919497e2003-01-19 16:23:59 +00001281
Christian Heimes90c3d9b2008-02-23 13:18:03 +00001282 def test_bin(self):
1283 self.assertEqual(bin(0), '0b0')
1284 self.assertEqual(bin(1), '0b1')
1285 self.assertEqual(bin(-1), '-0b1')
1286 self.assertEqual(bin(2**65), '0b1' + '0' * 65)
1287 self.assertEqual(bin(2**65-1), '0b' + '1' * 65)
1288 self.assertEqual(bin(-(2**65)), '-0b1' + '0' * 65)
1289 self.assertEqual(bin(-(2**65-1)), '-0b' + '1' * 65)
1290
Georg Brandl953152f2009-07-22 12:03:59 +00001291 def test_bytearray_translate(self):
1292 x = bytearray(b"abc")
1293 self.assertRaises(ValueError, x.translate, b"1", 1)
1294 self.assertRaises(TypeError, x.translate, b"1"*256, 1)
1295
Raymond Hettinger64958a12003-12-17 20:43:33 +00001296class TestSorted(unittest.TestCase):
1297
1298 def test_basic(self):
Guido van Rossum805365e2007-05-07 22:24:25 +00001299 data = list(range(100))
Raymond Hettinger64958a12003-12-17 20:43:33 +00001300 copy = data[:]
1301 random.shuffle(copy)
1302 self.assertEqual(data, sorted(copy))
1303 self.assertNotEqual(data, copy)
1304
1305 data.reverse()
1306 random.shuffle(copy)
Raymond Hettinger64958a12003-12-17 20:43:33 +00001307 self.assertEqual(data, sorted(copy, key=lambda x: -x))
1308 self.assertNotEqual(data, copy)
1309 random.shuffle(copy)
1310 self.assertEqual(data, sorted(copy, reverse=1))
1311 self.assertNotEqual(data, copy)
1312
1313 def test_inputtypes(self):
1314 s = 'abracadabra'
Walter Dörwald1f5947b2007-05-22 16:52:54 +00001315 types = [list, tuple, str]
Walter Dörwald4e41a4b2005-08-03 17:09:04 +00001316 for T in types:
Raymond Hettinger64958a12003-12-17 20:43:33 +00001317 self.assertEqual(sorted(s), sorted(T(s)))
1318
Walter Dörwald1f5947b2007-05-22 16:52:54 +00001319 s = ''.join(set(s)) # unique letters only
1320 types = [str, set, frozenset, list, tuple, dict.fromkeys]
Walter Dörwald4e41a4b2005-08-03 17:09:04 +00001321 for T in types:
Raymond Hettinger64958a12003-12-17 20:43:33 +00001322 self.assertEqual(sorted(s), sorted(T(s)))
1323
1324 def test_baddecorator(self):
1325 data = 'The quick Brown fox Jumped over The lazy Dog'.split()
1326 self.assertRaises(TypeError, sorted, data, None, lambda x,y: 0)
1327
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001328def test_main(verbose=None):
1329 test_classes = (BuiltinTest, TestSorted)
1330
1331 run_unittest(*test_classes)
1332
1333 # verify reference counting
1334 if verbose and hasattr(sys, "gettotalrefcount"):
1335 import gc
1336 counts = [None] * 5
Guido van Rossum805365e2007-05-07 22:24:25 +00001337 for i in range(len(counts)):
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001338 run_unittest(*test_classes)
1339 gc.collect()
1340 counts[i] = sys.gettotalrefcount()
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001341 print(counts)
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001342
Walter Dörwald919497e2003-01-19 16:23:59 +00001343
1344if __name__ == "__main__":
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001345 test_main(verbose=True)