diff options
Diffstat (limited to 'Examples/test-suite/lua/cpp_basic_runme.lua')
| -rw-r--r-- | Examples/test-suite/lua/cpp_basic_runme.lua | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/Examples/test-suite/lua/cpp_basic_runme.lua b/Examples/test-suite/lua/cpp_basic_runme.lua new file mode 100644 index 0000000..b63b89c --- /dev/null +++ b/Examples/test-suite/lua/cpp_basic_runme.lua @@ -0,0 +1,64 @@ +require("import") -- the import fn +import("cpp_basic") -- import code +cb=cpp_basic -- renaming import + +-- catch "undefined" global variables +setmetatable(getfenv(),{__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) +f4.num=8 +assert(cb.Bar_global_fptr.num==8) + +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_fval.num==3) +cb.Bar_global_fval=cb.Foo(-34) +assert(cb.Bar_global_fval.num==-34) + +-- 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) |
