32 bit and 64 bit compiled versions of SWIG generated different Python files when default arguments were outside the range of 32 bit signed integers. The default arguments specified in Python are now only those that are in the range of a 32 bit signed integer, otherwise the default is obtained from C/C++ code. Closes #1108
202 lines
5.1 KiB
Python
202 lines
5.1 KiB
Python
# Note that this test is also used by python_default_args_runme.py hence
|
|
# the use of __main__ and the run function
|
|
|
|
|
|
def is_new_style_class(cls):
|
|
return hasattr(cls, "__class__")
|
|
|
|
|
|
def run(module_name):
|
|
default_args = __import__(module_name)
|
|
ec = default_args.EnumClass()
|
|
if not ec.blah():
|
|
raise RuntimeError("EnumClass::blah() default arguments don't work")
|
|
|
|
de = default_args.DerivedEnumClass()
|
|
de.accelerate()
|
|
de.accelerate(default_args.EnumClass.SLOW)
|
|
|
|
if default_args.Statics_staticMethod() != 60:
|
|
raise RuntimeError
|
|
|
|
if default_args.cfunc1(1) != 2:
|
|
raise RuntimeError
|
|
|
|
if default_args.cfunc2(1) != 3:
|
|
raise RuntimeError
|
|
|
|
if default_args.cfunc3(1) != 4:
|
|
raise RuntimeError
|
|
|
|
f = default_args.Foo()
|
|
|
|
f.newname()
|
|
f.newname(1)
|
|
f.defaulted1()
|
|
f.defaulted2()
|
|
|
|
if f.double_if_void_ptr_is_null(2, None) != 4:
|
|
raise RuntimeError
|
|
|
|
if f.double_if_void_ptr_is_null(3) != 6:
|
|
raise RuntimeError
|
|
|
|
if f.double_if_handle_is_null(4, None) != 8:
|
|
raise RuntimeError
|
|
|
|
if f.double_if_handle_is_null(5) != 10:
|
|
raise RuntimeError
|
|
|
|
if f.double_if_dbl_ptr_is_null(6, None) != 12:
|
|
raise RuntimeError
|
|
|
|
if f.double_if_dbl_ptr_is_null(7) != 14:
|
|
raise RuntimeError
|
|
|
|
try:
|
|
f = default_args.Foo(1)
|
|
error = 1
|
|
except:
|
|
error = 0
|
|
if error:
|
|
raise RuntimeError("Foo::Foo ignore is not working")
|
|
|
|
try:
|
|
f = default_args.Foo(1, 2)
|
|
error = 1
|
|
except:
|
|
error = 0
|
|
if error:
|
|
raise RuntimeError("Foo::Foo ignore is not working")
|
|
|
|
try:
|
|
f = default_args.Foo(1, 2, 3)
|
|
error = 1
|
|
except:
|
|
error = 0
|
|
if error:
|
|
raise RuntimeError("Foo::Foo ignore is not working")
|
|
|
|
try:
|
|
m = f.meth(1)
|
|
error = 1
|
|
except:
|
|
error = 0
|
|
if error:
|
|
raise RuntimeError("Foo::meth ignore is not working")
|
|
|
|
try:
|
|
m = f.meth(1, 2)
|
|
error = 1
|
|
except:
|
|
error = 0
|
|
if error:
|
|
raise RuntimeError("Foo::meth ignore is not working")
|
|
|
|
try:
|
|
m = f.meth(1, 2, 3)
|
|
error = 1
|
|
except:
|
|
error = 0
|
|
if error:
|
|
raise RuntimeError("Foo::meth ignore is not working")
|
|
|
|
if is_new_style_class(default_args.Klass):
|
|
Klass_inc = default_args.Klass.inc
|
|
else:
|
|
Klass_inc = default_args.Klass_inc
|
|
|
|
if Klass_inc(100, default_args.Klass(22)).val != 122:
|
|
raise RuntimeError("Klass::inc failed")
|
|
|
|
if Klass_inc(100).val != 99:
|
|
raise RuntimeError("Klass::inc failed")
|
|
|
|
if Klass_inc().val != 0:
|
|
raise RuntimeError("Klass::inc failed")
|
|
|
|
tricky_failure = False
|
|
tricky = default_args.TrickyInPython()
|
|
if tricky.value_m1(10) != -1:
|
|
print "trickyvalue_m1 failed"
|
|
tricky_failure = True
|
|
if tricky.value_m1(10, 10) != 10:
|
|
print "trickyvalue_m1 failed"
|
|
tricky_failure = True
|
|
if tricky.value_0xabcdef(10) != 0xabcdef:
|
|
print "trickyvalue_0xabcdef failed"
|
|
tricky_failure = True
|
|
if tricky.value_0644(10) != 420:
|
|
print "trickyvalue_0644 failed"
|
|
tricky_failure = True
|
|
if tricky.value_perm(10) != 420:
|
|
print "trickyvalue_perm failed"
|
|
tricky_failure = True
|
|
if tricky.value_m01(10) != -1:
|
|
print "trickyvalue_m01 failed"
|
|
tricky_failure = True
|
|
if not tricky.booltest2():
|
|
print "booltest2 failed"
|
|
tricky_failure = True
|
|
|
|
if tricky.max_32bit_int1() != 0x7FFFFFFF:
|
|
print "max_32bit_int1 failed"
|
|
tricky_failure = True
|
|
if tricky.min_32bit_int1() != -2147483648:
|
|
print "min_32bit_int1 failed"
|
|
tricky_failure = True
|
|
if tricky.max_32bit_int2() != 0x7FFFFFFF:
|
|
print "max_32bit_int2 failed"
|
|
tricky_failure = True
|
|
if tricky.min_32bit_int2() != -2147483648:
|
|
print "min_32bit_int2 failed"
|
|
tricky_failure = True
|
|
|
|
tricky.too_big_32bit_int1()
|
|
tricky.too_small_32bit_int1()
|
|
tricky.too_big_32bit_int2()
|
|
tricky.too_small_32bit_int2()
|
|
|
|
if tricky_failure:
|
|
raise RuntimeError
|
|
|
|
default_args.seek()
|
|
default_args.seek(10)
|
|
|
|
if not default_args.booltest():
|
|
raise RuntimeError("booltest failed")
|
|
|
|
if default_args.slightly_off_square(10) != 102:
|
|
raise RuntimeError
|
|
|
|
if default_args.slightly_off_square() != 291:
|
|
raise RuntimeError
|
|
|
|
# It is difficult to test the python:cdefaultargs feature properly as -builtin
|
|
# and -fastproxy do not use the Python layer for default args
|
|
if default_args.CDA().cdefaultargs_test1() != 1:
|
|
raise RuntimeError
|
|
|
|
if default_args.CDA().cdefaultargs_test2() != 1:
|
|
raise RuntimeError
|
|
|
|
if default_args.chartest1() != 'x':
|
|
raise RuntimeError
|
|
|
|
if default_args.chartest2() != '\0':
|
|
raise RuntimeError
|
|
|
|
if default_args.chartest3() != '\1':
|
|
raise RuntimeError
|
|
|
|
if default_args.chartest4() != '\n':
|
|
raise RuntimeError
|
|
|
|
if default_args.chartest5() != 'B':
|
|
raise RuntimeError
|
|
|
|
if default_args.chartest6() != 'C':
|
|
raise RuntimeError
|
|
|
|
if __name__ == "__main__":
|
|
run('default_args')
|