public ExternalFunctionTests()
        {
            var funcs = new DefaultFunctions <Maybe <object> >();

            funcs.Register("GetValue", (args, context) =>
            {
                var maybe = context.Value;
                if (maybe.HasValue && maybe.Value is TestObj o)
                {
                    return(o.MemberFunction());
                }

                return("Fail");
            });

            parser = new ExpressionParser <Maybe <object> >(
                new MaybeExpressionFactory(
                    MaybeMonad.Instance,
                    funcs));
        }
        public void EvalLegacyMathFunction(string exprString, object expected)
        {
            var funcs = new DefaultFunctions <object>();

            funcs.Register("GetValue", (a, b) => Convert.ToDouble(a[1]));
            var parseResult = VCExpression.ParseDefault(exprString, funcs);
            var expr        = parseResult.Expression;
            var result      = expr.Evaluate(new { });

            Assert.That(result, Is.EqualTo(expected));

            var funcs2 = new DefaultCSharpFunctions();

            funcs2.Register("GetValue", (a, b) => $"Convert.ToDouble({a[1]})");
            var parseResult2 = CSharpExpression.ParseMethod(exprString, funcs2);
            var expr2        = parseResult2.Expression;
            var result2      = expr2.Evaluate(new { });

            Assert.That(result2, Is.EqualTo(expected));
        }