public static void TestOr()
        {
            var calculator = new Python3Calculator();

            // Booleans
            var t = new Literal(true);
            var f = new Literal(false);
            AssertEquals(calculator.Or(f, t), t);
            AssertEquals(calculator.Or(t, f), t);
            AssertEquals(calculator.Or(t, t), t);
            AssertEquals(calculator.Or(f, f), f);

            // Numbers
            var zero = new Literal(0);
            var a = new Literal(3);
            var b = new Literal(4.0f);
            AssertEquals(calculator.Or(zero, a), a);
            AssertEquals(calculator.Or(a, zero), a);
            AssertEquals(calculator.Or(b, a), b);
            AssertEquals(calculator.Or(a, b), a);

            // Numbers and Booleans
            AssertEquals(calculator.Or(t, zero), t);
            AssertEquals(calculator.Or(zero, t), t);
            AssertEquals(calculator.Or(f, zero), zero);
            AssertEquals(calculator.Or(zero, f), f);
            AssertEquals(calculator.Or(t, a), t);
            AssertEquals(calculator.Or(a, t), a);
            AssertEquals(calculator.Or(f, a), a);
            AssertEquals(calculator.Or(a, f), a);
            AssertEquals(calculator.Or(t, b), t);
            AssertEquals(calculator.Or(b, t), b);
            AssertEquals(calculator.Or(f, b), b);
            AssertEquals(calculator.Or(b, f), b);

            // Strings
            var empty = new Literal("");
            var str_a = new Literal("a");
            var str_b = new Literal("b");
            AssertEquals(calculator.Or(empty, str_a), str_a);
            AssertEquals(calculator.Or(str_a, empty), str_a);
            AssertEquals(calculator.Or(empty, empty), empty);
            AssertEquals(calculator.Or(str_a, str_b), str_a);
            AssertEquals(calculator.Or(str_b, str_a), str_b);

            // Strings and Booleans
            AssertEquals(calculator.Or(empty, f), f);
            AssertEquals(calculator.Or(f, empty), empty);
            AssertEquals(calculator.Or(empty, t), t);
            AssertEquals(calculator.Or(t, empty), t);
            AssertEquals(calculator.Or(str_a, f), str_a);
            AssertEquals(calculator.Or(f, str_a), str_a);
            AssertEquals(calculator.Or(str_a, t), str_a);
            AssertEquals(calculator.Or(t, str_a), t);

            // Strings and Numbers
            AssertEquals(calculator.Or(empty, zero), zero);
            AssertEquals(calculator.Or(zero, empty), empty);
            AssertEquals(calculator.Or(empty, a), a);
            AssertEquals(calculator.Or(a, empty), a);
            AssertEquals(calculator.Or(empty, b), b);
            AssertEquals(calculator.Or(b, empty), b);
            AssertEquals(calculator.Or(str_a, zero), str_a);
            AssertEquals(calculator.Or(zero, str_a), str_a);
            AssertEquals(calculator.Or(str_a, a), str_a);
            AssertEquals(calculator.Or(a, str_a), a);
            AssertEquals(calculator.Or(str_a, b), str_a);
            AssertEquals(calculator.Or(b, str_a), b);
        }