| #!/usr/bin/env ruby |
| |
| require 'swig_assert' |
| |
| require 'cpp11_rvalue_reference_move' |
| |
| # Function containing rvalue reference parameter |
| Cpp11_rvalue_reference_move::Counter.reset_counts() |
| mo = Cpp11_rvalue_reference_move::MovableCopyable.new(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) |
| exception_thrown = false |
| begin |
| Cpp11_rvalue_reference_move::MovableCopyable.is_nullptr(mo) |
| rescue ObjectPreviouslyDeleted |
| exception_thrown = true |
| end |
| if (!exception_thrown) |
| raise RuntimeError, "is_nullptr failed to throw" |
| 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.new(222) |
| Cpp11_rvalue_reference_move::Counter.check_counts(1, 0, 0, 0, 0, 0) |
| mo_moved = Cpp11_rvalue_reference_move::MovableCopyable.new(mo) |
| Cpp11_rvalue_reference_move::Counter.check_counts(1, 0, 0, 1, 0, 1) |
| exception_thrown = false |
| begin |
| Cpp11_rvalue_reference_move::MovableCopyable.is_nullptr(mo) |
| rescue ObjectPreviouslyDeleted |
| exception_thrown = true |
| end |
| if (!exception_thrown) |
| raise RuntimeError, "is_nullptr failed to throw" |
| end |
| mo = nil |
| Cpp11_rvalue_reference_move::Counter.check_counts(1, 0, 0, 1, 0, 1) |
| # mo_moved = nil |
| # Cpp11_rvalue_reference_move::Counter.check_counts(1, 0, 0, 1, 0, 2) |
| # Above not deleting the C++ object(node v12) - can't reliably control GC - use the movein function instead to delete |
| Cpp11_rvalue_reference_move::MovableCopyable.movein(mo_moved) |
| Cpp11_rvalue_reference_move::Counter.check_counts(1, 0, 0, 2, 0, 3) |
| |
| # Move assignment operator test |
| Cpp11_rvalue_reference_move::Counter.reset_counts() |
| mo111 = Cpp11_rvalue_reference_move::MovableCopyable.new(111) |
| mo222 = Cpp11_rvalue_reference_move::MovableCopyable.new(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) |
| exception_thrown = false |
| begin |
| Cpp11_rvalue_reference_move::MovableCopyable.is_nullptr(mo222) |
| rescue ObjectPreviouslyDeleted |
| exception_thrown = true |
| end |
| if (!exception_thrown) |
| raise RuntimeError, "is_nullptr failed to throw" |
| end |
| mo222 = nil |
| Cpp11_rvalue_reference_move::Counter.check_counts(2, 0, 0, 0, 1, 1) |
| # mo111 = nil |
| # Cpp11_rvalue_reference_move::Counter.check_counts(2, 0, 0, 0, 1, 2) |
| # Above not deleting the C++ object(node v12) - can't reliably control GC - use the movein function instead to delete |
| Cpp11_rvalue_reference_move::MovableCopyable.movein(mo111) |
| Cpp11_rvalue_reference_move::Counter.check_counts(2, 0, 0, 1, 1, 3) |
| |
| # null check |
| Cpp11_rvalue_reference_move::Counter.reset_counts() |
| exception_thrown = false |
| begin |
| Cpp11_rvalue_reference_move::MovableCopyable.movein(nil) |
| rescue ArgumentError => e |
| if (!e.to_s.include? "invalid null reference") |
| raise RuntimeError, "incorrect exception message: #{e.to_s}" |
| end |
| exception_thrown = true |
| end |
| if (!exception_thrown) |
| raise RuntimeError, "Should have thrown null error" |
| end |
| 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) |
| |
| exception_thrown = false |
| begin |
| Cpp11_rvalue_reference_move::MovableCopyable.movein(mc) |
| rescue RuntimeError => e |
| if (!e.to_s.include? "cannot release ownership as memory is not owned") |
| raise RuntimeError, "incorrect exception message: #{e.to_s}" |
| end |
| exception_thrown = true |
| end |
| if (!exception_thrown) |
| raise RuntimeError, "Should have thrown 'Cannot release ownership as memory is not owned' error" |
| end |
| Cpp11_rvalue_reference_move::Counter.check_counts(2, 0, 0, 0, 1, 1) |