Пример #1
0
        public CorrelationResponse Post([FromBody] CorrelationRequestAnalytic request)
        {
            CorrelationResponse result = new CorrelationResponse();

            var watch = Stopwatch.StartNew();

            try
            {
                var correlationCalculator = CorrelationCalculator.Create(request.Type);
                var scriptCompilator      = new ScriptCompiler();

                var function1 = Function.Create(scriptCompilator.GetFunc(request.Function1),
                                                request.LeftBorder,
                                                request.RightBorder,
                                                request.PointsCount);
                var function2 = Function.Create(scriptCompilator.GetFunc(request.Function2),
                                                request.LeftBorder,
                                                request.RightBorder,
                                                request.PointsCount);

                result.Value = correlationCalculator.GetCorrelation(function1, function2);
            }
            catch (Exception e)
            {
                result.Error = e.Message;
            }
            finally
            {
                watch.Stop();
                result.ExecutionTime = watch.ElapsedMilliseconds;
            }

            return(result);
        }
        public void ControllerReturnsErrorWhenSyntaxErrorInAnalyticFunction()
        {
            var controller = new CorrelationController();
            var request    = new CorrelationRequestAnalytic()
            {
                Type        = CorrelationType.Kendall,
                Function1   = "x+1",
                Function2   = "*Pow(x) + 1", //Error here
                LeftBorder  = -Math.PI,
                RightBorder = Math.PI,
                PointsCount = 100
            };

            CorrelationResponse response = controller.Post(request);

            Assert.NotEqual(response.Error, null);
        }
        public void ControllerWorksIdenticallyForAnalyticAndNumericFunctions()
        {
            var controller     = new CorrelationController();
            var scriptCompiler = new ScriptCompiler();

            string funcDesc1 = "Cos(x)";
            string funcDesc2 = "Sin(x)";

            double leftBorder = -1, rightBorder = 1;
            int    pointsCount = 20;

            var function1 = Function.Create(scriptCompiler.GetFunc(funcDesc1), leftBorder, rightBorder, pointsCount);
            var function2 = Function.Create(scriptCompiler.GetFunc(funcDesc2), leftBorder, rightBorder, pointsCount);

            var requestAnalytic = new CorrelationRequestAnalytic()
            {
                Type        = CorrelationType.Pearson,
                Function1   = funcDesc1,
                Function2   = funcDesc2, //Error here
                LeftBorder  = leftBorder,
                RightBorder = rightBorder,
                PointsCount = pointsCount
            };

            var requestNumeric = new CorrelationRequestNumeric()
            {
                Type      = CorrelationType.Pearson,
                Function1 = function1,
                Function2 = function2
            };

            CorrelationResponse response1 = controller.Post(requestAnalytic);
            CorrelationResponse response2 = controller.Post(requestNumeric);

            Assert.Equal(response1.Value, response2.Value);
        }