swig/Examples/test-suite/lua/li_boost_shared_ptr_runme.lua

237 lines
6.3 KiB
Lua

lbsp=require("li_boost_shared_ptr")
catch_undef_globs() -- catch "undefined" global variables
debug_shared = false
-- Helper functions
function verifyValue(expected, got)
assert(expected == got, "Expected: " .. expected .. " Got: " .. got)
end
function verifyCount(expected, k)
local got = lbsp.Klass.getTotal_count()
-- Note: in Lua we can't reliably check reference counts as GC timing is not deterministic
-- We just verify that the object is still valid
if k then
local _ = k:getValue()
end
end
-- Test functions
-- simple shared_ptr usage - created in Lua
k = lbsp.Klass("me oh my")
val = k:getValue()
verifyValue("me oh my", val)
-- simple shared_ptr usage - not created in C++
k = lbsp.factorycreate()
val = k:getValue()
verifyValue("factorycreate", val)
-- pass by shared_ptr
k = lbsp.Klass("me oh my")
kret = lbsp.smartpointertest(k)
val = kret:getValue()
verifyValue("me oh my smartpointertest", val)
-- pass by shared_ptr pointer
k = lbsp.Klass("me oh my")
kret = lbsp.smartpointerpointertest(k)
val = kret:getValue()
verifyValue("me oh my smartpointerpointertest", val)
-- pass by shared_ptr reference
k = lbsp.Klass("me oh my")
kret = lbsp.smartpointerreftest(k)
val = kret:getValue()
verifyValue("me oh my smartpointerreftest", val)
-- pass by shared_ptr pointer reference
k = lbsp.Klass("me oh my")
kret = lbsp.smartpointerpointerreftest(k)
val = kret:getValue()
verifyValue("me oh my smartpointerpointerreftest", val)
-- const pass by shared_ptr
k = lbsp.Klass("me oh my")
kret = lbsp.constsmartpointertest(k)
val = kret:getValue()
verifyValue("me oh my", val)
-- const pass by shared_ptr pointer
k = lbsp.Klass("me oh my")
kret = lbsp.constsmartpointerpointertest(k)
val = kret:getValue()
verifyValue("me oh my", val)
-- const pass by shared_ptr reference
k = lbsp.Klass("me oh my")
kret = lbsp.constsmartpointerreftest(k)
val = kret:getValue()
verifyValue("me oh my", val)
-- pass by value
k = lbsp.Klass("me oh my")
kret = lbsp.valuetest(k)
val = kret:getValue()
verifyValue("me oh my valuetest", val)
-- pass by pointer
k = lbsp.Klass("me oh my")
kret = lbsp.pointertest(k)
val = kret:getValue()
verifyValue("me oh my pointertest", val)
-- pass by reference
k = lbsp.Klass("me oh my")
kret = lbsp.reftest(k)
val = kret:getValue()
verifyValue("me oh my reftest", val)
-- pass by pointer reference
k = lbsp.Klass("me oh my")
kret = lbsp.pointerreftest(k)
val = kret:getValue()
verifyValue("me oh my pointerreftest", val)
-- null tests
-- Note: In Lua, when a function returns nil and we assign it to a global variable,
-- the global variable checking mechanism can interfere. We use local variables for clarity.
do
local kret_null
kret_null = lbsp.smartpointertest(nil)
assert(kret_null == nil, "return was not nil")
kret_null = lbsp.smartpointerpointertest(nil)
assert(kret_null == nil, "return was not nil")
kret_null = lbsp.smartpointerreftest(nil)
assert(kret_null == nil, "return was not nil")
kret_null = lbsp.smartpointerpointerreftest(nil)
assert(kret_null == nil, "return was not nil")
-- pointertest with null should return nil
kret_null = lbsp.pointertest(nil)
assert(kret_null == nil, "return was not nil")
end
-- test null pointers emitted from C++
do
local k_null, kret_null
k_null = lbsp.sp_pointer_null()
kret_null = lbsp.smartpointertest(k_null)
assert(kret_null == nil, "return was not nil")
k_null = lbsp.null_sp_pointer()
kret_null = lbsp.smartpointertest(k_null)
assert(kret_null == nil, "return was not nil")
k_null = lbsp.sp_value_null()
kret_null = lbsp.smartpointertest(k_null)
assert(kret_null == nil, "return was not nil")
end
-- $owner
k = lbsp.pointerownertest()
val = k:getValue()
verifyValue("pointerownertest", val)
k = lbsp.smartpointerpointerownertest()
val = k:getValue()
verifyValue("smartpointerpointerownertest", val)
-- Derived class
-- derived pass by shared_ptr
k = lbsp.KlassDerived("me oh my")
kret = lbsp.derivedsmartptrtest(k)
val = kret:getValue()
verifyValue("me oh my derivedsmartptrtest-Derived", val)
-- derived pass by shared_ptr pointer
k = lbsp.KlassDerived("me oh my")
kret = lbsp.derivedsmartptrpointertest(k)
val = kret:getValue()
verifyValue("me oh my derivedsmartptrpointertest-Derived", val)
-- derived pass by shared_ptr ref
k = lbsp.KlassDerived("me oh my")
kret = lbsp.derivedsmartptrreftest(k)
val = kret:getValue()
verifyValue("me oh my derivedsmartptrreftest-Derived", val)
-- derived pass by shared_ptr pointer ref
k = lbsp.KlassDerived("me oh my")
kret = lbsp.derivedsmartptrpointerreftest(k)
val = kret:getValue()
verifyValue("me oh my derivedsmartptrpointerreftest-Derived", val)
-- derived pass by pointer
k = lbsp.KlassDerived("me oh my")
kret = lbsp.derivedpointertest(k)
val = kret:getValue()
verifyValue("me oh my derivedpointertest-Derived", val)
-- derived pass by ref
k = lbsp.KlassDerived("me oh my")
kret = lbsp.derivedreftest(k)
val = kret:getValue()
verifyValue("me oh my derivedreftest-Derived", val)
-- 3rd derived class test for upcast
k = lbsp.Klass3rdDerived("me oh my")
val = lbsp.test3rdupcast(k)
verifyValue("me oh my-3rdDerived", val)
-- Member variable tests
mv = lbsp.MemberVariables()
k = lbsp.Klass("smart member value")
mv.SmartMemberValue = k
val = mv.SmartMemberValue:getValue()
verifyValue("smart member value", val)
k = lbsp.Klass("smart member pointer")
mv.SmartMemberPointer = k
val = mv.SmartMemberPointer:getValue()
verifyValue("smart member pointer", val)
k = lbsp.Klass("smart member reference")
mv.SmartMemberReference = k
val = mv.SmartMemberReference:getValue()
verifyValue("smart member reference", val)
-- Global variable tests
k = lbsp.Klass("global value")
lbsp.GlobalValue = k
val = lbsp.GlobalValue:getValue()
verifyValue("global value", val)
k = lbsp.Klass("global pointer")
lbsp.GlobalPointer = k
val = lbsp.GlobalPointer:getValue()
verifyValue("global pointer", val)
k = lbsp.Klass("global reference")
lbsp.GlobalReference = k
val = lbsp.GlobalReference:getValue()
verifyValue("global reference", val)
-- Global smart pointer tests
k = lbsp.Klass("global smart value")
lbsp.GlobalSmartValue = k
val = lbsp.GlobalSmartValue:getValue()
verifyValue("global smart value", val)
k = lbsp.Klass("global smart pointer")
lbsp.GlobalSmartPointer = k
val = lbsp.GlobalSmartPointer:getValue()
verifyValue("global smart pointer", val)
k = lbsp.Klass("global smart reference")
lbsp.GlobalSmartReference = k
val = lbsp.GlobalSmartReference:getValue()
verifyValue("global smart reference", val)