Ejemplo n.º 1
0
        protected virtual async Task <DialogTurnResult> NextItemAsync(DialogContext dc, CancellationToken cancellationToken = default)
        {
            // Get list information
            var itemsProperty = new ExpressionEngine().Parse(this.ItemsProperty);

            var(itemList, error) = itemsProperty.TryEvaluate(dc.GetState());
            var list  = JArray.FromObject(itemList);
            var index = dc.GetState().GetIntValue(INDEX);

            // Next item
            if (++index < list.Count)
            {
                // Persist index and value
                dc.GetState().SetValue(VALUE, list[index]);
                dc.GetState().SetValue(INDEX, index);

                // Start loop
                return(await this.BeginActionAsync(dc, 0, cancellationToken).ConfigureAwait(false));
            }
            else
            {
                // End of list has been reached
                return(await dc.EndDialogAsync(cancellationToken : cancellationToken).ConfigureAwait(false));
            }
        }
Ejemplo n.º 2
0
        public void TEST_002( )
        {
            var expression       = "2^(3^2)"; // => 2^9 => 512
            var expressionEngine = new ExpressionEngine();

            Assert.AreEqual(512, expressionEngine.Evaluate(expression));
        }
        public override async Task <DialogTurnResult> BeginDialogAsync(DialogContext dc, object options = null, CancellationToken cancellationToken = default(CancellationToken))
        {
            if (options is CancellationToken)
            {
                throw new ArgumentException($"{nameof(options)} cannot be a cancellation token");
            }

            object eventValue = null;

            if (this.EventValue != null)
            {
                eventValue = new ExpressionEngine().Parse(this.EventValue).TryEvaluate(dc.GetState());
            }

            if (dc.Parent == null)
            {
                return(await dc.CancelAllDialogsAsync(true, EventName, eventValue, cancellationToken).ConfigureAwait(false));
            }
            else
            {
                var turnResult = await dc.Parent.CancelAllDialogsAsync(true, EventName, eventValue, cancellationToken).ConfigureAwait(false);

                turnResult.ParentEnded = true;
                return(turnResult);
            }
        }
Ejemplo n.º 4
0
        public void TEST_004( )
        {
            var expression       = "2^3^2"; // => 2^(3^2) => 2^9 => 512 should be same value as test #2
            var expressionEngine = new ExpressionEngine();

            Assert.AreEqual(512, expressionEngine.Evaluate(expression));
        }
Ejemplo n.º 5
0
        public void TEST_003( )
        {
            var expression       = "(2^3)^2"; // => 8 ^ 2 => 64
            var expressionEngine = new ExpressionEngine();

            Assert.AreEqual(64, expressionEngine.Evaluate(expression));
        }
Ejemplo n.º 6
0
        public void TEST_006( )
        {
            var expression       = "(2^3!)^2";
            var expressionEngine = new ExpressionEngine();

            Assert.AreEqual(4096, expressionEngine.Evaluate(expression));
        }
Ejemplo n.º 7
0
        public void TEST_005( )
        {
            var expression       = "2^3!^2"; //=> 2^( (3*2) ^ 2 ) => 2^(6^2) => 2^36
            var expressionEngine = new ExpressionEngine();

            Assert.AreEqual(68719476736, expressionEngine.Evaluate(expression));
        }
Ejemplo n.º 8
0
        public void TEST_001( )
        {
            var expression       = "2^3";
            var expressionEngine = new ExpressionEngine();

            Assert.AreEqual(8, expressionEngine.Evaluate(expression));
        }
Ejemplo n.º 9
0
        public void Not_A_Valid_Expression( )
        {
            var expression = "(1 + 2))";
            var evalEngine = new ExpressionEngine();

            Assert.AreEqual(3, evalEngine.Evaluate(expression));
        }
Ejemplo n.º 10
0
        public void FP_Test_001( )
        {
            var expression = "1 + 1e5";

            var evalEngine = new ExpressionEngine();

            Assert.AreEqual(100001, evalEngine.Evaluate(expression));
        }
Ejemplo n.º 11
0
        private void AssertResult <T>(string text, T expected)
        {
            var memory = new object();

            var(result, error) = new ExpressionEngine().Parse(text).TryEvaluate <T>(memory);
            Assert.AreEqual(expected, result);
            Assert.IsNull(error);
        }
Ejemplo n.º 12
0
        public void Negate_Test( )
        {
            var expression = "-3 * (2 + 1)";

            var evalEngine = new ExpressionEngine();

            Assert.AreEqual(-9, evalEngine.Evaluate(expression));
        }
Ejemplo n.º 13
0
        public void Test_001( )
        {
            var expression = "5!";

            var evalEngine = new ExpressionEngine();

            Assert.AreEqual(120, evalEngine.Evaluate(expression));
        }
Ejemplo n.º 14
0
        public void SubExpression_Test_001()
        {
            var expression = "3 * (2 + 1)";

            var evalEngine = new ExpressionEngine();

            Assert.AreEqual(9, evalEngine.Evaluate(expression));
        }
Ejemplo n.º 15
0
        public Evaluator(List <LGTemplate> templates, ExpressionEngine expressionEngine)
        {
            Templates   = templates;
            TemplateMap = templates.ToDictionary(x => x.Name);

            // generate a new customzied expression engine by injecting the template as functions
            ExpressionEngine = new ExpressionEngine(CustomizedEvaluatorLookup(expressionEngine.EvaluatorLookup));
        }
Ejemplo n.º 16
0
        public void Evaluate(string input, string expected)
        {
            var parser      = new ExpressionEngine(Lookup);
            var original    = parser.Parse(input);
            var dnf         = original.DisjunctiveNormalForm();
            var expectedDnf = parser.Parse(expected);

            Assert.IsTrue(dnf.DeepEquals(expectedDnf), $"{original} is {dnf}, not {expectedDnf}");
        }
Ejemplo n.º 17
0
        public void EvaluateExponent1()
        {
            var expression = "2^3";

            var ee     = new ExpressionEngine();
            var result = ee.Evaluate(expression);

            Assert.AreEqual(8, result);
        }
Ejemplo n.º 18
0
        public void EvaluateInvalidTest()
        {
            var expression = "(1 + 2))";

            var ee     = new ExpressionEngine();
            var result = ee.Evaluate(expression);

            Assert.AreEqual(3, result);
        }
Ejemplo n.º 19
0
        public void EvaluateSubExpressions()
        {
            var expression = "3 * (2 + 1)";

            var ee     = new ExpressionEngine();
            var result = ee.Evaluate(expression);

            Assert.AreEqual(9, result);
        }
Ejemplo n.º 20
0
        public void EvaluateDecimal()
        {
            var expression = "1 + 1e5";

            var ee     = new ExpressionEngine();
            var result = ee.Evaluate(expression);

            Assert.AreEqual(100001, result);
        }
Ejemplo n.º 21
0
        public void EvaluateNegation()
        {
            var expression = "-3 * (2 + 1)";

            var ee     = new ExpressionEngine();
            var result = ee.Evaluate(expression);

            Assert.AreEqual(-9, result);
        }
Ejemplo n.º 22
0
        public void EvaluateTest()
        {
            var expression = "1 + 2 * 3";

            var ee     = new ExpressionEngine();
            var result = ee.Evaluate(expression);

            Assert.AreEqual(7, result);
        }
Ejemplo n.º 23
0
        /// <summary>
        /// Initializes a new instance of the <see cref="Expander"/> class.
        /// </summary>
        /// <param name="templates">template list.</param>
        /// <param name="expressionEngine">Given expression engine.</param>
        public Expander(List <LGTemplate> templates, ExpressionEngine expressionEngine)
        {
            Templates   = templates;
            TemplateMap = templates.ToDictionary(x => x.Name);

            // generate a new customized expression engine by injecting the template as functions
            this.expanderExpressionEngine  = new ExpressionEngine(CustomizedEvaluatorLookup(expressionEngine.EvaluatorLookup, true));
            this.evaluatorExpressionEngine = new ExpressionEngine(CustomizedEvaluatorLookup(expressionEngine.EvaluatorLookup, false));
        }
Ejemplo n.º 24
0
        public void EvaluateExponent6()
        {
            var expression = "(2^3!)^2";

            var ee     = new ExpressionEngine();
            var result = ee.Evaluate(expression);

            Assert.AreEqual(4096, result);
        }
Ejemplo n.º 25
0
        public void EvaluateFactorial1()
        {
            var expression = "5!";

            var ee     = new ExpressionEngine();
            var result = ee.Evaluate(expression);

            Assert.AreEqual(120, result);
        }
Ejemplo n.º 26
0
        public void EvaluateExponent5()
        {
            var expression = "2^3!^2";

            var ee     = new ExpressionEngine();
            var result = ee.Evaluate(expression);

            Assert.AreEqual(68719476736, result);
        }
 public void Initialize(IEnumerable<OnCondition> conditionals, bool evaluate)
 {
     var i = 0;
     var parser = new ExpressionEngine(TriggerTree.LookupFunction);
     foreach (var conditional in conditionals)
     {
         _tree.AddTrigger(conditional.GetExpression(parser), (i, conditional));
         ++i;
     }
 }
Ejemplo n.º 28
0
        public Analyzer(List <LGTemplate> templates, ExpressionEngine expressionEngine)
        {
            Templates   = templates;
            templateMap = templates.ToDictionary(t => t.Name);

            // create an evaluator to leverage it's customized function look up for checking
            var evaluator = new Evaluator(Templates, expressionEngine);

            this._expressionParser = evaluator.ExpressionEngine;
        }
Ejemplo n.º 29
0
        /// <summary>
        /// Parser to turn lg content into a <see cref="LGFile"/>.
        /// </summary>
        /// <param name="filePath"> absolut path of a LG file.</param>
        /// <param name="importResolver">resolver to resolve LG import id to template text.</param>
        /// <param name="expressionEngine">expressionEngine Expression engine for evaluating expressions.</param>
        /// <returns>new <see cref="LGFile"/> entity.</returns>
        public static LGFile ParseFile(
            string filePath,
            ImportResolverDelegate importResolver = null,
            ExpressionEngine expressionEngine     = null)
        {
            var fullPath = Path.GetFullPath(filePath.NormalizePath());
            var content  = File.ReadAllText(fullPath);

            return(ParseText(content, fullPath, importResolver, expressionEngine));
        }
        public void Test0()
        {
            var expression = "2 x";
            var variables  = new { x = 5 };

            var ee = new ExpressionEngine();

            var result = ee.Evaluate(expression, variables);

            Assert.AreEqual(10, result);
        }