aboutsummaryrefslogtreecommitdiff
path: root/Examples/test-suite/lua/cpp11_std_unique_ptr_runme.lua
diff options
context:
space:
mode:
Diffstat (limited to 'Examples/test-suite/lua/cpp11_std_unique_ptr_runme.lua')
-rw-r--r--Examples/test-suite/lua/cpp11_std_unique_ptr_runme.lua112
1 files changed, 112 insertions, 0 deletions
diff --git a/Examples/test-suite/lua/cpp11_std_unique_ptr_runme.lua b/Examples/test-suite/lua/cpp11_std_unique_ptr_runme.lua
new file mode 100644
index 000000000..88d453e19
--- /dev/null
+++ b/Examples/test-suite/lua/cpp11_std_unique_ptr_runme.lua
@@ -0,0 +1,112 @@
+require("import") -- the import fn
+import("cpp11_std_unique_ptr") -- import code
+
+-- 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})
+
+
+function checkCount(expected_count)
+ -- call gc to make unused objects are collected
+ collectgarbage()
+ actual_count = cpp11_std_unique_ptr.Klass.getTotal_count()
+ if not (actual_count == expected_count) then
+ error("Counts incorrect, expected:"..expected_count.." actual:"..actual_count)
+ end
+end
+
+--Test raw pointer handling involving virtual inheritance
+kini = cpp11_std_unique_ptr.KlassInheritance("KlassInheritanceInput")
+checkCount(1)
+s = cpp11_std_unique_ptr.useKlassRawPtr(kini)
+if not (s == "KlassInheritanceInput") then
+ error("Incorrect string: "..s)
+end
+kini = nil
+checkCount(0)
+
+-- unique_ptr as input
+kin = cpp11_std_unique_ptr.Klass("KlassInput")
+checkCount(1)
+s = cpp11_std_unique_ptr.takeKlassUniquePtr(kin)
+checkCount(0)
+if not (s == "KlassInput") then
+ error("Incorrect string: "..s)
+end
+if not (cpp11_std_unique_ptr.is_nullptr(kin)) then
+ error("is_nullptr failed")
+end
+kin = nil -- Should not fail, even though already deleted
+checkCount(0)
+
+kin = cpp11_std_unique_ptr.Klass("KlassInput")
+checkCount(1)
+s = cpp11_std_unique_ptr.takeKlassUniquePtr(kin)
+checkCount(0)
+if not (s == "KlassInput") then
+ error("Incorrect string: "..s)
+end
+if not (cpp11_std_unique_ptr.is_nullptr(kin)) then
+ error("is_nullptr failed")
+end
+s, msg = pcall(function() cpp11_std_unique_ptr.takeKlassUniquePtr(kin) end)
+assert(s == false and msg == "Cannot release ownership as memory is not owned for argument 1 of type 'Klass *' in takeKlassUniquePtr")
+
+kin = nil -- Should not fail, even though already deleted
+checkCount(0)
+
+kin = cpp11_std_unique_ptr.Klass("KlassInput")
+notowned = cpp11_std_unique_ptr.get_not_owned_ptr(kin)
+s, msg = pcall(function() cpp11_std_unique_ptr.takeKlassUniquePtr(notowned) end)
+assert(s == false and msg == "Cannot release ownership as memory is not owned for argument 1 of type 'Klass *' in takeKlassUniquePtr")
+checkCount(1)
+kin = nil
+checkCount(0)
+
+kini = cpp11_std_unique_ptr.KlassInheritance("KlassInheritanceInput")
+checkCount(1)
+s = cpp11_std_unique_ptr.takeKlassUniquePtr(kini)
+checkCount(0)
+if not (s == "KlassInheritanceInput") then
+ error("Incorrect string: "..s)
+end
+if not (cpp11_std_unique_ptr.is_nullptr(kini)) then
+ error("is_nullptr failed")
+end
+kini = nil -- Should not fail, even though already deleted
+checkCount(0)
+
+cpp11_std_unique_ptr.takeKlassUniquePtr(nil);
+cpp11_std_unique_ptr.takeKlassUniquePtr(cpp11_std_unique_ptr.make_null());
+checkCount(0);
+
+-- overloaded parameters
+if not (cpp11_std_unique_ptr.overloadTest() == 0) then
+ error("overloadTest failed")
+end
+if not (cpp11_std_unique_ptr.overloadTest(nil) == 1) then
+ error("overloadTest failed")
+end
+if not (cpp11_std_unique_ptr.overloadTest(cpp11_std_unique_ptr.Klass("over")) == 1) then
+ error("overloadTest failed")
+end
+checkCount(0)
+
+
+-- unique_ptr as output
+k1 = cpp11_std_unique_ptr.makeKlassUniquePtr("first")
+k2 = cpp11_std_unique_ptr.makeKlassUniquePtr("second")
+checkCount(2)
+
+k1 = nil
+checkCount(1)
+
+if not (k2:getLabel() == "second") then
+ error("wrong object label")
+end
+
+k2 = nil
+checkCount(0)
+
+assert(cpp11_std_unique_ptr.makeNullUniquePtr() == nil)