summaryrefslogtreecommitdiff
path: root/Examples/test-suite/perl5/operator_overload_runme.pl
diff options
context:
space:
mode:
Diffstat (limited to 'Examples/test-suite/perl5/operator_overload_runme.pl')
-rw-r--r--Examples/test-suite/perl5/operator_overload_runme.pl175
1 files changed, 175 insertions, 0 deletions
diff --git a/Examples/test-suite/perl5/operator_overload_runme.pl b/Examples/test-suite/perl5/operator_overload_runme.pl
new file mode 100644
index 0000000..ba3f33a
--- /dev/null
+++ b/Examples/test-suite/perl5/operator_overload_runme.pl
@@ -0,0 +1,175 @@
+#!/usr/bin/perl -w
+use strict;
+use Test::More tests => 39;
+
+use operator_overload;
+
+# Workaround for
+# ok( not (expression) , "test description" );
+# does not working in older versions of Perl, eg 5.004_04
+sub ok_not ($;$) {
+ my($test, $name) = @_;
+ $test = not $test;
+ ok($test, $name);
+}
+
+pass("loaded");
+
+# first check all the operators are implemented correctly from pure C++ code
+operator_overloadc::Op_sanity_check();
+
+my $op = operator_overload::Op->new();
+
+isa_ok($op, "operator_overload::Op");
+
+my $op2 = operator_overload::Op->new();
+
+isa_ok($op2, "operator_overload::Op");
+
+# operator equal
+$op->{i} = 5;
+$op2->{i} = 3;
+
+ok_not(($op == $op2), "operator equal: not equal");
+
+$op->{i} = 3;
+ok(($op == $op2), "operator equal: equal");
+
+# operator not equal
+$op->{i} = 5;
+$op2->{i} = 3;
+
+ok(($op != $op2), "operator not equal: not equal");
+
+$op->{i} = 3;
+ok_not(($op != $op2), "operator not equal: equal");
+
+# stringify operator
+$op->{i} = 3;
+is("Op(3)", "$op", "operator stringify");
+
+# addition operator
+$op->{i} = 3;
+$op2->{i} = 3;
+my $op3 = $op + $op2;
+is($op3->{i}, 6, "operator addition");
+
+# addition assignment operator
+$op->{i} = 3;
+$op2->{i} = 3;
+$op += $op2;
+is($op->{i}, 6, "operator additive assignment");
+
+# subtraction operator
+$op3->{i} = 6;
+$op2->{i} = 3;
+$op = $op3 - $op2;
+is($op->{i}, 3, "operator subtraction");
+
+# reversed subtraction operator (with int)
+$op3->{i} = 3;
+$op = 6 - $op3;
+is($op->{i}, 3, "reversed operator subtraction (with int)");
+
+# subtractive assignment operator
+$op->{i} = 6;
+$op2->{i} = 3;
+$op -= $op2;
+is($op->{i}, 3, "operator subtractive assignment");
+
+# multiplication operator
+$op->{i} = 3;
+$op2->{i} = 3;
+$op3 = $op * $op2;
+is($op3->{i}, 9, "operator multiplication");
+
+# division operator
+$op->{i} = 9;
+$op2->{i} = 3;
+$op3 = $op / $op2;
+is($op3->{i}, 3, "operator division");
+
+# modulus operator
+$op->{i} = 8;
+$op2->{i} = 3;
+$op3 = $op % $op2;
+is($op3->{i}, 2, "operator modulus");
+
+# greater than operator
+$op->{i} = 8;
+$op2->{i} = 3;
+ok($op > $op2, "operator greater than");
+ok_not(($op2 > $op), "operator greater than");
+$op->{i} = 3;
+ok_not(($op2 > $op), "operator greater than");
+ok_not(($op > $op2), "operator greater than");
+
+# greater than or equal operator
+$op->{i} = 8;
+$op2->{i} = 3;
+ok($op >= $op2, "operator greater than or equal");
+ok_not(($op2 >= $op), "operator greater than or equal");
+$op->{i} = 3;
+ok(($op2 >= $op), "operator greater than or equal");
+ok(($op >= $op2), "operator greater than or equal");
+
+# lesser than operator
+$op2->{i} = 8;
+$op->{i} = 3;
+ok($op < $op2, "operator lesser than");
+ok_not(($op2 < $op), "operator lesser than");
+$op2->{i} = 3;
+ok_not(($op2 < $op), "operator lesser than");
+ok_not(($op < $op2), "operator lesser than");
+
+# less than or equal operator
+$op2->{i} = 8;
+$op->{i} = 3;
+ok($op <= $op2, "operator lesser than or equal");
+ok_not(($op2 <= $op), "operator lesser than or equal");
+$op2->{i} = 3;
+ok(($op2 <= $op), "operator less than or equal");
+ok(($op <= $op2), "operator less than or equal");
+
+# post-increment operator
+$op->{i} = 7;
+$op++;
+is($op->{i}, 8, "operator post-increment");
+
+# pre-increment operator
+$op->{i} = 7;
+++$op;
+is($op->{i}, 8, "operator pre-increment");
+
+# post-decrement operator
+$op->{i} = 7;
+$op--;
+is($op->{i}, 6, "operator post-decrement");
+
+# pre-decrement operator
+$op->{i} = 7;
+--$op;
+is($op->{i}, 6, "operator pre-decrement");
+
+# neg operator
+$op->{i} = 3;
+$op2 = -$op;
+is($op2->{i}, -3, "operator neg");
+
+# not operator
+$op->{i} = 0;
+is(!$op, !0, "operator not");
+
+$op->{i} = 1;
+is(!$op, !1, "operator not");
+
+### # and operator
+### $op->{i} = 4;
+### $op2->{i} = 2;
+###
+### is($op & $op2, 4 & 2, "operator and");
+###
+### isnt(($op & $op2), (10 & 2), "operator and - false");
+
+# fail("testing failed condition");
+