mirror of https://github.com/swig/swig.git
237 lines
6.3 KiB
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)
|