| var operator_overload = require("operator_overload"); | |
| var { Op } = operator_overload; | |
| // first check all the operators are implemented correctly from pure C++ code | |
| Op.sanity_check(); | |
| pop = (new Op(6)).Divide(new Op(3)); | |
| // test routine | |
| a = new Op(); | |
| b = new Op(5); | |
| c = new Op(b); // copy construct | |
| d = new Op(2); | |
| dd = new Op(); | |
| dd.Equal(d); // assignment operator | |
| // test equality | |
| if (!a.NotEqual(b)) { | |
| throw new Error("a!=b"); | |
| } | |
| if (!b.EqualEqual(c)) { | |
| throw new Error("b==c"); | |
| } | |
| if (!a.NotEqual(d)) { | |
| throw new Error("a!=d"); | |
| } | |
| if (!d.EqualEqual(dd)) { | |
| throw new Error("d==dd"); | |
| } | |
| // test < | |
| if (!a.LessThan(b)) { | |
| throw new Error("a<b"); | |
| } | |
| if (!a.LessThanEqual(b)) { | |
| throw new Error("a<=b"); | |
| } | |
| if (!b.LessThanEqual(c)) { | |
| throw new Error("b<=c"); | |
| } | |
| if (!b.GreaterThanEqual(c)) { | |
| throw new Error("b>=c"); | |
| } | |
| if (!b.GreaterThan(d)) { | |
| throw new Error("b>d"); | |
| } | |
| if (!b.GreaterThanEqual(d)) { | |
| throw new Error("b>=d"); | |
| } | |
| // test += | |
| e = new Op(3); | |
| e.PlusEqual(d); | |
| if (!e.EqualEqual(b)) { | |
| throw new Error(`e==b (${e.i}==${b.i})`); | |
| } | |
| e.MinusEqual(c); | |
| if (!e.EqualEqual(a)) { | |
| throw new Error("e==a"); | |
| } | |
| e = new Op(1); | |
| e.MultiplyEqual(b); | |
| if (!e.EqualEqual(c)) { | |
| throw new Error("e==c"); | |
| } | |
| e.DivideEqual(d); | |
| if (!e.EqualEqual(d)) { | |
| throw new Error("e==d"); | |
| } | |
| e.PercentEqual(c); | |
| if (!e.EqualEqual(d)) { | |
| throw new Error("e==d"); | |
| } | |
| // test + | |
| f = new Op(1); | |
| g = new Op(1); | |
| if (!f.Plus(g).EqualEqual(new Op(2))) { | |
| throw new Error("f+g==Op(2)"); | |
| } | |
| if (!f.Minus(g).EqualEqual(new Op(0))) { | |
| throw new Error("f-g==Op(0)"); | |
| } | |
| if (!f.Multiply(g).EqualEqual(new Op(1))) { | |
| throw new Error("f*g==Op(1)"); | |
| } | |
| if (!f.Divide(g).EqualEqual(new Op(1))) { | |
| throw new Error("f/g==Op(1)"); | |
| } | |
| if (!f.Percent(g).EqualEqual(new Op(0))) { | |
| throw new Error("f%g==Op(0)"); | |
| } | |
| // test unary operators | |
| if (!a.Minus().EqualEqual(a)) { | |
| throw new Error("-a==a"); | |
| } | |
| if (!b.Minus().EqualEqual(new Op(-5))) { | |
| throw new Error("-b==Op(-5)"); | |
| } | |
| // test functors | |
| if (!b.Functor() == 5) { | |
| throw new Error("functor"); | |
| } | |
| if (!b.Functor(1) == 6) { | |
| throw new Error("functor"); | |
| } | |
| if (!b.Functor(1, 2) == 8) { | |
| throw new Error("functor"); | |
| } |