mirror of https://github.com/swig/swig
100 lines
2.5 KiB
Lua
100 lines
2.5 KiB
Lua
require("import") -- the import fn
|
|
import("cpp_basic") -- import code
|
|
cb=cpp_basic -- renaming import
|
|
|
|
-- catch "undefined" global variables
|
|
local env = _ENV -- Lua 5.2
|
|
if not env then env = getfenv () end -- Lua 5.1
|
|
setmetatable(env, {__index=function (t,i) error("undefined global variable `"..i.."'",2) end})
|
|
|
|
f=cb.Foo(4)
|
|
assert(f.num==4)
|
|
f.num=-17
|
|
assert(f.num==-17)
|
|
|
|
b=cb.Bar()
|
|
|
|
b.fptr=f
|
|
assert(b.fptr.num==-17)
|
|
assert(b:test(-3,b.fptr)==-5)
|
|
f.num=12
|
|
assert(b.fptr.num==12)
|
|
|
|
assert(b.fref.num==-4)
|
|
assert(b:test(12,b.fref)==23)
|
|
|
|
-- references don't take ownership, so if we didn't define this here it might get garbage collected
|
|
f2=cb.Foo(23)
|
|
b.fref=f2
|
|
assert(b.fref.num==23)
|
|
assert(b:test(-3,b.fref)==35)
|
|
|
|
assert(b.fval.num==15)
|
|
assert(b:test(3,b.fval)==33)
|
|
b.fval=cb.Foo(-15) -- this is safe as it is copied into the C++
|
|
assert(b.fval.num==-15)
|
|
assert(b:test(3,b.fval)==-27)
|
|
|
|
f3=b:testFoo(12,b.fref)
|
|
assert(f3.num==32)
|
|
|
|
-- now test global
|
|
f4=cb.Foo(6)
|
|
cb.Bar_global_fptr=f4
|
|
assert(cb.Bar_global_fptr.num==6)
|
|
assert(cb.Bar.global_fptr.num==6)
|
|
f4.num=8
|
|
assert(cb.Bar_global_fptr.num==8)
|
|
assert(cb.Bar.global_fptr.num==8)
|
|
|
|
assert(cb.Bar_global_fref.num==23)
|
|
assert(cb.Bar.global_fref.num==23)
|
|
cb.Bar_global_fref=cb.Foo(-7) -- this will set the value
|
|
assert(cb.Bar_global_fref.num==-7)
|
|
assert(cb.Bar.global_fref.num==-7)
|
|
|
|
assert(cb.Bar_global_fval.num==3)
|
|
assert(cb.Bar.global_fval.num==3)
|
|
cb.Bar_global_fval=cb.Foo(-34)
|
|
assert(cb.Bar_global_fval.num==-34)
|
|
assert(cb.Bar.global_fval.num==-34)
|
|
|
|
assert(cb.Bar.global_cint == -4)
|
|
assert(cb.Bar_global_cint == -4)
|
|
|
|
-- Now test member function pointers
|
|
func1_ptr=cb.get_func1_ptr()
|
|
func2_ptr=cb.get_func2_ptr()
|
|
f.num=4
|
|
assert(f:func1(2)==16)
|
|
assert(f:func2(2)==-8)
|
|
|
|
f.func_ptr=func1_ptr
|
|
assert(cb.test_func_ptr(f,2)==16)
|
|
f.func_ptr=func2_ptr
|
|
assert(cb.test_func_ptr(f,2)==-8)
|
|
|
|
-- Test that __tostring metamethod produce no internal asserts
|
|
f2_name = tostring(f2)
|
|
|
|
f3 = cb.FooSub()
|
|
f3_name = tostring(f3)
|
|
|
|
f4 = cb.FooSubSub()
|
|
f4_name = tostring(f4)
|
|
|
|
assert( f2_name == "Foo" )
|
|
assert( f3_name == "Foo" )
|
|
assert( f4_name == "FooSubSub" )
|
|
|
|
-- Test __eq implementation supplied by default
|
|
|
|
-- eq_f1 and eq_f2 must be different userdata with same Foo* pointer. If eq_f1 and eq_f2 are the same userdata (e.g.)
|
|
-- > eq_f1 = smth
|
|
-- > eq_f2 = eq_f1
|
|
-- then default Lua equality comparison kicks in and considers them equal. Access to global_fptr is actually a
|
|
-- function call (internally) and it returns new userdata each time.
|
|
eq_f1 = cb.Bar.global_fptr
|
|
eq_f2 = cb.Bar.global_fptr
|
|
assert( eq_f1 == eq_f2 )
|