blob: b43082212d1da90318f5f4026cb94e59a4f7deae [file] [log] [blame]
Walter Dörwald919497e2003-01-19 16:23:59 +00001# Python test set -- built-in functions
Guido van Rossum3bead091992-01-27 17:00:37 +00002
Walter Dörwald919497e2003-01-19 16:23:59 +00003import test.test_support, unittest
Walter Dörwald1f5947b2007-05-22 16:52:54 +00004from test.test_support import fcmp, TESTFN, unlink, run_unittest, \
5 run_with_locale
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00006from operator import neg
Guido van Rossum3bead091992-01-27 17:00:37 +00007
Guido van Rossum34d19282007-08-09 01:03:29 +00008import sys, warnings, random, UserDict, io
Walter Dörwald919497e2003-01-19 16:23:59 +00009warnings.filterwarnings("ignore", "hex../oct.. of negative int",
10 FutureWarning, __name__)
Guido van Rossumefbbb1c2003-04-11 18:43:06 +000011warnings.filterwarnings("ignore", "integer argument expected",
12 DeprecationWarning, "unittest")
Guido van Rossum3bead091992-01-27 17:00:37 +000013
Walter Dörwald919497e2003-01-19 16:23:59 +000014class Squares:
Guido van Rossum3bead091992-01-27 17:00:37 +000015
Walter Dörwald919497e2003-01-19 16:23:59 +000016 def __init__(self, max):
17 self.max = max
18 self.sofar = []
19
20 def __len__(self): return len(self.sofar)
21
22 def __getitem__(self, i):
23 if not 0 <= i < self.max: raise IndexError
24 n = len(self.sofar)
25 while n <= i:
26 self.sofar.append(n*n)
27 n += 1
28 return self.sofar[i]
29
30class StrSquares:
31
32 def __init__(self, max):
33 self.max = max
34 self.sofar = []
35
36 def __len__(self):
37 return len(self.sofar)
38
39 def __getitem__(self, i):
40 if not 0 <= i < self.max:
41 raise IndexError
42 n = len(self.sofar)
43 while n <= i:
44 self.sofar.append(str(n*n))
45 n += 1
46 return self.sofar[i]
47
48class BitBucket:
49 def write(self, line):
50 pass
51
52L = [
53 ('0', 0),
54 ('1', 1),
55 ('9', 9),
56 ('10', 10),
57 ('99', 99),
58 ('100', 100),
59 ('314', 314),
60 (' 314', 314),
61 ('314 ', 314),
62 (' \t\t 314 \t\t ', 314),
Walter Dörwald70a6b492004-02-12 17:35:32 +000063 (repr(sys.maxint), sys.maxint),
Walter Dörwald919497e2003-01-19 16:23:59 +000064 (' 1x', ValueError),
65 (' 1 ', 1),
66 (' 1\02 ', ValueError),
67 ('', ValueError),
68 (' ', ValueError),
Walter Dörwald1f5947b2007-05-22 16:52:54 +000069 (' \t\t ', ValueError),
Guido van Rossumef87d6e2007-05-02 19:09:54 +000070 (str(b'\u0663\u0661\u0664 ','raw-unicode-escape'), 314),
Guido van Rossum84fc66d2007-05-03 17:18:26 +000071 (chr(0x200), ValueError),
Walter Dörwald919497e2003-01-19 16:23:59 +000072]
73
Raymond Hettinger96229b12005-03-11 06:49:40 +000074class TestFailingBool:
Jack Diederich4dafcc42006-11-28 19:15:13 +000075 def __bool__(self):
Raymond Hettinger96229b12005-03-11 06:49:40 +000076 raise RuntimeError
77
78class TestFailingIter:
79 def __iter__(self):
80 raise RuntimeError
81
Walter Dörwald919497e2003-01-19 16:23:59 +000082class BuiltinTest(unittest.TestCase):
83
84 def test_import(self):
85 __import__('sys')
86 __import__('time')
87 __import__('string')
Guido van Rossumd8faa362007-04-27 19:54:29 +000088 __import__(name='sys')
89 __import__(name='time', level=0)
Walter Dörwald919497e2003-01-19 16:23:59 +000090 self.assertRaises(ImportError, __import__, 'spamspam')
91 self.assertRaises(TypeError, __import__, 1, 2, 3, 4)
Thomas Wouters49fd7fa2006-04-21 10:40:58 +000092 self.assertRaises(ValueError, __import__, '')
Guido van Rossumd8faa362007-04-27 19:54:29 +000093 self.assertRaises(TypeError, __import__, 'sys', name='sys')
Walter Dörwald919497e2003-01-19 16:23:59 +000094
95 def test_abs(self):
96 # int
97 self.assertEqual(abs(0), 0)
98 self.assertEqual(abs(1234), 1234)
99 self.assertEqual(abs(-1234), 1234)
Thomas Wouters89f507f2006-12-13 04:49:30 +0000100 self.assertTrue(abs(-sys.maxint-1) > 0)
Walter Dörwald919497e2003-01-19 16:23:59 +0000101 # float
102 self.assertEqual(abs(0.0), 0.0)
103 self.assertEqual(abs(3.14), 3.14)
104 self.assertEqual(abs(-3.14), 3.14)
105 # long
Guido van Rossume2a383d2007-01-15 16:59:06 +0000106 self.assertEqual(abs(0), 0)
107 self.assertEqual(abs(1234), 1234)
108 self.assertEqual(abs(-1234), 1234)
Walter Dörwald919497e2003-01-19 16:23:59 +0000109 # str
110 self.assertRaises(TypeError, abs, 'a')
111
Raymond Hettinger96229b12005-03-11 06:49:40 +0000112 def test_all(self):
113 self.assertEqual(all([2, 4, 6]), True)
114 self.assertEqual(all([2, None, 6]), False)
115 self.assertRaises(RuntimeError, all, [2, TestFailingBool(), 6])
116 self.assertRaises(RuntimeError, all, TestFailingIter())
117 self.assertRaises(TypeError, all, 10) # Non-iterable
118 self.assertRaises(TypeError, all) # No args
119 self.assertRaises(TypeError, all, [2, 4, 6], []) # Too many args
120 self.assertEqual(all([]), True) # Empty iterator
121 S = [50, 60]
122 self.assertEqual(all(x > 42 for x in S), True)
123 S = [50, 40, 60]
124 self.assertEqual(all(x > 42 for x in S), False)
125
126 def test_any(self):
127 self.assertEqual(any([None, None, None]), False)
128 self.assertEqual(any([None, 4, None]), True)
129 self.assertRaises(RuntimeError, any, [None, TestFailingBool(), 6])
130 self.assertRaises(RuntimeError, all, TestFailingIter())
131 self.assertRaises(TypeError, any, 10) # Non-iterable
132 self.assertRaises(TypeError, any) # No args
133 self.assertRaises(TypeError, any, [2, 4, 6], []) # Too many args
134 self.assertEqual(any([]), False) # Empty iterator
135 S = [40, 60, 30]
136 self.assertEqual(any(x > 42 for x in S), True)
137 S = [10, 20, 30]
138 self.assertEqual(any(x > 42 for x in S), False)
139
Thomas Wouters89f507f2006-12-13 04:49:30 +0000140 def test_neg(self):
141 x = -sys.maxint-1
142 self.assert_(isinstance(x, int))
143 self.assertEqual(-x, sys.maxint+1)
144
Guido van Rossumd59da4b2007-05-22 18:11:13 +0000145 # XXX(nnorwitz): This test case for callable should probably be removed.
Walter Dörwald919497e2003-01-19 16:23:59 +0000146 def test_callable(self):
Guido van Rossumd59da4b2007-05-22 18:11:13 +0000147 self.assert_(hasattr(len, '__call__'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000148 def f(): pass
Guido van Rossumd59da4b2007-05-22 18:11:13 +0000149 self.assert_(hasattr(f, '__call__'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000150 class C:
151 def meth(self): pass
Guido van Rossumd59da4b2007-05-22 18:11:13 +0000152 self.assert_(hasattr(C, '__call__'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000153 x = C()
Guido van Rossumd59da4b2007-05-22 18:11:13 +0000154 self.assert_(hasattr(x.meth, '__call__'))
155 self.assert_(not hasattr(x, '__call__'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000156 class D(C):
157 def __call__(self): pass
158 y = D()
Guido van Rossumd59da4b2007-05-22 18:11:13 +0000159 self.assert_(hasattr(y, '__call__'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000160 y()
161
162 def test_chr(self):
163 self.assertEqual(chr(32), ' ')
164 self.assertEqual(chr(65), 'A')
165 self.assertEqual(chr(97), 'a')
166 self.assertEqual(chr(0xff), '\xff')
Guido van Rossum572dbf82007-04-27 23:53:51 +0000167 self.assertRaises(ValueError, chr, 1<<24)
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000168 self.assertEqual(chr(sys.maxunicode),
169 str(('\\U%08x' % (sys.maxunicode)).encode("ascii"),
170 'unicode-escape'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000171 self.assertRaises(TypeError, chr)
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000172 self.assertEqual(chr(0x0000FFFF), "\U0000FFFF")
173 self.assertEqual(chr(0x00010000), "\U00010000")
174 self.assertEqual(chr(0x00010001), "\U00010001")
175 self.assertEqual(chr(0x000FFFFE), "\U000FFFFE")
176 self.assertEqual(chr(0x000FFFFF), "\U000FFFFF")
177 self.assertEqual(chr(0x00100000), "\U00100000")
178 self.assertEqual(chr(0x00100001), "\U00100001")
179 self.assertEqual(chr(0x0010FFFE), "\U0010FFFE")
180 self.assertEqual(chr(0x0010FFFF), "\U0010FFFF")
181 self.assertRaises(ValueError, chr, -1)
182 self.assertRaises(ValueError, chr, 0x00110000)
Walter Dörwald919497e2003-01-19 16:23:59 +0000183
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000184 def test_cmp(self):
Walter Dörwald919497e2003-01-19 16:23:59 +0000185 self.assertEqual(cmp(-1, 1), -1)
186 self.assertEqual(cmp(1, -1), 1)
187 self.assertEqual(cmp(1, 1), 0)
Armin Rigo2b3eb402003-10-28 12:05:48 +0000188 # verify that circular objects are not handled
Walter Dörwald919497e2003-01-19 16:23:59 +0000189 a = []; a.append(a)
190 b = []; b.append(b)
191 from UserList import UserList
192 c = UserList(); c.append(c)
Armin Rigo2b3eb402003-10-28 12:05:48 +0000193 self.assertRaises(RuntimeError, cmp, a, b)
194 self.assertRaises(RuntimeError, cmp, b, c)
195 self.assertRaises(RuntimeError, cmp, c, a)
196 self.assertRaises(RuntimeError, cmp, a, c)
197 # okay, now break the cycles
Walter Dörwald919497e2003-01-19 16:23:59 +0000198 a.pop(); b.pop(); c.pop()
199 self.assertRaises(TypeError, cmp)
200
Walter Dörwald919497e2003-01-19 16:23:59 +0000201 def test_compile(self):
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000202 compile('print(1)\n', '', 'exec')
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000203## bom = b'\xef\xbb\xbf'
204## compile(bom + b'print(1)\n', '', 'exec')
Guido van Rossumd8faa362007-04-27 19:54:29 +0000205 compile(source='pass', filename='?', mode='exec')
206 compile(dont_inherit=0, filename='tmp', source='0', mode='eval')
207 compile('pass', '?', dont_inherit=1, mode='exec')
Walter Dörwald919497e2003-01-19 16:23:59 +0000208 self.assertRaises(TypeError, compile)
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000209 self.assertRaises(ValueError, compile, 'print(42)\n', '<string>', 'badmode')
210 self.assertRaises(ValueError, compile, 'print(42)\n', '<string>', 'single', 0xff)
Neal Norwitzfcf44352005-11-27 20:37:43 +0000211 self.assertRaises(TypeError, compile, chr(0), 'f', 'exec')
Guido van Rossumd8faa362007-04-27 19:54:29 +0000212 self.assertRaises(TypeError, compile, 'pass', '?', 'exec',
213 mode='eval', source='0', filename='tmp')
Walter Dörwald1f5947b2007-05-22 16:52:54 +0000214 compile('print("\xe5")\n', '', 'exec')
215 self.assertRaises(TypeError, compile, chr(0), 'f', 'exec')
216 self.assertRaises(ValueError, compile, str('a = 1'), 'f', 'bad')
Guido van Rossumd8faa362007-04-27 19:54:29 +0000217
Walter Dörwald919497e2003-01-19 16:23:59 +0000218 def test_delattr(self):
219 import sys
220 sys.spam = 1
221 delattr(sys, 'spam')
222 self.assertRaises(TypeError, delattr)
223
224 def test_dir(self):
Georg Brandle32b4222007-03-10 22:13:27 +0000225 # dir(wrong number of arguments)
Walter Dörwald919497e2003-01-19 16:23:59 +0000226 self.assertRaises(TypeError, dir, 42, 42)
227
Georg Brandle32b4222007-03-10 22:13:27 +0000228 # dir() - local scope
229 local_var = 1
230 self.assert_('local_var' in dir())
231
232 # dir(module)
233 import sys
234 self.assert_('exit' in dir(sys))
235
236 # dir(module_with_invalid__dict__)
237 import types
238 class Foo(types.ModuleType):
239 __dict__ = 8
240 f = Foo("foo")
241 self.assertRaises(TypeError, dir, f)
242
243 # dir(type)
244 self.assert_("strip" in dir(str))
245 self.assert_("__mro__" not in dir(str))
246
247 # dir(obj)
248 class Foo(object):
249 def __init__(self):
250 self.x = 7
251 self.y = 8
252 self.z = 9
253 f = Foo()
254 self.assert_("y" in dir(f))
255
256 # dir(obj_no__dict__)
257 class Foo(object):
258 __slots__ = []
259 f = Foo()
260 self.assert_("__repr__" in dir(f))
261
262 # dir(obj_no__class__with__dict__)
263 # (an ugly trick to cause getattr(f, "__class__") to fail)
264 class Foo(object):
265 __slots__ = ["__class__", "__dict__"]
266 def __init__(self):
267 self.bar = "wow"
268 f = Foo()
269 self.assert_("__repr__" not in dir(f))
270 self.assert_("bar" in dir(f))
271
272 # dir(obj_using __dir__)
273 class Foo(object):
274 def __dir__(self):
275 return ["kan", "ga", "roo"]
276 f = Foo()
277 self.assert_(dir(f) == ["ga", "kan", "roo"])
278
279 # dir(obj__dir__not_list)
280 class Foo(object):
281 def __dir__(self):
282 return 7
283 f = Foo()
284 self.assertRaises(TypeError, dir, f)
285
Walter Dörwald919497e2003-01-19 16:23:59 +0000286 def test_divmod(self):
287 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))
291
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
Guido van Rossume2a383d2007-01-15 16:59:06 +0000297 self.assertEqual(divmod(12, 7), (1, 5))
298 self.assertEqual(divmod(-12, 7), (-2, 2))
299 self.assertEqual(divmod(12, -7), (-2, -2))
300 self.assertEqual(divmod(-12, -7), (1, -5))
Walter Dörwald919497e2003-01-19 16:23:59 +0000301
Raymond Hettinger5ea7e312004-09-30 07:47:20 +0000302 self.assertEqual(divmod(-sys.maxint-1, -1),
303 (sys.maxint+1, 0))
304
Walter Dörwald919497e2003-01-19 16:23:59 +0000305 self.assert_(not fcmp(divmod(3.25, 1.0), (3.0, 0.25)))
306 self.assert_(not fcmp(divmod(-3.25, 1.0), (-4.0, 0.75)))
307 self.assert_(not fcmp(divmod(3.25, -1.0), (-4.0, -0.75)))
308 self.assert_(not fcmp(divmod(-3.25, -1.0), (3.0, -0.25)))
309
310 self.assertRaises(TypeError, divmod)
311
312 def test_eval(self):
313 self.assertEqual(eval('1+1'), 2)
314 self.assertEqual(eval(' 1+1\n'), 2)
315 globals = {'a': 1, 'b': 2}
316 locals = {'b': 200, 'c': 300}
317 self.assertEqual(eval('a', globals) , 1)
318 self.assertEqual(eval('a', globals, locals), 1)
319 self.assertEqual(eval('b', globals, locals), 200)
320 self.assertEqual(eval('c', globals, locals), 300)
Walter Dörwald919497e2003-01-19 16:23:59 +0000321 globals = {'a': 1, 'b': 2}
322 locals = {'b': 200, 'c': 300}
Walter Dörwald1f5947b2007-05-22 16:52:54 +0000323## bom = b'\xef\xbb\xbf'
324## self.assertEqual(eval(bom + b'a', globals, locals), 1)
325 self.assertEqual(eval('"\xe5"', globals), "\xe5")
Walter Dörwald919497e2003-01-19 16:23:59 +0000326 self.assertRaises(TypeError, eval)
327 self.assertRaises(TypeError, eval, ())
328
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000329 def test_general_eval(self):
330 # Tests that general mappings can be used for the locals argument
331
332 class M:
333 "Test mapping interface versus possible calls from eval()."
334 def __getitem__(self, key):
335 if key == 'a':
336 return 12
337 raise KeyError
Guido van Rossumcd70eee2007-02-11 18:53:00 +0000338 def keys(self):
339 return list('xyz')
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000340
341 m = M()
342 g = globals()
343 self.assertEqual(eval('a', g, m), 12)
344 self.assertRaises(NameError, eval, 'b', g, m)
345 self.assertEqual(eval('dir()', g, m), list('xyz'))
346 self.assertEqual(eval('globals()', g, m), g)
347 self.assertEqual(eval('locals()', g, m), m)
Raymond Hettinger513ffe82004-07-06 13:44:41 +0000348 self.assertRaises(TypeError, eval, 'a', m)
Raymond Hettinger66bd2332004-08-02 08:30:07 +0000349 class A:
350 "Non-mapping"
351 pass
352 m = A()
353 self.assertRaises(TypeError, eval, 'a', g, m)
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000354
355 # Verify that dict subclasses work as well
356 class D(dict):
357 def __getitem__(self, key):
358 if key == 'a':
359 return 12
360 return dict.__getitem__(self, key)
Guido van Rossumcd70eee2007-02-11 18:53:00 +0000361 def keys(self):
362 return list('xyz')
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000363
364 d = D()
365 self.assertEqual(eval('a', g, d), 12)
366 self.assertRaises(NameError, eval, 'b', g, d)
367 self.assertEqual(eval('dir()', g, d), list('xyz'))
368 self.assertEqual(eval('globals()', g, d), g)
369 self.assertEqual(eval('locals()', g, d), d)
370
371 # Verify locals stores (used by list comps)
372 eval('[locals() for i in (2,3)]', g, d)
373 eval('[locals() for i in (2,3)]', g, UserDict.UserDict())
374
375 class SpreadSheet:
376 "Sample application showing nested, calculated lookups."
377 _cells = {}
378 def __setitem__(self, key, formula):
379 self._cells[key] = formula
Thomas Wouters73e5a5b2006-06-08 15:35:45 +0000380 def __getitem__(self, key):
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000381 return eval(self._cells[key], globals(), self)
382
383 ss = SpreadSheet()
384 ss['a1'] = '5'
385 ss['a2'] = 'a1*6'
386 ss['a3'] = 'a2*7'
387 self.assertEqual(ss['a3'], 210)
388
Raymond Hettinger2a7dede2004-08-07 04:55:30 +0000389 # Verify that dir() catches a non-list returned by eval
390 # SF bug #1004669
391 class C:
392 def __getitem__(self, item):
393 raise KeyError(item)
Guido van Rossumcd70eee2007-02-11 18:53:00 +0000394 def keys(self):
395 return 1 # used to be 'a' but that's no longer an error
Raymond Hettinger2a7dede2004-08-07 04:55:30 +0000396 self.assertRaises(TypeError, eval, 'dir()', globals(), C())
397
Georg Brandl7cae87c2006-09-06 06:51:57 +0000398 def test_exec(self):
399 g = {}
400 exec('z = 1', g)
401 if '__builtins__' in g:
402 del g['__builtins__']
403 self.assertEqual(g, {'z': 1})
404
Guido van Rossumef87d6e2007-05-02 19:09:54 +0000405 exec('z = 1+1', g)
Georg Brandl7cae87c2006-09-06 06:51:57 +0000406 if '__builtins__' in g:
407 del g['__builtins__']
408 self.assertEqual(g, {'z': 2})
409 g = {}
410 l = {}
411
412 import warnings
413 warnings.filterwarnings("ignore", "global statement", module="<string>")
414 exec('global a; a = 1; b = 2', g, l)
415 if '__builtins__' in g:
416 del g['__builtins__']
417 if '__builtins__' in l:
418 del l['__builtins__']
419 self.assertEqual((g, l), ({'a': 1}, {'b': 2}))
420
Walter Dörwald919497e2003-01-19 16:23:59 +0000421 def test_filter(self):
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000422 self.assertEqual(list(filter(lambda c: 'a' <= c <= 'z', 'Hello World')), list('elloorld'))
423 self.assertEqual(list(filter(None, [1, 'hello', [], [3], '', None, 9, 0])), [1, 'hello', [3], 9])
424 self.assertEqual(list(filter(lambda x: x > 0, [1, -3, 9, 0, 2])), [1, 9, 2])
425 self.assertEqual(list(filter(None, Squares(10))), [1, 4, 9, 16, 25, 36, 49, 64, 81])
426 self.assertEqual(list(filter(lambda x: x%2, Squares(10))), [1, 9, 25, 49, 81])
Walter Dörwald919497e2003-01-19 16:23:59 +0000427 def identity(item):
428 return 1
429 filter(identity, Squares(5))
430 self.assertRaises(TypeError, filter)
431 class BadSeq(object):
Tim Petersf2715e02003-02-19 02:35:07 +0000432 def __getitem__(self, index):
433 if index<4:
434 return 42
435 raise ValueError
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000436 self.assertRaises(ValueError, list, filter(lambda x: x, BadSeq()))
Walter Dörwald919497e2003-01-19 16:23:59 +0000437 def badfunc():
438 pass
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000439 self.assertRaises(TypeError, list, filter(badfunc, range(5)))
Walter Dörwald919497e2003-01-19 16:23:59 +0000440
Walter Dörwaldbf517072003-01-27 15:57:14 +0000441 # test bltinmodule.c::filtertuple()
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000442 self.assertEqual(list(filter(None, (1, 2))), [1, 2])
443 self.assertEqual(list(filter(lambda x: x>=3, (1, 2, 3, 4))), [3, 4])
444 self.assertRaises(TypeError, list, filter(42, (1, 2)))
Walter Dörwaldc3da83f2003-02-04 20:24:45 +0000445
Walter Dörwald919497e2003-01-19 16:23:59 +0000446 def test_float(self):
447 self.assertEqual(float(3.14), 3.14)
448 self.assertEqual(float(314), 314.0)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000449 self.assertEqual(float(314), 314.0)
Walter Dörwald919497e2003-01-19 16:23:59 +0000450 self.assertEqual(float(" 3.14 "), 3.14)
Neal Norwitze7214a12005-12-18 05:03:17 +0000451 self.assertRaises(ValueError, float, " 0x3.1 ")
452 self.assertRaises(ValueError, float, " -0x3.p-1 ")
Walter Dörwald1f5947b2007-05-22 16:52:54 +0000453 self.assertEqual(float(str(b" \u0663.\u0661\u0664 ",'raw-unicode-escape')), 3.14)
454 self.assertEqual(float("1"*10000), 1e10000) # Inf on both sides
Walter Dörwald919497e2003-01-19 16:23:59 +0000455
Thomas Wouters477c8d52006-05-27 19:21:47 +0000456 @run_with_locale('LC_NUMERIC', 'fr_FR', 'de_DE')
Neal Norwitz5898fa22005-11-22 05:17:40 +0000457 def test_float_with_comma(self):
458 # set locale to something that doesn't use '.' for the decimal point
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000459 # float must not accept the locale specific decimal point but
460 # it still has to accept the normal python syntac
Thomas Wouters477c8d52006-05-27 19:21:47 +0000461 import locale
462 if not locale.localeconv()['decimal_point'] == ',':
Neal Norwitz5898fa22005-11-22 05:17:40 +0000463 return
464
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000465 self.assertEqual(float(" 3.14 "), 3.14)
466 self.assertEqual(float("+3.14 "), 3.14)
467 self.assertEqual(float("-3.14 "), -3.14)
468 self.assertEqual(float(".14 "), .14)
469 self.assertEqual(float("3. "), 3.0)
470 self.assertEqual(float("3.e3 "), 3000.0)
471 self.assertEqual(float("3.2e3 "), 3200.0)
472 self.assertEqual(float("2.5e-1 "), 0.25)
473 self.assertEqual(float("5e-1"), 0.5)
474 self.assertRaises(ValueError, float, " 3,14 ")
475 self.assertRaises(ValueError, float, " +3,14 ")
476 self.assertRaises(ValueError, float, " -3,14 ")
Thomas Wouters477c8d52006-05-27 19:21:47 +0000477 self.assertRaises(ValueError, float, " 0x3.1 ")
478 self.assertRaises(ValueError, float, " -0x3.p-1 ")
479 self.assertEqual(float(" 25.e-1 "), 2.5)
480 self.assertEqual(fcmp(float(" .25e-1 "), .025), 0)
Neal Norwitz5898fa22005-11-22 05:17:40 +0000481
Brett Cannonc3647ac2005-04-26 03:45:26 +0000482 def test_floatconversion(self):
483 # Make sure that calls to __float__() work properly
484 class Foo0:
485 def __float__(self):
486 return 42.
487
488 class Foo1(object):
489 def __float__(self):
490 return 42.
491
492 class Foo2(float):
493 def __float__(self):
494 return 42.
495
496 class Foo3(float):
497 def __new__(cls, value=0.):
498 return float.__new__(cls, 2*value)
499
500 def __float__(self):
501 return self
502
503 class Foo4(float):
504 def __float__(self):
505 return 42
506
507 self.assertAlmostEqual(float(Foo0()), 42.)
508 self.assertAlmostEqual(float(Foo1()), 42.)
509 self.assertAlmostEqual(float(Foo2()), 42.)
510 self.assertAlmostEqual(float(Foo3(21)), 42.)
511 self.assertRaises(TypeError, float, Foo4(42))
512
Walter Dörwald919497e2003-01-19 16:23:59 +0000513 def test_getattr(self):
514 import sys
515 self.assert_(getattr(sys, 'stdout') is sys.stdout)
516 self.assertRaises(TypeError, getattr, sys, 1)
517 self.assertRaises(TypeError, getattr, sys, 1, "foo")
518 self.assertRaises(TypeError, getattr)
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000519 self.assertRaises(AttributeError, getattr, sys, chr(sys.maxunicode))
Walter Dörwald919497e2003-01-19 16:23:59 +0000520
521 def test_hasattr(self):
522 import sys
523 self.assert_(hasattr(sys, 'stdout'))
524 self.assertRaises(TypeError, hasattr, sys, 1)
525 self.assertRaises(TypeError, hasattr)
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000526 self.assertEqual(False, hasattr(sys, chr(sys.maxunicode)))
Walter Dörwald919497e2003-01-19 16:23:59 +0000527
528 def test_hash(self):
529 hash(None)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000530 self.assertEqual(hash(1), hash(1))
Walter Dörwald919497e2003-01-19 16:23:59 +0000531 self.assertEqual(hash(1), hash(1.0))
532 hash('spam')
Walter Dörwald1f5947b2007-05-22 16:52:54 +0000533 self.assertEqual(hash('spam'), hash(str8('spam')))
Walter Dörwald919497e2003-01-19 16:23:59 +0000534 hash((0,1,2,3))
535 def f(): pass
536 self.assertRaises(TypeError, hash, [])
537 self.assertRaises(TypeError, hash, {})
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000538 # Bug 1536021: Allow hash to return long objects
539 class X:
540 def __hash__(self):
541 return 2**100
542 self.assertEquals(type(hash(X())), int)
543 class Y(object):
544 def __hash__(self):
545 return 2**100
546 self.assertEquals(type(hash(Y())), int)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000547 class Z(int):
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000548 def __hash__(self):
549 return self
Guido van Rossume2a383d2007-01-15 16:59:06 +0000550 self.assertEquals(hash(Z(42)), hash(42))
Walter Dörwald919497e2003-01-19 16:23:59 +0000551
552 def test_hex(self):
553 self.assertEqual(hex(16), '0x10')
Guido van Rossume2a383d2007-01-15 16:59:06 +0000554 self.assertEqual(hex(16), '0x10')
Guido van Rossum6c9e1302003-11-29 23:52:13 +0000555 self.assertEqual(hex(-16), '-0x10')
Guido van Rossume2a383d2007-01-15 16:59:06 +0000556 self.assertEqual(hex(-16), '-0x10')
Walter Dörwald919497e2003-01-19 16:23:59 +0000557 self.assertRaises(TypeError, hex, {})
558
559 def test_id(self):
560 id(None)
561 id(1)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000562 id(1)
Walter Dörwald919497e2003-01-19 16:23:59 +0000563 id(1.0)
564 id('spam')
565 id((0,1,2,3))
566 id([0,1,2,3])
567 id({'spam': 1, 'eggs': 2, 'ham': 3})
568
Guido van Rossuma88a0332007-02-26 16:59:55 +0000569 # Test input() later, alphabetized as if it were raw_input
570
Walter Dörwald919497e2003-01-19 16:23:59 +0000571 def test_int(self):
572 self.assertEqual(int(314), 314)
573 self.assertEqual(int(3.14), 3)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000574 self.assertEqual(int(314), 314)
Walter Dörwald919497e2003-01-19 16:23:59 +0000575 # Check that conversion from float truncates towards zero
576 self.assertEqual(int(-3.14), -3)
577 self.assertEqual(int(3.9), 3)
578 self.assertEqual(int(-3.9), -3)
579 self.assertEqual(int(3.5), 3)
580 self.assertEqual(int(-3.5), -3)
581 # Different base:
Guido van Rossume2a383d2007-01-15 16:59:06 +0000582 self.assertEqual(int("10",16), 16)
Walter Dörwald919497e2003-01-19 16:23:59 +0000583 # Test conversion from strings and various anomalies
584 for s, v in L:
585 for sign in "", "+", "-":
586 for prefix in "", " ", "\t", " \t\t ":
587 ss = prefix + sign + s
588 vv = v
589 if sign == "-" and v is not ValueError:
590 vv = -v
591 try:
592 self.assertEqual(int(ss), vv)
593 except v:
594 pass
595
Walter Dörwald70a6b492004-02-12 17:35:32 +0000596 s = repr(-1-sys.maxint)
Thomas Wouters89f507f2006-12-13 04:49:30 +0000597 x = int(s)
598 self.assertEqual(x+1, -sys.maxint)
599 self.assert_(isinstance(x, int))
Walter Dörwald919497e2003-01-19 16:23:59 +0000600 # should return long
Thomas Wouters89f507f2006-12-13 04:49:30 +0000601 self.assertEqual(int(s[1:]), sys.maxint+1)
Walter Dörwald919497e2003-01-19 16:23:59 +0000602
603 # should return long
604 x = int(1e100)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000605 self.assert_(isinstance(x, int))
Walter Dörwald919497e2003-01-19 16:23:59 +0000606 x = int(-1e100)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000607 self.assert_(isinstance(x, int))
Walter Dörwald919497e2003-01-19 16:23:59 +0000608
609
610 # SF bug 434186: 0x80000000/2 != 0x80000000>>1.
611 # Worked by accident in Windows release build, but failed in debug build.
612 # Failed in all Linux builds.
613 x = -1-sys.maxint
614 self.assertEqual(x >> 1, x//2)
615
616 self.assertRaises(ValueError, int, '123\0')
617 self.assertRaises(ValueError, int, '53', 40)
618
Thomas Wouters89f507f2006-12-13 04:49:30 +0000619 # SF bug 1545497: embedded NULs were not detected with
620 # explicit base
621 self.assertRaises(ValueError, int, '123\0', 10)
622 self.assertRaises(ValueError, int, '123\x00 245', 20)
623
Walter Dörwald919497e2003-01-19 16:23:59 +0000624 x = int('1' * 600)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000625 self.assert_(isinstance(x, int))
Walter Dörwald919497e2003-01-19 16:23:59 +0000626
Walter Dörwald1f5947b2007-05-22 16:52:54 +0000627 x = int(chr(0x661) * 600)
628 self.assert_(isinstance(x, int))
Walter Dörwald919497e2003-01-19 16:23:59 +0000629
630 self.assertRaises(TypeError, int, 1, 12)
631
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000632 # tests with base 0
633 self.assertRaises(ValueError, int, ' 0123 ', 0) # old octal syntax
634 self.assertEqual(int('000', 0), 0)
635 self.assertEqual(int('0o123', 0), 83)
636 self.assertEqual(int('0x123', 0), 291)
637 self.assertEqual(int('0b100', 0), 4)
638 self.assertEqual(int(' 0O123 ', 0), 83)
639 self.assertEqual(int(' 0X123 ', 0), 291)
640 self.assertEqual(int(' 0B100 ', 0), 4)
641
642 # without base still base 10
643 self.assertEqual(int('0123'), 123)
644 self.assertEqual(int('0123', 10), 123)
645
646 # tests with prefix and base != 0
Neal Norwitz5898fa22005-11-22 05:17:40 +0000647 self.assertEqual(int('0x123', 16), 291)
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000648 self.assertEqual(int('0o123', 8), 83)
649 self.assertEqual(int('0b100', 2), 4)
650 self.assertEqual(int('0X123', 16), 291)
651 self.assertEqual(int('0O123', 8), 83)
652 self.assertEqual(int('0B100', 2), 4)
Walter Dörwald919497e2003-01-19 16:23:59 +0000653
Thomas Wouters477c8d52006-05-27 19:21:47 +0000654 # SF bug 1334662: int(string, base) wrong answers
655 # Various representations of 2**32 evaluated to 0
656 # rather than 2**32 in previous versions
657
Guido van Rossume2a383d2007-01-15 16:59:06 +0000658 self.assertEqual(int('100000000000000000000000000000000', 2), 4294967296)
659 self.assertEqual(int('102002022201221111211', 3), 4294967296)
660 self.assertEqual(int('10000000000000000', 4), 4294967296)
661 self.assertEqual(int('32244002423141', 5), 4294967296)
662 self.assertEqual(int('1550104015504', 6), 4294967296)
663 self.assertEqual(int('211301422354', 7), 4294967296)
664 self.assertEqual(int('40000000000', 8), 4294967296)
665 self.assertEqual(int('12068657454', 9), 4294967296)
666 self.assertEqual(int('4294967296', 10), 4294967296)
667 self.assertEqual(int('1904440554', 11), 4294967296)
668 self.assertEqual(int('9ba461594', 12), 4294967296)
669 self.assertEqual(int('535a79889', 13), 4294967296)
670 self.assertEqual(int('2ca5b7464', 14), 4294967296)
671 self.assertEqual(int('1a20dcd81', 15), 4294967296)
672 self.assertEqual(int('100000000', 16), 4294967296)
673 self.assertEqual(int('a7ffda91', 17), 4294967296)
674 self.assertEqual(int('704he7g4', 18), 4294967296)
675 self.assertEqual(int('4f5aff66', 19), 4294967296)
676 self.assertEqual(int('3723ai4g', 20), 4294967296)
677 self.assertEqual(int('281d55i4', 21), 4294967296)
678 self.assertEqual(int('1fj8b184', 22), 4294967296)
679 self.assertEqual(int('1606k7ic', 23), 4294967296)
680 self.assertEqual(int('mb994ag', 24), 4294967296)
681 self.assertEqual(int('hek2mgl', 25), 4294967296)
682 self.assertEqual(int('dnchbnm', 26), 4294967296)
683 self.assertEqual(int('b28jpdm', 27), 4294967296)
684 self.assertEqual(int('8pfgih4', 28), 4294967296)
685 self.assertEqual(int('76beigg', 29), 4294967296)
686 self.assertEqual(int('5qmcpqg', 30), 4294967296)
687 self.assertEqual(int('4q0jto4', 31), 4294967296)
688 self.assertEqual(int('4000000', 32), 4294967296)
689 self.assertEqual(int('3aokq94', 33), 4294967296)
690 self.assertEqual(int('2qhxjli', 34), 4294967296)
691 self.assertEqual(int('2br45qb', 35), 4294967296)
692 self.assertEqual(int('1z141z4', 36), 4294967296)
Thomas Wouters477c8d52006-05-27 19:21:47 +0000693
694 # SF bug 1334662: int(string, base) wrong answers
695 # Checks for proper evaluation of 2**32 + 1
Guido van Rossume2a383d2007-01-15 16:59:06 +0000696 self.assertEqual(int('100000000000000000000000000000001', 2), 4294967297)
697 self.assertEqual(int('102002022201221111212', 3), 4294967297)
698 self.assertEqual(int('10000000000000001', 4), 4294967297)
699 self.assertEqual(int('32244002423142', 5), 4294967297)
700 self.assertEqual(int('1550104015505', 6), 4294967297)
701 self.assertEqual(int('211301422355', 7), 4294967297)
702 self.assertEqual(int('40000000001', 8), 4294967297)
703 self.assertEqual(int('12068657455', 9), 4294967297)
704 self.assertEqual(int('4294967297', 10), 4294967297)
705 self.assertEqual(int('1904440555', 11), 4294967297)
706 self.assertEqual(int('9ba461595', 12), 4294967297)
707 self.assertEqual(int('535a7988a', 13), 4294967297)
708 self.assertEqual(int('2ca5b7465', 14), 4294967297)
709 self.assertEqual(int('1a20dcd82', 15), 4294967297)
710 self.assertEqual(int('100000001', 16), 4294967297)
711 self.assertEqual(int('a7ffda92', 17), 4294967297)
712 self.assertEqual(int('704he7g5', 18), 4294967297)
713 self.assertEqual(int('4f5aff67', 19), 4294967297)
714 self.assertEqual(int('3723ai4h', 20), 4294967297)
715 self.assertEqual(int('281d55i5', 21), 4294967297)
716 self.assertEqual(int('1fj8b185', 22), 4294967297)
717 self.assertEqual(int('1606k7id', 23), 4294967297)
718 self.assertEqual(int('mb994ah', 24), 4294967297)
719 self.assertEqual(int('hek2mgm', 25), 4294967297)
720 self.assertEqual(int('dnchbnn', 26), 4294967297)
721 self.assertEqual(int('b28jpdn', 27), 4294967297)
722 self.assertEqual(int('8pfgih5', 28), 4294967297)
723 self.assertEqual(int('76beigh', 29), 4294967297)
724 self.assertEqual(int('5qmcpqh', 30), 4294967297)
725 self.assertEqual(int('4q0jto5', 31), 4294967297)
726 self.assertEqual(int('4000001', 32), 4294967297)
727 self.assertEqual(int('3aokq95', 33), 4294967297)
728 self.assertEqual(int('2qhxjlj', 34), 4294967297)
729 self.assertEqual(int('2br45qc', 35), 4294967297)
730 self.assertEqual(int('1z141z5', 36), 4294967297)
Thomas Wouters477c8d52006-05-27 19:21:47 +0000731
Brett Cannonc3647ac2005-04-26 03:45:26 +0000732 def test_intconversion(self):
733 # Test __int__()
734 class Foo0:
735 def __int__(self):
736 return 42
737
738 class Foo1(object):
739 def __int__(self):
740 return 42
741
742 class Foo2(int):
743 def __int__(self):
744 return 42
745
746 class Foo3(int):
747 def __int__(self):
748 return self
749
750 class Foo4(int):
751 def __int__(self):
Guido van Rossume2a383d2007-01-15 16:59:06 +0000752 return 42
Brett Cannonc3647ac2005-04-26 03:45:26 +0000753
754 class Foo5(int):
755 def __int__(self):
756 return 42.
757
758 self.assertEqual(int(Foo0()), 42)
759 self.assertEqual(int(Foo1()), 42)
760 self.assertEqual(int(Foo2()), 42)
761 self.assertEqual(int(Foo3()), 0)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000762 self.assertEqual(int(Foo4()), 42)
Brett Cannonc3647ac2005-04-26 03:45:26 +0000763 self.assertRaises(TypeError, int, Foo5())
764
Walter Dörwald919497e2003-01-19 16:23:59 +0000765 def test_iter(self):
766 self.assertRaises(TypeError, iter)
767 self.assertRaises(TypeError, iter, 42, 42)
768 lists = [("1", "2"), ["1", "2"], "12"]
Walter Dörwald919497e2003-01-19 16:23:59 +0000769 for l in lists:
770 i = iter(l)
Georg Brandla18af4e2007-04-21 15:47:16 +0000771 self.assertEqual(next(i), '1')
772 self.assertEqual(next(i), '2')
773 self.assertRaises(StopIteration, next, i)
Walter Dörwald919497e2003-01-19 16:23:59 +0000774
775 def test_isinstance(self):
776 class C:
777 pass
778 class D(C):
779 pass
780 class E:
781 pass
782 c = C()
783 d = D()
784 e = E()
785 self.assert_(isinstance(c, C))
786 self.assert_(isinstance(d, C))
787 self.assert_(not isinstance(e, C))
788 self.assert_(not isinstance(c, D))
789 self.assert_(not isinstance('foo', E))
790 self.assertRaises(TypeError, isinstance, E, 'foo')
791 self.assertRaises(TypeError, isinstance)
792
793 def test_issubclass(self):
794 class C:
795 pass
796 class D(C):
797 pass
798 class E:
799 pass
800 c = C()
801 d = D()
802 e = E()
803 self.assert_(issubclass(D, C))
804 self.assert_(issubclass(C, C))
805 self.assert_(not issubclass(C, D))
806 self.assertRaises(TypeError, issubclass, 'foo', E)
807 self.assertRaises(TypeError, issubclass, E, 'foo')
808 self.assertRaises(TypeError, issubclass)
809
810 def test_len(self):
811 self.assertEqual(len('123'), 3)
812 self.assertEqual(len(()), 0)
813 self.assertEqual(len((1, 2, 3, 4)), 4)
814 self.assertEqual(len([1, 2, 3, 4]), 4)
815 self.assertEqual(len({}), 0)
816 self.assertEqual(len({'a':1, 'b': 2}), 2)
817 class BadSeq:
818 def __len__(self):
819 raise ValueError
820 self.assertRaises(ValueError, len, BadSeq())
821
822 def test_list(self):
823 self.assertEqual(list([]), [])
824 l0_3 = [0, 1, 2, 3]
825 l0_3_bis = list(l0_3)
826 self.assertEqual(l0_3, l0_3_bis)
827 self.assert_(l0_3 is not l0_3_bis)
828 self.assertEqual(list(()), [])
829 self.assertEqual(list((0, 1, 2, 3)), [0, 1, 2, 3])
830 self.assertEqual(list(''), [])
831 self.assertEqual(list('spam'), ['s', 'p', 'a', 'm'])
832
833 if sys.maxint == 0x7fffffff:
834 # This test can currently only work on 32-bit machines.
835 # XXX If/when PySequence_Length() returns a ssize_t, it should be
836 # XXX re-enabled.
837 # Verify clearing of bug #556025.
838 # This assumes that the max data size (sys.maxint) == max
839 # address size this also assumes that the address size is at
840 # least 4 bytes with 8 byte addresses, the bug is not well
841 # tested
842 #
843 # Note: This test is expected to SEGV under Cygwin 1.3.12 or
844 # earlier due to a newlib bug. See the following mailing list
845 # thread for the details:
846
847 # http://sources.redhat.com/ml/newlib/2002/msg00369.html
Guido van Rossum805365e2007-05-07 22:24:25 +0000848 self.assertRaises(MemoryError, list, range(sys.maxint // 2))
Walter Dörwald919497e2003-01-19 16:23:59 +0000849
Raymond Hettingeraa241e02004-09-26 19:24:20 +0000850 # This code used to segfault in Py2.4a3
851 x = []
852 x.extend(-y for y in x)
853 self.assertEqual(x, [])
854
Walter Dörwald919497e2003-01-19 16:23:59 +0000855 def test_long(self):
Guido van Rossume2a383d2007-01-15 16:59:06 +0000856 self.assertEqual(int(314), 314)
857 self.assertEqual(int(3.14), 3)
858 self.assertEqual(int(314), 314)
Walter Dörwald919497e2003-01-19 16:23:59 +0000859 # Check that conversion from float truncates towards zero
Guido van Rossume2a383d2007-01-15 16:59:06 +0000860 self.assertEqual(int(-3.14), -3)
861 self.assertEqual(int(3.9), 3)
862 self.assertEqual(int(-3.9), -3)
863 self.assertEqual(int(3.5), 3)
864 self.assertEqual(int(-3.5), -3)
865 self.assertEqual(int("-3"), -3)
Walter Dörwald919497e2003-01-19 16:23:59 +0000866 # Different base:
Guido van Rossume2a383d2007-01-15 16:59:06 +0000867 self.assertEqual(int("10",16), 16)
Walter Dörwald919497e2003-01-19 16:23:59 +0000868 # Check conversions from string (same test set as for int(), and then some)
869 LL = [
Guido van Rossume2a383d2007-01-15 16:59:06 +0000870 ('1' + '0'*20, 10**20),
871 ('1' + '0'*100, 10**100)
Walter Dörwald919497e2003-01-19 16:23:59 +0000872 ]
Walter Dörwald1f5947b2007-05-22 16:52:54 +0000873 for s, v in LL:
Walter Dörwald919497e2003-01-19 16:23:59 +0000874 for sign in "", "+", "-":
875 for prefix in "", " ", "\t", " \t\t ":
876 ss = prefix + sign + s
877 vv = v
878 if sign == "-" and v is not ValueError:
879 vv = -v
880 try:
Guido van Rossume2a383d2007-01-15 16:59:06 +0000881 self.assertEqual(int(ss), int(vv))
Walter Dörwald919497e2003-01-19 16:23:59 +0000882 except v:
883 pass
884
Guido van Rossume2a383d2007-01-15 16:59:06 +0000885 self.assertRaises(ValueError, int, '123\0')
886 self.assertRaises(ValueError, int, '53', 40)
887 self.assertRaises(TypeError, int, 1, 12)
Walter Dörwald919497e2003-01-19 16:23:59 +0000888
Guido van Rossumd8faa362007-04-27 19:54:29 +0000889 # SF patch #1638879: embedded NULs were not detected with
890 # explicit base
891 self.assertRaises(ValueError, int, '123\0', 10)
892 self.assertRaises(ValueError, int, '123\x00 245', 20)
893
Guido van Rossume2a383d2007-01-15 16:59:06 +0000894 self.assertEqual(int('100000000000000000000000000000000', 2),
Thomas Wouters477c8d52006-05-27 19:21:47 +0000895 4294967296)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000896 self.assertEqual(int('102002022201221111211', 3), 4294967296)
897 self.assertEqual(int('10000000000000000', 4), 4294967296)
898 self.assertEqual(int('32244002423141', 5), 4294967296)
899 self.assertEqual(int('1550104015504', 6), 4294967296)
900 self.assertEqual(int('211301422354', 7), 4294967296)
901 self.assertEqual(int('40000000000', 8), 4294967296)
902 self.assertEqual(int('12068657454', 9), 4294967296)
903 self.assertEqual(int('4294967296', 10), 4294967296)
904 self.assertEqual(int('1904440554', 11), 4294967296)
905 self.assertEqual(int('9ba461594', 12), 4294967296)
906 self.assertEqual(int('535a79889', 13), 4294967296)
907 self.assertEqual(int('2ca5b7464', 14), 4294967296)
908 self.assertEqual(int('1a20dcd81', 15), 4294967296)
909 self.assertEqual(int('100000000', 16), 4294967296)
910 self.assertEqual(int('a7ffda91', 17), 4294967296)
911 self.assertEqual(int('704he7g4', 18), 4294967296)
912 self.assertEqual(int('4f5aff66', 19), 4294967296)
913 self.assertEqual(int('3723ai4g', 20), 4294967296)
914 self.assertEqual(int('281d55i4', 21), 4294967296)
915 self.assertEqual(int('1fj8b184', 22), 4294967296)
916 self.assertEqual(int('1606k7ic', 23), 4294967296)
917 self.assertEqual(int('mb994ag', 24), 4294967296)
918 self.assertEqual(int('hek2mgl', 25), 4294967296)
919 self.assertEqual(int('dnchbnm', 26), 4294967296)
920 self.assertEqual(int('b28jpdm', 27), 4294967296)
921 self.assertEqual(int('8pfgih4', 28), 4294967296)
922 self.assertEqual(int('76beigg', 29), 4294967296)
923 self.assertEqual(int('5qmcpqg', 30), 4294967296)
924 self.assertEqual(int('4q0jto4', 31), 4294967296)
925 self.assertEqual(int('4000000', 32), 4294967296)
926 self.assertEqual(int('3aokq94', 33), 4294967296)
927 self.assertEqual(int('2qhxjli', 34), 4294967296)
928 self.assertEqual(int('2br45qb', 35), 4294967296)
929 self.assertEqual(int('1z141z4', 36), 4294967296)
Thomas Wouters477c8d52006-05-27 19:21:47 +0000930
Guido van Rossume2a383d2007-01-15 16:59:06 +0000931 self.assertEqual(int('100000000000000000000000000000001', 2),
Thomas Wouters477c8d52006-05-27 19:21:47 +0000932 4294967297)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000933 self.assertEqual(int('102002022201221111212', 3), 4294967297)
934 self.assertEqual(int('10000000000000001', 4), 4294967297)
935 self.assertEqual(int('32244002423142', 5), 4294967297)
936 self.assertEqual(int('1550104015505', 6), 4294967297)
937 self.assertEqual(int('211301422355', 7), 4294967297)
938 self.assertEqual(int('40000000001', 8), 4294967297)
939 self.assertEqual(int('12068657455', 9), 4294967297)
940 self.assertEqual(int('4294967297', 10), 4294967297)
941 self.assertEqual(int('1904440555', 11), 4294967297)
942 self.assertEqual(int('9ba461595', 12), 4294967297)
943 self.assertEqual(int('535a7988a', 13), 4294967297)
944 self.assertEqual(int('2ca5b7465', 14), 4294967297)
945 self.assertEqual(int('1a20dcd82', 15), 4294967297)
946 self.assertEqual(int('100000001', 16), 4294967297)
947 self.assertEqual(int('a7ffda92', 17), 4294967297)
948 self.assertEqual(int('704he7g5', 18), 4294967297)
949 self.assertEqual(int('4f5aff67', 19), 4294967297)
950 self.assertEqual(int('3723ai4h', 20), 4294967297)
951 self.assertEqual(int('281d55i5', 21), 4294967297)
952 self.assertEqual(int('1fj8b185', 22), 4294967297)
953 self.assertEqual(int('1606k7id', 23), 4294967297)
954 self.assertEqual(int('mb994ah', 24), 4294967297)
955 self.assertEqual(int('hek2mgm', 25), 4294967297)
956 self.assertEqual(int('dnchbnn', 26), 4294967297)
957 self.assertEqual(int('b28jpdn', 27), 4294967297)
958 self.assertEqual(int('8pfgih5', 28), 4294967297)
959 self.assertEqual(int('76beigh', 29), 4294967297)
960 self.assertEqual(int('5qmcpqh', 30), 4294967297)
961 self.assertEqual(int('4q0jto5', 31), 4294967297)
962 self.assertEqual(int('4000001', 32), 4294967297)
963 self.assertEqual(int('3aokq95', 33), 4294967297)
964 self.assertEqual(int('2qhxjlj', 34), 4294967297)
965 self.assertEqual(int('2br45qc', 35), 4294967297)
966 self.assertEqual(int('1z141z5', 36), 4294967297)
Thomas Wouters477c8d52006-05-27 19:21:47 +0000967
968
Brett Cannonc3647ac2005-04-26 03:45:26 +0000969 def test_longconversion(self):
970 # Test __long__()
971 class Foo0:
972 def __long__(self):
Guido van Rossume2a383d2007-01-15 16:59:06 +0000973 return 42
Brett Cannonc3647ac2005-04-26 03:45:26 +0000974
975 class Foo1(object):
976 def __long__(self):
Guido van Rossume2a383d2007-01-15 16:59:06 +0000977 return 42
Brett Cannonc3647ac2005-04-26 03:45:26 +0000978
Guido van Rossume2a383d2007-01-15 16:59:06 +0000979 class Foo2(int):
Brett Cannonc3647ac2005-04-26 03:45:26 +0000980 def __long__(self):
981 return 42
982
Guido van Rossume2a383d2007-01-15 16:59:06 +0000983 class Foo3(int):
984 def __long__(self):
985 return self
986
987 class Foo4(int):
988 def __long__(self):
989 return 42
990
991 class Foo5(int):
Brett Cannonc3647ac2005-04-26 03:45:26 +0000992 def __long__(self):
993 return 42.
994
Guido van Rossume2a383d2007-01-15 16:59:06 +0000995 self.assertEqual(int(Foo0()), 42)
996 self.assertEqual(int(Foo1()), 42)
Guido van Rossumd8faa362007-04-27 19:54:29 +0000997 # XXX invokes __int__ now
Guido van Rossumddefaf32007-01-14 03:31:43 +0000998 # self.assertEqual(long(Foo2()), 42L)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000999 self.assertEqual(int(Foo3()), 0)
Guido van Rossumd8faa362007-04-27 19:54:29 +00001000 # XXX likewise
Guido van Rossumddefaf32007-01-14 03:31:43 +00001001 # self.assertEqual(long(Foo4()), 42)
1002 # self.assertRaises(TypeError, long, Foo5())
Brett Cannonc3647ac2005-04-26 03:45:26 +00001003
Walter Dörwald919497e2003-01-19 16:23:59 +00001004 def test_map(self):
1005 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001006 list(map(None, 'hello')),
1007 [('h',), ('e',), ('l',), ('l',), ('o',)]
Walter Dörwald919497e2003-01-19 16:23:59 +00001008 )
1009 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001010 list(map(None, 'abcd', 'efg')),
1011 [('a', 'e'), ('b', 'f'), ('c', 'g')]
Walter Dörwald919497e2003-01-19 16:23:59 +00001012 )
1013 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001014 list(map(None, range(3))),
1015 [(0,), (1,), (2,)]
Walter Dörwald919497e2003-01-19 16:23:59 +00001016 )
1017 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001018 list(map(lambda x: x*x, range(1,4))),
Walter Dörwald919497e2003-01-19 16:23:59 +00001019 [1, 4, 9]
1020 )
1021 try:
1022 from math import sqrt
1023 except ImportError:
1024 def sqrt(x):
1025 return pow(x, 0.5)
1026 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001027 list(map(lambda x: list(map(sqrt, x)), [[16, 4], [81, 9]])),
Walter Dörwald919497e2003-01-19 16:23:59 +00001028 [[4.0, 2.0], [9.0, 3.0]]
1029 )
1030 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001031 list(map(lambda x, y: x+y, [1,3,2], [9,1,4])),
Walter Dörwald919497e2003-01-19 16:23:59 +00001032 [10, 4, 6]
1033 )
1034
1035 def plus(*v):
1036 accu = 0
1037 for i in v: accu = accu + i
1038 return accu
1039 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001040 list(map(plus, [1, 3, 7])),
Walter Dörwald919497e2003-01-19 16:23:59 +00001041 [1, 3, 7]
1042 )
1043 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001044 list(map(plus, [1, 3, 7], [4, 9, 2])),
Walter Dörwald919497e2003-01-19 16:23:59 +00001045 [1+4, 3+9, 7+2]
1046 )
1047 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001048 list(map(plus, [1, 3, 7], [4, 9, 2], [1, 1, 0])),
Walter Dörwald919497e2003-01-19 16:23:59 +00001049 [1+4+1, 3+9+1, 7+2+0]
1050 )
1051 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001052 list(map(None, Squares(10))),
1053 [(0,), (1,), (4,), (9,), (16,), (25,), (36,), (49,), (64,), (81,)]
1054 )
1055 self.assertEqual(
1056 list(map(int, Squares(10))),
Walter Dörwald919497e2003-01-19 16:23:59 +00001057 [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
1058 )
1059 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001060 list(map(None, Squares(3), Squares(2))),
1061 [(0,0), (1,1)]
Walter Dörwald919497e2003-01-19 16:23:59 +00001062 )
Guido van Rossum47b9ff62006-08-24 00:41:19 +00001063 def Max(a, b):
1064 if a is None:
1065 return b
1066 if b is None:
1067 return a
1068 return max(a, b)
Walter Dörwald919497e2003-01-19 16:23:59 +00001069 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001070 list(map(Max, Squares(3), Squares(2))),
1071 [0, 1]
Walter Dörwald919497e2003-01-19 16:23:59 +00001072 )
1073 self.assertRaises(TypeError, map)
1074 self.assertRaises(TypeError, map, lambda x: x, 42)
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001075 self.assertEqual(list(map(None, [42])), [(42,)])
Walter Dörwald919497e2003-01-19 16:23:59 +00001076 class BadSeq:
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001077 def __iter__(self):
Walter Dörwald919497e2003-01-19 16:23:59 +00001078 raise ValueError
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001079 yield None
1080 self.assertRaises(ValueError, list, map(lambda x: x, BadSeq()))
Neal Norwitzfcf44352005-11-27 20:37:43 +00001081 def badfunc(x):
1082 raise RuntimeError
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001083 self.assertRaises(RuntimeError, list, map(badfunc, range(5)))
Walter Dörwald919497e2003-01-19 16:23:59 +00001084
1085 def test_max(self):
1086 self.assertEqual(max('123123'), '3')
1087 self.assertEqual(max(1, 2, 3), 3)
1088 self.assertEqual(max((1, 2, 3, 1, 2, 3)), 3)
1089 self.assertEqual(max([1, 2, 3, 1, 2, 3]), 3)
1090
Guido van Rossume2a383d2007-01-15 16:59:06 +00001091 self.assertEqual(max(1, 2, 3.0), 3.0)
1092 self.assertEqual(max(1, 2.0, 3), 3)
1093 self.assertEqual(max(1.0, 2, 3), 3)
Walter Dörwald919497e2003-01-19 16:23:59 +00001094
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001095 for stmt in (
1096 "max(key=int)", # no args
1097 "max(1, key=int)", # single arg not iterable
1098 "max(1, 2, keystone=int)", # wrong keyword
1099 "max(1, 2, key=int, abc=int)", # two many keywords
1100 "max(1, 2, key=1)", # keyfunc is not callable
1101 ):
Tim Peters7f061872004-12-07 21:17:46 +00001102 try:
Georg Brandl7cae87c2006-09-06 06:51:57 +00001103 exec(stmt, globals())
Tim Peters7f061872004-12-07 21:17:46 +00001104 except TypeError:
1105 pass
1106 else:
1107 self.fail(stmt)
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001108
1109 self.assertEqual(max((1,), key=neg), 1) # one elem iterable
1110 self.assertEqual(max((1,2), key=neg), 1) # two elem iterable
1111 self.assertEqual(max(1, 2, key=neg), 1) # two elems
1112
1113 data = [random.randrange(200) for i in range(100)]
1114 keys = dict((elem, random.randrange(50)) for elem in data)
1115 f = keys.__getitem__
1116 self.assertEqual(max(data, key=f),
1117 sorted(reversed(data), key=f)[-1])
1118
Walter Dörwald919497e2003-01-19 16:23:59 +00001119 def test_min(self):
1120 self.assertEqual(min('123123'), '1')
1121 self.assertEqual(min(1, 2, 3), 1)
1122 self.assertEqual(min((1, 2, 3, 1, 2, 3)), 1)
1123 self.assertEqual(min([1, 2, 3, 1, 2, 3]), 1)
1124
Guido van Rossume2a383d2007-01-15 16:59:06 +00001125 self.assertEqual(min(1, 2, 3.0), 1)
1126 self.assertEqual(min(1, 2.0, 3), 1)
1127 self.assertEqual(min(1.0, 2, 3), 1.0)
Walter Dörwald919497e2003-01-19 16:23:59 +00001128
1129 self.assertRaises(TypeError, min)
1130 self.assertRaises(TypeError, min, 42)
1131 self.assertRaises(ValueError, min, ())
1132 class BadSeq:
1133 def __getitem__(self, index):
1134 raise ValueError
1135 self.assertRaises(ValueError, min, BadSeq())
1136 class BadNumber:
1137 def __cmp__(self, other):
1138 raise ValueError
Guido van Rossum47b9ff62006-08-24 00:41:19 +00001139 self.assertRaises(TypeError, min, (42, BadNumber()))
Walter Dörwald919497e2003-01-19 16:23:59 +00001140
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001141 for stmt in (
1142 "min(key=int)", # no args
1143 "min(1, key=int)", # single arg not iterable
1144 "min(1, 2, keystone=int)", # wrong keyword
1145 "min(1, 2, key=int, abc=int)", # two many keywords
1146 "min(1, 2, key=1)", # keyfunc is not callable
1147 ):
Tim Peters7f061872004-12-07 21:17:46 +00001148 try:
Georg Brandl7cae87c2006-09-06 06:51:57 +00001149 exec(stmt, globals())
Tim Peters7f061872004-12-07 21:17:46 +00001150 except TypeError:
1151 pass
1152 else:
1153 self.fail(stmt)
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001154
1155 self.assertEqual(min((1,), key=neg), 1) # one elem iterable
1156 self.assertEqual(min((1,2), key=neg), 2) # two elem iterable
1157 self.assertEqual(min(1, 2, key=neg), 2) # two elems
1158
1159 data = [random.randrange(200) for i in range(100)]
1160 keys = dict((elem, random.randrange(50)) for elem in data)
1161 f = keys.__getitem__
1162 self.assertEqual(min(data, key=f),
1163 sorted(data, key=f)[0])
1164
Georg Brandla18af4e2007-04-21 15:47:16 +00001165 def test_next(self):
1166 it = iter(range(2))
1167 self.assertEqual(next(it), 0)
1168 self.assertEqual(next(it), 1)
1169 self.assertRaises(StopIteration, next, it)
1170 self.assertRaises(StopIteration, next, it)
1171 self.assertEquals(next(it, 42), 42)
1172
1173 class Iter(object):
1174 def __iter__(self):
1175 return self
1176 def __next__(self):
1177 raise StopIteration
1178
1179 it = iter(Iter())
1180 self.assertEquals(next(it, 42), 42)
1181 self.assertRaises(StopIteration, next, it)
1182
1183 def gen():
1184 yield 1
1185 return
1186
1187 it = gen()
1188 self.assertEquals(next(it), 1)
1189 self.assertRaises(StopIteration, next, it)
1190 self.assertEquals(next(it, 42), 42)
1191
Walter Dörwald919497e2003-01-19 16:23:59 +00001192 def test_oct(self):
Guido van Rossumcd16bf62007-06-13 18:07:49 +00001193 self.assertEqual(oct(100), '0o144')
1194 self.assertEqual(oct(100), '0o144')
1195 self.assertEqual(oct(-100), '-0o144')
1196 self.assertEqual(oct(-100), '-0o144')
Walter Dörwald919497e2003-01-19 16:23:59 +00001197 self.assertRaises(TypeError, oct, ())
1198
1199 def write_testfile(self):
Guido van Rossuma88a0332007-02-26 16:59:55 +00001200 # NB the first 4 lines are also used to test input, below
Walter Dörwald919497e2003-01-19 16:23:59 +00001201 fp = open(TESTFN, 'w')
1202 try:
1203 fp.write('1+1\n')
1204 fp.write('1+1\n')
1205 fp.write('The quick brown fox jumps over the lazy dog')
1206 fp.write('.\n')
1207 fp.write('Dear John\n')
1208 fp.write('XXX'*100)
1209 fp.write('YYY'*100)
1210 finally:
1211 fp.close()
1212
1213 def test_open(self):
1214 self.write_testfile()
1215 fp = open(TESTFN, 'r')
1216 try:
1217 self.assertEqual(fp.readline(4), '1+1\n')
1218 self.assertEqual(fp.readline(4), '1+1\n')
1219 self.assertEqual(fp.readline(), 'The quick brown fox jumps over the lazy dog.\n')
1220 self.assertEqual(fp.readline(4), 'Dear')
1221 self.assertEqual(fp.readline(100), ' John\n')
1222 self.assertEqual(fp.read(300), 'XXX'*100)
1223 self.assertEqual(fp.read(1000), 'YYY'*100)
1224 finally:
1225 fp.close()
1226 unlink(TESTFN)
1227
1228 def test_ord(self):
1229 self.assertEqual(ord(' '), 32)
1230 self.assertEqual(ord('A'), 65)
1231 self.assertEqual(ord('a'), 97)
Guido van Rossumf9e91c92007-05-08 21:05:48 +00001232 self.assertEqual(ord('\x80'), 128)
1233 self.assertEqual(ord('\xff'), 255)
1234
1235 self.assertEqual(ord(b' '), 32)
1236 self.assertEqual(ord(b'A'), 65)
1237 self.assertEqual(ord(b'a'), 97)
1238 self.assertEqual(ord(b'\x80'), 128)
1239 self.assertEqual(ord(b'\xff'), 255)
1240
Walter Dörwald1f5947b2007-05-22 16:52:54 +00001241 self.assertEqual(ord(chr(sys.maxunicode)), sys.maxunicode)
Walter Dörwald919497e2003-01-19 16:23:59 +00001242 self.assertRaises(TypeError, ord, 42)
Walter Dörwald919497e2003-01-19 16:23:59 +00001243
Guido van Rossum8ac004e2007-07-15 13:00:05 +00001244 self.assertEqual(ord(chr(0x10FFFF)), 0x10FFFF)
1245 self.assertEqual(ord("\U0000FFFF"), 0x0000FFFF)
1246 self.assertEqual(ord("\U00010000"), 0x00010000)
1247 self.assertEqual(ord("\U00010001"), 0x00010001)
1248 self.assertEqual(ord("\U000FFFFE"), 0x000FFFFE)
1249 self.assertEqual(ord("\U000FFFFF"), 0x000FFFFF)
1250 self.assertEqual(ord("\U00100000"), 0x00100000)
1251 self.assertEqual(ord("\U00100001"), 0x00100001)
1252 self.assertEqual(ord("\U0010FFFE"), 0x0010FFFE)
1253 self.assertEqual(ord("\U0010FFFF"), 0x0010FFFF)
1254
Walter Dörwald919497e2003-01-19 16:23:59 +00001255 def test_pow(self):
1256 self.assertEqual(pow(0,0), 1)
1257 self.assertEqual(pow(0,1), 0)
1258 self.assertEqual(pow(1,0), 1)
1259 self.assertEqual(pow(1,1), 1)
1260
1261 self.assertEqual(pow(2,0), 1)
1262 self.assertEqual(pow(2,10), 1024)
1263 self.assertEqual(pow(2,20), 1024*1024)
1264 self.assertEqual(pow(2,30), 1024*1024*1024)
1265
1266 self.assertEqual(pow(-2,0), 1)
1267 self.assertEqual(pow(-2,1), -2)
1268 self.assertEqual(pow(-2,2), 4)
1269 self.assertEqual(pow(-2,3), -8)
1270
Guido van Rossume2a383d2007-01-15 16:59:06 +00001271 self.assertEqual(pow(0,0), 1)
1272 self.assertEqual(pow(0,1), 0)
1273 self.assertEqual(pow(1,0), 1)
1274 self.assertEqual(pow(1,1), 1)
Walter Dörwald919497e2003-01-19 16:23:59 +00001275
Guido van Rossume2a383d2007-01-15 16:59:06 +00001276 self.assertEqual(pow(2,0), 1)
1277 self.assertEqual(pow(2,10), 1024)
1278 self.assertEqual(pow(2,20), 1024*1024)
1279 self.assertEqual(pow(2,30), 1024*1024*1024)
Walter Dörwald919497e2003-01-19 16:23:59 +00001280
Guido van Rossume2a383d2007-01-15 16:59:06 +00001281 self.assertEqual(pow(-2,0), 1)
1282 self.assertEqual(pow(-2,1), -2)
1283 self.assertEqual(pow(-2,2), 4)
1284 self.assertEqual(pow(-2,3), -8)
Walter Dörwald919497e2003-01-19 16:23:59 +00001285
1286 self.assertAlmostEqual(pow(0.,0), 1.)
1287 self.assertAlmostEqual(pow(0.,1), 0.)
1288 self.assertAlmostEqual(pow(1.,0), 1.)
1289 self.assertAlmostEqual(pow(1.,1), 1.)
1290
1291 self.assertAlmostEqual(pow(2.,0), 1.)
1292 self.assertAlmostEqual(pow(2.,10), 1024.)
1293 self.assertAlmostEqual(pow(2.,20), 1024.*1024.)
1294 self.assertAlmostEqual(pow(2.,30), 1024.*1024.*1024.)
1295
1296 self.assertAlmostEqual(pow(-2.,0), 1.)
1297 self.assertAlmostEqual(pow(-2.,1), -2.)
1298 self.assertAlmostEqual(pow(-2.,2), 4.)
1299 self.assertAlmostEqual(pow(-2.,3), -8.)
1300
Guido van Rossume2a383d2007-01-15 16:59:06 +00001301 for x in 2, 2, 2.0:
1302 for y in 10, 10, 10.0:
1303 for z in 1000, 1000, 1000.0:
Walter Dörwald919497e2003-01-19 16:23:59 +00001304 if isinstance(x, float) or \
1305 isinstance(y, float) or \
1306 isinstance(z, float):
1307 self.assertRaises(TypeError, pow, x, y, z)
1308 else:
1309 self.assertAlmostEqual(pow(x, y, z), 24.0)
1310
1311 self.assertRaises(TypeError, pow, -1, -2, 3)
1312 self.assertRaises(ValueError, pow, 1, 2, 0)
Guido van Rossume2a383d2007-01-15 16:59:06 +00001313 self.assertRaises(TypeError, pow, -1, -2, 3)
1314 self.assertRaises(ValueError, pow, 1, 2, 0)
Walter Dörwald919497e2003-01-19 16:23:59 +00001315 self.assertRaises(ValueError, pow, -342.43, 0.234)
1316
1317 self.assertRaises(TypeError, pow)
1318
1319 def test_range(self):
Guido van Rossum805365e2007-05-07 22:24:25 +00001320 self.assertEqual(list(range(3)), [0, 1, 2])
1321 self.assertEqual(list(range(1, 5)), [1, 2, 3, 4])
1322 self.assertEqual(list(range(0)), [])
1323 self.assertEqual(list(range(-3)), [])
1324 self.assertEqual(list(range(1, 10, 3)), [1, 4, 7])
1325 #self.assertEqual(list(range(5, -5, -3)), [5, 2, -1, -4])
Walter Dörwald919497e2003-01-19 16:23:59 +00001326
Guido van Rossum805365e2007-05-07 22:24:25 +00001327 """ XXX(nnorwitz):
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001328 # Now test range() with longs
Guido van Rossum805365e2007-05-07 22:24:25 +00001329 self.assertEqual(list(range(-2**100)), [])
1330 self.assertEqual(list(range(0, -2**100)), [])
1331 self.assertEqual(list(range(0, 2**100, -1)), [])
1332 self.assertEqual(list(range(0, 2**100, -1)), [])
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001333
Guido van Rossume2a383d2007-01-15 16:59:06 +00001334 a = int(10 * sys.maxint)
1335 b = int(100 * sys.maxint)
1336 c = int(50 * sys.maxint)
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001337
Guido van Rossum805365e2007-05-07 22:24:25 +00001338 self.assertEqual(list(range(a, a+2)), [a, a+1])
1339 self.assertEqual(list(range(a+2, a, -1)), [a+2, a+1])
1340 self.assertEqual(list(range(a+4, a, -2)), [a+4, a+2])
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001341
Guido van Rossum805365e2007-05-07 22:24:25 +00001342 seq = list(range(a, b, c))
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001343 self.assert_(a in seq)
1344 self.assert_(b not in seq)
1345 self.assertEqual(len(seq), 2)
1346
Guido van Rossum805365e2007-05-07 22:24:25 +00001347 seq = list(range(b, a, -c))
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001348 self.assert_(b in seq)
1349 self.assert_(a not in seq)
1350 self.assertEqual(len(seq), 2)
1351
Guido van Rossum805365e2007-05-07 22:24:25 +00001352 seq = list(range(-a, -b, -c))
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001353 self.assert_(-a in seq)
1354 self.assert_(-b not in seq)
1355 self.assertEqual(len(seq), 2)
1356
Walter Dörwald919497e2003-01-19 16:23:59 +00001357 self.assertRaises(TypeError, range)
1358 self.assertRaises(TypeError, range, 1, 2, 3, 4)
1359 self.assertRaises(ValueError, range, 1, 2, 0)
Guido van Rossume2a383d2007-01-15 16:59:06 +00001360 self.assertRaises(ValueError, range, a, a + 1, int(0))
Neal Norwitzfcf44352005-11-27 20:37:43 +00001361
1362 class badzero(int):
Guido van Rossum47b9ff62006-08-24 00:41:19 +00001363 def __eq__(self, other):
Neal Norwitzfcf44352005-11-27 20:37:43 +00001364 raise RuntimeError
Guido van Rossum47b9ff62006-08-24 00:41:19 +00001365 __ne__ = __lt__ = __gt__ = __le__ = __ge__ = __eq__
1366
1367 # XXX This won't (but should!) raise RuntimeError if a is an int...
Neal Norwitzfcf44352005-11-27 20:37:43 +00001368 self.assertRaises(RuntimeError, range, a, a + 1, badzero(1))
Guido van Rossum805365e2007-05-07 22:24:25 +00001369 """
Walter Dörwald919497e2003-01-19 16:23:59 +00001370
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001371 # Reject floats when it would require PyLongs to represent.
1372 # (smaller floats still accepted, but deprecated)
Tim Peters299b3df2003-04-15 14:40:03 +00001373 self.assertRaises(TypeError, range, 1e100, 1e101, 1e101)
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001374
Walter Dörwald357981e2003-04-15 18:59:28 +00001375 self.assertRaises(TypeError, range, 0, "spam")
1376 self.assertRaises(TypeError, range, 0, 42, "spam")
1377
Guido van Rossum805365e2007-05-07 22:24:25 +00001378 #NEAL self.assertRaises(OverflowError, range, -sys.maxint, sys.maxint)
1379 #NEAL self.assertRaises(OverflowError, range, 0, 2*sys.maxint)
1380
1381 self.assertRaises(OverflowError, len, range(0, sys.maxint**10))
Walter Dörwald357981e2003-04-15 18:59:28 +00001382
Guido van Rossuma88a0332007-02-26 16:59:55 +00001383 def test_input(self):
1384 self.write_testfile()
1385 fp = open(TESTFN, 'r')
1386 savestdin = sys.stdin
1387 savestdout = sys.stdout # Eats the echo
1388 try:
1389 sys.stdin = fp
1390 sys.stdout = BitBucket()
1391 self.assertEqual(input(), "1+1")
1392 self.assertEqual(input('testing\n'), "1+1")
1393 self.assertEqual(input(), 'The quick brown fox jumps over the lazy dog.')
1394 self.assertEqual(input('testing\n'), 'Dear John')
1395
1396 # SF 1535165: don't segfault on closed stdin
1397 # sys.stdout must be a regular file for triggering
1398 sys.stdout = savestdout
1399 sys.stdin.close()
1400 self.assertRaises(ValueError, input)
1401
1402 sys.stdout = BitBucket()
Guido van Rossum34d19282007-08-09 01:03:29 +00001403 sys.stdin = io.StringIO("NULL\0")
Guido van Rossuma88a0332007-02-26 16:59:55 +00001404 self.assertRaises(TypeError, input, 42, 42)
Guido van Rossum34d19282007-08-09 01:03:29 +00001405 sys.stdin = io.StringIO(" 'whitespace'")
Guido van Rossuma88a0332007-02-26 16:59:55 +00001406 self.assertEqual(input(), " 'whitespace'")
Guido van Rossum34d19282007-08-09 01:03:29 +00001407 sys.stdin = io.StringIO()
Guido van Rossuma88a0332007-02-26 16:59:55 +00001408 self.assertRaises(EOFError, input)
1409
1410 del sys.stdout
1411 self.assertRaises(RuntimeError, input, 'prompt')
1412 del sys.stdin
1413 self.assertRaises(RuntimeError, input, 'prompt')
1414 finally:
1415 sys.stdin = savestdin
1416 sys.stdout = savestdout
1417 fp.close()
1418 unlink(TESTFN)
1419
Walter Dörwald919497e2003-01-19 16:23:59 +00001420 def test_repr(self):
1421 self.assertEqual(repr(''), '\'\'')
1422 self.assertEqual(repr(0), '0')
Guido van Rossume2a383d2007-01-15 16:59:06 +00001423 self.assertEqual(repr(0), '0')
Walter Dörwald919497e2003-01-19 16:23:59 +00001424 self.assertEqual(repr(()), '()')
1425 self.assertEqual(repr([]), '[]')
1426 self.assertEqual(repr({}), '{}')
1427 a = []
1428 a.append(a)
1429 self.assertEqual(repr(a), '[[...]]')
1430 a = {}
1431 a[0] = a
1432 self.assertEqual(repr(a), '{0: {...}}')
1433
1434 def test_round(self):
1435 self.assertEqual(round(0.0), 0.0)
1436 self.assertEqual(round(1.0), 1.0)
1437 self.assertEqual(round(10.0), 10.0)
1438 self.assertEqual(round(1000000000.0), 1000000000.0)
1439 self.assertEqual(round(1e20), 1e20)
1440
1441 self.assertEqual(round(-1.0), -1.0)
1442 self.assertEqual(round(-10.0), -10.0)
1443 self.assertEqual(round(-1000000000.0), -1000000000.0)
1444 self.assertEqual(round(-1e20), -1e20)
1445
1446 self.assertEqual(round(0.1), 0.0)
1447 self.assertEqual(round(1.1), 1.0)
1448 self.assertEqual(round(10.1), 10.0)
1449 self.assertEqual(round(1000000000.1), 1000000000.0)
1450
1451 self.assertEqual(round(-1.1), -1.0)
1452 self.assertEqual(round(-10.1), -10.0)
1453 self.assertEqual(round(-1000000000.1), -1000000000.0)
1454
1455 self.assertEqual(round(0.9), 1.0)
1456 self.assertEqual(round(9.9), 10.0)
1457 self.assertEqual(round(999999999.9), 1000000000.0)
1458
1459 self.assertEqual(round(-0.9), -1.0)
1460 self.assertEqual(round(-9.9), -10.0)
1461 self.assertEqual(round(-999999999.9), -1000000000.0)
1462
1463 self.assertEqual(round(-8.0, -1), -10.0)
1464
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001465 # test new kwargs
1466 self.assertEqual(round(number=-8.0, ndigits=-1), -10.0)
1467
Walter Dörwald919497e2003-01-19 16:23:59 +00001468 self.assertRaises(TypeError, round)
1469
1470 def test_setattr(self):
Tim Petersf2715e02003-02-19 02:35:07 +00001471 setattr(sys, 'spam', 1)
1472 self.assertEqual(sys.spam, 1)
1473 self.assertRaises(TypeError, setattr, sys, 1, 'spam')
1474 self.assertRaises(TypeError, setattr)
Walter Dörwald919497e2003-01-19 16:23:59 +00001475
1476 def test_str(self):
1477 self.assertEqual(str(''), '')
1478 self.assertEqual(str(0), '0')
Guido van Rossume2a383d2007-01-15 16:59:06 +00001479 self.assertEqual(str(0), '0')
Walter Dörwald919497e2003-01-19 16:23:59 +00001480 self.assertEqual(str(()), '()')
1481 self.assertEqual(str([]), '[]')
1482 self.assertEqual(str({}), '{}')
1483 a = []
1484 a.append(a)
1485 self.assertEqual(str(a), '[[...]]')
1486 a = {}
1487 a[0] = a
1488 self.assertEqual(str(a), '{0: {...}}')
1489
Alex Martellia70b1912003-04-22 08:12:33 +00001490 def test_sum(self):
1491 self.assertEqual(sum([]), 0)
Guido van Rossum805365e2007-05-07 22:24:25 +00001492 self.assertEqual(sum(list(range(2,8))), 27)
1493 self.assertEqual(sum(iter(list(range(2,8)))), 27)
Alex Martellia70b1912003-04-22 08:12:33 +00001494 self.assertEqual(sum(Squares(10)), 285)
1495 self.assertEqual(sum(iter(Squares(10))), 285)
1496 self.assertEqual(sum([[1], [2], [3]], []), [1, 2, 3])
1497
1498 self.assertRaises(TypeError, sum)
1499 self.assertRaises(TypeError, sum, 42)
1500 self.assertRaises(TypeError, sum, ['a', 'b', 'c'])
1501 self.assertRaises(TypeError, sum, ['a', 'b', 'c'], '')
1502 self.assertRaises(TypeError, sum, [[1], [2], [3]])
1503 self.assertRaises(TypeError, sum, [{2:3}])
1504 self.assertRaises(TypeError, sum, [{2:3}]*2, {2:3})
1505
1506 class BadSeq:
1507 def __getitem__(self, index):
1508 raise ValueError
1509 self.assertRaises(ValueError, sum, BadSeq())
1510
Walter Dörwald919497e2003-01-19 16:23:59 +00001511 def test_tuple(self):
1512 self.assertEqual(tuple(()), ())
1513 t0_3 = (0, 1, 2, 3)
1514 t0_3_bis = tuple(t0_3)
1515 self.assert_(t0_3 is t0_3_bis)
1516 self.assertEqual(tuple([]), ())
1517 self.assertEqual(tuple([0, 1, 2, 3]), (0, 1, 2, 3))
1518 self.assertEqual(tuple(''), ())
1519 self.assertEqual(tuple('spam'), ('s', 'p', 'a', 'm'))
1520
1521 def test_type(self):
1522 self.assertEqual(type(''), type('123'))
1523 self.assertNotEqual(type(''), type(()))
1524
Guido van Rossumfee7b932005-01-16 00:21:28 +00001525 # We don't want self in vars(), so these are static methods
1526
1527 @staticmethod
Walter Dörwald919497e2003-01-19 16:23:59 +00001528 def get_vars_f0():
1529 return vars()
Walter Dörwald919497e2003-01-19 16:23:59 +00001530
Guido van Rossumfee7b932005-01-16 00:21:28 +00001531 @staticmethod
Walter Dörwald919497e2003-01-19 16:23:59 +00001532 def get_vars_f2():
1533 BuiltinTest.get_vars_f0()
1534 a = 1
1535 b = 2
1536 return vars()
Walter Dörwald919497e2003-01-19 16:23:59 +00001537
1538 def test_vars(self):
Raymond Hettingera690a992003-11-16 16:17:49 +00001539 self.assertEqual(set(vars()), set(dir()))
Walter Dörwald919497e2003-01-19 16:23:59 +00001540 import sys
Raymond Hettingera690a992003-11-16 16:17:49 +00001541 self.assertEqual(set(vars(sys)), set(dir(sys)))
Walter Dörwald919497e2003-01-19 16:23:59 +00001542 self.assertEqual(self.get_vars_f0(), {})
1543 self.assertEqual(self.get_vars_f2(), {'a': 1, 'b': 2})
1544 self.assertRaises(TypeError, vars, 42, 42)
1545 self.assertRaises(TypeError, vars, 42)
1546
1547 def test_zip(self):
1548 a = (1, 2, 3)
1549 b = (4, 5, 6)
1550 t = [(1, 4), (2, 5), (3, 6)]
Guido van Rossum801f0d72006-08-24 19:48:10 +00001551 self.assertEqual(list(zip(a, b)), t)
Walter Dörwald919497e2003-01-19 16:23:59 +00001552 b = [4, 5, 6]
Guido van Rossum801f0d72006-08-24 19:48:10 +00001553 self.assertEqual(list(zip(a, b)), t)
Walter Dörwald919497e2003-01-19 16:23:59 +00001554 b = (4, 5, 6, 7)
Guido van Rossum801f0d72006-08-24 19:48:10 +00001555 self.assertEqual(list(zip(a, b)), t)
Walter Dörwald919497e2003-01-19 16:23:59 +00001556 class I:
1557 def __getitem__(self, i):
1558 if i < 0 or i > 2: raise IndexError
1559 return i + 4
Guido van Rossum801f0d72006-08-24 19:48:10 +00001560 self.assertEqual(list(zip(a, I())), t)
1561 self.assertEqual(list(zip()), [])
1562 self.assertEqual(list(zip(*[])), [])
Walter Dörwald919497e2003-01-19 16:23:59 +00001563 self.assertRaises(TypeError, zip, None)
1564 class G:
1565 pass
1566 self.assertRaises(TypeError, zip, a, G())
1567
1568 # Make sure zip doesn't try to allocate a billion elements for the
1569 # result list when one of its arguments doesn't say how long it is.
1570 # A MemoryError is the most likely failure mode.
1571 class SequenceWithoutALength:
1572 def __getitem__(self, i):
1573 if i == 5:
1574 raise IndexError
1575 else:
1576 return i
1577 self.assertEqual(
Guido van Rossum805365e2007-05-07 22:24:25 +00001578 list(zip(SequenceWithoutALength(), range(2**30))),
Walter Dörwald919497e2003-01-19 16:23:59 +00001579 list(enumerate(range(5)))
1580 )
1581
1582 class BadSeq:
1583 def __getitem__(self, i):
1584 if i == 5:
1585 raise ValueError
1586 else:
1587 return i
Guido van Rossum801f0d72006-08-24 19:48:10 +00001588 self.assertRaises(ValueError, list, zip(BadSeq(), BadSeq()))
Walter Dörwald919497e2003-01-19 16:23:59 +00001589
Raymond Hettinger64958a12003-12-17 20:43:33 +00001590class TestSorted(unittest.TestCase):
1591
1592 def test_basic(self):
Guido van Rossum805365e2007-05-07 22:24:25 +00001593 data = list(range(100))
Raymond Hettinger64958a12003-12-17 20:43:33 +00001594 copy = data[:]
1595 random.shuffle(copy)
1596 self.assertEqual(data, sorted(copy))
1597 self.assertNotEqual(data, copy)
1598
1599 data.reverse()
1600 random.shuffle(copy)
Guido van Rossum47b9ff62006-08-24 00:41:19 +00001601 self.assertEqual(data, sorted(copy, cmp=lambda x, y: (x < y) - (x > y)))
Raymond Hettinger64958a12003-12-17 20:43:33 +00001602 self.assertNotEqual(data, copy)
1603 random.shuffle(copy)
1604 self.assertEqual(data, sorted(copy, key=lambda x: -x))
1605 self.assertNotEqual(data, copy)
1606 random.shuffle(copy)
1607 self.assertEqual(data, sorted(copy, reverse=1))
1608 self.assertNotEqual(data, copy)
1609
1610 def test_inputtypes(self):
1611 s = 'abracadabra'
Walter Dörwald1f5947b2007-05-22 16:52:54 +00001612 types = [list, tuple, str]
Walter Dörwald4e41a4b2005-08-03 17:09:04 +00001613 for T in types:
Raymond Hettinger64958a12003-12-17 20:43:33 +00001614 self.assertEqual(sorted(s), sorted(T(s)))
1615
Walter Dörwald1f5947b2007-05-22 16:52:54 +00001616 s = ''.join(set(s)) # unique letters only
1617 types = [str, set, frozenset, list, tuple, dict.fromkeys]
Walter Dörwald4e41a4b2005-08-03 17:09:04 +00001618 for T in types:
Raymond Hettinger64958a12003-12-17 20:43:33 +00001619 self.assertEqual(sorted(s), sorted(T(s)))
1620
1621 def test_baddecorator(self):
1622 data = 'The quick Brown fox Jumped over The lazy Dog'.split()
1623 self.assertRaises(TypeError, sorted, data, None, lambda x,y: 0)
1624
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001625def test_main(verbose=None):
1626 test_classes = (BuiltinTest, TestSorted)
1627
1628 run_unittest(*test_classes)
1629
1630 # verify reference counting
1631 if verbose and hasattr(sys, "gettotalrefcount"):
1632 import gc
1633 counts = [None] * 5
Guido van Rossum805365e2007-05-07 22:24:25 +00001634 for i in range(len(counts)):
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001635 run_unittest(*test_classes)
1636 gc.collect()
1637 counts[i] = sys.gettotalrefcount()
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001638 print(counts)
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001639
Walter Dörwald919497e2003-01-19 16:23:59 +00001640
1641if __name__ == "__main__":
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001642 test_main(verbose=True)