use strict;
use Test::More tests => 39;
use operator_overload;
pass("loaded");
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");
$op->{i} = 5;
$op2->{i} = 3;
ok(not($op == $op2), "operator equal: not equal");
$op->{i} = 3;
ok(($op == $op2), "operator equal: 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");
$op->{i} = 3;
is("Op(3)", "$op", "operator stringify");
$op->{i} = 3;
$op2->{i} = 3;
my $op3 = $op + $op2;
is($op3->{i}, 6, "operator addition");
$op->{i} = 3;
$op2->{i} = 3;
$op += $op2;
is($op->{i}, 6, "operator additive assignment");
$op3->{i} = 6;
$op2->{i} = 3;
$op = $op3 - $op2;
is($op->{i}, 3, "operator subtraction");
$op3->{i} = 3;
$op = 6 - $op3;
is($op->{i}, 3, "reversed operator subtraction (with int)");
$op->{i} = 6;
$op2->{i} = 3;
$op -= $op2;
is($op->{i}, 3, "operator subtractive assignment");
$op->{i} = 3;
$op2->{i} = 3;
$op3 = $op * $op2;
is($op3->{i}, 9, "operator multiplication");
$op->{i} = 9;
$op2->{i} = 3;
$op3 = $op / $op2;
is($op3->{i}, 3, "operator division");
$op->{i} = 8;
$op2->{i} = 3;
$op3 = $op % $op2;
is($op3->{i}, 2, "operator modulus");
$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");
$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");
$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");
$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");
$op->{i} = 7;
$op++;
is($op->{i}, 8, "operator post-increment");
$op->{i} = 7;
++$op;
is($op->{i}, 8, "operator pre-increment");
$op->{i} = 7;
$op--;
is($op->{i}, 6, "operator post-decrement");
$op->{i} = 7;
--$op;
is($op->{i}, 6, "operator pre-decrement");
$op->{i} = 3;
$op2 = -$op;
is($op2->{i}, -3, "operator neg");
$op->{i} = 0;
is(!$op, !0, "operator not");
$op->{i} = 1;
is(!$op, !1, "operator not");