Exemple #1
0
        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");
            });
        }
Exemple #2
0
        /// <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();
        }