blob: be6f391ba8f2866e9decf53e45c87bf0c0630dd7 [file] [log] [blame]
Walter Dörwald919497e2003-01-19 16:23:59 +00001# Python test set -- built-in functions
Guido van Rossum3bead091992-01-27 17:00:37 +00002
Walter Dörwald919497e2003-01-19 16:23:59 +00003import test.test_support, unittest
Walter Dörwald1f5947b2007-05-22 16:52:54 +00004from test.test_support import fcmp, TESTFN, unlink, run_unittest, \
5 run_with_locale
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00006from operator import neg
Guido van Rossum3bead091992-01-27 17:00:37 +00007
Guido van Rossum34d19282007-08-09 01:03:29 +00008import sys, warnings, random, UserDict, io
Walter Dörwald919497e2003-01-19 16:23:59 +00009warnings.filterwarnings("ignore", "hex../oct.. of negative int",
10 FutureWarning, __name__)
Guido van Rossumefbbb1c2003-04-11 18:43:06 +000011warnings.filterwarnings("ignore", "integer argument expected",
12 DeprecationWarning, "unittest")
Guido van Rossum3bead091992-01-27 17:00:37 +000013
Walter Dörwald919497e2003-01-19 16:23:59 +000014class Squares:
Guido van Rossum3bead091992-01-27 17:00:37 +000015
Walter Dörwald919497e2003-01-19 16:23:59 +000016 def __init__(self, max):
17 self.max = max
18 self.sofar = []
19
20 def __len__(self): return len(self.sofar)
21
22 def __getitem__(self, i):
23 if not 0 <= i < self.max: raise IndexError
24 n = len(self.sofar)
25 while n <= i:
26 self.sofar.append(n*n)
27 n += 1
28 return self.sofar[i]
29
30class StrSquares:
31
32 def __init__(self, max):
33 self.max = max
34 self.sofar = []
35
36 def __len__(self):
37 return len(self.sofar)
38
39 def __getitem__(self, i):
40 if not 0 <= i < self.max:
41 raise IndexError
42 n = len(self.sofar)
43 while n <= i:
44 self.sofar.append(str(n*n))
45 n += 1
46 return self.sofar[i]
47
48class BitBucket:
49 def write(self, line):
50 pass
51
52L = [
53 ('0', 0),
54 ('1', 1),
55 ('9', 9),
56 ('10', 10),
57 ('99', 99),
58 ('100', 100),
59 ('314', 314),
60 (' 314', 314),
61 ('314 ', 314),
62 (' \t\t 314 \t\t ', 314),
Christian Heimesa37d4c62007-12-04 23:02:19 +000063 (repr(sys.maxsize), sys.maxsize),
Walter Dörwald919497e2003-01-19 16:23:59 +000064 (' 1x', ValueError),
65 (' 1 ', 1),
66 (' 1\02 ', ValueError),
67 ('', ValueError),
68 (' ', ValueError),
Walter Dörwald1f5947b2007-05-22 16:52:54 +000069 (' \t\t ', ValueError),
Guido van Rossumef87d6e2007-05-02 19:09:54 +000070 (str(b'\u0663\u0661\u0664 ','raw-unicode-escape'), 314),
Guido van Rossum84fc66d2007-05-03 17:18:26 +000071 (chr(0x200), ValueError),
Walter Dörwald919497e2003-01-19 16:23:59 +000072]
73
Raymond Hettinger96229b12005-03-11 06:49:40 +000074class TestFailingBool:
Jack Diederich4dafcc42006-11-28 19:15:13 +000075 def __bool__(self):
Raymond Hettinger96229b12005-03-11 06:49:40 +000076 raise RuntimeError
77
78class TestFailingIter:
79 def __iter__(self):
80 raise RuntimeError
81
Walter Dörwald919497e2003-01-19 16:23:59 +000082class BuiltinTest(unittest.TestCase):
83
84 def test_import(self):
85 __import__('sys')
86 __import__('time')
87 __import__('string')
Guido van Rossumd8faa362007-04-27 19:54:29 +000088 __import__(name='sys')
89 __import__(name='time', level=0)
Walter Dörwald919497e2003-01-19 16:23:59 +000090 self.assertRaises(ImportError, __import__, 'spamspam')
91 self.assertRaises(TypeError, __import__, 1, 2, 3, 4)
Thomas Wouters49fd7fa2006-04-21 10:40:58 +000092 self.assertRaises(ValueError, __import__, '')
Guido van Rossumd8faa362007-04-27 19:54:29 +000093 self.assertRaises(TypeError, __import__, 'sys', name='sys')
Walter Dörwald919497e2003-01-19 16:23:59 +000094
95 def test_abs(self):
96 # int
97 self.assertEqual(abs(0), 0)
98 self.assertEqual(abs(1234), 1234)
99 self.assertEqual(abs(-1234), 1234)
Christian Heimesa37d4c62007-12-04 23:02:19 +0000100 self.assertTrue(abs(-sys.maxsize-1) > 0)
Walter Dörwald919497e2003-01-19 16:23:59 +0000101 # float
102 self.assertEqual(abs(0.0), 0.0)
103 self.assertEqual(abs(3.14), 3.14)
104 self.assertEqual(abs(-3.14), 3.14)
105 # long
Guido van Rossume2a383d2007-01-15 16:59:06 +0000106 self.assertEqual(abs(0), 0)
107 self.assertEqual(abs(1234), 1234)
108 self.assertEqual(abs(-1234), 1234)
Walter Dörwald919497e2003-01-19 16:23:59 +0000109 # str
110 self.assertRaises(TypeError, abs, 'a')
111
Raymond Hettinger96229b12005-03-11 06:49:40 +0000112 def test_all(self):
113 self.assertEqual(all([2, 4, 6]), True)
114 self.assertEqual(all([2, None, 6]), False)
115 self.assertRaises(RuntimeError, all, [2, TestFailingBool(), 6])
116 self.assertRaises(RuntimeError, all, TestFailingIter())
117 self.assertRaises(TypeError, all, 10) # Non-iterable
118 self.assertRaises(TypeError, all) # No args
119 self.assertRaises(TypeError, all, [2, 4, 6], []) # Too many args
120 self.assertEqual(all([]), True) # Empty iterator
121 S = [50, 60]
122 self.assertEqual(all(x > 42 for x in S), True)
123 S = [50, 40, 60]
124 self.assertEqual(all(x > 42 for x in S), False)
125
126 def test_any(self):
127 self.assertEqual(any([None, None, None]), False)
128 self.assertEqual(any([None, 4, None]), True)
129 self.assertRaises(RuntimeError, any, [None, TestFailingBool(), 6])
130 self.assertRaises(RuntimeError, all, TestFailingIter())
131 self.assertRaises(TypeError, any, 10) # Non-iterable
132 self.assertRaises(TypeError, any) # No args
133 self.assertRaises(TypeError, any, [2, 4, 6], []) # Too many args
134 self.assertEqual(any([]), False) # Empty iterator
135 S = [40, 60, 30]
136 self.assertEqual(any(x > 42 for x in S), True)
137 S = [10, 20, 30]
138 self.assertEqual(any(x > 42 for x in S), False)
139
Thomas Wouters89f507f2006-12-13 04:49:30 +0000140 def test_neg(self):
Christian Heimesa37d4c62007-12-04 23:02:19 +0000141 x = -sys.maxsize-1
Thomas Wouters89f507f2006-12-13 04:49:30 +0000142 self.assert_(isinstance(x, int))
Christian Heimesa37d4c62007-12-04 23:02:19 +0000143 self.assertEqual(-x, sys.maxsize+1)
Thomas Wouters89f507f2006-12-13 04:49:30 +0000144
Guido van Rossumd59da4b2007-05-22 18:11:13 +0000145 # XXX(nnorwitz): This test case for callable should probably be removed.
Walter Dörwald919497e2003-01-19 16:23:59 +0000146 def test_callable(self):
Guido van Rossumd59da4b2007-05-22 18:11:13 +0000147 self.assert_(hasattr(len, '__call__'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000148 def f(): pass
Guido van Rossumd59da4b2007-05-22 18:11:13 +0000149 self.assert_(hasattr(f, '__call__'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000150 class C:
151 def meth(self): pass
Guido van Rossumd59da4b2007-05-22 18:11:13 +0000152 self.assert_(hasattr(C, '__call__'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000153 x = C()
Guido van Rossumd59da4b2007-05-22 18:11:13 +0000154 self.assert_(hasattr(x.meth, '__call__'))
155 self.assert_(not hasattr(x, '__call__'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000156 class D(C):
157 def __call__(self): pass
158 y = D()
Guido van Rossumd59da4b2007-05-22 18:11:13 +0000159 self.assert_(hasattr(y, '__call__'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000160 y()
161
162 def test_chr(self):
163 self.assertEqual(chr(32), ' ')
164 self.assertEqual(chr(65), 'A')
165 self.assertEqual(chr(97), 'a')
166 self.assertEqual(chr(0xff), '\xff')
Guido van Rossum572dbf82007-04-27 23:53:51 +0000167 self.assertRaises(ValueError, chr, 1<<24)
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000168 self.assertEqual(chr(sys.maxunicode),
169 str(('\\U%08x' % (sys.maxunicode)).encode("ascii"),
170 'unicode-escape'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000171 self.assertRaises(TypeError, chr)
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000172 self.assertEqual(chr(0x0000FFFF), "\U0000FFFF")
173 self.assertEqual(chr(0x00010000), "\U00010000")
174 self.assertEqual(chr(0x00010001), "\U00010001")
175 self.assertEqual(chr(0x000FFFFE), "\U000FFFFE")
176 self.assertEqual(chr(0x000FFFFF), "\U000FFFFF")
177 self.assertEqual(chr(0x00100000), "\U00100000")
178 self.assertEqual(chr(0x00100001), "\U00100001")
179 self.assertEqual(chr(0x0010FFFE), "\U0010FFFE")
180 self.assertEqual(chr(0x0010FFFF), "\U0010FFFF")
181 self.assertRaises(ValueError, chr, -1)
182 self.assertRaises(ValueError, chr, 0x00110000)
Walter Dörwald919497e2003-01-19 16:23:59 +0000183
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000184 def test_cmp(self):
Walter Dörwald919497e2003-01-19 16:23:59 +0000185 self.assertEqual(cmp(-1, 1), -1)
186 self.assertEqual(cmp(1, -1), 1)
187 self.assertEqual(cmp(1, 1), 0)
Armin Rigo2b3eb402003-10-28 12:05:48 +0000188 # verify that circular objects are not handled
Walter Dörwald919497e2003-01-19 16:23:59 +0000189 a = []; a.append(a)
190 b = []; b.append(b)
191 from UserList import UserList
192 c = UserList(); c.append(c)
Armin Rigo2b3eb402003-10-28 12:05:48 +0000193 self.assertRaises(RuntimeError, cmp, a, b)
194 self.assertRaises(RuntimeError, cmp, b, c)
195 self.assertRaises(RuntimeError, cmp, c, a)
196 self.assertRaises(RuntimeError, cmp, a, c)
197 # okay, now break the cycles
Walter Dörwald919497e2003-01-19 16:23:59 +0000198 a.pop(); b.pop(); c.pop()
199 self.assertRaises(TypeError, cmp)
200
Walter Dörwald919497e2003-01-19 16:23:59 +0000201 def test_compile(self):
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000202 compile('print(1)\n', '', 'exec')
Amaury Forgeot d'Arcaf593462007-11-22 20:53:01 +0000203 bom = b'\xef\xbb\xbf'
204 compile(bom + b'print(1)\n', '', 'exec')
Guido van Rossumd8faa362007-04-27 19:54:29 +0000205 compile(source='pass', filename='?', mode='exec')
206 compile(dont_inherit=0, filename='tmp', source='0', mode='eval')
207 compile('pass', '?', dont_inherit=1, mode='exec')
Walter Dörwald919497e2003-01-19 16:23:59 +0000208 self.assertRaises(TypeError, compile)
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000209 self.assertRaises(ValueError, compile, 'print(42)\n', '<string>', 'badmode')
210 self.assertRaises(ValueError, compile, 'print(42)\n', '<string>', 'single', 0xff)
Neal Norwitzfcf44352005-11-27 20:37:43 +0000211 self.assertRaises(TypeError, compile, chr(0), 'f', 'exec')
Guido van Rossumd8faa362007-04-27 19:54:29 +0000212 self.assertRaises(TypeError, compile, 'pass', '?', 'exec',
213 mode='eval', source='0', filename='tmp')
Walter Dörwald1f5947b2007-05-22 16:52:54 +0000214 compile('print("\xe5")\n', '', 'exec')
215 self.assertRaises(TypeError, compile, chr(0), 'f', 'exec')
216 self.assertRaises(ValueError, compile, str('a = 1'), 'f', 'bad')
Guido van Rossumd8faa362007-04-27 19:54:29 +0000217
Walter Dörwald919497e2003-01-19 16:23:59 +0000218 def test_delattr(self):
219 import sys
220 sys.spam = 1
221 delattr(sys, 'spam')
222 self.assertRaises(TypeError, delattr)
223
224 def test_dir(self):
Georg Brandle32b4222007-03-10 22:13:27 +0000225 # dir(wrong number of arguments)
Walter Dörwald919497e2003-01-19 16:23:59 +0000226 self.assertRaises(TypeError, dir, 42, 42)
227
Georg Brandle32b4222007-03-10 22:13:27 +0000228 # dir() - local scope
229 local_var = 1
230 self.assert_('local_var' in dir())
231
232 # dir(module)
233 import sys
234 self.assert_('exit' in dir(sys))
235
236 # dir(module_with_invalid__dict__)
237 import types
238 class Foo(types.ModuleType):
239 __dict__ = 8
240 f = Foo("foo")
241 self.assertRaises(TypeError, dir, f)
242
243 # dir(type)
244 self.assert_("strip" in dir(str))
245 self.assert_("__mro__" not in dir(str))
246
247 # dir(obj)
248 class Foo(object):
249 def __init__(self):
250 self.x = 7
251 self.y = 8
252 self.z = 9
253 f = Foo()
254 self.assert_("y" in dir(f))
255
256 # dir(obj_no__dict__)
257 class Foo(object):
258 __slots__ = []
259 f = Foo()
260 self.assert_("__repr__" in dir(f))
261
262 # dir(obj_no__class__with__dict__)
263 # (an ugly trick to cause getattr(f, "__class__") to fail)
264 class Foo(object):
265 __slots__ = ["__class__", "__dict__"]
266 def __init__(self):
267 self.bar = "wow"
268 f = Foo()
269 self.assert_("__repr__" not in dir(f))
270 self.assert_("bar" in dir(f))
271
272 # dir(obj_using __dir__)
273 class Foo(object):
274 def __dir__(self):
275 return ["kan", "ga", "roo"]
276 f = Foo()
277 self.assert_(dir(f) == ["ga", "kan", "roo"])
278
279 # dir(obj__dir__not_list)
280 class Foo(object):
281 def __dir__(self):
282 return 7
283 f = Foo()
284 self.assertRaises(TypeError, dir, f)
285
Collin Winter3eed7652007-08-14 17:53:54 +0000286 # dir(traceback)
287 try:
288 raise IndexError
289 except:
290 self.assertEqual(len(dir(sys.exc_info()[2])), 4)
291
292
Walter Dörwald919497e2003-01-19 16:23:59 +0000293 def test_divmod(self):
294 self.assertEqual(divmod(12, 7), (1, 5))
295 self.assertEqual(divmod(-12, 7), (-2, 2))
296 self.assertEqual(divmod(12, -7), (-2, -2))
297 self.assertEqual(divmod(-12, -7), (1, -5))
298
Guido van Rossume2a383d2007-01-15 16:59:06 +0000299 self.assertEqual(divmod(12, 7), (1, 5))
300 self.assertEqual(divmod(-12, 7), (-2, 2))
301 self.assertEqual(divmod(12, -7), (-2, -2))
302 self.assertEqual(divmod(-12, -7), (1, -5))
Walter Dörwald919497e2003-01-19 16:23:59 +0000303
Guido van Rossume2a383d2007-01-15 16:59:06 +0000304 self.assertEqual(divmod(12, 7), (1, 5))
305 self.assertEqual(divmod(-12, 7), (-2, 2))
306 self.assertEqual(divmod(12, -7), (-2, -2))
307 self.assertEqual(divmod(-12, -7), (1, -5))
Walter Dörwald919497e2003-01-19 16:23:59 +0000308
Christian Heimesa37d4c62007-12-04 23:02:19 +0000309 self.assertEqual(divmod(-sys.maxsize-1, -1),
310 (sys.maxsize+1, 0))
Raymond Hettinger5ea7e312004-09-30 07:47:20 +0000311
Walter Dörwald919497e2003-01-19 16:23:59 +0000312 self.assert_(not fcmp(divmod(3.25, 1.0), (3.0, 0.25)))
313 self.assert_(not fcmp(divmod(-3.25, 1.0), (-4.0, 0.75)))
314 self.assert_(not fcmp(divmod(3.25, -1.0), (-4.0, -0.75)))
315 self.assert_(not fcmp(divmod(-3.25, -1.0), (3.0, -0.25)))
316
317 self.assertRaises(TypeError, divmod)
318
319 def test_eval(self):
320 self.assertEqual(eval('1+1'), 2)
321 self.assertEqual(eval(' 1+1\n'), 2)
322 globals = {'a': 1, 'b': 2}
323 locals = {'b': 200, 'c': 300}
324 self.assertEqual(eval('a', globals) , 1)
325 self.assertEqual(eval('a', globals, locals), 1)
326 self.assertEqual(eval('b', globals, locals), 200)
327 self.assertEqual(eval('c', globals, locals), 300)
Walter Dörwald919497e2003-01-19 16:23:59 +0000328 globals = {'a': 1, 'b': 2}
329 locals = {'b': 200, 'c': 300}
Amaury Forgeot d'Arcaf593462007-11-22 20:53:01 +0000330 bom = b'\xef\xbb\xbf'
331 self.assertEqual(eval(bom + b'a', globals, locals), 1)
Walter Dörwald1f5947b2007-05-22 16:52:54 +0000332 self.assertEqual(eval('"\xe5"', globals), "\xe5")
Walter Dörwald919497e2003-01-19 16:23:59 +0000333 self.assertRaises(TypeError, eval)
334 self.assertRaises(TypeError, eval, ())
Amaury Forgeot d'Arcaf593462007-11-22 20:53:01 +0000335 self.assertRaises(SyntaxError, eval, bom[:2] + b'a')
Walter Dörwald919497e2003-01-19 16:23:59 +0000336
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000337 def test_general_eval(self):
338 # Tests that general mappings can be used for the locals argument
339
340 class M:
341 "Test mapping interface versus possible calls from eval()."
342 def __getitem__(self, key):
343 if key == 'a':
344 return 12
345 raise KeyError
Guido van Rossumcd70eee2007-02-11 18:53:00 +0000346 def keys(self):
347 return list('xyz')
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000348
349 m = M()
350 g = globals()
351 self.assertEqual(eval('a', g, m), 12)
352 self.assertRaises(NameError, eval, 'b', g, m)
353 self.assertEqual(eval('dir()', g, m), list('xyz'))
354 self.assertEqual(eval('globals()', g, m), g)
355 self.assertEqual(eval('locals()', g, m), m)
Raymond Hettinger513ffe82004-07-06 13:44:41 +0000356 self.assertRaises(TypeError, eval, 'a', m)
Raymond Hettinger66bd2332004-08-02 08:30:07 +0000357 class A:
358 "Non-mapping"
359 pass
360 m = A()
361 self.assertRaises(TypeError, eval, 'a', g, m)
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000362
363 # Verify that dict subclasses work as well
364 class D(dict):
365 def __getitem__(self, key):
366 if key == 'a':
367 return 12
368 return dict.__getitem__(self, key)
Guido van Rossumcd70eee2007-02-11 18:53:00 +0000369 def keys(self):
370 return list('xyz')
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000371
372 d = D()
373 self.assertEqual(eval('a', g, d), 12)
374 self.assertRaises(NameError, eval, 'b', g, d)
375 self.assertEqual(eval('dir()', g, d), list('xyz'))
376 self.assertEqual(eval('globals()', g, d), g)
377 self.assertEqual(eval('locals()', g, d), d)
378
379 # Verify locals stores (used by list comps)
380 eval('[locals() for i in (2,3)]', g, d)
381 eval('[locals() for i in (2,3)]', g, UserDict.UserDict())
382
383 class SpreadSheet:
384 "Sample application showing nested, calculated lookups."
385 _cells = {}
386 def __setitem__(self, key, formula):
387 self._cells[key] = formula
Thomas Wouters73e5a5b2006-06-08 15:35:45 +0000388 def __getitem__(self, key):
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000389 return eval(self._cells[key], globals(), self)
390
391 ss = SpreadSheet()
392 ss['a1'] = '5'
393 ss['a2'] = 'a1*6'
394 ss['a3'] = 'a2*7'
395 self.assertEqual(ss['a3'], 210)
396
Raymond Hettinger2a7dede2004-08-07 04:55:30 +0000397 # Verify that dir() catches a non-list returned by eval
398 # SF bug #1004669
399 class C:
400 def __getitem__(self, item):
401 raise KeyError(item)
Guido van Rossumcd70eee2007-02-11 18:53:00 +0000402 def keys(self):
403 return 1 # used to be 'a' but that's no longer an error
Raymond Hettinger2a7dede2004-08-07 04:55:30 +0000404 self.assertRaises(TypeError, eval, 'dir()', globals(), C())
405
Georg Brandl7cae87c2006-09-06 06:51:57 +0000406 def test_exec(self):
407 g = {}
408 exec('z = 1', g)
409 if '__builtins__' in g:
410 del g['__builtins__']
411 self.assertEqual(g, {'z': 1})
412
Guido van Rossumef87d6e2007-05-02 19:09:54 +0000413 exec('z = 1+1', g)
Georg Brandl7cae87c2006-09-06 06:51:57 +0000414 if '__builtins__' in g:
415 del g['__builtins__']
416 self.assertEqual(g, {'z': 2})
417 g = {}
418 l = {}
419
420 import warnings
421 warnings.filterwarnings("ignore", "global statement", module="<string>")
422 exec('global a; a = 1; b = 2', g, l)
423 if '__builtins__' in g:
424 del g['__builtins__']
425 if '__builtins__' in l:
426 del l['__builtins__']
427 self.assertEqual((g, l), ({'a': 1}, {'b': 2}))
428
Walter Dörwald919497e2003-01-19 16:23:59 +0000429 def test_filter(self):
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000430 self.assertEqual(list(filter(lambda c: 'a' <= c <= 'z', 'Hello World')), list('elloorld'))
431 self.assertEqual(list(filter(None, [1, 'hello', [], [3], '', None, 9, 0])), [1, 'hello', [3], 9])
432 self.assertEqual(list(filter(lambda x: x > 0, [1, -3, 9, 0, 2])), [1, 9, 2])
433 self.assertEqual(list(filter(None, Squares(10))), [1, 4, 9, 16, 25, 36, 49, 64, 81])
434 self.assertEqual(list(filter(lambda x: x%2, Squares(10))), [1, 9, 25, 49, 81])
Walter Dörwald919497e2003-01-19 16:23:59 +0000435 def identity(item):
436 return 1
437 filter(identity, Squares(5))
438 self.assertRaises(TypeError, filter)
439 class BadSeq(object):
Tim Petersf2715e02003-02-19 02:35:07 +0000440 def __getitem__(self, index):
441 if index<4:
442 return 42
443 raise ValueError
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000444 self.assertRaises(ValueError, list, filter(lambda x: x, BadSeq()))
Walter Dörwald919497e2003-01-19 16:23:59 +0000445 def badfunc():
446 pass
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000447 self.assertRaises(TypeError, list, filter(badfunc, range(5)))
Walter Dörwald919497e2003-01-19 16:23:59 +0000448
Walter Dörwaldbf517072003-01-27 15:57:14 +0000449 # test bltinmodule.c::filtertuple()
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000450 self.assertEqual(list(filter(None, (1, 2))), [1, 2])
451 self.assertEqual(list(filter(lambda x: x>=3, (1, 2, 3, 4))), [3, 4])
452 self.assertRaises(TypeError, list, filter(42, (1, 2)))
Walter Dörwaldc3da83f2003-02-04 20:24:45 +0000453
Walter Dörwald919497e2003-01-19 16:23:59 +0000454 def test_float(self):
455 self.assertEqual(float(3.14), 3.14)
456 self.assertEqual(float(314), 314.0)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000457 self.assertEqual(float(314), 314.0)
Walter Dörwald919497e2003-01-19 16:23:59 +0000458 self.assertEqual(float(" 3.14 "), 3.14)
Neal Norwitze7214a12005-12-18 05:03:17 +0000459 self.assertRaises(ValueError, float, " 0x3.1 ")
460 self.assertRaises(ValueError, float, " -0x3.p-1 ")
Walter Dörwald1f5947b2007-05-22 16:52:54 +0000461 self.assertEqual(float(str(b" \u0663.\u0661\u0664 ",'raw-unicode-escape')), 3.14)
462 self.assertEqual(float("1"*10000), 1e10000) # Inf on both sides
Walter Dörwald919497e2003-01-19 16:23:59 +0000463
Thomas Wouters477c8d52006-05-27 19:21:47 +0000464 @run_with_locale('LC_NUMERIC', 'fr_FR', 'de_DE')
Neal Norwitz5898fa22005-11-22 05:17:40 +0000465 def test_float_with_comma(self):
466 # set locale to something that doesn't use '.' for the decimal point
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000467 # float must not accept the locale specific decimal point but
468 # it still has to accept the normal python syntac
Thomas Wouters477c8d52006-05-27 19:21:47 +0000469 import locale
470 if not locale.localeconv()['decimal_point'] == ',':
Neal Norwitz5898fa22005-11-22 05:17:40 +0000471 return
472
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000473 self.assertEqual(float(" 3.14 "), 3.14)
474 self.assertEqual(float("+3.14 "), 3.14)
475 self.assertEqual(float("-3.14 "), -3.14)
476 self.assertEqual(float(".14 "), .14)
477 self.assertEqual(float("3. "), 3.0)
478 self.assertEqual(float("3.e3 "), 3000.0)
479 self.assertEqual(float("3.2e3 "), 3200.0)
480 self.assertEqual(float("2.5e-1 "), 0.25)
481 self.assertEqual(float("5e-1"), 0.5)
482 self.assertRaises(ValueError, float, " 3,14 ")
483 self.assertRaises(ValueError, float, " +3,14 ")
484 self.assertRaises(ValueError, float, " -3,14 ")
Thomas Wouters477c8d52006-05-27 19:21:47 +0000485 self.assertRaises(ValueError, float, " 0x3.1 ")
486 self.assertRaises(ValueError, float, " -0x3.p-1 ")
487 self.assertEqual(float(" 25.e-1 "), 2.5)
488 self.assertEqual(fcmp(float(" .25e-1 "), .025), 0)
Neal Norwitz5898fa22005-11-22 05:17:40 +0000489
Brett Cannonc3647ac2005-04-26 03:45:26 +0000490 def test_floatconversion(self):
491 # Make sure that calls to __float__() work properly
492 class Foo0:
493 def __float__(self):
494 return 42.
495
496 class Foo1(object):
497 def __float__(self):
498 return 42.
499
500 class Foo2(float):
501 def __float__(self):
502 return 42.
503
504 class Foo3(float):
505 def __new__(cls, value=0.):
506 return float.__new__(cls, 2*value)
507
508 def __float__(self):
509 return self
510
511 class Foo4(float):
512 def __float__(self):
513 return 42
514
515 self.assertAlmostEqual(float(Foo0()), 42.)
516 self.assertAlmostEqual(float(Foo1()), 42.)
517 self.assertAlmostEqual(float(Foo2()), 42.)
518 self.assertAlmostEqual(float(Foo3(21)), 42.)
519 self.assertRaises(TypeError, float, Foo4(42))
520
Eric Smith8c663262007-08-25 02:26:07 +0000521 def test_format(self):
522 class A:
523 def __init__(self, x):
524 self.x = x
525 def __format__(self, format_spec):
526 return str(self.x) + format_spec
527
528 # class that returns a bad type from __format__
Eric Smith37f10382007-09-01 10:56:01 +0000529 class B:
Eric Smith8c663262007-08-25 02:26:07 +0000530 def __format__(self, format_spec):
531 return 1.0
532
Eric Smith37f10382007-09-01 10:56:01 +0000533 # class that is derived from string, used
534 # as a format spec
535 class C(str):
536 pass
537
Eric Smith8c663262007-08-25 02:26:07 +0000538 self.assertEqual(format(3, ''), '3')
539 self.assertEqual(format(A(3), 'spec'), '3spec')
540
Eric Smith81936692007-08-31 01:14:01 +0000541 def empty_format_spec(value):
542 # test that:
543 # format(x, '') == str(x)
544 # format(x) == str(x)
545 self.assertEqual(format(value, ""), str(value))
546 self.assertEqual(format(value), str(value))
547
Eric Smith8c663262007-08-25 02:26:07 +0000548 # for builtin types, format(x, "") == str(x)
Eric Smith81936692007-08-31 01:14:01 +0000549 empty_format_spec(17**13)
550 empty_format_spec(1.0)
551 empty_format_spec(3.1415e104)
552 empty_format_spec(-3.1415e104)
553 empty_format_spec(3.1415e-104)
554 empty_format_spec(-3.1415e-104)
555 empty_format_spec(object)
556 empty_format_spec(None)
Eric Smith8c663262007-08-25 02:26:07 +0000557
Eric Smith739e2ad2007-08-27 19:07:22 +0000558 # TypeError because self.__format__ returns the wrong type
Eric Smith37f10382007-09-01 10:56:01 +0000559 self.assertRaises(TypeError, format, B(), "")
560
561 # make sure we can take a subclass of str as a format spec
562 self.assertEqual(format(0, C('10')), ' 0')
Eric Smith8c663262007-08-25 02:26:07 +0000563
Walter Dörwald919497e2003-01-19 16:23:59 +0000564 def test_getattr(self):
565 import sys
566 self.assert_(getattr(sys, 'stdout') is sys.stdout)
567 self.assertRaises(TypeError, getattr, sys, 1)
568 self.assertRaises(TypeError, getattr, sys, 1, "foo")
569 self.assertRaises(TypeError, getattr)
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000570 self.assertRaises(AttributeError, getattr, sys, chr(sys.maxunicode))
Walter Dörwald919497e2003-01-19 16:23:59 +0000571
572 def test_hasattr(self):
573 import sys
574 self.assert_(hasattr(sys, 'stdout'))
575 self.assertRaises(TypeError, hasattr, sys, 1)
576 self.assertRaises(TypeError, hasattr)
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000577 self.assertEqual(False, hasattr(sys, chr(sys.maxunicode)))
Walter Dörwald919497e2003-01-19 16:23:59 +0000578
579 def test_hash(self):
580 hash(None)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000581 self.assertEqual(hash(1), hash(1))
Walter Dörwald919497e2003-01-19 16:23:59 +0000582 self.assertEqual(hash(1), hash(1.0))
583 hash('spam')
Guido van Rossum98297ee2007-11-06 21:34:58 +0000584 self.assertEqual(hash('spam'), hash(b'spam'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000585 hash((0,1,2,3))
586 def f(): pass
587 self.assertRaises(TypeError, hash, [])
588 self.assertRaises(TypeError, hash, {})
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000589 # Bug 1536021: Allow hash to return long objects
590 class X:
591 def __hash__(self):
592 return 2**100
593 self.assertEquals(type(hash(X())), int)
594 class Y(object):
595 def __hash__(self):
596 return 2**100
597 self.assertEquals(type(hash(Y())), int)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000598 class Z(int):
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000599 def __hash__(self):
600 return self
Guido van Rossume2a383d2007-01-15 16:59:06 +0000601 self.assertEquals(hash(Z(42)), hash(42))
Walter Dörwald919497e2003-01-19 16:23:59 +0000602
603 def test_hex(self):
604 self.assertEqual(hex(16), '0x10')
Guido van Rossume2a383d2007-01-15 16:59:06 +0000605 self.assertEqual(hex(16), '0x10')
Guido van Rossum6c9e1302003-11-29 23:52:13 +0000606 self.assertEqual(hex(-16), '-0x10')
Guido van Rossume2a383d2007-01-15 16:59:06 +0000607 self.assertEqual(hex(-16), '-0x10')
Walter Dörwald919497e2003-01-19 16:23:59 +0000608 self.assertRaises(TypeError, hex, {})
609
610 def test_id(self):
611 id(None)
612 id(1)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000613 id(1)
Walter Dörwald919497e2003-01-19 16:23:59 +0000614 id(1.0)
615 id('spam')
616 id((0,1,2,3))
617 id([0,1,2,3])
618 id({'spam': 1, 'eggs': 2, 'ham': 3})
619
Guido van Rossuma88a0332007-02-26 16:59:55 +0000620 # Test input() later, alphabetized as if it were raw_input
621
Walter Dörwald919497e2003-01-19 16:23:59 +0000622 def test_int(self):
623 self.assertEqual(int(314), 314)
624 self.assertEqual(int(3.14), 3)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000625 self.assertEqual(int(314), 314)
Walter Dörwald919497e2003-01-19 16:23:59 +0000626 # Check that conversion from float truncates towards zero
627 self.assertEqual(int(-3.14), -3)
628 self.assertEqual(int(3.9), 3)
629 self.assertEqual(int(-3.9), -3)
630 self.assertEqual(int(3.5), 3)
631 self.assertEqual(int(-3.5), -3)
632 # Different base:
Guido van Rossume2a383d2007-01-15 16:59:06 +0000633 self.assertEqual(int("10",16), 16)
Walter Dörwald919497e2003-01-19 16:23:59 +0000634 # Test conversion from strings and various anomalies
635 for s, v in L:
636 for sign in "", "+", "-":
637 for prefix in "", " ", "\t", " \t\t ":
638 ss = prefix + sign + s
639 vv = v
640 if sign == "-" and v is not ValueError:
641 vv = -v
642 try:
643 self.assertEqual(int(ss), vv)
644 except v:
645 pass
646
Christian Heimesa37d4c62007-12-04 23:02:19 +0000647 s = repr(-1-sys.maxsize)
Thomas Wouters89f507f2006-12-13 04:49:30 +0000648 x = int(s)
Christian Heimesa37d4c62007-12-04 23:02:19 +0000649 self.assertEqual(x+1, -sys.maxsize)
Thomas Wouters89f507f2006-12-13 04:49:30 +0000650 self.assert_(isinstance(x, int))
Walter Dörwald919497e2003-01-19 16:23:59 +0000651 # should return long
Christian Heimesa37d4c62007-12-04 23:02:19 +0000652 self.assertEqual(int(s[1:]), sys.maxsize+1)
Walter Dörwald919497e2003-01-19 16:23:59 +0000653
654 # should return long
655 x = int(1e100)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000656 self.assert_(isinstance(x, int))
Walter Dörwald919497e2003-01-19 16:23:59 +0000657 x = int(-1e100)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000658 self.assert_(isinstance(x, int))
Walter Dörwald919497e2003-01-19 16:23:59 +0000659
660
661 # SF bug 434186: 0x80000000/2 != 0x80000000>>1.
662 # Worked by accident in Windows release build, but failed in debug build.
663 # Failed in all Linux builds.
Christian Heimesa37d4c62007-12-04 23:02:19 +0000664 x = -1-sys.maxsize
Walter Dörwald919497e2003-01-19 16:23:59 +0000665 self.assertEqual(x >> 1, x//2)
666
667 self.assertRaises(ValueError, int, '123\0')
668 self.assertRaises(ValueError, int, '53', 40)
669
Thomas Wouters89f507f2006-12-13 04:49:30 +0000670 # SF bug 1545497: embedded NULs were not detected with
671 # explicit base
672 self.assertRaises(ValueError, int, '123\0', 10)
673 self.assertRaises(ValueError, int, '123\x00 245', 20)
674
Walter Dörwald919497e2003-01-19 16:23:59 +0000675 x = int('1' * 600)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000676 self.assert_(isinstance(x, int))
Walter Dörwald919497e2003-01-19 16:23:59 +0000677
Walter Dörwald1f5947b2007-05-22 16:52:54 +0000678 x = int(chr(0x661) * 600)
679 self.assert_(isinstance(x, int))
Walter Dörwald919497e2003-01-19 16:23:59 +0000680
681 self.assertRaises(TypeError, int, 1, 12)
682
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000683 # tests with base 0
684 self.assertRaises(ValueError, int, ' 0123 ', 0) # old octal syntax
685 self.assertEqual(int('000', 0), 0)
686 self.assertEqual(int('0o123', 0), 83)
687 self.assertEqual(int('0x123', 0), 291)
688 self.assertEqual(int('0b100', 0), 4)
689 self.assertEqual(int(' 0O123 ', 0), 83)
690 self.assertEqual(int(' 0X123 ', 0), 291)
691 self.assertEqual(int(' 0B100 ', 0), 4)
692
693 # without base still base 10
694 self.assertEqual(int('0123'), 123)
695 self.assertEqual(int('0123', 10), 123)
696
697 # tests with prefix and base != 0
Neal Norwitz5898fa22005-11-22 05:17:40 +0000698 self.assertEqual(int('0x123', 16), 291)
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000699 self.assertEqual(int('0o123', 8), 83)
700 self.assertEqual(int('0b100', 2), 4)
701 self.assertEqual(int('0X123', 16), 291)
702 self.assertEqual(int('0O123', 8), 83)
703 self.assertEqual(int('0B100', 2), 4)
Walter Dörwald919497e2003-01-19 16:23:59 +0000704
Thomas Wouters477c8d52006-05-27 19:21:47 +0000705 # SF bug 1334662: int(string, base) wrong answers
706 # Various representations of 2**32 evaluated to 0
707 # rather than 2**32 in previous versions
708
Guido van Rossume2a383d2007-01-15 16:59:06 +0000709 self.assertEqual(int('100000000000000000000000000000000', 2), 4294967296)
710 self.assertEqual(int('102002022201221111211', 3), 4294967296)
711 self.assertEqual(int('10000000000000000', 4), 4294967296)
712 self.assertEqual(int('32244002423141', 5), 4294967296)
713 self.assertEqual(int('1550104015504', 6), 4294967296)
714 self.assertEqual(int('211301422354', 7), 4294967296)
715 self.assertEqual(int('40000000000', 8), 4294967296)
716 self.assertEqual(int('12068657454', 9), 4294967296)
717 self.assertEqual(int('4294967296', 10), 4294967296)
718 self.assertEqual(int('1904440554', 11), 4294967296)
719 self.assertEqual(int('9ba461594', 12), 4294967296)
720 self.assertEqual(int('535a79889', 13), 4294967296)
721 self.assertEqual(int('2ca5b7464', 14), 4294967296)
722 self.assertEqual(int('1a20dcd81', 15), 4294967296)
723 self.assertEqual(int('100000000', 16), 4294967296)
724 self.assertEqual(int('a7ffda91', 17), 4294967296)
725 self.assertEqual(int('704he7g4', 18), 4294967296)
726 self.assertEqual(int('4f5aff66', 19), 4294967296)
727 self.assertEqual(int('3723ai4g', 20), 4294967296)
728 self.assertEqual(int('281d55i4', 21), 4294967296)
729 self.assertEqual(int('1fj8b184', 22), 4294967296)
730 self.assertEqual(int('1606k7ic', 23), 4294967296)
731 self.assertEqual(int('mb994ag', 24), 4294967296)
732 self.assertEqual(int('hek2mgl', 25), 4294967296)
733 self.assertEqual(int('dnchbnm', 26), 4294967296)
734 self.assertEqual(int('b28jpdm', 27), 4294967296)
735 self.assertEqual(int('8pfgih4', 28), 4294967296)
736 self.assertEqual(int('76beigg', 29), 4294967296)
737 self.assertEqual(int('5qmcpqg', 30), 4294967296)
738 self.assertEqual(int('4q0jto4', 31), 4294967296)
739 self.assertEqual(int('4000000', 32), 4294967296)
740 self.assertEqual(int('3aokq94', 33), 4294967296)
741 self.assertEqual(int('2qhxjli', 34), 4294967296)
742 self.assertEqual(int('2br45qb', 35), 4294967296)
743 self.assertEqual(int('1z141z4', 36), 4294967296)
Thomas Wouters477c8d52006-05-27 19:21:47 +0000744
745 # SF bug 1334662: int(string, base) wrong answers
746 # Checks for proper evaluation of 2**32 + 1
Guido van Rossume2a383d2007-01-15 16:59:06 +0000747 self.assertEqual(int('100000000000000000000000000000001', 2), 4294967297)
748 self.assertEqual(int('102002022201221111212', 3), 4294967297)
749 self.assertEqual(int('10000000000000001', 4), 4294967297)
750 self.assertEqual(int('32244002423142', 5), 4294967297)
751 self.assertEqual(int('1550104015505', 6), 4294967297)
752 self.assertEqual(int('211301422355', 7), 4294967297)
753 self.assertEqual(int('40000000001', 8), 4294967297)
754 self.assertEqual(int('12068657455', 9), 4294967297)
755 self.assertEqual(int('4294967297', 10), 4294967297)
756 self.assertEqual(int('1904440555', 11), 4294967297)
757 self.assertEqual(int('9ba461595', 12), 4294967297)
758 self.assertEqual(int('535a7988a', 13), 4294967297)
759 self.assertEqual(int('2ca5b7465', 14), 4294967297)
760 self.assertEqual(int('1a20dcd82', 15), 4294967297)
761 self.assertEqual(int('100000001', 16), 4294967297)
762 self.assertEqual(int('a7ffda92', 17), 4294967297)
763 self.assertEqual(int('704he7g5', 18), 4294967297)
764 self.assertEqual(int('4f5aff67', 19), 4294967297)
765 self.assertEqual(int('3723ai4h', 20), 4294967297)
766 self.assertEqual(int('281d55i5', 21), 4294967297)
767 self.assertEqual(int('1fj8b185', 22), 4294967297)
768 self.assertEqual(int('1606k7id', 23), 4294967297)
769 self.assertEqual(int('mb994ah', 24), 4294967297)
770 self.assertEqual(int('hek2mgm', 25), 4294967297)
771 self.assertEqual(int('dnchbnn', 26), 4294967297)
772 self.assertEqual(int('b28jpdn', 27), 4294967297)
773 self.assertEqual(int('8pfgih5', 28), 4294967297)
774 self.assertEqual(int('76beigh', 29), 4294967297)
775 self.assertEqual(int('5qmcpqh', 30), 4294967297)
776 self.assertEqual(int('4q0jto5', 31), 4294967297)
777 self.assertEqual(int('4000001', 32), 4294967297)
778 self.assertEqual(int('3aokq95', 33), 4294967297)
779 self.assertEqual(int('2qhxjlj', 34), 4294967297)
780 self.assertEqual(int('2br45qc', 35), 4294967297)
781 self.assertEqual(int('1z141z5', 36), 4294967297)
Thomas Wouters477c8d52006-05-27 19:21:47 +0000782
Brett Cannonc3647ac2005-04-26 03:45:26 +0000783 def test_intconversion(self):
784 # Test __int__()
785 class Foo0:
786 def __int__(self):
787 return 42
788
789 class Foo1(object):
790 def __int__(self):
791 return 42
792
793 class Foo2(int):
794 def __int__(self):
795 return 42
796
797 class Foo3(int):
798 def __int__(self):
799 return self
800
801 class Foo4(int):
802 def __int__(self):
Guido van Rossume2a383d2007-01-15 16:59:06 +0000803 return 42
Brett Cannonc3647ac2005-04-26 03:45:26 +0000804
805 class Foo5(int):
806 def __int__(self):
807 return 42.
808
809 self.assertEqual(int(Foo0()), 42)
810 self.assertEqual(int(Foo1()), 42)
811 self.assertEqual(int(Foo2()), 42)
812 self.assertEqual(int(Foo3()), 0)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000813 self.assertEqual(int(Foo4()), 42)
Brett Cannonc3647ac2005-04-26 03:45:26 +0000814 self.assertRaises(TypeError, int, Foo5())
815
Walter Dörwald919497e2003-01-19 16:23:59 +0000816 def test_iter(self):
817 self.assertRaises(TypeError, iter)
818 self.assertRaises(TypeError, iter, 42, 42)
819 lists = [("1", "2"), ["1", "2"], "12"]
Walter Dörwald919497e2003-01-19 16:23:59 +0000820 for l in lists:
821 i = iter(l)
Georg Brandla18af4e2007-04-21 15:47:16 +0000822 self.assertEqual(next(i), '1')
823 self.assertEqual(next(i), '2')
824 self.assertRaises(StopIteration, next, i)
Walter Dörwald919497e2003-01-19 16:23:59 +0000825
826 def test_isinstance(self):
827 class C:
828 pass
829 class D(C):
830 pass
831 class E:
832 pass
833 c = C()
834 d = D()
835 e = E()
836 self.assert_(isinstance(c, C))
837 self.assert_(isinstance(d, C))
838 self.assert_(not isinstance(e, C))
839 self.assert_(not isinstance(c, D))
840 self.assert_(not isinstance('foo', E))
841 self.assertRaises(TypeError, isinstance, E, 'foo')
842 self.assertRaises(TypeError, isinstance)
843
844 def test_issubclass(self):
845 class C:
846 pass
847 class D(C):
848 pass
849 class E:
850 pass
851 c = C()
852 d = D()
853 e = E()
854 self.assert_(issubclass(D, C))
855 self.assert_(issubclass(C, C))
856 self.assert_(not issubclass(C, D))
857 self.assertRaises(TypeError, issubclass, 'foo', E)
858 self.assertRaises(TypeError, issubclass, E, 'foo')
859 self.assertRaises(TypeError, issubclass)
860
861 def test_len(self):
862 self.assertEqual(len('123'), 3)
863 self.assertEqual(len(()), 0)
864 self.assertEqual(len((1, 2, 3, 4)), 4)
865 self.assertEqual(len([1, 2, 3, 4]), 4)
866 self.assertEqual(len({}), 0)
867 self.assertEqual(len({'a':1, 'b': 2}), 2)
868 class BadSeq:
869 def __len__(self):
870 raise ValueError
871 self.assertRaises(ValueError, len, BadSeq())
872
873 def test_list(self):
874 self.assertEqual(list([]), [])
875 l0_3 = [0, 1, 2, 3]
876 l0_3_bis = list(l0_3)
877 self.assertEqual(l0_3, l0_3_bis)
878 self.assert_(l0_3 is not l0_3_bis)
879 self.assertEqual(list(()), [])
880 self.assertEqual(list((0, 1, 2, 3)), [0, 1, 2, 3])
881 self.assertEqual(list(''), [])
882 self.assertEqual(list('spam'), ['s', 'p', 'a', 'm'])
883
Christian Heimesa37d4c62007-12-04 23:02:19 +0000884 if sys.maxsize == 0x7fffffff:
Walter Dörwald919497e2003-01-19 16:23:59 +0000885 # This test can currently only work on 32-bit machines.
886 # XXX If/when PySequence_Length() returns a ssize_t, it should be
887 # XXX re-enabled.
888 # Verify clearing of bug #556025.
Christian Heimesa37d4c62007-12-04 23:02:19 +0000889 # This assumes that the max data size (sys.maxsize) == max
Walter Dörwald919497e2003-01-19 16:23:59 +0000890 # address size this also assumes that the address size is at
891 # least 4 bytes with 8 byte addresses, the bug is not well
892 # tested
893 #
894 # Note: This test is expected to SEGV under Cygwin 1.3.12 or
895 # earlier due to a newlib bug. See the following mailing list
896 # thread for the details:
897
898 # http://sources.redhat.com/ml/newlib/2002/msg00369.html
Christian Heimesa37d4c62007-12-04 23:02:19 +0000899 self.assertRaises(MemoryError, list, range(sys.maxsize // 2))
Walter Dörwald919497e2003-01-19 16:23:59 +0000900
Raymond Hettingeraa241e02004-09-26 19:24:20 +0000901 # This code used to segfault in Py2.4a3
902 x = []
903 x.extend(-y for y in x)
904 self.assertEqual(x, [])
905
Walter Dörwald919497e2003-01-19 16:23:59 +0000906 def test_long(self):
Guido van Rossume2a383d2007-01-15 16:59:06 +0000907 self.assertEqual(int(314), 314)
908 self.assertEqual(int(3.14), 3)
909 self.assertEqual(int(314), 314)
Walter Dörwald919497e2003-01-19 16:23:59 +0000910 # Check that conversion from float truncates towards zero
Guido van Rossume2a383d2007-01-15 16:59:06 +0000911 self.assertEqual(int(-3.14), -3)
912 self.assertEqual(int(3.9), 3)
913 self.assertEqual(int(-3.9), -3)
914 self.assertEqual(int(3.5), 3)
915 self.assertEqual(int(-3.5), -3)
916 self.assertEqual(int("-3"), -3)
Walter Dörwald919497e2003-01-19 16:23:59 +0000917 # Different base:
Guido van Rossume2a383d2007-01-15 16:59:06 +0000918 self.assertEqual(int("10",16), 16)
Walter Dörwald919497e2003-01-19 16:23:59 +0000919 # Check conversions from string (same test set as for int(), and then some)
920 LL = [
Guido van Rossume2a383d2007-01-15 16:59:06 +0000921 ('1' + '0'*20, 10**20),
922 ('1' + '0'*100, 10**100)
Walter Dörwald919497e2003-01-19 16:23:59 +0000923 ]
Walter Dörwald1f5947b2007-05-22 16:52:54 +0000924 for s, v in LL:
Walter Dörwald919497e2003-01-19 16:23:59 +0000925 for sign in "", "+", "-":
926 for prefix in "", " ", "\t", " \t\t ":
927 ss = prefix + sign + s
928 vv = v
929 if sign == "-" and v is not ValueError:
930 vv = -v
931 try:
Guido van Rossume2a383d2007-01-15 16:59:06 +0000932 self.assertEqual(int(ss), int(vv))
Walter Dörwald919497e2003-01-19 16:23:59 +0000933 except v:
934 pass
935
Guido van Rossume2a383d2007-01-15 16:59:06 +0000936 self.assertRaises(ValueError, int, '123\0')
937 self.assertRaises(ValueError, int, '53', 40)
938 self.assertRaises(TypeError, int, 1, 12)
Walter Dörwald919497e2003-01-19 16:23:59 +0000939
Guido van Rossumd8faa362007-04-27 19:54:29 +0000940 # SF patch #1638879: embedded NULs were not detected with
941 # explicit base
942 self.assertRaises(ValueError, int, '123\0', 10)
943 self.assertRaises(ValueError, int, '123\x00 245', 20)
944
Guido van Rossume2a383d2007-01-15 16:59:06 +0000945 self.assertEqual(int('100000000000000000000000000000000', 2),
Thomas Wouters477c8d52006-05-27 19:21:47 +0000946 4294967296)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000947 self.assertEqual(int('102002022201221111211', 3), 4294967296)
948 self.assertEqual(int('10000000000000000', 4), 4294967296)
949 self.assertEqual(int('32244002423141', 5), 4294967296)
950 self.assertEqual(int('1550104015504', 6), 4294967296)
951 self.assertEqual(int('211301422354', 7), 4294967296)
952 self.assertEqual(int('40000000000', 8), 4294967296)
953 self.assertEqual(int('12068657454', 9), 4294967296)
954 self.assertEqual(int('4294967296', 10), 4294967296)
955 self.assertEqual(int('1904440554', 11), 4294967296)
956 self.assertEqual(int('9ba461594', 12), 4294967296)
957 self.assertEqual(int('535a79889', 13), 4294967296)
958 self.assertEqual(int('2ca5b7464', 14), 4294967296)
959 self.assertEqual(int('1a20dcd81', 15), 4294967296)
960 self.assertEqual(int('100000000', 16), 4294967296)
961 self.assertEqual(int('a7ffda91', 17), 4294967296)
962 self.assertEqual(int('704he7g4', 18), 4294967296)
963 self.assertEqual(int('4f5aff66', 19), 4294967296)
964 self.assertEqual(int('3723ai4g', 20), 4294967296)
965 self.assertEqual(int('281d55i4', 21), 4294967296)
966 self.assertEqual(int('1fj8b184', 22), 4294967296)
967 self.assertEqual(int('1606k7ic', 23), 4294967296)
968 self.assertEqual(int('mb994ag', 24), 4294967296)
969 self.assertEqual(int('hek2mgl', 25), 4294967296)
970 self.assertEqual(int('dnchbnm', 26), 4294967296)
971 self.assertEqual(int('b28jpdm', 27), 4294967296)
972 self.assertEqual(int('8pfgih4', 28), 4294967296)
973 self.assertEqual(int('76beigg', 29), 4294967296)
974 self.assertEqual(int('5qmcpqg', 30), 4294967296)
975 self.assertEqual(int('4q0jto4', 31), 4294967296)
976 self.assertEqual(int('4000000', 32), 4294967296)
977 self.assertEqual(int('3aokq94', 33), 4294967296)
978 self.assertEqual(int('2qhxjli', 34), 4294967296)
979 self.assertEqual(int('2br45qb', 35), 4294967296)
980 self.assertEqual(int('1z141z4', 36), 4294967296)
Thomas Wouters477c8d52006-05-27 19:21:47 +0000981
Guido van Rossume2a383d2007-01-15 16:59:06 +0000982 self.assertEqual(int('100000000000000000000000000000001', 2),
Thomas Wouters477c8d52006-05-27 19:21:47 +0000983 4294967297)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000984 self.assertEqual(int('102002022201221111212', 3), 4294967297)
985 self.assertEqual(int('10000000000000001', 4), 4294967297)
986 self.assertEqual(int('32244002423142', 5), 4294967297)
987 self.assertEqual(int('1550104015505', 6), 4294967297)
988 self.assertEqual(int('211301422355', 7), 4294967297)
989 self.assertEqual(int('40000000001', 8), 4294967297)
990 self.assertEqual(int('12068657455', 9), 4294967297)
991 self.assertEqual(int('4294967297', 10), 4294967297)
992 self.assertEqual(int('1904440555', 11), 4294967297)
993 self.assertEqual(int('9ba461595', 12), 4294967297)
994 self.assertEqual(int('535a7988a', 13), 4294967297)
995 self.assertEqual(int('2ca5b7465', 14), 4294967297)
996 self.assertEqual(int('1a20dcd82', 15), 4294967297)
997 self.assertEqual(int('100000001', 16), 4294967297)
998 self.assertEqual(int('a7ffda92', 17), 4294967297)
999 self.assertEqual(int('704he7g5', 18), 4294967297)
1000 self.assertEqual(int('4f5aff67', 19), 4294967297)
1001 self.assertEqual(int('3723ai4h', 20), 4294967297)
1002 self.assertEqual(int('281d55i5', 21), 4294967297)
1003 self.assertEqual(int('1fj8b185', 22), 4294967297)
1004 self.assertEqual(int('1606k7id', 23), 4294967297)
1005 self.assertEqual(int('mb994ah', 24), 4294967297)
1006 self.assertEqual(int('hek2mgm', 25), 4294967297)
1007 self.assertEqual(int('dnchbnn', 26), 4294967297)
1008 self.assertEqual(int('b28jpdn', 27), 4294967297)
1009 self.assertEqual(int('8pfgih5', 28), 4294967297)
1010 self.assertEqual(int('76beigh', 29), 4294967297)
1011 self.assertEqual(int('5qmcpqh', 30), 4294967297)
1012 self.assertEqual(int('4q0jto5', 31), 4294967297)
1013 self.assertEqual(int('4000001', 32), 4294967297)
1014 self.assertEqual(int('3aokq95', 33), 4294967297)
1015 self.assertEqual(int('2qhxjlj', 34), 4294967297)
1016 self.assertEqual(int('2br45qc', 35), 4294967297)
1017 self.assertEqual(int('1z141z5', 36), 4294967297)
Thomas Wouters477c8d52006-05-27 19:21:47 +00001018
1019
Brett Cannonc3647ac2005-04-26 03:45:26 +00001020 def test_longconversion(self):
1021 # Test __long__()
1022 class Foo0:
1023 def __long__(self):
Guido van Rossume2a383d2007-01-15 16:59:06 +00001024 return 42
Brett Cannonc3647ac2005-04-26 03:45:26 +00001025
1026 class Foo1(object):
1027 def __long__(self):
Guido van Rossume2a383d2007-01-15 16:59:06 +00001028 return 42
Brett Cannonc3647ac2005-04-26 03:45:26 +00001029
Guido van Rossume2a383d2007-01-15 16:59:06 +00001030 class Foo2(int):
Brett Cannonc3647ac2005-04-26 03:45:26 +00001031 def __long__(self):
1032 return 42
1033
Guido van Rossume2a383d2007-01-15 16:59:06 +00001034 class Foo3(int):
1035 def __long__(self):
1036 return self
1037
1038 class Foo4(int):
1039 def __long__(self):
1040 return 42
1041
1042 class Foo5(int):
Brett Cannonc3647ac2005-04-26 03:45:26 +00001043 def __long__(self):
1044 return 42.
1045
Guido van Rossume2a383d2007-01-15 16:59:06 +00001046 self.assertEqual(int(Foo0()), 42)
1047 self.assertEqual(int(Foo1()), 42)
Guido van Rossumd8faa362007-04-27 19:54:29 +00001048 # XXX invokes __int__ now
Guido van Rossumddefaf32007-01-14 03:31:43 +00001049 # self.assertEqual(long(Foo2()), 42L)
Guido van Rossume2a383d2007-01-15 16:59:06 +00001050 self.assertEqual(int(Foo3()), 0)
Guido van Rossumd8faa362007-04-27 19:54:29 +00001051 # XXX likewise
Guido van Rossumddefaf32007-01-14 03:31:43 +00001052 # self.assertEqual(long(Foo4()), 42)
1053 # self.assertRaises(TypeError, long, Foo5())
Brett Cannonc3647ac2005-04-26 03:45:26 +00001054
Walter Dörwald919497e2003-01-19 16:23:59 +00001055 def test_map(self):
1056 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001057 list(map(None, 'hello')),
1058 [('h',), ('e',), ('l',), ('l',), ('o',)]
Walter Dörwald919497e2003-01-19 16:23:59 +00001059 )
1060 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001061 list(map(None, 'abcd', 'efg')),
1062 [('a', 'e'), ('b', 'f'), ('c', 'g')]
Walter Dörwald919497e2003-01-19 16:23:59 +00001063 )
1064 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001065 list(map(None, range(3))),
1066 [(0,), (1,), (2,)]
Walter Dörwald919497e2003-01-19 16:23:59 +00001067 )
1068 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001069 list(map(lambda x: x*x, range(1,4))),
Walter Dörwald919497e2003-01-19 16:23:59 +00001070 [1, 4, 9]
1071 )
1072 try:
1073 from math import sqrt
1074 except ImportError:
1075 def sqrt(x):
1076 return pow(x, 0.5)
1077 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001078 list(map(lambda x: list(map(sqrt, x)), [[16, 4], [81, 9]])),
Walter Dörwald919497e2003-01-19 16:23:59 +00001079 [[4.0, 2.0], [9.0, 3.0]]
1080 )
1081 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001082 list(map(lambda x, y: x+y, [1,3,2], [9,1,4])),
Walter Dörwald919497e2003-01-19 16:23:59 +00001083 [10, 4, 6]
1084 )
1085
1086 def plus(*v):
1087 accu = 0
1088 for i in v: accu = accu + i
1089 return accu
1090 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001091 list(map(plus, [1, 3, 7])),
Walter Dörwald919497e2003-01-19 16:23:59 +00001092 [1, 3, 7]
1093 )
1094 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001095 list(map(plus, [1, 3, 7], [4, 9, 2])),
Walter Dörwald919497e2003-01-19 16:23:59 +00001096 [1+4, 3+9, 7+2]
1097 )
1098 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001099 list(map(plus, [1, 3, 7], [4, 9, 2], [1, 1, 0])),
Walter Dörwald919497e2003-01-19 16:23:59 +00001100 [1+4+1, 3+9+1, 7+2+0]
1101 )
1102 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001103 list(map(None, Squares(10))),
1104 [(0,), (1,), (4,), (9,), (16,), (25,), (36,), (49,), (64,), (81,)]
1105 )
1106 self.assertEqual(
1107 list(map(int, Squares(10))),
Walter Dörwald919497e2003-01-19 16:23:59 +00001108 [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
1109 )
1110 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001111 list(map(None, Squares(3), Squares(2))),
1112 [(0,0), (1,1)]
Walter Dörwald919497e2003-01-19 16:23:59 +00001113 )
Guido van Rossum47b9ff62006-08-24 00:41:19 +00001114 def Max(a, b):
1115 if a is None:
1116 return b
1117 if b is None:
1118 return a
1119 return max(a, b)
Walter Dörwald919497e2003-01-19 16:23:59 +00001120 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001121 list(map(Max, Squares(3), Squares(2))),
1122 [0, 1]
Walter Dörwald919497e2003-01-19 16:23:59 +00001123 )
1124 self.assertRaises(TypeError, map)
1125 self.assertRaises(TypeError, map, lambda x: x, 42)
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001126 self.assertEqual(list(map(None, [42])), [(42,)])
Walter Dörwald919497e2003-01-19 16:23:59 +00001127 class BadSeq:
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001128 def __iter__(self):
Walter Dörwald919497e2003-01-19 16:23:59 +00001129 raise ValueError
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001130 yield None
1131 self.assertRaises(ValueError, list, map(lambda x: x, BadSeq()))
Neal Norwitzfcf44352005-11-27 20:37:43 +00001132 def badfunc(x):
1133 raise RuntimeError
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001134 self.assertRaises(RuntimeError, list, map(badfunc, range(5)))
Walter Dörwald919497e2003-01-19 16:23:59 +00001135
1136 def test_max(self):
1137 self.assertEqual(max('123123'), '3')
1138 self.assertEqual(max(1, 2, 3), 3)
1139 self.assertEqual(max((1, 2, 3, 1, 2, 3)), 3)
1140 self.assertEqual(max([1, 2, 3, 1, 2, 3]), 3)
1141
Guido van Rossume2a383d2007-01-15 16:59:06 +00001142 self.assertEqual(max(1, 2, 3.0), 3.0)
1143 self.assertEqual(max(1, 2.0, 3), 3)
1144 self.assertEqual(max(1.0, 2, 3), 3)
Walter Dörwald919497e2003-01-19 16:23:59 +00001145
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001146 for stmt in (
1147 "max(key=int)", # no args
1148 "max(1, key=int)", # single arg not iterable
1149 "max(1, 2, keystone=int)", # wrong keyword
1150 "max(1, 2, key=int, abc=int)", # two many keywords
1151 "max(1, 2, key=1)", # keyfunc is not callable
1152 ):
Tim Peters7f061872004-12-07 21:17:46 +00001153 try:
Georg Brandl7cae87c2006-09-06 06:51:57 +00001154 exec(stmt, globals())
Tim Peters7f061872004-12-07 21:17:46 +00001155 except TypeError:
1156 pass
1157 else:
1158 self.fail(stmt)
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001159
1160 self.assertEqual(max((1,), key=neg), 1) # one elem iterable
1161 self.assertEqual(max((1,2), key=neg), 1) # two elem iterable
1162 self.assertEqual(max(1, 2, key=neg), 1) # two elems
1163
1164 data = [random.randrange(200) for i in range(100)]
1165 keys = dict((elem, random.randrange(50)) for elem in data)
1166 f = keys.__getitem__
1167 self.assertEqual(max(data, key=f),
1168 sorted(reversed(data), key=f)[-1])
1169
Walter Dörwald919497e2003-01-19 16:23:59 +00001170 def test_min(self):
1171 self.assertEqual(min('123123'), '1')
1172 self.assertEqual(min(1, 2, 3), 1)
1173 self.assertEqual(min((1, 2, 3, 1, 2, 3)), 1)
1174 self.assertEqual(min([1, 2, 3, 1, 2, 3]), 1)
1175
Guido van Rossume2a383d2007-01-15 16:59:06 +00001176 self.assertEqual(min(1, 2, 3.0), 1)
1177 self.assertEqual(min(1, 2.0, 3), 1)
1178 self.assertEqual(min(1.0, 2, 3), 1.0)
Walter Dörwald919497e2003-01-19 16:23:59 +00001179
1180 self.assertRaises(TypeError, min)
1181 self.assertRaises(TypeError, min, 42)
1182 self.assertRaises(ValueError, min, ())
1183 class BadSeq:
1184 def __getitem__(self, index):
1185 raise ValueError
1186 self.assertRaises(ValueError, min, BadSeq())
1187 class BadNumber:
1188 def __cmp__(self, other):
1189 raise ValueError
Guido van Rossum47b9ff62006-08-24 00:41:19 +00001190 self.assertRaises(TypeError, min, (42, BadNumber()))
Walter Dörwald919497e2003-01-19 16:23:59 +00001191
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001192 for stmt in (
1193 "min(key=int)", # no args
1194 "min(1, key=int)", # single arg not iterable
1195 "min(1, 2, keystone=int)", # wrong keyword
1196 "min(1, 2, key=int, abc=int)", # two many keywords
1197 "min(1, 2, key=1)", # keyfunc is not callable
1198 ):
Tim Peters7f061872004-12-07 21:17:46 +00001199 try:
Georg Brandl7cae87c2006-09-06 06:51:57 +00001200 exec(stmt, globals())
Tim Peters7f061872004-12-07 21:17:46 +00001201 except TypeError:
1202 pass
1203 else:
1204 self.fail(stmt)
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001205
1206 self.assertEqual(min((1,), key=neg), 1) # one elem iterable
1207 self.assertEqual(min((1,2), key=neg), 2) # two elem iterable
1208 self.assertEqual(min(1, 2, key=neg), 2) # two elems
1209
1210 data = [random.randrange(200) for i in range(100)]
1211 keys = dict((elem, random.randrange(50)) for elem in data)
1212 f = keys.__getitem__
1213 self.assertEqual(min(data, key=f),
1214 sorted(data, key=f)[0])
1215
Georg Brandla18af4e2007-04-21 15:47:16 +00001216 def test_next(self):
1217 it = iter(range(2))
1218 self.assertEqual(next(it), 0)
1219 self.assertEqual(next(it), 1)
1220 self.assertRaises(StopIteration, next, it)
1221 self.assertRaises(StopIteration, next, it)
1222 self.assertEquals(next(it, 42), 42)
1223
1224 class Iter(object):
1225 def __iter__(self):
1226 return self
1227 def __next__(self):
1228 raise StopIteration
1229
1230 it = iter(Iter())
1231 self.assertEquals(next(it, 42), 42)
1232 self.assertRaises(StopIteration, next, it)
1233
1234 def gen():
1235 yield 1
1236 return
1237
1238 it = gen()
1239 self.assertEquals(next(it), 1)
1240 self.assertRaises(StopIteration, next, it)
1241 self.assertEquals(next(it, 42), 42)
1242
Walter Dörwald919497e2003-01-19 16:23:59 +00001243 def test_oct(self):
Guido van Rossumcd16bf62007-06-13 18:07:49 +00001244 self.assertEqual(oct(100), '0o144')
1245 self.assertEqual(oct(100), '0o144')
1246 self.assertEqual(oct(-100), '-0o144')
1247 self.assertEqual(oct(-100), '-0o144')
Walter Dörwald919497e2003-01-19 16:23:59 +00001248 self.assertRaises(TypeError, oct, ())
1249
1250 def write_testfile(self):
Guido van Rossuma88a0332007-02-26 16:59:55 +00001251 # NB the first 4 lines are also used to test input, below
Walter Dörwald919497e2003-01-19 16:23:59 +00001252 fp = open(TESTFN, 'w')
1253 try:
1254 fp.write('1+1\n')
1255 fp.write('1+1\n')
1256 fp.write('The quick brown fox jumps over the lazy dog')
1257 fp.write('.\n')
1258 fp.write('Dear John\n')
1259 fp.write('XXX'*100)
1260 fp.write('YYY'*100)
1261 finally:
1262 fp.close()
1263
1264 def test_open(self):
1265 self.write_testfile()
1266 fp = open(TESTFN, 'r')
1267 try:
1268 self.assertEqual(fp.readline(4), '1+1\n')
1269 self.assertEqual(fp.readline(4), '1+1\n')
1270 self.assertEqual(fp.readline(), 'The quick brown fox jumps over the lazy dog.\n')
1271 self.assertEqual(fp.readline(4), 'Dear')
1272 self.assertEqual(fp.readline(100), ' John\n')
1273 self.assertEqual(fp.read(300), 'XXX'*100)
1274 self.assertEqual(fp.read(1000), 'YYY'*100)
1275 finally:
1276 fp.close()
1277 unlink(TESTFN)
1278
1279 def test_ord(self):
1280 self.assertEqual(ord(' '), 32)
1281 self.assertEqual(ord('A'), 65)
1282 self.assertEqual(ord('a'), 97)
Guido van Rossumf9e91c92007-05-08 21:05:48 +00001283 self.assertEqual(ord('\x80'), 128)
1284 self.assertEqual(ord('\xff'), 255)
1285
1286 self.assertEqual(ord(b' '), 32)
1287 self.assertEqual(ord(b'A'), 65)
1288 self.assertEqual(ord(b'a'), 97)
1289 self.assertEqual(ord(b'\x80'), 128)
1290 self.assertEqual(ord(b'\xff'), 255)
1291
Walter Dörwald1f5947b2007-05-22 16:52:54 +00001292 self.assertEqual(ord(chr(sys.maxunicode)), sys.maxunicode)
Walter Dörwald919497e2003-01-19 16:23:59 +00001293 self.assertRaises(TypeError, ord, 42)
Walter Dörwald919497e2003-01-19 16:23:59 +00001294
Guido van Rossum8ac004e2007-07-15 13:00:05 +00001295 self.assertEqual(ord(chr(0x10FFFF)), 0x10FFFF)
1296 self.assertEqual(ord("\U0000FFFF"), 0x0000FFFF)
1297 self.assertEqual(ord("\U00010000"), 0x00010000)
1298 self.assertEqual(ord("\U00010001"), 0x00010001)
1299 self.assertEqual(ord("\U000FFFFE"), 0x000FFFFE)
1300 self.assertEqual(ord("\U000FFFFF"), 0x000FFFFF)
1301 self.assertEqual(ord("\U00100000"), 0x00100000)
1302 self.assertEqual(ord("\U00100001"), 0x00100001)
1303 self.assertEqual(ord("\U0010FFFE"), 0x0010FFFE)
1304 self.assertEqual(ord("\U0010FFFF"), 0x0010FFFF)
1305
Walter Dörwald919497e2003-01-19 16:23:59 +00001306 def test_pow(self):
1307 self.assertEqual(pow(0,0), 1)
1308 self.assertEqual(pow(0,1), 0)
1309 self.assertEqual(pow(1,0), 1)
1310 self.assertEqual(pow(1,1), 1)
1311
1312 self.assertEqual(pow(2,0), 1)
1313 self.assertEqual(pow(2,10), 1024)
1314 self.assertEqual(pow(2,20), 1024*1024)
1315 self.assertEqual(pow(2,30), 1024*1024*1024)
1316
1317 self.assertEqual(pow(-2,0), 1)
1318 self.assertEqual(pow(-2,1), -2)
1319 self.assertEqual(pow(-2,2), 4)
1320 self.assertEqual(pow(-2,3), -8)
1321
Guido van Rossume2a383d2007-01-15 16:59:06 +00001322 self.assertEqual(pow(0,0), 1)
1323 self.assertEqual(pow(0,1), 0)
1324 self.assertEqual(pow(1,0), 1)
1325 self.assertEqual(pow(1,1), 1)
Walter Dörwald919497e2003-01-19 16:23:59 +00001326
Guido van Rossume2a383d2007-01-15 16:59:06 +00001327 self.assertEqual(pow(2,0), 1)
1328 self.assertEqual(pow(2,10), 1024)
1329 self.assertEqual(pow(2,20), 1024*1024)
1330 self.assertEqual(pow(2,30), 1024*1024*1024)
Walter Dörwald919497e2003-01-19 16:23:59 +00001331
Guido van Rossume2a383d2007-01-15 16:59:06 +00001332 self.assertEqual(pow(-2,0), 1)
1333 self.assertEqual(pow(-2,1), -2)
1334 self.assertEqual(pow(-2,2), 4)
1335 self.assertEqual(pow(-2,3), -8)
Walter Dörwald919497e2003-01-19 16:23:59 +00001336
1337 self.assertAlmostEqual(pow(0.,0), 1.)
1338 self.assertAlmostEqual(pow(0.,1), 0.)
1339 self.assertAlmostEqual(pow(1.,0), 1.)
1340 self.assertAlmostEqual(pow(1.,1), 1.)
1341
1342 self.assertAlmostEqual(pow(2.,0), 1.)
1343 self.assertAlmostEqual(pow(2.,10), 1024.)
1344 self.assertAlmostEqual(pow(2.,20), 1024.*1024.)
1345 self.assertAlmostEqual(pow(2.,30), 1024.*1024.*1024.)
1346
1347 self.assertAlmostEqual(pow(-2.,0), 1.)
1348 self.assertAlmostEqual(pow(-2.,1), -2.)
1349 self.assertAlmostEqual(pow(-2.,2), 4.)
1350 self.assertAlmostEqual(pow(-2.,3), -8.)
1351
Guido van Rossume2a383d2007-01-15 16:59:06 +00001352 for x in 2, 2, 2.0:
1353 for y in 10, 10, 10.0:
1354 for z in 1000, 1000, 1000.0:
Walter Dörwald919497e2003-01-19 16:23:59 +00001355 if isinstance(x, float) or \
1356 isinstance(y, float) or \
1357 isinstance(z, float):
1358 self.assertRaises(TypeError, pow, x, y, z)
1359 else:
1360 self.assertAlmostEqual(pow(x, y, z), 24.0)
1361
Jeffrey Yasskin3404b3c2007-09-07 15:15:49 +00001362 self.assertAlmostEqual(pow(-1, 0.5), 1j)
1363 self.assertAlmostEqual(pow(-1, 1/3), 0.5 + 0.8660254037844386j)
1364
Walter Dörwald919497e2003-01-19 16:23:59 +00001365 self.assertRaises(TypeError, pow, -1, -2, 3)
1366 self.assertRaises(ValueError, pow, 1, 2, 0)
Guido van Rossume2a383d2007-01-15 16:59:06 +00001367 self.assertRaises(TypeError, pow, -1, -2, 3)
1368 self.assertRaises(ValueError, pow, 1, 2, 0)
Walter Dörwald919497e2003-01-19 16:23:59 +00001369
1370 self.assertRaises(TypeError, pow)
1371
1372 def test_range(self):
Guido van Rossum805365e2007-05-07 22:24:25 +00001373 self.assertEqual(list(range(3)), [0, 1, 2])
1374 self.assertEqual(list(range(1, 5)), [1, 2, 3, 4])
1375 self.assertEqual(list(range(0)), [])
1376 self.assertEqual(list(range(-3)), [])
1377 self.assertEqual(list(range(1, 10, 3)), [1, 4, 7])
1378 #self.assertEqual(list(range(5, -5, -3)), [5, 2, -1, -4])
Walter Dörwald919497e2003-01-19 16:23:59 +00001379
Guido van Rossum805365e2007-05-07 22:24:25 +00001380 """ XXX(nnorwitz):
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001381 # Now test range() with longs
Guido van Rossum805365e2007-05-07 22:24:25 +00001382 self.assertEqual(list(range(-2**100)), [])
1383 self.assertEqual(list(range(0, -2**100)), [])
1384 self.assertEqual(list(range(0, 2**100, -1)), [])
1385 self.assertEqual(list(range(0, 2**100, -1)), [])
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001386
Christian Heimesa37d4c62007-12-04 23:02:19 +00001387 a = int(10 * sys.maxsize)
1388 b = int(100 * sys.maxsize)
1389 c = int(50 * sys.maxsize)
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001390
Guido van Rossum805365e2007-05-07 22:24:25 +00001391 self.assertEqual(list(range(a, a+2)), [a, a+1])
1392 self.assertEqual(list(range(a+2, a, -1)), [a+2, a+1])
1393 self.assertEqual(list(range(a+4, a, -2)), [a+4, a+2])
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001394
Guido van Rossum805365e2007-05-07 22:24:25 +00001395 seq = list(range(a, b, c))
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001396 self.assert_(a in seq)
1397 self.assert_(b not in seq)
1398 self.assertEqual(len(seq), 2)
1399
Guido van Rossum805365e2007-05-07 22:24:25 +00001400 seq = list(range(b, a, -c))
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001401 self.assert_(b in seq)
1402 self.assert_(a not in seq)
1403 self.assertEqual(len(seq), 2)
1404
Guido van Rossum805365e2007-05-07 22:24:25 +00001405 seq = list(range(-a, -b, -c))
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001406 self.assert_(-a in seq)
1407 self.assert_(-b not in seq)
1408 self.assertEqual(len(seq), 2)
1409
Walter Dörwald919497e2003-01-19 16:23:59 +00001410 self.assertRaises(TypeError, range)
1411 self.assertRaises(TypeError, range, 1, 2, 3, 4)
1412 self.assertRaises(ValueError, range, 1, 2, 0)
Guido van Rossume2a383d2007-01-15 16:59:06 +00001413 self.assertRaises(ValueError, range, a, a + 1, int(0))
Neal Norwitzfcf44352005-11-27 20:37:43 +00001414
1415 class badzero(int):
Guido van Rossum47b9ff62006-08-24 00:41:19 +00001416 def __eq__(self, other):
Neal Norwitzfcf44352005-11-27 20:37:43 +00001417 raise RuntimeError
Guido van Rossum47b9ff62006-08-24 00:41:19 +00001418 __ne__ = __lt__ = __gt__ = __le__ = __ge__ = __eq__
1419
1420 # XXX This won't (but should!) raise RuntimeError if a is an int...
Neal Norwitzfcf44352005-11-27 20:37:43 +00001421 self.assertRaises(RuntimeError, range, a, a + 1, badzero(1))
Guido van Rossum805365e2007-05-07 22:24:25 +00001422 """
Walter Dörwald919497e2003-01-19 16:23:59 +00001423
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001424 # Reject floats when it would require PyLongs to represent.
1425 # (smaller floats still accepted, but deprecated)
Tim Peters299b3df2003-04-15 14:40:03 +00001426 self.assertRaises(TypeError, range, 1e100, 1e101, 1e101)
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001427
Walter Dörwald357981e2003-04-15 18:59:28 +00001428 self.assertRaises(TypeError, range, 0, "spam")
1429 self.assertRaises(TypeError, range, 0, 42, "spam")
1430
Christian Heimesa37d4c62007-12-04 23:02:19 +00001431 #NEAL self.assertRaises(OverflowError, range, -sys.maxsize, sys.maxsize)
1432 #NEAL self.assertRaises(OverflowError, range, 0, 2*sys.maxsize)
Guido van Rossum805365e2007-05-07 22:24:25 +00001433
Christian Heimesa37d4c62007-12-04 23:02:19 +00001434 self.assertRaises(OverflowError, len, range(0, sys.maxsize**10))
Walter Dörwald357981e2003-04-15 18:59:28 +00001435
Guido van Rossuma88a0332007-02-26 16:59:55 +00001436 def test_input(self):
1437 self.write_testfile()
1438 fp = open(TESTFN, 'r')
1439 savestdin = sys.stdin
1440 savestdout = sys.stdout # Eats the echo
1441 try:
1442 sys.stdin = fp
1443 sys.stdout = BitBucket()
1444 self.assertEqual(input(), "1+1")
1445 self.assertEqual(input('testing\n'), "1+1")
1446 self.assertEqual(input(), 'The quick brown fox jumps over the lazy dog.')
1447 self.assertEqual(input('testing\n'), 'Dear John')
1448
1449 # SF 1535165: don't segfault on closed stdin
1450 # sys.stdout must be a regular file for triggering
1451 sys.stdout = savestdout
1452 sys.stdin.close()
1453 self.assertRaises(ValueError, input)
1454
1455 sys.stdout = BitBucket()
Guido van Rossum34d19282007-08-09 01:03:29 +00001456 sys.stdin = io.StringIO("NULL\0")
Guido van Rossuma88a0332007-02-26 16:59:55 +00001457 self.assertRaises(TypeError, input, 42, 42)
Guido van Rossum34d19282007-08-09 01:03:29 +00001458 sys.stdin = io.StringIO(" 'whitespace'")
Guido van Rossuma88a0332007-02-26 16:59:55 +00001459 self.assertEqual(input(), " 'whitespace'")
Guido van Rossum34d19282007-08-09 01:03:29 +00001460 sys.stdin = io.StringIO()
Guido van Rossuma88a0332007-02-26 16:59:55 +00001461 self.assertRaises(EOFError, input)
1462
1463 del sys.stdout
1464 self.assertRaises(RuntimeError, input, 'prompt')
1465 del sys.stdin
1466 self.assertRaises(RuntimeError, input, 'prompt')
1467 finally:
1468 sys.stdin = savestdin
1469 sys.stdout = savestdout
1470 fp.close()
1471 unlink(TESTFN)
1472
Walter Dörwald919497e2003-01-19 16:23:59 +00001473 def test_repr(self):
1474 self.assertEqual(repr(''), '\'\'')
1475 self.assertEqual(repr(0), '0')
Guido van Rossume2a383d2007-01-15 16:59:06 +00001476 self.assertEqual(repr(0), '0')
Walter Dörwald919497e2003-01-19 16:23:59 +00001477 self.assertEqual(repr(()), '()')
1478 self.assertEqual(repr([]), '[]')
1479 self.assertEqual(repr({}), '{}')
1480 a = []
1481 a.append(a)
1482 self.assertEqual(repr(a), '[[...]]')
1483 a = {}
1484 a[0] = a
1485 self.assertEqual(repr(a), '{0: {...}}')
1486
1487 def test_round(self):
1488 self.assertEqual(round(0.0), 0.0)
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001489 self.assertEqual(type(round(0.0)), int)
Walter Dörwald919497e2003-01-19 16:23:59 +00001490 self.assertEqual(round(1.0), 1.0)
1491 self.assertEqual(round(10.0), 10.0)
1492 self.assertEqual(round(1000000000.0), 1000000000.0)
1493 self.assertEqual(round(1e20), 1e20)
1494
1495 self.assertEqual(round(-1.0), -1.0)
1496 self.assertEqual(round(-10.0), -10.0)
1497 self.assertEqual(round(-1000000000.0), -1000000000.0)
1498 self.assertEqual(round(-1e20), -1e20)
1499
1500 self.assertEqual(round(0.1), 0.0)
1501 self.assertEqual(round(1.1), 1.0)
1502 self.assertEqual(round(10.1), 10.0)
1503 self.assertEqual(round(1000000000.1), 1000000000.0)
1504
1505 self.assertEqual(round(-1.1), -1.0)
1506 self.assertEqual(round(-10.1), -10.0)
1507 self.assertEqual(round(-1000000000.1), -1000000000.0)
1508
1509 self.assertEqual(round(0.9), 1.0)
1510 self.assertEqual(round(9.9), 10.0)
1511 self.assertEqual(round(999999999.9), 1000000000.0)
1512
1513 self.assertEqual(round(-0.9), -1.0)
1514 self.assertEqual(round(-9.9), -10.0)
1515 self.assertEqual(round(-999999999.9), -1000000000.0)
1516
1517 self.assertEqual(round(-8.0, -1), -10.0)
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001518 self.assertEqual(type(round(-8.0, -1)), float)
1519
1520 self.assertEqual(type(round(-8.0, 0)), float)
1521 self.assertEqual(type(round(-8.0, 1)), float)
1522
1523 # Check even / odd rounding behaviour
1524 self.assertEqual(round(5.5), 6)
1525 self.assertEqual(round(6.5), 6)
1526 self.assertEqual(round(-5.5), -6)
1527 self.assertEqual(round(-6.5), -6)
1528
1529 # Check behavior on ints
1530 self.assertEqual(round(0), 0)
1531 self.assertEqual(round(8), 8)
1532 self.assertEqual(round(-8), -8)
1533 self.assertEqual(type(round(0)), int)
1534 self.assertEqual(type(round(-8, -1)), float)
1535 self.assertEqual(type(round(-8, 0)), float)
1536 self.assertEqual(type(round(-8, 1)), float)
Walter Dörwald919497e2003-01-19 16:23:59 +00001537
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001538 # test new kwargs
1539 self.assertEqual(round(number=-8.0, ndigits=-1), -10.0)
1540
Walter Dörwald919497e2003-01-19 16:23:59 +00001541 self.assertRaises(TypeError, round)
1542
Alex Martelliae211f92007-08-22 23:21:33 +00001543 # test generic rounding delegation for reals
1544 class TestRound:
1545 def __round__(self):
1546 return 23
1547
1548 class TestNoRound:
1549 pass
1550
1551 self.assertEqual(round(TestRound()), 23)
1552
1553 self.assertRaises(TypeError, round, 1, 2, 3)
1554 self.assertRaises(TypeError, round, TestNoRound())
1555
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001556 t = TestNoRound()
1557 t.__round__ = lambda *args: args
1558 self.assertRaises(TypeError, round, t)
1559 self.assertRaises(TypeError, round, t, 0)
1560
Walter Dörwald919497e2003-01-19 16:23:59 +00001561 def test_setattr(self):
Tim Petersf2715e02003-02-19 02:35:07 +00001562 setattr(sys, 'spam', 1)
1563 self.assertEqual(sys.spam, 1)
1564 self.assertRaises(TypeError, setattr, sys, 1, 'spam')
1565 self.assertRaises(TypeError, setattr)
Walter Dörwald919497e2003-01-19 16:23:59 +00001566
1567 def test_str(self):
1568 self.assertEqual(str(''), '')
1569 self.assertEqual(str(0), '0')
Guido van Rossume2a383d2007-01-15 16:59:06 +00001570 self.assertEqual(str(0), '0')
Walter Dörwald919497e2003-01-19 16:23:59 +00001571 self.assertEqual(str(()), '()')
1572 self.assertEqual(str([]), '[]')
1573 self.assertEqual(str({}), '{}')
1574 a = []
1575 a.append(a)
1576 self.assertEqual(str(a), '[[...]]')
1577 a = {}
1578 a[0] = a
1579 self.assertEqual(str(a), '{0: {...}}')
1580
Alex Martellia70b1912003-04-22 08:12:33 +00001581 def test_sum(self):
1582 self.assertEqual(sum([]), 0)
Guido van Rossum805365e2007-05-07 22:24:25 +00001583 self.assertEqual(sum(list(range(2,8))), 27)
1584 self.assertEqual(sum(iter(list(range(2,8)))), 27)
Alex Martellia70b1912003-04-22 08:12:33 +00001585 self.assertEqual(sum(Squares(10)), 285)
1586 self.assertEqual(sum(iter(Squares(10))), 285)
1587 self.assertEqual(sum([[1], [2], [3]], []), [1, 2, 3])
1588
1589 self.assertRaises(TypeError, sum)
1590 self.assertRaises(TypeError, sum, 42)
1591 self.assertRaises(TypeError, sum, ['a', 'b', 'c'])
1592 self.assertRaises(TypeError, sum, ['a', 'b', 'c'], '')
1593 self.assertRaises(TypeError, sum, [[1], [2], [3]])
1594 self.assertRaises(TypeError, sum, [{2:3}])
1595 self.assertRaises(TypeError, sum, [{2:3}]*2, {2:3})
1596
1597 class BadSeq:
1598 def __getitem__(self, index):
1599 raise ValueError
1600 self.assertRaises(ValueError, sum, BadSeq())
1601
Alex Martelli86d8b342007-08-22 22:39:42 +00001602 def test_trunc(self):
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001603
1604 self.assertEqual(trunc(1), 1)
1605 self.assertEqual(trunc(-1), -1)
1606 self.assertEqual(type(trunc(1)), int)
1607 self.assertEqual(type(trunc(1.5)), int)
1608 self.assertEqual(trunc(1.5), 1)
1609 self.assertEqual(trunc(-1.5), -1)
1610 self.assertEqual(trunc(1.999999), 1)
1611 self.assertEqual(trunc(-1.999999), -1)
1612 self.assertEqual(trunc(-0.999999), -0)
1613 self.assertEqual(trunc(-100.999), -100)
1614
Alex Martelli86d8b342007-08-22 22:39:42 +00001615 class TestTrunc:
1616 def __trunc__(self):
1617 return 23
1618
1619 class TestNoTrunc:
1620 pass
1621
1622 self.assertEqual(trunc(TestTrunc()), 23)
1623
1624 self.assertRaises(TypeError, trunc)
1625 self.assertRaises(TypeError, trunc, 1, 2)
1626 self.assertRaises(TypeError, trunc, TestNoTrunc())
1627
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001628 t = TestNoTrunc()
1629 t.__trunc__ = lambda *args: args
1630 self.assertRaises(TypeError, trunc, t)
1631 self.assertRaises(TypeError, trunc, t, 0)
1632
Walter Dörwald919497e2003-01-19 16:23:59 +00001633 def test_tuple(self):
1634 self.assertEqual(tuple(()), ())
1635 t0_3 = (0, 1, 2, 3)
1636 t0_3_bis = tuple(t0_3)
1637 self.assert_(t0_3 is t0_3_bis)
1638 self.assertEqual(tuple([]), ())
1639 self.assertEqual(tuple([0, 1, 2, 3]), (0, 1, 2, 3))
1640 self.assertEqual(tuple(''), ())
1641 self.assertEqual(tuple('spam'), ('s', 'p', 'a', 'm'))
1642
1643 def test_type(self):
1644 self.assertEqual(type(''), type('123'))
1645 self.assertNotEqual(type(''), type(()))
1646
Guido van Rossumfee7b932005-01-16 00:21:28 +00001647 # We don't want self in vars(), so these are static methods
1648
1649 @staticmethod
Walter Dörwald919497e2003-01-19 16:23:59 +00001650 def get_vars_f0():
1651 return vars()
Walter Dörwald919497e2003-01-19 16:23:59 +00001652
Guido van Rossumfee7b932005-01-16 00:21:28 +00001653 @staticmethod
Walter Dörwald919497e2003-01-19 16:23:59 +00001654 def get_vars_f2():
1655 BuiltinTest.get_vars_f0()
1656 a = 1
1657 b = 2
1658 return vars()
Walter Dörwald919497e2003-01-19 16:23:59 +00001659
1660 def test_vars(self):
Raymond Hettingera690a992003-11-16 16:17:49 +00001661 self.assertEqual(set(vars()), set(dir()))
Walter Dörwald919497e2003-01-19 16:23:59 +00001662 import sys
Raymond Hettingera690a992003-11-16 16:17:49 +00001663 self.assertEqual(set(vars(sys)), set(dir(sys)))
Walter Dörwald919497e2003-01-19 16:23:59 +00001664 self.assertEqual(self.get_vars_f0(), {})
1665 self.assertEqual(self.get_vars_f2(), {'a': 1, 'b': 2})
1666 self.assertRaises(TypeError, vars, 42, 42)
1667 self.assertRaises(TypeError, vars, 42)
1668
1669 def test_zip(self):
1670 a = (1, 2, 3)
1671 b = (4, 5, 6)
1672 t = [(1, 4), (2, 5), (3, 6)]
Guido van Rossum801f0d72006-08-24 19:48:10 +00001673 self.assertEqual(list(zip(a, b)), t)
Walter Dörwald919497e2003-01-19 16:23:59 +00001674 b = [4, 5, 6]
Guido van Rossum801f0d72006-08-24 19:48:10 +00001675 self.assertEqual(list(zip(a, b)), t)
Walter Dörwald919497e2003-01-19 16:23:59 +00001676 b = (4, 5, 6, 7)
Guido van Rossum801f0d72006-08-24 19:48:10 +00001677 self.assertEqual(list(zip(a, b)), t)
Walter Dörwald919497e2003-01-19 16:23:59 +00001678 class I:
1679 def __getitem__(self, i):
1680 if i < 0 or i > 2: raise IndexError
1681 return i + 4
Guido van Rossum801f0d72006-08-24 19:48:10 +00001682 self.assertEqual(list(zip(a, I())), t)
1683 self.assertEqual(list(zip()), [])
1684 self.assertEqual(list(zip(*[])), [])
Walter Dörwald919497e2003-01-19 16:23:59 +00001685 self.assertRaises(TypeError, zip, None)
1686 class G:
1687 pass
1688 self.assertRaises(TypeError, zip, a, G())
1689
1690 # Make sure zip doesn't try to allocate a billion elements for the
1691 # result list when one of its arguments doesn't say how long it is.
1692 # A MemoryError is the most likely failure mode.
1693 class SequenceWithoutALength:
1694 def __getitem__(self, i):
1695 if i == 5:
1696 raise IndexError
1697 else:
1698 return i
1699 self.assertEqual(
Guido van Rossum805365e2007-05-07 22:24:25 +00001700 list(zip(SequenceWithoutALength(), range(2**30))),
Walter Dörwald919497e2003-01-19 16:23:59 +00001701 list(enumerate(range(5)))
1702 )
1703
1704 class BadSeq:
1705 def __getitem__(self, i):
1706 if i == 5:
1707 raise ValueError
1708 else:
1709 return i
Guido van Rossum801f0d72006-08-24 19:48:10 +00001710 self.assertRaises(ValueError, list, zip(BadSeq(), BadSeq()))
Walter Dörwald919497e2003-01-19 16:23:59 +00001711
Raymond Hettinger64958a12003-12-17 20:43:33 +00001712class TestSorted(unittest.TestCase):
1713
1714 def test_basic(self):
Guido van Rossum805365e2007-05-07 22:24:25 +00001715 data = list(range(100))
Raymond Hettinger64958a12003-12-17 20:43:33 +00001716 copy = data[:]
1717 random.shuffle(copy)
1718 self.assertEqual(data, sorted(copy))
1719 self.assertNotEqual(data, copy)
1720
1721 data.reverse()
1722 random.shuffle(copy)
Guido van Rossum47b9ff62006-08-24 00:41:19 +00001723 self.assertEqual(data, sorted(copy, cmp=lambda x, y: (x < y) - (x > y)))
Raymond Hettinger64958a12003-12-17 20:43:33 +00001724 self.assertNotEqual(data, copy)
1725 random.shuffle(copy)
1726 self.assertEqual(data, sorted(copy, key=lambda x: -x))
1727 self.assertNotEqual(data, copy)
1728 random.shuffle(copy)
1729 self.assertEqual(data, sorted(copy, reverse=1))
1730 self.assertNotEqual(data, copy)
1731
1732 def test_inputtypes(self):
1733 s = 'abracadabra'
Walter Dörwald1f5947b2007-05-22 16:52:54 +00001734 types = [list, tuple, str]
Walter Dörwald4e41a4b2005-08-03 17:09:04 +00001735 for T in types:
Raymond Hettinger64958a12003-12-17 20:43:33 +00001736 self.assertEqual(sorted(s), sorted(T(s)))
1737
Walter Dörwald1f5947b2007-05-22 16:52:54 +00001738 s = ''.join(set(s)) # unique letters only
1739 types = [str, set, frozenset, list, tuple, dict.fromkeys]
Walter Dörwald4e41a4b2005-08-03 17:09:04 +00001740 for T in types:
Raymond Hettinger64958a12003-12-17 20:43:33 +00001741 self.assertEqual(sorted(s), sorted(T(s)))
1742
1743 def test_baddecorator(self):
1744 data = 'The quick Brown fox Jumped over The lazy Dog'.split()
1745 self.assertRaises(TypeError, sorted, data, None, lambda x,y: 0)
1746
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001747def test_main(verbose=None):
1748 test_classes = (BuiltinTest, TestSorted)
1749
1750 run_unittest(*test_classes)
1751
1752 # verify reference counting
1753 if verbose and hasattr(sys, "gettotalrefcount"):
1754 import gc
1755 counts = [None] * 5
Guido van Rossum805365e2007-05-07 22:24:25 +00001756 for i in range(len(counts)):
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001757 run_unittest(*test_classes)
1758 gc.collect()
1759 counts[i] = sys.gettotalrefcount()
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001760 print(counts)
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001761
Walter Dörwald919497e2003-01-19 16:23:59 +00001762
1763if __name__ == "__main__":
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001764 test_main(verbose=True)