diff options
Diffstat (limited to 'Examples/test-suite/perl5/cpp11_rvalue_reference_move_runme.pl')
-rw-r--r-- | Examples/test-suite/perl5/cpp11_rvalue_reference_move_runme.pl | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/Examples/test-suite/perl5/cpp11_rvalue_reference_move_runme.pl b/Examples/test-suite/perl5/cpp11_rvalue_reference_move_runme.pl new file mode 100644 index 000000000..756691d03 --- /dev/null +++ b/Examples/test-suite/perl5/cpp11_rvalue_reference_move_runme.pl @@ -0,0 +1,70 @@ +use strict; +use warnings; +use Test::More tests => 7; +BEGIN { use_ok('cpp11_rvalue_reference_move') } +require_ok('cpp11_rvalue_reference_move'); + +{ + # Function containing rvalue reference parameter + cpp11_rvalue_reference_move::Counter::reset_counts(); + my $mo = new 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); + is(cpp11_rvalue_reference_move::MovableCopyable::is_nullptr($mo), 1, "is_nullptr check"); + undef $mo; + cpp11_rvalue_reference_move::Counter::check_counts(1, 0, 0, 1, 0, 2); +} + +{ + # Move constructor test + cpp11_rvalue_reference_move::Counter::reset_counts(); + my $mo = new cpp11_rvalue_reference_move::MovableCopyable(222); + cpp11_rvalue_reference_move::Counter::check_counts(1, 0, 0, 0, 0, 0); + my $mo_moved = new cpp11_rvalue_reference_move::MovableCopyable($mo); + cpp11_rvalue_reference_move::Counter::check_counts(1, 0, 0, 1, 0, 1); + is(cpp11_rvalue_reference_move::MovableCopyable::is_nullptr($mo), 1, "is_nullptr check"); + undef $mo; + cpp11_rvalue_reference_move::Counter::check_counts(1, 0, 0, 1, 0, 1); + undef $mo_moved; + cpp11_rvalue_reference_move::Counter::check_counts(1, 0, 0, 1, 0, 2); +} + +{ + # Move assignment operator test + cpp11_rvalue_reference_move::Counter::reset_counts(); + my $mo111 = new cpp11_rvalue_reference_move::MovableCopyable(111); + my $mo222 = new 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); + is(cpp11_rvalue_reference_move::MovableCopyable::is_nullptr($mo222), 1, "is_nullptr check"); + undef $mo222; + cpp11_rvalue_reference_move::Counter::check_counts(2, 0, 0, 0, 1, 1); + undef $mo111; + cpp11_rvalue_reference_move::Counter::check_counts(2, 0, 0, 0, 1, 2); +} + +{ + # null check + cpp11_rvalue_reference_move::Counter::reset_counts(); + eval { + cpp11_rvalue_reference_move::MovableCopyable::movein(undef); + }; + like($@, qr/\binvalid null reference/, "Should have thrown null error"); + cpp11_rvalue_reference_move::Counter::check_counts(0, 0, 0, 0, 0, 0); +} + +{ + # output + cpp11_rvalue_reference_move::Counter::reset_counts(); + my $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); + + eval { + cpp11_rvalue_reference_move::MovableCopyable::movein($mc); + }; + like($@, qr/\bcannot release ownership as memory is not owned\b/, "Should have thrown 'Cannot release ownership as memory is not owned' error"); + cpp11_rvalue_reference_move::Counter::check_counts(2, 0, 0, 0, 1, 1); +} |