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=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")