rvalue reference outputs
Document rvalue reference outputs behaviour Test rvalue reference outputs
This commit is contained in:
parent
c5495fea79
commit
2212af3f4f
26 changed files with 659 additions and 344 deletions
|
|
@ -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)
|
||||
Loading…
Add table
Add a link
Reference in a new issue