diff options
Diffstat (limited to 'Examples/test-suite/perl5/operator_overload_runme.pl')
| -rw-r--r-- | Examples/test-suite/perl5/operator_overload_runme.pl | 175 |
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"); + |
