from operator_overload import *

# first check all the operators are implemented correctly from pure C++ code
Op.sanity_check()

pop = Op(6)/Op(3)

# test routine:
a=Op()
b=Op(5)
c=Op(b) # copy construct
d=Op(2)
dd=d # assignment operator

# test equality
if not a!=b:
  raise RuntimeError("a!=b")
if not b==c:
  raise RuntimeError("b==c")
if not a!=d:
  raise RuntimeError("a!=d")
if not d==dd:
  raise RuntimeError("d==dd")

# test <
if not a<b:
  raise RuntimeError("a<b")
if not a<=b:
  raise RuntimeError("a<=b")
if not b<=c:
  raise RuntimeError("b<=c")
if not b>=c:
  raise RuntimeError("b>=c")
if not b>d:
  raise RuntimeError("b>d")
if not b>=d:
  raise RuntimeError("b>=d")

# test +=
e=Op(3)
e+=d
if not e==b:
  raise RuntimeError("e==b (%s==%s)" % (e.i, b.i))
e-=c
if not e==a:
  raise RuntimeError("e==a")
e=Op(1)
e*=b
if not e==c:
  raise RuntimeError("e==c")
e/=d
if not e==d:
  raise RuntimeError("e==d")
e%=c;
if not e==d:
  raise RuntimeError("e==d")

# test +
f=Op(1)
g=Op(1)
if not f+g==Op(2):
  raise RuntimeError("f+g==Op(2)")
if not f-g==Op(0):
  raise RuntimeError("f-g==Op(0)")
if not f*g==Op(1):
  raise RuntimeError("f*g==Op(1)")
if not f/g==Op(1):
  raise RuntimeError("f/g==Op(1)")
if not f%g==Op(0):
  raise RuntimeError("f%g==Op(0)")

# test unary operators
if not -a==a:
  raise RuntimeError("-a==a")
if not -b==Op(-5):
  raise RuntimeError("-b==Op(-5)")

# test functors
if not b()==5:
  raise RuntimeError("functor")
if not b(1)==6:
  raise RuntimeError("functor")
if not b(1, 2)==8:
  raise RuntimeError("functor")
