Пример #1
0
        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);
        }
Пример #5
0
        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));
        }
Пример #7
0
        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);
        }