public void Can_use_overloaded_operators_on_derived_class() { var target = new Interpreter(); var x = new DerivedClassWithOverloadedBinaryOperators(3); target.SetVariable("x", x); string y = "5"; Assert.IsFalse(x == y); Assert.IsFalse(target.Eval <bool>("x == y", new Parameter("y", y))); y = "3"; Assert.IsTrue(x == y); Assert.IsTrue(target.Eval <bool>("x == y", new Parameter("y", y))); Assert.IsFalse(target.Eval <bool>("x == \"4\"")); Assert.IsTrue(target.Eval <bool>("x == \"3\"")); Assert.IsTrue(!x == "-3"); Assert.IsTrue(target.Eval <bool>("!x == \"-3\"")); var z = new DerivedClassWithOverloadedBinaryOperators(10); Assert.IsTrue((x + z) == "13"); Assert.IsTrue(target.Eval <bool>("(x + z) == \"13\"", new Parameter("z", z))); Assert.IsTrue((x * 4) == "12"); Assert.IsTrue(target.Eval <bool>("(x * 4) == \"12\"")); // ensure a user defined operator can be found if it's on the right side operand's type Assert.IsTrue((4 * x) == "12"); Assert.IsTrue(target.Eval <bool>("(4 * x) == \"12\"")); }
public void Can_use_overloaded_operators_on_derived_class() { var target = new Interpreter(); var x = new DerivedClassWithOverloadedBinaryOperators(3); target.SetVariable("x", x); string y = "5"; Assert.IsFalse(x == y); Assert.IsFalse(target.Eval <bool>("x == y", new Parameter("y", y))); y = "3"; Assert.IsTrue(x == y); Assert.IsTrue(target.Eval <bool>("x == y", new Parameter("y", y))); Assert.IsFalse(target.Eval <bool>("x == \"4\"")); Assert.IsTrue(target.Eval <bool>("x == \"3\"")); Assert.IsTrue(!x == "-3"); Assert.IsTrue(target.Eval <bool>("!x == \"-3\"")); var z = new DerivedClassWithOverloadedBinaryOperators(10); Assert.IsTrue((x + z) == "13"); Assert.IsTrue(target.Eval <bool>("(x + z) == \"13\"", new Parameter("z", z))); }
public void Can_mix_overloaded_operators() { var target = new Interpreter(); var x = new ClassWithOverloadedBinaryOperators(3); target.SetVariable("x", x); // ensure we don't trigger an ambiguous operator exception var z = new DerivedClassWithOverloadedBinaryOperators(10); Assert.IsTrue((x + z) == "13"); Assert.IsTrue(target.Eval <bool>("(x + z) == \"13\"", new Parameter("z", z))); }