Example #1
0
    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();
    }