git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk@10337 626c5289-ae23-0410-ae9c-e8d60b6d4f22
175 lines
3.7 KiB
Perl
175 lines
3.7 KiB
Perl
#!/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");
|
|
|