void Formula_Can_Execute_FormulaExpressionContext() { var controller = new YamlScriptController(); controller.QuestionCallback = (FormulaExpressionContext sender, QuestionArgs args) => { // should not be called. throw new Exception("Questioncallback should not be called."); }; var result = controller.Parse(YamlTestFileLoader.Load(@"Rijksoverheid/Zorgtoeslag.yaml")); var parameters = new ParametersCollection() { new ClientParameter("alleenstaande", "ja", TypeInference.InferenceResult.TypeEnum.Boolean, "Dummy"), new ClientParameter("woonland", "Nederland", TypeInference.InferenceResult.TypeEnum.List, "Dummy"), new ClientParameter("toetsingsinkomen_aanvrager", (double)19000, TypeInference.InferenceResult.TypeEnum.Double, "Dummy"), new ClientParameter("toetsingsinkomen_toeslagpartner", (double)0, TypeInference.InferenceResult.TypeEnum.Double, "Dummy") } as IParametersCollection; var model = result.Model; var context = new FormulaExpressionContext(ref model, ref parameters, controller.GetFormula("normpremie"), controller.QuestionCallback, controller); var parameter = context.Evaluate(); Assert.True(parameter.Name == "normpremie"); Assert.True((double)parameter.Value == 419.86704999999995); Assert.True(parameters.Count == 7); }
void Formula_Table_Lookup_Test() { // -naam: woonlandfactoren // woonland, factor: // - [Finland, 0.7161] var controller = new YamlScriptController(); var result = controller.Parse(YamlTestFileLoader.Load(@"Rijksoverheid/Zorgtoeslag.yaml")); ExpressionContext context = new ExpressionContext(controller); // Tsjechië, 0.2412 context.Variables.Add("woonland", "Tsjechië"); var formula = controller.GetFormula("woonlandfactor"); // select(string tableName, string lookupValue, string lookupColumn, string resultColumn) IDynamicExpression e = context.CompileDynamic(formula.Functions[0].Expression); double result1 = (double)e.Evaluate(); Assert.True(result1 == 0.2412); }
void Formula_Can_Execute_FormulaExpressionContext_UsingQuestionAnswer() { var controller = new YamlScriptController(); var result = controller.Parse(YamlTestFileLoader.Load(@"Rijksoverheid/Zorgtoeslag.yaml")); var parameters = new ParametersCollection() { new ClientParameter("alleenstaande", "ja", TypeInference.InferenceResult.TypeEnum.Boolean, "Dummy"), new ClientParameter("woonland", "Nederland", TypeInference.InferenceResult.TypeEnum.List, "Dummy"), new ClientParameter("toetsingsinkomen_toeslagpartner", (double)0, TypeInference.InferenceResult.TypeEnum.Double, "Dummy") } as IParametersCollection; var model = result.Model; bool called = false; OnQuestion = (FormulaExpressionContext sender, QuestionArgs args) => { Assert.True(args.Parameters[0].Name == "toetsingsinkomen_aanvrager"); called = true; }; var context = new FormulaExpressionContext(ref model, ref parameters, controller.GetFormula("normpremie"), OnQuestion, controller); bool unresolvedException = false; try { var parameter = context.Evaluate(); } catch (UnresolvedException) { unresolvedException = true; } Assert.True(called); Assert.True(unresolvedException); }