blob: 554e350fda289a4e154fd9d4dbe945ff2f994918 [file] [log] [blame]
Guido van Rossum3bead091992-01-27 17:00:37 +00001# Python test set -- part 4a, built-in functions a-m
2
3from test_support import *
4
Guido van Rossumeecf0351994-12-30 17:17:46 +00005print '__import__'
6__import__('sys')
Barry Warsaw3a9d0612000-09-01 06:53:52 +00007__import__('time')
Guido van Rossumeecf0351994-12-30 17:17:46 +00008__import__('string')
9try: __import__('spamspam')
10except ImportError: pass
11else: raise TestFailed, "__import__('spamspam') should fail"
12
Guido van Rossum3bead091992-01-27 17:00:37 +000013print 'abs'
Fred Drake132dce22000-12-12 23:11:42 +000014if abs(0) != 0: raise TestFailed, 'abs(0)'
15if abs(1234) != 1234: raise TestFailed, 'abs(1234)'
16if abs(-1234) != 1234: raise TestFailed, 'abs(-1234)'
Guido van Rossum3bead091992-01-27 17:00:37 +000017#
Fred Drake132dce22000-12-12 23:11:42 +000018if abs(0.0) != 0.0: raise TestFailed, 'abs(0.0)'
19if abs(3.14) != 3.14: raise TestFailed, 'abs(3.14)'
20if abs(-3.14) != 3.14: raise TestFailed, 'abs(-3.14)'
Guido van Rossum3bead091992-01-27 17:00:37 +000021#
Fred Drake132dce22000-12-12 23:11:42 +000022if abs(0L) != 0L: raise TestFailed, 'abs(0L)'
23if abs(1234L) != 1234L: raise TestFailed, 'abs(1234L)'
24if abs(-1234L) != 1234L: raise TestFailed, 'abs(-1234L)'
Guido van Rossum3bead091992-01-27 17:00:37 +000025
Guido van Rossum29d26062001-12-11 04:37:34 +000026try: abs('a')
27except TypeError: pass
28else: raise TestFailed, 'abs("a")'
29
Guido van Rossum3bead091992-01-27 17:00:37 +000030print 'apply'
31def f0(*args):
Guido van Rossum27d445f1998-08-10 20:12:34 +000032 if args != (): raise TestFailed, 'f0 called with ' + `args`
Guido van Rossum3bead091992-01-27 17:00:37 +000033def f1(a1):
Guido van Rossum27d445f1998-08-10 20:12:34 +000034 if a1 != 1: raise TestFailed, 'f1 called with ' + `a1`
Guido van Rossum3bead091992-01-27 17:00:37 +000035def f2(a1, a2):
Guido van Rossum27d445f1998-08-10 20:12:34 +000036 if a1 != 1 or a2 != 2:
37 raise TestFailed, 'f2 called with ' + `a1, a2`
Guido van Rossum3bead091992-01-27 17:00:37 +000038def f3(a1, a2, a3):
Guido van Rossum27d445f1998-08-10 20:12:34 +000039 if a1 != 1 or a2 != 2 or a3 != 3:
40 raise TestFailed, 'f3 called with ' + `a1, a2, a3`
Guido van Rossum3bead091992-01-27 17:00:37 +000041apply(f0, ())
42apply(f1, (1,))
43apply(f2, (1, 2))
44apply(f3, (1, 2, 3))
45
Fred Drake1a7aab72001-01-04 22:33:02 +000046# A PyCFunction that takes only positional parameters should allow an
47# empty keyword dictionary to pass without a complaint, but raise a
48# TypeError if the dictionary is non-empty.
49apply(id, (1,), {})
50try:
51 apply(id, (1,), {"foo": 1})
52except TypeError:
53 pass
54else:
55 raise TestFailed, 'expected TypeError; no exception raised'
56
Guido van Rossume23b62f1994-11-10 22:25:26 +000057print 'callable'
58if not callable(len):raise TestFailed, 'callable(len)'
59def f(): pass
60if not callable(f): raise TestFailed, 'callable(f)'
61class C:
Guido van Rossum27d445f1998-08-10 20:12:34 +000062 def meth(self): pass
Guido van Rossume23b62f1994-11-10 22:25:26 +000063if not callable(C): raise TestFailed, 'callable(C)'
64x = C()
65if not callable(x.meth): raise TestFailed, 'callable(x.meth)'
66if callable(x): raise TestFailed, 'callable(x)'
67class D(C):
Guido van Rossum27d445f1998-08-10 20:12:34 +000068 def __call__(self): pass
Guido van Rossume23b62f1994-11-10 22:25:26 +000069y = D()
70if not callable(y): raise TestFailed, 'callable(y)'
Jeremy Hylton5ab36612001-01-03 23:53:31 +000071y()
Guido van Rossume23b62f1994-11-10 22:25:26 +000072
Guido van Rossum3bead091992-01-27 17:00:37 +000073print 'chr'
Fred Drake132dce22000-12-12 23:11:42 +000074if chr(32) != ' ': raise TestFailed, 'chr(32)'
75if chr(65) != 'A': raise TestFailed, 'chr(65)'
76if chr(97) != 'a': raise TestFailed, 'chr(97)'
Guido van Rossum3bead091992-01-27 17:00:37 +000077
Neil Schemenauer38f02232001-01-04 01:33:41 +000078# cmp
Guido van Rossum85f18201992-11-27 22:53:50 +000079print 'cmp'
Fred Drake132dce22000-12-12 23:11:42 +000080if cmp(-1, 1) != -1: raise TestFailed, 'cmp(-1, 1)'
81if cmp(1, -1) != 1: raise TestFailed, 'cmp(1, -1)'
82if cmp(1, 1) != 0: raise TestFailed, 'cmp(1, 1)'
Jeremy Hylton4a3dd2d2000-04-14 19:13:24 +000083# verify that circular objects are handled
84a = []; a.append(a)
85b = []; b.append(b)
86from UserList import UserList
87c = UserList(); c.append(c)
88if cmp(a, b) != 0: raise TestFailed, "cmp(%s, %s)" % (a, b)
89if cmp(b, c) != 0: raise TestFailed, "cmp(%s, %s)" % (b, c)
90if cmp(c, a) != 0: raise TestFailed, "cmp(%s, %s)" % (c, a)
91if cmp(a, c) != 0: raise TestFailed, "cmp(%s, %s)" % (a, c)
Vladimir Marangozovd57f5cf2000-07-14 04:32:09 +000092# okay, now break the cycles
93a.pop(); b.pop(); c.pop()
Guido van Rossum85f18201992-11-27 22:53:50 +000094
95print 'coerce'
Guido van Rossum35fb82a1993-01-26 13:04:43 +000096if fcmp(coerce(1, 1.1), (1.0, 1.1)): raise TestFailed, 'coerce(1, 1.1)'
Fred Drake132dce22000-12-12 23:11:42 +000097if coerce(1, 1L) != (1L, 1L): raise TestFailed, 'coerce(1, 1L)'
Guido van Rossum35fb82a1993-01-26 13:04:43 +000098if fcmp(coerce(1L, 1.1), (1.0, 1.1)): raise TestFailed, 'coerce(1L, 1.1)'
Guido van Rossum85f18201992-11-27 22:53:50 +000099
Guido van Rossume23b62f1994-11-10 22:25:26 +0000100print 'compile'
101compile('print 1\n', '', 'exec')
102
Guido van Rossumdddf7a61997-03-31 17:13:17 +0000103print 'complex'
Fred Drake132dce22000-12-12 23:11:42 +0000104if complex(1,10) != 1+10j: raise TestFailed, 'complex(1,10)'
105if complex(1,10L) != 1+10j: raise TestFailed, 'complex(1,10L)'
106if complex(1,10.0) != 1+10j: raise TestFailed, 'complex(1,10.0)'
107if complex(1L,10) != 1+10j: raise TestFailed, 'complex(1L,10)'
108if complex(1L,10L) != 1+10j: raise TestFailed, 'complex(1L,10L)'
109if complex(1L,10.0) != 1+10j: raise TestFailed, 'complex(1L,10.0)'
110if complex(1.0,10) != 1+10j: raise TestFailed, 'complex(1.0,10)'
111if complex(1.0,10L) != 1+10j: raise TestFailed, 'complex(1.0,10L)'
112if complex(1.0,10.0) != 1+10j: raise TestFailed, 'complex(1.0,10.0)'
113if complex(3.14+0j) != 3.14+0j: raise TestFailed, 'complex(3.14)'
114if complex(3.14) != 3.14+0j: raise TestFailed, 'complex(3.14)'
115if complex(314) != 314.0+0j: raise TestFailed, 'complex(314)'
116if complex(314L) != 314.0+0j: raise TestFailed, 'complex(314L)'
117if complex(3.14+0j, 0j) != 3.14+0j: raise TestFailed, 'complex(3.14, 0j)'
118if complex(3.14, 0.0) != 3.14+0j: raise TestFailed, 'complex(3.14, 0.0)'
119if complex(314, 0) != 314.0+0j: raise TestFailed, 'complex(314, 0)'
120if complex(314L, 0L) != 314.0+0j: raise TestFailed, 'complex(314L, 0L)'
121if complex(0j, 3.14j) != -3.14+0j: raise TestFailed, 'complex(0j, 3.14j)'
122if complex(0.0, 3.14j) != -3.14+0j: raise TestFailed, 'complex(0.0, 3.14j)'
123if complex(0j, 3.14) != 3.14j: raise TestFailed, 'complex(0j, 3.14)'
124if complex(0.0, 3.14) != 3.14j: raise TestFailed, 'complex(0.0, 3.14)'
Fred Drake526c7a02001-12-13 19:52:22 +0000125if complex("1") != 1+0j: raise TestFailed, 'complex("1")'
126if complex("1j") != 1j: raise TestFailed, 'complex("1j")'
Tim Peters077f2712002-04-14 22:04:03 +0000127
Fred Drake526c7a02001-12-13 19:52:22 +0000128try: complex("1", "1")
129except TypeError: pass
130else: raise TestFailed, 'complex("1", "1")'
Tim Peters077f2712002-04-14 22:04:03 +0000131
Fred Drake526c7a02001-12-13 19:52:22 +0000132try: complex(1, "1")
133except TypeError: pass
134else: raise TestFailed, 'complex(1, "1")'
Tim Peters077f2712002-04-14 22:04:03 +0000135
Fred Drake132dce22000-12-12 23:11:42 +0000136if complex(" 3.14+J ") != 3.14+1j: raise TestFailed, 'complex(" 3.14+J )"'
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000137if have_unicode:
138 if complex(unicode(" 3.14+J ")) != 3.14+1j:
139 raise TestFailed, 'complex(u" 3.14+J )"'
Tim Peters077f2712002-04-14 22:04:03 +0000140
141# SF bug 543840: complex(string) accepts strings with \0
142# Fixed in 2.3.
143try:
144 complex('1+1j\0j')
145except ValueError:
146 pass
147else:
148 raise TestFailed("complex('1+1j\0j') should have raised ValueError")
149
Guido van Rossumdddf7a61997-03-31 17:13:17 +0000150class Z:
151 def __complex__(self): return 3.14j
152z = Z()
Fred Drake132dce22000-12-12 23:11:42 +0000153if complex(z) != 3.14j: raise TestFailed, 'complex(classinstance)'
Guido van Rossumdddf7a61997-03-31 17:13:17 +0000154
Guido van Rossume23b62f1994-11-10 22:25:26 +0000155print 'delattr'
156import sys
157sys.spam = 1
158delattr(sys, 'spam')
159
Guido van Rossum3bead091992-01-27 17:00:37 +0000160print 'dir'
161x = 1
162if 'x' not in dir(): raise TestFailed, 'dir()'
163import sys
164if 'modules' not in dir(sys): raise TestFailed, 'dir(sys)'
165
166print 'divmod'
Fred Drake132dce22000-12-12 23:11:42 +0000167if divmod(12, 7) != (1, 5): raise TestFailed, 'divmod(12, 7)'
168if divmod(-12, 7) != (-2, 2): raise TestFailed, 'divmod(-12, 7)'
169if divmod(12, -7) != (-2, -2): raise TestFailed, 'divmod(12, -7)'
170if divmod(-12, -7) != (1, -5): raise TestFailed, 'divmod(-12, -7)'
Guido van Rossum3bead091992-01-27 17:00:37 +0000171#
Fred Drake132dce22000-12-12 23:11:42 +0000172if divmod(12L, 7L) != (1L, 5L): raise TestFailed, 'divmod(12L, 7L)'
173if divmod(-12L, 7L) != (-2L, 2L): raise TestFailed, 'divmod(-12L, 7L)'
174if divmod(12L, -7L) != (-2L, -2L): raise TestFailed, 'divmod(12L, -7L)'
175if divmod(-12L, -7L) != (1L, -5L): raise TestFailed, 'divmod(-12L, -7L)'
Guido van Rossum3bead091992-01-27 17:00:37 +0000176#
Fred Drake132dce22000-12-12 23:11:42 +0000177if divmod(12, 7L) != (1, 5L): raise TestFailed, 'divmod(12, 7L)'
178if divmod(-12, 7L) != (-2, 2L): raise TestFailed, 'divmod(-12, 7L)'
179if divmod(12L, -7) != (-2L, -2): raise TestFailed, 'divmod(12L, -7)'
180if divmod(-12L, -7) != (1L, -5): raise TestFailed, 'divmod(-12L, -7)'
Guido van Rossum3bead091992-01-27 17:00:37 +0000181#
Guido van Rossum35fb82a1993-01-26 13:04:43 +0000182if fcmp(divmod(3.25, 1.0), (3.0, 0.25)):
Guido van Rossum27d445f1998-08-10 20:12:34 +0000183 raise TestFailed, 'divmod(3.25, 1.0)'
Guido van Rossum35fb82a1993-01-26 13:04:43 +0000184if fcmp(divmod(-3.25, 1.0), (-4.0, 0.75)):
Guido van Rossum27d445f1998-08-10 20:12:34 +0000185 raise TestFailed, 'divmod(-3.25, 1.0)'
Guido van Rossum35fb82a1993-01-26 13:04:43 +0000186if fcmp(divmod(3.25, -1.0), (-4.0, -0.75)):
Guido van Rossum27d445f1998-08-10 20:12:34 +0000187 raise TestFailed, 'divmod(3.25, -1.0)'
Guido van Rossum35fb82a1993-01-26 13:04:43 +0000188if fcmp(divmod(-3.25, -1.0), (3.0, -0.25)):
Guido van Rossum27d445f1998-08-10 20:12:34 +0000189 raise TestFailed, 'divmod(-3.25, -1.0)'
Guido van Rossum3bead091992-01-27 17:00:37 +0000190
191print 'eval'
Fred Drake132dce22000-12-12 23:11:42 +0000192if eval('1+1') != 2: raise TestFailed, 'eval(\'1+1\')'
193if eval(' 1+1\n') != 2: raise TestFailed, 'eval(\' 1+1\\n\')'
Guido van Rossum824de251995-01-02 18:38:42 +0000194globals = {'a': 1, 'b': 2}
195locals = {'b': 200, 'c': 300}
Fred Drake132dce22000-12-12 23:11:42 +0000196if eval('a', globals) != 1:
Jeremy Hyltoncf29bb22000-08-23 21:11:05 +0000197 raise TestFailed, "eval(1) == %s" % eval('a', globals)
Fred Drake132dce22000-12-12 23:11:42 +0000198if eval('a', globals, locals) != 1:
Jeremy Hyltoncf29bb22000-08-23 21:11:05 +0000199 raise TestFailed, "eval(2)"
Fred Drake132dce22000-12-12 23:11:42 +0000200if eval('b', globals, locals) != 200:
Jeremy Hyltoncf29bb22000-08-23 21:11:05 +0000201 raise TestFailed, "eval(3)"
Fred Drake132dce22000-12-12 23:11:42 +0000202if eval('c', globals, locals) != 300:
Jeremy Hyltoncf29bb22000-08-23 21:11:05 +0000203 raise TestFailed, "eval(4)"
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000204if have_unicode:
205 if eval(unicode('1+1')) != 2: raise TestFailed, 'eval(u\'1+1\')'
206 if eval(unicode(' 1+1\n')) != 2: raise TestFailed, 'eval(u\' 1+1\\n\')'
Marc-André Lemburgd1ba4432000-09-19 21:04:18 +0000207globals = {'a': 1, 'b': 2}
208locals = {'b': 200, 'c': 300}
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000209if have_unicode:
210 if eval(unicode('a'), globals) != 1:
211 raise TestFailed, "eval(1) == %s" % eval(unicode('a'), globals)
212 if eval(unicode('a'), globals, locals) != 1:
213 raise TestFailed, "eval(2)"
214 if eval(unicode('b'), globals, locals) != 200:
215 raise TestFailed, "eval(3)"
216 if eval(unicode('c'), globals, locals) != 300:
217 raise TestFailed, "eval(4)"
Guido van Rossum3bead091992-01-27 17:00:37 +0000218
Guido van Rossum85f18201992-11-27 22:53:50 +0000219print 'execfile'
220z = 0
221f = open(TESTFN, 'w')
222f.write('z = z+1\n')
223f.write('z = z*2\n')
224f.close()
225execfile(TESTFN)
Fred Drake132dce22000-12-12 23:11:42 +0000226if z != 2: raise TestFailed, "execfile(1)"
Guido van Rossum824de251995-01-02 18:38:42 +0000227globals['z'] = 0
228execfile(TESTFN, globals)
Fred Drake132dce22000-12-12 23:11:42 +0000229if globals['z'] != 2: raise TestFailed, "execfile(1)"
Guido van Rossum824de251995-01-02 18:38:42 +0000230locals['z'] = 0
231execfile(TESTFN, globals, locals)
Fred Drake132dce22000-12-12 23:11:42 +0000232if locals['z'] != 2: raise TestFailed, "execfile(1)"
Guido van Rossum85f18201992-11-27 22:53:50 +0000233unlink(TESTFN)
Guido van Rossum3bead091992-01-27 17:00:37 +0000234
Guido van Rossume65cce51993-11-08 15:05:21 +0000235print 'filter'
Fred Drake132dce22000-12-12 23:11:42 +0000236if filter(lambda c: 'a' <= c <= 'z', 'Hello World') != 'elloorld':
Guido van Rossum27d445f1998-08-10 20:12:34 +0000237 raise TestFailed, 'filter (filter a string)'
Fred Drake132dce22000-12-12 23:11:42 +0000238if filter(None, [1, 'hello', [], [3], '', None, 9, 0]) != [1, 'hello', [3], 9]:
Guido van Rossum27d445f1998-08-10 20:12:34 +0000239 raise TestFailed, 'filter (remove false values)'
Fred Drake132dce22000-12-12 23:11:42 +0000240if filter(lambda x: x > 0, [1, -3, 9, 0, 2]) != [1, 9, 2]:
Guido van Rossum27d445f1998-08-10 20:12:34 +0000241 raise TestFailed, 'filter (keep positives)'
Guido van Rossumb6775db1994-08-01 11:34:53 +0000242class Squares:
Guido van Rossum27d445f1998-08-10 20:12:34 +0000243 def __init__(self, max):
244 self.max = max
245 self.sofar = []
246 def __len__(self): return len(self.sofar)
247 def __getitem__(self, i):
248 if not 0 <= i < self.max: raise IndexError
249 n = len(self.sofar)
250 while n <= i:
251 self.sofar.append(n*n)
252 n = n+1
253 return self.sofar[i]
Guido van Rossumb6775db1994-08-01 11:34:53 +0000254if filter(None, Squares(10)) != [1, 4, 9, 16, 25, 36, 49, 64, 81]:
Guido van Rossum27d445f1998-08-10 20:12:34 +0000255 raise TestFailed, 'filter(None, Squares(10))'
Guido van Rossumb6775db1994-08-01 11:34:53 +0000256if filter(lambda x: x%2, Squares(10)) != [1, 9, 25, 49, 81]:
Guido van Rossum27d445f1998-08-10 20:12:34 +0000257 raise TestFailed, 'filter(oddp, Squares(10))'
Barry Warsawab11f601999-01-28 19:44:06 +0000258class StrSquares:
259 def __init__(self, max):
260 self.max = max
261 self.sofar = []
262 def __len__(self):
263 return len(self.sofar)
264 def __getitem__(self, i):
265 if not 0 <= i < self.max:
266 raise IndexError
267 n = len(self.sofar)
268 while n <= i:
269 self.sofar.append(str(n*n))
270 n = n+1
271 return self.sofar[i]
272def identity(item):
273 return 1
274filter(identity, Squares(5))
Guido van Rossume65cce51993-11-08 15:05:21 +0000275
Guido van Rossum3bead091992-01-27 17:00:37 +0000276print 'float'
Fred Drake132dce22000-12-12 23:11:42 +0000277if float(3.14) != 3.14: raise TestFailed, 'float(3.14)'
278if float(314) != 314.0: raise TestFailed, 'float(314)'
279if float(314L) != 314.0: raise TestFailed, 'float(314L)'
280if float(" 3.14 ") != 3.14: raise TestFailed, 'float(" 3.14 ")'
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000281if have_unicode:
282 if float(unicode(" 3.14 ")) != 3.14:
283 raise TestFailed, 'float(u" 3.14 ")'
Martin v. Löwis10d72552001-08-17 22:08:34 +0000284 if float(unicode(" \u0663.\u0661\u0664 ",'raw-unicode-escape')) != 3.14:
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000285 raise TestFailed, 'float(u" \u0663.\u0661\u0664 ")'
Guido van Rossum3bead091992-01-27 17:00:37 +0000286
287print 'getattr'
288import sys
289if getattr(sys, 'stdout') is not sys.stdout: raise TestFailed, 'getattr'
Jeremy Hyltonb7a77312001-07-30 22:49:11 +0000290try:
291 getattr(sys, 1)
292except TypeError:
293 pass
294else:
295 raise TestFailed, "getattr(sys, 1) should raise an exception"
296try:
297 getattr(sys, 1, "foo")
298except TypeError:
299 pass
300else:
301 raise TestFailed, 'getattr(sys, 1, "foo") should raise an exception'
Guido van Rossum3bead091992-01-27 17:00:37 +0000302
Guido van Rossume23b62f1994-11-10 22:25:26 +0000303print 'hasattr'
304import sys
305if not hasattr(sys, 'stdout'): raise TestFailed, 'hasattr'
Jeremy Hyltonb7a77312001-07-30 22:49:11 +0000306try:
307 hasattr(sys, 1)
308except TypeError:
309 pass
310else:
311 raise TestFailed, "hasattr(sys, 1) should raise an exception"
Guido van Rossume23b62f1994-11-10 22:25:26 +0000312
313print 'hash'
314hash(None)
315if not hash(1) == hash(1L) == hash(1.0): raise TestFailed, 'numeric hash()'
316hash('spam')
317hash((0,1,2,3))
318def f(): pass
Guido van Rossum0c6614c2001-01-18 23:36:14 +0000319try: hash([])
320except TypeError: pass
321else: raise TestFailed, "hash([]) should raise an exception"
322try: hash({})
323except TypeError: pass
324else: raise TestFailed, "hash({}) should raise an exception"
Guido van Rossume23b62f1994-11-10 22:25:26 +0000325
Guido van Rossum3bead091992-01-27 17:00:37 +0000326print 'hex'
327if hex(16) != '0x10': raise TestFailed, 'hex(16)'
328if hex(16L) != '0x10L': raise TestFailed, 'hex(16L)'
Guido van Rossumc1c96d11997-05-14 21:37:23 +0000329if len(hex(-1)) != len(hex(sys.maxint)): raise TestFailed, 'len(hex(-1))'
330if hex(-16) not in ('0xfffffff0', '0xfffffffffffffff0'):
331 raise TestFailed, 'hex(-16)'
Guido van Rossum3bead091992-01-27 17:00:37 +0000332if hex(-16L) != '-0x10L': raise TestFailed, 'hex(-16L)'
333
Guido van Rossume23b62f1994-11-10 22:25:26 +0000334print 'id'
335id(None)
336id(1)
337id(1L)
338id(1.0)
339id('spam')
340id((0,1,2,3))
341id([0,1,2,3])
342id({'spam': 1, 'eggs': 2, 'ham': 3})
343
Guido van Rossum3bead091992-01-27 17:00:37 +0000344# Test input() later, together with raw_input
345
346print 'int'
Fred Drake132dce22000-12-12 23:11:42 +0000347if int(314) != 314: raise TestFailed, 'int(314)'
348if int(3.14) != 3: raise TestFailed, 'int(3.14)'
349if int(314L) != 314: raise TestFailed, 'int(314L)'
Guido van Rossumdddf7a61997-03-31 17:13:17 +0000350# Check that conversion from float truncates towards zero
Fred Drake132dce22000-12-12 23:11:42 +0000351if int(-3.14) != -3: raise TestFailed, 'int(-3.14)'
352if int(3.9) != 3: raise TestFailed, 'int(3.9)'
353if int(-3.9) != -3: raise TestFailed, 'int(-3.9)'
354if int(3.5) != 3: raise TestFailed, 'int(3.5)'
355if int(-3.5) != -3: raise TestFailed, 'int(-3.5)'
Guido van Rossum9e896b32000-04-05 20:11:21 +0000356# Different base:
Fred Drake132dce22000-12-12 23:11:42 +0000357if int("10",16) != 16L: raise TestFailed, 'int("10",16)'
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000358if have_unicode:
359 if int(unicode("10"),16) != 16L:
360 raise TestFailed, 'int(u"10",16)'
Jeremy Hyltona05e2932000-06-28 14:48:01 +0000361# Test conversion from strings and various anomalies
Guido van Rossum70115041998-06-30 17:02:20 +0000362L = [
Guido van Rossum27d445f1998-08-10 20:12:34 +0000363 ('0', 0),
364 ('1', 1),
365 ('9', 9),
366 ('10', 10),
367 ('99', 99),
368 ('100', 100),
369 ('314', 314),
370 (' 314', 314),
371 ('314 ', 314),
372 (' \t\t 314 \t\t ', 314),
373 (`sys.maxint`, sys.maxint),
Guido van Rossum9e896b32000-04-05 20:11:21 +0000374 (' 1x', ValueError),
375 (' 1 ', 1),
376 (' 1\02 ', ValueError),
Guido van Rossum27d445f1998-08-10 20:12:34 +0000377 ('', ValueError),
378 (' ', ValueError),
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000379 (' \t\t ', ValueError)
380]
381if have_unicode:
382 L += [
383 (unicode('0'), 0),
384 (unicode('1'), 1),
385 (unicode('9'), 9),
386 (unicode('10'), 10),
387 (unicode('99'), 99),
388 (unicode('100'), 100),
389 (unicode('314'), 314),
390 (unicode(' 314'), 314),
Martin v. Löwis10d72552001-08-17 22:08:34 +0000391 (unicode('\u0663\u0661\u0664 ','raw-unicode-escape'), 314),
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000392 (unicode(' \t\t 314 \t\t '), 314),
393 (unicode(' 1x'), ValueError),
394 (unicode(' 1 '), 1),
395 (unicode(' 1\02 '), ValueError),
396 (unicode(''), ValueError),
397 (unicode(' '), ValueError),
398 (unicode(' \t\t '), ValueError),
Guido van Rossum70115041998-06-30 17:02:20 +0000399]
400for s, v in L:
401 for sign in "", "+", "-":
Guido van Rossum27d445f1998-08-10 20:12:34 +0000402 for prefix in "", " ", "\t", " \t\t ":
403 ss = prefix + sign + s
404 vv = v
405 if sign == "-" and v is not ValueError:
406 vv = -v
407 try:
408 if int(ss) != vv:
409 raise TestFailed, "int(%s)" % `ss`
410 except v:
411 pass
412 except ValueError, e:
413 raise TestFailed, "int(%s) raised ValueError: %s" % (`ss`, e)
Guido van Rossum70115041998-06-30 17:02:20 +0000414s = `-1-sys.maxint`
415if int(s)+1 != -sys.maxint:
416 raise TestFailed, "int(%s)" % `s`
417try:
418 int(s[1:])
419except ValueError:
420 pass
421else:
422 raise TestFailed, "int(%s)" % `s[1:]` + " should raise ValueError"
Tim Peters7321ec42001-07-26 20:02:17 +0000423try:
424 int(1e100)
425except OverflowError:
426 pass
427else:
428 raise TestFailed("int(1e100) expected OverflowError")
429try:
430 int(-1e100)
431except OverflowError:
432 pass
433else:
434 raise TestFailed("int(-1e100) expected OverflowError")
435
Guido van Rossum3bead091992-01-27 17:00:37 +0000436
Tim Peters1dad6a82001-06-18 19:21:11 +0000437# SF bug 434186: 0x80000000/2 != 0x80000000>>1.
438# Worked by accident in Windows release build, but failed in debug build.
439# Failed in all Linux builds.
440x = -1-sys.maxint
Guido van Rossum54e54c62001-09-04 19:14:14 +0000441if x >> 1 != x//2:
Tim Peters1dad6a82001-06-18 19:21:11 +0000442 raise TestFailed("x >> 1 != x/2 when x == -1-sys.maxint")
443
Guido van Rossum29d26062001-12-11 04:37:34 +0000444try: int('123\0')
445except ValueError: pass
446else: raise TestFailed("int('123\0') didn't raise exception")
447
Neal Norwitz32f41532001-12-29 00:35:20 +0000448try: int('53', 40)
449except ValueError: pass
450else: raise TestFailed("int('53', 40) didn't raise ValueError")
451
452try: int('1' * 512)
453except ValueError: pass
454else: raise TestFailed("int('1' * 512) didn't raise ValueError")
455
456try: int(1, 12)
457except TypeError: pass
458else: raise TestFailed("int(1, 12) didn't raise TypeError")
459
460if int('0123', 0) != 83:
461 raise TestFailed("int('0123', 0) != 83")
462
Barry Warsawd5430771997-08-22 21:27:03 +0000463print 'isinstance'
464class C:
465 pass
466class D(C):
467 pass
468class E:
469 pass
470c = C()
471d = D()
472e = E()
473if not isinstance(c, C): raise TestFailed, 'isinstance(c, C)'
474if not isinstance(d, C): raise TestFailed, 'isinstance(d, C)'
475if isinstance(e, C): raise TestFailed, 'isinstance(e, C)'
476if isinstance(c, D): raise TestFailed, 'isinstance(c, D)'
477if isinstance('foo', E): raise TestFailed, 'isinstance("Foo", E)'
478try:
479 isinstance(E, 'foo')
480 raise TestFailed, 'isinstance(E, "foo")'
481except TypeError:
482 pass
483
484print 'issubclass'
485if not issubclass(D, C): raise TestFailed, 'issubclass(D, C)'
486if not issubclass(C, C): raise TestFailed, 'issubclass(C, C)'
487if issubclass(C, D): raise TestFailed, 'issubclass(C, D)'
488try:
489 issubclass('foo', E)
490 raise TestFailed, 'issubclass("foo", E)'
491except TypeError:
492 pass
493try:
494 issubclass(E, 'foo')
495 raise TestFailed, 'issubclass(E, "foo")'
496except TypeError:
497 pass
498
Guido van Rossum3bead091992-01-27 17:00:37 +0000499print 'len'
Fred Drake132dce22000-12-12 23:11:42 +0000500if len('123') != 3: raise TestFailed, 'len(\'123\')'
501if len(()) != 0: raise TestFailed, 'len(())'
502if len((1, 2, 3, 4)) != 4: raise TestFailed, 'len((1, 2, 3, 4))'
503if len([1, 2, 3, 4]) != 4: raise TestFailed, 'len([1, 2, 3, 4])'
504if len({}) != 0: raise TestFailed, 'len({})'
505if len({'a':1, 'b': 2}) != 2: raise TestFailed, 'len({\'a\':1, \'b\': 2})'
Guido van Rossum3bead091992-01-27 17:00:37 +0000506
Guido van Rossum06ee2532002-02-26 22:39:23 +0000507print 'list'
508if list([]) != []: raise TestFailed, 'list([])'
509l0_3 = [0, 1, 2, 3]
510l0_3_bis = list(l0_3)
511if l0_3 != l0_3_bis or l0_3 is l0_3_bis: raise TestFailed, 'list([0, 1, 2, 3])'
512if list(()) != []: raise TestFailed, 'list(())'
513if list((0, 1, 2, 3)) != [0, 1, 2, 3]: raise TestFailed, 'list((0, 1, 2, 3))'
514if list('') != []: raise TestFailed, 'list('')'
515if list('spam') != ['s', 'p', 'a', 'm']: raise TestFailed, "list('spam')"
516
Guido van Rossum3bead091992-01-27 17:00:37 +0000517print 'long'
Fred Drake132dce22000-12-12 23:11:42 +0000518if long(314) != 314L: raise TestFailed, 'long(314)'
519if long(3.14) != 3L: raise TestFailed, 'long(3.14)'
520if long(314L) != 314L: raise TestFailed, 'long(314L)'
Guido van Rossumdddf7a61997-03-31 17:13:17 +0000521# Check that conversion from float truncates towards zero
Fred Drake132dce22000-12-12 23:11:42 +0000522if long(-3.14) != -3L: raise TestFailed, 'long(-3.14)'
523if long(3.9) != 3L: raise TestFailed, 'long(3.9)'
524if long(-3.9) != -3L: raise TestFailed, 'long(-3.9)'
525if long(3.5) != 3L: raise TestFailed, 'long(3.5)'
526if long(-3.5) != -3L: raise TestFailed, 'long(-3.5)'
527if long("-3") != -3L: raise TestFailed, 'long("-3")'
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000528if have_unicode:
529 if long(unicode("-3")) != -3L:
530 raise TestFailed, 'long(u"-3")'
Guido van Rossum9e896b32000-04-05 20:11:21 +0000531# Different base:
Fred Drake132dce22000-12-12 23:11:42 +0000532if long("10",16) != 16L: raise TestFailed, 'long("10",16)'
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000533if have_unicode:
534 if long(unicode("10"),16) != 16L:
535 raise TestFailed, 'long(u"10",16)'
Guido van Rossum70115041998-06-30 17:02:20 +0000536# Check conversions from string (same test set as for int(), and then some)
537LL = [
Guido van Rossum27d445f1998-08-10 20:12:34 +0000538 ('1' + '0'*20, 10L**20),
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000539 ('1' + '0'*100, 10L**100)
540]
541if have_unicode:
542 L+=[
543 (unicode('1') + unicode('0')*20, 10L**20),
544 (unicode('1') + unicode('0')*100, 10L**100),
Guido van Rossum70115041998-06-30 17:02:20 +0000545]
546for s, v in L + LL:
547 for sign in "", "+", "-":
Guido van Rossum27d445f1998-08-10 20:12:34 +0000548 for prefix in "", " ", "\t", " \t\t ":
549 ss = prefix + sign + s
550 vv = v
551 if sign == "-" and v is not ValueError:
552 vv = -v
553 try:
554 if long(ss) != long(vv):
Guido van Rossum9e896b32000-04-05 20:11:21 +0000555 raise TestFailed, "long(%s)" % `ss`
Guido van Rossum27d445f1998-08-10 20:12:34 +0000556 except v:
557 pass
558 except ValueError, e:
Guido van Rossum9e896b32000-04-05 20:11:21 +0000559 raise TestFailed, "long(%s) raised ValueError: %s" % (`ss`, e)
Guido van Rossum3bead091992-01-27 17:00:37 +0000560
Guido van Rossum29d26062001-12-11 04:37:34 +0000561try: long('123\0')
562except ValueError: pass
563else: raise TestFailed("long('123\0') didn't raise exception")
564
Neal Norwitz32f41532001-12-29 00:35:20 +0000565try: long('53', 40)
566except ValueError: pass
567else: raise TestFailed("long('53', 40) didn't raise ValueError")
568
569try: long(1, 12)
570except TypeError: pass
571else: raise TestFailed("long(1, 12) didn't raise TypeError")
572
Guido van Rossume65cce51993-11-08 15:05:21 +0000573print 'map'
Fred Drake132dce22000-12-12 23:11:42 +0000574if map(None, 'hello world') != ['h','e','l','l','o',' ','w','o','r','l','d']:
Guido van Rossum27d445f1998-08-10 20:12:34 +0000575 raise TestFailed, 'map(None, \'hello world\')'
Fred Drake132dce22000-12-12 23:11:42 +0000576if map(None, 'abcd', 'efg') != \
Guido van Rossum27d445f1998-08-10 20:12:34 +0000577 [('a', 'e'), ('b', 'f'), ('c', 'g'), ('d', None)]:
578 raise TestFailed, 'map(None, \'abcd\', \'efg\')'
Fred Drake132dce22000-12-12 23:11:42 +0000579if map(None, range(10)) != [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]:
Guido van Rossum27d445f1998-08-10 20:12:34 +0000580 raise TestFailed, 'map(None, range(10))'
Fred Drake132dce22000-12-12 23:11:42 +0000581if map(lambda x: x*x, range(1,4)) != [1, 4, 9]:
Guido van Rossum27d445f1998-08-10 20:12:34 +0000582 raise TestFailed, 'map(lambda x: x*x, range(1,4))'
Guido van Rossum51b1c1c1995-03-04 22:30:54 +0000583try:
Guido van Rossum27d445f1998-08-10 20:12:34 +0000584 from math import sqrt
Guido van Rossum51b1c1c1995-03-04 22:30:54 +0000585except ImportError:
Guido van Rossum27d445f1998-08-10 20:12:34 +0000586 def sqrt(x):
587 return pow(x, 0.5)
Fred Drake132dce22000-12-12 23:11:42 +0000588if map(lambda x: map(sqrt,x), [[16, 4], [81, 9]]) != [[4.0, 2.0], [9.0, 3.0]]:
Guido van Rossum27d445f1998-08-10 20:12:34 +0000589 raise TestFailed, 'map(lambda x: map(sqrt,x), [[16, 4], [81, 9]])'
Fred Drake132dce22000-12-12 23:11:42 +0000590if map(lambda x, y: x+y, [1,3,2], [9,1,4]) != [10, 4, 6]:
Guido van Rossum27d445f1998-08-10 20:12:34 +0000591 raise TestFailed, 'map(lambda x,y: x+y, [1,3,2], [9,1,4])'
Guido van Rossume65cce51993-11-08 15:05:21 +0000592def plus(*v):
Guido van Rossum27d445f1998-08-10 20:12:34 +0000593 accu = 0
594 for i in v: accu = accu + i
595 return accu
Fred Drake132dce22000-12-12 23:11:42 +0000596if map(plus, [1, 3, 7]) != [1, 3, 7]:
Guido van Rossum27d445f1998-08-10 20:12:34 +0000597 raise TestFailed, 'map(plus, [1, 3, 7])'
Fred Drake132dce22000-12-12 23:11:42 +0000598if map(plus, [1, 3, 7], [4, 9, 2]) != [1+4, 3+9, 7+2]:
Guido van Rossum27d445f1998-08-10 20:12:34 +0000599 raise TestFailed, 'map(plus, [1, 3, 7], [4, 9, 2])'
Fred Drake132dce22000-12-12 23:11:42 +0000600if map(plus, [1, 3, 7], [4, 9, 2], [1, 1, 0]) != [1+4+1, 3+9+1, 7+2+0]:
Guido van Rossum27d445f1998-08-10 20:12:34 +0000601 raise TestFailed, 'map(plus, [1, 3, 7], [4, 9, 2], [1, 1, 0])'
Guido van Rossumb6775db1994-08-01 11:34:53 +0000602if map(None, Squares(10)) != [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]:
Guido van Rossum27d445f1998-08-10 20:12:34 +0000603 raise TestFailed, 'map(None, Squares(10))'
Guido van Rossumb6775db1994-08-01 11:34:53 +0000604if map(int, Squares(10)) != [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]:
Guido van Rossum27d445f1998-08-10 20:12:34 +0000605 raise TestFailed, 'map(int, Squares(10))'
Guido van Rossumb6775db1994-08-01 11:34:53 +0000606if map(None, Squares(3), Squares(2)) != [(0,0), (1,1), (4,None)]:
Guido van Rossum27d445f1998-08-10 20:12:34 +0000607 raise TestFailed, 'map(None, Squares(3), Squares(2))'
Guido van Rossum7f9b5e02001-01-22 19:30:07 +0000608if map(max, Squares(3), Squares(2)) != [0, 1, 4]:
Guido van Rossum27d445f1998-08-10 20:12:34 +0000609 raise TestFailed, 'map(max, Squares(3), Squares(2))'
Guido van Rossume65cce51993-11-08 15:05:21 +0000610
Guido van Rossum3bead091992-01-27 17:00:37 +0000611print 'max'
Fred Drake132dce22000-12-12 23:11:42 +0000612if max('123123') != '3': raise TestFailed, 'max(\'123123\')'
613if max(1, 2, 3) != 3: raise TestFailed, 'max(1, 2, 3)'
614if max((1, 2, 3, 1, 2, 3)) != 3: raise TestFailed, 'max((1, 2, 3, 1, 2, 3))'
615if max([1, 2, 3, 1, 2, 3]) != 3: raise TestFailed, 'max([1, 2, 3, 1, 2, 3])'
Guido van Rossum3bead091992-01-27 17:00:37 +0000616#
Fred Drake132dce22000-12-12 23:11:42 +0000617if max(1, 2L, 3.0) != 3.0: raise TestFailed, 'max(1, 2L, 3.0)'
618if max(1L, 2.0, 3) != 3: raise TestFailed, 'max(1L, 2.0, 3)'
619if max(1.0, 2, 3L) != 3L: raise TestFailed, 'max(1.0, 2, 3L)'
Guido van Rossum3bead091992-01-27 17:00:37 +0000620
621print 'min'
Fred Drake132dce22000-12-12 23:11:42 +0000622if min('123123') != '1': raise TestFailed, 'min(\'123123\')'
623if min(1, 2, 3) != 1: raise TestFailed, 'min(1, 2, 3)'
624if min((1, 2, 3, 1, 2, 3)) != 1: raise TestFailed, 'min((1, 2, 3, 1, 2, 3))'
625if min([1, 2, 3, 1, 2, 3]) != 1: raise TestFailed, 'min([1, 2, 3, 1, 2, 3])'
Guido van Rossum3bead091992-01-27 17:00:37 +0000626#
Fred Drake132dce22000-12-12 23:11:42 +0000627if min(1, 2L, 3.0) != 1: raise TestFailed, 'min(1, 2L, 3.0)'
628if min(1L, 2.0, 3) != 1L: raise TestFailed, 'min(1L, 2.0, 3)'
629if min(1.0, 2, 3L) != 1.0: raise TestFailed, 'min(1.0, 2, 3L)'