public void Calculation() { IEvaluationEngine engine = null; Logger logExtension = null; "establish"._(() => { logExtension = new Logger(); engine = new EvaluationEngine(); engine.SetLogExtension(logExtension); engine.Solve <HowManyFruitsAreThereStartingWith, int, char>() .AggregateWithExpressionAggregator(0, (aggregate, value) => aggregate + value) .ByEvaluating(q => new ParametrizedFruitExpression { Kind = "Apple", Count = 1 }) .When(q => true) .ByEvaluating(q => new[] { new ParametrizedFruitExpression { Kind = "Ananas", Count = 2 }, new ParametrizedFruitExpression { Kind = "Banana", Count = 4 } }) .ByEvaluating((q, p) => p == 'B' ? 8 : 0) .When(q => false) .ByEvaluating(q => new ParametrizedFruitExpression { Kind = "Unknown" }); }); "when an answer is calculated"._(() => { engine.Answer(new HowManyFruitsAreThereStartingWith(), 'A'); }); "it should log how answer was derived"._(() => { logExtension.FoundAnswerLog .Should().Contain(HowManyFruitsAreThereStartingWith.Description, "answered question") .And.Contain("aggregator strategy", "used strategy") .And.Contain("expression aggregator with seed '0' and aggregate function (aggregate, value) => (aggregate + value)", "used aggregator") .And.Contain("Parameter = A", "provided parameter") .And.Contain("Answer = 3", "calculated answer") .And.Contain("1 Apple returned 1", "used expression with result") .And.Contain("2 Ananas returned 2", "used expression with result") .And.Contain("4 Banana returned 0", "used expression with result") .And.Contain("inline expression = (q, p) => IIF((Convert(p) == 66), 8, 0) returned 0", "used expression with result") .And.NotContain("Unknown", "unknwon expression should not be evaluated due to unfulfilled constraint"); }); }
/// <summary> /// Main method. /// </summary> /// <param name="args">The command line arguments.</param> public static void Main(string[] args) { var evaluationEngine = new EvaluationEngine(); evaluationEngine.SetLogExtension(new ConsoleLogger()); var questioner = new Questioner(evaluationEngine); var answerer = new Answerer(evaluationEngine); answerer.PrepareAnswers(); questioner.Ask(); Console.ReadLine(); }