blob: 2281b3769155086221370a05fcbbb6cb1ad56863 [file] [log] [blame]
Barry Warsaw04f357c2002-07-23 19:04:11 +00001from test.test_support import verbose, TestFailed
Peter Schneider-Kampfdee0f02000-07-25 22:15:45 +00002
3if verbose:
Jeremy Hylton778e2652001-11-09 19:50:08 +00004 print "Testing whether compiler catches assignment to __debug__"
5
6try:
7 compile('__debug__ = 1', '?', 'single')
8except SyntaxError:
9 pass
10
11import __builtin__
Jeremy Hylton79b5b5b2001-11-13 22:03:20 +000012prev = __builtin__.__debug__
Jeremy Hylton778e2652001-11-09 19:50:08 +000013setattr(__builtin__, '__debug__', 'sure')
Jeremy Hylton79b5b5b2001-11-13 22:03:20 +000014setattr(__builtin__, '__debug__', prev)
Jeremy Hylton778e2652001-11-09 19:50:08 +000015
16if verbose:
Jeremy Hylton047e2c92001-01-19 03:25:56 +000017 print 'Running tests on argument handling'
Peter Schneider-Kampfdee0f02000-07-25 22:15:45 +000018
19try:
Jeremy Hylton121b6eb2001-02-19 23:53:42 +000020 exec 'def f(a, a): pass'
Peter Schneider-Kampfdee0f02000-07-25 22:15:45 +000021 raise TestFailed, "duplicate arguments"
22except SyntaxError:
23 pass
24
Thomas Heller6b17abf2002-07-09 09:23:27 +000025if verbose:
26 print "compiling string with syntax error"
27
28try:
29 compile("1+*3", "filename", "exec")
30except SyntaxError, detail:
31 if not detail.filename == "filename":
32 raise TestFailed, "expected 'filename', got %r" % detail.filename
33
Peter Schneider-Kampfdee0f02000-07-25 22:15:45 +000034try:
Jeremy Hylton121b6eb2001-02-19 23:53:42 +000035 exec 'def f(a = 0, a = 1): pass'
Peter Schneider-Kampfdee0f02000-07-25 22:15:45 +000036 raise TestFailed, "duplicate keyword arguments"
37except SyntaxError:
38 pass
Jeremy Hylton047e2c92001-01-19 03:25:56 +000039
40try:
Jeremy Hylton121b6eb2001-02-19 23:53:42 +000041 exec 'def f(a): global a; a = 1'
Jeremy Hylton047e2c92001-01-19 03:25:56 +000042 raise TestFailed, "variable is global and local"
43except SyntaxError:
44 pass
Jeremy Hylton121b6eb2001-02-19 23:53:42 +000045
Jeremy Hylton778e2652001-11-09 19:50:08 +000046if verbose:
47 print "testing complex args"
Jeremy Hylton121b6eb2001-02-19 23:53:42 +000048
49def comp_args((a, b)):
Tim Peters0009c4e2001-02-21 07:29:48 +000050 print a,b
Jeremy Hylton121b6eb2001-02-19 23:53:42 +000051
52comp_args((1, 2))
53
54def comp_args((a, b)=(3, 4)):
55 print a, b
56
57comp_args((1, 2))
58comp_args()
59
60def comp_args(a, (b, c)):
61 print a, b, c
62
63comp_args(1, (2, 3))
64
65def comp_args(a=2, (b, c)=(3, 4)):
66 print a, b, c
67
68comp_args(1, (2, 3))
69comp_args()
70
71try:
72 exec 'def f(a=1, (b, c)): pass'
73 raise TestFailed, "non-default args after default"
74except SyntaxError:
75 pass
Tim Peters9aa70d92001-08-27 19:19:28 +000076
77if verbose:
78 print "testing bad float literals"
79
80def expect_error(s):
81 try:
82 eval(s)
83 raise TestFailed("%r accepted" % s)
84 except SyntaxError:
85 pass
86
87expect_error("2e")
88expect_error("2.0e+")
89expect_error("1e-")
90expect_error("3-4e/21")
Tim Petersd507dab2001-08-30 20:51:59 +000091
Guido van Rossum4b499dd32003-02-13 22:07:59 +000092if verbose:
93 print "testing compile() of indented block w/o trailing newline"
94
95s = """
96if 1:
97 if 2:
98 pass"""
99compile(s, "<string>", "exec")
100
Tim Petersd507dab2001-08-30 20:51:59 +0000101
102if verbose:
103 print "testing literals with leading zeroes"
104
105def expect_same(test_source, expected):
106 got = eval(test_source)
107 if got != expected:
108 raise TestFailed("eval(%r) gave %r, but expected %r" %
109 (test_source, got, expected))
110
111expect_error("077787")
112expect_error("0xj")
113expect_error("0x.")
114expect_error("0e")
115expect_same("0777", 511)
116expect_same("0777L", 511)
117expect_same("000777", 511)
118expect_same("0xff", 255)
119expect_same("0xffL", 255)
120expect_same("0XfF", 255)
121expect_same("0777.", 777)
122expect_same("0777.0", 777)
123expect_same("000000000000000000000000000000000000000000000000000777e0", 777)
124expect_same("0777e1", 7770)
125expect_same("0e0", 0)
126expect_same("0000E-012", 0)
127expect_same("09.5", 9.5)
128expect_same("0777j", 777j)
129expect_same("00j", 0j)
130expect_same("00.0", 0)
131expect_same("0e3", 0)
132expect_same("090000000000000.", 90000000000000.)
133expect_same("090000000000000.0000000000000000000000", 90000000000000.)
134expect_same("090000000000000e0", 90000000000000.)
135expect_same("090000000000000e-0", 90000000000000.)
136expect_same("090000000000000j", 90000000000000j)
137expect_error("090000000000000") # plain octal literal w/ decimal digit
138expect_error("080000000000000") # plain octal literal w/ decimal digit
139expect_error("000000000000009") # plain octal literal w/ decimal digit
140expect_error("000000000000008") # plain octal literal w/ decimal digit
141expect_same("000000000000007", 7)
142expect_same("000000000000008.", 8.)
143expect_same("000000000000009.", 9.)
Guido van Rossum53b39d22003-01-28 17:48:21 +0000144
Guido van Rossum66b12592003-02-12 16:57:47 +0000145# Verify treatment of unary minus on negative numbers SF bug #660455
146import warnings
147warnings.filterwarnings("ignore", "hex/oct constants", FutureWarning)
Neal Norwitzeb2a5ef2003-02-18 15:22:10 +0000148warnings.filterwarnings("ignore", "hex.* of negative int", FutureWarning)
Guido van Rossum66b12592003-02-12 16:57:47 +0000149# XXX Of course the following test will have to be changed in Python 2.4
150# This test is in a <string> so the filterwarnings() can affect it
Neal Norwitzeb2a5ef2003-02-18 15:22:10 +0000151import sys
152all_one_bits = '0xffffffff'
153if sys.maxint != 2147483647:
154 all_one_bits = '0xffffffffffffffff'
Guido van Rossum66b12592003-02-12 16:57:47 +0000155exec """
Neal Norwitzeb2a5ef2003-02-18 15:22:10 +0000156expect_same(all_one_bits, -1)
157expect_same("-" + all_one_bits, 1)
Guido van Rossum66b12592003-02-12 16:57:47 +0000158"""