public void ShouldResetReportData() { var inputData = new ScatterInputData { Data = new[] { new Dictionary <string, double> { { "seven", 0.00052 }, { "eight", 1.000012 }, { "nine", 1.1 } }, new Dictionary <string, double> { { "seven", 0.0000010101 }, { "eight", 0.12456 }, { "nine", 1.2 } } }, AbscissaColumnName = "seven", OrdinateColumnName = "eight" }; var dataResult = DataResult.CreateSuccessful(inputData.Data); FakeProvider.GetFrom(null).ReturnsForAnyArgs(dataResult); var dummyReportData = GenerateDummyReportData(); FakeScatterReportCalculator.Calculate(null).ReturnsForAnyArgs(dummyReportData); ViewModel.LoadDataCommand.Execute("dummy.path"); var(abscissaColumn, ordinateColumn) = SelectColumnsForReport("seven", "nine"); ViewModel.GenerateReportDataCommand.Execute(null); ViewModel.LoadDataCommand.Execute("dummy2.path"); ViewModel.Report.ShouldBeEquivalentTo(ScatterReportData.Empty); }
public void Calculate_ShouldReturnExpectedTrendLinePointsWithEvenCorrelation() { var data = new[] { new Dictionary <string, double> { { "first", 61 }, { "second", 1.40714182621643 } }, new Dictionary <string, double> { { "first", 75 }, { "second", 1.67869994337439 } }, new Dictionary <string, double> { { "first", 26 }, { "second", 1.86521975662936 } }, new Dictionary <string, double> { { "first", 65 }, { "second", 1.96665785281196 } }, new Dictionary <string, double> { { "first", 28 }, { "second", 1.48216295762807 } } }; var expectedTrendLine = new ScatterLine(new ScatterPoint(26, 1.6660), new ScatterPoint(75, 1.6954)); var inputData = new ScatterInputData { Data = data, AbscissaColumnName = "first", OrdinateColumnName = "second" }; AssertThatTrendLineCalculatedCorrectly(inputData, expectedTrendLine); }
public void Calculate_ShouldReturnExpectedTrendLinePointsWithPositiveCorrelation() { var data = new[] { new Dictionary <string, double> { { "first", 10 }, { "second", 1.2 }, { "third", 22.2 }, { "fourth", 10 } }, new Dictionary <string, double> { { "first", 15 }, { "second", 0.2 }, { "third", 33.879401 }, { "fourth", 20 } }, new Dictionary <string, double> { { "first", 20 }, { "second", 0.598 }, { "third", 28.59 }, { "fourth", 30 } }, new Dictionary <string, double> { { "first", 35 }, { "second", 1.4 }, { "third", 29.2 }, { "fourth", 40 } }, new Dictionary <string, double> { { "first", 40 }, { "second", 1.221 }, { "third", 28 }, { "fourth", 50 } } }; var expectedTrendLine = new ScatterLine(new ScatterPoint(10, 13.2833), new ScatterPoint(40, 49.1033)); var inputData = new ScatterInputData { Data = data, AbscissaColumnName = "first", OrdinateColumnName = "fourth" }; AssertThatTrendLineCalculatedCorrectly(inputData, expectedTrendLine); }
public void Calculate_ShouldReturnExpectedTrendLinePointsWithNegativeCorrelation() { var data = new[] { new Dictionary <string, double> { { "first", 10 }, { "second", 50 } }, new Dictionary <string, double> { { "first", 20 }, { "second", 40 } }, new Dictionary <string, double> { { "first", 30 }, { "second", 30 } }, new Dictionary <string, double> { { "first", 40 }, { "second", 20 } }, new Dictionary <string, double> { { "first", 50 }, { "second", 10 } } }; var expectedTrendLine = new ScatterLine(new ScatterPoint(10, 50), new ScatterPoint(50, 10)); var inputData = new ScatterInputData { Data = data, AbscissaColumnName = "first", OrdinateColumnName = "second" }; AssertThatTrendLineCalculatedCorrectly(inputData, expectedTrendLine); }
public void ShouldPassCorrectInputValuesToTheCalculatorWhenSuccessfulyLoadData() { ScatterInputData actualInputData = null; var expectedInputData = new ScatterInputData { Data = new[] { new Dictionary <string, double> { { "seven", 0.00052 }, { "eight", 1.000012 }, { "nine", 1.1 } }, new Dictionary <string, double> { { "seven", 0.0000010101 }, { "eight", 0.12456 }, { "nine", 1.2 } } }, AbscissaColumnName = "seven", OrdinateColumnName = "eight" }; var dataResult = DataResult.CreateSuccessful(expectedInputData.Data); FakeProvider.GetFrom(null).ReturnsForAnyArgs(dataResult); var dummyReportData = new ScatterReportData(Enumerable.Empty <ScatterPoint>(), new ScatterLine(new ScatterPoint(), new ScatterPoint())); FakeScatterReportCalculator.Calculate(Arg.Do <ScatterInputData>(input => actualInputData = input)).ReturnsForAnyArgs(dummyReportData); ViewModel.LoadDataCommand.Execute("dummy.path"); SelectColumnsForReport("seven", "eight"); ViewModel.GenerateReportDataCommand.Execute(null); actualInputData.ShouldBeEquivalentTo(expectedInputData); }
public ScatterReportData Calculate(ScatterInputData input) { var plotPoints = input.Data.Select(row => new ScatterPoint(row[input.AbscissaColumnName], row[input.OrdinateColumnName])).ToList(); var trendLine = CalculateTrendLine(plotPoints); return(new ScatterReportData(plotPoints, trendLine)); }
private void GenerateReportData() { var inputData = new ScatterInputData { Data = _currentData, AbscissaColumnName = AbscissaColumnName, OrdinateColumnName = OrdinateColumnName }; Report = _calculator.Calculate(inputData); }
public void Calculate_ShouldReturnEmptyReportWhenGivenDataIsEmpty() { var inputData = new ScatterInputData { Data = Enumerable.Empty <Dictionary <string, double> >(), AbscissaColumnName = "first", OrdinateColumnName = "second" }; var expectedReport = new ScatterReportData(Enumerable.Empty <ScatterPoint>(), new ScatterLine(new ScatterPoint(), new ScatterPoint())); var actualReport = _calculator.Calculate(inputData); actualReport.ShouldBeEquivalentTo(expectedReport); }
public void Calculate_ShouldReturnExpectedPlotPoints(ScatterInputData inputData, IEnumerable <ScatterPoint> expectedPlotPoints) { var actualReport = _calculator.Calculate(inputData); actualReport.PlotPoints.ShouldBeEquivalentTo(expectedPlotPoints); }
private void AssertThatTrendLineCalculatedCorrectly(ScatterInputData inputData, ScatterLine expectedLine) { var actualReport = _calculator.Calculate(inputData); actualReport.TrendLine.ShouldBeEquivalentTo(expectedLine, TestUtils.DoubleShouldBeEqualApproximately); }