/trunk/Examples/test-suite/perl5/operator_overload_runme.pl
Perl | 175 lines | 104 code | 37 blank | 34 comment | 4 complexity | 60e878d6fbb668b1c6e3a226f87966ff MD5 | raw file
Possible License(s): LGPL-2.1, Cube, GPL-3.0, 0BSD, GPL-2.0
- #!/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");