Beispiel #1
0
        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)));
        }
Beispiel #3
0
        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)));
        }