Exemplo n.º 1
0
 /// <summary>
 /// 构造函数
 /// </summary>
 /// <param name="availableMethodsType">包含公式中可用静态方法的类型</param>
 /// <param name="variableCoercisonStrategy">默认变量值约束策略</param>
 public FormulaEvaluator(
     Type availableMethodsType,
     IVariableCoercionStrategy variableCoercisonStrategy)
 {
     this.availableMethodsType = availableMethodsType;
     this.executor             = new CSharpExecutor(availableMethodsType, variableCoercisonStrategy);
 }
Exemplo n.º 2
0
        public async Task <ValidationResult> Validate(Sql.Models.Problem problem, string solution)
        {
            var testCaseResults = new List <TestCaseResult>();

            foreach (var testCase in problem.TestCases)
            {
                string solutionContent = string.Empty;
                if (string.IsNullOrWhiteSpace(testCase.Input) ||
                    testCase.Input.Equals("None", StringComparison.OrdinalIgnoreCase) ||
                    testCase.Input.Equals("N\\A", StringComparison.OrdinalIgnoreCase) ||
                    testCase.Input.StartsWith("None", StringComparison.OrdinalIgnoreCase))
                {
                }
                else
                {
                    solutionContent  = testCase.Input;
                    solutionContent += Environment.NewLine;
                }

                solutionContent += solution;

                var csharpExectuor = new CSharpExecutor(_azureFunctionsService);
                var output         = await csharpExectuor.Execute(solutionContent);

                testCaseResults.Add(new TestCaseResult(testCase.Output, output.Trim()));
            }

            return(new ValidationResult(testCaseResults));
        }
Exemplo n.º 3
0
        protected override void Execute(NativeActivityContext context)
        {
            var result = new CSharpExecutor(Code)
                         .Use("System")
                         .Execute <TInput, TOutput>(Arguments.Get(context));

            Result.Set(context, result);
        }
        public void ShouldExecute(string code, string session, string input, string expectedOutput)
        {
            IExecutor executor = new CSharpExecutor();
            var       ret      = executor.Execute(session, code, int.MaxValue, input, out var output, out var message);

            Assert.IsTrue(ret);
            Assert.IsNotEmpty(output);
            Assert.IsEmpty(message);
            Assert.AreEqual(expectedOutput, output.Trim(), $"{expectedOutput} are not equal {output.Trim()}");
        }
Exemplo n.º 5
0
        public async Task DoubleThrowWhenEvalDivideByZeroTest()
        {
            var evaluator       = new CSharpExecutor(typeof(Math), new NullNotAllowedStrategy());
            var fakeVarProvider = A.Fake <IVariableProvider>();
            var context         = new FormulaEvaluatingContext
            {
                VariableProvider = fakeVarProvider
            };
            var formula = "1.0/0";

            await Assert.ThrowsAsync <DivideByZeroException>(() =>
                                                             evaluator.EvalAsync(formula, context)
                                                             );
        }
Exemplo n.º 6
0
        public async Task EvalNonExistingVariableTest()
        {
            var evaluator       = new CSharpExecutor(typeof(Math), new NullNotAllowedStrategy());
            var fakeVarProvider = A.Fake <IVariableProvider>();

            A.CallTo(() => fakeVarProvider.GetVarAsync("a"))
            .Returns(Task.FromResult <double?>(null));
            var context = new FormulaEvaluatingContext
            {
                VariableProvider = fakeVarProvider
            };
            var formula = "await Var(\"a\") + await Var(\"b\") + 3";

            await Assert.ThrowsAsync <CoerceVariableFailException>(() =>
                                                                   evaluator.EvalAsync(formula, context)
                                                                   );
        }
Exemplo n.º 7
0
        public async Task IntThrowWhenEvalDivideByZeroTest()
        {
            var evaluator       = new CSharpExecutor(typeof(Math), new NullNotAllowedStrategy());
            var fakeVarProvider = A.Fake <IVariableProvider>();

            A.CallTo(() => fakeVarProvider.GetVarAsync("a"))
            .Returns(0);
            var context = new FormulaEvaluatingContext
            {
                VariableProvider = fakeVarProvider
            };
            var formula = "1/await Var(\"a\")";

            await Assert.ThrowsAsync <DivideByZeroException>(() =>
                                                             evaluator.EvalAsync(formula, context)
                                                             );
        }
Exemplo n.º 8
0
        public async Task EvalExpressionTest(string formula, double expected)
        {
            //var evaluator = new CSharpExecutor(new NullNotAllowedStrategy());
            //var fakeVarProvider = A.Fake<IVariableProvider>();
            //A.CallTo(() => fakeVarProvider.GetVarAsync("a", A<VariableCriteria>.That.IsNotNull()))
            //    .Returns(10);
            //A.CallTo(() => fakeVarProvider.GetVarAsync("参数", A<VariableCriteria>.That.IsNotNull()))
            //    .Returns(20);
            //A.CallTo(() => fakeVarProvider.GetVarAsync("PI", A<VariableCriteria>.That.IsNotNull()))
            //    .Returns(Math.PI);
            //var context = new FormulaEvaluatingContext
            //{
            //    VariableProvider = fakeVarProvider,
            //    DistrictIndicatorResolver = A.Fake<IDistrictIndicatorResolver>(),
            //};

            //var actual = await evaluator.EvalAsync(formula, context);

            //Assert.Equal(expected, actual);

            var evaluator       = new CSharpExecutor(typeof(Math), new NullNotAllowedStrategy());
            var fakeVarProvider = A.Fake <IVariableProvider>();

            A.CallTo(() => fakeVarProvider.GetVarAsync("a"))
            .Returns(10);
            A.CallTo(() => fakeVarProvider.GetVarAsync("参数"))
            .Returns(20);
            A.CallTo(() => fakeVarProvider.GetVarAsync("PI"))
            .Returns(Math.PI);
            var context = new FormulaEvaluatingContext
            {
                VariableProvider = fakeVarProvider,
                //DistrictIndicatorResolver = A.Fake<IDistrictIndicatorResolver>(),
            };

            var actual = await evaluator.EvalAsync(formula, context);

            Assert.Equal(expected, actual);
        }