protected void AssertTypeof(CompilationInput compilationInput, string expression, string typeStr) { var(success, result) = Host.Typeof(compilationInput, expression); if (!success) { Assert.Fail(); } Assert.That(result, Is.EqualTo(typeStr)); }
protected void AssertApproxEqual(CompilationInput compilationInput, string controlExpression, params string[] expressions) => AssertApproxEqual(compilationInput, controlExpression, expressions.Select(expression => { var(success, result) = Host.Evaluate(compilationInput, expression); if (!success) { Assert.Fail($"'{expression}' evaluation failed"); } return(result); }).ToArray());
protected void AssertApproxEqual(CompilationInput compilationInput, string controlExpression, params float[][] results) { var(controlSuccess, controlResult) = Host.Evaluate(compilationInput, controlExpression); if (!controlSuccess) { Assert.Fail($"'{controlExpression}' evaluation failed"); } results.Aggregate(controlResult, (expected, result) => { CollectionAssert.AreEqual(expected, result, FloatComparer); return(expected); }); }
protected void EvaluateExpectingErrorCode(CompilationInput compilationInput, int messageCode, string expression) { var errors = new List <CompilerMessage>(); compilationInput.LogCallback = ExpectMessageCode(messageCode, errors); var(success, _) = Host.Evaluate(compilationInput, expression); if (success) { if (errors.Count > 0) { Assert.Fail("Expected message code '{0}' but got following code(s): {1}", messageCode, string.Join(",", errors.Select(err => err.MessageCode))); } else { Assert.Fail("Expected message code '{0}' but evaluation succeeded", messageCode); } } }
protected abstract (int ExitCode, string Result) CommandImplementation(CompilationInput input);
} = false; // Skipping validation during evaluate may cause indirect compiler errors protected override (int ExitCode, string Result) CommandImplementation(CompilationInput input) => (0, new AtomicHost().Evaluate(input, Expression) switch
public (bool Success, float[] Result) Evaluate(CompilationInput compilationInput, string expression) => new PersistentHost(compilationInput).Evaluate(compilationInput, expression);
public bool Parse(CompilationInput compilationInput) => SourceContext.TryCreate(compilationInput, out _);
public (bool Success, string Result) Typeof(CompilationInput input, string expression) => new PersistentHost(input).Typeof(input, expression);
protected override (int ExitCode, string Result) CommandImplementation(CompilationInput compilationInput) => (0, new AtomicHost().Parse(compilationInput).ToString());
public static TDelegate Compile <TDelegate>(this IFunction function, CompilationInput input, ICLRBoundaryMap boundaryMap = null) where TDelegate : Delegate? => (TDelegate)function.Compile(typeof(TDelegate), input, boundaryMap);