blob: a4ae21aa5dd3199f5aec2e1ac5ab2a1747f0a507 [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
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
Guido van Rossumd59da4b2007-05-22 18:11:13 +0000149 # XXX(nnorwitz): This test case for callable should probably be removed.
Walter Dörwald919497e2003-01-19 16:23:59 +0000150 def test_callable(self):
Guido van Rossumd59da4b2007-05-22 18:11:13 +0000151 self.assert_(hasattr(len, '__call__'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000152 def f(): pass
Guido van Rossumd59da4b2007-05-22 18:11:13 +0000153 self.assert_(hasattr(f, '__call__'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000154 class C:
155 def meth(self): pass
Guido van Rossumd59da4b2007-05-22 18:11:13 +0000156 self.assert_(hasattr(C, '__call__'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000157 x = C()
Guido van Rossumd59da4b2007-05-22 18:11:13 +0000158 self.assert_(hasattr(x.meth, '__call__'))
159 self.assert_(not hasattr(x, '__call__'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000160 class D(C):
161 def __call__(self): pass
162 y = D()
Guido van Rossumd59da4b2007-05-22 18:11:13 +0000163 self.assert_(hasattr(y, '__call__'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000164 y()
165
166 def test_chr(self):
167 self.assertEqual(chr(32), ' ')
168 self.assertEqual(chr(65), 'A')
169 self.assertEqual(chr(97), 'a')
170 self.assertEqual(chr(0xff), '\xff')
Guido van Rossum572dbf82007-04-27 23:53:51 +0000171 self.assertRaises(ValueError, chr, 1<<24)
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000172 self.assertEqual(chr(sys.maxunicode),
173 str(('\\U%08x' % (sys.maxunicode)).encode("ascii"),
174 'unicode-escape'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000175 self.assertRaises(TypeError, chr)
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000176 self.assertEqual(chr(0x0000FFFF), "\U0000FFFF")
177 self.assertEqual(chr(0x00010000), "\U00010000")
178 self.assertEqual(chr(0x00010001), "\U00010001")
179 self.assertEqual(chr(0x000FFFFE), "\U000FFFFE")
180 self.assertEqual(chr(0x000FFFFF), "\U000FFFFF")
181 self.assertEqual(chr(0x00100000), "\U00100000")
182 self.assertEqual(chr(0x00100001), "\U00100001")
183 self.assertEqual(chr(0x0010FFFE), "\U0010FFFE")
184 self.assertEqual(chr(0x0010FFFF), "\U0010FFFF")
185 self.assertRaises(ValueError, chr, -1)
186 self.assertRaises(ValueError, chr, 0x00110000)
Walter Dörwald919497e2003-01-19 16:23:59 +0000187
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000188 def test_cmp(self):
Walter Dörwald919497e2003-01-19 16:23:59 +0000189 self.assertEqual(cmp(-1, 1), -1)
190 self.assertEqual(cmp(1, -1), 1)
191 self.assertEqual(cmp(1, 1), 0)
Armin Rigo2b3eb402003-10-28 12:05:48 +0000192 # verify that circular objects are not handled
Walter Dörwald919497e2003-01-19 16:23:59 +0000193 a = []; a.append(a)
194 b = []; b.append(b)
195 from UserList import UserList
196 c = UserList(); c.append(c)
Armin Rigo2b3eb402003-10-28 12:05:48 +0000197 self.assertRaises(RuntimeError, cmp, a, b)
198 self.assertRaises(RuntimeError, cmp, b, c)
199 self.assertRaises(RuntimeError, cmp, c, a)
200 self.assertRaises(RuntimeError, cmp, a, c)
201 # okay, now break the cycles
Walter Dörwald919497e2003-01-19 16:23:59 +0000202 a.pop(); b.pop(); c.pop()
203 self.assertRaises(TypeError, cmp)
204
Walter Dörwald919497e2003-01-19 16:23:59 +0000205 def test_compile(self):
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000206 compile('print(1)\n', '', 'exec')
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000207## bom = b'\xef\xbb\xbf'
208## compile(bom + b'print(1)\n', '', 'exec')
Guido van Rossumd8faa362007-04-27 19:54:29 +0000209 compile(source='pass', filename='?', mode='exec')
210 compile(dont_inherit=0, filename='tmp', source='0', mode='eval')
211 compile('pass', '?', dont_inherit=1, mode='exec')
Walter Dörwald919497e2003-01-19 16:23:59 +0000212 self.assertRaises(TypeError, compile)
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000213 self.assertRaises(ValueError, compile, 'print(42)\n', '<string>', 'badmode')
214 self.assertRaises(ValueError, compile, 'print(42)\n', '<string>', 'single', 0xff)
Neal Norwitzfcf44352005-11-27 20:37:43 +0000215 self.assertRaises(TypeError, compile, chr(0), 'f', 'exec')
Guido van Rossumd8faa362007-04-27 19:54:29 +0000216 self.assertRaises(TypeError, compile, 'pass', '?', 'exec',
217 mode='eval', source='0', filename='tmp')
Walter Dörwald1f5947b2007-05-22 16:52:54 +0000218 compile('print("\xe5")\n', '', 'exec')
219 self.assertRaises(TypeError, compile, chr(0), 'f', 'exec')
220 self.assertRaises(ValueError, compile, str('a = 1'), 'f', 'bad')
Guido van Rossumd8faa362007-04-27 19:54:29 +0000221
Walter Dörwald919497e2003-01-19 16:23:59 +0000222 def test_delattr(self):
223 import sys
224 sys.spam = 1
225 delattr(sys, 'spam')
226 self.assertRaises(TypeError, delattr)
227
228 def test_dir(self):
Georg Brandle32b4222007-03-10 22:13:27 +0000229 # dir(wrong number of arguments)
Walter Dörwald919497e2003-01-19 16:23:59 +0000230 self.assertRaises(TypeError, dir, 42, 42)
231
Georg Brandle32b4222007-03-10 22:13:27 +0000232 # dir() - local scope
233 local_var = 1
234 self.assert_('local_var' in dir())
235
236 # dir(module)
237 import sys
238 self.assert_('exit' in dir(sys))
239
240 # dir(module_with_invalid__dict__)
241 import types
242 class Foo(types.ModuleType):
243 __dict__ = 8
244 f = Foo("foo")
245 self.assertRaises(TypeError, dir, f)
246
247 # dir(type)
248 self.assert_("strip" in dir(str))
249 self.assert_("__mro__" not in dir(str))
250
251 # dir(obj)
252 class Foo(object):
253 def __init__(self):
254 self.x = 7
255 self.y = 8
256 self.z = 9
257 f = Foo()
258 self.assert_("y" in dir(f))
259
260 # dir(obj_no__dict__)
261 class Foo(object):
262 __slots__ = []
263 f = Foo()
264 self.assert_("__repr__" in dir(f))
265
266 # dir(obj_no__class__with__dict__)
267 # (an ugly trick to cause getattr(f, "__class__") to fail)
268 class Foo(object):
269 __slots__ = ["__class__", "__dict__"]
270 def __init__(self):
271 self.bar = "wow"
272 f = Foo()
273 self.assert_("__repr__" not in dir(f))
274 self.assert_("bar" in dir(f))
275
276 # dir(obj_using __dir__)
277 class Foo(object):
278 def __dir__(self):
279 return ["kan", "ga", "roo"]
280 f = Foo()
281 self.assert_(dir(f) == ["ga", "kan", "roo"])
282
283 # dir(obj__dir__not_list)
284 class Foo(object):
285 def __dir__(self):
286 return 7
287 f = Foo()
288 self.assertRaises(TypeError, dir, f)
289
Walter Dörwald919497e2003-01-19 16:23:59 +0000290 def test_divmod(self):
291 self.assertEqual(divmod(12, 7), (1, 5))
292 self.assertEqual(divmod(-12, 7), (-2, 2))
293 self.assertEqual(divmod(12, -7), (-2, -2))
294 self.assertEqual(divmod(-12, -7), (1, -5))
295
Guido van Rossume2a383d2007-01-15 16:59:06 +0000296 self.assertEqual(divmod(12, 7), (1, 5))
297 self.assertEqual(divmod(-12, 7), (-2, 2))
298 self.assertEqual(divmod(12, -7), (-2, -2))
299 self.assertEqual(divmod(-12, -7), (1, -5))
Walter Dörwald919497e2003-01-19 16:23:59 +0000300
Guido van Rossume2a383d2007-01-15 16:59:06 +0000301 self.assertEqual(divmod(12, 7), (1, 5))
302 self.assertEqual(divmod(-12, 7), (-2, 2))
303 self.assertEqual(divmod(12, -7), (-2, -2))
304 self.assertEqual(divmod(-12, -7), (1, -5))
Walter Dörwald919497e2003-01-19 16:23:59 +0000305
Raymond Hettinger5ea7e312004-09-30 07:47:20 +0000306 self.assertEqual(divmod(-sys.maxint-1, -1),
307 (sys.maxint+1, 0))
308
Walter Dörwald919497e2003-01-19 16:23:59 +0000309 self.assert_(not fcmp(divmod(3.25, 1.0), (3.0, 0.25)))
310 self.assert_(not fcmp(divmod(-3.25, 1.0), (-4.0, 0.75)))
311 self.assert_(not fcmp(divmod(3.25, -1.0), (-4.0, -0.75)))
312 self.assert_(not fcmp(divmod(-3.25, -1.0), (3.0, -0.25)))
313
314 self.assertRaises(TypeError, divmod)
315
316 def test_eval(self):
317 self.assertEqual(eval('1+1'), 2)
318 self.assertEqual(eval(' 1+1\n'), 2)
319 globals = {'a': 1, 'b': 2}
320 locals = {'b': 200, 'c': 300}
321 self.assertEqual(eval('a', globals) , 1)
322 self.assertEqual(eval('a', globals, locals), 1)
323 self.assertEqual(eval('b', globals, locals), 200)
324 self.assertEqual(eval('c', globals, locals), 300)
Walter Dörwald919497e2003-01-19 16:23:59 +0000325 globals = {'a': 1, 'b': 2}
326 locals = {'b': 200, 'c': 300}
Walter Dörwald1f5947b2007-05-22 16:52:54 +0000327## bom = b'\xef\xbb\xbf'
328## self.assertEqual(eval(bom + b'a', globals, locals), 1)
329 self.assertEqual(eval('"\xe5"', globals), "\xe5")
Walter Dörwald919497e2003-01-19 16:23:59 +0000330 self.assertRaises(TypeError, eval)
331 self.assertRaises(TypeError, eval, ())
332
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000333 def test_general_eval(self):
334 # Tests that general mappings can be used for the locals argument
335
336 class M:
337 "Test mapping interface versus possible calls from eval()."
338 def __getitem__(self, key):
339 if key == 'a':
340 return 12
341 raise KeyError
Guido van Rossumcd70eee2007-02-11 18:53:00 +0000342 def keys(self):
343 return list('xyz')
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000344
345 m = M()
346 g = globals()
347 self.assertEqual(eval('a', g, m), 12)
348 self.assertRaises(NameError, eval, 'b', g, m)
349 self.assertEqual(eval('dir()', g, m), list('xyz'))
350 self.assertEqual(eval('globals()', g, m), g)
351 self.assertEqual(eval('locals()', g, m), m)
Raymond Hettinger513ffe82004-07-06 13:44:41 +0000352 self.assertRaises(TypeError, eval, 'a', m)
Raymond Hettinger66bd2332004-08-02 08:30:07 +0000353 class A:
354 "Non-mapping"
355 pass
356 m = A()
357 self.assertRaises(TypeError, eval, 'a', g, m)
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000358
359 # Verify that dict subclasses work as well
360 class D(dict):
361 def __getitem__(self, key):
362 if key == 'a':
363 return 12
364 return dict.__getitem__(self, key)
Guido van Rossumcd70eee2007-02-11 18:53:00 +0000365 def keys(self):
366 return list('xyz')
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000367
368 d = D()
369 self.assertEqual(eval('a', g, d), 12)
370 self.assertRaises(NameError, eval, 'b', g, d)
371 self.assertEqual(eval('dir()', g, d), list('xyz'))
372 self.assertEqual(eval('globals()', g, d), g)
373 self.assertEqual(eval('locals()', g, d), d)
374
375 # Verify locals stores (used by list comps)
376 eval('[locals() for i in (2,3)]', g, d)
377 eval('[locals() for i in (2,3)]', g, UserDict.UserDict())
378
379 class SpreadSheet:
380 "Sample application showing nested, calculated lookups."
381 _cells = {}
382 def __setitem__(self, key, formula):
383 self._cells[key] = formula
Thomas Wouters73e5a5b2006-06-08 15:35:45 +0000384 def __getitem__(self, key):
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000385 return eval(self._cells[key], globals(), self)
386
387 ss = SpreadSheet()
388 ss['a1'] = '5'
389 ss['a2'] = 'a1*6'
390 ss['a3'] = 'a2*7'
391 self.assertEqual(ss['a3'], 210)
392
Raymond Hettinger2a7dede2004-08-07 04:55:30 +0000393 # Verify that dir() catches a non-list returned by eval
394 # SF bug #1004669
395 class C:
396 def __getitem__(self, item):
397 raise KeyError(item)
Guido van Rossumcd70eee2007-02-11 18:53:00 +0000398 def keys(self):
399 return 1 # used to be 'a' but that's no longer an error
Raymond Hettinger2a7dede2004-08-07 04:55:30 +0000400 self.assertRaises(TypeError, eval, 'dir()', globals(), C())
401
Walter Dörwald919497e2003-01-19 16:23:59 +0000402 # Done outside of the method test_z to get the correct scope
403 z = 0
404 f = open(TESTFN, 'w')
405 f.write('z = z+1\n')
406 f.write('z = z*2\n')
407 f.close()
408 execfile(TESTFN)
409
410 def test_execfile(self):
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +0000411 global numruns
412 if numruns:
413 return
414 numruns += 1
Tim Peters7f061872004-12-07 21:17:46 +0000415
Walter Dörwald919497e2003-01-19 16:23:59 +0000416 globals = {'a': 1, 'b': 2}
417 locals = {'b': 200, 'c': 300}
418
419 self.assertEqual(self.__class__.z, 2)
420 globals['z'] = 0
421 execfile(TESTFN, globals)
422 self.assertEqual(globals['z'], 2)
423 locals['z'] = 0
424 execfile(TESTFN, globals, locals)
425 self.assertEqual(locals['z'], 2)
Raymond Hettinger66bd2332004-08-02 08:30:07 +0000426
427 class M:
428 "Test mapping interface versus possible calls from execfile()."
429 def __init__(self):
430 self.z = 10
431 def __getitem__(self, key):
432 if key == 'z':
433 return self.z
434 raise KeyError
435 def __setitem__(self, key, value):
436 if key == 'z':
437 self.z = value
438 return
439 raise KeyError
440
441 locals = M()
442 locals['z'] = 0
443 execfile(TESTFN, globals, locals)
444 self.assertEqual(locals['z'], 2)
445
Walter Dörwald919497e2003-01-19 16:23:59 +0000446 unlink(TESTFN)
447 self.assertRaises(TypeError, execfile)
Neal Norwitzfcf44352005-11-27 20:37:43 +0000448 self.assertRaises(TypeError, execfile, TESTFN, {}, ())
Walter Dörwald919497e2003-01-19 16:23:59 +0000449 import os
450 self.assertRaises(IOError, execfile, os.curdir)
451 self.assertRaises(IOError, execfile, "I_dont_exist")
452
Georg Brandl7cae87c2006-09-06 06:51:57 +0000453 def test_exec(self):
454 g = {}
455 exec('z = 1', g)
456 if '__builtins__' in g:
457 del g['__builtins__']
458 self.assertEqual(g, {'z': 1})
459
Guido van Rossumef87d6e2007-05-02 19:09:54 +0000460 exec('z = 1+1', g)
Georg Brandl7cae87c2006-09-06 06:51:57 +0000461 if '__builtins__' in g:
462 del g['__builtins__']
463 self.assertEqual(g, {'z': 2})
464 g = {}
465 l = {}
466
467 import warnings
468 warnings.filterwarnings("ignore", "global statement", module="<string>")
469 exec('global a; a = 1; b = 2', g, l)
470 if '__builtins__' in g:
471 del g['__builtins__']
472 if '__builtins__' in l:
473 del l['__builtins__']
474 self.assertEqual((g, l), ({'a': 1}, {'b': 2}))
475
Walter Dörwald919497e2003-01-19 16:23:59 +0000476 def test_filter(self):
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000477 self.assertEqual(list(filter(lambda c: 'a' <= c <= 'z', 'Hello World')), list('elloorld'))
478 self.assertEqual(list(filter(None, [1, 'hello', [], [3], '', None, 9, 0])), [1, 'hello', [3], 9])
479 self.assertEqual(list(filter(lambda x: x > 0, [1, -3, 9, 0, 2])), [1, 9, 2])
480 self.assertEqual(list(filter(None, Squares(10))), [1, 4, 9, 16, 25, 36, 49, 64, 81])
481 self.assertEqual(list(filter(lambda x: x%2, Squares(10))), [1, 9, 25, 49, 81])
Walter Dörwald919497e2003-01-19 16:23:59 +0000482 def identity(item):
483 return 1
484 filter(identity, Squares(5))
485 self.assertRaises(TypeError, filter)
486 class BadSeq(object):
Tim Petersf2715e02003-02-19 02:35:07 +0000487 def __getitem__(self, index):
488 if index<4:
489 return 42
490 raise ValueError
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000491 self.assertRaises(ValueError, list, filter(lambda x: x, BadSeq()))
Walter Dörwald919497e2003-01-19 16:23:59 +0000492 def badfunc():
493 pass
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000494 self.assertRaises(TypeError, list, filter(badfunc, range(5)))
Walter Dörwald919497e2003-01-19 16:23:59 +0000495
Walter Dörwaldbf517072003-01-27 15:57:14 +0000496 # test bltinmodule.c::filtertuple()
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000497 self.assertEqual(list(filter(None, (1, 2))), [1, 2])
498 self.assertEqual(list(filter(lambda x: x>=3, (1, 2, 3, 4))), [3, 4])
499 self.assertRaises(TypeError, list, filter(42, (1, 2)))
Walter Dörwaldc3da83f2003-02-04 20:24:45 +0000500
Walter Dörwald919497e2003-01-19 16:23:59 +0000501 def test_float(self):
502 self.assertEqual(float(3.14), 3.14)
503 self.assertEqual(float(314), 314.0)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000504 self.assertEqual(float(314), 314.0)
Walter Dörwald919497e2003-01-19 16:23:59 +0000505 self.assertEqual(float(" 3.14 "), 3.14)
Neal Norwitze7214a12005-12-18 05:03:17 +0000506 self.assertRaises(ValueError, float, " 0x3.1 ")
507 self.assertRaises(ValueError, float, " -0x3.p-1 ")
Walter Dörwald1f5947b2007-05-22 16:52:54 +0000508 self.assertEqual(float(str(b" \u0663.\u0661\u0664 ",'raw-unicode-escape')), 3.14)
509 self.assertEqual(float("1"*10000), 1e10000) # Inf on both sides
Walter Dörwald919497e2003-01-19 16:23:59 +0000510
Thomas Wouters477c8d52006-05-27 19:21:47 +0000511 @run_with_locale('LC_NUMERIC', 'fr_FR', 'de_DE')
Neal Norwitz5898fa22005-11-22 05:17:40 +0000512 def test_float_with_comma(self):
513 # set locale to something that doesn't use '.' for the decimal point
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000514 # float must not accept the locale specific decimal point but
515 # it still has to accept the normal python syntac
Thomas Wouters477c8d52006-05-27 19:21:47 +0000516 import locale
517 if not locale.localeconv()['decimal_point'] == ',':
Neal Norwitz5898fa22005-11-22 05:17:40 +0000518 return
519
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000520 self.assertEqual(float(" 3.14 "), 3.14)
521 self.assertEqual(float("+3.14 "), 3.14)
522 self.assertEqual(float("-3.14 "), -3.14)
523 self.assertEqual(float(".14 "), .14)
524 self.assertEqual(float("3. "), 3.0)
525 self.assertEqual(float("3.e3 "), 3000.0)
526 self.assertEqual(float("3.2e3 "), 3200.0)
527 self.assertEqual(float("2.5e-1 "), 0.25)
528 self.assertEqual(float("5e-1"), 0.5)
529 self.assertRaises(ValueError, float, " 3,14 ")
530 self.assertRaises(ValueError, float, " +3,14 ")
531 self.assertRaises(ValueError, float, " -3,14 ")
Thomas Wouters477c8d52006-05-27 19:21:47 +0000532 self.assertRaises(ValueError, float, " 0x3.1 ")
533 self.assertRaises(ValueError, float, " -0x3.p-1 ")
534 self.assertEqual(float(" 25.e-1 "), 2.5)
535 self.assertEqual(fcmp(float(" .25e-1 "), .025), 0)
Neal Norwitz5898fa22005-11-22 05:17:40 +0000536
Brett Cannonc3647ac2005-04-26 03:45:26 +0000537 def test_floatconversion(self):
538 # Make sure that calls to __float__() work properly
539 class Foo0:
540 def __float__(self):
541 return 42.
542
543 class Foo1(object):
544 def __float__(self):
545 return 42.
546
547 class Foo2(float):
548 def __float__(self):
549 return 42.
550
551 class Foo3(float):
552 def __new__(cls, value=0.):
553 return float.__new__(cls, 2*value)
554
555 def __float__(self):
556 return self
557
558 class Foo4(float):
559 def __float__(self):
560 return 42
561
562 self.assertAlmostEqual(float(Foo0()), 42.)
563 self.assertAlmostEqual(float(Foo1()), 42.)
564 self.assertAlmostEqual(float(Foo2()), 42.)
565 self.assertAlmostEqual(float(Foo3(21)), 42.)
566 self.assertRaises(TypeError, float, Foo4(42))
567
Walter Dörwald919497e2003-01-19 16:23:59 +0000568 def test_getattr(self):
569 import sys
570 self.assert_(getattr(sys, 'stdout') is sys.stdout)
571 self.assertRaises(TypeError, getattr, sys, 1)
572 self.assertRaises(TypeError, getattr, sys, 1, "foo")
573 self.assertRaises(TypeError, getattr)
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000574 self.assertRaises(AttributeError, getattr, sys, chr(sys.maxunicode))
Walter Dörwald919497e2003-01-19 16:23:59 +0000575
576 def test_hasattr(self):
577 import sys
578 self.assert_(hasattr(sys, 'stdout'))
579 self.assertRaises(TypeError, hasattr, sys, 1)
580 self.assertRaises(TypeError, hasattr)
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000581 self.assertEqual(False, hasattr(sys, chr(sys.maxunicode)))
Walter Dörwald919497e2003-01-19 16:23:59 +0000582
583 def test_hash(self):
584 hash(None)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000585 self.assertEqual(hash(1), hash(1))
Walter Dörwald919497e2003-01-19 16:23:59 +0000586 self.assertEqual(hash(1), hash(1.0))
587 hash('spam')
Walter Dörwald1f5947b2007-05-22 16:52:54 +0000588 self.assertEqual(hash('spam'), hash(str8('spam')))
Walter Dörwald919497e2003-01-19 16:23:59 +0000589 hash((0,1,2,3))
590 def f(): pass
591 self.assertRaises(TypeError, hash, [])
592 self.assertRaises(TypeError, hash, {})
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000593 # Bug 1536021: Allow hash to return long objects
594 class X:
595 def __hash__(self):
596 return 2**100
597 self.assertEquals(type(hash(X())), int)
598 class Y(object):
599 def __hash__(self):
600 return 2**100
601 self.assertEquals(type(hash(Y())), int)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000602 class Z(int):
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000603 def __hash__(self):
604 return self
Guido van Rossume2a383d2007-01-15 16:59:06 +0000605 self.assertEquals(hash(Z(42)), hash(42))
Walter Dörwald919497e2003-01-19 16:23:59 +0000606
607 def test_hex(self):
608 self.assertEqual(hex(16), '0x10')
Guido van Rossume2a383d2007-01-15 16:59:06 +0000609 self.assertEqual(hex(16), '0x10')
Guido van Rossum6c9e1302003-11-29 23:52:13 +0000610 self.assertEqual(hex(-16), '-0x10')
Guido van Rossume2a383d2007-01-15 16:59:06 +0000611 self.assertEqual(hex(-16), '-0x10')
Walter Dörwald919497e2003-01-19 16:23:59 +0000612 self.assertRaises(TypeError, hex, {})
613
614 def test_id(self):
615 id(None)
616 id(1)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000617 id(1)
Walter Dörwald919497e2003-01-19 16:23:59 +0000618 id(1.0)
619 id('spam')
620 id((0,1,2,3))
621 id([0,1,2,3])
622 id({'spam': 1, 'eggs': 2, 'ham': 3})
623
Guido van Rossuma88a0332007-02-26 16:59:55 +0000624 # Test input() later, alphabetized as if it were raw_input
625
Walter Dörwald919497e2003-01-19 16:23:59 +0000626 def test_int(self):
627 self.assertEqual(int(314), 314)
628 self.assertEqual(int(3.14), 3)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000629 self.assertEqual(int(314), 314)
Walter Dörwald919497e2003-01-19 16:23:59 +0000630 # Check that conversion from float truncates towards zero
631 self.assertEqual(int(-3.14), -3)
632 self.assertEqual(int(3.9), 3)
633 self.assertEqual(int(-3.9), -3)
634 self.assertEqual(int(3.5), 3)
635 self.assertEqual(int(-3.5), -3)
636 # Different base:
Guido van Rossume2a383d2007-01-15 16:59:06 +0000637 self.assertEqual(int("10",16), 16)
Walter Dörwald919497e2003-01-19 16:23:59 +0000638 # Test conversion from strings and various anomalies
639 for s, v in L:
640 for sign in "", "+", "-":
641 for prefix in "", " ", "\t", " \t\t ":
642 ss = prefix + sign + s
643 vv = v
644 if sign == "-" and v is not ValueError:
645 vv = -v
646 try:
647 self.assertEqual(int(ss), vv)
648 except v:
649 pass
650
Walter Dörwald70a6b492004-02-12 17:35:32 +0000651 s = repr(-1-sys.maxint)
Thomas Wouters89f507f2006-12-13 04:49:30 +0000652 x = int(s)
653 self.assertEqual(x+1, -sys.maxint)
654 self.assert_(isinstance(x, int))
Walter Dörwald919497e2003-01-19 16:23:59 +0000655 # should return long
Thomas Wouters89f507f2006-12-13 04:49:30 +0000656 self.assertEqual(int(s[1:]), sys.maxint+1)
Walter Dörwald919497e2003-01-19 16:23:59 +0000657
658 # should return long
659 x = int(1e100)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000660 self.assert_(isinstance(x, int))
Walter Dörwald919497e2003-01-19 16:23:59 +0000661 x = int(-1e100)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000662 self.assert_(isinstance(x, int))
Walter Dörwald919497e2003-01-19 16:23:59 +0000663
664
665 # SF bug 434186: 0x80000000/2 != 0x80000000>>1.
666 # Worked by accident in Windows release build, but failed in debug build.
667 # Failed in all Linux builds.
668 x = -1-sys.maxint
669 self.assertEqual(x >> 1, x//2)
670
671 self.assertRaises(ValueError, int, '123\0')
672 self.assertRaises(ValueError, int, '53', 40)
673
Thomas Wouters89f507f2006-12-13 04:49:30 +0000674 # SF bug 1545497: embedded NULs were not detected with
675 # explicit base
676 self.assertRaises(ValueError, int, '123\0', 10)
677 self.assertRaises(ValueError, int, '123\x00 245', 20)
678
Walter Dörwald919497e2003-01-19 16:23:59 +0000679 x = int('1' * 600)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000680 self.assert_(isinstance(x, int))
Walter Dörwald919497e2003-01-19 16:23:59 +0000681
Walter Dörwald1f5947b2007-05-22 16:52:54 +0000682 x = int(chr(0x661) * 600)
683 self.assert_(isinstance(x, int))
Walter Dörwald919497e2003-01-19 16:23:59 +0000684
685 self.assertRaises(TypeError, int, 1, 12)
686
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000687 # tests with base 0
688 self.assertRaises(ValueError, int, ' 0123 ', 0) # old octal syntax
689 self.assertEqual(int('000', 0), 0)
690 self.assertEqual(int('0o123', 0), 83)
691 self.assertEqual(int('0x123', 0), 291)
692 self.assertEqual(int('0b100', 0), 4)
693 self.assertEqual(int(' 0O123 ', 0), 83)
694 self.assertEqual(int(' 0X123 ', 0), 291)
695 self.assertEqual(int(' 0B100 ', 0), 4)
696
697 # without base still base 10
698 self.assertEqual(int('0123'), 123)
699 self.assertEqual(int('0123', 10), 123)
700
701 # tests with prefix and base != 0
Neal Norwitz5898fa22005-11-22 05:17:40 +0000702 self.assertEqual(int('0x123', 16), 291)
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000703 self.assertEqual(int('0o123', 8), 83)
704 self.assertEqual(int('0b100', 2), 4)
705 self.assertEqual(int('0X123', 16), 291)
706 self.assertEqual(int('0O123', 8), 83)
707 self.assertEqual(int('0B100', 2), 4)
Walter Dörwald919497e2003-01-19 16:23:59 +0000708
Thomas Wouters477c8d52006-05-27 19:21:47 +0000709 # SF bug 1334662: int(string, base) wrong answers
710 # Various representations of 2**32 evaluated to 0
711 # rather than 2**32 in previous versions
712
Guido van Rossume2a383d2007-01-15 16:59:06 +0000713 self.assertEqual(int('100000000000000000000000000000000', 2), 4294967296)
714 self.assertEqual(int('102002022201221111211', 3), 4294967296)
715 self.assertEqual(int('10000000000000000', 4), 4294967296)
716 self.assertEqual(int('32244002423141', 5), 4294967296)
717 self.assertEqual(int('1550104015504', 6), 4294967296)
718 self.assertEqual(int('211301422354', 7), 4294967296)
719 self.assertEqual(int('40000000000', 8), 4294967296)
720 self.assertEqual(int('12068657454', 9), 4294967296)
721 self.assertEqual(int('4294967296', 10), 4294967296)
722 self.assertEqual(int('1904440554', 11), 4294967296)
723 self.assertEqual(int('9ba461594', 12), 4294967296)
724 self.assertEqual(int('535a79889', 13), 4294967296)
725 self.assertEqual(int('2ca5b7464', 14), 4294967296)
726 self.assertEqual(int('1a20dcd81', 15), 4294967296)
727 self.assertEqual(int('100000000', 16), 4294967296)
728 self.assertEqual(int('a7ffda91', 17), 4294967296)
729 self.assertEqual(int('704he7g4', 18), 4294967296)
730 self.assertEqual(int('4f5aff66', 19), 4294967296)
731 self.assertEqual(int('3723ai4g', 20), 4294967296)
732 self.assertEqual(int('281d55i4', 21), 4294967296)
733 self.assertEqual(int('1fj8b184', 22), 4294967296)
734 self.assertEqual(int('1606k7ic', 23), 4294967296)
735 self.assertEqual(int('mb994ag', 24), 4294967296)
736 self.assertEqual(int('hek2mgl', 25), 4294967296)
737 self.assertEqual(int('dnchbnm', 26), 4294967296)
738 self.assertEqual(int('b28jpdm', 27), 4294967296)
739 self.assertEqual(int('8pfgih4', 28), 4294967296)
740 self.assertEqual(int('76beigg', 29), 4294967296)
741 self.assertEqual(int('5qmcpqg', 30), 4294967296)
742 self.assertEqual(int('4q0jto4', 31), 4294967296)
743 self.assertEqual(int('4000000', 32), 4294967296)
744 self.assertEqual(int('3aokq94', 33), 4294967296)
745 self.assertEqual(int('2qhxjli', 34), 4294967296)
746 self.assertEqual(int('2br45qb', 35), 4294967296)
747 self.assertEqual(int('1z141z4', 36), 4294967296)
Thomas Wouters477c8d52006-05-27 19:21:47 +0000748
749 # SF bug 1334662: int(string, base) wrong answers
750 # Checks for proper evaluation of 2**32 + 1
Guido van Rossume2a383d2007-01-15 16:59:06 +0000751 self.assertEqual(int('100000000000000000000000000000001', 2), 4294967297)
752 self.assertEqual(int('102002022201221111212', 3), 4294967297)
753 self.assertEqual(int('10000000000000001', 4), 4294967297)
754 self.assertEqual(int('32244002423142', 5), 4294967297)
755 self.assertEqual(int('1550104015505', 6), 4294967297)
756 self.assertEqual(int('211301422355', 7), 4294967297)
757 self.assertEqual(int('40000000001', 8), 4294967297)
758 self.assertEqual(int('12068657455', 9), 4294967297)
759 self.assertEqual(int('4294967297', 10), 4294967297)
760 self.assertEqual(int('1904440555', 11), 4294967297)
761 self.assertEqual(int('9ba461595', 12), 4294967297)
762 self.assertEqual(int('535a7988a', 13), 4294967297)
763 self.assertEqual(int('2ca5b7465', 14), 4294967297)
764 self.assertEqual(int('1a20dcd82', 15), 4294967297)
765 self.assertEqual(int('100000001', 16), 4294967297)
766 self.assertEqual(int('a7ffda92', 17), 4294967297)
767 self.assertEqual(int('704he7g5', 18), 4294967297)
768 self.assertEqual(int('4f5aff67', 19), 4294967297)
769 self.assertEqual(int('3723ai4h', 20), 4294967297)
770 self.assertEqual(int('281d55i5', 21), 4294967297)
771 self.assertEqual(int('1fj8b185', 22), 4294967297)
772 self.assertEqual(int('1606k7id', 23), 4294967297)
773 self.assertEqual(int('mb994ah', 24), 4294967297)
774 self.assertEqual(int('hek2mgm', 25), 4294967297)
775 self.assertEqual(int('dnchbnn', 26), 4294967297)
776 self.assertEqual(int('b28jpdn', 27), 4294967297)
777 self.assertEqual(int('8pfgih5', 28), 4294967297)
778 self.assertEqual(int('76beigh', 29), 4294967297)
779 self.assertEqual(int('5qmcpqh', 30), 4294967297)
780 self.assertEqual(int('4q0jto5', 31), 4294967297)
781 self.assertEqual(int('4000001', 32), 4294967297)
782 self.assertEqual(int('3aokq95', 33), 4294967297)
783 self.assertEqual(int('2qhxjlj', 34), 4294967297)
784 self.assertEqual(int('2br45qc', 35), 4294967297)
785 self.assertEqual(int('1z141z5', 36), 4294967297)
Thomas Wouters477c8d52006-05-27 19:21:47 +0000786
Brett Cannonc3647ac2005-04-26 03:45:26 +0000787 def test_intconversion(self):
788 # Test __int__()
789 class Foo0:
790 def __int__(self):
791 return 42
792
793 class Foo1(object):
794 def __int__(self):
795 return 42
796
797 class Foo2(int):
798 def __int__(self):
799 return 42
800
801 class Foo3(int):
802 def __int__(self):
803 return self
804
805 class Foo4(int):
806 def __int__(self):
Guido van Rossume2a383d2007-01-15 16:59:06 +0000807 return 42
Brett Cannonc3647ac2005-04-26 03:45:26 +0000808
809 class Foo5(int):
810 def __int__(self):
811 return 42.
812
813 self.assertEqual(int(Foo0()), 42)
814 self.assertEqual(int(Foo1()), 42)
815 self.assertEqual(int(Foo2()), 42)
816 self.assertEqual(int(Foo3()), 0)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000817 self.assertEqual(int(Foo4()), 42)
Brett Cannonc3647ac2005-04-26 03:45:26 +0000818 self.assertRaises(TypeError, int, Foo5())
819
Walter Dörwald919497e2003-01-19 16:23:59 +0000820 def test_iter(self):
821 self.assertRaises(TypeError, iter)
822 self.assertRaises(TypeError, iter, 42, 42)
823 lists = [("1", "2"), ["1", "2"], "12"]
Walter Dörwald919497e2003-01-19 16:23:59 +0000824 for l in lists:
825 i = iter(l)
Georg Brandla18af4e2007-04-21 15:47:16 +0000826 self.assertEqual(next(i), '1')
827 self.assertEqual(next(i), '2')
828 self.assertRaises(StopIteration, next, i)
Walter Dörwald919497e2003-01-19 16:23:59 +0000829
830 def test_isinstance(self):
831 class C:
832 pass
833 class D(C):
834 pass
835 class E:
836 pass
837 c = C()
838 d = D()
839 e = E()
840 self.assert_(isinstance(c, C))
841 self.assert_(isinstance(d, C))
842 self.assert_(not isinstance(e, C))
843 self.assert_(not isinstance(c, D))
844 self.assert_(not isinstance('foo', E))
845 self.assertRaises(TypeError, isinstance, E, 'foo')
846 self.assertRaises(TypeError, isinstance)
847
848 def test_issubclass(self):
849 class C:
850 pass
851 class D(C):
852 pass
853 class E:
854 pass
855 c = C()
856 d = D()
857 e = E()
858 self.assert_(issubclass(D, C))
859 self.assert_(issubclass(C, C))
860 self.assert_(not issubclass(C, D))
861 self.assertRaises(TypeError, issubclass, 'foo', E)
862 self.assertRaises(TypeError, issubclass, E, 'foo')
863 self.assertRaises(TypeError, issubclass)
864
865 def test_len(self):
866 self.assertEqual(len('123'), 3)
867 self.assertEqual(len(()), 0)
868 self.assertEqual(len((1, 2, 3, 4)), 4)
869 self.assertEqual(len([1, 2, 3, 4]), 4)
870 self.assertEqual(len({}), 0)
871 self.assertEqual(len({'a':1, 'b': 2}), 2)
872 class BadSeq:
873 def __len__(self):
874 raise ValueError
875 self.assertRaises(ValueError, len, BadSeq())
876
877 def test_list(self):
878 self.assertEqual(list([]), [])
879 l0_3 = [0, 1, 2, 3]
880 l0_3_bis = list(l0_3)
881 self.assertEqual(l0_3, l0_3_bis)
882 self.assert_(l0_3 is not l0_3_bis)
883 self.assertEqual(list(()), [])
884 self.assertEqual(list((0, 1, 2, 3)), [0, 1, 2, 3])
885 self.assertEqual(list(''), [])
886 self.assertEqual(list('spam'), ['s', 'p', 'a', 'm'])
887
888 if sys.maxint == 0x7fffffff:
889 # This test can currently only work on 32-bit machines.
890 # XXX If/when PySequence_Length() returns a ssize_t, it should be
891 # XXX re-enabled.
892 # Verify clearing of bug #556025.
893 # This assumes that the max data size (sys.maxint) == max
894 # address size this also assumes that the address size is at
895 # least 4 bytes with 8 byte addresses, the bug is not well
896 # tested
897 #
898 # Note: This test is expected to SEGV under Cygwin 1.3.12 or
899 # earlier due to a newlib bug. See the following mailing list
900 # thread for the details:
901
902 # http://sources.redhat.com/ml/newlib/2002/msg00369.html
Guido van Rossum805365e2007-05-07 22:24:25 +0000903 self.assertRaises(MemoryError, list, range(sys.maxint // 2))
Walter Dörwald919497e2003-01-19 16:23:59 +0000904
Raymond Hettingeraa241e02004-09-26 19:24:20 +0000905 # This code used to segfault in Py2.4a3
906 x = []
907 x.extend(-y for y in x)
908 self.assertEqual(x, [])
909
Walter Dörwald919497e2003-01-19 16:23:59 +0000910 def test_long(self):
Guido van Rossume2a383d2007-01-15 16:59:06 +0000911 self.assertEqual(int(314), 314)
912 self.assertEqual(int(3.14), 3)
913 self.assertEqual(int(314), 314)
Walter Dörwald919497e2003-01-19 16:23:59 +0000914 # Check that conversion from float truncates towards zero
Guido van Rossume2a383d2007-01-15 16:59:06 +0000915 self.assertEqual(int(-3.14), -3)
916 self.assertEqual(int(3.9), 3)
917 self.assertEqual(int(-3.9), -3)
918 self.assertEqual(int(3.5), 3)
919 self.assertEqual(int(-3.5), -3)
920 self.assertEqual(int("-3"), -3)
Walter Dörwald919497e2003-01-19 16:23:59 +0000921 # Different base:
Guido van Rossume2a383d2007-01-15 16:59:06 +0000922 self.assertEqual(int("10",16), 16)
Walter Dörwald919497e2003-01-19 16:23:59 +0000923 # Check conversions from string (same test set as for int(), and then some)
924 LL = [
Guido van Rossume2a383d2007-01-15 16:59:06 +0000925 ('1' + '0'*20, 10**20),
926 ('1' + '0'*100, 10**100)
Walter Dörwald919497e2003-01-19 16:23:59 +0000927 ]
Walter Dörwald1f5947b2007-05-22 16:52:54 +0000928 for s, v in LL:
Walter Dörwald919497e2003-01-19 16:23:59 +0000929 for sign in "", "+", "-":
930 for prefix in "", " ", "\t", " \t\t ":
931 ss = prefix + sign + s
932 vv = v
933 if sign == "-" and v is not ValueError:
934 vv = -v
935 try:
Guido van Rossume2a383d2007-01-15 16:59:06 +0000936 self.assertEqual(int(ss), int(vv))
Walter Dörwald919497e2003-01-19 16:23:59 +0000937 except v:
938 pass
939
Guido van Rossume2a383d2007-01-15 16:59:06 +0000940 self.assertRaises(ValueError, int, '123\0')
941 self.assertRaises(ValueError, int, '53', 40)
942 self.assertRaises(TypeError, int, 1, 12)
Walter Dörwald919497e2003-01-19 16:23:59 +0000943
Guido van Rossumd8faa362007-04-27 19:54:29 +0000944 # SF patch #1638879: embedded NULs were not detected with
945 # explicit base
946 self.assertRaises(ValueError, int, '123\0', 10)
947 self.assertRaises(ValueError, int, '123\x00 245', 20)
948
Guido van Rossume2a383d2007-01-15 16:59:06 +0000949 self.assertEqual(int('100000000000000000000000000000000', 2),
Thomas Wouters477c8d52006-05-27 19:21:47 +0000950 4294967296)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000951 self.assertEqual(int('102002022201221111211', 3), 4294967296)
952 self.assertEqual(int('10000000000000000', 4), 4294967296)
953 self.assertEqual(int('32244002423141', 5), 4294967296)
954 self.assertEqual(int('1550104015504', 6), 4294967296)
955 self.assertEqual(int('211301422354', 7), 4294967296)
956 self.assertEqual(int('40000000000', 8), 4294967296)
957 self.assertEqual(int('12068657454', 9), 4294967296)
958 self.assertEqual(int('4294967296', 10), 4294967296)
959 self.assertEqual(int('1904440554', 11), 4294967296)
960 self.assertEqual(int('9ba461594', 12), 4294967296)
961 self.assertEqual(int('535a79889', 13), 4294967296)
962 self.assertEqual(int('2ca5b7464', 14), 4294967296)
963 self.assertEqual(int('1a20dcd81', 15), 4294967296)
964 self.assertEqual(int('100000000', 16), 4294967296)
965 self.assertEqual(int('a7ffda91', 17), 4294967296)
966 self.assertEqual(int('704he7g4', 18), 4294967296)
967 self.assertEqual(int('4f5aff66', 19), 4294967296)
968 self.assertEqual(int('3723ai4g', 20), 4294967296)
969 self.assertEqual(int('281d55i4', 21), 4294967296)
970 self.assertEqual(int('1fj8b184', 22), 4294967296)
971 self.assertEqual(int('1606k7ic', 23), 4294967296)
972 self.assertEqual(int('mb994ag', 24), 4294967296)
973 self.assertEqual(int('hek2mgl', 25), 4294967296)
974 self.assertEqual(int('dnchbnm', 26), 4294967296)
975 self.assertEqual(int('b28jpdm', 27), 4294967296)
976 self.assertEqual(int('8pfgih4', 28), 4294967296)
977 self.assertEqual(int('76beigg', 29), 4294967296)
978 self.assertEqual(int('5qmcpqg', 30), 4294967296)
979 self.assertEqual(int('4q0jto4', 31), 4294967296)
980 self.assertEqual(int('4000000', 32), 4294967296)
981 self.assertEqual(int('3aokq94', 33), 4294967296)
982 self.assertEqual(int('2qhxjli', 34), 4294967296)
983 self.assertEqual(int('2br45qb', 35), 4294967296)
984 self.assertEqual(int('1z141z4', 36), 4294967296)
Thomas Wouters477c8d52006-05-27 19:21:47 +0000985
Guido van Rossume2a383d2007-01-15 16:59:06 +0000986 self.assertEqual(int('100000000000000000000000000000001', 2),
Thomas Wouters477c8d52006-05-27 19:21:47 +0000987 4294967297)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000988 self.assertEqual(int('102002022201221111212', 3), 4294967297)
989 self.assertEqual(int('10000000000000001', 4), 4294967297)
990 self.assertEqual(int('32244002423142', 5), 4294967297)
991 self.assertEqual(int('1550104015505', 6), 4294967297)
992 self.assertEqual(int('211301422355', 7), 4294967297)
993 self.assertEqual(int('40000000001', 8), 4294967297)
994 self.assertEqual(int('12068657455', 9), 4294967297)
995 self.assertEqual(int('4294967297', 10), 4294967297)
996 self.assertEqual(int('1904440555', 11), 4294967297)
997 self.assertEqual(int('9ba461595', 12), 4294967297)
998 self.assertEqual(int('535a7988a', 13), 4294967297)
999 self.assertEqual(int('2ca5b7465', 14), 4294967297)
1000 self.assertEqual(int('1a20dcd82', 15), 4294967297)
1001 self.assertEqual(int('100000001', 16), 4294967297)
1002 self.assertEqual(int('a7ffda92', 17), 4294967297)
1003 self.assertEqual(int('704he7g5', 18), 4294967297)
1004 self.assertEqual(int('4f5aff67', 19), 4294967297)
1005 self.assertEqual(int('3723ai4h', 20), 4294967297)
1006 self.assertEqual(int('281d55i5', 21), 4294967297)
1007 self.assertEqual(int('1fj8b185', 22), 4294967297)
1008 self.assertEqual(int('1606k7id', 23), 4294967297)
1009 self.assertEqual(int('mb994ah', 24), 4294967297)
1010 self.assertEqual(int('hek2mgm', 25), 4294967297)
1011 self.assertEqual(int('dnchbnn', 26), 4294967297)
1012 self.assertEqual(int('b28jpdn', 27), 4294967297)
1013 self.assertEqual(int('8pfgih5', 28), 4294967297)
1014 self.assertEqual(int('76beigh', 29), 4294967297)
1015 self.assertEqual(int('5qmcpqh', 30), 4294967297)
1016 self.assertEqual(int('4q0jto5', 31), 4294967297)
1017 self.assertEqual(int('4000001', 32), 4294967297)
1018 self.assertEqual(int('3aokq95', 33), 4294967297)
1019 self.assertEqual(int('2qhxjlj', 34), 4294967297)
1020 self.assertEqual(int('2br45qc', 35), 4294967297)
1021 self.assertEqual(int('1z141z5', 36), 4294967297)
Thomas Wouters477c8d52006-05-27 19:21:47 +00001022
1023
Brett Cannonc3647ac2005-04-26 03:45:26 +00001024 def test_longconversion(self):
1025 # Test __long__()
1026 class Foo0:
1027 def __long__(self):
Guido van Rossume2a383d2007-01-15 16:59:06 +00001028 return 42
Brett Cannonc3647ac2005-04-26 03:45:26 +00001029
1030 class Foo1(object):
1031 def __long__(self):
Guido van Rossume2a383d2007-01-15 16:59:06 +00001032 return 42
Brett Cannonc3647ac2005-04-26 03:45:26 +00001033
Guido van Rossume2a383d2007-01-15 16:59:06 +00001034 class Foo2(int):
Brett Cannonc3647ac2005-04-26 03:45:26 +00001035 def __long__(self):
1036 return 42
1037
Guido van Rossume2a383d2007-01-15 16:59:06 +00001038 class Foo3(int):
1039 def __long__(self):
1040 return self
1041
1042 class Foo4(int):
1043 def __long__(self):
1044 return 42
1045
1046 class Foo5(int):
Brett Cannonc3647ac2005-04-26 03:45:26 +00001047 def __long__(self):
1048 return 42.
1049
Guido van Rossume2a383d2007-01-15 16:59:06 +00001050 self.assertEqual(int(Foo0()), 42)
1051 self.assertEqual(int(Foo1()), 42)
Guido van Rossumd8faa362007-04-27 19:54:29 +00001052 # XXX invokes __int__ now
Guido van Rossumddefaf32007-01-14 03:31:43 +00001053 # self.assertEqual(long(Foo2()), 42L)
Guido van Rossume2a383d2007-01-15 16:59:06 +00001054 self.assertEqual(int(Foo3()), 0)
Guido van Rossumd8faa362007-04-27 19:54:29 +00001055 # XXX likewise
Guido van Rossumddefaf32007-01-14 03:31:43 +00001056 # self.assertEqual(long(Foo4()), 42)
1057 # self.assertRaises(TypeError, long, Foo5())
Brett Cannonc3647ac2005-04-26 03:45:26 +00001058
Walter Dörwald919497e2003-01-19 16:23:59 +00001059 def test_map(self):
1060 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001061 list(map(None, 'hello')),
1062 [('h',), ('e',), ('l',), ('l',), ('o',)]
Walter Dörwald919497e2003-01-19 16:23:59 +00001063 )
1064 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001065 list(map(None, 'abcd', 'efg')),
1066 [('a', 'e'), ('b', 'f'), ('c', 'g')]
Walter Dörwald919497e2003-01-19 16:23:59 +00001067 )
1068 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001069 list(map(None, range(3))),
1070 [(0,), (1,), (2,)]
Walter Dörwald919497e2003-01-19 16:23:59 +00001071 )
1072 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001073 list(map(lambda x: x*x, range(1,4))),
Walter Dörwald919497e2003-01-19 16:23:59 +00001074 [1, 4, 9]
1075 )
1076 try:
1077 from math import sqrt
1078 except ImportError:
1079 def sqrt(x):
1080 return pow(x, 0.5)
1081 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001082 list(map(lambda x: list(map(sqrt, x)), [[16, 4], [81, 9]])),
Walter Dörwald919497e2003-01-19 16:23:59 +00001083 [[4.0, 2.0], [9.0, 3.0]]
1084 )
1085 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001086 list(map(lambda x, y: x+y, [1,3,2], [9,1,4])),
Walter Dörwald919497e2003-01-19 16:23:59 +00001087 [10, 4, 6]
1088 )
1089
1090 def plus(*v):
1091 accu = 0
1092 for i in v: accu = accu + i
1093 return accu
1094 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001095 list(map(plus, [1, 3, 7])),
Walter Dörwald919497e2003-01-19 16:23:59 +00001096 [1, 3, 7]
1097 )
1098 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001099 list(map(plus, [1, 3, 7], [4, 9, 2])),
Walter Dörwald919497e2003-01-19 16:23:59 +00001100 [1+4, 3+9, 7+2]
1101 )
1102 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001103 list(map(plus, [1, 3, 7], [4, 9, 2], [1, 1, 0])),
Walter Dörwald919497e2003-01-19 16:23:59 +00001104 [1+4+1, 3+9+1, 7+2+0]
1105 )
1106 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001107 list(map(None, Squares(10))),
1108 [(0,), (1,), (4,), (9,), (16,), (25,), (36,), (49,), (64,), (81,)]
1109 )
1110 self.assertEqual(
1111 list(map(int, Squares(10))),
Walter Dörwald919497e2003-01-19 16:23:59 +00001112 [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
1113 )
1114 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001115 list(map(None, Squares(3), Squares(2))),
1116 [(0,0), (1,1)]
Walter Dörwald919497e2003-01-19 16:23:59 +00001117 )
Guido van Rossum47b9ff62006-08-24 00:41:19 +00001118 def Max(a, b):
1119 if a is None:
1120 return b
1121 if b is None:
1122 return a
1123 return max(a, b)
Walter Dörwald919497e2003-01-19 16:23:59 +00001124 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001125 list(map(Max, Squares(3), Squares(2))),
1126 [0, 1]
Walter Dörwald919497e2003-01-19 16:23:59 +00001127 )
1128 self.assertRaises(TypeError, map)
1129 self.assertRaises(TypeError, map, lambda x: x, 42)
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001130 self.assertEqual(list(map(None, [42])), [(42,)])
Walter Dörwald919497e2003-01-19 16:23:59 +00001131 class BadSeq:
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001132 def __iter__(self):
Walter Dörwald919497e2003-01-19 16:23:59 +00001133 raise ValueError
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001134 yield None
1135 self.assertRaises(ValueError, list, map(lambda x: x, BadSeq()))
Neal Norwitzfcf44352005-11-27 20:37:43 +00001136 def badfunc(x):
1137 raise RuntimeError
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001138 self.assertRaises(RuntimeError, list, map(badfunc, range(5)))
Walter Dörwald919497e2003-01-19 16:23:59 +00001139
1140 def test_max(self):
1141 self.assertEqual(max('123123'), '3')
1142 self.assertEqual(max(1, 2, 3), 3)
1143 self.assertEqual(max((1, 2, 3, 1, 2, 3)), 3)
1144 self.assertEqual(max([1, 2, 3, 1, 2, 3]), 3)
1145
Guido van Rossume2a383d2007-01-15 16:59:06 +00001146 self.assertEqual(max(1, 2, 3.0), 3.0)
1147 self.assertEqual(max(1, 2.0, 3), 3)
1148 self.assertEqual(max(1.0, 2, 3), 3)
Walter Dörwald919497e2003-01-19 16:23:59 +00001149
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001150 for stmt in (
1151 "max(key=int)", # no args
1152 "max(1, key=int)", # single arg not iterable
1153 "max(1, 2, keystone=int)", # wrong keyword
1154 "max(1, 2, key=int, abc=int)", # two many keywords
1155 "max(1, 2, key=1)", # keyfunc is not callable
1156 ):
Tim Peters7f061872004-12-07 21:17:46 +00001157 try:
Georg Brandl7cae87c2006-09-06 06:51:57 +00001158 exec(stmt, globals())
Tim Peters7f061872004-12-07 21:17:46 +00001159 except TypeError:
1160 pass
1161 else:
1162 self.fail(stmt)
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001163
1164 self.assertEqual(max((1,), key=neg), 1) # one elem iterable
1165 self.assertEqual(max((1,2), key=neg), 1) # two elem iterable
1166 self.assertEqual(max(1, 2, key=neg), 1) # two elems
1167
1168 data = [random.randrange(200) for i in range(100)]
1169 keys = dict((elem, random.randrange(50)) for elem in data)
1170 f = keys.__getitem__
1171 self.assertEqual(max(data, key=f),
1172 sorted(reversed(data), key=f)[-1])
1173
Walter Dörwald919497e2003-01-19 16:23:59 +00001174 def test_min(self):
1175 self.assertEqual(min('123123'), '1')
1176 self.assertEqual(min(1, 2, 3), 1)
1177 self.assertEqual(min((1, 2, 3, 1, 2, 3)), 1)
1178 self.assertEqual(min([1, 2, 3, 1, 2, 3]), 1)
1179
Guido van Rossume2a383d2007-01-15 16:59:06 +00001180 self.assertEqual(min(1, 2, 3.0), 1)
1181 self.assertEqual(min(1, 2.0, 3), 1)
1182 self.assertEqual(min(1.0, 2, 3), 1.0)
Walter Dörwald919497e2003-01-19 16:23:59 +00001183
1184 self.assertRaises(TypeError, min)
1185 self.assertRaises(TypeError, min, 42)
1186 self.assertRaises(ValueError, min, ())
1187 class BadSeq:
1188 def __getitem__(self, index):
1189 raise ValueError
1190 self.assertRaises(ValueError, min, BadSeq())
1191 class BadNumber:
1192 def __cmp__(self, other):
1193 raise ValueError
Guido van Rossum47b9ff62006-08-24 00:41:19 +00001194 self.assertRaises(TypeError, min, (42, BadNumber()))
Walter Dörwald919497e2003-01-19 16:23:59 +00001195
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001196 for stmt in (
1197 "min(key=int)", # no args
1198 "min(1, key=int)", # single arg not iterable
1199 "min(1, 2, keystone=int)", # wrong keyword
1200 "min(1, 2, key=int, abc=int)", # two many keywords
1201 "min(1, 2, key=1)", # keyfunc is not callable
1202 ):
Tim Peters7f061872004-12-07 21:17:46 +00001203 try:
Georg Brandl7cae87c2006-09-06 06:51:57 +00001204 exec(stmt, globals())
Tim Peters7f061872004-12-07 21:17:46 +00001205 except TypeError:
1206 pass
1207 else:
1208 self.fail(stmt)
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001209
1210 self.assertEqual(min((1,), key=neg), 1) # one elem iterable
1211 self.assertEqual(min((1,2), key=neg), 2) # two elem iterable
1212 self.assertEqual(min(1, 2, key=neg), 2) # two elems
1213
1214 data = [random.randrange(200) for i in range(100)]
1215 keys = dict((elem, random.randrange(50)) for elem in data)
1216 f = keys.__getitem__
1217 self.assertEqual(min(data, key=f),
1218 sorted(data, key=f)[0])
1219
Georg Brandla18af4e2007-04-21 15:47:16 +00001220 def test_next(self):
1221 it = iter(range(2))
1222 self.assertEqual(next(it), 0)
1223 self.assertEqual(next(it), 1)
1224 self.assertRaises(StopIteration, next, it)
1225 self.assertRaises(StopIteration, next, it)
1226 self.assertEquals(next(it, 42), 42)
1227
1228 class Iter(object):
1229 def __iter__(self):
1230 return self
1231 def __next__(self):
1232 raise StopIteration
1233
1234 it = iter(Iter())
1235 self.assertEquals(next(it, 42), 42)
1236 self.assertRaises(StopIteration, next, it)
1237
1238 def gen():
1239 yield 1
1240 return
1241
1242 it = gen()
1243 self.assertEquals(next(it), 1)
1244 self.assertRaises(StopIteration, next, it)
1245 self.assertEquals(next(it, 42), 42)
1246
Walter Dörwald919497e2003-01-19 16:23:59 +00001247 def test_oct(self):
Guido van Rossumcd16bf62007-06-13 18:07:49 +00001248 self.assertEqual(oct(100), '0o144')
1249 self.assertEqual(oct(100), '0o144')
1250 self.assertEqual(oct(-100), '-0o144')
1251 self.assertEqual(oct(-100), '-0o144')
Walter Dörwald919497e2003-01-19 16:23:59 +00001252 self.assertRaises(TypeError, oct, ())
1253
1254 def write_testfile(self):
Guido van Rossuma88a0332007-02-26 16:59:55 +00001255 # NB the first 4 lines are also used to test input, below
Walter Dörwald919497e2003-01-19 16:23:59 +00001256 fp = open(TESTFN, 'w')
1257 try:
1258 fp.write('1+1\n')
1259 fp.write('1+1\n')
1260 fp.write('The quick brown fox jumps over the lazy dog')
1261 fp.write('.\n')
1262 fp.write('Dear John\n')
1263 fp.write('XXX'*100)
1264 fp.write('YYY'*100)
1265 finally:
1266 fp.close()
1267
1268 def test_open(self):
1269 self.write_testfile()
1270 fp = open(TESTFN, 'r')
1271 try:
1272 self.assertEqual(fp.readline(4), '1+1\n')
1273 self.assertEqual(fp.readline(4), '1+1\n')
1274 self.assertEqual(fp.readline(), 'The quick brown fox jumps over the lazy dog.\n')
1275 self.assertEqual(fp.readline(4), 'Dear')
1276 self.assertEqual(fp.readline(100), ' John\n')
1277 self.assertEqual(fp.read(300), 'XXX'*100)
1278 self.assertEqual(fp.read(1000), 'YYY'*100)
1279 finally:
1280 fp.close()
1281 unlink(TESTFN)
1282
1283 def test_ord(self):
1284 self.assertEqual(ord(' '), 32)
1285 self.assertEqual(ord('A'), 65)
1286 self.assertEqual(ord('a'), 97)
Guido van Rossumf9e91c92007-05-08 21:05:48 +00001287 self.assertEqual(ord('\x80'), 128)
1288 self.assertEqual(ord('\xff'), 255)
1289
1290 self.assertEqual(ord(b' '), 32)
1291 self.assertEqual(ord(b'A'), 65)
1292 self.assertEqual(ord(b'a'), 97)
1293 self.assertEqual(ord(b'\x80'), 128)
1294 self.assertEqual(ord(b'\xff'), 255)
1295
Walter Dörwald1f5947b2007-05-22 16:52:54 +00001296 self.assertEqual(ord(chr(sys.maxunicode)), sys.maxunicode)
Walter Dörwald919497e2003-01-19 16:23:59 +00001297 self.assertRaises(TypeError, ord, 42)
Walter Dörwald919497e2003-01-19 16:23:59 +00001298
Guido van Rossum8ac004e2007-07-15 13:00:05 +00001299 self.assertEqual(ord(chr(0x10FFFF)), 0x10FFFF)
1300 self.assertEqual(ord("\U0000FFFF"), 0x0000FFFF)
1301 self.assertEqual(ord("\U00010000"), 0x00010000)
1302 self.assertEqual(ord("\U00010001"), 0x00010001)
1303 self.assertEqual(ord("\U000FFFFE"), 0x000FFFFE)
1304 self.assertEqual(ord("\U000FFFFF"), 0x000FFFFF)
1305 self.assertEqual(ord("\U00100000"), 0x00100000)
1306 self.assertEqual(ord("\U00100001"), 0x00100001)
1307 self.assertEqual(ord("\U0010FFFE"), 0x0010FFFE)
1308 self.assertEqual(ord("\U0010FFFF"), 0x0010FFFF)
1309
Walter Dörwald919497e2003-01-19 16:23:59 +00001310 def test_pow(self):
1311 self.assertEqual(pow(0,0), 1)
1312 self.assertEqual(pow(0,1), 0)
1313 self.assertEqual(pow(1,0), 1)
1314 self.assertEqual(pow(1,1), 1)
1315
1316 self.assertEqual(pow(2,0), 1)
1317 self.assertEqual(pow(2,10), 1024)
1318 self.assertEqual(pow(2,20), 1024*1024)
1319 self.assertEqual(pow(2,30), 1024*1024*1024)
1320
1321 self.assertEqual(pow(-2,0), 1)
1322 self.assertEqual(pow(-2,1), -2)
1323 self.assertEqual(pow(-2,2), 4)
1324 self.assertEqual(pow(-2,3), -8)
1325
Guido van Rossume2a383d2007-01-15 16:59:06 +00001326 self.assertEqual(pow(0,0), 1)
1327 self.assertEqual(pow(0,1), 0)
1328 self.assertEqual(pow(1,0), 1)
1329 self.assertEqual(pow(1,1), 1)
Walter Dörwald919497e2003-01-19 16:23:59 +00001330
Guido van Rossume2a383d2007-01-15 16:59:06 +00001331 self.assertEqual(pow(2,0), 1)
1332 self.assertEqual(pow(2,10), 1024)
1333 self.assertEqual(pow(2,20), 1024*1024)
1334 self.assertEqual(pow(2,30), 1024*1024*1024)
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,1), -2)
1338 self.assertEqual(pow(-2,2), 4)
1339 self.assertEqual(pow(-2,3), -8)
Walter Dörwald919497e2003-01-19 16:23:59 +00001340
1341 self.assertAlmostEqual(pow(0.,0), 1.)
1342 self.assertAlmostEqual(pow(0.,1), 0.)
1343 self.assertAlmostEqual(pow(1.,0), 1.)
1344 self.assertAlmostEqual(pow(1.,1), 1.)
1345
1346 self.assertAlmostEqual(pow(2.,0), 1.)
1347 self.assertAlmostEqual(pow(2.,10), 1024.)
1348 self.assertAlmostEqual(pow(2.,20), 1024.*1024.)
1349 self.assertAlmostEqual(pow(2.,30), 1024.*1024.*1024.)
1350
1351 self.assertAlmostEqual(pow(-2.,0), 1.)
1352 self.assertAlmostEqual(pow(-2.,1), -2.)
1353 self.assertAlmostEqual(pow(-2.,2), 4.)
1354 self.assertAlmostEqual(pow(-2.,3), -8.)
1355
Guido van Rossume2a383d2007-01-15 16:59:06 +00001356 for x in 2, 2, 2.0:
1357 for y in 10, 10, 10.0:
1358 for z in 1000, 1000, 1000.0:
Walter Dörwald919497e2003-01-19 16:23:59 +00001359 if isinstance(x, float) or \
1360 isinstance(y, float) or \
1361 isinstance(z, float):
1362 self.assertRaises(TypeError, pow, x, y, z)
1363 else:
1364 self.assertAlmostEqual(pow(x, y, z), 24.0)
1365
1366 self.assertRaises(TypeError, pow, -1, -2, 3)
1367 self.assertRaises(ValueError, pow, 1, 2, 0)
Guido van Rossume2a383d2007-01-15 16:59:06 +00001368 self.assertRaises(TypeError, pow, -1, -2, 3)
1369 self.assertRaises(ValueError, pow, 1, 2, 0)
Walter Dörwald919497e2003-01-19 16:23:59 +00001370 self.assertRaises(ValueError, pow, -342.43, 0.234)
1371
1372 self.assertRaises(TypeError, pow)
1373
1374 def test_range(self):
Guido van Rossum805365e2007-05-07 22:24:25 +00001375 self.assertEqual(list(range(3)), [0, 1, 2])
1376 self.assertEqual(list(range(1, 5)), [1, 2, 3, 4])
1377 self.assertEqual(list(range(0)), [])
1378 self.assertEqual(list(range(-3)), [])
1379 self.assertEqual(list(range(1, 10, 3)), [1, 4, 7])
1380 #self.assertEqual(list(range(5, -5, -3)), [5, 2, -1, -4])
Walter Dörwald919497e2003-01-19 16:23:59 +00001381
Guido van Rossum805365e2007-05-07 22:24:25 +00001382 """ XXX(nnorwitz):
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001383 # Now test range() with longs
Guido van Rossum805365e2007-05-07 22:24:25 +00001384 self.assertEqual(list(range(-2**100)), [])
1385 self.assertEqual(list(range(0, -2**100)), [])
1386 self.assertEqual(list(range(0, 2**100, -1)), [])
1387 self.assertEqual(list(range(0, 2**100, -1)), [])
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001388
Guido van Rossume2a383d2007-01-15 16:59:06 +00001389 a = int(10 * sys.maxint)
1390 b = int(100 * sys.maxint)
1391 c = int(50 * sys.maxint)
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001392
Guido van Rossum805365e2007-05-07 22:24:25 +00001393 self.assertEqual(list(range(a, a+2)), [a, a+1])
1394 self.assertEqual(list(range(a+2, a, -1)), [a+2, a+1])
1395 self.assertEqual(list(range(a+4, a, -2)), [a+4, a+2])
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001396
Guido van Rossum805365e2007-05-07 22:24:25 +00001397 seq = list(range(a, b, c))
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001398 self.assert_(a in seq)
1399 self.assert_(b not in seq)
1400 self.assertEqual(len(seq), 2)
1401
Guido van Rossum805365e2007-05-07 22:24:25 +00001402 seq = list(range(b, a, -c))
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001403 self.assert_(b in seq)
1404 self.assert_(a not in seq)
1405 self.assertEqual(len(seq), 2)
1406
Guido van Rossum805365e2007-05-07 22:24:25 +00001407 seq = list(range(-a, -b, -c))
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001408 self.assert_(-a in seq)
1409 self.assert_(-b not in seq)
1410 self.assertEqual(len(seq), 2)
1411
Walter Dörwald919497e2003-01-19 16:23:59 +00001412 self.assertRaises(TypeError, range)
1413 self.assertRaises(TypeError, range, 1, 2, 3, 4)
1414 self.assertRaises(ValueError, range, 1, 2, 0)
Guido van Rossume2a383d2007-01-15 16:59:06 +00001415 self.assertRaises(ValueError, range, a, a + 1, int(0))
Neal Norwitzfcf44352005-11-27 20:37:43 +00001416
1417 class badzero(int):
Guido van Rossum47b9ff62006-08-24 00:41:19 +00001418 def __eq__(self, other):
Neal Norwitzfcf44352005-11-27 20:37:43 +00001419 raise RuntimeError
Guido van Rossum47b9ff62006-08-24 00:41:19 +00001420 __ne__ = __lt__ = __gt__ = __le__ = __ge__ = __eq__
1421
1422 # XXX This won't (but should!) raise RuntimeError if a is an int...
Neal Norwitzfcf44352005-11-27 20:37:43 +00001423 self.assertRaises(RuntimeError, range, a, a + 1, badzero(1))
Guido van Rossum805365e2007-05-07 22:24:25 +00001424 """
Walter Dörwald919497e2003-01-19 16:23:59 +00001425
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001426 # Reject floats when it would require PyLongs to represent.
1427 # (smaller floats still accepted, but deprecated)
Tim Peters299b3df2003-04-15 14:40:03 +00001428 self.assertRaises(TypeError, range, 1e100, 1e101, 1e101)
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001429
Walter Dörwald357981e2003-04-15 18:59:28 +00001430 self.assertRaises(TypeError, range, 0, "spam")
1431 self.assertRaises(TypeError, range, 0, 42, "spam")
1432
Guido van Rossum805365e2007-05-07 22:24:25 +00001433 #NEAL self.assertRaises(OverflowError, range, -sys.maxint, sys.maxint)
1434 #NEAL self.assertRaises(OverflowError, range, 0, 2*sys.maxint)
1435
1436 self.assertRaises(OverflowError, len, range(0, sys.maxint**10))
Walter Dörwald357981e2003-04-15 18:59:28 +00001437
Guido van Rossuma88a0332007-02-26 16:59:55 +00001438 def test_input(self):
1439 self.write_testfile()
1440 fp = open(TESTFN, 'r')
1441 savestdin = sys.stdin
1442 savestdout = sys.stdout # Eats the echo
1443 try:
1444 sys.stdin = fp
1445 sys.stdout = BitBucket()
1446 self.assertEqual(input(), "1+1")
1447 self.assertEqual(input('testing\n'), "1+1")
1448 self.assertEqual(input(), 'The quick brown fox jumps over the lazy dog.')
1449 self.assertEqual(input('testing\n'), 'Dear John')
1450
1451 # SF 1535165: don't segfault on closed stdin
1452 # sys.stdout must be a regular file for triggering
1453 sys.stdout = savestdout
1454 sys.stdin.close()
1455 self.assertRaises(ValueError, input)
1456
1457 sys.stdout = BitBucket()
Guido van Rossum34d19282007-08-09 01:03:29 +00001458 sys.stdin = io.StringIO("NULL\0")
Guido van Rossuma88a0332007-02-26 16:59:55 +00001459 self.assertRaises(TypeError, input, 42, 42)
Guido van Rossum34d19282007-08-09 01:03:29 +00001460 sys.stdin = io.StringIO(" 'whitespace'")
Guido van Rossuma88a0332007-02-26 16:59:55 +00001461 self.assertEqual(input(), " 'whitespace'")
Guido van Rossum34d19282007-08-09 01:03:29 +00001462 sys.stdin = io.StringIO()
Guido van Rossuma88a0332007-02-26 16:59:55 +00001463 self.assertRaises(EOFError, input)
1464
1465 del sys.stdout
1466 self.assertRaises(RuntimeError, input, 'prompt')
1467 del sys.stdin
1468 self.assertRaises(RuntimeError, input, 'prompt')
1469 finally:
1470 sys.stdin = savestdin
1471 sys.stdout = savestdout
1472 fp.close()
1473 unlink(TESTFN)
1474
Walter Dörwald919497e2003-01-19 16:23:59 +00001475 def test_repr(self):
1476 self.assertEqual(repr(''), '\'\'')
1477 self.assertEqual(repr(0), '0')
Guido van Rossume2a383d2007-01-15 16:59:06 +00001478 self.assertEqual(repr(0), '0')
Walter Dörwald919497e2003-01-19 16:23:59 +00001479 self.assertEqual(repr(()), '()')
1480 self.assertEqual(repr([]), '[]')
1481 self.assertEqual(repr({}), '{}')
1482 a = []
1483 a.append(a)
1484 self.assertEqual(repr(a), '[[...]]')
1485 a = {}
1486 a[0] = a
1487 self.assertEqual(repr(a), '{0: {...}}')
1488
1489 def test_round(self):
1490 self.assertEqual(round(0.0), 0.0)
1491 self.assertEqual(round(1.0), 1.0)
1492 self.assertEqual(round(10.0), 10.0)
1493 self.assertEqual(round(1000000000.0), 1000000000.0)
1494 self.assertEqual(round(1e20), 1e20)
1495
1496 self.assertEqual(round(-1.0), -1.0)
1497 self.assertEqual(round(-10.0), -10.0)
1498 self.assertEqual(round(-1000000000.0), -1000000000.0)
1499 self.assertEqual(round(-1e20), -1e20)
1500
1501 self.assertEqual(round(0.1), 0.0)
1502 self.assertEqual(round(1.1), 1.0)
1503 self.assertEqual(round(10.1), 10.0)
1504 self.assertEqual(round(1000000000.1), 1000000000.0)
1505
1506 self.assertEqual(round(-1.1), -1.0)
1507 self.assertEqual(round(-10.1), -10.0)
1508 self.assertEqual(round(-1000000000.1), -1000000000.0)
1509
1510 self.assertEqual(round(0.9), 1.0)
1511 self.assertEqual(round(9.9), 10.0)
1512 self.assertEqual(round(999999999.9), 1000000000.0)
1513
1514 self.assertEqual(round(-0.9), -1.0)
1515 self.assertEqual(round(-9.9), -10.0)
1516 self.assertEqual(round(-999999999.9), -1000000000.0)
1517
1518 self.assertEqual(round(-8.0, -1), -10.0)
1519
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001520 # test new kwargs
1521 self.assertEqual(round(number=-8.0, ndigits=-1), -10.0)
1522
Walter Dörwald919497e2003-01-19 16:23:59 +00001523 self.assertRaises(TypeError, round)
1524
1525 def test_setattr(self):
Tim Petersf2715e02003-02-19 02:35:07 +00001526 setattr(sys, 'spam', 1)
1527 self.assertEqual(sys.spam, 1)
1528 self.assertRaises(TypeError, setattr, sys, 1, 'spam')
1529 self.assertRaises(TypeError, setattr)
Walter Dörwald919497e2003-01-19 16:23:59 +00001530
1531 def test_str(self):
1532 self.assertEqual(str(''), '')
1533 self.assertEqual(str(0), '0')
Guido van Rossume2a383d2007-01-15 16:59:06 +00001534 self.assertEqual(str(0), '0')
Walter Dörwald919497e2003-01-19 16:23:59 +00001535 self.assertEqual(str(()), '()')
1536 self.assertEqual(str([]), '[]')
1537 self.assertEqual(str({}), '{}')
1538 a = []
1539 a.append(a)
1540 self.assertEqual(str(a), '[[...]]')
1541 a = {}
1542 a[0] = a
1543 self.assertEqual(str(a), '{0: {...}}')
1544
Alex Martellia70b1912003-04-22 08:12:33 +00001545 def test_sum(self):
1546 self.assertEqual(sum([]), 0)
Guido van Rossum805365e2007-05-07 22:24:25 +00001547 self.assertEqual(sum(list(range(2,8))), 27)
1548 self.assertEqual(sum(iter(list(range(2,8)))), 27)
Alex Martellia70b1912003-04-22 08:12:33 +00001549 self.assertEqual(sum(Squares(10)), 285)
1550 self.assertEqual(sum(iter(Squares(10))), 285)
1551 self.assertEqual(sum([[1], [2], [3]], []), [1, 2, 3])
1552
1553 self.assertRaises(TypeError, sum)
1554 self.assertRaises(TypeError, sum, 42)
1555 self.assertRaises(TypeError, sum, ['a', 'b', 'c'])
1556 self.assertRaises(TypeError, sum, ['a', 'b', 'c'], '')
1557 self.assertRaises(TypeError, sum, [[1], [2], [3]])
1558 self.assertRaises(TypeError, sum, [{2:3}])
1559 self.assertRaises(TypeError, sum, [{2:3}]*2, {2:3})
1560
1561 class BadSeq:
1562 def __getitem__(self, index):
1563 raise ValueError
1564 self.assertRaises(ValueError, sum, BadSeq())
1565
Walter Dörwald919497e2003-01-19 16:23:59 +00001566 def test_tuple(self):
1567 self.assertEqual(tuple(()), ())
1568 t0_3 = (0, 1, 2, 3)
1569 t0_3_bis = tuple(t0_3)
1570 self.assert_(t0_3 is t0_3_bis)
1571 self.assertEqual(tuple([]), ())
1572 self.assertEqual(tuple([0, 1, 2, 3]), (0, 1, 2, 3))
1573 self.assertEqual(tuple(''), ())
1574 self.assertEqual(tuple('spam'), ('s', 'p', 'a', 'm'))
1575
1576 def test_type(self):
1577 self.assertEqual(type(''), type('123'))
1578 self.assertNotEqual(type(''), type(()))
1579
Guido van Rossumfee7b932005-01-16 00:21:28 +00001580 # We don't want self in vars(), so these are static methods
1581
1582 @staticmethod
Walter Dörwald919497e2003-01-19 16:23:59 +00001583 def get_vars_f0():
1584 return vars()
Walter Dörwald919497e2003-01-19 16:23:59 +00001585
Guido van Rossumfee7b932005-01-16 00:21:28 +00001586 @staticmethod
Walter Dörwald919497e2003-01-19 16:23:59 +00001587 def get_vars_f2():
1588 BuiltinTest.get_vars_f0()
1589 a = 1
1590 b = 2
1591 return vars()
Walter Dörwald919497e2003-01-19 16:23:59 +00001592
1593 def test_vars(self):
Raymond Hettingera690a992003-11-16 16:17:49 +00001594 self.assertEqual(set(vars()), set(dir()))
Walter Dörwald919497e2003-01-19 16:23:59 +00001595 import sys
Raymond Hettingera690a992003-11-16 16:17:49 +00001596 self.assertEqual(set(vars(sys)), set(dir(sys)))
Walter Dörwald919497e2003-01-19 16:23:59 +00001597 self.assertEqual(self.get_vars_f0(), {})
1598 self.assertEqual(self.get_vars_f2(), {'a': 1, 'b': 2})
1599 self.assertRaises(TypeError, vars, 42, 42)
1600 self.assertRaises(TypeError, vars, 42)
1601
1602 def test_zip(self):
1603 a = (1, 2, 3)
1604 b = (4, 5, 6)
1605 t = [(1, 4), (2, 5), (3, 6)]
Guido van Rossum801f0d72006-08-24 19:48:10 +00001606 self.assertEqual(list(zip(a, b)), t)
Walter Dörwald919497e2003-01-19 16:23:59 +00001607 b = [4, 5, 6]
Guido van Rossum801f0d72006-08-24 19:48:10 +00001608 self.assertEqual(list(zip(a, b)), t)
Walter Dörwald919497e2003-01-19 16:23:59 +00001609 b = (4, 5, 6, 7)
Guido van Rossum801f0d72006-08-24 19:48:10 +00001610 self.assertEqual(list(zip(a, b)), t)
Walter Dörwald919497e2003-01-19 16:23:59 +00001611 class I:
1612 def __getitem__(self, i):
1613 if i < 0 or i > 2: raise IndexError
1614 return i + 4
Guido van Rossum801f0d72006-08-24 19:48:10 +00001615 self.assertEqual(list(zip(a, I())), t)
1616 self.assertEqual(list(zip()), [])
1617 self.assertEqual(list(zip(*[])), [])
Walter Dörwald919497e2003-01-19 16:23:59 +00001618 self.assertRaises(TypeError, zip, None)
1619 class G:
1620 pass
1621 self.assertRaises(TypeError, zip, a, G())
1622
1623 # Make sure zip doesn't try to allocate a billion elements for the
1624 # result list when one of its arguments doesn't say how long it is.
1625 # A MemoryError is the most likely failure mode.
1626 class SequenceWithoutALength:
1627 def __getitem__(self, i):
1628 if i == 5:
1629 raise IndexError
1630 else:
1631 return i
1632 self.assertEqual(
Guido van Rossum805365e2007-05-07 22:24:25 +00001633 list(zip(SequenceWithoutALength(), range(2**30))),
Walter Dörwald919497e2003-01-19 16:23:59 +00001634 list(enumerate(range(5)))
1635 )
1636
1637 class BadSeq:
1638 def __getitem__(self, i):
1639 if i == 5:
1640 raise ValueError
1641 else:
1642 return i
Guido van Rossum801f0d72006-08-24 19:48:10 +00001643 self.assertRaises(ValueError, list, zip(BadSeq(), BadSeq()))
Walter Dörwald919497e2003-01-19 16:23:59 +00001644
Raymond Hettinger64958a12003-12-17 20:43:33 +00001645class TestSorted(unittest.TestCase):
1646
1647 def test_basic(self):
Guido van Rossum805365e2007-05-07 22:24:25 +00001648 data = list(range(100))
Raymond Hettinger64958a12003-12-17 20:43:33 +00001649 copy = data[:]
1650 random.shuffle(copy)
1651 self.assertEqual(data, sorted(copy))
1652 self.assertNotEqual(data, copy)
1653
1654 data.reverse()
1655 random.shuffle(copy)
Guido van Rossum47b9ff62006-08-24 00:41:19 +00001656 self.assertEqual(data, sorted(copy, cmp=lambda x, y: (x < y) - (x > y)))
Raymond Hettinger64958a12003-12-17 20:43:33 +00001657 self.assertNotEqual(data, copy)
1658 random.shuffle(copy)
1659 self.assertEqual(data, sorted(copy, key=lambda x: -x))
1660 self.assertNotEqual(data, copy)
1661 random.shuffle(copy)
1662 self.assertEqual(data, sorted(copy, reverse=1))
1663 self.assertNotEqual(data, copy)
1664
1665 def test_inputtypes(self):
1666 s = 'abracadabra'
Walter Dörwald1f5947b2007-05-22 16:52:54 +00001667 types = [list, tuple, str]
Walter Dörwald4e41a4b2005-08-03 17:09:04 +00001668 for T in types:
Raymond Hettinger64958a12003-12-17 20:43:33 +00001669 self.assertEqual(sorted(s), sorted(T(s)))
1670
Walter Dörwald1f5947b2007-05-22 16:52:54 +00001671 s = ''.join(set(s)) # unique letters only
1672 types = [str, set, frozenset, list, tuple, dict.fromkeys]
Walter Dörwald4e41a4b2005-08-03 17:09:04 +00001673 for T in types:
Raymond Hettinger64958a12003-12-17 20:43:33 +00001674 self.assertEqual(sorted(s), sorted(T(s)))
1675
1676 def test_baddecorator(self):
1677 data = 'The quick Brown fox Jumped over The lazy Dog'.split()
1678 self.assertRaises(TypeError, sorted, data, None, lambda x,y: 0)
1679
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001680def test_main(verbose=None):
1681 test_classes = (BuiltinTest, TestSorted)
1682
1683 run_unittest(*test_classes)
1684
1685 # verify reference counting
1686 if verbose and hasattr(sys, "gettotalrefcount"):
1687 import gc
1688 counts = [None] * 5
Guido van Rossum805365e2007-05-07 22:24:25 +00001689 for i in range(len(counts)):
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001690 run_unittest(*test_classes)
1691 gc.collect()
1692 counts[i] = sys.gettotalrefcount()
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001693 print(counts)
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001694
Walter Dörwald919497e2003-01-19 16:23:59 +00001695
1696if __name__ == "__main__":
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001697 test_main(verbose=True)