private void AssertFunctionResults(string expressionString, float[,] calls, object[] results, string[] paramNames = null) { var expressionCompiler = new ExpressionCompiler(paramNames == null ? new string[0] : paramNames); var operatorData = expressionCompiler.CompileToExpression(expressionString); var builder = new DynamicExpressionData(operatorData, expressionCompiler.parameters.Values.ToArray()); using var nativeOpData = new NativeArray <OperatorDefinition>(builder.OperatorSpaceNeeded, Allocator.Persistent); var paramSize = (ushort)calls.GetLength(1); var inputParams = new NativeArray <float>(paramSize, Allocator.Persistent); var opDataSpace = new JaggedIndexing { index = 0, length = builder.OperatorSpaceNeeded }; var expression = builder.WriteIntoOpDataArray( nativeOpData, opDataSpace); for (int call = 0; call < calls.GetLength(0); call++) { for (int param = 0; param < calls.GetLength(1); param++) { inputParams[param] = calls[call, param]; } var result = expression.EvaluateExpression( inputParams, new JaggedIndexing { index = 0, length = paramSize }, nativeOpData); if (results[call] is float floatVal) { Assert.AreEqual(result, floatVal); } else if (results[call] is bool boolValue) { if (boolValue) { Assert.IsTrue(result > 0); } else { Assert.IsFalse(result > 0); } } } inputParams.Dispose(); }