diff options
Diffstat (limited to 'Examples/test-suite/lua/cpp11_rvalue_reference_move_runme.lua')
-rw-r--r-- | Examples/test-suite/lua/cpp11_rvalue_reference_move_runme.lua | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/Examples/test-suite/lua/cpp11_rvalue_reference_move_runme.lua b/Examples/test-suite/lua/cpp11_rvalue_reference_move_runme.lua new file mode 100644 index 000000000..773760c8f --- /dev/null +++ b/Examples/test-suite/lua/cpp11_rvalue_reference_move_runme.lua @@ -0,0 +1,66 @@ +require("import") -- the import fn +import("cpp11_rvalue_reference_move") -- 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 containing rvalue reference parameter +cpp11_rvalue_reference_move.Counter.reset_counts() +mo = cpp11_rvalue_reference_move.MovableCopyable(222) +cpp11_rvalue_reference_move.Counter.check_counts(1, 0, 0, 0, 0, 0) +cpp11_rvalue_reference_move.MovableCopyable.movein(mo) +cpp11_rvalue_reference_move.Counter.check_counts(1, 0, 0, 1, 0, 2) +if not (cpp11_rvalue_reference_move.MovableCopyable_is_nullptr(mo)) then + error("is_nullptr failed") +end +mo = nil +cpp11_rvalue_reference_move.Counter.check_counts(1, 0, 0, 1, 0, 2) + +-- Move constructor test +cpp11_rvalue_reference_move.Counter.reset_counts() +mo = cpp11_rvalue_reference_move.MovableCopyable(222) +cpp11_rvalue_reference_move.Counter.check_counts(1, 0, 0, 0, 0, 0) +mo_moved = cpp11_rvalue_reference_move.MovableCopyable(mo) +cpp11_rvalue_reference_move.Counter.check_counts(1, 0, 0, 1, 0, 1) +if not (cpp11_rvalue_reference_move.MovableCopyable_is_nullptr(mo)) then + error("is_nullptr failed") +end +mo = nil +cpp11_rvalue_reference_move.Counter.check_counts(1, 0, 0, 1, 0, 1) +mo_moved = nil +collectgarbage() -- gc nudge needed here +cpp11_rvalue_reference_move.Counter.check_counts(1, 0, 0, 1, 0, 2) + +-- Move assignment operator test +cpp11_rvalue_reference_move.Counter.reset_counts() +mo111 = cpp11_rvalue_reference_move.MovableCopyable(111) +mo222 = cpp11_rvalue_reference_move.MovableCopyable(222) +cpp11_rvalue_reference_move.Counter.check_counts(2, 0, 0, 0, 0, 0) +mo111:MoveAssign(mo222) +cpp11_rvalue_reference_move.Counter.check_counts(2, 0, 0, 0, 1, 1) +if not (cpp11_rvalue_reference_move.MovableCopyable_is_nullptr(mo222)) then + error("is_nullptr failed") +end +mo222 = nil +cpp11_rvalue_reference_move.Counter.check_counts(2, 0, 0, 0, 1, 1) +mo111 = nil +collectgarbage() -- gc nudge needed here +cpp11_rvalue_reference_move.Counter.check_counts(2, 0, 0, 0, 1, 2) + +-- null check +cpp11_rvalue_reference_move.Counter.reset_counts() +s, msg = pcall(function() cpp11_rvalue_reference_move.MovableCopyable.movein(nil) end) +assert(s == false and msg:find("Error in MovableCopyable::movein (arg 1), expected 'MovableCopyable &&' got 'nil'", 1, true)) +cpp11_rvalue_reference_move.Counter.check_counts(0, 0, 0, 0, 0, 0) + +-- output +cpp11_rvalue_reference_move.Counter.reset_counts() +mc = cpp11_rvalue_reference_move.MovableCopyable.moveout(1234) +cpp11_rvalue_reference_move.Counter.check_counts(2, 0, 0, 0, 1, 1) +cpp11_rvalue_reference_move.MovableCopyable.check_numbers_match(mc, 1234) + +s, msg = pcall(function() cpp11_rvalue_reference_move.MovableCopyable.movein(mc) end) +assert(s == false and msg:find("Cannot release ownership as memory is not owned", 1, true)) +cpp11_rvalue_reference_move.Counter.check_counts(2, 0, 0, 0, 1, 1) |