blob: b10caf511b8dd56225171230b7239567fd5a0eb8 [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
Eric Smithfc6e8fe2008-01-11 00:17:22 +0000561 # TypeError because format_spec is not unicode
562 self.assertRaises(TypeError, format, object(), 4)
563 self.assertRaises(TypeError, format, object(), object())
564
Eric Smith61ecb772008-01-11 00:32:16 +0000565 # first argument to object.__format__ must be string
566 self.assertRaises(TypeError, object().__format__, 3)
567 self.assertRaises(TypeError, object().__format__, object())
568 self.assertRaises(TypeError, object().__format__, None)
569
Eric Smith37f10382007-09-01 10:56:01 +0000570 # make sure we can take a subclass of str as a format spec
571 self.assertEqual(format(0, C('10')), ' 0')
Eric Smith8c663262007-08-25 02:26:07 +0000572
Walter Dörwald919497e2003-01-19 16:23:59 +0000573 def test_getattr(self):
574 import sys
575 self.assert_(getattr(sys, 'stdout') is sys.stdout)
576 self.assertRaises(TypeError, getattr, sys, 1)
577 self.assertRaises(TypeError, getattr, sys, 1, "foo")
578 self.assertRaises(TypeError, getattr)
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000579 self.assertRaises(AttributeError, getattr, sys, chr(sys.maxunicode))
Walter Dörwald919497e2003-01-19 16:23:59 +0000580
581 def test_hasattr(self):
582 import sys
583 self.assert_(hasattr(sys, 'stdout'))
584 self.assertRaises(TypeError, hasattr, sys, 1)
585 self.assertRaises(TypeError, hasattr)
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000586 self.assertEqual(False, hasattr(sys, chr(sys.maxunicode)))
Walter Dörwald919497e2003-01-19 16:23:59 +0000587
588 def test_hash(self):
589 hash(None)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000590 self.assertEqual(hash(1), hash(1))
Walter Dörwald919497e2003-01-19 16:23:59 +0000591 self.assertEqual(hash(1), hash(1.0))
592 hash('spam')
Guido van Rossum98297ee2007-11-06 21:34:58 +0000593 self.assertEqual(hash('spam'), hash(b'spam'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000594 hash((0,1,2,3))
595 def f(): pass
596 self.assertRaises(TypeError, hash, [])
597 self.assertRaises(TypeError, hash, {})
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000598 # Bug 1536021: Allow hash to return long objects
599 class X:
600 def __hash__(self):
601 return 2**100
602 self.assertEquals(type(hash(X())), int)
603 class Y(object):
604 def __hash__(self):
605 return 2**100
606 self.assertEquals(type(hash(Y())), int)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000607 class Z(int):
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000608 def __hash__(self):
609 return self
Guido van Rossume2a383d2007-01-15 16:59:06 +0000610 self.assertEquals(hash(Z(42)), hash(42))
Walter Dörwald919497e2003-01-19 16:23:59 +0000611
612 def test_hex(self):
613 self.assertEqual(hex(16), '0x10')
Guido van Rossume2a383d2007-01-15 16:59:06 +0000614 self.assertEqual(hex(16), '0x10')
Guido van Rossum6c9e1302003-11-29 23:52:13 +0000615 self.assertEqual(hex(-16), '-0x10')
Guido van Rossume2a383d2007-01-15 16:59:06 +0000616 self.assertEqual(hex(-16), '-0x10')
Walter Dörwald919497e2003-01-19 16:23:59 +0000617 self.assertRaises(TypeError, hex, {})
618
619 def test_id(self):
620 id(None)
621 id(1)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000622 id(1)
Walter Dörwald919497e2003-01-19 16:23:59 +0000623 id(1.0)
624 id('spam')
625 id((0,1,2,3))
626 id([0,1,2,3])
627 id({'spam': 1, 'eggs': 2, 'ham': 3})
628
Guido van Rossuma88a0332007-02-26 16:59:55 +0000629 # Test input() later, alphabetized as if it were raw_input
630
Walter Dörwald919497e2003-01-19 16:23:59 +0000631 def test_int(self):
632 self.assertEqual(int(314), 314)
633 self.assertEqual(int(3.14), 3)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000634 self.assertEqual(int(314), 314)
Walter Dörwald919497e2003-01-19 16:23:59 +0000635 # Check that conversion from float truncates towards zero
636 self.assertEqual(int(-3.14), -3)
637 self.assertEqual(int(3.9), 3)
638 self.assertEqual(int(-3.9), -3)
639 self.assertEqual(int(3.5), 3)
640 self.assertEqual(int(-3.5), -3)
641 # Different base:
Guido van Rossume2a383d2007-01-15 16:59:06 +0000642 self.assertEqual(int("10",16), 16)
Walter Dörwald919497e2003-01-19 16:23:59 +0000643 # Test conversion from strings and various anomalies
644 for s, v in L:
645 for sign in "", "+", "-":
646 for prefix in "", " ", "\t", " \t\t ":
647 ss = prefix + sign + s
648 vv = v
649 if sign == "-" and v is not ValueError:
650 vv = -v
651 try:
652 self.assertEqual(int(ss), vv)
653 except v:
654 pass
655
Christian Heimesa37d4c62007-12-04 23:02:19 +0000656 s = repr(-1-sys.maxsize)
Thomas Wouters89f507f2006-12-13 04:49:30 +0000657 x = int(s)
Christian Heimesa37d4c62007-12-04 23:02:19 +0000658 self.assertEqual(x+1, -sys.maxsize)
Thomas Wouters89f507f2006-12-13 04:49:30 +0000659 self.assert_(isinstance(x, int))
Walter Dörwald919497e2003-01-19 16:23:59 +0000660 # should return long
Christian Heimesa37d4c62007-12-04 23:02:19 +0000661 self.assertEqual(int(s[1:]), sys.maxsize+1)
Walter Dörwald919497e2003-01-19 16:23:59 +0000662
663 # should return long
664 x = int(1e100)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000665 self.assert_(isinstance(x, int))
Walter Dörwald919497e2003-01-19 16:23:59 +0000666 x = int(-1e100)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000667 self.assert_(isinstance(x, int))
Walter Dörwald919497e2003-01-19 16:23:59 +0000668
669
670 # SF bug 434186: 0x80000000/2 != 0x80000000>>1.
671 # Worked by accident in Windows release build, but failed in debug build.
672 # Failed in all Linux builds.
Christian Heimesa37d4c62007-12-04 23:02:19 +0000673 x = -1-sys.maxsize
Walter Dörwald919497e2003-01-19 16:23:59 +0000674 self.assertEqual(x >> 1, x//2)
675
676 self.assertRaises(ValueError, int, '123\0')
677 self.assertRaises(ValueError, int, '53', 40)
678
Thomas Wouters89f507f2006-12-13 04:49:30 +0000679 # SF bug 1545497: embedded NULs were not detected with
680 # explicit base
681 self.assertRaises(ValueError, int, '123\0', 10)
682 self.assertRaises(ValueError, int, '123\x00 245', 20)
683
Walter Dörwald919497e2003-01-19 16:23:59 +0000684 x = int('1' * 600)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000685 self.assert_(isinstance(x, int))
Walter Dörwald919497e2003-01-19 16:23:59 +0000686
Walter Dörwald1f5947b2007-05-22 16:52:54 +0000687 x = int(chr(0x661) * 600)
688 self.assert_(isinstance(x, int))
Walter Dörwald919497e2003-01-19 16:23:59 +0000689
690 self.assertRaises(TypeError, int, 1, 12)
691
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000692 # tests with base 0
693 self.assertRaises(ValueError, int, ' 0123 ', 0) # old octal syntax
694 self.assertEqual(int('000', 0), 0)
695 self.assertEqual(int('0o123', 0), 83)
696 self.assertEqual(int('0x123', 0), 291)
697 self.assertEqual(int('0b100', 0), 4)
698 self.assertEqual(int(' 0O123 ', 0), 83)
699 self.assertEqual(int(' 0X123 ', 0), 291)
700 self.assertEqual(int(' 0B100 ', 0), 4)
701
702 # without base still base 10
703 self.assertEqual(int('0123'), 123)
704 self.assertEqual(int('0123', 10), 123)
705
706 # tests with prefix and base != 0
Neal Norwitz5898fa22005-11-22 05:17:40 +0000707 self.assertEqual(int('0x123', 16), 291)
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000708 self.assertEqual(int('0o123', 8), 83)
709 self.assertEqual(int('0b100', 2), 4)
710 self.assertEqual(int('0X123', 16), 291)
711 self.assertEqual(int('0O123', 8), 83)
712 self.assertEqual(int('0B100', 2), 4)
Walter Dörwald919497e2003-01-19 16:23:59 +0000713
Thomas Wouters477c8d52006-05-27 19:21:47 +0000714 # SF bug 1334662: int(string, base) wrong answers
715 # Various representations of 2**32 evaluated to 0
716 # rather than 2**32 in previous versions
717
Guido van Rossume2a383d2007-01-15 16:59:06 +0000718 self.assertEqual(int('100000000000000000000000000000000', 2), 4294967296)
719 self.assertEqual(int('102002022201221111211', 3), 4294967296)
720 self.assertEqual(int('10000000000000000', 4), 4294967296)
721 self.assertEqual(int('32244002423141', 5), 4294967296)
722 self.assertEqual(int('1550104015504', 6), 4294967296)
723 self.assertEqual(int('211301422354', 7), 4294967296)
724 self.assertEqual(int('40000000000', 8), 4294967296)
725 self.assertEqual(int('12068657454', 9), 4294967296)
726 self.assertEqual(int('4294967296', 10), 4294967296)
727 self.assertEqual(int('1904440554', 11), 4294967296)
728 self.assertEqual(int('9ba461594', 12), 4294967296)
729 self.assertEqual(int('535a79889', 13), 4294967296)
730 self.assertEqual(int('2ca5b7464', 14), 4294967296)
731 self.assertEqual(int('1a20dcd81', 15), 4294967296)
732 self.assertEqual(int('100000000', 16), 4294967296)
733 self.assertEqual(int('a7ffda91', 17), 4294967296)
734 self.assertEqual(int('704he7g4', 18), 4294967296)
735 self.assertEqual(int('4f5aff66', 19), 4294967296)
736 self.assertEqual(int('3723ai4g', 20), 4294967296)
737 self.assertEqual(int('281d55i4', 21), 4294967296)
738 self.assertEqual(int('1fj8b184', 22), 4294967296)
739 self.assertEqual(int('1606k7ic', 23), 4294967296)
740 self.assertEqual(int('mb994ag', 24), 4294967296)
741 self.assertEqual(int('hek2mgl', 25), 4294967296)
742 self.assertEqual(int('dnchbnm', 26), 4294967296)
743 self.assertEqual(int('b28jpdm', 27), 4294967296)
744 self.assertEqual(int('8pfgih4', 28), 4294967296)
745 self.assertEqual(int('76beigg', 29), 4294967296)
746 self.assertEqual(int('5qmcpqg', 30), 4294967296)
747 self.assertEqual(int('4q0jto4', 31), 4294967296)
748 self.assertEqual(int('4000000', 32), 4294967296)
749 self.assertEqual(int('3aokq94', 33), 4294967296)
750 self.assertEqual(int('2qhxjli', 34), 4294967296)
751 self.assertEqual(int('2br45qb', 35), 4294967296)
752 self.assertEqual(int('1z141z4', 36), 4294967296)
Thomas Wouters477c8d52006-05-27 19:21:47 +0000753
754 # SF bug 1334662: int(string, base) wrong answers
755 # Checks for proper evaluation of 2**32 + 1
Guido van Rossume2a383d2007-01-15 16:59:06 +0000756 self.assertEqual(int('100000000000000000000000000000001', 2), 4294967297)
757 self.assertEqual(int('102002022201221111212', 3), 4294967297)
758 self.assertEqual(int('10000000000000001', 4), 4294967297)
759 self.assertEqual(int('32244002423142', 5), 4294967297)
760 self.assertEqual(int('1550104015505', 6), 4294967297)
761 self.assertEqual(int('211301422355', 7), 4294967297)
762 self.assertEqual(int('40000000001', 8), 4294967297)
763 self.assertEqual(int('12068657455', 9), 4294967297)
764 self.assertEqual(int('4294967297', 10), 4294967297)
765 self.assertEqual(int('1904440555', 11), 4294967297)
766 self.assertEqual(int('9ba461595', 12), 4294967297)
767 self.assertEqual(int('535a7988a', 13), 4294967297)
768 self.assertEqual(int('2ca5b7465', 14), 4294967297)
769 self.assertEqual(int('1a20dcd82', 15), 4294967297)
770 self.assertEqual(int('100000001', 16), 4294967297)
771 self.assertEqual(int('a7ffda92', 17), 4294967297)
772 self.assertEqual(int('704he7g5', 18), 4294967297)
773 self.assertEqual(int('4f5aff67', 19), 4294967297)
774 self.assertEqual(int('3723ai4h', 20), 4294967297)
775 self.assertEqual(int('281d55i5', 21), 4294967297)
776 self.assertEqual(int('1fj8b185', 22), 4294967297)
777 self.assertEqual(int('1606k7id', 23), 4294967297)
778 self.assertEqual(int('mb994ah', 24), 4294967297)
779 self.assertEqual(int('hek2mgm', 25), 4294967297)
780 self.assertEqual(int('dnchbnn', 26), 4294967297)
781 self.assertEqual(int('b28jpdn', 27), 4294967297)
782 self.assertEqual(int('8pfgih5', 28), 4294967297)
783 self.assertEqual(int('76beigh', 29), 4294967297)
784 self.assertEqual(int('5qmcpqh', 30), 4294967297)
785 self.assertEqual(int('4q0jto5', 31), 4294967297)
786 self.assertEqual(int('4000001', 32), 4294967297)
787 self.assertEqual(int('3aokq95', 33), 4294967297)
788 self.assertEqual(int('2qhxjlj', 34), 4294967297)
789 self.assertEqual(int('2br45qc', 35), 4294967297)
790 self.assertEqual(int('1z141z5', 36), 4294967297)
Thomas Wouters477c8d52006-05-27 19:21:47 +0000791
Brett Cannonc3647ac2005-04-26 03:45:26 +0000792 def test_intconversion(self):
793 # Test __int__()
794 class Foo0:
795 def __int__(self):
796 return 42
797
798 class Foo1(object):
799 def __int__(self):
800 return 42
801
802 class Foo2(int):
803 def __int__(self):
804 return 42
805
806 class Foo3(int):
807 def __int__(self):
808 return self
809
810 class Foo4(int):
811 def __int__(self):
Guido van Rossume2a383d2007-01-15 16:59:06 +0000812 return 42
Brett Cannonc3647ac2005-04-26 03:45:26 +0000813
814 class Foo5(int):
815 def __int__(self):
816 return 42.
817
818 self.assertEqual(int(Foo0()), 42)
819 self.assertEqual(int(Foo1()), 42)
820 self.assertEqual(int(Foo2()), 42)
821 self.assertEqual(int(Foo3()), 0)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000822 self.assertEqual(int(Foo4()), 42)
Brett Cannonc3647ac2005-04-26 03:45:26 +0000823 self.assertRaises(TypeError, int, Foo5())
824
Walter Dörwald919497e2003-01-19 16:23:59 +0000825 def test_iter(self):
826 self.assertRaises(TypeError, iter)
827 self.assertRaises(TypeError, iter, 42, 42)
828 lists = [("1", "2"), ["1", "2"], "12"]
Walter Dörwald919497e2003-01-19 16:23:59 +0000829 for l in lists:
830 i = iter(l)
Georg Brandla18af4e2007-04-21 15:47:16 +0000831 self.assertEqual(next(i), '1')
832 self.assertEqual(next(i), '2')
833 self.assertRaises(StopIteration, next, i)
Walter Dörwald919497e2003-01-19 16:23:59 +0000834
835 def test_isinstance(self):
836 class C:
837 pass
838 class D(C):
839 pass
840 class E:
841 pass
842 c = C()
843 d = D()
844 e = E()
845 self.assert_(isinstance(c, C))
846 self.assert_(isinstance(d, C))
847 self.assert_(not isinstance(e, C))
848 self.assert_(not isinstance(c, D))
849 self.assert_(not isinstance('foo', E))
850 self.assertRaises(TypeError, isinstance, E, 'foo')
851 self.assertRaises(TypeError, isinstance)
852
853 def test_issubclass(self):
854 class C:
855 pass
856 class D(C):
857 pass
858 class E:
859 pass
860 c = C()
861 d = D()
862 e = E()
863 self.assert_(issubclass(D, C))
864 self.assert_(issubclass(C, C))
865 self.assert_(not issubclass(C, D))
866 self.assertRaises(TypeError, issubclass, 'foo', E)
867 self.assertRaises(TypeError, issubclass, E, 'foo')
868 self.assertRaises(TypeError, issubclass)
869
870 def test_len(self):
871 self.assertEqual(len('123'), 3)
872 self.assertEqual(len(()), 0)
873 self.assertEqual(len((1, 2, 3, 4)), 4)
874 self.assertEqual(len([1, 2, 3, 4]), 4)
875 self.assertEqual(len({}), 0)
876 self.assertEqual(len({'a':1, 'b': 2}), 2)
877 class BadSeq:
878 def __len__(self):
879 raise ValueError
880 self.assertRaises(ValueError, len, BadSeq())
881
882 def test_list(self):
883 self.assertEqual(list([]), [])
884 l0_3 = [0, 1, 2, 3]
885 l0_3_bis = list(l0_3)
886 self.assertEqual(l0_3, l0_3_bis)
887 self.assert_(l0_3 is not l0_3_bis)
888 self.assertEqual(list(()), [])
889 self.assertEqual(list((0, 1, 2, 3)), [0, 1, 2, 3])
890 self.assertEqual(list(''), [])
891 self.assertEqual(list('spam'), ['s', 'p', 'a', 'm'])
892
Christian Heimesa37d4c62007-12-04 23:02:19 +0000893 if sys.maxsize == 0x7fffffff:
Walter Dörwald919497e2003-01-19 16:23:59 +0000894 # This test can currently only work on 32-bit machines.
895 # XXX If/when PySequence_Length() returns a ssize_t, it should be
896 # XXX re-enabled.
897 # Verify clearing of bug #556025.
Christian Heimesa37d4c62007-12-04 23:02:19 +0000898 # This assumes that the max data size (sys.maxsize) == max
Walter Dörwald919497e2003-01-19 16:23:59 +0000899 # address size this also assumes that the address size is at
900 # least 4 bytes with 8 byte addresses, the bug is not well
901 # tested
902 #
903 # Note: This test is expected to SEGV under Cygwin 1.3.12 or
904 # earlier due to a newlib bug. See the following mailing list
905 # thread for the details:
906
907 # http://sources.redhat.com/ml/newlib/2002/msg00369.html
Christian Heimesa37d4c62007-12-04 23:02:19 +0000908 self.assertRaises(MemoryError, list, range(sys.maxsize // 2))
Walter Dörwald919497e2003-01-19 16:23:59 +0000909
Raymond Hettingeraa241e02004-09-26 19:24:20 +0000910 # This code used to segfault in Py2.4a3
911 x = []
912 x.extend(-y for y in x)
913 self.assertEqual(x, [])
914
Walter Dörwald919497e2003-01-19 16:23:59 +0000915 def test_long(self):
Guido van Rossume2a383d2007-01-15 16:59:06 +0000916 self.assertEqual(int(314), 314)
917 self.assertEqual(int(3.14), 3)
918 self.assertEqual(int(314), 314)
Walter Dörwald919497e2003-01-19 16:23:59 +0000919 # Check that conversion from float truncates towards zero
Guido van Rossume2a383d2007-01-15 16:59:06 +0000920 self.assertEqual(int(-3.14), -3)
921 self.assertEqual(int(3.9), 3)
922 self.assertEqual(int(-3.9), -3)
923 self.assertEqual(int(3.5), 3)
924 self.assertEqual(int(-3.5), -3)
925 self.assertEqual(int("-3"), -3)
Walter Dörwald919497e2003-01-19 16:23:59 +0000926 # Different base:
Guido van Rossume2a383d2007-01-15 16:59:06 +0000927 self.assertEqual(int("10",16), 16)
Walter Dörwald919497e2003-01-19 16:23:59 +0000928 # Check conversions from string (same test set as for int(), and then some)
929 LL = [
Guido van Rossume2a383d2007-01-15 16:59:06 +0000930 ('1' + '0'*20, 10**20),
931 ('1' + '0'*100, 10**100)
Walter Dörwald919497e2003-01-19 16:23:59 +0000932 ]
Walter Dörwald1f5947b2007-05-22 16:52:54 +0000933 for s, v in LL:
Walter Dörwald919497e2003-01-19 16:23:59 +0000934 for sign in "", "+", "-":
935 for prefix in "", " ", "\t", " \t\t ":
936 ss = prefix + sign + s
937 vv = v
938 if sign == "-" and v is not ValueError:
939 vv = -v
940 try:
Guido van Rossume2a383d2007-01-15 16:59:06 +0000941 self.assertEqual(int(ss), int(vv))
Walter Dörwald919497e2003-01-19 16:23:59 +0000942 except v:
943 pass
944
Guido van Rossume2a383d2007-01-15 16:59:06 +0000945 self.assertRaises(ValueError, int, '123\0')
946 self.assertRaises(ValueError, int, '53', 40)
947 self.assertRaises(TypeError, int, 1, 12)
Walter Dörwald919497e2003-01-19 16:23:59 +0000948
Guido van Rossumd8faa362007-04-27 19:54:29 +0000949 # SF patch #1638879: embedded NULs were not detected with
950 # explicit base
951 self.assertRaises(ValueError, int, '123\0', 10)
952 self.assertRaises(ValueError, int, '123\x00 245', 20)
953
Guido van Rossume2a383d2007-01-15 16:59:06 +0000954 self.assertEqual(int('100000000000000000000000000000000', 2),
Thomas Wouters477c8d52006-05-27 19:21:47 +0000955 4294967296)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000956 self.assertEqual(int('102002022201221111211', 3), 4294967296)
957 self.assertEqual(int('10000000000000000', 4), 4294967296)
958 self.assertEqual(int('32244002423141', 5), 4294967296)
959 self.assertEqual(int('1550104015504', 6), 4294967296)
960 self.assertEqual(int('211301422354', 7), 4294967296)
961 self.assertEqual(int('40000000000', 8), 4294967296)
962 self.assertEqual(int('12068657454', 9), 4294967296)
963 self.assertEqual(int('4294967296', 10), 4294967296)
964 self.assertEqual(int('1904440554', 11), 4294967296)
965 self.assertEqual(int('9ba461594', 12), 4294967296)
966 self.assertEqual(int('535a79889', 13), 4294967296)
967 self.assertEqual(int('2ca5b7464', 14), 4294967296)
968 self.assertEqual(int('1a20dcd81', 15), 4294967296)
969 self.assertEqual(int('100000000', 16), 4294967296)
970 self.assertEqual(int('a7ffda91', 17), 4294967296)
971 self.assertEqual(int('704he7g4', 18), 4294967296)
972 self.assertEqual(int('4f5aff66', 19), 4294967296)
973 self.assertEqual(int('3723ai4g', 20), 4294967296)
974 self.assertEqual(int('281d55i4', 21), 4294967296)
975 self.assertEqual(int('1fj8b184', 22), 4294967296)
976 self.assertEqual(int('1606k7ic', 23), 4294967296)
977 self.assertEqual(int('mb994ag', 24), 4294967296)
978 self.assertEqual(int('hek2mgl', 25), 4294967296)
979 self.assertEqual(int('dnchbnm', 26), 4294967296)
980 self.assertEqual(int('b28jpdm', 27), 4294967296)
981 self.assertEqual(int('8pfgih4', 28), 4294967296)
982 self.assertEqual(int('76beigg', 29), 4294967296)
983 self.assertEqual(int('5qmcpqg', 30), 4294967296)
984 self.assertEqual(int('4q0jto4', 31), 4294967296)
985 self.assertEqual(int('4000000', 32), 4294967296)
986 self.assertEqual(int('3aokq94', 33), 4294967296)
987 self.assertEqual(int('2qhxjli', 34), 4294967296)
988 self.assertEqual(int('2br45qb', 35), 4294967296)
989 self.assertEqual(int('1z141z4', 36), 4294967296)
Thomas Wouters477c8d52006-05-27 19:21:47 +0000990
Guido van Rossume2a383d2007-01-15 16:59:06 +0000991 self.assertEqual(int('100000000000000000000000000000001', 2),
Thomas Wouters477c8d52006-05-27 19:21:47 +0000992 4294967297)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000993 self.assertEqual(int('102002022201221111212', 3), 4294967297)
994 self.assertEqual(int('10000000000000001', 4), 4294967297)
995 self.assertEqual(int('32244002423142', 5), 4294967297)
996 self.assertEqual(int('1550104015505', 6), 4294967297)
997 self.assertEqual(int('211301422355', 7), 4294967297)
998 self.assertEqual(int('40000000001', 8), 4294967297)
999 self.assertEqual(int('12068657455', 9), 4294967297)
1000 self.assertEqual(int('4294967297', 10), 4294967297)
1001 self.assertEqual(int('1904440555', 11), 4294967297)
1002 self.assertEqual(int('9ba461595', 12), 4294967297)
1003 self.assertEqual(int('535a7988a', 13), 4294967297)
1004 self.assertEqual(int('2ca5b7465', 14), 4294967297)
1005 self.assertEqual(int('1a20dcd82', 15), 4294967297)
1006 self.assertEqual(int('100000001', 16), 4294967297)
1007 self.assertEqual(int('a7ffda92', 17), 4294967297)
1008 self.assertEqual(int('704he7g5', 18), 4294967297)
1009 self.assertEqual(int('4f5aff67', 19), 4294967297)
1010 self.assertEqual(int('3723ai4h', 20), 4294967297)
1011 self.assertEqual(int('281d55i5', 21), 4294967297)
1012 self.assertEqual(int('1fj8b185', 22), 4294967297)
1013 self.assertEqual(int('1606k7id', 23), 4294967297)
1014 self.assertEqual(int('mb994ah', 24), 4294967297)
1015 self.assertEqual(int('hek2mgm', 25), 4294967297)
1016 self.assertEqual(int('dnchbnn', 26), 4294967297)
1017 self.assertEqual(int('b28jpdn', 27), 4294967297)
1018 self.assertEqual(int('8pfgih5', 28), 4294967297)
1019 self.assertEqual(int('76beigh', 29), 4294967297)
1020 self.assertEqual(int('5qmcpqh', 30), 4294967297)
1021 self.assertEqual(int('4q0jto5', 31), 4294967297)
1022 self.assertEqual(int('4000001', 32), 4294967297)
1023 self.assertEqual(int('3aokq95', 33), 4294967297)
1024 self.assertEqual(int('2qhxjlj', 34), 4294967297)
1025 self.assertEqual(int('2br45qc', 35), 4294967297)
1026 self.assertEqual(int('1z141z5', 36), 4294967297)
Thomas Wouters477c8d52006-05-27 19:21:47 +00001027
1028
Brett Cannonc3647ac2005-04-26 03:45:26 +00001029 def test_longconversion(self):
1030 # Test __long__()
1031 class Foo0:
1032 def __long__(self):
Guido van Rossume2a383d2007-01-15 16:59:06 +00001033 return 42
Brett Cannonc3647ac2005-04-26 03:45:26 +00001034
1035 class Foo1(object):
1036 def __long__(self):
Guido van Rossume2a383d2007-01-15 16:59:06 +00001037 return 42
Brett Cannonc3647ac2005-04-26 03:45:26 +00001038
Guido van Rossume2a383d2007-01-15 16:59:06 +00001039 class Foo2(int):
Brett Cannonc3647ac2005-04-26 03:45:26 +00001040 def __long__(self):
1041 return 42
1042
Guido van Rossume2a383d2007-01-15 16:59:06 +00001043 class Foo3(int):
1044 def __long__(self):
1045 return self
1046
1047 class Foo4(int):
1048 def __long__(self):
1049 return 42
1050
1051 class Foo5(int):
Brett Cannonc3647ac2005-04-26 03:45:26 +00001052 def __long__(self):
1053 return 42.
1054
Guido van Rossume2a383d2007-01-15 16:59:06 +00001055 self.assertEqual(int(Foo0()), 42)
1056 self.assertEqual(int(Foo1()), 42)
Guido van Rossumd8faa362007-04-27 19:54:29 +00001057 # XXX invokes __int__ now
Guido van Rossumddefaf32007-01-14 03:31:43 +00001058 # self.assertEqual(long(Foo2()), 42L)
Guido van Rossume2a383d2007-01-15 16:59:06 +00001059 self.assertEqual(int(Foo3()), 0)
Guido van Rossumd8faa362007-04-27 19:54:29 +00001060 # XXX likewise
Guido van Rossumddefaf32007-01-14 03:31:43 +00001061 # self.assertEqual(long(Foo4()), 42)
1062 # self.assertRaises(TypeError, long, Foo5())
Brett Cannonc3647ac2005-04-26 03:45:26 +00001063
Walter Dörwald919497e2003-01-19 16:23:59 +00001064 def test_map(self):
1065 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001066 list(map(None, 'hello')),
1067 [('h',), ('e',), ('l',), ('l',), ('o',)]
Walter Dörwald919497e2003-01-19 16:23:59 +00001068 )
1069 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001070 list(map(None, 'abcd', 'efg')),
1071 [('a', 'e'), ('b', 'f'), ('c', 'g')]
Walter Dörwald919497e2003-01-19 16:23:59 +00001072 )
1073 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001074 list(map(None, range(3))),
1075 [(0,), (1,), (2,)]
Walter Dörwald919497e2003-01-19 16:23:59 +00001076 )
1077 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001078 list(map(lambda x: x*x, range(1,4))),
Walter Dörwald919497e2003-01-19 16:23:59 +00001079 [1, 4, 9]
1080 )
1081 try:
1082 from math import sqrt
1083 except ImportError:
1084 def sqrt(x):
1085 return pow(x, 0.5)
1086 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001087 list(map(lambda x: list(map(sqrt, x)), [[16, 4], [81, 9]])),
Walter Dörwald919497e2003-01-19 16:23:59 +00001088 [[4.0, 2.0], [9.0, 3.0]]
1089 )
1090 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001091 list(map(lambda x, y: x+y, [1,3,2], [9,1,4])),
Walter Dörwald919497e2003-01-19 16:23:59 +00001092 [10, 4, 6]
1093 )
1094
1095 def plus(*v):
1096 accu = 0
1097 for i in v: accu = accu + i
1098 return accu
1099 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001100 list(map(plus, [1, 3, 7])),
Walter Dörwald919497e2003-01-19 16:23:59 +00001101 [1, 3, 7]
1102 )
1103 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001104 list(map(plus, [1, 3, 7], [4, 9, 2])),
Walter Dörwald919497e2003-01-19 16:23:59 +00001105 [1+4, 3+9, 7+2]
1106 )
1107 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001108 list(map(plus, [1, 3, 7], [4, 9, 2], [1, 1, 0])),
Walter Dörwald919497e2003-01-19 16:23:59 +00001109 [1+4+1, 3+9+1, 7+2+0]
1110 )
1111 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001112 list(map(None, Squares(10))),
1113 [(0,), (1,), (4,), (9,), (16,), (25,), (36,), (49,), (64,), (81,)]
1114 )
1115 self.assertEqual(
1116 list(map(int, Squares(10))),
Walter Dörwald919497e2003-01-19 16:23:59 +00001117 [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
1118 )
1119 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001120 list(map(None, Squares(3), Squares(2))),
1121 [(0,0), (1,1)]
Walter Dörwald919497e2003-01-19 16:23:59 +00001122 )
Guido van Rossum47b9ff62006-08-24 00:41:19 +00001123 def Max(a, b):
1124 if a is None:
1125 return b
1126 if b is None:
1127 return a
1128 return max(a, b)
Walter Dörwald919497e2003-01-19 16:23:59 +00001129 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001130 list(map(Max, Squares(3), Squares(2))),
1131 [0, 1]
Walter Dörwald919497e2003-01-19 16:23:59 +00001132 )
1133 self.assertRaises(TypeError, map)
1134 self.assertRaises(TypeError, map, lambda x: x, 42)
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001135 self.assertEqual(list(map(None, [42])), [(42,)])
Walter Dörwald919497e2003-01-19 16:23:59 +00001136 class BadSeq:
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001137 def __iter__(self):
Walter Dörwald919497e2003-01-19 16:23:59 +00001138 raise ValueError
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001139 yield None
1140 self.assertRaises(ValueError, list, map(lambda x: x, BadSeq()))
Neal Norwitzfcf44352005-11-27 20:37:43 +00001141 def badfunc(x):
1142 raise RuntimeError
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001143 self.assertRaises(RuntimeError, list, map(badfunc, range(5)))
Walter Dörwald919497e2003-01-19 16:23:59 +00001144
1145 def test_max(self):
1146 self.assertEqual(max('123123'), '3')
1147 self.assertEqual(max(1, 2, 3), 3)
1148 self.assertEqual(max((1, 2, 3, 1, 2, 3)), 3)
1149 self.assertEqual(max([1, 2, 3, 1, 2, 3]), 3)
1150
Guido van Rossume2a383d2007-01-15 16:59:06 +00001151 self.assertEqual(max(1, 2, 3.0), 3.0)
1152 self.assertEqual(max(1, 2.0, 3), 3)
1153 self.assertEqual(max(1.0, 2, 3), 3)
Walter Dörwald919497e2003-01-19 16:23:59 +00001154
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001155 for stmt in (
1156 "max(key=int)", # no args
1157 "max(1, key=int)", # single arg not iterable
1158 "max(1, 2, keystone=int)", # wrong keyword
1159 "max(1, 2, key=int, abc=int)", # two many keywords
1160 "max(1, 2, key=1)", # keyfunc is not callable
1161 ):
Tim Peters7f061872004-12-07 21:17:46 +00001162 try:
Georg Brandl7cae87c2006-09-06 06:51:57 +00001163 exec(stmt, globals())
Tim Peters7f061872004-12-07 21:17:46 +00001164 except TypeError:
1165 pass
1166 else:
1167 self.fail(stmt)
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001168
1169 self.assertEqual(max((1,), key=neg), 1) # one elem iterable
1170 self.assertEqual(max((1,2), key=neg), 1) # two elem iterable
1171 self.assertEqual(max(1, 2, key=neg), 1) # two elems
1172
1173 data = [random.randrange(200) for i in range(100)]
1174 keys = dict((elem, random.randrange(50)) for elem in data)
1175 f = keys.__getitem__
1176 self.assertEqual(max(data, key=f),
1177 sorted(reversed(data), key=f)[-1])
1178
Walter Dörwald919497e2003-01-19 16:23:59 +00001179 def test_min(self):
1180 self.assertEqual(min('123123'), '1')
1181 self.assertEqual(min(1, 2, 3), 1)
1182 self.assertEqual(min((1, 2, 3, 1, 2, 3)), 1)
1183 self.assertEqual(min([1, 2, 3, 1, 2, 3]), 1)
1184
Guido van Rossume2a383d2007-01-15 16:59:06 +00001185 self.assertEqual(min(1, 2, 3.0), 1)
1186 self.assertEqual(min(1, 2.0, 3), 1)
1187 self.assertEqual(min(1.0, 2, 3), 1.0)
Walter Dörwald919497e2003-01-19 16:23:59 +00001188
1189 self.assertRaises(TypeError, min)
1190 self.assertRaises(TypeError, min, 42)
1191 self.assertRaises(ValueError, min, ())
1192 class BadSeq:
1193 def __getitem__(self, index):
1194 raise ValueError
1195 self.assertRaises(ValueError, min, BadSeq())
1196 class BadNumber:
1197 def __cmp__(self, other):
1198 raise ValueError
Guido van Rossum47b9ff62006-08-24 00:41:19 +00001199 self.assertRaises(TypeError, min, (42, BadNumber()))
Walter Dörwald919497e2003-01-19 16:23:59 +00001200
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001201 for stmt in (
1202 "min(key=int)", # no args
1203 "min(1, key=int)", # single arg not iterable
1204 "min(1, 2, keystone=int)", # wrong keyword
1205 "min(1, 2, key=int, abc=int)", # two many keywords
1206 "min(1, 2, key=1)", # keyfunc is not callable
1207 ):
Tim Peters7f061872004-12-07 21:17:46 +00001208 try:
Georg Brandl7cae87c2006-09-06 06:51:57 +00001209 exec(stmt, globals())
Tim Peters7f061872004-12-07 21:17:46 +00001210 except TypeError:
1211 pass
1212 else:
1213 self.fail(stmt)
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001214
1215 self.assertEqual(min((1,), key=neg), 1) # one elem iterable
1216 self.assertEqual(min((1,2), key=neg), 2) # two elem iterable
1217 self.assertEqual(min(1, 2, key=neg), 2) # two elems
1218
1219 data = [random.randrange(200) for i in range(100)]
1220 keys = dict((elem, random.randrange(50)) for elem in data)
1221 f = keys.__getitem__
1222 self.assertEqual(min(data, key=f),
1223 sorted(data, key=f)[0])
1224
Georg Brandla18af4e2007-04-21 15:47:16 +00001225 def test_next(self):
1226 it = iter(range(2))
1227 self.assertEqual(next(it), 0)
1228 self.assertEqual(next(it), 1)
1229 self.assertRaises(StopIteration, next, it)
1230 self.assertRaises(StopIteration, next, it)
1231 self.assertEquals(next(it, 42), 42)
1232
1233 class Iter(object):
1234 def __iter__(self):
1235 return self
1236 def __next__(self):
1237 raise StopIteration
1238
1239 it = iter(Iter())
1240 self.assertEquals(next(it, 42), 42)
1241 self.assertRaises(StopIteration, next, it)
1242
1243 def gen():
1244 yield 1
1245 return
1246
1247 it = gen()
1248 self.assertEquals(next(it), 1)
1249 self.assertRaises(StopIteration, next, it)
1250 self.assertEquals(next(it, 42), 42)
1251
Walter Dörwald919497e2003-01-19 16:23:59 +00001252 def test_oct(self):
Guido van Rossumcd16bf62007-06-13 18:07:49 +00001253 self.assertEqual(oct(100), '0o144')
1254 self.assertEqual(oct(100), '0o144')
1255 self.assertEqual(oct(-100), '-0o144')
1256 self.assertEqual(oct(-100), '-0o144')
Walter Dörwald919497e2003-01-19 16:23:59 +00001257 self.assertRaises(TypeError, oct, ())
1258
1259 def write_testfile(self):
Guido van Rossuma88a0332007-02-26 16:59:55 +00001260 # NB the first 4 lines are also used to test input, below
Walter Dörwald919497e2003-01-19 16:23:59 +00001261 fp = open(TESTFN, 'w')
1262 try:
1263 fp.write('1+1\n')
1264 fp.write('1+1\n')
1265 fp.write('The quick brown fox jumps over the lazy dog')
1266 fp.write('.\n')
1267 fp.write('Dear John\n')
1268 fp.write('XXX'*100)
1269 fp.write('YYY'*100)
1270 finally:
1271 fp.close()
1272
1273 def test_open(self):
1274 self.write_testfile()
1275 fp = open(TESTFN, 'r')
1276 try:
1277 self.assertEqual(fp.readline(4), '1+1\n')
1278 self.assertEqual(fp.readline(4), '1+1\n')
1279 self.assertEqual(fp.readline(), 'The quick brown fox jumps over the lazy dog.\n')
1280 self.assertEqual(fp.readline(4), 'Dear')
1281 self.assertEqual(fp.readline(100), ' John\n')
1282 self.assertEqual(fp.read(300), 'XXX'*100)
1283 self.assertEqual(fp.read(1000), 'YYY'*100)
1284 finally:
1285 fp.close()
1286 unlink(TESTFN)
1287
1288 def test_ord(self):
1289 self.assertEqual(ord(' '), 32)
1290 self.assertEqual(ord('A'), 65)
1291 self.assertEqual(ord('a'), 97)
Guido van Rossumf9e91c92007-05-08 21:05:48 +00001292 self.assertEqual(ord('\x80'), 128)
1293 self.assertEqual(ord('\xff'), 255)
1294
1295 self.assertEqual(ord(b' '), 32)
1296 self.assertEqual(ord(b'A'), 65)
1297 self.assertEqual(ord(b'a'), 97)
1298 self.assertEqual(ord(b'\x80'), 128)
1299 self.assertEqual(ord(b'\xff'), 255)
1300
Walter Dörwald1f5947b2007-05-22 16:52:54 +00001301 self.assertEqual(ord(chr(sys.maxunicode)), sys.maxunicode)
Walter Dörwald919497e2003-01-19 16:23:59 +00001302 self.assertRaises(TypeError, ord, 42)
Walter Dörwald919497e2003-01-19 16:23:59 +00001303
Guido van Rossum8ac004e2007-07-15 13:00:05 +00001304 self.assertEqual(ord(chr(0x10FFFF)), 0x10FFFF)
1305 self.assertEqual(ord("\U0000FFFF"), 0x0000FFFF)
1306 self.assertEqual(ord("\U00010000"), 0x00010000)
1307 self.assertEqual(ord("\U00010001"), 0x00010001)
1308 self.assertEqual(ord("\U000FFFFE"), 0x000FFFFE)
1309 self.assertEqual(ord("\U000FFFFF"), 0x000FFFFF)
1310 self.assertEqual(ord("\U00100000"), 0x00100000)
1311 self.assertEqual(ord("\U00100001"), 0x00100001)
1312 self.assertEqual(ord("\U0010FFFE"), 0x0010FFFE)
1313 self.assertEqual(ord("\U0010FFFF"), 0x0010FFFF)
1314
Walter Dörwald919497e2003-01-19 16:23:59 +00001315 def test_pow(self):
1316 self.assertEqual(pow(0,0), 1)
1317 self.assertEqual(pow(0,1), 0)
1318 self.assertEqual(pow(1,0), 1)
1319 self.assertEqual(pow(1,1), 1)
1320
1321 self.assertEqual(pow(2,0), 1)
1322 self.assertEqual(pow(2,10), 1024)
1323 self.assertEqual(pow(2,20), 1024*1024)
1324 self.assertEqual(pow(2,30), 1024*1024*1024)
1325
1326 self.assertEqual(pow(-2,0), 1)
1327 self.assertEqual(pow(-2,1), -2)
1328 self.assertEqual(pow(-2,2), 4)
1329 self.assertEqual(pow(-2,3), -8)
1330
Guido van Rossume2a383d2007-01-15 16:59:06 +00001331 self.assertEqual(pow(0,0), 1)
1332 self.assertEqual(pow(0,1), 0)
1333 self.assertEqual(pow(1,0), 1)
1334 self.assertEqual(pow(1,1), 1)
Walter Dörwald919497e2003-01-19 16:23:59 +00001335
Guido van Rossume2a383d2007-01-15 16:59:06 +00001336 self.assertEqual(pow(2,0), 1)
1337 self.assertEqual(pow(2,10), 1024)
1338 self.assertEqual(pow(2,20), 1024*1024)
1339 self.assertEqual(pow(2,30), 1024*1024*1024)
Walter Dörwald919497e2003-01-19 16:23:59 +00001340
Guido van Rossume2a383d2007-01-15 16:59:06 +00001341 self.assertEqual(pow(-2,0), 1)
1342 self.assertEqual(pow(-2,1), -2)
1343 self.assertEqual(pow(-2,2), 4)
1344 self.assertEqual(pow(-2,3), -8)
Walter Dörwald919497e2003-01-19 16:23:59 +00001345
1346 self.assertAlmostEqual(pow(0.,0), 1.)
1347 self.assertAlmostEqual(pow(0.,1), 0.)
1348 self.assertAlmostEqual(pow(1.,0), 1.)
1349 self.assertAlmostEqual(pow(1.,1), 1.)
1350
1351 self.assertAlmostEqual(pow(2.,0), 1.)
1352 self.assertAlmostEqual(pow(2.,10), 1024.)
1353 self.assertAlmostEqual(pow(2.,20), 1024.*1024.)
1354 self.assertAlmostEqual(pow(2.,30), 1024.*1024.*1024.)
1355
1356 self.assertAlmostEqual(pow(-2.,0), 1.)
1357 self.assertAlmostEqual(pow(-2.,1), -2.)
1358 self.assertAlmostEqual(pow(-2.,2), 4.)
1359 self.assertAlmostEqual(pow(-2.,3), -8.)
1360
Guido van Rossume2a383d2007-01-15 16:59:06 +00001361 for x in 2, 2, 2.0:
1362 for y in 10, 10, 10.0:
1363 for z in 1000, 1000, 1000.0:
Walter Dörwald919497e2003-01-19 16:23:59 +00001364 if isinstance(x, float) or \
1365 isinstance(y, float) or \
1366 isinstance(z, float):
1367 self.assertRaises(TypeError, pow, x, y, z)
1368 else:
1369 self.assertAlmostEqual(pow(x, y, z), 24.0)
1370
Jeffrey Yasskin3404b3c2007-09-07 15:15:49 +00001371 self.assertAlmostEqual(pow(-1, 0.5), 1j)
1372 self.assertAlmostEqual(pow(-1, 1/3), 0.5 + 0.8660254037844386j)
1373
Walter Dörwald919497e2003-01-19 16:23:59 +00001374 self.assertRaises(TypeError, pow, -1, -2, 3)
1375 self.assertRaises(ValueError, pow, 1, 2, 0)
Guido van Rossume2a383d2007-01-15 16:59:06 +00001376 self.assertRaises(TypeError, pow, -1, -2, 3)
1377 self.assertRaises(ValueError, pow, 1, 2, 0)
Walter Dörwald919497e2003-01-19 16:23:59 +00001378
1379 self.assertRaises(TypeError, pow)
1380
1381 def test_range(self):
Guido van Rossum805365e2007-05-07 22:24:25 +00001382 self.assertEqual(list(range(3)), [0, 1, 2])
1383 self.assertEqual(list(range(1, 5)), [1, 2, 3, 4])
1384 self.assertEqual(list(range(0)), [])
1385 self.assertEqual(list(range(-3)), [])
1386 self.assertEqual(list(range(1, 10, 3)), [1, 4, 7])
1387 #self.assertEqual(list(range(5, -5, -3)), [5, 2, -1, -4])
Walter Dörwald919497e2003-01-19 16:23:59 +00001388
Guido van Rossum805365e2007-05-07 22:24:25 +00001389 """ XXX(nnorwitz):
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001390 # Now test range() with longs
Guido van Rossum805365e2007-05-07 22:24:25 +00001391 self.assertEqual(list(range(-2**100)), [])
1392 self.assertEqual(list(range(0, -2**100)), [])
1393 self.assertEqual(list(range(0, 2**100, -1)), [])
1394 self.assertEqual(list(range(0, 2**100, -1)), [])
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001395
Christian Heimesa37d4c62007-12-04 23:02:19 +00001396 a = int(10 * sys.maxsize)
1397 b = int(100 * sys.maxsize)
1398 c = int(50 * sys.maxsize)
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001399
Guido van Rossum805365e2007-05-07 22:24:25 +00001400 self.assertEqual(list(range(a, a+2)), [a, a+1])
1401 self.assertEqual(list(range(a+2, a, -1)), [a+2, a+1])
1402 self.assertEqual(list(range(a+4, a, -2)), [a+4, a+2])
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001403
Guido van Rossum805365e2007-05-07 22:24:25 +00001404 seq = list(range(a, b, c))
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001405 self.assert_(a in seq)
1406 self.assert_(b not in seq)
1407 self.assertEqual(len(seq), 2)
1408
Guido van Rossum805365e2007-05-07 22:24:25 +00001409 seq = list(range(b, a, -c))
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001410 self.assert_(b in seq)
1411 self.assert_(a not in seq)
1412 self.assertEqual(len(seq), 2)
1413
Guido van Rossum805365e2007-05-07 22:24:25 +00001414 seq = list(range(-a, -b, -c))
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001415 self.assert_(-a in seq)
1416 self.assert_(-b not in seq)
1417 self.assertEqual(len(seq), 2)
1418
Walter Dörwald919497e2003-01-19 16:23:59 +00001419 self.assertRaises(TypeError, range)
1420 self.assertRaises(TypeError, range, 1, 2, 3, 4)
1421 self.assertRaises(ValueError, range, 1, 2, 0)
Guido van Rossume2a383d2007-01-15 16:59:06 +00001422 self.assertRaises(ValueError, range, a, a + 1, int(0))
Neal Norwitzfcf44352005-11-27 20:37:43 +00001423
1424 class badzero(int):
Guido van Rossum47b9ff62006-08-24 00:41:19 +00001425 def __eq__(self, other):
Neal Norwitzfcf44352005-11-27 20:37:43 +00001426 raise RuntimeError
Guido van Rossum47b9ff62006-08-24 00:41:19 +00001427 __ne__ = __lt__ = __gt__ = __le__ = __ge__ = __eq__
1428
1429 # XXX This won't (but should!) raise RuntimeError if a is an int...
Neal Norwitzfcf44352005-11-27 20:37:43 +00001430 self.assertRaises(RuntimeError, range, a, a + 1, badzero(1))
Guido van Rossum805365e2007-05-07 22:24:25 +00001431 """
Walter Dörwald919497e2003-01-19 16:23:59 +00001432
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001433 # Reject floats when it would require PyLongs to represent.
1434 # (smaller floats still accepted, but deprecated)
Tim Peters299b3df2003-04-15 14:40:03 +00001435 self.assertRaises(TypeError, range, 1e100, 1e101, 1e101)
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001436
Walter Dörwald357981e2003-04-15 18:59:28 +00001437 self.assertRaises(TypeError, range, 0, "spam")
1438 self.assertRaises(TypeError, range, 0, 42, "spam")
1439
Christian Heimesa37d4c62007-12-04 23:02:19 +00001440 #NEAL self.assertRaises(OverflowError, range, -sys.maxsize, sys.maxsize)
1441 #NEAL self.assertRaises(OverflowError, range, 0, 2*sys.maxsize)
Guido van Rossum805365e2007-05-07 22:24:25 +00001442
Christian Heimesa37d4c62007-12-04 23:02:19 +00001443 self.assertRaises(OverflowError, len, range(0, sys.maxsize**10))
Walter Dörwald357981e2003-04-15 18:59:28 +00001444
Guido van Rossuma88a0332007-02-26 16:59:55 +00001445 def test_input(self):
1446 self.write_testfile()
1447 fp = open(TESTFN, 'r')
1448 savestdin = sys.stdin
1449 savestdout = sys.stdout # Eats the echo
1450 try:
1451 sys.stdin = fp
1452 sys.stdout = BitBucket()
1453 self.assertEqual(input(), "1+1")
1454 self.assertEqual(input('testing\n'), "1+1")
1455 self.assertEqual(input(), 'The quick brown fox jumps over the lazy dog.')
1456 self.assertEqual(input('testing\n'), 'Dear John')
1457
1458 # SF 1535165: don't segfault on closed stdin
1459 # sys.stdout must be a regular file for triggering
1460 sys.stdout = savestdout
1461 sys.stdin.close()
1462 self.assertRaises(ValueError, input)
1463
1464 sys.stdout = BitBucket()
Guido van Rossum34d19282007-08-09 01:03:29 +00001465 sys.stdin = io.StringIO("NULL\0")
Guido van Rossuma88a0332007-02-26 16:59:55 +00001466 self.assertRaises(TypeError, input, 42, 42)
Guido van Rossum34d19282007-08-09 01:03:29 +00001467 sys.stdin = io.StringIO(" 'whitespace'")
Guido van Rossuma88a0332007-02-26 16:59:55 +00001468 self.assertEqual(input(), " 'whitespace'")
Guido van Rossum34d19282007-08-09 01:03:29 +00001469 sys.stdin = io.StringIO()
Guido van Rossuma88a0332007-02-26 16:59:55 +00001470 self.assertRaises(EOFError, input)
1471
1472 del sys.stdout
1473 self.assertRaises(RuntimeError, input, 'prompt')
1474 del sys.stdin
1475 self.assertRaises(RuntimeError, input, 'prompt')
1476 finally:
1477 sys.stdin = savestdin
1478 sys.stdout = savestdout
1479 fp.close()
1480 unlink(TESTFN)
1481
Walter Dörwald919497e2003-01-19 16:23:59 +00001482 def test_repr(self):
1483 self.assertEqual(repr(''), '\'\'')
1484 self.assertEqual(repr(0), '0')
Guido van Rossume2a383d2007-01-15 16:59:06 +00001485 self.assertEqual(repr(0), '0')
Walter Dörwald919497e2003-01-19 16:23:59 +00001486 self.assertEqual(repr(()), '()')
1487 self.assertEqual(repr([]), '[]')
1488 self.assertEqual(repr({}), '{}')
1489 a = []
1490 a.append(a)
1491 self.assertEqual(repr(a), '[[...]]')
1492 a = {}
1493 a[0] = a
1494 self.assertEqual(repr(a), '{0: {...}}')
1495
1496 def test_round(self):
1497 self.assertEqual(round(0.0), 0.0)
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001498 self.assertEqual(type(round(0.0)), int)
Walter Dörwald919497e2003-01-19 16:23:59 +00001499 self.assertEqual(round(1.0), 1.0)
1500 self.assertEqual(round(10.0), 10.0)
1501 self.assertEqual(round(1000000000.0), 1000000000.0)
1502 self.assertEqual(round(1e20), 1e20)
1503
1504 self.assertEqual(round(-1.0), -1.0)
1505 self.assertEqual(round(-10.0), -10.0)
1506 self.assertEqual(round(-1000000000.0), -1000000000.0)
1507 self.assertEqual(round(-1e20), -1e20)
1508
1509 self.assertEqual(round(0.1), 0.0)
1510 self.assertEqual(round(1.1), 1.0)
1511 self.assertEqual(round(10.1), 10.0)
1512 self.assertEqual(round(1000000000.1), 1000000000.0)
1513
1514 self.assertEqual(round(-1.1), -1.0)
1515 self.assertEqual(round(-10.1), -10.0)
1516 self.assertEqual(round(-1000000000.1), -1000000000.0)
1517
1518 self.assertEqual(round(0.9), 1.0)
1519 self.assertEqual(round(9.9), 10.0)
1520 self.assertEqual(round(999999999.9), 1000000000.0)
1521
1522 self.assertEqual(round(-0.9), -1.0)
1523 self.assertEqual(round(-9.9), -10.0)
1524 self.assertEqual(round(-999999999.9), -1000000000.0)
1525
1526 self.assertEqual(round(-8.0, -1), -10.0)
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001527 self.assertEqual(type(round(-8.0, -1)), float)
1528
1529 self.assertEqual(type(round(-8.0, 0)), float)
1530 self.assertEqual(type(round(-8.0, 1)), float)
1531
1532 # Check even / odd rounding behaviour
1533 self.assertEqual(round(5.5), 6)
1534 self.assertEqual(round(6.5), 6)
1535 self.assertEqual(round(-5.5), -6)
1536 self.assertEqual(round(-6.5), -6)
1537
1538 # Check behavior on ints
1539 self.assertEqual(round(0), 0)
1540 self.assertEqual(round(8), 8)
1541 self.assertEqual(round(-8), -8)
1542 self.assertEqual(type(round(0)), int)
1543 self.assertEqual(type(round(-8, -1)), float)
1544 self.assertEqual(type(round(-8, 0)), float)
1545 self.assertEqual(type(round(-8, 1)), float)
Walter Dörwald919497e2003-01-19 16:23:59 +00001546
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001547 # test new kwargs
1548 self.assertEqual(round(number=-8.0, ndigits=-1), -10.0)
1549
Walter Dörwald919497e2003-01-19 16:23:59 +00001550 self.assertRaises(TypeError, round)
1551
Alex Martelliae211f92007-08-22 23:21:33 +00001552 # test generic rounding delegation for reals
1553 class TestRound:
1554 def __round__(self):
1555 return 23
1556
1557 class TestNoRound:
1558 pass
1559
1560 self.assertEqual(round(TestRound()), 23)
1561
1562 self.assertRaises(TypeError, round, 1, 2, 3)
1563 self.assertRaises(TypeError, round, TestNoRound())
1564
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001565 t = TestNoRound()
1566 t.__round__ = lambda *args: args
1567 self.assertRaises(TypeError, round, t)
1568 self.assertRaises(TypeError, round, t, 0)
1569
Walter Dörwald919497e2003-01-19 16:23:59 +00001570 def test_setattr(self):
Tim Petersf2715e02003-02-19 02:35:07 +00001571 setattr(sys, 'spam', 1)
1572 self.assertEqual(sys.spam, 1)
1573 self.assertRaises(TypeError, setattr, sys, 1, 'spam')
1574 self.assertRaises(TypeError, setattr)
Walter Dörwald919497e2003-01-19 16:23:59 +00001575
1576 def test_str(self):
1577 self.assertEqual(str(''), '')
1578 self.assertEqual(str(0), '0')
Guido van Rossume2a383d2007-01-15 16:59:06 +00001579 self.assertEqual(str(0), '0')
Walter Dörwald919497e2003-01-19 16:23:59 +00001580 self.assertEqual(str(()), '()')
1581 self.assertEqual(str([]), '[]')
1582 self.assertEqual(str({}), '{}')
1583 a = []
1584 a.append(a)
1585 self.assertEqual(str(a), '[[...]]')
1586 a = {}
1587 a[0] = a
1588 self.assertEqual(str(a), '{0: {...}}')
1589
Alex Martellia70b1912003-04-22 08:12:33 +00001590 def test_sum(self):
1591 self.assertEqual(sum([]), 0)
Guido van Rossum805365e2007-05-07 22:24:25 +00001592 self.assertEqual(sum(list(range(2,8))), 27)
1593 self.assertEqual(sum(iter(list(range(2,8)))), 27)
Alex Martellia70b1912003-04-22 08:12:33 +00001594 self.assertEqual(sum(Squares(10)), 285)
1595 self.assertEqual(sum(iter(Squares(10))), 285)
1596 self.assertEqual(sum([[1], [2], [3]], []), [1, 2, 3])
1597
1598 self.assertRaises(TypeError, sum)
1599 self.assertRaises(TypeError, sum, 42)
1600 self.assertRaises(TypeError, sum, ['a', 'b', 'c'])
1601 self.assertRaises(TypeError, sum, ['a', 'b', 'c'], '')
1602 self.assertRaises(TypeError, sum, [[1], [2], [3]])
1603 self.assertRaises(TypeError, sum, [{2:3}])
1604 self.assertRaises(TypeError, sum, [{2:3}]*2, {2:3})
1605
1606 class BadSeq:
1607 def __getitem__(self, index):
1608 raise ValueError
1609 self.assertRaises(ValueError, sum, BadSeq())
1610
Alex Martelli86d8b342007-08-22 22:39:42 +00001611 def test_trunc(self):
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001612
1613 self.assertEqual(trunc(1), 1)
1614 self.assertEqual(trunc(-1), -1)
1615 self.assertEqual(type(trunc(1)), int)
1616 self.assertEqual(type(trunc(1.5)), int)
1617 self.assertEqual(trunc(1.5), 1)
1618 self.assertEqual(trunc(-1.5), -1)
1619 self.assertEqual(trunc(1.999999), 1)
1620 self.assertEqual(trunc(-1.999999), -1)
1621 self.assertEqual(trunc(-0.999999), -0)
1622 self.assertEqual(trunc(-100.999), -100)
1623
Alex Martelli86d8b342007-08-22 22:39:42 +00001624 class TestTrunc:
1625 def __trunc__(self):
1626 return 23
1627
1628 class TestNoTrunc:
1629 pass
1630
1631 self.assertEqual(trunc(TestTrunc()), 23)
1632
1633 self.assertRaises(TypeError, trunc)
1634 self.assertRaises(TypeError, trunc, 1, 2)
1635 self.assertRaises(TypeError, trunc, TestNoTrunc())
1636
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001637 t = TestNoTrunc()
1638 t.__trunc__ = lambda *args: args
1639 self.assertRaises(TypeError, trunc, t)
1640 self.assertRaises(TypeError, trunc, t, 0)
1641
Walter Dörwald919497e2003-01-19 16:23:59 +00001642 def test_tuple(self):
1643 self.assertEqual(tuple(()), ())
1644 t0_3 = (0, 1, 2, 3)
1645 t0_3_bis = tuple(t0_3)
1646 self.assert_(t0_3 is t0_3_bis)
1647 self.assertEqual(tuple([]), ())
1648 self.assertEqual(tuple([0, 1, 2, 3]), (0, 1, 2, 3))
1649 self.assertEqual(tuple(''), ())
1650 self.assertEqual(tuple('spam'), ('s', 'p', 'a', 'm'))
1651
1652 def test_type(self):
1653 self.assertEqual(type(''), type('123'))
1654 self.assertNotEqual(type(''), type(()))
1655
Guido van Rossumfee7b932005-01-16 00:21:28 +00001656 # We don't want self in vars(), so these are static methods
1657
1658 @staticmethod
Walter Dörwald919497e2003-01-19 16:23:59 +00001659 def get_vars_f0():
1660 return vars()
Walter Dörwald919497e2003-01-19 16:23:59 +00001661
Guido van Rossumfee7b932005-01-16 00:21:28 +00001662 @staticmethod
Walter Dörwald919497e2003-01-19 16:23:59 +00001663 def get_vars_f2():
1664 BuiltinTest.get_vars_f0()
1665 a = 1
1666 b = 2
1667 return vars()
Walter Dörwald919497e2003-01-19 16:23:59 +00001668
1669 def test_vars(self):
Raymond Hettingera690a992003-11-16 16:17:49 +00001670 self.assertEqual(set(vars()), set(dir()))
Walter Dörwald919497e2003-01-19 16:23:59 +00001671 import sys
Raymond Hettingera690a992003-11-16 16:17:49 +00001672 self.assertEqual(set(vars(sys)), set(dir(sys)))
Walter Dörwald919497e2003-01-19 16:23:59 +00001673 self.assertEqual(self.get_vars_f0(), {})
1674 self.assertEqual(self.get_vars_f2(), {'a': 1, 'b': 2})
1675 self.assertRaises(TypeError, vars, 42, 42)
1676 self.assertRaises(TypeError, vars, 42)
1677
1678 def test_zip(self):
1679 a = (1, 2, 3)
1680 b = (4, 5, 6)
1681 t = [(1, 4), (2, 5), (3, 6)]
Guido van Rossum801f0d72006-08-24 19:48:10 +00001682 self.assertEqual(list(zip(a, b)), t)
Walter Dörwald919497e2003-01-19 16:23:59 +00001683 b = [4, 5, 6]
Guido van Rossum801f0d72006-08-24 19:48:10 +00001684 self.assertEqual(list(zip(a, b)), t)
Walter Dörwald919497e2003-01-19 16:23:59 +00001685 b = (4, 5, 6, 7)
Guido van Rossum801f0d72006-08-24 19:48:10 +00001686 self.assertEqual(list(zip(a, b)), t)
Walter Dörwald919497e2003-01-19 16:23:59 +00001687 class I:
1688 def __getitem__(self, i):
1689 if i < 0 or i > 2: raise IndexError
1690 return i + 4
Guido van Rossum801f0d72006-08-24 19:48:10 +00001691 self.assertEqual(list(zip(a, I())), t)
1692 self.assertEqual(list(zip()), [])
1693 self.assertEqual(list(zip(*[])), [])
Walter Dörwald919497e2003-01-19 16:23:59 +00001694 self.assertRaises(TypeError, zip, None)
1695 class G:
1696 pass
1697 self.assertRaises(TypeError, zip, a, G())
1698
1699 # Make sure zip doesn't try to allocate a billion elements for the
1700 # result list when one of its arguments doesn't say how long it is.
1701 # A MemoryError is the most likely failure mode.
1702 class SequenceWithoutALength:
1703 def __getitem__(self, i):
1704 if i == 5:
1705 raise IndexError
1706 else:
1707 return i
1708 self.assertEqual(
Guido van Rossum805365e2007-05-07 22:24:25 +00001709 list(zip(SequenceWithoutALength(), range(2**30))),
Walter Dörwald919497e2003-01-19 16:23:59 +00001710 list(enumerate(range(5)))
1711 )
1712
1713 class BadSeq:
1714 def __getitem__(self, i):
1715 if i == 5:
1716 raise ValueError
1717 else:
1718 return i
Guido van Rossum801f0d72006-08-24 19:48:10 +00001719 self.assertRaises(ValueError, list, zip(BadSeq(), BadSeq()))
Walter Dörwald919497e2003-01-19 16:23:59 +00001720
Raymond Hettinger64958a12003-12-17 20:43:33 +00001721class TestSorted(unittest.TestCase):
1722
1723 def test_basic(self):
Guido van Rossum805365e2007-05-07 22:24:25 +00001724 data = list(range(100))
Raymond Hettinger64958a12003-12-17 20:43:33 +00001725 copy = data[:]
1726 random.shuffle(copy)
1727 self.assertEqual(data, sorted(copy))
1728 self.assertNotEqual(data, copy)
1729
1730 data.reverse()
1731 random.shuffle(copy)
Guido van Rossum47b9ff62006-08-24 00:41:19 +00001732 self.assertEqual(data, sorted(copy, cmp=lambda x, y: (x < y) - (x > y)))
Raymond Hettinger64958a12003-12-17 20:43:33 +00001733 self.assertNotEqual(data, copy)
1734 random.shuffle(copy)
1735 self.assertEqual(data, sorted(copy, key=lambda x: -x))
1736 self.assertNotEqual(data, copy)
1737 random.shuffle(copy)
1738 self.assertEqual(data, sorted(copy, reverse=1))
1739 self.assertNotEqual(data, copy)
1740
1741 def test_inputtypes(self):
1742 s = 'abracadabra'
Walter Dörwald1f5947b2007-05-22 16:52:54 +00001743 types = [list, tuple, str]
Walter Dörwald4e41a4b2005-08-03 17:09:04 +00001744 for T in types:
Raymond Hettinger64958a12003-12-17 20:43:33 +00001745 self.assertEqual(sorted(s), sorted(T(s)))
1746
Walter Dörwald1f5947b2007-05-22 16:52:54 +00001747 s = ''.join(set(s)) # unique letters only
1748 types = [str, set, frozenset, list, tuple, dict.fromkeys]
Walter Dörwald4e41a4b2005-08-03 17:09:04 +00001749 for T in types:
Raymond Hettinger64958a12003-12-17 20:43:33 +00001750 self.assertEqual(sorted(s), sorted(T(s)))
1751
1752 def test_baddecorator(self):
1753 data = 'The quick Brown fox Jumped over The lazy Dog'.split()
1754 self.assertRaises(TypeError, sorted, data, None, lambda x,y: 0)
1755
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001756def test_main(verbose=None):
1757 test_classes = (BuiltinTest, TestSorted)
1758
1759 run_unittest(*test_classes)
1760
1761 # verify reference counting
1762 if verbose and hasattr(sys, "gettotalrefcount"):
1763 import gc
1764 counts = [None] * 5
Guido van Rossum805365e2007-05-07 22:24:25 +00001765 for i in range(len(counts)):
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001766 run_unittest(*test_classes)
1767 gc.collect()
1768 counts[i] = sys.gettotalrefcount()
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001769 print(counts)
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001770
Walter Dörwald919497e2003-01-19 16:23:59 +00001771
1772if __name__ == "__main__":
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001773 test_main(verbose=True)