mirror of
				https://github.com/python/cpython.git
				synced 2025-11-04 11:49:12 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			111 lines
		
	
	
	
		
			2.6 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			111 lines
		
	
	
	
		
			2.6 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
from test_support import verbose, TestFailed
 | 
						|
 | 
						|
if verbose:
 | 
						|
    print 'Running tests on argument handling'
 | 
						|
 | 
						|
try:
 | 
						|
    exec 'def f(a, a): pass'
 | 
						|
    raise TestFailed, "duplicate arguments"
 | 
						|
except SyntaxError:
 | 
						|
    pass
 | 
						|
 | 
						|
try:
 | 
						|
    exec 'def f(a = 0, a = 1): pass'
 | 
						|
    raise TestFailed, "duplicate keyword arguments"
 | 
						|
except SyntaxError:
 | 
						|
    pass
 | 
						|
 | 
						|
try:
 | 
						|
    exec 'def f(a): global a; a = 1'
 | 
						|
    raise TestFailed, "variable is global and local"
 | 
						|
except SyntaxError:
 | 
						|
    pass
 | 
						|
 | 
						|
print "testing complex args"
 | 
						|
 | 
						|
def comp_args((a, b)):
 | 
						|
    print a,b
 | 
						|
 | 
						|
comp_args((1, 2))
 | 
						|
 | 
						|
def comp_args((a, b)=(3, 4)):
 | 
						|
    print a, b
 | 
						|
 | 
						|
comp_args((1, 2))
 | 
						|
comp_args()
 | 
						|
 | 
						|
def comp_args(a, (b, c)):
 | 
						|
    print a, b, c
 | 
						|
 | 
						|
comp_args(1, (2, 3))
 | 
						|
 | 
						|
def comp_args(a=2, (b, c)=(3, 4)):
 | 
						|
    print a, b, c
 | 
						|
 | 
						|
comp_args(1, (2, 3))
 | 
						|
comp_args()
 | 
						|
 | 
						|
try:
 | 
						|
    exec 'def f(a=1, (b, c)): pass'
 | 
						|
    raise TestFailed, "non-default args after default"
 | 
						|
except SyntaxError:
 | 
						|
    pass
 | 
						|
 | 
						|
if verbose:
 | 
						|
    print "testing bad float literals"
 | 
						|
 | 
						|
def expect_error(s):
 | 
						|
    try:
 | 
						|
        eval(s)
 | 
						|
        raise TestFailed("%r accepted" % s)
 | 
						|
    except SyntaxError:
 | 
						|
        pass
 | 
						|
 | 
						|
expect_error("2e")
 | 
						|
expect_error("2.0e+")
 | 
						|
expect_error("1e-")
 | 
						|
expect_error("3-4e/21")
 | 
						|
 | 
						|
 | 
						|
if verbose:
 | 
						|
    print "testing literals with leading zeroes"
 | 
						|
 | 
						|
def expect_same(test_source, expected):
 | 
						|
    got = eval(test_source)
 | 
						|
    if got != expected:
 | 
						|
        raise TestFailed("eval(%r) gave %r, but expected %r" %
 | 
						|
                         (test_source, got, expected))
 | 
						|
 | 
						|
expect_error("077787")
 | 
						|
expect_error("0xj")
 | 
						|
expect_error("0x.")
 | 
						|
expect_error("0e")
 | 
						|
expect_same("0777", 511)
 | 
						|
expect_same("0777L", 511)
 | 
						|
expect_same("000777", 511)
 | 
						|
expect_same("0xff", 255)
 | 
						|
expect_same("0xffL", 255)
 | 
						|
expect_same("0XfF", 255)
 | 
						|
expect_same("0777.", 777)
 | 
						|
expect_same("0777.0", 777)
 | 
						|
expect_same("000000000000000000000000000000000000000000000000000777e0", 777)
 | 
						|
expect_same("0777e1", 7770)
 | 
						|
expect_same("0e0", 0)
 | 
						|
expect_same("0000E-012", 0)
 | 
						|
expect_same("09.5", 9.5)
 | 
						|
expect_same("0777j", 777j)
 | 
						|
expect_same("00j", 0j)
 | 
						|
expect_same("00.0", 0)
 | 
						|
expect_same("0e3", 0)
 | 
						|
expect_same("090000000000000.", 90000000000000.)
 | 
						|
expect_same("090000000000000.0000000000000000000000", 90000000000000.)
 | 
						|
expect_same("090000000000000e0", 90000000000000.)
 | 
						|
expect_same("090000000000000e-0", 90000000000000.)
 | 
						|
expect_same("090000000000000j", 90000000000000j)
 | 
						|
expect_error("090000000000000")  # plain octal literal w/ decimal digit
 | 
						|
expect_error("080000000000000")  # plain octal literal w/ decimal digit
 | 
						|
expect_error("000000000000009")  # plain octal literal w/ decimal digit
 | 
						|
expect_error("000000000000008")  # plain octal literal w/ decimal digit
 | 
						|
expect_same("000000000000007", 7)
 | 
						|
expect_same("000000000000008.", 8.)
 | 
						|
expect_same("000000000000009.", 9.)
 |