aboutsummaryrefslogtreecommitdiff
path: root/Examples/test-suite/perl5/cpp11_rvalue_reference_move_runme.pl
diff options
context:
space:
mode:
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.pl70
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);
+}