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