blob: 65285ee7377f26df7251ea3a7caafdeacdde3a9a [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:])
438except ValueError:
439 pass
440else:
441 raise TestFailed, "int(%s)" % `s[1:]` + " should raise ValueError"
Tim Peters7321ec42001-07-26 20:02:17 +0000442try:
443 int(1e100)
444except OverflowError:
445 pass
446else:
447 raise TestFailed("int(1e100) expected OverflowError")
448try:
449 int(-1e100)
450except OverflowError:
451 pass
452else:
453 raise TestFailed("int(-1e100) expected OverflowError")
454
Guido van Rossum3bead091992-01-27 17:00:37 +0000455
Tim Peters1dad6a82001-06-18 19:21:11 +0000456# SF bug 434186: 0x80000000/2 != 0x80000000>>1.
457# Worked by accident in Windows release build, but failed in debug build.
458# Failed in all Linux builds.
459x = -1-sys.maxint
Guido van Rossum54e54c62001-09-04 19:14:14 +0000460if x >> 1 != x//2:
Tim Peters1dad6a82001-06-18 19:21:11 +0000461 raise TestFailed("x >> 1 != x/2 when x == -1-sys.maxint")
462
Guido van Rossum29d26062001-12-11 04:37:34 +0000463try: int('123\0')
464except ValueError: pass
465else: raise TestFailed("int('123\0') didn't raise exception")
466
Neal Norwitz32f41532001-12-29 00:35:20 +0000467try: int('53', 40)
468except ValueError: pass
469else: raise TestFailed("int('53', 40) didn't raise ValueError")
470
471try: int('1' * 512)
472except ValueError: pass
473else: raise TestFailed("int('1' * 512) didn't raise ValueError")
474
475try: int(1, 12)
476except TypeError: pass
477else: raise TestFailed("int(1, 12) didn't raise TypeError")
478
479if int('0123', 0) != 83:
480 raise TestFailed("int('0123', 0) != 83")
481
Barry Warsawd5430771997-08-22 21:27:03 +0000482print 'isinstance'
483class C:
484 pass
485class D(C):
486 pass
487class E:
488 pass
489c = C()
490d = D()
491e = E()
492if not isinstance(c, C): raise TestFailed, 'isinstance(c, C)'
493if not isinstance(d, C): raise TestFailed, 'isinstance(d, C)'
494if isinstance(e, C): raise TestFailed, 'isinstance(e, C)'
495if isinstance(c, D): raise TestFailed, 'isinstance(c, D)'
496if isinstance('foo', E): raise TestFailed, 'isinstance("Foo", E)'
497try:
498 isinstance(E, 'foo')
499 raise TestFailed, 'isinstance(E, "foo")'
500except TypeError:
501 pass
502
503print 'issubclass'
504if not issubclass(D, C): raise TestFailed, 'issubclass(D, C)'
505if not issubclass(C, C): raise TestFailed, 'issubclass(C, C)'
506if issubclass(C, D): raise TestFailed, 'issubclass(C, D)'
507try:
508 issubclass('foo', E)
509 raise TestFailed, 'issubclass("foo", E)'
510except TypeError:
511 pass
512try:
513 issubclass(E, 'foo')
514 raise TestFailed, 'issubclass(E, "foo")'
515except TypeError:
516 pass
517
Guido van Rossum3bead091992-01-27 17:00:37 +0000518print 'len'
Fred Drake132dce22000-12-12 23:11:42 +0000519if len('123') != 3: raise TestFailed, 'len(\'123\')'
520if len(()) != 0: raise TestFailed, 'len(())'
521if len((1, 2, 3, 4)) != 4: raise TestFailed, 'len((1, 2, 3, 4))'
522if len([1, 2, 3, 4]) != 4: raise TestFailed, 'len([1, 2, 3, 4])'
523if len({}) != 0: raise TestFailed, 'len({})'
524if len({'a':1, 'b': 2}) != 2: raise TestFailed, 'len({\'a\':1, \'b\': 2})'
Guido van Rossum3bead091992-01-27 17:00:37 +0000525
Guido van Rossum06ee2532002-02-26 22:39:23 +0000526print 'list'
527if list([]) != []: raise TestFailed, 'list([])'
528l0_3 = [0, 1, 2, 3]
529l0_3_bis = list(l0_3)
530if l0_3 != l0_3_bis or l0_3 is l0_3_bis: raise TestFailed, 'list([0, 1, 2, 3])'
531if list(()) != []: raise TestFailed, 'list(())'
532if list((0, 1, 2, 3)) != [0, 1, 2, 3]: raise TestFailed, 'list((0, 1, 2, 3))'
533if list('') != []: raise TestFailed, 'list('')'
534if list('spam') != ['s', 'p', 'a', 'm']: raise TestFailed, "list('spam')"
535
Guido van Rossumc8060a62002-09-11 18:32:30 +0000536if sys.maxint == 0x7fffffff:
537 # This test can currently only work on 32-bit machines.
538 # XXX If/when PySequence_Length() returns a ssize_t, it should be
539 # XXX re-enabled.
540 try:
541 # Verify clearing of bug #556025.
542 # This assumes that the max data size (sys.maxint) == max
543 # address size this also assumes that the address size is at
544 # least 4 bytes with 8 byte addresses, the bug is not well
545 # tested
546 #
547 # Note: This test is expected to SEGV under Cygwin 1.3.12 or
548 # earlier due to a newlib bug. See the following mailing list
549 # thread for the details:
550
551 # http://sources.redhat.com/ml/newlib/2002/msg00369.html
Tim Peterscfac1d42002-10-08 21:01:07 +0000552 list(xrange(sys.maxint // 2))
Guido van Rossumc8060a62002-09-11 18:32:30 +0000553 except MemoryError:
554 pass
555 else:
556 raise TestFailed, 'list(xrange(sys.maxint / 4))'
Neal Norwitzd4e5be52002-05-22 23:19:17 +0000557
Guido van Rossum3bead091992-01-27 17:00:37 +0000558print 'long'
Fred Drake132dce22000-12-12 23:11:42 +0000559if long(314) != 314L: raise TestFailed, 'long(314)'
560if long(3.14) != 3L: raise TestFailed, 'long(3.14)'
561if long(314L) != 314L: raise TestFailed, 'long(314L)'
Guido van Rossumdddf7a61997-03-31 17:13:17 +0000562# Check that conversion from float truncates towards zero
Fred Drake132dce22000-12-12 23:11:42 +0000563if long(-3.14) != -3L: raise TestFailed, 'long(-3.14)'
564if long(3.9) != 3L: raise TestFailed, 'long(3.9)'
565if long(-3.9) != -3L: raise TestFailed, 'long(-3.9)'
566if long(3.5) != 3L: raise TestFailed, 'long(3.5)'
567if long(-3.5) != -3L: raise TestFailed, 'long(-3.5)'
568if long("-3") != -3L: raise TestFailed, 'long("-3")'
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000569if have_unicode:
570 if long(unicode("-3")) != -3L:
571 raise TestFailed, 'long(u"-3")'
Guido van Rossum9e896b32000-04-05 20:11:21 +0000572# Different base:
Fred Drake132dce22000-12-12 23:11:42 +0000573if long("10",16) != 16L: raise TestFailed, 'long("10",16)'
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000574if have_unicode:
575 if long(unicode("10"),16) != 16L:
576 raise TestFailed, 'long(u"10",16)'
Guido van Rossum70115041998-06-30 17:02:20 +0000577# Check conversions from string (same test set as for int(), and then some)
578LL = [
Guido van Rossum27d445f1998-08-10 20:12:34 +0000579 ('1' + '0'*20, 10L**20),
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000580 ('1' + '0'*100, 10L**100)
581]
582if have_unicode:
583 L+=[
584 (unicode('1') + unicode('0')*20, 10L**20),
585 (unicode('1') + unicode('0')*100, 10L**100),
Guido van Rossum70115041998-06-30 17:02:20 +0000586]
587for s, v in L + LL:
588 for sign in "", "+", "-":
Guido van Rossum27d445f1998-08-10 20:12:34 +0000589 for prefix in "", " ", "\t", " \t\t ":
590 ss = prefix + sign + s
591 vv = v
592 if sign == "-" and v is not ValueError:
593 vv = -v
594 try:
595 if long(ss) != long(vv):
Guido van Rossum9e896b32000-04-05 20:11:21 +0000596 raise TestFailed, "long(%s)" % `ss`
Guido van Rossum27d445f1998-08-10 20:12:34 +0000597 except v:
598 pass
599 except ValueError, e:
Guido van Rossum9e896b32000-04-05 20:11:21 +0000600 raise TestFailed, "long(%s) raised ValueError: %s" % (`ss`, e)
Guido van Rossum3bead091992-01-27 17:00:37 +0000601
Guido van Rossum29d26062001-12-11 04:37:34 +0000602try: long('123\0')
603except ValueError: pass
604else: raise TestFailed("long('123\0') didn't raise exception")
605
Neal Norwitz32f41532001-12-29 00:35:20 +0000606try: long('53', 40)
607except ValueError: pass
608else: raise TestFailed("long('53', 40) didn't raise ValueError")
609
610try: long(1, 12)
611except TypeError: pass
612else: raise TestFailed("long(1, 12) didn't raise TypeError")
613
Guido van Rossume65cce51993-11-08 15:05:21 +0000614print 'map'
Fred Drake132dce22000-12-12 23:11:42 +0000615if map(None, 'hello world') != ['h','e','l','l','o',' ','w','o','r','l','d']:
Guido van Rossum27d445f1998-08-10 20:12:34 +0000616 raise TestFailed, 'map(None, \'hello world\')'
Fred Drake132dce22000-12-12 23:11:42 +0000617if map(None, 'abcd', 'efg') != \
Guido van Rossum27d445f1998-08-10 20:12:34 +0000618 [('a', 'e'), ('b', 'f'), ('c', 'g'), ('d', None)]:
619 raise TestFailed, 'map(None, \'abcd\', \'efg\')'
Fred Drake132dce22000-12-12 23:11:42 +0000620if map(None, range(10)) != [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]:
Guido van Rossum27d445f1998-08-10 20:12:34 +0000621 raise TestFailed, 'map(None, range(10))'
Fred Drake132dce22000-12-12 23:11:42 +0000622if map(lambda x: x*x, range(1,4)) != [1, 4, 9]:
Guido van Rossum27d445f1998-08-10 20:12:34 +0000623 raise TestFailed, 'map(lambda x: x*x, range(1,4))'
Guido van Rossum51b1c1c1995-03-04 22:30:54 +0000624try:
Guido van Rossum27d445f1998-08-10 20:12:34 +0000625 from math import sqrt
Guido van Rossum51b1c1c1995-03-04 22:30:54 +0000626except ImportError:
Guido van Rossum27d445f1998-08-10 20:12:34 +0000627 def sqrt(x):
628 return pow(x, 0.5)
Fred Drake132dce22000-12-12 23:11:42 +0000629if 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 +0000630 raise TestFailed, 'map(lambda x: map(sqrt,x), [[16, 4], [81, 9]])'
Fred Drake132dce22000-12-12 23:11:42 +0000631if map(lambda x, y: x+y, [1,3,2], [9,1,4]) != [10, 4, 6]:
Guido van Rossum27d445f1998-08-10 20:12:34 +0000632 raise TestFailed, 'map(lambda x,y: x+y, [1,3,2], [9,1,4])'
Guido van Rossume65cce51993-11-08 15:05:21 +0000633def plus(*v):
Guido van Rossum27d445f1998-08-10 20:12:34 +0000634 accu = 0
635 for i in v: accu = accu + i
636 return accu
Fred Drake132dce22000-12-12 23:11:42 +0000637if map(plus, [1, 3, 7]) != [1, 3, 7]:
Guido van Rossum27d445f1998-08-10 20:12:34 +0000638 raise TestFailed, 'map(plus, [1, 3, 7])'
Fred Drake132dce22000-12-12 23:11:42 +0000639if map(plus, [1, 3, 7], [4, 9, 2]) != [1+4, 3+9, 7+2]:
Guido van Rossum27d445f1998-08-10 20:12:34 +0000640 raise TestFailed, 'map(plus, [1, 3, 7], [4, 9, 2])'
Fred Drake132dce22000-12-12 23:11:42 +0000641if 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 +0000642 raise TestFailed, 'map(plus, [1, 3, 7], [4, 9, 2], [1, 1, 0])'
Guido van Rossumb6775db1994-08-01 11:34:53 +0000643if map(None, Squares(10)) != [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]:
Guido van Rossum27d445f1998-08-10 20:12:34 +0000644 raise TestFailed, 'map(None, Squares(10))'
Guido van Rossumb6775db1994-08-01 11:34:53 +0000645if map(int, Squares(10)) != [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]:
Guido van Rossum27d445f1998-08-10 20:12:34 +0000646 raise TestFailed, 'map(int, Squares(10))'
Guido van Rossumb6775db1994-08-01 11:34:53 +0000647if map(None, Squares(3), Squares(2)) != [(0,0), (1,1), (4,None)]:
Guido van Rossum27d445f1998-08-10 20:12:34 +0000648 raise TestFailed, 'map(None, Squares(3), Squares(2))'
Guido van Rossum7f9b5e02001-01-22 19:30:07 +0000649if map(max, Squares(3), Squares(2)) != [0, 1, 4]:
Guido van Rossum27d445f1998-08-10 20:12:34 +0000650 raise TestFailed, 'map(max, Squares(3), Squares(2))'
Guido van Rossume65cce51993-11-08 15:05:21 +0000651
Guido van Rossum3bead091992-01-27 17:00:37 +0000652print 'max'
Fred Drake132dce22000-12-12 23:11:42 +0000653if max('123123') != '3': raise TestFailed, 'max(\'123123\')'
654if max(1, 2, 3) != 3: raise TestFailed, 'max(1, 2, 3)'
655if max((1, 2, 3, 1, 2, 3)) != 3: raise TestFailed, 'max((1, 2, 3, 1, 2, 3))'
656if 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 +0000657#
Fred Drake132dce22000-12-12 23:11:42 +0000658if max(1, 2L, 3.0) != 3.0: raise TestFailed, 'max(1, 2L, 3.0)'
659if max(1L, 2.0, 3) != 3: raise TestFailed, 'max(1L, 2.0, 3)'
660if max(1.0, 2, 3L) != 3L: raise TestFailed, 'max(1.0, 2, 3L)'
Guido van Rossum3bead091992-01-27 17:00:37 +0000661
662print 'min'
Fred Drake132dce22000-12-12 23:11:42 +0000663if min('123123') != '1': raise TestFailed, 'min(\'123123\')'
664if min(1, 2, 3) != 1: raise TestFailed, 'min(1, 2, 3)'
665if min((1, 2, 3, 1, 2, 3)) != 1: raise TestFailed, 'min((1, 2, 3, 1, 2, 3))'
666if 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 +0000667#
Fred Drake132dce22000-12-12 23:11:42 +0000668if min(1, 2L, 3.0) != 1: raise TestFailed, 'min(1, 2L, 3.0)'
669if min(1L, 2.0, 3) != 1L: raise TestFailed, 'min(1L, 2.0, 3)'
670if min(1.0, 2, 3L) != 1.0: raise TestFailed, 'min(1.0, 2, 3L)'