blob: 249f1fa76fbf3b0bbb6109d70bd12fb178c5dd8f [file] [log] [blame]
Guido van Rossum3bead091992-01-27 17:00:37 +00001# Python test set -- part 4a, built-in functions a-m
2
Guido van Rossumbaf29632002-08-12 15:16:20 +00003import warnings
4warnings.filterwarnings("ignore", "hex../oct.. of negative int",
Guido van Rossum54df53a2002-08-14 18:38:27 +00005 FutureWarning, __name__)
Guido van Rossumbaf29632002-08-12 15:16:20 +00006
Barry Warsaw408b6d32002-07-30 23:27:12 +00007from test.test_support import TestFailed, fcmp, have_unicode, TESTFN, unlink
Guido van Rossum3bead091992-01-27 17:00:37 +00008
Guido van Rossumeecf0351994-12-30 17:17:46 +00009print '__import__'
10__import__('sys')
Barry Warsaw3a9d0612000-09-01 06:53:52 +000011__import__('time')
Guido van Rossumeecf0351994-12-30 17:17:46 +000012__import__('string')
13try: __import__('spamspam')
14except ImportError: pass
15else: raise TestFailed, "__import__('spamspam') should fail"
16
Guido van Rossum3bead091992-01-27 17:00:37 +000017print 'abs'
Fred Drake132dce22000-12-12 23:11:42 +000018if abs(0) != 0: raise TestFailed, 'abs(0)'
19if abs(1234) != 1234: raise TestFailed, 'abs(1234)'
20if abs(-1234) != 1234: raise TestFailed, 'abs(-1234)'
Guido van Rossum3bead091992-01-27 17:00:37 +000021#
Fred Drake132dce22000-12-12 23:11:42 +000022if abs(0.0) != 0.0: raise TestFailed, 'abs(0.0)'
23if abs(3.14) != 3.14: raise TestFailed, 'abs(3.14)'
24if abs(-3.14) != 3.14: raise TestFailed, 'abs(-3.14)'
Guido van Rossum3bead091992-01-27 17:00:37 +000025#
Fred Drake132dce22000-12-12 23:11:42 +000026if abs(0L) != 0L: raise TestFailed, 'abs(0L)'
27if abs(1234L) != 1234L: raise TestFailed, 'abs(1234L)'
28if abs(-1234L) != 1234L: raise TestFailed, 'abs(-1234L)'
Guido van Rossum3bead091992-01-27 17:00:37 +000029
Guido van Rossum29d26062001-12-11 04:37:34 +000030try: abs('a')
31except TypeError: pass
32else: raise TestFailed, 'abs("a")'
33
Guido van Rossum3bead091992-01-27 17:00:37 +000034print 'apply'
35def f0(*args):
Guido van Rossum27d445f1998-08-10 20:12:34 +000036 if args != (): raise TestFailed, 'f0 called with ' + `args`
Guido van Rossum3bead091992-01-27 17:00:37 +000037def f1(a1):
Guido van Rossum27d445f1998-08-10 20:12:34 +000038 if a1 != 1: raise TestFailed, 'f1 called with ' + `a1`
Guido van Rossum3bead091992-01-27 17:00:37 +000039def f2(a1, a2):
Guido van Rossum27d445f1998-08-10 20:12:34 +000040 if a1 != 1 or a2 != 2:
41 raise TestFailed, 'f2 called with ' + `a1, a2`
Guido van Rossum3bead091992-01-27 17:00:37 +000042def f3(a1, a2, a3):
Guido van Rossum27d445f1998-08-10 20:12:34 +000043 if a1 != 1 or a2 != 2 or a3 != 3:
44 raise TestFailed, 'f3 called with ' + `a1, a2, a3`
Guido van Rossum3bead091992-01-27 17:00:37 +000045apply(f0, ())
46apply(f1, (1,))
47apply(f2, (1, 2))
48apply(f3, (1, 2, 3))
49
Fred Drake1a7aab72001-01-04 22:33:02 +000050# A PyCFunction that takes only positional parameters should allow an
51# empty keyword dictionary to pass without a complaint, but raise a
52# TypeError if the dictionary is non-empty.
53apply(id, (1,), {})
54try:
55 apply(id, (1,), {"foo": 1})
56except TypeError:
57 pass
58else:
59 raise TestFailed, 'expected TypeError; no exception raised'
60
Guido van Rossume23b62f1994-11-10 22:25:26 +000061print 'callable'
62if not callable(len):raise TestFailed, 'callable(len)'
63def f(): pass
64if not callable(f): raise TestFailed, 'callable(f)'
65class C:
Guido van Rossum27d445f1998-08-10 20:12:34 +000066 def meth(self): pass
Guido van Rossume23b62f1994-11-10 22:25:26 +000067if not callable(C): raise TestFailed, 'callable(C)'
68x = C()
69if not callable(x.meth): raise TestFailed, 'callable(x.meth)'
70if callable(x): raise TestFailed, 'callable(x)'
71class D(C):
Guido van Rossum27d445f1998-08-10 20:12:34 +000072 def __call__(self): pass
Guido van Rossume23b62f1994-11-10 22:25:26 +000073y = D()
74if not callable(y): raise TestFailed, 'callable(y)'
Jeremy Hylton5ab36612001-01-03 23:53:31 +000075y()
Guido van Rossume23b62f1994-11-10 22:25:26 +000076
Guido van Rossum3bead091992-01-27 17:00:37 +000077print 'chr'
Fred Drake132dce22000-12-12 23:11:42 +000078if chr(32) != ' ': raise TestFailed, 'chr(32)'
79if chr(65) != 'A': raise TestFailed, 'chr(65)'
80if chr(97) != 'a': raise TestFailed, 'chr(97)'
Guido van Rossum3bead091992-01-27 17:00:37 +000081
Neil Schemenauer38f02232001-01-04 01:33:41 +000082# cmp
Guido van Rossum85f18201992-11-27 22:53:50 +000083print 'cmp'
Fred Drake132dce22000-12-12 23:11:42 +000084if cmp(-1, 1) != -1: raise TestFailed, 'cmp(-1, 1)'
85if cmp(1, -1) != 1: raise TestFailed, 'cmp(1, -1)'
86if cmp(1, 1) != 0: raise TestFailed, 'cmp(1, 1)'
Jeremy Hylton4a3dd2d2000-04-14 19:13:24 +000087# verify that circular objects are handled
88a = []; a.append(a)
89b = []; b.append(b)
90from UserList import UserList
91c = UserList(); c.append(c)
92if cmp(a, b) != 0: raise TestFailed, "cmp(%s, %s)" % (a, b)
93if cmp(b, c) != 0: raise TestFailed, "cmp(%s, %s)" % (b, c)
94if cmp(c, a) != 0: raise TestFailed, "cmp(%s, %s)" % (c, a)
95if cmp(a, c) != 0: raise TestFailed, "cmp(%s, %s)" % (a, c)
Vladimir Marangozovd57f5cf2000-07-14 04:32:09 +000096# okay, now break the cycles
97a.pop(); b.pop(); c.pop()
Guido van Rossum85f18201992-11-27 22:53:50 +000098
99print 'coerce'
Guido van Rossum35fb82a1993-01-26 13:04:43 +0000100if fcmp(coerce(1, 1.1), (1.0, 1.1)): raise TestFailed, 'coerce(1, 1.1)'
Fred Drake132dce22000-12-12 23:11:42 +0000101if coerce(1, 1L) != (1L, 1L): raise TestFailed, 'coerce(1, 1L)'
Guido van Rossum35fb82a1993-01-26 13:04:43 +0000102if fcmp(coerce(1L, 1.1), (1.0, 1.1)): raise TestFailed, 'coerce(1L, 1.1)'
Guido van Rossum85f18201992-11-27 22:53:50 +0000103
Guido van Rossume23b62f1994-11-10 22:25:26 +0000104print 'compile'
105compile('print 1\n', '', 'exec')
106
Guido van Rossumdddf7a61997-03-31 17:13:17 +0000107print 'complex'
Raymond Hettinger478d47a2002-06-06 15:45:38 +0000108class OS:
Tim Petersc411dba2002-07-16 21:35:23 +0000109 def __complex__(self): return 1+10j
Raymond Hettinger478d47a2002-06-06 15:45:38 +0000110class NS(object):
Tim Petersc411dba2002-07-16 21:35:23 +0000111 def __complex__(self): return 1+10j
Raymond Hettinger478d47a2002-06-06 15:45:38 +0000112if complex(OS()) != 1+10j: raise TestFailed, '__complex__ in old style class'
113if complex(NS()) != 1+10j: raise TestFailed, '__complex__ in new style class'
114if complex("1+10j") != 1+10j: raise TestFailed, 'complex("1+10j")'
115if complex(10) != 10+0j: raise TestFailed, 'complex(10)'
116if complex(10.0) != 10+0j: raise TestFailed, 'complex(10.0)'
117if complex(10L) != 10+0j: raise TestFailed, 'complex(10L)'
118if complex(10+0j) != 10+0j: raise TestFailed, 'complex(10+0j)'
Fred Drake132dce22000-12-12 23:11:42 +0000119if complex(1,10) != 1+10j: raise TestFailed, 'complex(1,10)'
120if complex(1,10L) != 1+10j: raise TestFailed, 'complex(1,10L)'
121if complex(1,10.0) != 1+10j: raise TestFailed, 'complex(1,10.0)'
122if complex(1L,10) != 1+10j: raise TestFailed, 'complex(1L,10)'
123if complex(1L,10L) != 1+10j: raise TestFailed, 'complex(1L,10L)'
124if complex(1L,10.0) != 1+10j: raise TestFailed, 'complex(1L,10.0)'
125if complex(1.0,10) != 1+10j: raise TestFailed, 'complex(1.0,10)'
126if complex(1.0,10L) != 1+10j: raise TestFailed, 'complex(1.0,10L)'
127if complex(1.0,10.0) != 1+10j: raise TestFailed, 'complex(1.0,10.0)'
128if complex(3.14+0j) != 3.14+0j: raise TestFailed, 'complex(3.14)'
129if complex(3.14) != 3.14+0j: raise TestFailed, 'complex(3.14)'
130if complex(314) != 314.0+0j: raise TestFailed, 'complex(314)'
131if complex(314L) != 314.0+0j: raise TestFailed, 'complex(314L)'
132if complex(3.14+0j, 0j) != 3.14+0j: raise TestFailed, 'complex(3.14, 0j)'
133if complex(3.14, 0.0) != 3.14+0j: raise TestFailed, 'complex(3.14, 0.0)'
134if complex(314, 0) != 314.0+0j: raise TestFailed, 'complex(314, 0)'
135if complex(314L, 0L) != 314.0+0j: raise TestFailed, 'complex(314L, 0L)'
136if complex(0j, 3.14j) != -3.14+0j: raise TestFailed, 'complex(0j, 3.14j)'
137if complex(0.0, 3.14j) != -3.14+0j: raise TestFailed, 'complex(0.0, 3.14j)'
138if complex(0j, 3.14) != 3.14j: raise TestFailed, 'complex(0j, 3.14)'
139if complex(0.0, 3.14) != 3.14j: raise TestFailed, 'complex(0.0, 3.14)'
Fred Drake526c7a02001-12-13 19:52:22 +0000140if complex("1") != 1+0j: raise TestFailed, 'complex("1")'
141if complex("1j") != 1j: raise TestFailed, 'complex("1j")'
Tim Peters077f2712002-04-14 22:04:03 +0000142
Raymond Hettinger604cd6a2002-08-29 14:22:51 +0000143c = 3.14 + 1j
144if complex(c) is not c: raise TestFailed, 'complex(3.14+1j) changed identity'
145del c
146
Fred Drake526c7a02001-12-13 19:52:22 +0000147try: complex("1", "1")
148except TypeError: pass
149else: raise TestFailed, 'complex("1", "1")'
Tim Peters077f2712002-04-14 22:04:03 +0000150
Fred Drake526c7a02001-12-13 19:52:22 +0000151try: complex(1, "1")
152except TypeError: pass
153else: raise TestFailed, 'complex(1, "1")'
Tim Peters077f2712002-04-14 22:04:03 +0000154
Fred Drake132dce22000-12-12 23:11:42 +0000155if complex(" 3.14+J ") != 3.14+1j: raise TestFailed, 'complex(" 3.14+J )"'
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000156if have_unicode:
157 if complex(unicode(" 3.14+J ")) != 3.14+1j:
158 raise TestFailed, 'complex(u" 3.14+J )"'
Tim Peters077f2712002-04-14 22:04:03 +0000159
160# SF bug 543840: complex(string) accepts strings with \0
161# Fixed in 2.3.
162try:
163 complex('1+1j\0j')
164except ValueError:
165 pass
166else:
167 raise TestFailed("complex('1+1j\0j') should have raised ValueError")
168
Guido van Rossumdddf7a61997-03-31 17:13:17 +0000169class Z:
170 def __complex__(self): return 3.14j
171z = Z()
Fred Drake132dce22000-12-12 23:11:42 +0000172if complex(z) != 3.14j: raise TestFailed, 'complex(classinstance)'
Guido van Rossumdddf7a61997-03-31 17:13:17 +0000173
Guido van Rossume23b62f1994-11-10 22:25:26 +0000174print 'delattr'
175import sys
176sys.spam = 1
177delattr(sys, 'spam')
178
Guido van Rossum3bead091992-01-27 17:00:37 +0000179print 'dir'
180x = 1
181if 'x' not in dir(): raise TestFailed, 'dir()'
182import sys
183if 'modules' not in dir(sys): raise TestFailed, 'dir(sys)'
184
185print 'divmod'
Fred Drake132dce22000-12-12 23:11:42 +0000186if divmod(12, 7) != (1, 5): raise TestFailed, 'divmod(12, 7)'
187if divmod(-12, 7) != (-2, 2): raise TestFailed, 'divmod(-12, 7)'
188if divmod(12, -7) != (-2, -2): raise TestFailed, 'divmod(12, -7)'
189if divmod(-12, -7) != (1, -5): raise TestFailed, 'divmod(-12, -7)'
Guido van Rossum3bead091992-01-27 17:00:37 +0000190#
Fred Drake132dce22000-12-12 23:11:42 +0000191if divmod(12L, 7L) != (1L, 5L): raise TestFailed, 'divmod(12L, 7L)'
192if divmod(-12L, 7L) != (-2L, 2L): raise TestFailed, 'divmod(-12L, 7L)'
193if divmod(12L, -7L) != (-2L, -2L): raise TestFailed, 'divmod(12L, -7L)'
194if divmod(-12L, -7L) != (1L, -5L): raise TestFailed, 'divmod(-12L, -7L)'
Guido van Rossum3bead091992-01-27 17:00:37 +0000195#
Fred Drake132dce22000-12-12 23:11:42 +0000196if divmod(12, 7L) != (1, 5L): raise TestFailed, 'divmod(12, 7L)'
197if divmod(-12, 7L) != (-2, 2L): raise TestFailed, 'divmod(-12, 7L)'
198if divmod(12L, -7) != (-2L, -2): raise TestFailed, 'divmod(12L, -7)'
199if divmod(-12L, -7) != (1L, -5): raise TestFailed, 'divmod(-12L, -7)'
Guido van Rossum3bead091992-01-27 17:00:37 +0000200#
Guido van Rossum35fb82a1993-01-26 13:04:43 +0000201if fcmp(divmod(3.25, 1.0), (3.0, 0.25)):
Guido van Rossum27d445f1998-08-10 20:12:34 +0000202 raise TestFailed, 'divmod(3.25, 1.0)'
Guido van Rossum35fb82a1993-01-26 13:04:43 +0000203if fcmp(divmod(-3.25, 1.0), (-4.0, 0.75)):
Guido van Rossum27d445f1998-08-10 20:12:34 +0000204 raise TestFailed, 'divmod(-3.25, 1.0)'
Guido van Rossum35fb82a1993-01-26 13:04:43 +0000205if fcmp(divmod(3.25, -1.0), (-4.0, -0.75)):
Guido van Rossum27d445f1998-08-10 20:12:34 +0000206 raise TestFailed, 'divmod(3.25, -1.0)'
Guido van Rossum35fb82a1993-01-26 13:04:43 +0000207if fcmp(divmod(-3.25, -1.0), (3.0, -0.25)):
Guido van Rossum27d445f1998-08-10 20:12:34 +0000208 raise TestFailed, 'divmod(-3.25, -1.0)'
Guido van Rossum3bead091992-01-27 17:00:37 +0000209
210print 'eval'
Fred Drake132dce22000-12-12 23:11:42 +0000211if eval('1+1') != 2: raise TestFailed, 'eval(\'1+1\')'
212if eval(' 1+1\n') != 2: raise TestFailed, 'eval(\' 1+1\\n\')'
Guido van Rossum824de251995-01-02 18:38:42 +0000213globals = {'a': 1, 'b': 2}
214locals = {'b': 200, 'c': 300}
Fred Drake132dce22000-12-12 23:11:42 +0000215if eval('a', globals) != 1:
Jeremy Hyltoncf29bb22000-08-23 21:11:05 +0000216 raise TestFailed, "eval(1) == %s" % eval('a', globals)
Fred Drake132dce22000-12-12 23:11:42 +0000217if eval('a', globals, locals) != 1:
Jeremy Hyltoncf29bb22000-08-23 21:11:05 +0000218 raise TestFailed, "eval(2)"
Fred Drake132dce22000-12-12 23:11:42 +0000219if eval('b', globals, locals) != 200:
Jeremy Hyltoncf29bb22000-08-23 21:11:05 +0000220 raise TestFailed, "eval(3)"
Fred Drake132dce22000-12-12 23:11:42 +0000221if eval('c', globals, locals) != 300:
Jeremy Hyltoncf29bb22000-08-23 21:11:05 +0000222 raise TestFailed, "eval(4)"
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000223if have_unicode:
224 if eval(unicode('1+1')) != 2: raise TestFailed, 'eval(u\'1+1\')'
225 if eval(unicode(' 1+1\n')) != 2: raise TestFailed, 'eval(u\' 1+1\\n\')'
Marc-André Lemburgd1ba4432000-09-19 21:04:18 +0000226globals = {'a': 1, 'b': 2}
227locals = {'b': 200, 'c': 300}
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000228if have_unicode:
229 if eval(unicode('a'), globals) != 1:
230 raise TestFailed, "eval(1) == %s" % eval(unicode('a'), globals)
231 if eval(unicode('a'), globals, locals) != 1:
232 raise TestFailed, "eval(2)"
233 if eval(unicode('b'), globals, locals) != 200:
234 raise TestFailed, "eval(3)"
235 if eval(unicode('c'), globals, locals) != 300:
236 raise TestFailed, "eval(4)"
Guido van Rossum3bead091992-01-27 17:00:37 +0000237
Guido van Rossum85f18201992-11-27 22:53:50 +0000238print 'execfile'
239z = 0
240f = open(TESTFN, 'w')
241f.write('z = z+1\n')
242f.write('z = z*2\n')
243f.close()
244execfile(TESTFN)
Fred Drake132dce22000-12-12 23:11:42 +0000245if z != 2: raise TestFailed, "execfile(1)"
Guido van Rossum824de251995-01-02 18:38:42 +0000246globals['z'] = 0
247execfile(TESTFN, globals)
Fred Drake132dce22000-12-12 23:11:42 +0000248if globals['z'] != 2: raise TestFailed, "execfile(1)"
Guido van Rossum824de251995-01-02 18:38:42 +0000249locals['z'] = 0
250execfile(TESTFN, globals, locals)
Fred Drake132dce22000-12-12 23:11:42 +0000251if locals['z'] != 2: raise TestFailed, "execfile(1)"
Guido van Rossum85f18201992-11-27 22:53:50 +0000252unlink(TESTFN)
Guido van Rossum3bead091992-01-27 17:00:37 +0000253
Guido van Rossume65cce51993-11-08 15:05:21 +0000254print 'filter'
Fred Drake132dce22000-12-12 23:11:42 +0000255if filter(lambda c: 'a' <= c <= 'z', 'Hello World') != 'elloorld':
Guido van Rossum27d445f1998-08-10 20:12:34 +0000256 raise TestFailed, 'filter (filter a string)'
Fred Drake132dce22000-12-12 23:11:42 +0000257if filter(None, [1, 'hello', [], [3], '', None, 9, 0]) != [1, 'hello', [3], 9]:
Guido van Rossum27d445f1998-08-10 20:12:34 +0000258 raise TestFailed, 'filter (remove false values)'
Fred Drake132dce22000-12-12 23:11:42 +0000259if filter(lambda x: x > 0, [1, -3, 9, 0, 2]) != [1, 9, 2]:
Guido van Rossum27d445f1998-08-10 20:12:34 +0000260 raise TestFailed, 'filter (keep positives)'
Guido van Rossumb6775db1994-08-01 11:34:53 +0000261class Squares:
Guido van Rossum27d445f1998-08-10 20:12:34 +0000262 def __init__(self, max):
263 self.max = max
264 self.sofar = []
265 def __len__(self): return len(self.sofar)
266 def __getitem__(self, i):
267 if not 0 <= i < self.max: raise IndexError
268 n = len(self.sofar)
269 while n <= i:
270 self.sofar.append(n*n)
271 n = n+1
272 return self.sofar[i]
Guido van Rossumb6775db1994-08-01 11:34:53 +0000273if filter(None, Squares(10)) != [1, 4, 9, 16, 25, 36, 49, 64, 81]:
Guido van Rossum27d445f1998-08-10 20:12:34 +0000274 raise TestFailed, 'filter(None, Squares(10))'
Guido van Rossumb6775db1994-08-01 11:34:53 +0000275if filter(lambda x: x%2, Squares(10)) != [1, 9, 25, 49, 81]:
Guido van Rossum27d445f1998-08-10 20:12:34 +0000276 raise TestFailed, 'filter(oddp, Squares(10))'
Barry Warsawab11f601999-01-28 19:44:06 +0000277class StrSquares:
278 def __init__(self, max):
279 self.max = max
280 self.sofar = []
281 def __len__(self):
282 return len(self.sofar)
283 def __getitem__(self, i):
284 if not 0 <= i < self.max:
285 raise IndexError
286 n = len(self.sofar)
287 while n <= i:
288 self.sofar.append(str(n*n))
289 n = n+1
290 return self.sofar[i]
291def identity(item):
292 return 1
293filter(identity, Squares(5))
Guido van Rossume65cce51993-11-08 15:05:21 +0000294
Guido van Rossum3bead091992-01-27 17:00:37 +0000295print 'float'
Fred Drake132dce22000-12-12 23:11:42 +0000296if float(3.14) != 3.14: raise TestFailed, 'float(3.14)'
297if float(314) != 314.0: raise TestFailed, 'float(314)'
298if float(314L) != 314.0: raise TestFailed, 'float(314L)'
299if float(" 3.14 ") != 3.14: raise TestFailed, 'float(" 3.14 ")'
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000300if have_unicode:
301 if float(unicode(" 3.14 ")) != 3.14:
302 raise TestFailed, 'float(u" 3.14 ")'
Martin v. Löwis10d72552001-08-17 22:08:34 +0000303 if float(unicode(" \u0663.\u0661\u0664 ",'raw-unicode-escape')) != 3.14:
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000304 raise TestFailed, 'float(u" \u0663.\u0661\u0664 ")'
Guido van Rossum3bead091992-01-27 17:00:37 +0000305
306print 'getattr'
307import sys
308if getattr(sys, 'stdout') is not sys.stdout: raise TestFailed, 'getattr'
Jeremy Hyltonb7a77312001-07-30 22:49:11 +0000309try:
310 getattr(sys, 1)
311except TypeError:
312 pass
313else:
314 raise TestFailed, "getattr(sys, 1) should raise an exception"
315try:
316 getattr(sys, 1, "foo")
317except TypeError:
318 pass
319else:
320 raise TestFailed, 'getattr(sys, 1, "foo") should raise an exception'
Guido van Rossum3bead091992-01-27 17:00:37 +0000321
Guido van Rossume23b62f1994-11-10 22:25:26 +0000322print 'hasattr'
323import sys
324if not hasattr(sys, 'stdout'): raise TestFailed, 'hasattr'
Jeremy Hyltonb7a77312001-07-30 22:49:11 +0000325try:
326 hasattr(sys, 1)
327except TypeError:
328 pass
329else:
330 raise TestFailed, "hasattr(sys, 1) should raise an exception"
Guido van Rossume23b62f1994-11-10 22:25:26 +0000331
332print 'hash'
333hash(None)
334if not hash(1) == hash(1L) == hash(1.0): raise TestFailed, 'numeric hash()'
335hash('spam')
336hash((0,1,2,3))
337def f(): pass
Guido van Rossum0c6614c2001-01-18 23:36:14 +0000338try: hash([])
339except TypeError: pass
340else: raise TestFailed, "hash([]) should raise an exception"
341try: hash({})
342except TypeError: pass
343else: raise TestFailed, "hash({}) should raise an exception"
Guido van Rossume23b62f1994-11-10 22:25:26 +0000344
Guido van Rossum3bead091992-01-27 17:00:37 +0000345print 'hex'
346if hex(16) != '0x10': raise TestFailed, 'hex(16)'
347if hex(16L) != '0x10L': raise TestFailed, 'hex(16L)'
Guido van Rossumc1c96d11997-05-14 21:37:23 +0000348if len(hex(-1)) != len(hex(sys.maxint)): raise TestFailed, 'len(hex(-1))'
349if hex(-16) not in ('0xfffffff0', '0xfffffffffffffff0'):
350 raise TestFailed, 'hex(-16)'
Guido van Rossum3bead091992-01-27 17:00:37 +0000351if hex(-16L) != '-0x10L': raise TestFailed, 'hex(-16L)'
352
Guido van Rossume23b62f1994-11-10 22:25:26 +0000353print 'id'
354id(None)
355id(1)
356id(1L)
357id(1.0)
358id('spam')
359id((0,1,2,3))
360id([0,1,2,3])
361id({'spam': 1, 'eggs': 2, 'ham': 3})
362
Guido van Rossum3bead091992-01-27 17:00:37 +0000363# Test input() later, together with raw_input
364
365print 'int'
Fred Drake132dce22000-12-12 23:11:42 +0000366if int(314) != 314: raise TestFailed, 'int(314)'
367if int(3.14) != 3: raise TestFailed, 'int(3.14)'
368if int(314L) != 314: raise TestFailed, 'int(314L)'
Guido van Rossumdddf7a61997-03-31 17:13:17 +0000369# Check that conversion from float truncates towards zero
Fred Drake132dce22000-12-12 23:11:42 +0000370if int(-3.14) != -3: raise TestFailed, 'int(-3.14)'
371if int(3.9) != 3: raise TestFailed, 'int(3.9)'
372if int(-3.9) != -3: raise TestFailed, 'int(-3.9)'
373if int(3.5) != 3: raise TestFailed, 'int(3.5)'
374if int(-3.5) != -3: raise TestFailed, 'int(-3.5)'
Guido van Rossum9e896b32000-04-05 20:11:21 +0000375# Different base:
Fred Drake132dce22000-12-12 23:11:42 +0000376if int("10",16) != 16L: raise TestFailed, 'int("10",16)'
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000377if have_unicode:
378 if int(unicode("10"),16) != 16L:
379 raise TestFailed, 'int(u"10",16)'
Jeremy Hyltona05e2932000-06-28 14:48:01 +0000380# Test conversion from strings and various anomalies
Guido van Rossum70115041998-06-30 17:02:20 +0000381L = [
Guido van Rossum27d445f1998-08-10 20:12:34 +0000382 ('0', 0),
383 ('1', 1),
384 ('9', 9),
385 ('10', 10),
386 ('99', 99),
387 ('100', 100),
388 ('314', 314),
389 (' 314', 314),
390 ('314 ', 314),
391 (' \t\t 314 \t\t ', 314),
392 (`sys.maxint`, sys.maxint),
Guido van Rossum9e896b32000-04-05 20:11:21 +0000393 (' 1x', ValueError),
394 (' 1 ', 1),
395 (' 1\02 ', ValueError),
Guido van Rossum27d445f1998-08-10 20:12:34 +0000396 ('', ValueError),
397 (' ', ValueError),
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000398 (' \t\t ', ValueError)
399]
400if have_unicode:
401 L += [
402 (unicode('0'), 0),
403 (unicode('1'), 1),
404 (unicode('9'), 9),
405 (unicode('10'), 10),
406 (unicode('99'), 99),
407 (unicode('100'), 100),
408 (unicode('314'), 314),
409 (unicode(' 314'), 314),
Martin v. Löwis10d72552001-08-17 22:08:34 +0000410 (unicode('\u0663\u0661\u0664 ','raw-unicode-escape'), 314),
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000411 (unicode(' \t\t 314 \t\t '), 314),
412 (unicode(' 1x'), ValueError),
413 (unicode(' 1 '), 1),
414 (unicode(' 1\02 '), ValueError),
415 (unicode(''), ValueError),
416 (unicode(' '), ValueError),
417 (unicode(' \t\t '), ValueError),
Guido van Rossum70115041998-06-30 17:02:20 +0000418]
419for s, v in L:
420 for sign in "", "+", "-":
Guido van Rossum27d445f1998-08-10 20:12:34 +0000421 for prefix in "", " ", "\t", " \t\t ":
422 ss = prefix + sign + s
423 vv = v
424 if sign == "-" and v is not ValueError:
425 vv = -v
426 try:
427 if int(ss) != vv:
428 raise TestFailed, "int(%s)" % `ss`
429 except v:
430 pass
431 except ValueError, e:
432 raise TestFailed, "int(%s) raised ValueError: %s" % (`ss`, e)
Guido van Rossum70115041998-06-30 17:02:20 +0000433s = `-1-sys.maxint`
434if int(s)+1 != -sys.maxint:
435 raise TestFailed, "int(%s)" % `s`
436try:
437 int(s[1:])
Walter Dörwald07e14762002-11-06 16:15:14 +0000438except:
439 raise TestFailed, "int(%s)" % `s[1:]` + " should return long"
Tim Peters7321ec42001-07-26 20:02:17 +0000440try:
441 int(1e100)
442except OverflowError:
443 pass
444else:
445 raise TestFailed("int(1e100) expected OverflowError")
446try:
447 int(-1e100)
448except OverflowError:
449 pass
450else:
451 raise TestFailed("int(-1e100) expected OverflowError")
452
Guido van Rossum3bead091992-01-27 17:00:37 +0000453
Tim Peters1dad6a82001-06-18 19:21:11 +0000454# SF bug 434186: 0x80000000/2 != 0x80000000>>1.
455# Worked by accident in Windows release build, but failed in debug build.
456# Failed in all Linux builds.
457x = -1-sys.maxint
Guido van Rossum54e54c62001-09-04 19:14:14 +0000458if x >> 1 != x//2:
Tim Peters1dad6a82001-06-18 19:21:11 +0000459 raise TestFailed("x >> 1 != x/2 when x == -1-sys.maxint")
460
Guido van Rossum29d26062001-12-11 04:37:34 +0000461try: int('123\0')
462except ValueError: pass
463else: raise TestFailed("int('123\0') didn't raise exception")
464
Neal Norwitz32f41532001-12-29 00:35:20 +0000465try: int('53', 40)
466except ValueError: pass
467else: raise TestFailed("int('53', 40) didn't raise ValueError")
468
Walter Dörwald07e14762002-11-06 16:15:14 +0000469try: int('1' * 600)
470except: raise TestFailed("int('1' * 600) didn't return long")
471
472if have_unicode:
Tim Peters3de75262002-11-09 05:26:15 +0000473 try: int(unichr(0x661) * 600)
474 except: raise TestFailed("int('\\u0661' * 600) didn't return long")
Neal Norwitz32f41532001-12-29 00:35:20 +0000475
476try: int(1, 12)
477except TypeError: pass
478else: raise TestFailed("int(1, 12) didn't raise TypeError")
479
480if int('0123', 0) != 83:
481 raise TestFailed("int('0123', 0) != 83")
482
Barry Warsawd5430771997-08-22 21:27:03 +0000483print 'isinstance'
484class C:
485 pass
486class D(C):
487 pass
488class E:
489 pass
490c = C()
491d = D()
492e = E()
493if not isinstance(c, C): raise TestFailed, 'isinstance(c, C)'
494if not isinstance(d, C): raise TestFailed, 'isinstance(d, C)'
495if isinstance(e, C): raise TestFailed, 'isinstance(e, C)'
496if isinstance(c, D): raise TestFailed, 'isinstance(c, D)'
497if isinstance('foo', E): raise TestFailed, 'isinstance("Foo", E)'
498try:
499 isinstance(E, 'foo')
500 raise TestFailed, 'isinstance(E, "foo")'
501except TypeError:
502 pass
503
504print 'issubclass'
505if not issubclass(D, C): raise TestFailed, 'issubclass(D, C)'
506if not issubclass(C, C): raise TestFailed, 'issubclass(C, C)'
507if issubclass(C, D): raise TestFailed, 'issubclass(C, D)'
508try:
509 issubclass('foo', E)
510 raise TestFailed, 'issubclass("foo", E)'
511except TypeError:
512 pass
513try:
514 issubclass(E, 'foo')
515 raise TestFailed, 'issubclass(E, "foo")'
516except TypeError:
517 pass
518
Guido van Rossum3bead091992-01-27 17:00:37 +0000519print 'len'
Fred Drake132dce22000-12-12 23:11:42 +0000520if len('123') != 3: raise TestFailed, 'len(\'123\')'
521if len(()) != 0: raise TestFailed, 'len(())'
522if len((1, 2, 3, 4)) != 4: raise TestFailed, 'len((1, 2, 3, 4))'
523if len([1, 2, 3, 4]) != 4: raise TestFailed, 'len([1, 2, 3, 4])'
524if len({}) != 0: raise TestFailed, 'len({})'
525if len({'a':1, 'b': 2}) != 2: raise TestFailed, 'len({\'a\':1, \'b\': 2})'
Guido van Rossum3bead091992-01-27 17:00:37 +0000526
Guido van Rossum06ee2532002-02-26 22:39:23 +0000527print 'list'
528if list([]) != []: raise TestFailed, 'list([])'
529l0_3 = [0, 1, 2, 3]
530l0_3_bis = list(l0_3)
531if l0_3 != l0_3_bis or l0_3 is l0_3_bis: raise TestFailed, 'list([0, 1, 2, 3])'
532if list(()) != []: raise TestFailed, 'list(())'
533if list((0, 1, 2, 3)) != [0, 1, 2, 3]: raise TestFailed, 'list((0, 1, 2, 3))'
534if list('') != []: raise TestFailed, 'list('')'
535if list('spam') != ['s', 'p', 'a', 'm']: raise TestFailed, "list('spam')"
536
Guido van Rossumc8060a62002-09-11 18:32:30 +0000537if sys.maxint == 0x7fffffff:
538 # This test can currently only work on 32-bit machines.
539 # XXX If/when PySequence_Length() returns a ssize_t, it should be
540 # XXX re-enabled.
541 try:
Tim Peters3de75262002-11-09 05:26:15 +0000542 # Verify clearing of bug #556025.
543 # This assumes that the max data size (sys.maxint) == max
544 # address size this also assumes that the address size is at
545 # least 4 bytes with 8 byte addresses, the bug is not well
546 # tested
547 #
548 # Note: This test is expected to SEGV under Cygwin 1.3.12 or
549 # earlier due to a newlib bug. See the following mailing list
550 # thread for the details:
Guido van Rossumc8060a62002-09-11 18:32:30 +0000551
Tim Peters3de75262002-11-09 05:26:15 +0000552 # http://sources.redhat.com/ml/newlib/2002/msg00369.html
Tim Peterscfac1d42002-10-08 21:01:07 +0000553 list(xrange(sys.maxint // 2))
Guido van Rossumc8060a62002-09-11 18:32:30 +0000554 except MemoryError:
555 pass
556 else:
557 raise TestFailed, 'list(xrange(sys.maxint / 4))'
Neal Norwitzd4e5be52002-05-22 23:19:17 +0000558
Guido van Rossum3bead091992-01-27 17:00:37 +0000559print 'long'
Fred Drake132dce22000-12-12 23:11:42 +0000560if long(314) != 314L: raise TestFailed, 'long(314)'
561if long(3.14) != 3L: raise TestFailed, 'long(3.14)'
562if long(314L) != 314L: raise TestFailed, 'long(314L)'
Guido van Rossumdddf7a61997-03-31 17:13:17 +0000563# Check that conversion from float truncates towards zero
Fred Drake132dce22000-12-12 23:11:42 +0000564if long(-3.14) != -3L: raise TestFailed, 'long(-3.14)'
565if long(3.9) != 3L: raise TestFailed, 'long(3.9)'
566if long(-3.9) != -3L: raise TestFailed, 'long(-3.9)'
567if long(3.5) != 3L: raise TestFailed, 'long(3.5)'
568if long(-3.5) != -3L: raise TestFailed, 'long(-3.5)'
569if long("-3") != -3L: raise TestFailed, 'long("-3")'
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000570if have_unicode:
571 if long(unicode("-3")) != -3L:
572 raise TestFailed, 'long(u"-3")'
Guido van Rossum9e896b32000-04-05 20:11:21 +0000573# Different base:
Fred Drake132dce22000-12-12 23:11:42 +0000574if long("10",16) != 16L: raise TestFailed, 'long("10",16)'
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000575if have_unicode:
576 if long(unicode("10"),16) != 16L:
577 raise TestFailed, 'long(u"10",16)'
Guido van Rossum70115041998-06-30 17:02:20 +0000578# Check conversions from string (same test set as for int(), and then some)
579LL = [
Guido van Rossum27d445f1998-08-10 20:12:34 +0000580 ('1' + '0'*20, 10L**20),
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000581 ('1' + '0'*100, 10L**100)
582]
583if have_unicode:
584 L+=[
585 (unicode('1') + unicode('0')*20, 10L**20),
586 (unicode('1') + unicode('0')*100, 10L**100),
Guido van Rossum70115041998-06-30 17:02:20 +0000587]
588for s, v in L + LL:
589 for sign in "", "+", "-":
Guido van Rossum27d445f1998-08-10 20:12:34 +0000590 for prefix in "", " ", "\t", " \t\t ":
591 ss = prefix + sign + s
592 vv = v
593 if sign == "-" and v is not ValueError:
594 vv = -v
595 try:
596 if long(ss) != long(vv):
Guido van Rossum9e896b32000-04-05 20:11:21 +0000597 raise TestFailed, "long(%s)" % `ss`
Guido van Rossum27d445f1998-08-10 20:12:34 +0000598 except v:
599 pass
600 except ValueError, e:
Guido van Rossum9e896b32000-04-05 20:11:21 +0000601 raise TestFailed, "long(%s) raised ValueError: %s" % (`ss`, e)
Guido van Rossum3bead091992-01-27 17:00:37 +0000602
Guido van Rossum29d26062001-12-11 04:37:34 +0000603try: long('123\0')
604except ValueError: pass
605else: raise TestFailed("long('123\0') didn't raise exception")
606
Neal Norwitz32f41532001-12-29 00:35:20 +0000607try: long('53', 40)
608except ValueError: pass
609else: raise TestFailed("long('53', 40) didn't raise ValueError")
610
611try: long(1, 12)
612except TypeError: pass
613else: raise TestFailed("long(1, 12) didn't raise TypeError")
614
Guido van Rossume65cce51993-11-08 15:05:21 +0000615print 'map'
Fred Drake132dce22000-12-12 23:11:42 +0000616if map(None, 'hello world') != ['h','e','l','l','o',' ','w','o','r','l','d']:
Guido van Rossum27d445f1998-08-10 20:12:34 +0000617 raise TestFailed, 'map(None, \'hello world\')'
Fred Drake132dce22000-12-12 23:11:42 +0000618if map(None, 'abcd', 'efg') != \
Guido van Rossum27d445f1998-08-10 20:12:34 +0000619 [('a', 'e'), ('b', 'f'), ('c', 'g'), ('d', None)]:
620 raise TestFailed, 'map(None, \'abcd\', \'efg\')'
Fred Drake132dce22000-12-12 23:11:42 +0000621if map(None, range(10)) != [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]:
Guido van Rossum27d445f1998-08-10 20:12:34 +0000622 raise TestFailed, 'map(None, range(10))'
Fred Drake132dce22000-12-12 23:11:42 +0000623if map(lambda x: x*x, range(1,4)) != [1, 4, 9]:
Guido van Rossum27d445f1998-08-10 20:12:34 +0000624 raise TestFailed, 'map(lambda x: x*x, range(1,4))'
Guido van Rossum51b1c1c1995-03-04 22:30:54 +0000625try:
Guido van Rossum27d445f1998-08-10 20:12:34 +0000626 from math import sqrt
Guido van Rossum51b1c1c1995-03-04 22:30:54 +0000627except ImportError:
Guido van Rossum27d445f1998-08-10 20:12:34 +0000628 def sqrt(x):
629 return pow(x, 0.5)
Fred Drake132dce22000-12-12 23:11:42 +0000630if 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 +0000631 raise TestFailed, 'map(lambda x: map(sqrt,x), [[16, 4], [81, 9]])'
Fred Drake132dce22000-12-12 23:11:42 +0000632if map(lambda x, y: x+y, [1,3,2], [9,1,4]) != [10, 4, 6]:
Guido van Rossum27d445f1998-08-10 20:12:34 +0000633 raise TestFailed, 'map(lambda x,y: x+y, [1,3,2], [9,1,4])'
Guido van Rossume65cce51993-11-08 15:05:21 +0000634def plus(*v):
Guido van Rossum27d445f1998-08-10 20:12:34 +0000635 accu = 0
636 for i in v: accu = accu + i
637 return accu
Fred Drake132dce22000-12-12 23:11:42 +0000638if map(plus, [1, 3, 7]) != [1, 3, 7]:
Guido van Rossum27d445f1998-08-10 20:12:34 +0000639 raise TestFailed, 'map(plus, [1, 3, 7])'
Fred Drake132dce22000-12-12 23:11:42 +0000640if map(plus, [1, 3, 7], [4, 9, 2]) != [1+4, 3+9, 7+2]:
Guido van Rossum27d445f1998-08-10 20:12:34 +0000641 raise TestFailed, 'map(plus, [1, 3, 7], [4, 9, 2])'
Fred Drake132dce22000-12-12 23:11:42 +0000642if 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 +0000643 raise TestFailed, 'map(plus, [1, 3, 7], [4, 9, 2], [1, 1, 0])'
Guido van Rossumb6775db1994-08-01 11:34:53 +0000644if map(None, Squares(10)) != [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]:
Guido van Rossum27d445f1998-08-10 20:12:34 +0000645 raise TestFailed, 'map(None, Squares(10))'
Guido van Rossumb6775db1994-08-01 11:34:53 +0000646if map(int, Squares(10)) != [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]:
Guido van Rossum27d445f1998-08-10 20:12:34 +0000647 raise TestFailed, 'map(int, Squares(10))'
Guido van Rossumb6775db1994-08-01 11:34:53 +0000648if map(None, Squares(3), Squares(2)) != [(0,0), (1,1), (4,None)]:
Guido van Rossum27d445f1998-08-10 20:12:34 +0000649 raise TestFailed, 'map(None, Squares(3), Squares(2))'
Guido van Rossum7f9b5e02001-01-22 19:30:07 +0000650if map(max, Squares(3), Squares(2)) != [0, 1, 4]:
Guido van Rossum27d445f1998-08-10 20:12:34 +0000651 raise TestFailed, 'map(max, Squares(3), Squares(2))'
Guido van Rossume65cce51993-11-08 15:05:21 +0000652
Guido van Rossum3bead091992-01-27 17:00:37 +0000653print 'max'
Fred Drake132dce22000-12-12 23:11:42 +0000654if max('123123') != '3': raise TestFailed, 'max(\'123123\')'
655if max(1, 2, 3) != 3: raise TestFailed, 'max(1, 2, 3)'
656if max((1, 2, 3, 1, 2, 3)) != 3: raise TestFailed, 'max((1, 2, 3, 1, 2, 3))'
657if 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 +0000658#
Fred Drake132dce22000-12-12 23:11:42 +0000659if max(1, 2L, 3.0) != 3.0: raise TestFailed, 'max(1, 2L, 3.0)'
660if max(1L, 2.0, 3) != 3: raise TestFailed, 'max(1L, 2.0, 3)'
661if max(1.0, 2, 3L) != 3L: raise TestFailed, 'max(1.0, 2, 3L)'
Guido van Rossum3bead091992-01-27 17:00:37 +0000662
663print 'min'
Fred Drake132dce22000-12-12 23:11:42 +0000664if min('123123') != '1': raise TestFailed, 'min(\'123123\')'
665if min(1, 2, 3) != 1: raise TestFailed, 'min(1, 2, 3)'
666if min((1, 2, 3, 1, 2, 3)) != 1: raise TestFailed, 'min((1, 2, 3, 1, 2, 3))'
667if 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 +0000668#
Fred Drake132dce22000-12-12 23:11:42 +0000669if min(1, 2L, 3.0) != 1: raise TestFailed, 'min(1, 2L, 3.0)'
670if min(1L, 2.0, 3) != 1L: raise TestFailed, 'min(1L, 2.0, 3)'
671if min(1.0, 2, 3L) != 1.0: raise TestFailed, 'min(1.0, 2, 3L)'