Added support for unlimited inputs (#76)
* Added support for unlimited inputspull/77/head v3.0.0-preview.3
parent
fc77d65d68
commit
b39591eac1
|
@ -7,6 +7,7 @@
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="BenchmarkDotNet" Version="0.12.1" />
|
<PackageReference Include="BenchmarkDotNet" Version="0.12.1" />
|
||||||
|
<!--<PackageReference Include="RulesEngine" Version="3.0.0-preview.2" />-->
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
|
|
@ -36,16 +36,18 @@ namespace RulesEngine.ExpressionBuilders
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private Expression<Func<object[],T>> WrapExpression<T>(Expression expression, ParameterExpression[] parameters){
|
private Expression<Func<object[],T>> WrapExpression<T>(LambdaExpression expression, ParameterExpression[] parameters){
|
||||||
var argExp = Expression.Parameter(typeof(object[]),"args");
|
var argExp = Expression.Parameter(typeof(object[]),"args");
|
||||||
var paramExps = parameters.Select((c,i) => {
|
IEnumerable<Expression> paramExps = parameters.Select((c, i) => {
|
||||||
var arg = Expression.ArrayAccess(argExp, Expression.Constant(i));
|
var arg = Expression.ArrayAccess(argExp, Expression.Constant(i));
|
||||||
return Expression.Convert(arg,c.Type);
|
return (Expression)Expression.Assign(c, Expression.Convert(arg, c.Type));
|
||||||
});
|
});
|
||||||
var invokeExp = Expression.Invoke(expression,paramExps);
|
var blockExpSteps = paramExps.Concat(new List<Expression> { expression.Body });
|
||||||
return Expression.Lambda<Func<object[],T>>(invokeExp, argExp);
|
var blockExp = Expression.Block(parameters, blockExpSteps);
|
||||||
|
return Expression.Lambda<Func<object[],T>>(blockExp, argExp);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public T Evaluate<T>(string expression, RuleParameter[] ruleParams)
|
public T Evaluate<T>(string expression, RuleParameter[] ruleParams)
|
||||||
{
|
{
|
||||||
var func = Compile<T>(expression, ruleParams);
|
var func = Compile<T>(expression, ruleParams);
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<TargetFramework>netstandard2.0</TargetFramework>
|
<TargetFramework>netstandard2.0</TargetFramework>
|
||||||
<Version>3.0.0-preview.2</Version>
|
<Version>3.0.0-preview.3</Version>
|
||||||
<Copyright>Copyright (c) Microsoft Corporation.</Copyright>
|
<Copyright>Copyright (c) Microsoft Corporation.</Copyright>
|
||||||
<PackageLicenseFile>LICENSE</PackageLicenseFile>
|
<PackageLicenseFile>LICENSE</PackageLicenseFile>
|
||||||
<PackageProjectUrl>https://github.com/microsoft/RulesEngine</PackageProjectUrl>
|
<PackageProjectUrl>https://github.com/microsoft/RulesEngine</PackageProjectUrl>
|
||||||
|
|
|
@ -62,6 +62,44 @@ namespace RulesEngine.UnitTest
|
||||||
Assert.Contains(result,c => c.IsSuccess);
|
Assert.Contains(result,c => c.IsSuccess);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Theory]
|
||||||
|
[InlineData("rules2.json")]
|
||||||
|
public async Task ExecuteRule_ManyInputs_ReturnsListOfRuleResultTree(string ruleFileName)
|
||||||
|
{
|
||||||
|
var re = GetRulesEngine(ruleFileName);
|
||||||
|
|
||||||
|
dynamic input1 = GetInput1();
|
||||||
|
dynamic input2 = GetInput2();
|
||||||
|
dynamic input3 = GetInput3();
|
||||||
|
|
||||||
|
dynamic input4 = GetInput1();
|
||||||
|
dynamic input5 = GetInput2();
|
||||||
|
dynamic input6 = GetInput3();
|
||||||
|
|
||||||
|
dynamic input7 = GetInput1();
|
||||||
|
dynamic input8 = GetInput2();
|
||||||
|
dynamic input9 = GetInput3();
|
||||||
|
|
||||||
|
dynamic input10 = GetInput1();
|
||||||
|
dynamic input11 = GetInput2();
|
||||||
|
dynamic input12 = GetInput3();
|
||||||
|
|
||||||
|
dynamic input13 = GetInput1();
|
||||||
|
dynamic input14 = GetInput2();
|
||||||
|
dynamic input15 = GetInput3();
|
||||||
|
|
||||||
|
|
||||||
|
dynamic input16 = GetInput1();
|
||||||
|
dynamic input17 = GetInput2();
|
||||||
|
dynamic input18 = GetInput3();
|
||||||
|
|
||||||
|
List<RuleResultTree> result = await re.ExecuteAllRulesAsync("inputWorkflow", input1, input2, input3,input4, input5, input6, input7, input8, input9, input10, input11, input12, input13, input14, input15, input16, input17, input18);
|
||||||
|
Assert.NotNull(result);
|
||||||
|
Assert.IsType<List<RuleResultTree>>(result);
|
||||||
|
Assert.Contains(result, c => c.IsSuccess);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
[Theory]
|
[Theory]
|
||||||
[InlineData("rules2.json")]
|
[InlineData("rules2.json")]
|
||||||
public async Task ExecuteRule_CalledMultipleTimes_ReturnsSameResult(string ruleFileName)
|
public async Task ExecuteRule_CalledMultipleTimes_ReturnsSameResult(string ruleFileName)
|
||||||
|
|
Loading…
Reference in New Issue