blob: 7f1b8481108b545c7581a3a61bd52739e862a6f4 [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
Raymond Hettinger214b1c32004-07-02 06:41:07 +00008import sys, warnings, cStringIO, random, UserDict
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
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +000014# count the number of test runs.
15# used to skip running test_execfile() multiple times
16numruns = 0
17
Walter Dörwald919497e2003-01-19 16:23:59 +000018class Squares:
Guido van Rossum3bead091992-01-27 17:00:37 +000019
Walter Dörwald919497e2003-01-19 16:23:59 +000020 def __init__(self, max):
21 self.max = max
22 self.sofar = []
23
24 def __len__(self): return len(self.sofar)
25
26 def __getitem__(self, i):
27 if not 0 <= i < self.max: raise IndexError
28 n = len(self.sofar)
29 while n <= i:
30 self.sofar.append(n*n)
31 n += 1
32 return self.sofar[i]
33
34class StrSquares:
35
36 def __init__(self, max):
37 self.max = max
38 self.sofar = []
39
40 def __len__(self):
41 return len(self.sofar)
42
43 def __getitem__(self, i):
44 if not 0 <= i < self.max:
45 raise IndexError
46 n = len(self.sofar)
47 while n <= i:
48 self.sofar.append(str(n*n))
49 n += 1
50 return self.sofar[i]
51
52class BitBucket:
53 def write(self, line):
54 pass
55
56L = [
57 ('0', 0),
58 ('1', 1),
59 ('9', 9),
60 ('10', 10),
61 ('99', 99),
62 ('100', 100),
63 ('314', 314),
64 (' 314', 314),
65 ('314 ', 314),
66 (' \t\t 314 \t\t ', 314),
Walter Dörwald70a6b492004-02-12 17:35:32 +000067 (repr(sys.maxint), sys.maxint),
Walter Dörwald919497e2003-01-19 16:23:59 +000068 (' 1x', ValueError),
69 (' 1 ', 1),
70 (' 1\02 ', ValueError),
71 ('', ValueError),
72 (' ', ValueError),
Walter Dörwald1f5947b2007-05-22 16:52:54 +000073 (' \t\t ', ValueError),
Guido van Rossumef87d6e2007-05-02 19:09:54 +000074 (str(b'\u0663\u0661\u0664 ','raw-unicode-escape'), 314),
Guido van Rossum84fc66d2007-05-03 17:18:26 +000075 (chr(0x200), ValueError),
Walter Dörwald919497e2003-01-19 16:23:59 +000076]
77
Raymond Hettinger96229b12005-03-11 06:49:40 +000078class TestFailingBool:
Jack Diederich4dafcc42006-11-28 19:15:13 +000079 def __bool__(self):
Raymond Hettinger96229b12005-03-11 06:49:40 +000080 raise RuntimeError
81
82class TestFailingIter:
83 def __iter__(self):
84 raise RuntimeError
85
Walter Dörwald919497e2003-01-19 16:23:59 +000086class BuiltinTest(unittest.TestCase):
87
88 def test_import(self):
89 __import__('sys')
90 __import__('time')
91 __import__('string')
Guido van Rossumd8faa362007-04-27 19:54:29 +000092 __import__(name='sys')
93 __import__(name='time', level=0)
Walter Dörwald919497e2003-01-19 16:23:59 +000094 self.assertRaises(ImportError, __import__, 'spamspam')
95 self.assertRaises(TypeError, __import__, 1, 2, 3, 4)
Thomas Wouters49fd7fa2006-04-21 10:40:58 +000096 self.assertRaises(ValueError, __import__, '')
Guido van Rossumd8faa362007-04-27 19:54:29 +000097 self.assertRaises(TypeError, __import__, 'sys', name='sys')
Walter Dörwald919497e2003-01-19 16:23:59 +000098
99 def test_abs(self):
100 # int
101 self.assertEqual(abs(0), 0)
102 self.assertEqual(abs(1234), 1234)
103 self.assertEqual(abs(-1234), 1234)
Thomas Wouters89f507f2006-12-13 04:49:30 +0000104 self.assertTrue(abs(-sys.maxint-1) > 0)
Walter Dörwald919497e2003-01-19 16:23:59 +0000105 # float
106 self.assertEqual(abs(0.0), 0.0)
107 self.assertEqual(abs(3.14), 3.14)
108 self.assertEqual(abs(-3.14), 3.14)
109 # long
Guido van Rossume2a383d2007-01-15 16:59:06 +0000110 self.assertEqual(abs(0), 0)
111 self.assertEqual(abs(1234), 1234)
112 self.assertEqual(abs(-1234), 1234)
Walter Dörwald919497e2003-01-19 16:23:59 +0000113 # str
114 self.assertRaises(TypeError, abs, 'a')
115
Raymond Hettinger96229b12005-03-11 06:49:40 +0000116 def test_all(self):
117 self.assertEqual(all([2, 4, 6]), True)
118 self.assertEqual(all([2, None, 6]), False)
119 self.assertRaises(RuntimeError, all, [2, TestFailingBool(), 6])
120 self.assertRaises(RuntimeError, all, TestFailingIter())
121 self.assertRaises(TypeError, all, 10) # Non-iterable
122 self.assertRaises(TypeError, all) # No args
123 self.assertRaises(TypeError, all, [2, 4, 6], []) # Too many args
124 self.assertEqual(all([]), True) # Empty iterator
125 S = [50, 60]
126 self.assertEqual(all(x > 42 for x in S), True)
127 S = [50, 40, 60]
128 self.assertEqual(all(x > 42 for x in S), False)
129
130 def test_any(self):
131 self.assertEqual(any([None, None, None]), False)
132 self.assertEqual(any([None, 4, None]), True)
133 self.assertRaises(RuntimeError, any, [None, TestFailingBool(), 6])
134 self.assertRaises(RuntimeError, all, TestFailingIter())
135 self.assertRaises(TypeError, any, 10) # Non-iterable
136 self.assertRaises(TypeError, any) # No args
137 self.assertRaises(TypeError, any, [2, 4, 6], []) # Too many args
138 self.assertEqual(any([]), False) # Empty iterator
139 S = [40, 60, 30]
140 self.assertEqual(any(x > 42 for x in S), True)
141 S = [10, 20, 30]
142 self.assertEqual(any(x > 42 for x in S), False)
143
Thomas Wouters89f507f2006-12-13 04:49:30 +0000144 def test_neg(self):
145 x = -sys.maxint-1
146 self.assert_(isinstance(x, int))
147 self.assertEqual(-x, sys.maxint+1)
148
Walter Dörwald919497e2003-01-19 16:23:59 +0000149 def test_callable(self):
150 self.assert_(callable(len))
151 def f(): pass
152 self.assert_(callable(f))
153 class C:
154 def meth(self): pass
155 self.assert_(callable(C))
156 x = C()
157 self.assert_(callable(x.meth))
158 self.assert_(not callable(x))
159 class D(C):
160 def __call__(self): pass
161 y = D()
162 self.assert_(callable(y))
163 y()
164
165 def test_chr(self):
166 self.assertEqual(chr(32), ' ')
167 self.assertEqual(chr(65), 'A')
168 self.assertEqual(chr(97), 'a')
169 self.assertEqual(chr(0xff), '\xff')
Guido van Rossum572dbf82007-04-27 23:53:51 +0000170 self.assertRaises(ValueError, chr, 1<<24)
Walter Dörwald1f5947b2007-05-22 16:52:54 +0000171 self.assertEqual(
172 chr(sys.maxunicode),
173 str(('\\U%08x' % (sys.maxunicode)).encode("ascii"), 'unicode-escape')
174 )
175 self.assertRaises(ValueError, chr, sys.maxunicode+1)
Walter Dörwald919497e2003-01-19 16:23:59 +0000176 self.assertRaises(TypeError, chr)
177
Guido van Rossum47b9ff62006-08-24 00:41:19 +0000178 def XXX_test_cmp(self):
179 # cmp() is no longer supported
Walter Dörwald919497e2003-01-19 16:23:59 +0000180 self.assertEqual(cmp(-1, 1), -1)
181 self.assertEqual(cmp(1, -1), 1)
182 self.assertEqual(cmp(1, 1), 0)
Armin Rigo2b3eb402003-10-28 12:05:48 +0000183 # verify that circular objects are not handled
Walter Dörwald919497e2003-01-19 16:23:59 +0000184 a = []; a.append(a)
185 b = []; b.append(b)
186 from UserList import UserList
187 c = UserList(); c.append(c)
Armin Rigo2b3eb402003-10-28 12:05:48 +0000188 self.assertRaises(RuntimeError, cmp, a, b)
189 self.assertRaises(RuntimeError, cmp, b, c)
190 self.assertRaises(RuntimeError, cmp, c, a)
191 self.assertRaises(RuntimeError, cmp, a, c)
192 # okay, now break the cycles
Walter Dörwald919497e2003-01-19 16:23:59 +0000193 a.pop(); b.pop(); c.pop()
194 self.assertRaises(TypeError, cmp)
195
Walter Dörwald919497e2003-01-19 16:23:59 +0000196 def test_compile(self):
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000197 compile('print(1)\n', '', 'exec')
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000198## bom = b'\xef\xbb\xbf'
199## compile(bom + b'print(1)\n', '', 'exec')
Guido van Rossumd8faa362007-04-27 19:54:29 +0000200 compile(source='pass', filename='?', mode='exec')
201 compile(dont_inherit=0, filename='tmp', source='0', mode='eval')
202 compile('pass', '?', dont_inherit=1, mode='exec')
Walter Dörwald919497e2003-01-19 16:23:59 +0000203 self.assertRaises(TypeError, compile)
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000204 self.assertRaises(ValueError, compile, 'print(42)\n', '<string>', 'badmode')
205 self.assertRaises(ValueError, compile, 'print(42)\n', '<string>', 'single', 0xff)
Neal Norwitzfcf44352005-11-27 20:37:43 +0000206 self.assertRaises(TypeError, compile, chr(0), 'f', 'exec')
Guido van Rossumd8faa362007-04-27 19:54:29 +0000207 self.assertRaises(TypeError, compile, 'pass', '?', 'exec',
208 mode='eval', source='0', filename='tmp')
Walter Dörwald1f5947b2007-05-22 16:52:54 +0000209 compile('print("\xe5")\n', '', 'exec')
210 self.assertRaises(TypeError, compile, chr(0), 'f', 'exec')
211 self.assertRaises(ValueError, compile, str('a = 1'), 'f', 'bad')
Guido van Rossumd8faa362007-04-27 19:54:29 +0000212
Walter Dörwald919497e2003-01-19 16:23:59 +0000213 def test_delattr(self):
214 import sys
215 sys.spam = 1
216 delattr(sys, 'spam')
217 self.assertRaises(TypeError, delattr)
218
219 def test_dir(self):
Georg Brandle32b4222007-03-10 22:13:27 +0000220 # dir(wrong number of arguments)
Walter Dörwald919497e2003-01-19 16:23:59 +0000221 self.assertRaises(TypeError, dir, 42, 42)
222
Georg Brandle32b4222007-03-10 22:13:27 +0000223 # dir() - local scope
224 local_var = 1
225 self.assert_('local_var' in dir())
226
227 # dir(module)
228 import sys
229 self.assert_('exit' in dir(sys))
230
231 # dir(module_with_invalid__dict__)
232 import types
233 class Foo(types.ModuleType):
234 __dict__ = 8
235 f = Foo("foo")
236 self.assertRaises(TypeError, dir, f)
237
238 # dir(type)
239 self.assert_("strip" in dir(str))
240 self.assert_("__mro__" not in dir(str))
241
242 # dir(obj)
243 class Foo(object):
244 def __init__(self):
245 self.x = 7
246 self.y = 8
247 self.z = 9
248 f = Foo()
249 self.assert_("y" in dir(f))
250
251 # dir(obj_no__dict__)
252 class Foo(object):
253 __slots__ = []
254 f = Foo()
255 self.assert_("__repr__" in dir(f))
256
257 # dir(obj_no__class__with__dict__)
258 # (an ugly trick to cause getattr(f, "__class__") to fail)
259 class Foo(object):
260 __slots__ = ["__class__", "__dict__"]
261 def __init__(self):
262 self.bar = "wow"
263 f = Foo()
264 self.assert_("__repr__" not in dir(f))
265 self.assert_("bar" in dir(f))
266
267 # dir(obj_using __dir__)
268 class Foo(object):
269 def __dir__(self):
270 return ["kan", "ga", "roo"]
271 f = Foo()
272 self.assert_(dir(f) == ["ga", "kan", "roo"])
273
274 # dir(obj__dir__not_list)
275 class Foo(object):
276 def __dir__(self):
277 return 7
278 f = Foo()
279 self.assertRaises(TypeError, dir, f)
280
Walter Dörwald919497e2003-01-19 16:23:59 +0000281 def test_divmod(self):
282 self.assertEqual(divmod(12, 7), (1, 5))
283 self.assertEqual(divmod(-12, 7), (-2, 2))
284 self.assertEqual(divmod(12, -7), (-2, -2))
285 self.assertEqual(divmod(-12, -7), (1, -5))
286
Guido van Rossume2a383d2007-01-15 16:59:06 +0000287 self.assertEqual(divmod(12, 7), (1, 5))
288 self.assertEqual(divmod(-12, 7), (-2, 2))
289 self.assertEqual(divmod(12, -7), (-2, -2))
290 self.assertEqual(divmod(-12, -7), (1, -5))
Walter Dörwald919497e2003-01-19 16:23:59 +0000291
Guido van Rossume2a383d2007-01-15 16:59:06 +0000292 self.assertEqual(divmod(12, 7), (1, 5))
293 self.assertEqual(divmod(-12, 7), (-2, 2))
294 self.assertEqual(divmod(12, -7), (-2, -2))
295 self.assertEqual(divmod(-12, -7), (1, -5))
Walter Dörwald919497e2003-01-19 16:23:59 +0000296
Raymond Hettinger5ea7e312004-09-30 07:47:20 +0000297 self.assertEqual(divmod(-sys.maxint-1, -1),
298 (sys.maxint+1, 0))
299
Walter Dörwald919497e2003-01-19 16:23:59 +0000300 self.assert_(not fcmp(divmod(3.25, 1.0), (3.0, 0.25)))
301 self.assert_(not fcmp(divmod(-3.25, 1.0), (-4.0, 0.75)))
302 self.assert_(not fcmp(divmod(3.25, -1.0), (-4.0, -0.75)))
303 self.assert_(not fcmp(divmod(-3.25, -1.0), (3.0, -0.25)))
304
305 self.assertRaises(TypeError, divmod)
306
307 def test_eval(self):
308 self.assertEqual(eval('1+1'), 2)
309 self.assertEqual(eval(' 1+1\n'), 2)
310 globals = {'a': 1, 'b': 2}
311 locals = {'b': 200, 'c': 300}
312 self.assertEqual(eval('a', globals) , 1)
313 self.assertEqual(eval('a', globals, locals), 1)
314 self.assertEqual(eval('b', globals, locals), 200)
315 self.assertEqual(eval('c', globals, locals), 300)
Walter Dörwald919497e2003-01-19 16:23:59 +0000316 globals = {'a': 1, 'b': 2}
317 locals = {'b': 200, 'c': 300}
Walter Dörwald1f5947b2007-05-22 16:52:54 +0000318## bom = b'\xef\xbb\xbf'
319## self.assertEqual(eval(bom + b'a', globals, locals), 1)
320 self.assertEqual(eval('"\xe5"', globals), "\xe5")
Walter Dörwald919497e2003-01-19 16:23:59 +0000321 self.assertRaises(TypeError, eval)
322 self.assertRaises(TypeError, eval, ())
323
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000324 def test_general_eval(self):
325 # Tests that general mappings can be used for the locals argument
326
327 class M:
328 "Test mapping interface versus possible calls from eval()."
329 def __getitem__(self, key):
330 if key == 'a':
331 return 12
332 raise KeyError
Guido van Rossumcd70eee2007-02-11 18:53:00 +0000333 def keys(self):
334 return list('xyz')
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000335
336 m = M()
337 g = globals()
338 self.assertEqual(eval('a', g, m), 12)
339 self.assertRaises(NameError, eval, 'b', g, m)
340 self.assertEqual(eval('dir()', g, m), list('xyz'))
341 self.assertEqual(eval('globals()', g, m), g)
342 self.assertEqual(eval('locals()', g, m), m)
Raymond Hettinger513ffe82004-07-06 13:44:41 +0000343 self.assertRaises(TypeError, eval, 'a', m)
Raymond Hettinger66bd2332004-08-02 08:30:07 +0000344 class A:
345 "Non-mapping"
346 pass
347 m = A()
348 self.assertRaises(TypeError, eval, 'a', g, m)
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000349
350 # Verify that dict subclasses work as well
351 class D(dict):
352 def __getitem__(self, key):
353 if key == 'a':
354 return 12
355 return dict.__getitem__(self, key)
Guido van Rossumcd70eee2007-02-11 18:53:00 +0000356 def keys(self):
357 return list('xyz')
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000358
359 d = D()
360 self.assertEqual(eval('a', g, d), 12)
361 self.assertRaises(NameError, eval, 'b', g, d)
362 self.assertEqual(eval('dir()', g, d), list('xyz'))
363 self.assertEqual(eval('globals()', g, d), g)
364 self.assertEqual(eval('locals()', g, d), d)
365
366 # Verify locals stores (used by list comps)
367 eval('[locals() for i in (2,3)]', g, d)
368 eval('[locals() for i in (2,3)]', g, UserDict.UserDict())
369
370 class SpreadSheet:
371 "Sample application showing nested, calculated lookups."
372 _cells = {}
373 def __setitem__(self, key, formula):
374 self._cells[key] = formula
Thomas Wouters73e5a5b2006-06-08 15:35:45 +0000375 def __getitem__(self, key):
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000376 return eval(self._cells[key], globals(), self)
377
378 ss = SpreadSheet()
379 ss['a1'] = '5'
380 ss['a2'] = 'a1*6'
381 ss['a3'] = 'a2*7'
382 self.assertEqual(ss['a3'], 210)
383
Raymond Hettinger2a7dede2004-08-07 04:55:30 +0000384 # Verify that dir() catches a non-list returned by eval
385 # SF bug #1004669
386 class C:
387 def __getitem__(self, item):
388 raise KeyError(item)
Guido van Rossumcd70eee2007-02-11 18:53:00 +0000389 def keys(self):
390 return 1 # used to be 'a' but that's no longer an error
Raymond Hettinger2a7dede2004-08-07 04:55:30 +0000391 self.assertRaises(TypeError, eval, 'dir()', globals(), C())
392
Walter Dörwald919497e2003-01-19 16:23:59 +0000393 # Done outside of the method test_z to get the correct scope
394 z = 0
395 f = open(TESTFN, 'w')
396 f.write('z = z+1\n')
397 f.write('z = z*2\n')
398 f.close()
399 execfile(TESTFN)
400
401 def test_execfile(self):
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +0000402 global numruns
403 if numruns:
404 return
405 numruns += 1
Tim Peters7f061872004-12-07 21:17:46 +0000406
Walter Dörwald919497e2003-01-19 16:23:59 +0000407 globals = {'a': 1, 'b': 2}
408 locals = {'b': 200, 'c': 300}
409
410 self.assertEqual(self.__class__.z, 2)
411 globals['z'] = 0
412 execfile(TESTFN, globals)
413 self.assertEqual(globals['z'], 2)
414 locals['z'] = 0
415 execfile(TESTFN, globals, locals)
416 self.assertEqual(locals['z'], 2)
Raymond Hettinger66bd2332004-08-02 08:30:07 +0000417
418 class M:
419 "Test mapping interface versus possible calls from execfile()."
420 def __init__(self):
421 self.z = 10
422 def __getitem__(self, key):
423 if key == 'z':
424 return self.z
425 raise KeyError
426 def __setitem__(self, key, value):
427 if key == 'z':
428 self.z = value
429 return
430 raise KeyError
431
432 locals = M()
433 locals['z'] = 0
434 execfile(TESTFN, globals, locals)
435 self.assertEqual(locals['z'], 2)
436
Walter Dörwald919497e2003-01-19 16:23:59 +0000437 unlink(TESTFN)
438 self.assertRaises(TypeError, execfile)
Neal Norwitzfcf44352005-11-27 20:37:43 +0000439 self.assertRaises(TypeError, execfile, TESTFN, {}, ())
Walter Dörwald919497e2003-01-19 16:23:59 +0000440 import os
441 self.assertRaises(IOError, execfile, os.curdir)
442 self.assertRaises(IOError, execfile, "I_dont_exist")
443
Georg Brandl7cae87c2006-09-06 06:51:57 +0000444 def test_exec(self):
445 g = {}
446 exec('z = 1', g)
447 if '__builtins__' in g:
448 del g['__builtins__']
449 self.assertEqual(g, {'z': 1})
450
Guido van Rossumef87d6e2007-05-02 19:09:54 +0000451 exec('z = 1+1', g)
Georg Brandl7cae87c2006-09-06 06:51:57 +0000452 if '__builtins__' in g:
453 del g['__builtins__']
454 self.assertEqual(g, {'z': 2})
455 g = {}
456 l = {}
457
458 import warnings
459 warnings.filterwarnings("ignore", "global statement", module="<string>")
460 exec('global a; a = 1; b = 2', g, l)
461 if '__builtins__' in g:
462 del g['__builtins__']
463 if '__builtins__' in l:
464 del l['__builtins__']
465 self.assertEqual((g, l), ({'a': 1}, {'b': 2}))
466
Walter Dörwald919497e2003-01-19 16:23:59 +0000467 def test_filter(self):
468 self.assertEqual(filter(lambda c: 'a' <= c <= 'z', 'Hello World'), 'elloorld')
469 self.assertEqual(filter(None, [1, 'hello', [], [3], '', None, 9, 0]), [1, 'hello', [3], 9])
470 self.assertEqual(filter(lambda x: x > 0, [1, -3, 9, 0, 2]), [1, 9, 2])
471 self.assertEqual(filter(None, Squares(10)), [1, 4, 9, 16, 25, 36, 49, 64, 81])
472 self.assertEqual(filter(lambda x: x%2, Squares(10)), [1, 9, 25, 49, 81])
473 def identity(item):
474 return 1
475 filter(identity, Squares(5))
476 self.assertRaises(TypeError, filter)
477 class BadSeq(object):
Tim Petersf2715e02003-02-19 02:35:07 +0000478 def __getitem__(self, index):
479 if index<4:
480 return 42
481 raise ValueError
Walter Dörwald919497e2003-01-19 16:23:59 +0000482 self.assertRaises(ValueError, filter, lambda x: x, BadSeq())
483 def badfunc():
484 pass
485 self.assertRaises(TypeError, filter, badfunc, range(5))
486
Walter Dörwaldbf517072003-01-27 15:57:14 +0000487 # test bltinmodule.c::filtertuple()
Walter Dörwald919497e2003-01-19 16:23:59 +0000488 self.assertEqual(filter(None, (1, 2)), (1, 2))
489 self.assertEqual(filter(lambda x: x>=3, (1, 2, 3, 4)), (3, 4))
490 self.assertRaises(TypeError, filter, 42, (1, 2))
491
Walter Dörwald1f5947b2007-05-22 16:52:54 +0000492 # test bltinmodule.c::filterunicode()
Walter Dörwald919497e2003-01-19 16:23:59 +0000493 self.assertEqual(filter(None, "12"), "12")
494 self.assertEqual(filter(lambda x: x>="3", "1234"), "34")
495 self.assertRaises(TypeError, filter, 42, "12")
496 class badstr(str):
497 def __getitem__(self, index):
498 raise ValueError
499 self.assertRaises(ValueError, filter, lambda x: x >="3", badstr("1234"))
Walter Dörwaldbf517072003-01-27 15:57:14 +0000500
Walter Dörwald903f1e02003-02-04 16:28:00 +0000501 class badstr2(str):
502 def __getitem__(self, index):
503 return 42
504 self.assertRaises(TypeError, filter, lambda x: x >=42, badstr2("1234"))
505
506 class weirdstr(str):
507 def __getitem__(self, index):
508 return weirdstr(2*str.__getitem__(self, index))
509 self.assertEqual(filter(lambda x: x>="33", weirdstr("1234")), "3344")
510
Walter Dörwald5e61e242003-02-04 17:04:01 +0000511 class shiftstr(str):
512 def __getitem__(self, index):
513 return chr(ord(str.__getitem__(self, index))+1)
514 self.assertEqual(filter(lambda x: x>="3", shiftstr("1234")), "345")
515
Walter Dörwaldc3da83f2003-02-04 20:24:45 +0000516 def test_filter_subclasses(self):
Walter Dörwald1f5947b2007-05-22 16:52:54 +0000517 # test that filter() never returns tuple or str subclasses
Walter Dörwaldc8cb5d92003-08-15 17:52:39 +0000518 # and that the result always goes through __getitem__
519 funcs = (None, bool, lambda x: True)
Walter Dörwaldc3da83f2003-02-04 20:24:45 +0000520 class tuple2(tuple):
Walter Dörwald1918f772003-02-10 13:19:13 +0000521 def __getitem__(self, index):
522 return 2*tuple.__getitem__(self, index)
Walter Dörwaldc3da83f2003-02-04 20:24:45 +0000523 class str2(str):
Walter Dörwald1918f772003-02-10 13:19:13 +0000524 def __getitem__(self, index):
525 return 2*str.__getitem__(self, index)
Walter Dörwaldc3da83f2003-02-04 20:24:45 +0000526 inputs = {
Walter Dörwald8dd19322003-02-10 17:36:40 +0000527 tuple2: {(): (), (1, 2, 3): (2, 4, 6)},
Walter Dörwald1918f772003-02-10 13:19:13 +0000528 str2: {"": "", "123": "112233"}
Walter Dörwaldc3da83f2003-02-04 20:24:45 +0000529 }
Walter Dörwaldc3da83f2003-02-04 20:24:45 +0000530
Guido van Rossumcc2b0162007-02-11 06:12:03 +0000531 for (cls, inps) in inputs.items():
532 for (inp, exp) in inps.items():
Tim Petersf2715e02003-02-19 02:35:07 +0000533 # make sure the output goes through __getitem__
534 # even if func is None
535 self.assertEqual(
536 filter(funcs[0], cls(inp)),
537 filter(funcs[1], cls(inp))
538 )
539 for func in funcs:
Walter Dörwald1918f772003-02-10 13:19:13 +0000540 outp = filter(func, cls(inp))
541 self.assertEqual(outp, exp)
542 self.assert_(not isinstance(outp, cls))
Walter Dörwaldc3da83f2003-02-04 20:24:45 +0000543
Walter Dörwald919497e2003-01-19 16:23:59 +0000544 def test_float(self):
545 self.assertEqual(float(3.14), 3.14)
546 self.assertEqual(float(314), 314.0)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000547 self.assertEqual(float(314), 314.0)
Walter Dörwald919497e2003-01-19 16:23:59 +0000548 self.assertEqual(float(" 3.14 "), 3.14)
Neal Norwitze7214a12005-12-18 05:03:17 +0000549 self.assertRaises(ValueError, float, " 0x3.1 ")
550 self.assertRaises(ValueError, float, " -0x3.p-1 ")
Walter Dörwald1f5947b2007-05-22 16:52:54 +0000551 self.assertEqual(float(str(b" \u0663.\u0661\u0664 ",'raw-unicode-escape')), 3.14)
552 self.assertEqual(float("1"*10000), 1e10000) # Inf on both sides
Walter Dörwald919497e2003-01-19 16:23:59 +0000553
Thomas Wouters477c8d52006-05-27 19:21:47 +0000554 @run_with_locale('LC_NUMERIC', 'fr_FR', 'de_DE')
Neal Norwitz5898fa22005-11-22 05:17:40 +0000555 def test_float_with_comma(self):
556 # set locale to something that doesn't use '.' for the decimal point
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000557 # float must not accept the locale specific decimal point but
558 # it still has to accept the normal python syntac
Thomas Wouters477c8d52006-05-27 19:21:47 +0000559 import locale
560 if not locale.localeconv()['decimal_point'] == ',':
Neal Norwitz5898fa22005-11-22 05:17:40 +0000561 return
562
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000563 self.assertEqual(float(" 3.14 "), 3.14)
564 self.assertEqual(float("+3.14 "), 3.14)
565 self.assertEqual(float("-3.14 "), -3.14)
566 self.assertEqual(float(".14 "), .14)
567 self.assertEqual(float("3. "), 3.0)
568 self.assertEqual(float("3.e3 "), 3000.0)
569 self.assertEqual(float("3.2e3 "), 3200.0)
570 self.assertEqual(float("2.5e-1 "), 0.25)
571 self.assertEqual(float("5e-1"), 0.5)
572 self.assertRaises(ValueError, float, " 3,14 ")
573 self.assertRaises(ValueError, float, " +3,14 ")
574 self.assertRaises(ValueError, float, " -3,14 ")
Thomas Wouters477c8d52006-05-27 19:21:47 +0000575 self.assertRaises(ValueError, float, " 0x3.1 ")
576 self.assertRaises(ValueError, float, " -0x3.p-1 ")
577 self.assertEqual(float(" 25.e-1 "), 2.5)
578 self.assertEqual(fcmp(float(" .25e-1 "), .025), 0)
Neal Norwitz5898fa22005-11-22 05:17:40 +0000579
Brett Cannonc3647ac2005-04-26 03:45:26 +0000580 def test_floatconversion(self):
581 # Make sure that calls to __float__() work properly
582 class Foo0:
583 def __float__(self):
584 return 42.
585
586 class Foo1(object):
587 def __float__(self):
588 return 42.
589
590 class Foo2(float):
591 def __float__(self):
592 return 42.
593
594 class Foo3(float):
595 def __new__(cls, value=0.):
596 return float.__new__(cls, 2*value)
597
598 def __float__(self):
599 return self
600
601 class Foo4(float):
602 def __float__(self):
603 return 42
604
605 self.assertAlmostEqual(float(Foo0()), 42.)
606 self.assertAlmostEqual(float(Foo1()), 42.)
607 self.assertAlmostEqual(float(Foo2()), 42.)
608 self.assertAlmostEqual(float(Foo3(21)), 42.)
609 self.assertRaises(TypeError, float, Foo4(42))
610
Walter Dörwald919497e2003-01-19 16:23:59 +0000611 def test_getattr(self):
612 import sys
613 self.assert_(getattr(sys, 'stdout') is sys.stdout)
614 self.assertRaises(TypeError, getattr, sys, 1)
615 self.assertRaises(TypeError, getattr, sys, 1, "foo")
616 self.assertRaises(TypeError, getattr)
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000617 self.assertRaises(AttributeError, getattr, sys, chr(sys.maxunicode))
Walter Dörwald919497e2003-01-19 16:23:59 +0000618
619 def test_hasattr(self):
620 import sys
621 self.assert_(hasattr(sys, 'stdout'))
622 self.assertRaises(TypeError, hasattr, sys, 1)
623 self.assertRaises(TypeError, hasattr)
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000624 self.assertEqual(False, hasattr(sys, chr(sys.maxunicode)))
Walter Dörwald919497e2003-01-19 16:23:59 +0000625
626 def test_hash(self):
627 hash(None)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000628 self.assertEqual(hash(1), hash(1))
Walter Dörwald919497e2003-01-19 16:23:59 +0000629 self.assertEqual(hash(1), hash(1.0))
630 hash('spam')
Walter Dörwald1f5947b2007-05-22 16:52:54 +0000631 self.assertEqual(hash('spam'), hash(str8('spam')))
Walter Dörwald919497e2003-01-19 16:23:59 +0000632 hash((0,1,2,3))
633 def f(): pass
634 self.assertRaises(TypeError, hash, [])
635 self.assertRaises(TypeError, hash, {})
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000636 # Bug 1536021: Allow hash to return long objects
637 class X:
638 def __hash__(self):
639 return 2**100
640 self.assertEquals(type(hash(X())), int)
641 class Y(object):
642 def __hash__(self):
643 return 2**100
644 self.assertEquals(type(hash(Y())), int)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000645 class Z(int):
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000646 def __hash__(self):
647 return self
Guido van Rossume2a383d2007-01-15 16:59:06 +0000648 self.assertEquals(hash(Z(42)), hash(42))
Walter Dörwald919497e2003-01-19 16:23:59 +0000649
650 def test_hex(self):
651 self.assertEqual(hex(16), '0x10')
Guido van Rossume2a383d2007-01-15 16:59:06 +0000652 self.assertEqual(hex(16), '0x10')
Guido van Rossum6c9e1302003-11-29 23:52:13 +0000653 self.assertEqual(hex(-16), '-0x10')
Guido van Rossume2a383d2007-01-15 16:59:06 +0000654 self.assertEqual(hex(-16), '-0x10')
Walter Dörwald919497e2003-01-19 16:23:59 +0000655 self.assertRaises(TypeError, hex, {})
656
657 def test_id(self):
658 id(None)
659 id(1)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000660 id(1)
Walter Dörwald919497e2003-01-19 16:23:59 +0000661 id(1.0)
662 id('spam')
663 id((0,1,2,3))
664 id([0,1,2,3])
665 id({'spam': 1, 'eggs': 2, 'ham': 3})
666
Guido van Rossuma88a0332007-02-26 16:59:55 +0000667 # Test input() later, alphabetized as if it were raw_input
668
Walter Dörwald919497e2003-01-19 16:23:59 +0000669 def test_int(self):
670 self.assertEqual(int(314), 314)
671 self.assertEqual(int(3.14), 3)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000672 self.assertEqual(int(314), 314)
Walter Dörwald919497e2003-01-19 16:23:59 +0000673 # Check that conversion from float truncates towards zero
674 self.assertEqual(int(-3.14), -3)
675 self.assertEqual(int(3.9), 3)
676 self.assertEqual(int(-3.9), -3)
677 self.assertEqual(int(3.5), 3)
678 self.assertEqual(int(-3.5), -3)
679 # Different base:
Guido van Rossume2a383d2007-01-15 16:59:06 +0000680 self.assertEqual(int("10",16), 16)
Walter Dörwald919497e2003-01-19 16:23:59 +0000681 # Test conversion from strings and various anomalies
682 for s, v in L:
683 for sign in "", "+", "-":
684 for prefix in "", " ", "\t", " \t\t ":
685 ss = prefix + sign + s
686 vv = v
687 if sign == "-" and v is not ValueError:
688 vv = -v
689 try:
690 self.assertEqual(int(ss), vv)
691 except v:
692 pass
693
Walter Dörwald70a6b492004-02-12 17:35:32 +0000694 s = repr(-1-sys.maxint)
Thomas Wouters89f507f2006-12-13 04:49:30 +0000695 x = int(s)
696 self.assertEqual(x+1, -sys.maxint)
697 self.assert_(isinstance(x, int))
Walter Dörwald919497e2003-01-19 16:23:59 +0000698 # should return long
Thomas Wouters89f507f2006-12-13 04:49:30 +0000699 self.assertEqual(int(s[1:]), sys.maxint+1)
Walter Dörwald919497e2003-01-19 16:23:59 +0000700
701 # should return long
702 x = int(1e100)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000703 self.assert_(isinstance(x, int))
Walter Dörwald919497e2003-01-19 16:23:59 +0000704 x = int(-1e100)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000705 self.assert_(isinstance(x, int))
Walter Dörwald919497e2003-01-19 16:23:59 +0000706
707
708 # SF bug 434186: 0x80000000/2 != 0x80000000>>1.
709 # Worked by accident in Windows release build, but failed in debug build.
710 # Failed in all Linux builds.
711 x = -1-sys.maxint
712 self.assertEqual(x >> 1, x//2)
713
714 self.assertRaises(ValueError, int, '123\0')
715 self.assertRaises(ValueError, int, '53', 40)
716
Thomas Wouters89f507f2006-12-13 04:49:30 +0000717 # SF bug 1545497: embedded NULs were not detected with
718 # explicit base
719 self.assertRaises(ValueError, int, '123\0', 10)
720 self.assertRaises(ValueError, int, '123\x00 245', 20)
721
Walter Dörwald919497e2003-01-19 16:23:59 +0000722 x = int('1' * 600)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000723 self.assert_(isinstance(x, int))
Walter Dörwald919497e2003-01-19 16:23:59 +0000724
Walter Dörwald1f5947b2007-05-22 16:52:54 +0000725 x = int(chr(0x661) * 600)
726 self.assert_(isinstance(x, int))
Walter Dörwald919497e2003-01-19 16:23:59 +0000727
728 self.assertRaises(TypeError, int, 1, 12)
729
730 self.assertEqual(int('0123', 0), 83)
Neal Norwitz5898fa22005-11-22 05:17:40 +0000731 self.assertEqual(int('0x123', 16), 291)
Walter Dörwald919497e2003-01-19 16:23:59 +0000732
Thomas Wouters477c8d52006-05-27 19:21:47 +0000733 # SF bug 1334662: int(string, base) wrong answers
734 # Various representations of 2**32 evaluated to 0
735 # rather than 2**32 in previous versions
736
Guido van Rossume2a383d2007-01-15 16:59:06 +0000737 self.assertEqual(int('100000000000000000000000000000000', 2), 4294967296)
738 self.assertEqual(int('102002022201221111211', 3), 4294967296)
739 self.assertEqual(int('10000000000000000', 4), 4294967296)
740 self.assertEqual(int('32244002423141', 5), 4294967296)
741 self.assertEqual(int('1550104015504', 6), 4294967296)
742 self.assertEqual(int('211301422354', 7), 4294967296)
743 self.assertEqual(int('40000000000', 8), 4294967296)
744 self.assertEqual(int('12068657454', 9), 4294967296)
745 self.assertEqual(int('4294967296', 10), 4294967296)
746 self.assertEqual(int('1904440554', 11), 4294967296)
747 self.assertEqual(int('9ba461594', 12), 4294967296)
748 self.assertEqual(int('535a79889', 13), 4294967296)
749 self.assertEqual(int('2ca5b7464', 14), 4294967296)
750 self.assertEqual(int('1a20dcd81', 15), 4294967296)
751 self.assertEqual(int('100000000', 16), 4294967296)
752 self.assertEqual(int('a7ffda91', 17), 4294967296)
753 self.assertEqual(int('704he7g4', 18), 4294967296)
754 self.assertEqual(int('4f5aff66', 19), 4294967296)
755 self.assertEqual(int('3723ai4g', 20), 4294967296)
756 self.assertEqual(int('281d55i4', 21), 4294967296)
757 self.assertEqual(int('1fj8b184', 22), 4294967296)
758 self.assertEqual(int('1606k7ic', 23), 4294967296)
759 self.assertEqual(int('mb994ag', 24), 4294967296)
760 self.assertEqual(int('hek2mgl', 25), 4294967296)
761 self.assertEqual(int('dnchbnm', 26), 4294967296)
762 self.assertEqual(int('b28jpdm', 27), 4294967296)
763 self.assertEqual(int('8pfgih4', 28), 4294967296)
764 self.assertEqual(int('76beigg', 29), 4294967296)
765 self.assertEqual(int('5qmcpqg', 30), 4294967296)
766 self.assertEqual(int('4q0jto4', 31), 4294967296)
767 self.assertEqual(int('4000000', 32), 4294967296)
768 self.assertEqual(int('3aokq94', 33), 4294967296)
769 self.assertEqual(int('2qhxjli', 34), 4294967296)
770 self.assertEqual(int('2br45qb', 35), 4294967296)
771 self.assertEqual(int('1z141z4', 36), 4294967296)
Thomas Wouters477c8d52006-05-27 19:21:47 +0000772
773 # SF bug 1334662: int(string, base) wrong answers
774 # Checks for proper evaluation of 2**32 + 1
Guido van Rossume2a383d2007-01-15 16:59:06 +0000775 self.assertEqual(int('100000000000000000000000000000001', 2), 4294967297)
776 self.assertEqual(int('102002022201221111212', 3), 4294967297)
777 self.assertEqual(int('10000000000000001', 4), 4294967297)
778 self.assertEqual(int('32244002423142', 5), 4294967297)
779 self.assertEqual(int('1550104015505', 6), 4294967297)
780 self.assertEqual(int('211301422355', 7), 4294967297)
781 self.assertEqual(int('40000000001', 8), 4294967297)
782 self.assertEqual(int('12068657455', 9), 4294967297)
783 self.assertEqual(int('4294967297', 10), 4294967297)
784 self.assertEqual(int('1904440555', 11), 4294967297)
785 self.assertEqual(int('9ba461595', 12), 4294967297)
786 self.assertEqual(int('535a7988a', 13), 4294967297)
787 self.assertEqual(int('2ca5b7465', 14), 4294967297)
788 self.assertEqual(int('1a20dcd82', 15), 4294967297)
789 self.assertEqual(int('100000001', 16), 4294967297)
790 self.assertEqual(int('a7ffda92', 17), 4294967297)
791 self.assertEqual(int('704he7g5', 18), 4294967297)
792 self.assertEqual(int('4f5aff67', 19), 4294967297)
793 self.assertEqual(int('3723ai4h', 20), 4294967297)
794 self.assertEqual(int('281d55i5', 21), 4294967297)
795 self.assertEqual(int('1fj8b185', 22), 4294967297)
796 self.assertEqual(int('1606k7id', 23), 4294967297)
797 self.assertEqual(int('mb994ah', 24), 4294967297)
798 self.assertEqual(int('hek2mgm', 25), 4294967297)
799 self.assertEqual(int('dnchbnn', 26), 4294967297)
800 self.assertEqual(int('b28jpdn', 27), 4294967297)
801 self.assertEqual(int('8pfgih5', 28), 4294967297)
802 self.assertEqual(int('76beigh', 29), 4294967297)
803 self.assertEqual(int('5qmcpqh', 30), 4294967297)
804 self.assertEqual(int('4q0jto5', 31), 4294967297)
805 self.assertEqual(int('4000001', 32), 4294967297)
806 self.assertEqual(int('3aokq95', 33), 4294967297)
807 self.assertEqual(int('2qhxjlj', 34), 4294967297)
808 self.assertEqual(int('2br45qc', 35), 4294967297)
809 self.assertEqual(int('1z141z5', 36), 4294967297)
Thomas Wouters477c8d52006-05-27 19:21:47 +0000810
Brett Cannonc3647ac2005-04-26 03:45:26 +0000811 def test_intconversion(self):
812 # Test __int__()
813 class Foo0:
814 def __int__(self):
815 return 42
816
817 class Foo1(object):
818 def __int__(self):
819 return 42
820
821 class Foo2(int):
822 def __int__(self):
823 return 42
824
825 class Foo3(int):
826 def __int__(self):
827 return self
828
829 class Foo4(int):
830 def __int__(self):
Guido van Rossume2a383d2007-01-15 16:59:06 +0000831 return 42
Brett Cannonc3647ac2005-04-26 03:45:26 +0000832
833 class Foo5(int):
834 def __int__(self):
835 return 42.
836
837 self.assertEqual(int(Foo0()), 42)
838 self.assertEqual(int(Foo1()), 42)
839 self.assertEqual(int(Foo2()), 42)
840 self.assertEqual(int(Foo3()), 0)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000841 self.assertEqual(int(Foo4()), 42)
Brett Cannonc3647ac2005-04-26 03:45:26 +0000842 self.assertRaises(TypeError, int, Foo5())
843
Walter Dörwald919497e2003-01-19 16:23:59 +0000844 def test_iter(self):
845 self.assertRaises(TypeError, iter)
846 self.assertRaises(TypeError, iter, 42, 42)
847 lists = [("1", "2"), ["1", "2"], "12"]
Walter Dörwald919497e2003-01-19 16:23:59 +0000848 for l in lists:
849 i = iter(l)
Georg Brandla18af4e2007-04-21 15:47:16 +0000850 self.assertEqual(next(i), '1')
851 self.assertEqual(next(i), '2')
852 self.assertRaises(StopIteration, next, i)
Walter Dörwald919497e2003-01-19 16:23:59 +0000853
854 def test_isinstance(self):
855 class C:
856 pass
857 class D(C):
858 pass
859 class E:
860 pass
861 c = C()
862 d = D()
863 e = E()
864 self.assert_(isinstance(c, C))
865 self.assert_(isinstance(d, C))
866 self.assert_(not isinstance(e, C))
867 self.assert_(not isinstance(c, D))
868 self.assert_(not isinstance('foo', E))
869 self.assertRaises(TypeError, isinstance, E, 'foo')
870 self.assertRaises(TypeError, isinstance)
871
872 def test_issubclass(self):
873 class C:
874 pass
875 class D(C):
876 pass
877 class E:
878 pass
879 c = C()
880 d = D()
881 e = E()
882 self.assert_(issubclass(D, C))
883 self.assert_(issubclass(C, C))
884 self.assert_(not issubclass(C, D))
885 self.assertRaises(TypeError, issubclass, 'foo', E)
886 self.assertRaises(TypeError, issubclass, E, 'foo')
887 self.assertRaises(TypeError, issubclass)
888
889 def test_len(self):
890 self.assertEqual(len('123'), 3)
891 self.assertEqual(len(()), 0)
892 self.assertEqual(len((1, 2, 3, 4)), 4)
893 self.assertEqual(len([1, 2, 3, 4]), 4)
894 self.assertEqual(len({}), 0)
895 self.assertEqual(len({'a':1, 'b': 2}), 2)
896 class BadSeq:
897 def __len__(self):
898 raise ValueError
899 self.assertRaises(ValueError, len, BadSeq())
900
901 def test_list(self):
902 self.assertEqual(list([]), [])
903 l0_3 = [0, 1, 2, 3]
904 l0_3_bis = list(l0_3)
905 self.assertEqual(l0_3, l0_3_bis)
906 self.assert_(l0_3 is not l0_3_bis)
907 self.assertEqual(list(()), [])
908 self.assertEqual(list((0, 1, 2, 3)), [0, 1, 2, 3])
909 self.assertEqual(list(''), [])
910 self.assertEqual(list('spam'), ['s', 'p', 'a', 'm'])
911
912 if sys.maxint == 0x7fffffff:
913 # This test can currently only work on 32-bit machines.
914 # XXX If/when PySequence_Length() returns a ssize_t, it should be
915 # XXX re-enabled.
916 # Verify clearing of bug #556025.
917 # This assumes that the max data size (sys.maxint) == max
918 # address size this also assumes that the address size is at
919 # least 4 bytes with 8 byte addresses, the bug is not well
920 # tested
921 #
922 # Note: This test is expected to SEGV under Cygwin 1.3.12 or
923 # earlier due to a newlib bug. See the following mailing list
924 # thread for the details:
925
926 # http://sources.redhat.com/ml/newlib/2002/msg00369.html
Guido van Rossum805365e2007-05-07 22:24:25 +0000927 self.assertRaises(MemoryError, list, range(sys.maxint // 2))
Walter Dörwald919497e2003-01-19 16:23:59 +0000928
Raymond Hettingeraa241e02004-09-26 19:24:20 +0000929 # This code used to segfault in Py2.4a3
930 x = []
931 x.extend(-y for y in x)
932 self.assertEqual(x, [])
933
Walter Dörwald919497e2003-01-19 16:23:59 +0000934 def test_long(self):
Guido van Rossume2a383d2007-01-15 16:59:06 +0000935 self.assertEqual(int(314), 314)
936 self.assertEqual(int(3.14), 3)
937 self.assertEqual(int(314), 314)
Walter Dörwald919497e2003-01-19 16:23:59 +0000938 # Check that conversion from float truncates towards zero
Guido van Rossume2a383d2007-01-15 16:59:06 +0000939 self.assertEqual(int(-3.14), -3)
940 self.assertEqual(int(3.9), 3)
941 self.assertEqual(int(-3.9), -3)
942 self.assertEqual(int(3.5), 3)
943 self.assertEqual(int(-3.5), -3)
944 self.assertEqual(int("-3"), -3)
Walter Dörwald919497e2003-01-19 16:23:59 +0000945 # Different base:
Guido van Rossume2a383d2007-01-15 16:59:06 +0000946 self.assertEqual(int("10",16), 16)
Walter Dörwald919497e2003-01-19 16:23:59 +0000947 # Check conversions from string (same test set as for int(), and then some)
948 LL = [
Guido van Rossume2a383d2007-01-15 16:59:06 +0000949 ('1' + '0'*20, 10**20),
950 ('1' + '0'*100, 10**100)
Walter Dörwald919497e2003-01-19 16:23:59 +0000951 ]
Walter Dörwald1f5947b2007-05-22 16:52:54 +0000952 for s, v in LL:
Walter Dörwald919497e2003-01-19 16:23:59 +0000953 for sign in "", "+", "-":
954 for prefix in "", " ", "\t", " \t\t ":
955 ss = prefix + sign + s
956 vv = v
957 if sign == "-" and v is not ValueError:
958 vv = -v
959 try:
Guido van Rossume2a383d2007-01-15 16:59:06 +0000960 self.assertEqual(int(ss), int(vv))
Walter Dörwald919497e2003-01-19 16:23:59 +0000961 except v:
962 pass
963
Guido van Rossume2a383d2007-01-15 16:59:06 +0000964 self.assertRaises(ValueError, int, '123\0')
965 self.assertRaises(ValueError, int, '53', 40)
966 self.assertRaises(TypeError, int, 1, 12)
Walter Dörwald919497e2003-01-19 16:23:59 +0000967
Guido van Rossumd8faa362007-04-27 19:54:29 +0000968 # SF patch #1638879: embedded NULs were not detected with
969 # explicit base
970 self.assertRaises(ValueError, int, '123\0', 10)
971 self.assertRaises(ValueError, int, '123\x00 245', 20)
972
Guido van Rossume2a383d2007-01-15 16:59:06 +0000973 self.assertEqual(int('100000000000000000000000000000000', 2),
Thomas Wouters477c8d52006-05-27 19:21:47 +0000974 4294967296)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000975 self.assertEqual(int('102002022201221111211', 3), 4294967296)
976 self.assertEqual(int('10000000000000000', 4), 4294967296)
977 self.assertEqual(int('32244002423141', 5), 4294967296)
978 self.assertEqual(int('1550104015504', 6), 4294967296)
979 self.assertEqual(int('211301422354', 7), 4294967296)
980 self.assertEqual(int('40000000000', 8), 4294967296)
981 self.assertEqual(int('12068657454', 9), 4294967296)
982 self.assertEqual(int('4294967296', 10), 4294967296)
983 self.assertEqual(int('1904440554', 11), 4294967296)
984 self.assertEqual(int('9ba461594', 12), 4294967296)
985 self.assertEqual(int('535a79889', 13), 4294967296)
986 self.assertEqual(int('2ca5b7464', 14), 4294967296)
987 self.assertEqual(int('1a20dcd81', 15), 4294967296)
988 self.assertEqual(int('100000000', 16), 4294967296)
989 self.assertEqual(int('a7ffda91', 17), 4294967296)
990 self.assertEqual(int('704he7g4', 18), 4294967296)
991 self.assertEqual(int('4f5aff66', 19), 4294967296)
992 self.assertEqual(int('3723ai4g', 20), 4294967296)
993 self.assertEqual(int('281d55i4', 21), 4294967296)
994 self.assertEqual(int('1fj8b184', 22), 4294967296)
995 self.assertEqual(int('1606k7ic', 23), 4294967296)
996 self.assertEqual(int('mb994ag', 24), 4294967296)
997 self.assertEqual(int('hek2mgl', 25), 4294967296)
998 self.assertEqual(int('dnchbnm', 26), 4294967296)
999 self.assertEqual(int('b28jpdm', 27), 4294967296)
1000 self.assertEqual(int('8pfgih4', 28), 4294967296)
1001 self.assertEqual(int('76beigg', 29), 4294967296)
1002 self.assertEqual(int('5qmcpqg', 30), 4294967296)
1003 self.assertEqual(int('4q0jto4', 31), 4294967296)
1004 self.assertEqual(int('4000000', 32), 4294967296)
1005 self.assertEqual(int('3aokq94', 33), 4294967296)
1006 self.assertEqual(int('2qhxjli', 34), 4294967296)
1007 self.assertEqual(int('2br45qb', 35), 4294967296)
1008 self.assertEqual(int('1z141z4', 36), 4294967296)
Thomas Wouters477c8d52006-05-27 19:21:47 +00001009
Guido van Rossume2a383d2007-01-15 16:59:06 +00001010 self.assertEqual(int('100000000000000000000000000000001', 2),
Thomas Wouters477c8d52006-05-27 19:21:47 +00001011 4294967297)
Guido van Rossume2a383d2007-01-15 16:59:06 +00001012 self.assertEqual(int('102002022201221111212', 3), 4294967297)
1013 self.assertEqual(int('10000000000000001', 4), 4294967297)
1014 self.assertEqual(int('32244002423142', 5), 4294967297)
1015 self.assertEqual(int('1550104015505', 6), 4294967297)
1016 self.assertEqual(int('211301422355', 7), 4294967297)
1017 self.assertEqual(int('40000000001', 8), 4294967297)
1018 self.assertEqual(int('12068657455', 9), 4294967297)
1019 self.assertEqual(int('4294967297', 10), 4294967297)
1020 self.assertEqual(int('1904440555', 11), 4294967297)
1021 self.assertEqual(int('9ba461595', 12), 4294967297)
1022 self.assertEqual(int('535a7988a', 13), 4294967297)
1023 self.assertEqual(int('2ca5b7465', 14), 4294967297)
1024 self.assertEqual(int('1a20dcd82', 15), 4294967297)
1025 self.assertEqual(int('100000001', 16), 4294967297)
1026 self.assertEqual(int('a7ffda92', 17), 4294967297)
1027 self.assertEqual(int('704he7g5', 18), 4294967297)
1028 self.assertEqual(int('4f5aff67', 19), 4294967297)
1029 self.assertEqual(int('3723ai4h', 20), 4294967297)
1030 self.assertEqual(int('281d55i5', 21), 4294967297)
1031 self.assertEqual(int('1fj8b185', 22), 4294967297)
1032 self.assertEqual(int('1606k7id', 23), 4294967297)
1033 self.assertEqual(int('mb994ah', 24), 4294967297)
1034 self.assertEqual(int('hek2mgm', 25), 4294967297)
1035 self.assertEqual(int('dnchbnn', 26), 4294967297)
1036 self.assertEqual(int('b28jpdn', 27), 4294967297)
1037 self.assertEqual(int('8pfgih5', 28), 4294967297)
1038 self.assertEqual(int('76beigh', 29), 4294967297)
1039 self.assertEqual(int('5qmcpqh', 30), 4294967297)
1040 self.assertEqual(int('4q0jto5', 31), 4294967297)
1041 self.assertEqual(int('4000001', 32), 4294967297)
1042 self.assertEqual(int('3aokq95', 33), 4294967297)
1043 self.assertEqual(int('2qhxjlj', 34), 4294967297)
1044 self.assertEqual(int('2br45qc', 35), 4294967297)
1045 self.assertEqual(int('1z141z5', 36), 4294967297)
Thomas Wouters477c8d52006-05-27 19:21:47 +00001046
1047
Brett Cannonc3647ac2005-04-26 03:45:26 +00001048 def test_longconversion(self):
1049 # Test __long__()
1050 class Foo0:
1051 def __long__(self):
Guido van Rossume2a383d2007-01-15 16:59:06 +00001052 return 42
Brett Cannonc3647ac2005-04-26 03:45:26 +00001053
1054 class Foo1(object):
1055 def __long__(self):
Guido van Rossume2a383d2007-01-15 16:59:06 +00001056 return 42
Brett Cannonc3647ac2005-04-26 03:45:26 +00001057
Guido van Rossume2a383d2007-01-15 16:59:06 +00001058 class Foo2(int):
Brett Cannonc3647ac2005-04-26 03:45:26 +00001059 def __long__(self):
1060 return 42
1061
Guido van Rossume2a383d2007-01-15 16:59:06 +00001062 class Foo3(int):
1063 def __long__(self):
1064 return self
1065
1066 class Foo4(int):
1067 def __long__(self):
1068 return 42
1069
1070 class Foo5(int):
Brett Cannonc3647ac2005-04-26 03:45:26 +00001071 def __long__(self):
1072 return 42.
1073
Guido van Rossume2a383d2007-01-15 16:59:06 +00001074 self.assertEqual(int(Foo0()), 42)
1075 self.assertEqual(int(Foo1()), 42)
Guido van Rossumd8faa362007-04-27 19:54:29 +00001076 # XXX invokes __int__ now
Guido van Rossumddefaf32007-01-14 03:31:43 +00001077 # self.assertEqual(long(Foo2()), 42L)
Guido van Rossume2a383d2007-01-15 16:59:06 +00001078 self.assertEqual(int(Foo3()), 0)
Guido van Rossumd8faa362007-04-27 19:54:29 +00001079 # XXX likewise
Guido van Rossumddefaf32007-01-14 03:31:43 +00001080 # self.assertEqual(long(Foo4()), 42)
1081 # self.assertRaises(TypeError, long, Foo5())
Brett Cannonc3647ac2005-04-26 03:45:26 +00001082
Walter Dörwald919497e2003-01-19 16:23:59 +00001083 def test_map(self):
1084 self.assertEqual(
1085 map(None, 'hello world'),
1086 ['h','e','l','l','o',' ','w','o','r','l','d']
1087 )
1088 self.assertEqual(
1089 map(None, 'abcd', 'efg'),
1090 [('a', 'e'), ('b', 'f'), ('c', 'g'), ('d', None)]
1091 )
1092 self.assertEqual(
1093 map(None, range(10)),
1094 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
1095 )
1096 self.assertEqual(
1097 map(lambda x: x*x, range(1,4)),
1098 [1, 4, 9]
1099 )
1100 try:
1101 from math import sqrt
1102 except ImportError:
1103 def sqrt(x):
1104 return pow(x, 0.5)
1105 self.assertEqual(
1106 map(lambda x: map(sqrt,x), [[16, 4], [81, 9]]),
1107 [[4.0, 2.0], [9.0, 3.0]]
1108 )
1109 self.assertEqual(
1110 map(lambda x, y: x+y, [1,3,2], [9,1,4]),
1111 [10, 4, 6]
1112 )
1113
1114 def plus(*v):
1115 accu = 0
1116 for i in v: accu = accu + i
1117 return accu
1118 self.assertEqual(
1119 map(plus, [1, 3, 7]),
1120 [1, 3, 7]
1121 )
1122 self.assertEqual(
1123 map(plus, [1, 3, 7], [4, 9, 2]),
1124 [1+4, 3+9, 7+2]
1125 )
1126 self.assertEqual(
1127 map(plus, [1, 3, 7], [4, 9, 2], [1, 1, 0]),
1128 [1+4+1, 3+9+1, 7+2+0]
1129 )
1130 self.assertEqual(
1131 map(None, Squares(10)),
1132 [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
1133 )
1134 self.assertEqual(
1135 map(int, Squares(10)),
1136 [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
1137 )
1138 self.assertEqual(
1139 map(None, Squares(3), Squares(2)),
1140 [(0,0), (1,1), (4,None)]
1141 )
Guido van Rossum47b9ff62006-08-24 00:41:19 +00001142 def Max(a, b):
1143 if a is None:
1144 return b
1145 if b is None:
1146 return a
1147 return max(a, b)
Walter Dörwald919497e2003-01-19 16:23:59 +00001148 self.assertEqual(
Guido van Rossum47b9ff62006-08-24 00:41:19 +00001149 map(Max, Squares(3), Squares(2)),
Walter Dörwald919497e2003-01-19 16:23:59 +00001150 [0, 1, 4]
1151 )
1152 self.assertRaises(TypeError, map)
1153 self.assertRaises(TypeError, map, lambda x: x, 42)
1154 self.assertEqual(map(None, [42]), [42])
1155 class BadSeq:
1156 def __getitem__(self, index):
1157 raise ValueError
1158 self.assertRaises(ValueError, map, lambda x: x, BadSeq())
Neal Norwitzfcf44352005-11-27 20:37:43 +00001159 def badfunc(x):
1160 raise RuntimeError
1161 self.assertRaises(RuntimeError, map, badfunc, range(5))
Walter Dörwald919497e2003-01-19 16:23:59 +00001162
1163 def test_max(self):
1164 self.assertEqual(max('123123'), '3')
1165 self.assertEqual(max(1, 2, 3), 3)
1166 self.assertEqual(max((1, 2, 3, 1, 2, 3)), 3)
1167 self.assertEqual(max([1, 2, 3, 1, 2, 3]), 3)
1168
Guido van Rossume2a383d2007-01-15 16:59:06 +00001169 self.assertEqual(max(1, 2, 3.0), 3.0)
1170 self.assertEqual(max(1, 2.0, 3), 3)
1171 self.assertEqual(max(1.0, 2, 3), 3)
Walter Dörwald919497e2003-01-19 16:23:59 +00001172
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001173 for stmt in (
1174 "max(key=int)", # no args
1175 "max(1, key=int)", # single arg not iterable
1176 "max(1, 2, keystone=int)", # wrong keyword
1177 "max(1, 2, key=int, abc=int)", # two many keywords
1178 "max(1, 2, key=1)", # keyfunc is not callable
1179 ):
Tim Peters7f061872004-12-07 21:17:46 +00001180 try:
Georg Brandl7cae87c2006-09-06 06:51:57 +00001181 exec(stmt, globals())
Tim Peters7f061872004-12-07 21:17:46 +00001182 except TypeError:
1183 pass
1184 else:
1185 self.fail(stmt)
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001186
1187 self.assertEqual(max((1,), key=neg), 1) # one elem iterable
1188 self.assertEqual(max((1,2), key=neg), 1) # two elem iterable
1189 self.assertEqual(max(1, 2, key=neg), 1) # two elems
1190
1191 data = [random.randrange(200) for i in range(100)]
1192 keys = dict((elem, random.randrange(50)) for elem in data)
1193 f = keys.__getitem__
1194 self.assertEqual(max(data, key=f),
1195 sorted(reversed(data), key=f)[-1])
1196
Walter Dörwald919497e2003-01-19 16:23:59 +00001197 def test_min(self):
1198 self.assertEqual(min('123123'), '1')
1199 self.assertEqual(min(1, 2, 3), 1)
1200 self.assertEqual(min((1, 2, 3, 1, 2, 3)), 1)
1201 self.assertEqual(min([1, 2, 3, 1, 2, 3]), 1)
1202
Guido van Rossume2a383d2007-01-15 16:59:06 +00001203 self.assertEqual(min(1, 2, 3.0), 1)
1204 self.assertEqual(min(1, 2.0, 3), 1)
1205 self.assertEqual(min(1.0, 2, 3), 1.0)
Walter Dörwald919497e2003-01-19 16:23:59 +00001206
1207 self.assertRaises(TypeError, min)
1208 self.assertRaises(TypeError, min, 42)
1209 self.assertRaises(ValueError, min, ())
1210 class BadSeq:
1211 def __getitem__(self, index):
1212 raise ValueError
1213 self.assertRaises(ValueError, min, BadSeq())
1214 class BadNumber:
1215 def __cmp__(self, other):
1216 raise ValueError
Guido van Rossum47b9ff62006-08-24 00:41:19 +00001217 self.assertRaises(TypeError, min, (42, BadNumber()))
Walter Dörwald919497e2003-01-19 16:23:59 +00001218
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001219 for stmt in (
1220 "min(key=int)", # no args
1221 "min(1, key=int)", # single arg not iterable
1222 "min(1, 2, keystone=int)", # wrong keyword
1223 "min(1, 2, key=int, abc=int)", # two many keywords
1224 "min(1, 2, key=1)", # keyfunc is not callable
1225 ):
Tim Peters7f061872004-12-07 21:17:46 +00001226 try:
Georg Brandl7cae87c2006-09-06 06:51:57 +00001227 exec(stmt, globals())
Tim Peters7f061872004-12-07 21:17:46 +00001228 except TypeError:
1229 pass
1230 else:
1231 self.fail(stmt)
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001232
1233 self.assertEqual(min((1,), key=neg), 1) # one elem iterable
1234 self.assertEqual(min((1,2), key=neg), 2) # two elem iterable
1235 self.assertEqual(min(1, 2, key=neg), 2) # two elems
1236
1237 data = [random.randrange(200) for i in range(100)]
1238 keys = dict((elem, random.randrange(50)) for elem in data)
1239 f = keys.__getitem__
1240 self.assertEqual(min(data, key=f),
1241 sorted(data, key=f)[0])
1242
Georg Brandla18af4e2007-04-21 15:47:16 +00001243 def test_next(self):
1244 it = iter(range(2))
1245 self.assertEqual(next(it), 0)
1246 self.assertEqual(next(it), 1)
1247 self.assertRaises(StopIteration, next, it)
1248 self.assertRaises(StopIteration, next, it)
1249 self.assertEquals(next(it, 42), 42)
1250
1251 class Iter(object):
1252 def __iter__(self):
1253 return self
1254 def __next__(self):
1255 raise StopIteration
1256
1257 it = iter(Iter())
1258 self.assertEquals(next(it, 42), 42)
1259 self.assertRaises(StopIteration, next, it)
1260
1261 def gen():
1262 yield 1
1263 return
1264
1265 it = gen()
1266 self.assertEquals(next(it), 1)
1267 self.assertRaises(StopIteration, next, it)
1268 self.assertEquals(next(it, 42), 42)
1269
Walter Dörwald919497e2003-01-19 16:23:59 +00001270 def test_oct(self):
1271 self.assertEqual(oct(100), '0144')
Guido van Rossume2a383d2007-01-15 16:59:06 +00001272 self.assertEqual(oct(100), '0144')
Guido van Rossum6c9e1302003-11-29 23:52:13 +00001273 self.assertEqual(oct(-100), '-0144')
Guido van Rossume2a383d2007-01-15 16:59:06 +00001274 self.assertEqual(oct(-100), '-0144')
Walter Dörwald919497e2003-01-19 16:23:59 +00001275 self.assertRaises(TypeError, oct, ())
1276
1277 def write_testfile(self):
Guido van Rossuma88a0332007-02-26 16:59:55 +00001278 # NB the first 4 lines are also used to test input, below
Walter Dörwald919497e2003-01-19 16:23:59 +00001279 fp = open(TESTFN, 'w')
1280 try:
1281 fp.write('1+1\n')
1282 fp.write('1+1\n')
1283 fp.write('The quick brown fox jumps over the lazy dog')
1284 fp.write('.\n')
1285 fp.write('Dear John\n')
1286 fp.write('XXX'*100)
1287 fp.write('YYY'*100)
1288 finally:
1289 fp.close()
1290
1291 def test_open(self):
1292 self.write_testfile()
1293 fp = open(TESTFN, 'r')
1294 try:
1295 self.assertEqual(fp.readline(4), '1+1\n')
1296 self.assertEqual(fp.readline(4), '1+1\n')
1297 self.assertEqual(fp.readline(), 'The quick brown fox jumps over the lazy dog.\n')
1298 self.assertEqual(fp.readline(4), 'Dear')
1299 self.assertEqual(fp.readline(100), ' John\n')
1300 self.assertEqual(fp.read(300), 'XXX'*100)
1301 self.assertEqual(fp.read(1000), 'YYY'*100)
1302 finally:
1303 fp.close()
1304 unlink(TESTFN)
1305
1306 def test_ord(self):
1307 self.assertEqual(ord(' '), 32)
1308 self.assertEqual(ord('A'), 65)
1309 self.assertEqual(ord('a'), 97)
Guido van Rossumf9e91c92007-05-08 21:05:48 +00001310 self.assertEqual(ord('\x80'), 128)
1311 self.assertEqual(ord('\xff'), 255)
1312
1313 self.assertEqual(ord(b' '), 32)
1314 self.assertEqual(ord(b'A'), 65)
1315 self.assertEqual(ord(b'a'), 97)
1316 self.assertEqual(ord(b'\x80'), 128)
1317 self.assertEqual(ord(b'\xff'), 255)
1318
Walter Dörwald1f5947b2007-05-22 16:52:54 +00001319 self.assertEqual(ord(chr(sys.maxunicode)), sys.maxunicode)
Walter Dörwald919497e2003-01-19 16:23:59 +00001320 self.assertRaises(TypeError, ord, 42)
Walter Dörwald919497e2003-01-19 16:23:59 +00001321
1322 def test_pow(self):
1323 self.assertEqual(pow(0,0), 1)
1324 self.assertEqual(pow(0,1), 0)
1325 self.assertEqual(pow(1,0), 1)
1326 self.assertEqual(pow(1,1), 1)
1327
1328 self.assertEqual(pow(2,0), 1)
1329 self.assertEqual(pow(2,10), 1024)
1330 self.assertEqual(pow(2,20), 1024*1024)
1331 self.assertEqual(pow(2,30), 1024*1024*1024)
1332
1333 self.assertEqual(pow(-2,0), 1)
1334 self.assertEqual(pow(-2,1), -2)
1335 self.assertEqual(pow(-2,2), 4)
1336 self.assertEqual(pow(-2,3), -8)
1337
Guido van Rossume2a383d2007-01-15 16:59:06 +00001338 self.assertEqual(pow(0,0), 1)
1339 self.assertEqual(pow(0,1), 0)
1340 self.assertEqual(pow(1,0), 1)
1341 self.assertEqual(pow(1,1), 1)
Walter Dörwald919497e2003-01-19 16:23:59 +00001342
Guido van Rossume2a383d2007-01-15 16:59:06 +00001343 self.assertEqual(pow(2,0), 1)
1344 self.assertEqual(pow(2,10), 1024)
1345 self.assertEqual(pow(2,20), 1024*1024)
1346 self.assertEqual(pow(2,30), 1024*1024*1024)
Walter Dörwald919497e2003-01-19 16:23:59 +00001347
Guido van Rossume2a383d2007-01-15 16:59:06 +00001348 self.assertEqual(pow(-2,0), 1)
1349 self.assertEqual(pow(-2,1), -2)
1350 self.assertEqual(pow(-2,2), 4)
1351 self.assertEqual(pow(-2,3), -8)
Walter Dörwald919497e2003-01-19 16:23:59 +00001352
1353 self.assertAlmostEqual(pow(0.,0), 1.)
1354 self.assertAlmostEqual(pow(0.,1), 0.)
1355 self.assertAlmostEqual(pow(1.,0), 1.)
1356 self.assertAlmostEqual(pow(1.,1), 1.)
1357
1358 self.assertAlmostEqual(pow(2.,0), 1.)
1359 self.assertAlmostEqual(pow(2.,10), 1024.)
1360 self.assertAlmostEqual(pow(2.,20), 1024.*1024.)
1361 self.assertAlmostEqual(pow(2.,30), 1024.*1024.*1024.)
1362
1363 self.assertAlmostEqual(pow(-2.,0), 1.)
1364 self.assertAlmostEqual(pow(-2.,1), -2.)
1365 self.assertAlmostEqual(pow(-2.,2), 4.)
1366 self.assertAlmostEqual(pow(-2.,3), -8.)
1367
Guido van Rossume2a383d2007-01-15 16:59:06 +00001368 for x in 2, 2, 2.0:
1369 for y in 10, 10, 10.0:
1370 for z in 1000, 1000, 1000.0:
Walter Dörwald919497e2003-01-19 16:23:59 +00001371 if isinstance(x, float) or \
1372 isinstance(y, float) or \
1373 isinstance(z, float):
1374 self.assertRaises(TypeError, pow, x, y, z)
1375 else:
1376 self.assertAlmostEqual(pow(x, y, z), 24.0)
1377
1378 self.assertRaises(TypeError, pow, -1, -2, 3)
1379 self.assertRaises(ValueError, pow, 1, 2, 0)
Guido van Rossume2a383d2007-01-15 16:59:06 +00001380 self.assertRaises(TypeError, pow, -1, -2, 3)
1381 self.assertRaises(ValueError, pow, 1, 2, 0)
Walter Dörwald919497e2003-01-19 16:23:59 +00001382 self.assertRaises(ValueError, pow, -342.43, 0.234)
1383
1384 self.assertRaises(TypeError, pow)
1385
1386 def test_range(self):
Guido van Rossum805365e2007-05-07 22:24:25 +00001387 self.assertEqual(list(range(3)), [0, 1, 2])
1388 self.assertEqual(list(range(1, 5)), [1, 2, 3, 4])
1389 self.assertEqual(list(range(0)), [])
1390 self.assertEqual(list(range(-3)), [])
1391 self.assertEqual(list(range(1, 10, 3)), [1, 4, 7])
1392 #self.assertEqual(list(range(5, -5, -3)), [5, 2, -1, -4])
Walter Dörwald919497e2003-01-19 16:23:59 +00001393
Guido van Rossum805365e2007-05-07 22:24:25 +00001394 """ XXX(nnorwitz):
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001395 # Now test range() with longs
Guido van Rossum805365e2007-05-07 22:24:25 +00001396 self.assertEqual(list(range(-2**100)), [])
1397 self.assertEqual(list(range(0, -2**100)), [])
1398 self.assertEqual(list(range(0, 2**100, -1)), [])
1399 self.assertEqual(list(range(0, 2**100, -1)), [])
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001400
Guido van Rossume2a383d2007-01-15 16:59:06 +00001401 a = int(10 * sys.maxint)
1402 b = int(100 * sys.maxint)
1403 c = int(50 * sys.maxint)
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001404
Guido van Rossum805365e2007-05-07 22:24:25 +00001405 self.assertEqual(list(range(a, a+2)), [a, a+1])
1406 self.assertEqual(list(range(a+2, a, -1)), [a+2, a+1])
1407 self.assertEqual(list(range(a+4, a, -2)), [a+4, a+2])
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001408
Guido van Rossum805365e2007-05-07 22:24:25 +00001409 seq = list(range(a, b, c))
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001410 self.assert_(a in seq)
1411 self.assert_(b not in seq)
1412 self.assertEqual(len(seq), 2)
1413
Guido van Rossum805365e2007-05-07 22:24:25 +00001414 seq = list(range(b, a, -c))
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001415 self.assert_(b in seq)
1416 self.assert_(a not in seq)
1417 self.assertEqual(len(seq), 2)
1418
Guido van Rossum805365e2007-05-07 22:24:25 +00001419 seq = list(range(-a, -b, -c))
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001420 self.assert_(-a in seq)
1421 self.assert_(-b not in seq)
1422 self.assertEqual(len(seq), 2)
1423
Walter Dörwald919497e2003-01-19 16:23:59 +00001424 self.assertRaises(TypeError, range)
1425 self.assertRaises(TypeError, range, 1, 2, 3, 4)
1426 self.assertRaises(ValueError, range, 1, 2, 0)
Guido van Rossume2a383d2007-01-15 16:59:06 +00001427 self.assertRaises(ValueError, range, a, a + 1, int(0))
Neal Norwitzfcf44352005-11-27 20:37:43 +00001428
1429 class badzero(int):
Guido van Rossum47b9ff62006-08-24 00:41:19 +00001430 def __eq__(self, other):
Neal Norwitzfcf44352005-11-27 20:37:43 +00001431 raise RuntimeError
Guido van Rossum47b9ff62006-08-24 00:41:19 +00001432 __ne__ = __lt__ = __gt__ = __le__ = __ge__ = __eq__
1433
1434 # XXX This won't (but should!) raise RuntimeError if a is an int...
Neal Norwitzfcf44352005-11-27 20:37:43 +00001435 self.assertRaises(RuntimeError, range, a, a + 1, badzero(1))
Guido van Rossum805365e2007-05-07 22:24:25 +00001436 """
Walter Dörwald919497e2003-01-19 16:23:59 +00001437
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001438 # Reject floats when it would require PyLongs to represent.
1439 # (smaller floats still accepted, but deprecated)
Tim Peters299b3df2003-04-15 14:40:03 +00001440 self.assertRaises(TypeError, range, 1e100, 1e101, 1e101)
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001441
Walter Dörwald357981e2003-04-15 18:59:28 +00001442 self.assertRaises(TypeError, range, 0, "spam")
1443 self.assertRaises(TypeError, range, 0, 42, "spam")
1444
Guido van Rossum805365e2007-05-07 22:24:25 +00001445 #NEAL self.assertRaises(OverflowError, range, -sys.maxint, sys.maxint)
1446 #NEAL self.assertRaises(OverflowError, range, 0, 2*sys.maxint)
1447
1448 self.assertRaises(OverflowError, len, range(0, sys.maxint**10))
Walter Dörwald357981e2003-04-15 18:59:28 +00001449
Guido van Rossuma88a0332007-02-26 16:59:55 +00001450 def test_input(self):
1451 self.write_testfile()
1452 fp = open(TESTFN, 'r')
1453 savestdin = sys.stdin
1454 savestdout = sys.stdout # Eats the echo
1455 try:
1456 sys.stdin = fp
1457 sys.stdout = BitBucket()
1458 self.assertEqual(input(), "1+1")
1459 self.assertEqual(input('testing\n'), "1+1")
1460 self.assertEqual(input(), 'The quick brown fox jumps over the lazy dog.')
1461 self.assertEqual(input('testing\n'), 'Dear John')
1462
1463 # SF 1535165: don't segfault on closed stdin
1464 # sys.stdout must be a regular file for triggering
1465 sys.stdout = savestdout
1466 sys.stdin.close()
1467 self.assertRaises(ValueError, input)
1468
1469 sys.stdout = BitBucket()
1470 sys.stdin = cStringIO.StringIO("NULL\0")
1471 self.assertRaises(TypeError, input, 42, 42)
1472 sys.stdin = cStringIO.StringIO(" 'whitespace'")
1473 self.assertEqual(input(), " 'whitespace'")
1474 sys.stdin = cStringIO.StringIO()
1475 self.assertRaises(EOFError, input)
1476
1477 del sys.stdout
1478 self.assertRaises(RuntimeError, input, 'prompt')
1479 del sys.stdin
1480 self.assertRaises(RuntimeError, input, 'prompt')
1481 finally:
1482 sys.stdin = savestdin
1483 sys.stdout = savestdout
1484 fp.close()
1485 unlink(TESTFN)
1486
Walter Dörwald919497e2003-01-19 16:23:59 +00001487 def test_reload(self):
1488 import marshal
1489 reload(marshal)
1490 import string
1491 reload(string)
1492 ## import sys
1493 ## self.assertRaises(ImportError, reload, sys)
1494
1495 def test_repr(self):
1496 self.assertEqual(repr(''), '\'\'')
1497 self.assertEqual(repr(0), '0')
Guido van Rossume2a383d2007-01-15 16:59:06 +00001498 self.assertEqual(repr(0), '0')
Walter Dörwald919497e2003-01-19 16:23:59 +00001499 self.assertEqual(repr(()), '()')
1500 self.assertEqual(repr([]), '[]')
1501 self.assertEqual(repr({}), '{}')
1502 a = []
1503 a.append(a)
1504 self.assertEqual(repr(a), '[[...]]')
1505 a = {}
1506 a[0] = a
1507 self.assertEqual(repr(a), '{0: {...}}')
1508
1509 def test_round(self):
1510 self.assertEqual(round(0.0), 0.0)
1511 self.assertEqual(round(1.0), 1.0)
1512 self.assertEqual(round(10.0), 10.0)
1513 self.assertEqual(round(1000000000.0), 1000000000.0)
1514 self.assertEqual(round(1e20), 1e20)
1515
1516 self.assertEqual(round(-1.0), -1.0)
1517 self.assertEqual(round(-10.0), -10.0)
1518 self.assertEqual(round(-1000000000.0), -1000000000.0)
1519 self.assertEqual(round(-1e20), -1e20)
1520
1521 self.assertEqual(round(0.1), 0.0)
1522 self.assertEqual(round(1.1), 1.0)
1523 self.assertEqual(round(10.1), 10.0)
1524 self.assertEqual(round(1000000000.1), 1000000000.0)
1525
1526 self.assertEqual(round(-1.1), -1.0)
1527 self.assertEqual(round(-10.1), -10.0)
1528 self.assertEqual(round(-1000000000.1), -1000000000.0)
1529
1530 self.assertEqual(round(0.9), 1.0)
1531 self.assertEqual(round(9.9), 10.0)
1532 self.assertEqual(round(999999999.9), 1000000000.0)
1533
1534 self.assertEqual(round(-0.9), -1.0)
1535 self.assertEqual(round(-9.9), -10.0)
1536 self.assertEqual(round(-999999999.9), -1000000000.0)
1537
1538 self.assertEqual(round(-8.0, -1), -10.0)
1539
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001540 # test new kwargs
1541 self.assertEqual(round(number=-8.0, ndigits=-1), -10.0)
1542
Walter Dörwald919497e2003-01-19 16:23:59 +00001543 self.assertRaises(TypeError, round)
1544
1545 def test_setattr(self):
Tim Petersf2715e02003-02-19 02:35:07 +00001546 setattr(sys, 'spam', 1)
1547 self.assertEqual(sys.spam, 1)
1548 self.assertRaises(TypeError, setattr, sys, 1, 'spam')
1549 self.assertRaises(TypeError, setattr)
Walter Dörwald919497e2003-01-19 16:23:59 +00001550
1551 def test_str(self):
1552 self.assertEqual(str(''), '')
1553 self.assertEqual(str(0), '0')
Guido van Rossume2a383d2007-01-15 16:59:06 +00001554 self.assertEqual(str(0), '0')
Walter Dörwald919497e2003-01-19 16:23:59 +00001555 self.assertEqual(str(()), '()')
1556 self.assertEqual(str([]), '[]')
1557 self.assertEqual(str({}), '{}')
1558 a = []
1559 a.append(a)
1560 self.assertEqual(str(a), '[[...]]')
1561 a = {}
1562 a[0] = a
1563 self.assertEqual(str(a), '{0: {...}}')
1564
Alex Martellia70b1912003-04-22 08:12:33 +00001565 def test_sum(self):
1566 self.assertEqual(sum([]), 0)
Guido van Rossum805365e2007-05-07 22:24:25 +00001567 self.assertEqual(sum(list(range(2,8))), 27)
1568 self.assertEqual(sum(iter(list(range(2,8)))), 27)
Alex Martellia70b1912003-04-22 08:12:33 +00001569 self.assertEqual(sum(Squares(10)), 285)
1570 self.assertEqual(sum(iter(Squares(10))), 285)
1571 self.assertEqual(sum([[1], [2], [3]], []), [1, 2, 3])
1572
1573 self.assertRaises(TypeError, sum)
1574 self.assertRaises(TypeError, sum, 42)
1575 self.assertRaises(TypeError, sum, ['a', 'b', 'c'])
1576 self.assertRaises(TypeError, sum, ['a', 'b', 'c'], '')
1577 self.assertRaises(TypeError, sum, [[1], [2], [3]])
1578 self.assertRaises(TypeError, sum, [{2:3}])
1579 self.assertRaises(TypeError, sum, [{2:3}]*2, {2:3})
1580
1581 class BadSeq:
1582 def __getitem__(self, index):
1583 raise ValueError
1584 self.assertRaises(ValueError, sum, BadSeq())
1585
Walter Dörwald919497e2003-01-19 16:23:59 +00001586 def test_tuple(self):
1587 self.assertEqual(tuple(()), ())
1588 t0_3 = (0, 1, 2, 3)
1589 t0_3_bis = tuple(t0_3)
1590 self.assert_(t0_3 is t0_3_bis)
1591 self.assertEqual(tuple([]), ())
1592 self.assertEqual(tuple([0, 1, 2, 3]), (0, 1, 2, 3))
1593 self.assertEqual(tuple(''), ())
1594 self.assertEqual(tuple('spam'), ('s', 'p', 'a', 'm'))
1595
1596 def test_type(self):
1597 self.assertEqual(type(''), type('123'))
1598 self.assertNotEqual(type(''), type(()))
1599
Guido van Rossumfee7b932005-01-16 00:21:28 +00001600 # We don't want self in vars(), so these are static methods
1601
1602 @staticmethod
Walter Dörwald919497e2003-01-19 16:23:59 +00001603 def get_vars_f0():
1604 return vars()
Walter Dörwald919497e2003-01-19 16:23:59 +00001605
Guido van Rossumfee7b932005-01-16 00:21:28 +00001606 @staticmethod
Walter Dörwald919497e2003-01-19 16:23:59 +00001607 def get_vars_f2():
1608 BuiltinTest.get_vars_f0()
1609 a = 1
1610 b = 2
1611 return vars()
Walter Dörwald919497e2003-01-19 16:23:59 +00001612
1613 def test_vars(self):
Raymond Hettingera690a992003-11-16 16:17:49 +00001614 self.assertEqual(set(vars()), set(dir()))
Walter Dörwald919497e2003-01-19 16:23:59 +00001615 import sys
Raymond Hettingera690a992003-11-16 16:17:49 +00001616 self.assertEqual(set(vars(sys)), set(dir(sys)))
Walter Dörwald919497e2003-01-19 16:23:59 +00001617 self.assertEqual(self.get_vars_f0(), {})
1618 self.assertEqual(self.get_vars_f2(), {'a': 1, 'b': 2})
1619 self.assertRaises(TypeError, vars, 42, 42)
1620 self.assertRaises(TypeError, vars, 42)
1621
1622 def test_zip(self):
1623 a = (1, 2, 3)
1624 b = (4, 5, 6)
1625 t = [(1, 4), (2, 5), (3, 6)]
Guido van Rossum801f0d72006-08-24 19:48:10 +00001626 self.assertEqual(list(zip(a, b)), t)
Walter Dörwald919497e2003-01-19 16:23:59 +00001627 b = [4, 5, 6]
Guido van Rossum801f0d72006-08-24 19:48:10 +00001628 self.assertEqual(list(zip(a, b)), t)
Walter Dörwald919497e2003-01-19 16:23:59 +00001629 b = (4, 5, 6, 7)
Guido van Rossum801f0d72006-08-24 19:48:10 +00001630 self.assertEqual(list(zip(a, b)), t)
Walter Dörwald919497e2003-01-19 16:23:59 +00001631 class I:
1632 def __getitem__(self, i):
1633 if i < 0 or i > 2: raise IndexError
1634 return i + 4
Guido van Rossum801f0d72006-08-24 19:48:10 +00001635 self.assertEqual(list(zip(a, I())), t)
1636 self.assertEqual(list(zip()), [])
1637 self.assertEqual(list(zip(*[])), [])
Walter Dörwald919497e2003-01-19 16:23:59 +00001638 self.assertRaises(TypeError, zip, None)
1639 class G:
1640 pass
1641 self.assertRaises(TypeError, zip, a, G())
1642
1643 # Make sure zip doesn't try to allocate a billion elements for the
1644 # result list when one of its arguments doesn't say how long it is.
1645 # A MemoryError is the most likely failure mode.
1646 class SequenceWithoutALength:
1647 def __getitem__(self, i):
1648 if i == 5:
1649 raise IndexError
1650 else:
1651 return i
1652 self.assertEqual(
Guido van Rossum805365e2007-05-07 22:24:25 +00001653 list(zip(SequenceWithoutALength(), range(2**30))),
Walter Dörwald919497e2003-01-19 16:23:59 +00001654 list(enumerate(range(5)))
1655 )
1656
1657 class BadSeq:
1658 def __getitem__(self, i):
1659 if i == 5:
1660 raise ValueError
1661 else:
1662 return i
Guido van Rossum801f0d72006-08-24 19:48:10 +00001663 self.assertRaises(ValueError, list, zip(BadSeq(), BadSeq()))
Walter Dörwald919497e2003-01-19 16:23:59 +00001664
Raymond Hettinger64958a12003-12-17 20:43:33 +00001665class TestSorted(unittest.TestCase):
1666
1667 def test_basic(self):
Guido van Rossum805365e2007-05-07 22:24:25 +00001668 data = list(range(100))
Raymond Hettinger64958a12003-12-17 20:43:33 +00001669 copy = data[:]
1670 random.shuffle(copy)
1671 self.assertEqual(data, sorted(copy))
1672 self.assertNotEqual(data, copy)
1673
1674 data.reverse()
1675 random.shuffle(copy)
Guido van Rossum47b9ff62006-08-24 00:41:19 +00001676 self.assertEqual(data, sorted(copy, cmp=lambda x, y: (x < y) - (x > y)))
Raymond Hettinger64958a12003-12-17 20:43:33 +00001677 self.assertNotEqual(data, copy)
1678 random.shuffle(copy)
1679 self.assertEqual(data, sorted(copy, key=lambda x: -x))
1680 self.assertNotEqual(data, copy)
1681 random.shuffle(copy)
1682 self.assertEqual(data, sorted(copy, reverse=1))
1683 self.assertNotEqual(data, copy)
1684
1685 def test_inputtypes(self):
1686 s = 'abracadabra'
Walter Dörwald1f5947b2007-05-22 16:52:54 +00001687 types = [list, tuple, str]
Walter Dörwald4e41a4b2005-08-03 17:09:04 +00001688 for T in types:
Raymond Hettinger64958a12003-12-17 20:43:33 +00001689 self.assertEqual(sorted(s), sorted(T(s)))
1690
Walter Dörwald1f5947b2007-05-22 16:52:54 +00001691 s = ''.join(set(s)) # unique letters only
1692 types = [str, set, frozenset, list, tuple, dict.fromkeys]
Walter Dörwald4e41a4b2005-08-03 17:09:04 +00001693 for T in types:
Raymond Hettinger64958a12003-12-17 20:43:33 +00001694 self.assertEqual(sorted(s), sorted(T(s)))
1695
1696 def test_baddecorator(self):
1697 data = 'The quick Brown fox Jumped over The lazy Dog'.split()
1698 self.assertRaises(TypeError, sorted, data, None, lambda x,y: 0)
1699
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001700def test_main(verbose=None):
1701 test_classes = (BuiltinTest, TestSorted)
1702
1703 run_unittest(*test_classes)
1704
1705 # verify reference counting
1706 if verbose and hasattr(sys, "gettotalrefcount"):
1707 import gc
1708 counts = [None] * 5
Guido van Rossum805365e2007-05-07 22:24:25 +00001709 for i in range(len(counts)):
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001710 run_unittest(*test_classes)
1711 gc.collect()
1712 counts[i] = sys.gettotalrefcount()
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001713 print(counts)
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001714
Walter Dörwald919497e2003-01-19 16:23:59 +00001715
1716if __name__ == "__main__":
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001717 test_main(verbose=True)