1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 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");
|