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); }
static void Main(string[] args) { var scriptCompilator = new ScriptCompiler(); Function function = Function.Create(scriptCompilator.GetFunc("Sin(x)"), 0, 6, 0.01); string json = JsonConvert.SerializeObject(function, Formatting.Indented); Function function2 = JsonConvert.DeserializeObject <Function>(json); Console.ReadKey(); }
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); }