| 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) |