import operator_overload.*; public class operator_overload_runme { static { System.loadLibrary("operator_overload"); } public static void main(String argv[]) { // Java does not support operators, so we just check that these can be called as methods. Op.sanity_check(); //test routine: Op a = new Op(); Op b = new Op(5); Op c = new Op(b); // copy constructor Op d = new Op(2); Op dd = d.Equal(d); // assignment operator // test equality Assert(a.NotEqual(b)); Assert(b.EqualEqual(c)); Assert(a.NotEqual(d)); Assert(d.EqualEqual(dd)); // test < Assert(a.LessThan(b)); Assert(a.LessThanEqual(b)); Assert(b.LessThanEqual(c)); Assert(b.GreaterThanEqual(c)); Assert(b.GreaterThan(d)); Assert(b.GreaterThanEqual(d)); // test += Op e = new Op(3); e.PlusEqual(d); Assert(e.EqualEqual(b)); e.MinusEqual(c); Assert(e.EqualEqual(a)); e = new Op(1); e.MultiplyEqual(b); Assert(e.EqualEqual(c)); e.DivideEqual(d); Assert(e.EqualEqual(d)); e.PercentEqual(c); Assert(e.EqualEqual(d)); // test + Op f = new Op(1); Op g = new Op(1); Assert(f.Plus(g).EqualEqual(new Op(2))); Assert(f.Minus(g).EqualEqual(new Op(0))); Assert(f.Multiply(g).EqualEqual(new Op(1))); Assert(f.Divide(g).EqualEqual(new Op(1))); Assert(f.Percent(g).EqualEqual(new Op(0))); // test unary operators Assert((a.Not() == true)); Assert((b.Not() == false)); Assert(a.Minus().EqualEqual(a)); Assert(b.Minus().EqualEqual( new Op(-5))); // test [] Op h = new Op(3); Assert(h.__getitem__(0) == 3); Assert(h.__getitem__(1) == 0); h.__setitem__(0,2); // set Assert(h.__getitem__(0) == 2); h.__setitem__(1,2); // ignored Assert(h.IndexIntoConst(0) == 2); Assert(h.IndexIntoConst(1) == 0); // test () Op i = new Op(3); Assert(i.Functor()==3); Assert(i.Functor(1)==4); Assert(i.Functor(1,2)==6); // test ++ -- Op j = new Op(10); j.PlusPlusPrefix(); j.PlusPlusPostfix(0); Assert(j.getI() == 12); j.MinusMinusPrefix(); j.MinusMinusPostfix(0); Assert(j.getI() == 10); { Op op = j.PlusPlusPostfix(0); Assert(j.getI() == op.getI()+1); } { Op op = j.MinusMinusPostfix(0); Assert(j.getI() == op.getI()-1); } // cast operators Op k = new Op(3); int check_k = k.IntCast(); Assert(check_k == 3); Op l = new Op(4); double check_l = l.DoubleCast(); Assert(check_l == 4); } public static void Assert(boolean b) { if (!b) throw new RuntimeException("Assertion failed"); } }