blob: 4f843289acbc19e54ccad57d22e285af9da3ff41 [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
Collin Winter3eed7652007-08-14 17:53:54 +0000286 # dir(traceback)
287 try:
288 raise IndexError
289 except:
290 self.assertEqual(len(dir(sys.exc_info()[2])), 4)
291
292
Walter Dörwald919497e2003-01-19 16:23:59 +0000293 def test_divmod(self):
294 self.assertEqual(divmod(12, 7), (1, 5))
295 self.assertEqual(divmod(-12, 7), (-2, 2))
296 self.assertEqual(divmod(12, -7), (-2, -2))
297 self.assertEqual(divmod(-12, -7), (1, -5))
298
Guido van Rossume2a383d2007-01-15 16:59:06 +0000299 self.assertEqual(divmod(12, 7), (1, 5))
300 self.assertEqual(divmod(-12, 7), (-2, 2))
301 self.assertEqual(divmod(12, -7), (-2, -2))
302 self.assertEqual(divmod(-12, -7), (1, -5))
Walter Dörwald919497e2003-01-19 16:23:59 +0000303
Guido van Rossume2a383d2007-01-15 16:59:06 +0000304 self.assertEqual(divmod(12, 7), (1, 5))
305 self.assertEqual(divmod(-12, 7), (-2, 2))
306 self.assertEqual(divmod(12, -7), (-2, -2))
307 self.assertEqual(divmod(-12, -7), (1, -5))
Walter Dörwald919497e2003-01-19 16:23:59 +0000308
Raymond Hettinger5ea7e312004-09-30 07:47:20 +0000309 self.assertEqual(divmod(-sys.maxint-1, -1),
310 (sys.maxint+1, 0))
311
Walter Dörwald919497e2003-01-19 16:23:59 +0000312 self.assert_(not fcmp(divmod(3.25, 1.0), (3.0, 0.25)))
313 self.assert_(not fcmp(divmod(-3.25, 1.0), (-4.0, 0.75)))
314 self.assert_(not fcmp(divmod(3.25, -1.0), (-4.0, -0.75)))
315 self.assert_(not fcmp(divmod(-3.25, -1.0), (3.0, -0.25)))
316
317 self.assertRaises(TypeError, divmod)
318
319 def test_eval(self):
320 self.assertEqual(eval('1+1'), 2)
321 self.assertEqual(eval(' 1+1\n'), 2)
322 globals = {'a': 1, 'b': 2}
323 locals = {'b': 200, 'c': 300}
324 self.assertEqual(eval('a', globals) , 1)
325 self.assertEqual(eval('a', globals, locals), 1)
326 self.assertEqual(eval('b', globals, locals), 200)
327 self.assertEqual(eval('c', globals, locals), 300)
Walter Dörwald919497e2003-01-19 16:23:59 +0000328 globals = {'a': 1, 'b': 2}
329 locals = {'b': 200, 'c': 300}
Walter Dörwald1f5947b2007-05-22 16:52:54 +0000330## bom = b'\xef\xbb\xbf'
331## self.assertEqual(eval(bom + b'a', globals, locals), 1)
332 self.assertEqual(eval('"\xe5"', globals), "\xe5")
Walter Dörwald919497e2003-01-19 16:23:59 +0000333 self.assertRaises(TypeError, eval)
334 self.assertRaises(TypeError, eval, ())
335
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000336 def test_general_eval(self):
337 # Tests that general mappings can be used for the locals argument
338
339 class M:
340 "Test mapping interface versus possible calls from eval()."
341 def __getitem__(self, key):
342 if key == 'a':
343 return 12
344 raise KeyError
Guido van Rossumcd70eee2007-02-11 18:53:00 +0000345 def keys(self):
346 return list('xyz')
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000347
348 m = M()
349 g = globals()
350 self.assertEqual(eval('a', g, m), 12)
351 self.assertRaises(NameError, eval, 'b', g, m)
352 self.assertEqual(eval('dir()', g, m), list('xyz'))
353 self.assertEqual(eval('globals()', g, m), g)
354 self.assertEqual(eval('locals()', g, m), m)
Raymond Hettinger513ffe82004-07-06 13:44:41 +0000355 self.assertRaises(TypeError, eval, 'a', m)
Raymond Hettinger66bd2332004-08-02 08:30:07 +0000356 class A:
357 "Non-mapping"
358 pass
359 m = A()
360 self.assertRaises(TypeError, eval, 'a', g, m)
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000361
362 # Verify that dict subclasses work as well
363 class D(dict):
364 def __getitem__(self, key):
365 if key == 'a':
366 return 12
367 return dict.__getitem__(self, key)
Guido van Rossumcd70eee2007-02-11 18:53:00 +0000368 def keys(self):
369 return list('xyz')
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000370
371 d = D()
372 self.assertEqual(eval('a', g, d), 12)
373 self.assertRaises(NameError, eval, 'b', g, d)
374 self.assertEqual(eval('dir()', g, d), list('xyz'))
375 self.assertEqual(eval('globals()', g, d), g)
376 self.assertEqual(eval('locals()', g, d), d)
377
378 # Verify locals stores (used by list comps)
379 eval('[locals() for i in (2,3)]', g, d)
380 eval('[locals() for i in (2,3)]', g, UserDict.UserDict())
381
382 class SpreadSheet:
383 "Sample application showing nested, calculated lookups."
384 _cells = {}
385 def __setitem__(self, key, formula):
386 self._cells[key] = formula
Thomas Wouters73e5a5b2006-06-08 15:35:45 +0000387 def __getitem__(self, key):
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000388 return eval(self._cells[key], globals(), self)
389
390 ss = SpreadSheet()
391 ss['a1'] = '5'
392 ss['a2'] = 'a1*6'
393 ss['a3'] = 'a2*7'
394 self.assertEqual(ss['a3'], 210)
395
Raymond Hettinger2a7dede2004-08-07 04:55:30 +0000396 # Verify that dir() catches a non-list returned by eval
397 # SF bug #1004669
398 class C:
399 def __getitem__(self, item):
400 raise KeyError(item)
Guido van Rossumcd70eee2007-02-11 18:53:00 +0000401 def keys(self):
402 return 1 # used to be 'a' but that's no longer an error
Raymond Hettinger2a7dede2004-08-07 04:55:30 +0000403 self.assertRaises(TypeError, eval, 'dir()', globals(), C())
404
Georg Brandl7cae87c2006-09-06 06:51:57 +0000405 def test_exec(self):
406 g = {}
407 exec('z = 1', g)
408 if '__builtins__' in g:
409 del g['__builtins__']
410 self.assertEqual(g, {'z': 1})
411
Guido van Rossumef87d6e2007-05-02 19:09:54 +0000412 exec('z = 1+1', g)
Georg Brandl7cae87c2006-09-06 06:51:57 +0000413 if '__builtins__' in g:
414 del g['__builtins__']
415 self.assertEqual(g, {'z': 2})
416 g = {}
417 l = {}
418
419 import warnings
420 warnings.filterwarnings("ignore", "global statement", module="<string>")
421 exec('global a; a = 1; b = 2', g, l)
422 if '__builtins__' in g:
423 del g['__builtins__']
424 if '__builtins__' in l:
425 del l['__builtins__']
426 self.assertEqual((g, l), ({'a': 1}, {'b': 2}))
427
Walter Dörwald919497e2003-01-19 16:23:59 +0000428 def test_filter(self):
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000429 self.assertEqual(list(filter(lambda c: 'a' <= c <= 'z', 'Hello World')), list('elloorld'))
430 self.assertEqual(list(filter(None, [1, 'hello', [], [3], '', None, 9, 0])), [1, 'hello', [3], 9])
431 self.assertEqual(list(filter(lambda x: x > 0, [1, -3, 9, 0, 2])), [1, 9, 2])
432 self.assertEqual(list(filter(None, Squares(10))), [1, 4, 9, 16, 25, 36, 49, 64, 81])
433 self.assertEqual(list(filter(lambda x: x%2, Squares(10))), [1, 9, 25, 49, 81])
Walter Dörwald919497e2003-01-19 16:23:59 +0000434 def identity(item):
435 return 1
436 filter(identity, Squares(5))
437 self.assertRaises(TypeError, filter)
438 class BadSeq(object):
Tim Petersf2715e02003-02-19 02:35:07 +0000439 def __getitem__(self, index):
440 if index<4:
441 return 42
442 raise ValueError
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000443 self.assertRaises(ValueError, list, filter(lambda x: x, BadSeq()))
Walter Dörwald919497e2003-01-19 16:23:59 +0000444 def badfunc():
445 pass
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000446 self.assertRaises(TypeError, list, filter(badfunc, range(5)))
Walter Dörwald919497e2003-01-19 16:23:59 +0000447
Walter Dörwaldbf517072003-01-27 15:57:14 +0000448 # test bltinmodule.c::filtertuple()
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000449 self.assertEqual(list(filter(None, (1, 2))), [1, 2])
450 self.assertEqual(list(filter(lambda x: x>=3, (1, 2, 3, 4))), [3, 4])
451 self.assertRaises(TypeError, list, filter(42, (1, 2)))
Walter Dörwaldc3da83f2003-02-04 20:24:45 +0000452
Walter Dörwald919497e2003-01-19 16:23:59 +0000453 def test_float(self):
454 self.assertEqual(float(3.14), 3.14)
455 self.assertEqual(float(314), 314.0)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000456 self.assertEqual(float(314), 314.0)
Walter Dörwald919497e2003-01-19 16:23:59 +0000457 self.assertEqual(float(" 3.14 "), 3.14)
Neal Norwitze7214a12005-12-18 05:03:17 +0000458 self.assertRaises(ValueError, float, " 0x3.1 ")
459 self.assertRaises(ValueError, float, " -0x3.p-1 ")
Walter Dörwald1f5947b2007-05-22 16:52:54 +0000460 self.assertEqual(float(str(b" \u0663.\u0661\u0664 ",'raw-unicode-escape')), 3.14)
461 self.assertEqual(float("1"*10000), 1e10000) # Inf on both sides
Walter Dörwald919497e2003-01-19 16:23:59 +0000462
Thomas Wouters477c8d52006-05-27 19:21:47 +0000463 @run_with_locale('LC_NUMERIC', 'fr_FR', 'de_DE')
Neal Norwitz5898fa22005-11-22 05:17:40 +0000464 def test_float_with_comma(self):
465 # set locale to something that doesn't use '.' for the decimal point
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000466 # float must not accept the locale specific decimal point but
467 # it still has to accept the normal python syntac
Thomas Wouters477c8d52006-05-27 19:21:47 +0000468 import locale
469 if not locale.localeconv()['decimal_point'] == ',':
Neal Norwitz5898fa22005-11-22 05:17:40 +0000470 return
471
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000472 self.assertEqual(float(" 3.14 "), 3.14)
473 self.assertEqual(float("+3.14 "), 3.14)
474 self.assertEqual(float("-3.14 "), -3.14)
475 self.assertEqual(float(".14 "), .14)
476 self.assertEqual(float("3. "), 3.0)
477 self.assertEqual(float("3.e3 "), 3000.0)
478 self.assertEqual(float("3.2e3 "), 3200.0)
479 self.assertEqual(float("2.5e-1 "), 0.25)
480 self.assertEqual(float("5e-1"), 0.5)
481 self.assertRaises(ValueError, float, " 3,14 ")
482 self.assertRaises(ValueError, float, " +3,14 ")
483 self.assertRaises(ValueError, float, " -3,14 ")
Thomas Wouters477c8d52006-05-27 19:21:47 +0000484 self.assertRaises(ValueError, float, " 0x3.1 ")
485 self.assertRaises(ValueError, float, " -0x3.p-1 ")
486 self.assertEqual(float(" 25.e-1 "), 2.5)
487 self.assertEqual(fcmp(float(" .25e-1 "), .025), 0)
Neal Norwitz5898fa22005-11-22 05:17:40 +0000488
Brett Cannonc3647ac2005-04-26 03:45:26 +0000489 def test_floatconversion(self):
490 # Make sure that calls to __float__() work properly
491 class Foo0:
492 def __float__(self):
493 return 42.
494
495 class Foo1(object):
496 def __float__(self):
497 return 42.
498
499 class Foo2(float):
500 def __float__(self):
501 return 42.
502
503 class Foo3(float):
504 def __new__(cls, value=0.):
505 return float.__new__(cls, 2*value)
506
507 def __float__(self):
508 return self
509
510 class Foo4(float):
511 def __float__(self):
512 return 42
513
514 self.assertAlmostEqual(float(Foo0()), 42.)
515 self.assertAlmostEqual(float(Foo1()), 42.)
516 self.assertAlmostEqual(float(Foo2()), 42.)
517 self.assertAlmostEqual(float(Foo3(21)), 42.)
518 self.assertRaises(TypeError, float, Foo4(42))
519
Eric Smith8c663262007-08-25 02:26:07 +0000520 def test_format(self):
521 class A:
522 def __init__(self, x):
523 self.x = x
524 def __format__(self, format_spec):
525 return str(self.x) + format_spec
526
527 # class that returns a bad type from __format__
Eric Smith37f10382007-09-01 10:56:01 +0000528 class B:
Eric Smith8c663262007-08-25 02:26:07 +0000529 def __format__(self, format_spec):
530 return 1.0
531
Eric Smith37f10382007-09-01 10:56:01 +0000532 # class that is derived from string, used
533 # as a format spec
534 class C(str):
535 pass
536
Eric Smith8c663262007-08-25 02:26:07 +0000537 self.assertEqual(format(3, ''), '3')
538 self.assertEqual(format(A(3), 'spec'), '3spec')
539
Eric Smith81936692007-08-31 01:14:01 +0000540 def empty_format_spec(value):
541 # test that:
542 # format(x, '') == str(x)
543 # format(x) == str(x)
544 self.assertEqual(format(value, ""), str(value))
545 self.assertEqual(format(value), str(value))
546
Eric Smith8c663262007-08-25 02:26:07 +0000547 # for builtin types, format(x, "") == str(x)
Eric Smith81936692007-08-31 01:14:01 +0000548 empty_format_spec(17**13)
549 empty_format_spec(1.0)
550 empty_format_spec(3.1415e104)
551 empty_format_spec(-3.1415e104)
552 empty_format_spec(3.1415e-104)
553 empty_format_spec(-3.1415e-104)
554 empty_format_spec(object)
555 empty_format_spec(None)
Eric Smith8c663262007-08-25 02:26:07 +0000556
Eric Smith739e2ad2007-08-27 19:07:22 +0000557 # TypeError because self.__format__ returns the wrong type
Eric Smith37f10382007-09-01 10:56:01 +0000558 self.assertRaises(TypeError, format, B(), "")
559
560 # make sure we can take a subclass of str as a format spec
561 self.assertEqual(format(0, C('10')), ' 0')
Eric Smith8c663262007-08-25 02:26:07 +0000562
Walter Dörwald919497e2003-01-19 16:23:59 +0000563 def test_getattr(self):
564 import sys
565 self.assert_(getattr(sys, 'stdout') is sys.stdout)
566 self.assertRaises(TypeError, getattr, sys, 1)
567 self.assertRaises(TypeError, getattr, sys, 1, "foo")
568 self.assertRaises(TypeError, getattr)
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000569 self.assertRaises(AttributeError, getattr, sys, chr(sys.maxunicode))
Walter Dörwald919497e2003-01-19 16:23:59 +0000570
571 def test_hasattr(self):
572 import sys
573 self.assert_(hasattr(sys, 'stdout'))
574 self.assertRaises(TypeError, hasattr, sys, 1)
575 self.assertRaises(TypeError, hasattr)
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000576 self.assertEqual(False, hasattr(sys, chr(sys.maxunicode)))
Walter Dörwald919497e2003-01-19 16:23:59 +0000577
578 def test_hash(self):
579 hash(None)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000580 self.assertEqual(hash(1), hash(1))
Walter Dörwald919497e2003-01-19 16:23:59 +0000581 self.assertEqual(hash(1), hash(1.0))
582 hash('spam')
Guido van Rossum98297ee2007-11-06 21:34:58 +0000583 self.assertEqual(hash('spam'), hash(b'spam'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000584 hash((0,1,2,3))
585 def f(): pass
586 self.assertRaises(TypeError, hash, [])
587 self.assertRaises(TypeError, hash, {})
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000588 # Bug 1536021: Allow hash to return long objects
589 class X:
590 def __hash__(self):
591 return 2**100
592 self.assertEquals(type(hash(X())), int)
593 class Y(object):
594 def __hash__(self):
595 return 2**100
596 self.assertEquals(type(hash(Y())), int)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000597 class Z(int):
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000598 def __hash__(self):
599 return self
Guido van Rossume2a383d2007-01-15 16:59:06 +0000600 self.assertEquals(hash(Z(42)), hash(42))
Walter Dörwald919497e2003-01-19 16:23:59 +0000601
602 def test_hex(self):
603 self.assertEqual(hex(16), '0x10')
Guido van Rossume2a383d2007-01-15 16:59:06 +0000604 self.assertEqual(hex(16), '0x10')
Guido van Rossum6c9e1302003-11-29 23:52:13 +0000605 self.assertEqual(hex(-16), '-0x10')
Guido van Rossume2a383d2007-01-15 16:59:06 +0000606 self.assertEqual(hex(-16), '-0x10')
Walter Dörwald919497e2003-01-19 16:23:59 +0000607 self.assertRaises(TypeError, hex, {})
608
609 def test_id(self):
610 id(None)
611 id(1)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000612 id(1)
Walter Dörwald919497e2003-01-19 16:23:59 +0000613 id(1.0)
614 id('spam')
615 id((0,1,2,3))
616 id([0,1,2,3])
617 id({'spam': 1, 'eggs': 2, 'ham': 3})
618
Guido van Rossuma88a0332007-02-26 16:59:55 +0000619 # Test input() later, alphabetized as if it were raw_input
620
Walter Dörwald919497e2003-01-19 16:23:59 +0000621 def test_int(self):
622 self.assertEqual(int(314), 314)
623 self.assertEqual(int(3.14), 3)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000624 self.assertEqual(int(314), 314)
Walter Dörwald919497e2003-01-19 16:23:59 +0000625 # Check that conversion from float truncates towards zero
626 self.assertEqual(int(-3.14), -3)
627 self.assertEqual(int(3.9), 3)
628 self.assertEqual(int(-3.9), -3)
629 self.assertEqual(int(3.5), 3)
630 self.assertEqual(int(-3.5), -3)
631 # Different base:
Guido van Rossume2a383d2007-01-15 16:59:06 +0000632 self.assertEqual(int("10",16), 16)
Walter Dörwald919497e2003-01-19 16:23:59 +0000633 # Test conversion from strings and various anomalies
634 for s, v in L:
635 for sign in "", "+", "-":
636 for prefix in "", " ", "\t", " \t\t ":
637 ss = prefix + sign + s
638 vv = v
639 if sign == "-" and v is not ValueError:
640 vv = -v
641 try:
642 self.assertEqual(int(ss), vv)
643 except v:
644 pass
645
Walter Dörwald70a6b492004-02-12 17:35:32 +0000646 s = repr(-1-sys.maxint)
Thomas Wouters89f507f2006-12-13 04:49:30 +0000647 x = int(s)
648 self.assertEqual(x+1, -sys.maxint)
649 self.assert_(isinstance(x, int))
Walter Dörwald919497e2003-01-19 16:23:59 +0000650 # should return long
Thomas Wouters89f507f2006-12-13 04:49:30 +0000651 self.assertEqual(int(s[1:]), sys.maxint+1)
Walter Dörwald919497e2003-01-19 16:23:59 +0000652
653 # should return long
654 x = int(1e100)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000655 self.assert_(isinstance(x, int))
Walter Dörwald919497e2003-01-19 16:23:59 +0000656 x = int(-1e100)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000657 self.assert_(isinstance(x, int))
Walter Dörwald919497e2003-01-19 16:23:59 +0000658
659
660 # SF bug 434186: 0x80000000/2 != 0x80000000>>1.
661 # Worked by accident in Windows release build, but failed in debug build.
662 # Failed in all Linux builds.
663 x = -1-sys.maxint
664 self.assertEqual(x >> 1, x//2)
665
666 self.assertRaises(ValueError, int, '123\0')
667 self.assertRaises(ValueError, int, '53', 40)
668
Thomas Wouters89f507f2006-12-13 04:49:30 +0000669 # SF bug 1545497: embedded NULs were not detected with
670 # explicit base
671 self.assertRaises(ValueError, int, '123\0', 10)
672 self.assertRaises(ValueError, int, '123\x00 245', 20)
673
Walter Dörwald919497e2003-01-19 16:23:59 +0000674 x = int('1' * 600)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000675 self.assert_(isinstance(x, int))
Walter Dörwald919497e2003-01-19 16:23:59 +0000676
Walter Dörwald1f5947b2007-05-22 16:52:54 +0000677 x = int(chr(0x661) * 600)
678 self.assert_(isinstance(x, int))
Walter Dörwald919497e2003-01-19 16:23:59 +0000679
680 self.assertRaises(TypeError, int, 1, 12)
681
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000682 # tests with base 0
683 self.assertRaises(ValueError, int, ' 0123 ', 0) # old octal syntax
684 self.assertEqual(int('000', 0), 0)
685 self.assertEqual(int('0o123', 0), 83)
686 self.assertEqual(int('0x123', 0), 291)
687 self.assertEqual(int('0b100', 0), 4)
688 self.assertEqual(int(' 0O123 ', 0), 83)
689 self.assertEqual(int(' 0X123 ', 0), 291)
690 self.assertEqual(int(' 0B100 ', 0), 4)
691
692 # without base still base 10
693 self.assertEqual(int('0123'), 123)
694 self.assertEqual(int('0123', 10), 123)
695
696 # tests with prefix and base != 0
Neal Norwitz5898fa22005-11-22 05:17:40 +0000697 self.assertEqual(int('0x123', 16), 291)
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000698 self.assertEqual(int('0o123', 8), 83)
699 self.assertEqual(int('0b100', 2), 4)
700 self.assertEqual(int('0X123', 16), 291)
701 self.assertEqual(int('0O123', 8), 83)
702 self.assertEqual(int('0B100', 2), 4)
Walter Dörwald919497e2003-01-19 16:23:59 +0000703
Thomas Wouters477c8d52006-05-27 19:21:47 +0000704 # SF bug 1334662: int(string, base) wrong answers
705 # Various representations of 2**32 evaluated to 0
706 # rather than 2**32 in previous versions
707
Guido van Rossume2a383d2007-01-15 16:59:06 +0000708 self.assertEqual(int('100000000000000000000000000000000', 2), 4294967296)
709 self.assertEqual(int('102002022201221111211', 3), 4294967296)
710 self.assertEqual(int('10000000000000000', 4), 4294967296)
711 self.assertEqual(int('32244002423141', 5), 4294967296)
712 self.assertEqual(int('1550104015504', 6), 4294967296)
713 self.assertEqual(int('211301422354', 7), 4294967296)
714 self.assertEqual(int('40000000000', 8), 4294967296)
715 self.assertEqual(int('12068657454', 9), 4294967296)
716 self.assertEqual(int('4294967296', 10), 4294967296)
717 self.assertEqual(int('1904440554', 11), 4294967296)
718 self.assertEqual(int('9ba461594', 12), 4294967296)
719 self.assertEqual(int('535a79889', 13), 4294967296)
720 self.assertEqual(int('2ca5b7464', 14), 4294967296)
721 self.assertEqual(int('1a20dcd81', 15), 4294967296)
722 self.assertEqual(int('100000000', 16), 4294967296)
723 self.assertEqual(int('a7ffda91', 17), 4294967296)
724 self.assertEqual(int('704he7g4', 18), 4294967296)
725 self.assertEqual(int('4f5aff66', 19), 4294967296)
726 self.assertEqual(int('3723ai4g', 20), 4294967296)
727 self.assertEqual(int('281d55i4', 21), 4294967296)
728 self.assertEqual(int('1fj8b184', 22), 4294967296)
729 self.assertEqual(int('1606k7ic', 23), 4294967296)
730 self.assertEqual(int('mb994ag', 24), 4294967296)
731 self.assertEqual(int('hek2mgl', 25), 4294967296)
732 self.assertEqual(int('dnchbnm', 26), 4294967296)
733 self.assertEqual(int('b28jpdm', 27), 4294967296)
734 self.assertEqual(int('8pfgih4', 28), 4294967296)
735 self.assertEqual(int('76beigg', 29), 4294967296)
736 self.assertEqual(int('5qmcpqg', 30), 4294967296)
737 self.assertEqual(int('4q0jto4', 31), 4294967296)
738 self.assertEqual(int('4000000', 32), 4294967296)
739 self.assertEqual(int('3aokq94', 33), 4294967296)
740 self.assertEqual(int('2qhxjli', 34), 4294967296)
741 self.assertEqual(int('2br45qb', 35), 4294967296)
742 self.assertEqual(int('1z141z4', 36), 4294967296)
Thomas Wouters477c8d52006-05-27 19:21:47 +0000743
744 # SF bug 1334662: int(string, base) wrong answers
745 # Checks for proper evaluation of 2**32 + 1
Guido van Rossume2a383d2007-01-15 16:59:06 +0000746 self.assertEqual(int('100000000000000000000000000000001', 2), 4294967297)
747 self.assertEqual(int('102002022201221111212', 3), 4294967297)
748 self.assertEqual(int('10000000000000001', 4), 4294967297)
749 self.assertEqual(int('32244002423142', 5), 4294967297)
750 self.assertEqual(int('1550104015505', 6), 4294967297)
751 self.assertEqual(int('211301422355', 7), 4294967297)
752 self.assertEqual(int('40000000001', 8), 4294967297)
753 self.assertEqual(int('12068657455', 9), 4294967297)
754 self.assertEqual(int('4294967297', 10), 4294967297)
755 self.assertEqual(int('1904440555', 11), 4294967297)
756 self.assertEqual(int('9ba461595', 12), 4294967297)
757 self.assertEqual(int('535a7988a', 13), 4294967297)
758 self.assertEqual(int('2ca5b7465', 14), 4294967297)
759 self.assertEqual(int('1a20dcd82', 15), 4294967297)
760 self.assertEqual(int('100000001', 16), 4294967297)
761 self.assertEqual(int('a7ffda92', 17), 4294967297)
762 self.assertEqual(int('704he7g5', 18), 4294967297)
763 self.assertEqual(int('4f5aff67', 19), 4294967297)
764 self.assertEqual(int('3723ai4h', 20), 4294967297)
765 self.assertEqual(int('281d55i5', 21), 4294967297)
766 self.assertEqual(int('1fj8b185', 22), 4294967297)
767 self.assertEqual(int('1606k7id', 23), 4294967297)
768 self.assertEqual(int('mb994ah', 24), 4294967297)
769 self.assertEqual(int('hek2mgm', 25), 4294967297)
770 self.assertEqual(int('dnchbnn', 26), 4294967297)
771 self.assertEqual(int('b28jpdn', 27), 4294967297)
772 self.assertEqual(int('8pfgih5', 28), 4294967297)
773 self.assertEqual(int('76beigh', 29), 4294967297)
774 self.assertEqual(int('5qmcpqh', 30), 4294967297)
775 self.assertEqual(int('4q0jto5', 31), 4294967297)
776 self.assertEqual(int('4000001', 32), 4294967297)
777 self.assertEqual(int('3aokq95', 33), 4294967297)
778 self.assertEqual(int('2qhxjlj', 34), 4294967297)
779 self.assertEqual(int('2br45qc', 35), 4294967297)
780 self.assertEqual(int('1z141z5', 36), 4294967297)
Thomas Wouters477c8d52006-05-27 19:21:47 +0000781
Brett Cannonc3647ac2005-04-26 03:45:26 +0000782 def test_intconversion(self):
783 # Test __int__()
784 class Foo0:
785 def __int__(self):
786 return 42
787
788 class Foo1(object):
789 def __int__(self):
790 return 42
791
792 class Foo2(int):
793 def __int__(self):
794 return 42
795
796 class Foo3(int):
797 def __int__(self):
798 return self
799
800 class Foo4(int):
801 def __int__(self):
Guido van Rossume2a383d2007-01-15 16:59:06 +0000802 return 42
Brett Cannonc3647ac2005-04-26 03:45:26 +0000803
804 class Foo5(int):
805 def __int__(self):
806 return 42.
807
808 self.assertEqual(int(Foo0()), 42)
809 self.assertEqual(int(Foo1()), 42)
810 self.assertEqual(int(Foo2()), 42)
811 self.assertEqual(int(Foo3()), 0)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000812 self.assertEqual(int(Foo4()), 42)
Brett Cannonc3647ac2005-04-26 03:45:26 +0000813 self.assertRaises(TypeError, int, Foo5())
814
Walter Dörwald919497e2003-01-19 16:23:59 +0000815 def test_iter(self):
816 self.assertRaises(TypeError, iter)
817 self.assertRaises(TypeError, iter, 42, 42)
818 lists = [("1", "2"), ["1", "2"], "12"]
Walter Dörwald919497e2003-01-19 16:23:59 +0000819 for l in lists:
820 i = iter(l)
Georg Brandla18af4e2007-04-21 15:47:16 +0000821 self.assertEqual(next(i), '1')
822 self.assertEqual(next(i), '2')
823 self.assertRaises(StopIteration, next, i)
Walter Dörwald919497e2003-01-19 16:23:59 +0000824
825 def test_isinstance(self):
826 class C:
827 pass
828 class D(C):
829 pass
830 class E:
831 pass
832 c = C()
833 d = D()
834 e = E()
835 self.assert_(isinstance(c, C))
836 self.assert_(isinstance(d, C))
837 self.assert_(not isinstance(e, C))
838 self.assert_(not isinstance(c, D))
839 self.assert_(not isinstance('foo', E))
840 self.assertRaises(TypeError, isinstance, E, 'foo')
841 self.assertRaises(TypeError, isinstance)
842
843 def test_issubclass(self):
844 class C:
845 pass
846 class D(C):
847 pass
848 class E:
849 pass
850 c = C()
851 d = D()
852 e = E()
853 self.assert_(issubclass(D, C))
854 self.assert_(issubclass(C, C))
855 self.assert_(not issubclass(C, D))
856 self.assertRaises(TypeError, issubclass, 'foo', E)
857 self.assertRaises(TypeError, issubclass, E, 'foo')
858 self.assertRaises(TypeError, issubclass)
859
860 def test_len(self):
861 self.assertEqual(len('123'), 3)
862 self.assertEqual(len(()), 0)
863 self.assertEqual(len((1, 2, 3, 4)), 4)
864 self.assertEqual(len([1, 2, 3, 4]), 4)
865 self.assertEqual(len({}), 0)
866 self.assertEqual(len({'a':1, 'b': 2}), 2)
867 class BadSeq:
868 def __len__(self):
869 raise ValueError
870 self.assertRaises(ValueError, len, BadSeq())
871
872 def test_list(self):
873 self.assertEqual(list([]), [])
874 l0_3 = [0, 1, 2, 3]
875 l0_3_bis = list(l0_3)
876 self.assertEqual(l0_3, l0_3_bis)
877 self.assert_(l0_3 is not l0_3_bis)
878 self.assertEqual(list(()), [])
879 self.assertEqual(list((0, 1, 2, 3)), [0, 1, 2, 3])
880 self.assertEqual(list(''), [])
881 self.assertEqual(list('spam'), ['s', 'p', 'a', 'm'])
882
883 if sys.maxint == 0x7fffffff:
884 # This test can currently only work on 32-bit machines.
885 # XXX If/when PySequence_Length() returns a ssize_t, it should be
886 # XXX re-enabled.
887 # Verify clearing of bug #556025.
888 # This assumes that the max data size (sys.maxint) == max
889 # address size this also assumes that the address size is at
890 # least 4 bytes with 8 byte addresses, the bug is not well
891 # tested
892 #
893 # Note: This test is expected to SEGV under Cygwin 1.3.12 or
894 # earlier due to a newlib bug. See the following mailing list
895 # thread for the details:
896
897 # http://sources.redhat.com/ml/newlib/2002/msg00369.html
Guido van Rossum805365e2007-05-07 22:24:25 +0000898 self.assertRaises(MemoryError, list, range(sys.maxint // 2))
Walter Dörwald919497e2003-01-19 16:23:59 +0000899
Raymond Hettingeraa241e02004-09-26 19:24:20 +0000900 # This code used to segfault in Py2.4a3
901 x = []
902 x.extend(-y for y in x)
903 self.assertEqual(x, [])
904
Walter Dörwald919497e2003-01-19 16:23:59 +0000905 def test_long(self):
Guido van Rossume2a383d2007-01-15 16:59:06 +0000906 self.assertEqual(int(314), 314)
907 self.assertEqual(int(3.14), 3)
908 self.assertEqual(int(314), 314)
Walter Dörwald919497e2003-01-19 16:23:59 +0000909 # Check that conversion from float truncates towards zero
Guido van Rossume2a383d2007-01-15 16:59:06 +0000910 self.assertEqual(int(-3.14), -3)
911 self.assertEqual(int(3.9), 3)
912 self.assertEqual(int(-3.9), -3)
913 self.assertEqual(int(3.5), 3)
914 self.assertEqual(int(-3.5), -3)
915 self.assertEqual(int("-3"), -3)
Walter Dörwald919497e2003-01-19 16:23:59 +0000916 # Different base:
Guido van Rossume2a383d2007-01-15 16:59:06 +0000917 self.assertEqual(int("10",16), 16)
Walter Dörwald919497e2003-01-19 16:23:59 +0000918 # Check conversions from string (same test set as for int(), and then some)
919 LL = [
Guido van Rossume2a383d2007-01-15 16:59:06 +0000920 ('1' + '0'*20, 10**20),
921 ('1' + '0'*100, 10**100)
Walter Dörwald919497e2003-01-19 16:23:59 +0000922 ]
Walter Dörwald1f5947b2007-05-22 16:52:54 +0000923 for s, v in LL:
Walter Dörwald919497e2003-01-19 16:23:59 +0000924 for sign in "", "+", "-":
925 for prefix in "", " ", "\t", " \t\t ":
926 ss = prefix + sign + s
927 vv = v
928 if sign == "-" and v is not ValueError:
929 vv = -v
930 try:
Guido van Rossume2a383d2007-01-15 16:59:06 +0000931 self.assertEqual(int(ss), int(vv))
Walter Dörwald919497e2003-01-19 16:23:59 +0000932 except v:
933 pass
934
Guido van Rossume2a383d2007-01-15 16:59:06 +0000935 self.assertRaises(ValueError, int, '123\0')
936 self.assertRaises(ValueError, int, '53', 40)
937 self.assertRaises(TypeError, int, 1, 12)
Walter Dörwald919497e2003-01-19 16:23:59 +0000938
Guido van Rossumd8faa362007-04-27 19:54:29 +0000939 # SF patch #1638879: embedded NULs were not detected with
940 # explicit base
941 self.assertRaises(ValueError, int, '123\0', 10)
942 self.assertRaises(ValueError, int, '123\x00 245', 20)
943
Guido van Rossume2a383d2007-01-15 16:59:06 +0000944 self.assertEqual(int('100000000000000000000000000000000', 2),
Thomas Wouters477c8d52006-05-27 19:21:47 +0000945 4294967296)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000946 self.assertEqual(int('102002022201221111211', 3), 4294967296)
947 self.assertEqual(int('10000000000000000', 4), 4294967296)
948 self.assertEqual(int('32244002423141', 5), 4294967296)
949 self.assertEqual(int('1550104015504', 6), 4294967296)
950 self.assertEqual(int('211301422354', 7), 4294967296)
951 self.assertEqual(int('40000000000', 8), 4294967296)
952 self.assertEqual(int('12068657454', 9), 4294967296)
953 self.assertEqual(int('4294967296', 10), 4294967296)
954 self.assertEqual(int('1904440554', 11), 4294967296)
955 self.assertEqual(int('9ba461594', 12), 4294967296)
956 self.assertEqual(int('535a79889', 13), 4294967296)
957 self.assertEqual(int('2ca5b7464', 14), 4294967296)
958 self.assertEqual(int('1a20dcd81', 15), 4294967296)
959 self.assertEqual(int('100000000', 16), 4294967296)
960 self.assertEqual(int('a7ffda91', 17), 4294967296)
961 self.assertEqual(int('704he7g4', 18), 4294967296)
962 self.assertEqual(int('4f5aff66', 19), 4294967296)
963 self.assertEqual(int('3723ai4g', 20), 4294967296)
964 self.assertEqual(int('281d55i4', 21), 4294967296)
965 self.assertEqual(int('1fj8b184', 22), 4294967296)
966 self.assertEqual(int('1606k7ic', 23), 4294967296)
967 self.assertEqual(int('mb994ag', 24), 4294967296)
968 self.assertEqual(int('hek2mgl', 25), 4294967296)
969 self.assertEqual(int('dnchbnm', 26), 4294967296)
970 self.assertEqual(int('b28jpdm', 27), 4294967296)
971 self.assertEqual(int('8pfgih4', 28), 4294967296)
972 self.assertEqual(int('76beigg', 29), 4294967296)
973 self.assertEqual(int('5qmcpqg', 30), 4294967296)
974 self.assertEqual(int('4q0jto4', 31), 4294967296)
975 self.assertEqual(int('4000000', 32), 4294967296)
976 self.assertEqual(int('3aokq94', 33), 4294967296)
977 self.assertEqual(int('2qhxjli', 34), 4294967296)
978 self.assertEqual(int('2br45qb', 35), 4294967296)
979 self.assertEqual(int('1z141z4', 36), 4294967296)
Thomas Wouters477c8d52006-05-27 19:21:47 +0000980
Guido van Rossume2a383d2007-01-15 16:59:06 +0000981 self.assertEqual(int('100000000000000000000000000000001', 2),
Thomas Wouters477c8d52006-05-27 19:21:47 +0000982 4294967297)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000983 self.assertEqual(int('102002022201221111212', 3), 4294967297)
984 self.assertEqual(int('10000000000000001', 4), 4294967297)
985 self.assertEqual(int('32244002423142', 5), 4294967297)
986 self.assertEqual(int('1550104015505', 6), 4294967297)
987 self.assertEqual(int('211301422355', 7), 4294967297)
988 self.assertEqual(int('40000000001', 8), 4294967297)
989 self.assertEqual(int('12068657455', 9), 4294967297)
990 self.assertEqual(int('4294967297', 10), 4294967297)
991 self.assertEqual(int('1904440555', 11), 4294967297)
992 self.assertEqual(int('9ba461595', 12), 4294967297)
993 self.assertEqual(int('535a7988a', 13), 4294967297)
994 self.assertEqual(int('2ca5b7465', 14), 4294967297)
995 self.assertEqual(int('1a20dcd82', 15), 4294967297)
996 self.assertEqual(int('100000001', 16), 4294967297)
997 self.assertEqual(int('a7ffda92', 17), 4294967297)
998 self.assertEqual(int('704he7g5', 18), 4294967297)
999 self.assertEqual(int('4f5aff67', 19), 4294967297)
1000 self.assertEqual(int('3723ai4h', 20), 4294967297)
1001 self.assertEqual(int('281d55i5', 21), 4294967297)
1002 self.assertEqual(int('1fj8b185', 22), 4294967297)
1003 self.assertEqual(int('1606k7id', 23), 4294967297)
1004 self.assertEqual(int('mb994ah', 24), 4294967297)
1005 self.assertEqual(int('hek2mgm', 25), 4294967297)
1006 self.assertEqual(int('dnchbnn', 26), 4294967297)
1007 self.assertEqual(int('b28jpdn', 27), 4294967297)
1008 self.assertEqual(int('8pfgih5', 28), 4294967297)
1009 self.assertEqual(int('76beigh', 29), 4294967297)
1010 self.assertEqual(int('5qmcpqh', 30), 4294967297)
1011 self.assertEqual(int('4q0jto5', 31), 4294967297)
1012 self.assertEqual(int('4000001', 32), 4294967297)
1013 self.assertEqual(int('3aokq95', 33), 4294967297)
1014 self.assertEqual(int('2qhxjlj', 34), 4294967297)
1015 self.assertEqual(int('2br45qc', 35), 4294967297)
1016 self.assertEqual(int('1z141z5', 36), 4294967297)
Thomas Wouters477c8d52006-05-27 19:21:47 +00001017
1018
Brett Cannonc3647ac2005-04-26 03:45:26 +00001019 def test_longconversion(self):
1020 # Test __long__()
1021 class Foo0:
1022 def __long__(self):
Guido van Rossume2a383d2007-01-15 16:59:06 +00001023 return 42
Brett Cannonc3647ac2005-04-26 03:45:26 +00001024
1025 class Foo1(object):
1026 def __long__(self):
Guido van Rossume2a383d2007-01-15 16:59:06 +00001027 return 42
Brett Cannonc3647ac2005-04-26 03:45:26 +00001028
Guido van Rossume2a383d2007-01-15 16:59:06 +00001029 class Foo2(int):
Brett Cannonc3647ac2005-04-26 03:45:26 +00001030 def __long__(self):
1031 return 42
1032
Guido van Rossume2a383d2007-01-15 16:59:06 +00001033 class Foo3(int):
1034 def __long__(self):
1035 return self
1036
1037 class Foo4(int):
1038 def __long__(self):
1039 return 42
1040
1041 class Foo5(int):
Brett Cannonc3647ac2005-04-26 03:45:26 +00001042 def __long__(self):
1043 return 42.
1044
Guido van Rossume2a383d2007-01-15 16:59:06 +00001045 self.assertEqual(int(Foo0()), 42)
1046 self.assertEqual(int(Foo1()), 42)
Guido van Rossumd8faa362007-04-27 19:54:29 +00001047 # XXX invokes __int__ now
Guido van Rossumddefaf32007-01-14 03:31:43 +00001048 # self.assertEqual(long(Foo2()), 42L)
Guido van Rossume2a383d2007-01-15 16:59:06 +00001049 self.assertEqual(int(Foo3()), 0)
Guido van Rossumd8faa362007-04-27 19:54:29 +00001050 # XXX likewise
Guido van Rossumddefaf32007-01-14 03:31:43 +00001051 # self.assertEqual(long(Foo4()), 42)
1052 # self.assertRaises(TypeError, long, Foo5())
Brett Cannonc3647ac2005-04-26 03:45:26 +00001053
Walter Dörwald919497e2003-01-19 16:23:59 +00001054 def test_map(self):
1055 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001056 list(map(None, 'hello')),
1057 [('h',), ('e',), ('l',), ('l',), ('o',)]
Walter Dörwald919497e2003-01-19 16:23:59 +00001058 )
1059 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001060 list(map(None, 'abcd', 'efg')),
1061 [('a', 'e'), ('b', 'f'), ('c', 'g')]
Walter Dörwald919497e2003-01-19 16:23:59 +00001062 )
1063 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001064 list(map(None, range(3))),
1065 [(0,), (1,), (2,)]
Walter Dörwald919497e2003-01-19 16:23:59 +00001066 )
1067 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001068 list(map(lambda x: x*x, range(1,4))),
Walter Dörwald919497e2003-01-19 16:23:59 +00001069 [1, 4, 9]
1070 )
1071 try:
1072 from math import sqrt
1073 except ImportError:
1074 def sqrt(x):
1075 return pow(x, 0.5)
1076 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001077 list(map(lambda x: list(map(sqrt, x)), [[16, 4], [81, 9]])),
Walter Dörwald919497e2003-01-19 16:23:59 +00001078 [[4.0, 2.0], [9.0, 3.0]]
1079 )
1080 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001081 list(map(lambda x, y: x+y, [1,3,2], [9,1,4])),
Walter Dörwald919497e2003-01-19 16:23:59 +00001082 [10, 4, 6]
1083 )
1084
1085 def plus(*v):
1086 accu = 0
1087 for i in v: accu = accu + i
1088 return accu
1089 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001090 list(map(plus, [1, 3, 7])),
Walter Dörwald919497e2003-01-19 16:23:59 +00001091 [1, 3, 7]
1092 )
1093 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001094 list(map(plus, [1, 3, 7], [4, 9, 2])),
Walter Dörwald919497e2003-01-19 16:23:59 +00001095 [1+4, 3+9, 7+2]
1096 )
1097 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001098 list(map(plus, [1, 3, 7], [4, 9, 2], [1, 1, 0])),
Walter Dörwald919497e2003-01-19 16:23:59 +00001099 [1+4+1, 3+9+1, 7+2+0]
1100 )
1101 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001102 list(map(None, Squares(10))),
1103 [(0,), (1,), (4,), (9,), (16,), (25,), (36,), (49,), (64,), (81,)]
1104 )
1105 self.assertEqual(
1106 list(map(int, Squares(10))),
Walter Dörwald919497e2003-01-19 16:23:59 +00001107 [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
1108 )
1109 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001110 list(map(None, Squares(3), Squares(2))),
1111 [(0,0), (1,1)]
Walter Dörwald919497e2003-01-19 16:23:59 +00001112 )
Guido van Rossum47b9ff62006-08-24 00:41:19 +00001113 def Max(a, b):
1114 if a is None:
1115 return b
1116 if b is None:
1117 return a
1118 return max(a, b)
Walter Dörwald919497e2003-01-19 16:23:59 +00001119 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001120 list(map(Max, Squares(3), Squares(2))),
1121 [0, 1]
Walter Dörwald919497e2003-01-19 16:23:59 +00001122 )
1123 self.assertRaises(TypeError, map)
1124 self.assertRaises(TypeError, map, lambda x: x, 42)
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001125 self.assertEqual(list(map(None, [42])), [(42,)])
Walter Dörwald919497e2003-01-19 16:23:59 +00001126 class BadSeq:
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001127 def __iter__(self):
Walter Dörwald919497e2003-01-19 16:23:59 +00001128 raise ValueError
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001129 yield None
1130 self.assertRaises(ValueError, list, map(lambda x: x, BadSeq()))
Neal Norwitzfcf44352005-11-27 20:37:43 +00001131 def badfunc(x):
1132 raise RuntimeError
Guido van Rossumc1f779c2007-07-03 08:25:58 +00001133 self.assertRaises(RuntimeError, list, map(badfunc, range(5)))
Walter Dörwald919497e2003-01-19 16:23:59 +00001134
1135 def test_max(self):
1136 self.assertEqual(max('123123'), '3')
1137 self.assertEqual(max(1, 2, 3), 3)
1138 self.assertEqual(max((1, 2, 3, 1, 2, 3)), 3)
1139 self.assertEqual(max([1, 2, 3, 1, 2, 3]), 3)
1140
Guido van Rossume2a383d2007-01-15 16:59:06 +00001141 self.assertEqual(max(1, 2, 3.0), 3.0)
1142 self.assertEqual(max(1, 2.0, 3), 3)
1143 self.assertEqual(max(1.0, 2, 3), 3)
Walter Dörwald919497e2003-01-19 16:23:59 +00001144
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001145 for stmt in (
1146 "max(key=int)", # no args
1147 "max(1, key=int)", # single arg not iterable
1148 "max(1, 2, keystone=int)", # wrong keyword
1149 "max(1, 2, key=int, abc=int)", # two many keywords
1150 "max(1, 2, key=1)", # keyfunc is not callable
1151 ):
Tim Peters7f061872004-12-07 21:17:46 +00001152 try:
Georg Brandl7cae87c2006-09-06 06:51:57 +00001153 exec(stmt, globals())
Tim Peters7f061872004-12-07 21:17:46 +00001154 except TypeError:
1155 pass
1156 else:
1157 self.fail(stmt)
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001158
1159 self.assertEqual(max((1,), key=neg), 1) # one elem iterable
1160 self.assertEqual(max((1,2), key=neg), 1) # two elem iterable
1161 self.assertEqual(max(1, 2, key=neg), 1) # two elems
1162
1163 data = [random.randrange(200) for i in range(100)]
1164 keys = dict((elem, random.randrange(50)) for elem in data)
1165 f = keys.__getitem__
1166 self.assertEqual(max(data, key=f),
1167 sorted(reversed(data), key=f)[-1])
1168
Walter Dörwald919497e2003-01-19 16:23:59 +00001169 def test_min(self):
1170 self.assertEqual(min('123123'), '1')
1171 self.assertEqual(min(1, 2, 3), 1)
1172 self.assertEqual(min((1, 2, 3, 1, 2, 3)), 1)
1173 self.assertEqual(min([1, 2, 3, 1, 2, 3]), 1)
1174
Guido van Rossume2a383d2007-01-15 16:59:06 +00001175 self.assertEqual(min(1, 2, 3.0), 1)
1176 self.assertEqual(min(1, 2.0, 3), 1)
1177 self.assertEqual(min(1.0, 2, 3), 1.0)
Walter Dörwald919497e2003-01-19 16:23:59 +00001178
1179 self.assertRaises(TypeError, min)
1180 self.assertRaises(TypeError, min, 42)
1181 self.assertRaises(ValueError, min, ())
1182 class BadSeq:
1183 def __getitem__(self, index):
1184 raise ValueError
1185 self.assertRaises(ValueError, min, BadSeq())
1186 class BadNumber:
1187 def __cmp__(self, other):
1188 raise ValueError
Guido van Rossum47b9ff62006-08-24 00:41:19 +00001189 self.assertRaises(TypeError, min, (42, BadNumber()))
Walter Dörwald919497e2003-01-19 16:23:59 +00001190
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001191 for stmt in (
1192 "min(key=int)", # no args
1193 "min(1, key=int)", # single arg not iterable
1194 "min(1, 2, keystone=int)", # wrong keyword
1195 "min(1, 2, key=int, abc=int)", # two many keywords
1196 "min(1, 2, key=1)", # keyfunc is not callable
1197 ):
Tim Peters7f061872004-12-07 21:17:46 +00001198 try:
Georg Brandl7cae87c2006-09-06 06:51:57 +00001199 exec(stmt, globals())
Tim Peters7f061872004-12-07 21:17:46 +00001200 except TypeError:
1201 pass
1202 else:
1203 self.fail(stmt)
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001204
1205 self.assertEqual(min((1,), key=neg), 1) # one elem iterable
1206 self.assertEqual(min((1,2), key=neg), 2) # two elem iterable
1207 self.assertEqual(min(1, 2, key=neg), 2) # two elems
1208
1209 data = [random.randrange(200) for i in range(100)]
1210 keys = dict((elem, random.randrange(50)) for elem in data)
1211 f = keys.__getitem__
1212 self.assertEqual(min(data, key=f),
1213 sorted(data, key=f)[0])
1214
Georg Brandla18af4e2007-04-21 15:47:16 +00001215 def test_next(self):
1216 it = iter(range(2))
1217 self.assertEqual(next(it), 0)
1218 self.assertEqual(next(it), 1)
1219 self.assertRaises(StopIteration, next, it)
1220 self.assertRaises(StopIteration, next, it)
1221 self.assertEquals(next(it, 42), 42)
1222
1223 class Iter(object):
1224 def __iter__(self):
1225 return self
1226 def __next__(self):
1227 raise StopIteration
1228
1229 it = iter(Iter())
1230 self.assertEquals(next(it, 42), 42)
1231 self.assertRaises(StopIteration, next, it)
1232
1233 def gen():
1234 yield 1
1235 return
1236
1237 it = gen()
1238 self.assertEquals(next(it), 1)
1239 self.assertRaises(StopIteration, next, it)
1240 self.assertEquals(next(it, 42), 42)
1241
Walter Dörwald919497e2003-01-19 16:23:59 +00001242 def test_oct(self):
Guido van Rossumcd16bf62007-06-13 18:07:49 +00001243 self.assertEqual(oct(100), '0o144')
1244 self.assertEqual(oct(100), '0o144')
1245 self.assertEqual(oct(-100), '-0o144')
1246 self.assertEqual(oct(-100), '-0o144')
Walter Dörwald919497e2003-01-19 16:23:59 +00001247 self.assertRaises(TypeError, oct, ())
1248
1249 def write_testfile(self):
Guido van Rossuma88a0332007-02-26 16:59:55 +00001250 # NB the first 4 lines are also used to test input, below
Walter Dörwald919497e2003-01-19 16:23:59 +00001251 fp = open(TESTFN, 'w')
1252 try:
1253 fp.write('1+1\n')
1254 fp.write('1+1\n')
1255 fp.write('The quick brown fox jumps over the lazy dog')
1256 fp.write('.\n')
1257 fp.write('Dear John\n')
1258 fp.write('XXX'*100)
1259 fp.write('YYY'*100)
1260 finally:
1261 fp.close()
1262
1263 def test_open(self):
1264 self.write_testfile()
1265 fp = open(TESTFN, 'r')
1266 try:
1267 self.assertEqual(fp.readline(4), '1+1\n')
1268 self.assertEqual(fp.readline(4), '1+1\n')
1269 self.assertEqual(fp.readline(), 'The quick brown fox jumps over the lazy dog.\n')
1270 self.assertEqual(fp.readline(4), 'Dear')
1271 self.assertEqual(fp.readline(100), ' John\n')
1272 self.assertEqual(fp.read(300), 'XXX'*100)
1273 self.assertEqual(fp.read(1000), 'YYY'*100)
1274 finally:
1275 fp.close()
1276 unlink(TESTFN)
1277
1278 def test_ord(self):
1279 self.assertEqual(ord(' '), 32)
1280 self.assertEqual(ord('A'), 65)
1281 self.assertEqual(ord('a'), 97)
Guido van Rossumf9e91c92007-05-08 21:05:48 +00001282 self.assertEqual(ord('\x80'), 128)
1283 self.assertEqual(ord('\xff'), 255)
1284
1285 self.assertEqual(ord(b' '), 32)
1286 self.assertEqual(ord(b'A'), 65)
1287 self.assertEqual(ord(b'a'), 97)
1288 self.assertEqual(ord(b'\x80'), 128)
1289 self.assertEqual(ord(b'\xff'), 255)
1290
Walter Dörwald1f5947b2007-05-22 16:52:54 +00001291 self.assertEqual(ord(chr(sys.maxunicode)), sys.maxunicode)
Walter Dörwald919497e2003-01-19 16:23:59 +00001292 self.assertRaises(TypeError, ord, 42)
Walter Dörwald919497e2003-01-19 16:23:59 +00001293
Guido van Rossum8ac004e2007-07-15 13:00:05 +00001294 self.assertEqual(ord(chr(0x10FFFF)), 0x10FFFF)
1295 self.assertEqual(ord("\U0000FFFF"), 0x0000FFFF)
1296 self.assertEqual(ord("\U00010000"), 0x00010000)
1297 self.assertEqual(ord("\U00010001"), 0x00010001)
1298 self.assertEqual(ord("\U000FFFFE"), 0x000FFFFE)
1299 self.assertEqual(ord("\U000FFFFF"), 0x000FFFFF)
1300 self.assertEqual(ord("\U00100000"), 0x00100000)
1301 self.assertEqual(ord("\U00100001"), 0x00100001)
1302 self.assertEqual(ord("\U0010FFFE"), 0x0010FFFE)
1303 self.assertEqual(ord("\U0010FFFF"), 0x0010FFFF)
1304
Walter Dörwald919497e2003-01-19 16:23:59 +00001305 def test_pow(self):
1306 self.assertEqual(pow(0,0), 1)
1307 self.assertEqual(pow(0,1), 0)
1308 self.assertEqual(pow(1,0), 1)
1309 self.assertEqual(pow(1,1), 1)
1310
1311 self.assertEqual(pow(2,0), 1)
1312 self.assertEqual(pow(2,10), 1024)
1313 self.assertEqual(pow(2,20), 1024*1024)
1314 self.assertEqual(pow(2,30), 1024*1024*1024)
1315
1316 self.assertEqual(pow(-2,0), 1)
1317 self.assertEqual(pow(-2,1), -2)
1318 self.assertEqual(pow(-2,2), 4)
1319 self.assertEqual(pow(-2,3), -8)
1320
Guido van Rossume2a383d2007-01-15 16:59:06 +00001321 self.assertEqual(pow(0,0), 1)
1322 self.assertEqual(pow(0,1), 0)
1323 self.assertEqual(pow(1,0), 1)
1324 self.assertEqual(pow(1,1), 1)
Walter Dörwald919497e2003-01-19 16:23:59 +00001325
Guido van Rossume2a383d2007-01-15 16:59:06 +00001326 self.assertEqual(pow(2,0), 1)
1327 self.assertEqual(pow(2,10), 1024)
1328 self.assertEqual(pow(2,20), 1024*1024)
1329 self.assertEqual(pow(2,30), 1024*1024*1024)
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,1), -2)
1333 self.assertEqual(pow(-2,2), 4)
1334 self.assertEqual(pow(-2,3), -8)
Walter Dörwald919497e2003-01-19 16:23:59 +00001335
1336 self.assertAlmostEqual(pow(0.,0), 1.)
1337 self.assertAlmostEqual(pow(0.,1), 0.)
1338 self.assertAlmostEqual(pow(1.,0), 1.)
1339 self.assertAlmostEqual(pow(1.,1), 1.)
1340
1341 self.assertAlmostEqual(pow(2.,0), 1.)
1342 self.assertAlmostEqual(pow(2.,10), 1024.)
1343 self.assertAlmostEqual(pow(2.,20), 1024.*1024.)
1344 self.assertAlmostEqual(pow(2.,30), 1024.*1024.*1024.)
1345
1346 self.assertAlmostEqual(pow(-2.,0), 1.)
1347 self.assertAlmostEqual(pow(-2.,1), -2.)
1348 self.assertAlmostEqual(pow(-2.,2), 4.)
1349 self.assertAlmostEqual(pow(-2.,3), -8.)
1350
Guido van Rossume2a383d2007-01-15 16:59:06 +00001351 for x in 2, 2, 2.0:
1352 for y in 10, 10, 10.0:
1353 for z in 1000, 1000, 1000.0:
Walter Dörwald919497e2003-01-19 16:23:59 +00001354 if isinstance(x, float) or \
1355 isinstance(y, float) or \
1356 isinstance(z, float):
1357 self.assertRaises(TypeError, pow, x, y, z)
1358 else:
1359 self.assertAlmostEqual(pow(x, y, z), 24.0)
1360
Jeffrey Yasskin3404b3c2007-09-07 15:15:49 +00001361 self.assertAlmostEqual(pow(-1, 0.5), 1j)
1362 self.assertAlmostEqual(pow(-1, 1/3), 0.5 + 0.8660254037844386j)
1363
Walter Dörwald919497e2003-01-19 16:23:59 +00001364 self.assertRaises(TypeError, pow, -1, -2, 3)
1365 self.assertRaises(ValueError, pow, 1, 2, 0)
Guido van Rossume2a383d2007-01-15 16:59:06 +00001366 self.assertRaises(TypeError, pow, -1, -2, 3)
1367 self.assertRaises(ValueError, pow, 1, 2, 0)
Walter Dörwald919497e2003-01-19 16:23:59 +00001368
1369 self.assertRaises(TypeError, pow)
1370
1371 def test_range(self):
Guido van Rossum805365e2007-05-07 22:24:25 +00001372 self.assertEqual(list(range(3)), [0, 1, 2])
1373 self.assertEqual(list(range(1, 5)), [1, 2, 3, 4])
1374 self.assertEqual(list(range(0)), [])
1375 self.assertEqual(list(range(-3)), [])
1376 self.assertEqual(list(range(1, 10, 3)), [1, 4, 7])
1377 #self.assertEqual(list(range(5, -5, -3)), [5, 2, -1, -4])
Walter Dörwald919497e2003-01-19 16:23:59 +00001378
Guido van Rossum805365e2007-05-07 22:24:25 +00001379 """ XXX(nnorwitz):
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001380 # Now test range() with longs
Guido van Rossum805365e2007-05-07 22:24:25 +00001381 self.assertEqual(list(range(-2**100)), [])
1382 self.assertEqual(list(range(0, -2**100)), [])
1383 self.assertEqual(list(range(0, 2**100, -1)), [])
1384 self.assertEqual(list(range(0, 2**100, -1)), [])
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001385
Guido van Rossume2a383d2007-01-15 16:59:06 +00001386 a = int(10 * sys.maxint)
1387 b = int(100 * sys.maxint)
1388 c = int(50 * sys.maxint)
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001389
Guido van Rossum805365e2007-05-07 22:24:25 +00001390 self.assertEqual(list(range(a, a+2)), [a, a+1])
1391 self.assertEqual(list(range(a+2, a, -1)), [a+2, a+1])
1392 self.assertEqual(list(range(a+4, a, -2)), [a+4, a+2])
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001393
Guido van Rossum805365e2007-05-07 22:24:25 +00001394 seq = list(range(a, b, c))
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001395 self.assert_(a in seq)
1396 self.assert_(b not in seq)
1397 self.assertEqual(len(seq), 2)
1398
Guido van Rossum805365e2007-05-07 22:24:25 +00001399 seq = list(range(b, a, -c))
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001400 self.assert_(b in seq)
1401 self.assert_(a not in seq)
1402 self.assertEqual(len(seq), 2)
1403
Guido van Rossum805365e2007-05-07 22:24:25 +00001404 seq = list(range(-a, -b, -c))
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001405 self.assert_(-a in seq)
1406 self.assert_(-b not in seq)
1407 self.assertEqual(len(seq), 2)
1408
Walter Dörwald919497e2003-01-19 16:23:59 +00001409 self.assertRaises(TypeError, range)
1410 self.assertRaises(TypeError, range, 1, 2, 3, 4)
1411 self.assertRaises(ValueError, range, 1, 2, 0)
Guido van Rossume2a383d2007-01-15 16:59:06 +00001412 self.assertRaises(ValueError, range, a, a + 1, int(0))
Neal Norwitzfcf44352005-11-27 20:37:43 +00001413
1414 class badzero(int):
Guido van Rossum47b9ff62006-08-24 00:41:19 +00001415 def __eq__(self, other):
Neal Norwitzfcf44352005-11-27 20:37:43 +00001416 raise RuntimeError
Guido van Rossum47b9ff62006-08-24 00:41:19 +00001417 __ne__ = __lt__ = __gt__ = __le__ = __ge__ = __eq__
1418
1419 # XXX This won't (but should!) raise RuntimeError if a is an int...
Neal Norwitzfcf44352005-11-27 20:37:43 +00001420 self.assertRaises(RuntimeError, range, a, a + 1, badzero(1))
Guido van Rossum805365e2007-05-07 22:24:25 +00001421 """
Walter Dörwald919497e2003-01-19 16:23:59 +00001422
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001423 # Reject floats when it would require PyLongs to represent.
1424 # (smaller floats still accepted, but deprecated)
Tim Peters299b3df2003-04-15 14:40:03 +00001425 self.assertRaises(TypeError, range, 1e100, 1e101, 1e101)
Guido van Rossumefbbb1c2003-04-11 18:43:06 +00001426
Walter Dörwald357981e2003-04-15 18:59:28 +00001427 self.assertRaises(TypeError, range, 0, "spam")
1428 self.assertRaises(TypeError, range, 0, 42, "spam")
1429
Guido van Rossum805365e2007-05-07 22:24:25 +00001430 #NEAL self.assertRaises(OverflowError, range, -sys.maxint, sys.maxint)
1431 #NEAL self.assertRaises(OverflowError, range, 0, 2*sys.maxint)
1432
1433 self.assertRaises(OverflowError, len, range(0, sys.maxint**10))
Walter Dörwald357981e2003-04-15 18:59:28 +00001434
Guido van Rossuma88a0332007-02-26 16:59:55 +00001435 def test_input(self):
1436 self.write_testfile()
1437 fp = open(TESTFN, 'r')
1438 savestdin = sys.stdin
1439 savestdout = sys.stdout # Eats the echo
1440 try:
1441 sys.stdin = fp
1442 sys.stdout = BitBucket()
1443 self.assertEqual(input(), "1+1")
1444 self.assertEqual(input('testing\n'), "1+1")
1445 self.assertEqual(input(), 'The quick brown fox jumps over the lazy dog.')
1446 self.assertEqual(input('testing\n'), 'Dear John')
1447
1448 # SF 1535165: don't segfault on closed stdin
1449 # sys.stdout must be a regular file for triggering
1450 sys.stdout = savestdout
1451 sys.stdin.close()
1452 self.assertRaises(ValueError, input)
1453
1454 sys.stdout = BitBucket()
Guido van Rossum34d19282007-08-09 01:03:29 +00001455 sys.stdin = io.StringIO("NULL\0")
Guido van Rossuma88a0332007-02-26 16:59:55 +00001456 self.assertRaises(TypeError, input, 42, 42)
Guido van Rossum34d19282007-08-09 01:03:29 +00001457 sys.stdin = io.StringIO(" 'whitespace'")
Guido van Rossuma88a0332007-02-26 16:59:55 +00001458 self.assertEqual(input(), " 'whitespace'")
Guido van Rossum34d19282007-08-09 01:03:29 +00001459 sys.stdin = io.StringIO()
Guido van Rossuma88a0332007-02-26 16:59:55 +00001460 self.assertRaises(EOFError, input)
1461
1462 del sys.stdout
1463 self.assertRaises(RuntimeError, input, 'prompt')
1464 del sys.stdin
1465 self.assertRaises(RuntimeError, input, 'prompt')
1466 finally:
1467 sys.stdin = savestdin
1468 sys.stdout = savestdout
1469 fp.close()
1470 unlink(TESTFN)
1471
Walter Dörwald919497e2003-01-19 16:23:59 +00001472 def test_repr(self):
1473 self.assertEqual(repr(''), '\'\'')
1474 self.assertEqual(repr(0), '0')
Guido van Rossume2a383d2007-01-15 16:59:06 +00001475 self.assertEqual(repr(0), '0')
Walter Dörwald919497e2003-01-19 16:23:59 +00001476 self.assertEqual(repr(()), '()')
1477 self.assertEqual(repr([]), '[]')
1478 self.assertEqual(repr({}), '{}')
1479 a = []
1480 a.append(a)
1481 self.assertEqual(repr(a), '[[...]]')
1482 a = {}
1483 a[0] = a
1484 self.assertEqual(repr(a), '{0: {...}}')
1485
1486 def test_round(self):
1487 self.assertEqual(round(0.0), 0.0)
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001488 self.assertEqual(type(round(0.0)), int)
Walter Dörwald919497e2003-01-19 16:23:59 +00001489 self.assertEqual(round(1.0), 1.0)
1490 self.assertEqual(round(10.0), 10.0)
1491 self.assertEqual(round(1000000000.0), 1000000000.0)
1492 self.assertEqual(round(1e20), 1e20)
1493
1494 self.assertEqual(round(-1.0), -1.0)
1495 self.assertEqual(round(-10.0), -10.0)
1496 self.assertEqual(round(-1000000000.0), -1000000000.0)
1497 self.assertEqual(round(-1e20), -1e20)
1498
1499 self.assertEqual(round(0.1), 0.0)
1500 self.assertEqual(round(1.1), 1.0)
1501 self.assertEqual(round(10.1), 10.0)
1502 self.assertEqual(round(1000000000.1), 1000000000.0)
1503
1504 self.assertEqual(round(-1.1), -1.0)
1505 self.assertEqual(round(-10.1), -10.0)
1506 self.assertEqual(round(-1000000000.1), -1000000000.0)
1507
1508 self.assertEqual(round(0.9), 1.0)
1509 self.assertEqual(round(9.9), 10.0)
1510 self.assertEqual(round(999999999.9), 1000000000.0)
1511
1512 self.assertEqual(round(-0.9), -1.0)
1513 self.assertEqual(round(-9.9), -10.0)
1514 self.assertEqual(round(-999999999.9), -1000000000.0)
1515
1516 self.assertEqual(round(-8.0, -1), -10.0)
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001517 self.assertEqual(type(round(-8.0, -1)), float)
1518
1519 self.assertEqual(type(round(-8.0, 0)), float)
1520 self.assertEqual(type(round(-8.0, 1)), float)
1521
1522 # Check even / odd rounding behaviour
1523 self.assertEqual(round(5.5), 6)
1524 self.assertEqual(round(6.5), 6)
1525 self.assertEqual(round(-5.5), -6)
1526 self.assertEqual(round(-6.5), -6)
1527
1528 # Check behavior on ints
1529 self.assertEqual(round(0), 0)
1530 self.assertEqual(round(8), 8)
1531 self.assertEqual(round(-8), -8)
1532 self.assertEqual(type(round(0)), int)
1533 self.assertEqual(type(round(-8, -1)), float)
1534 self.assertEqual(type(round(-8, 0)), float)
1535 self.assertEqual(type(round(-8, 1)), float)
Walter Dörwald919497e2003-01-19 16:23:59 +00001536
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001537 # test new kwargs
1538 self.assertEqual(round(number=-8.0, ndigits=-1), -10.0)
1539
Walter Dörwald919497e2003-01-19 16:23:59 +00001540 self.assertRaises(TypeError, round)
1541
Alex Martelliae211f92007-08-22 23:21:33 +00001542 # test generic rounding delegation for reals
1543 class TestRound:
1544 def __round__(self):
1545 return 23
1546
1547 class TestNoRound:
1548 pass
1549
1550 self.assertEqual(round(TestRound()), 23)
1551
1552 self.assertRaises(TypeError, round, 1, 2, 3)
1553 self.assertRaises(TypeError, round, TestNoRound())
1554
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001555 t = TestNoRound()
1556 t.__round__ = lambda *args: args
1557 self.assertRaises(TypeError, round, t)
1558 self.assertRaises(TypeError, round, t, 0)
1559
Walter Dörwald919497e2003-01-19 16:23:59 +00001560 def test_setattr(self):
Tim Petersf2715e02003-02-19 02:35:07 +00001561 setattr(sys, 'spam', 1)
1562 self.assertEqual(sys.spam, 1)
1563 self.assertRaises(TypeError, setattr, sys, 1, 'spam')
1564 self.assertRaises(TypeError, setattr)
Walter Dörwald919497e2003-01-19 16:23:59 +00001565
1566 def test_str(self):
1567 self.assertEqual(str(''), '')
1568 self.assertEqual(str(0), '0')
Guido van Rossume2a383d2007-01-15 16:59:06 +00001569 self.assertEqual(str(0), '0')
Walter Dörwald919497e2003-01-19 16:23:59 +00001570 self.assertEqual(str(()), '()')
1571 self.assertEqual(str([]), '[]')
1572 self.assertEqual(str({}), '{}')
1573 a = []
1574 a.append(a)
1575 self.assertEqual(str(a), '[[...]]')
1576 a = {}
1577 a[0] = a
1578 self.assertEqual(str(a), '{0: {...}}')
1579
Alex Martellia70b1912003-04-22 08:12:33 +00001580 def test_sum(self):
1581 self.assertEqual(sum([]), 0)
Guido van Rossum805365e2007-05-07 22:24:25 +00001582 self.assertEqual(sum(list(range(2,8))), 27)
1583 self.assertEqual(sum(iter(list(range(2,8)))), 27)
Alex Martellia70b1912003-04-22 08:12:33 +00001584 self.assertEqual(sum(Squares(10)), 285)
1585 self.assertEqual(sum(iter(Squares(10))), 285)
1586 self.assertEqual(sum([[1], [2], [3]], []), [1, 2, 3])
1587
1588 self.assertRaises(TypeError, sum)
1589 self.assertRaises(TypeError, sum, 42)
1590 self.assertRaises(TypeError, sum, ['a', 'b', 'c'])
1591 self.assertRaises(TypeError, sum, ['a', 'b', 'c'], '')
1592 self.assertRaises(TypeError, sum, [[1], [2], [3]])
1593 self.assertRaises(TypeError, sum, [{2:3}])
1594 self.assertRaises(TypeError, sum, [{2:3}]*2, {2:3})
1595
1596 class BadSeq:
1597 def __getitem__(self, index):
1598 raise ValueError
1599 self.assertRaises(ValueError, sum, BadSeq())
1600
Alex Martelli86d8b342007-08-22 22:39:42 +00001601 def test_trunc(self):
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001602
1603 self.assertEqual(trunc(1), 1)
1604 self.assertEqual(trunc(-1), -1)
1605 self.assertEqual(type(trunc(1)), int)
1606 self.assertEqual(type(trunc(1.5)), int)
1607 self.assertEqual(trunc(1.5), 1)
1608 self.assertEqual(trunc(-1.5), -1)
1609 self.assertEqual(trunc(1.999999), 1)
1610 self.assertEqual(trunc(-1.999999), -1)
1611 self.assertEqual(trunc(-0.999999), -0)
1612 self.assertEqual(trunc(-100.999), -100)
1613
Alex Martelli86d8b342007-08-22 22:39:42 +00001614 class TestTrunc:
1615 def __trunc__(self):
1616 return 23
1617
1618 class TestNoTrunc:
1619 pass
1620
1621 self.assertEqual(trunc(TestTrunc()), 23)
1622
1623 self.assertRaises(TypeError, trunc)
1624 self.assertRaises(TypeError, trunc, 1, 2)
1625 self.assertRaises(TypeError, trunc, TestNoTrunc())
1626
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001627 t = TestNoTrunc()
1628 t.__trunc__ = lambda *args: args
1629 self.assertRaises(TypeError, trunc, t)
1630 self.assertRaises(TypeError, trunc, t, 0)
1631
Walter Dörwald919497e2003-01-19 16:23:59 +00001632 def test_tuple(self):
1633 self.assertEqual(tuple(()), ())
1634 t0_3 = (0, 1, 2, 3)
1635 t0_3_bis = tuple(t0_3)
1636 self.assert_(t0_3 is t0_3_bis)
1637 self.assertEqual(tuple([]), ())
1638 self.assertEqual(tuple([0, 1, 2, 3]), (0, 1, 2, 3))
1639 self.assertEqual(tuple(''), ())
1640 self.assertEqual(tuple('spam'), ('s', 'p', 'a', 'm'))
1641
1642 def test_type(self):
1643 self.assertEqual(type(''), type('123'))
1644 self.assertNotEqual(type(''), type(()))
1645
Guido van Rossumfee7b932005-01-16 00:21:28 +00001646 # We don't want self in vars(), so these are static methods
1647
1648 @staticmethod
Walter Dörwald919497e2003-01-19 16:23:59 +00001649 def get_vars_f0():
1650 return vars()
Walter Dörwald919497e2003-01-19 16:23:59 +00001651
Guido van Rossumfee7b932005-01-16 00:21:28 +00001652 @staticmethod
Walter Dörwald919497e2003-01-19 16:23:59 +00001653 def get_vars_f2():
1654 BuiltinTest.get_vars_f0()
1655 a = 1
1656 b = 2
1657 return vars()
Walter Dörwald919497e2003-01-19 16:23:59 +00001658
1659 def test_vars(self):
Raymond Hettingera690a992003-11-16 16:17:49 +00001660 self.assertEqual(set(vars()), set(dir()))
Walter Dörwald919497e2003-01-19 16:23:59 +00001661 import sys
Raymond Hettingera690a992003-11-16 16:17:49 +00001662 self.assertEqual(set(vars(sys)), set(dir(sys)))
Walter Dörwald919497e2003-01-19 16:23:59 +00001663 self.assertEqual(self.get_vars_f0(), {})
1664 self.assertEqual(self.get_vars_f2(), {'a': 1, 'b': 2})
1665 self.assertRaises(TypeError, vars, 42, 42)
1666 self.assertRaises(TypeError, vars, 42)
1667
1668 def test_zip(self):
1669 a = (1, 2, 3)
1670 b = (4, 5, 6)
1671 t = [(1, 4), (2, 5), (3, 6)]
Guido van Rossum801f0d72006-08-24 19:48:10 +00001672 self.assertEqual(list(zip(a, b)), t)
Walter Dörwald919497e2003-01-19 16:23:59 +00001673 b = [4, 5, 6]
Guido van Rossum801f0d72006-08-24 19:48:10 +00001674 self.assertEqual(list(zip(a, b)), t)
Walter Dörwald919497e2003-01-19 16:23:59 +00001675 b = (4, 5, 6, 7)
Guido van Rossum801f0d72006-08-24 19:48:10 +00001676 self.assertEqual(list(zip(a, b)), t)
Walter Dörwald919497e2003-01-19 16:23:59 +00001677 class I:
1678 def __getitem__(self, i):
1679 if i < 0 or i > 2: raise IndexError
1680 return i + 4
Guido van Rossum801f0d72006-08-24 19:48:10 +00001681 self.assertEqual(list(zip(a, I())), t)
1682 self.assertEqual(list(zip()), [])
1683 self.assertEqual(list(zip(*[])), [])
Walter Dörwald919497e2003-01-19 16:23:59 +00001684 self.assertRaises(TypeError, zip, None)
1685 class G:
1686 pass
1687 self.assertRaises(TypeError, zip, a, G())
1688
1689 # Make sure zip doesn't try to allocate a billion elements for the
1690 # result list when one of its arguments doesn't say how long it is.
1691 # A MemoryError is the most likely failure mode.
1692 class SequenceWithoutALength:
1693 def __getitem__(self, i):
1694 if i == 5:
1695 raise IndexError
1696 else:
1697 return i
1698 self.assertEqual(
Guido van Rossum805365e2007-05-07 22:24:25 +00001699 list(zip(SequenceWithoutALength(), range(2**30))),
Walter Dörwald919497e2003-01-19 16:23:59 +00001700 list(enumerate(range(5)))
1701 )
1702
1703 class BadSeq:
1704 def __getitem__(self, i):
1705 if i == 5:
1706 raise ValueError
1707 else:
1708 return i
Guido van Rossum801f0d72006-08-24 19:48:10 +00001709 self.assertRaises(ValueError, list, zip(BadSeq(), BadSeq()))
Walter Dörwald919497e2003-01-19 16:23:59 +00001710
Raymond Hettinger64958a12003-12-17 20:43:33 +00001711class TestSorted(unittest.TestCase):
1712
1713 def test_basic(self):
Guido van Rossum805365e2007-05-07 22:24:25 +00001714 data = list(range(100))
Raymond Hettinger64958a12003-12-17 20:43:33 +00001715 copy = data[:]
1716 random.shuffle(copy)
1717 self.assertEqual(data, sorted(copy))
1718 self.assertNotEqual(data, copy)
1719
1720 data.reverse()
1721 random.shuffle(copy)
Guido van Rossum47b9ff62006-08-24 00:41:19 +00001722 self.assertEqual(data, sorted(copy, cmp=lambda x, y: (x < y) - (x > y)))
Raymond Hettinger64958a12003-12-17 20:43:33 +00001723 self.assertNotEqual(data, copy)
1724 random.shuffle(copy)
1725 self.assertEqual(data, sorted(copy, key=lambda x: -x))
1726 self.assertNotEqual(data, copy)
1727 random.shuffle(copy)
1728 self.assertEqual(data, sorted(copy, reverse=1))
1729 self.assertNotEqual(data, copy)
1730
1731 def test_inputtypes(self):
1732 s = 'abracadabra'
Walter Dörwald1f5947b2007-05-22 16:52:54 +00001733 types = [list, tuple, str]
Walter Dörwald4e41a4b2005-08-03 17:09:04 +00001734 for T in types:
Raymond Hettinger64958a12003-12-17 20:43:33 +00001735 self.assertEqual(sorted(s), sorted(T(s)))
1736
Walter Dörwald1f5947b2007-05-22 16:52:54 +00001737 s = ''.join(set(s)) # unique letters only
1738 types = [str, set, frozenset, list, tuple, dict.fromkeys]
Walter Dörwald4e41a4b2005-08-03 17:09:04 +00001739 for T in types:
Raymond Hettinger64958a12003-12-17 20:43:33 +00001740 self.assertEqual(sorted(s), sorted(T(s)))
1741
1742 def test_baddecorator(self):
1743 data = 'The quick Brown fox Jumped over The lazy Dog'.split()
1744 self.assertRaises(TypeError, sorted, data, None, lambda x,y: 0)
1745
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001746def test_main(verbose=None):
1747 test_classes = (BuiltinTest, TestSorted)
1748
1749 run_unittest(*test_classes)
1750
1751 # verify reference counting
1752 if verbose and hasattr(sys, "gettotalrefcount"):
1753 import gc
1754 counts = [None] * 5
Guido van Rossum805365e2007-05-07 22:24:25 +00001755 for i in range(len(counts)):
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001756 run_unittest(*test_classes)
1757 gc.collect()
1758 counts[i] = sys.gettotalrefcount()
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001759 print(counts)
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001760
Walter Dörwald919497e2003-01-19 16:23:59 +00001761
1762if __name__ == "__main__":
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001763 test_main(verbose=True)