Example #1
0
        public void correct_number_of_forecast_errors(
            short numberOfDays,
            short numberOfElementsInDay,
            int numberOfForecastsErrors)
        {
            // Arrange
            var measurementsStartDate = _startDate;
            var forecastsStartDate    = _startDate;

            var newMeasurements = GenerateMeasurements(
                _installationId,
                measurementsStartDate,
                numberOfDays,
                numberOfElementsInDay)
                                  .ToList();

            var newForecasts = GenerateForecasts(
                _installationId,
                forecastsStartDate,
                numberOfDays,
                numberOfElementsInDay)
                               .ToList();

            var forecastErrorsCalculator = new PlainForecastErrorsCalculator(_config);

            // Act
            var forecastErrors = forecastErrorsCalculator
                                 .CalculateHourly(_installationId, newMeasurements, newForecasts);

            // Assert
            Assert.Equal(numberOfForecastsErrors, forecastErrors.Count);
        }
Example #2
0
        public void returns_empty_forecast_error_list_when_non_overlapping_elements()
        {
            // Arrange
            const short numberOfMeasurements = 24;
            const short numberOfForecasts    = 24;
            // These start date values simulate a case of a two-day break in requests
            // - future measurements begin where previous forecasts end
            var measurementsStartDate = _startDate.AddHours(numberOfMeasurements);
            var forecastsStartDate    = _startDate;

            var newMeasurements = GenerateMeasurements(
                _installationId,
                measurementsStartDate,
                numberOfMeasurements)
                                  .ToList();

            var newForecasts = GenerateForecasts(
                _installationId,
                forecastsStartDate,
                numberOfForecasts)
                               .ToList();

            var forecastErrorsCalculator = new PlainForecastErrorsCalculator(_config);

            // Act
            var forecastErrors = forecastErrorsCalculator
                                 .CalculateHourly(_installationId, newMeasurements, newForecasts);

            // Assert
            Assert.Empty(forecastErrors);
        }
Example #3
0
        public void returns_correct_daily_forecast_error_when_number_of_elements_is_equal_min()
        {
            // Arrange
            const short minNumberOfMeasurements = 20;
            const short numberOfForecastErrors  = 20;
            var         startDate = _startDate;
            var         endDate   = _startDate.AddHours(numberOfForecastErrors);

            var newForecastErrors = GenerateHourlyForecastErrors(
                _installationId, startDate, numberOfForecastErrors)
                                    .ToList();

            var forecastErrorsCalculator = new PlainForecastErrorsCalculator(_config);

            // Act
            var dailyForecastErrors = forecastErrorsCalculator.CalculateDaily(
                _installationId, minNumberOfMeasurements, newForecastErrors);

            // Assert
            startDate = _startDate.ToLocalTime();
            endDate   = endDate.ToLocalTime();

            Assert.Single(dailyForecastErrors);
            Assert.Equal(ForecastErrorPeriod.Day, dailyForecastErrors[0].Period);
            Assert.Equal(_installationId, dailyForecastErrors[0].InstallationId);
            Assert.Equal(startDate, dailyForecastErrors[0].FromDateTime);
            Assert.Equal(endDate, dailyForecastErrors[0].TillDateTime);
        }
Example #4
0
        public void correct_number_of_daily_forecast_errors(
            short numberOfDays,
            short numberOfForecastErrorsInDay,
            short minNumberOfMeasurements,
            short numberOfDailyForecastsErrors)
        {
            // Arrange
            var startDate = _startDate;

            var newForecastErrors = GenerateHourlyForecastErrors(
                _installationId,
                startDate,
                numberOfDays,
                numberOfForecastErrorsInDay)
                                    .ToList();

            var forecastErrorsCalculator = new PlainForecastErrorsCalculator(_config);

            // Act
            var dailyForecastErrors = forecastErrorsCalculator.CalculateDaily(
                _installationId, minNumberOfMeasurements, newForecastErrors);

            // Assert
            Assert.Equal(numberOfDailyForecastsErrors, dailyForecastErrors.Count);
        }
Example #5
0
        [InlineData(200, 180, 240, 203, 185, 245, -2, -3, -2)]       // test round negative errors to even numbers (1.5->2)
        public void returns_correctly_calculated_all_types_of_forecast_error(
            byte airlyCaqi_Measurement,
            short airlyPm25_Measurement,
            short airlyPm10_Measurement,
            byte airlyCaqi_Forecast,
            short airlyPm25_Forecast,
            short airlyPm10_Forecast,
            short airlyCaqi_ForecastError,
            short airlyPm25_ForecastError,
            short airlyPm10_ForecastError)
        {
            // Arrange
            var measurementsStartDate = _startDate;
            var measurementsRequestDate
                = _startDate.AddDays(1).AddMinutes(RequestMinutesOffset);
            var forecastsStartDate   = _startDate;
            var forecastsRequestDate = _startDate;

            var measurement = CreateMeasurement(
                _installationId,
                measurementsStartDate,
                measurementsRequestDate,
                airlyCaqi_Measurement,
                airlyPm25_Measurement,
                airlyPm10_Measurement);

            var forecast = CreateForecast(
                _installationId,
                forecastsStartDate,
                forecastsRequestDate,
                airlyCaqi_Forecast,
                airlyPm25_Forecast,
                airlyPm10_Forecast);

            var newMeasurements = new List <AirQualityMeasurement> {
                measurement
            };
            var newForecasts = new List <AirQualityForecast> {
                forecast
            };

            var forecastErrorsCalculator = new PlainForecastErrorsCalculator(_config);

            // Act
            var forecastErrors = forecastErrorsCalculator
                                 .CalculateHourly(_installationId, newMeasurements, newForecasts);

            // Assert
            Assert.Equal(airlyCaqi_ForecastError, forecastErrors[0].AirlyCaqiPct);
            Assert.Equal(airlyPm25_ForecastError, forecastErrors[0].Pm25Pct);
            Assert.Equal(airlyPm10_ForecastError, forecastErrors[0].Pm10Pct);
        }
Example #6
0
        public void returns_empty_daily_forecast_error_list_when_number_of_elements_less_than_min()
        {
            // Arrange
            const short minNumberOfMeasurements = 20;
            const short numberOfForecastErrors  = 19;
            var         startDate = _startDate;

            var newForecastErrors = GenerateHourlyForecastErrors(
                _installationId, startDate, numberOfForecastErrors)
                                    .ToList();

            var forecastErrorsCalculator = new PlainForecastErrorsCalculator(_config);

            // Act
            var dailyForecastErrors = forecastErrorsCalculator.CalculateDaily(
                _installationId, minNumberOfMeasurements, newForecastErrors);

            // Assert
            Assert.Empty(dailyForecastErrors);
        }
Example #7
0
        public void returns_correct_forecast_error()
        {
            // Arrange
            const short numberOfDays          = 1;
            const short numberOfElementsInDay = 1;
            var         measurementsStartDate = _startDate;
            var         forecastsStartDate    = _startDate;

            var newMeasurements = GenerateMeasurements(
                _installationId,
                measurementsStartDate,
                numberOfDays,
                numberOfElementsInDay)
                                  .ToList();

            var newForecasts = GenerateForecasts(
                _installationId,
                forecastsStartDate,
                numberOfDays,
                numberOfElementsInDay)
                               .ToList();

            var forecastErrorsCalculator = new PlainForecastErrorsCalculator(_config);

            // Act
            var forecastErrors = forecastErrorsCalculator
                                 .CalculateHourly(_installationId, newMeasurements, newForecasts);

            // Assert
            var startDate = measurementsStartDate.ToLocalTime();
            var endDate   = measurementsStartDate.AddHours(1).ToLocalTime();

            Assert.Single(forecastErrors);
            Assert.Equal(ForecastErrorPeriod.Hour, forecastErrors[0].Period);
            Assert.Equal(_installationId, forecastErrors[0].InstallationId);
            Assert.Equal(startDate, forecastErrors[0].FromDateTime);
            Assert.Equal(endDate, forecastErrors[0].TillDateTime);
        }
Example #8
0
        public void returns_correct_forecast_error_list_when_overlapping_elements()
        {
            // Arrange
            const short numberOfDays = 2;
            const short numberOfMeasurementsInDay = 24;
            const short numberOfForecastsInDay    = 24;
            var         measurementsStartDate     = _startDate;
            var         forecastsStartDate        = _startDate.AddDays(1);
            var         measurementsEndDate       = _startDate.AddDays(2);

            var newMeasurements = GenerateMeasurements(
                _installationId,
                measurementsStartDate,
                numberOfDays,
                numberOfMeasurementsInDay)
                                  .ToList();

            var newForecasts = GenerateForecasts(
                _installationId,
                forecastsStartDate,
                numberOfDays,
                numberOfForecastsInDay)
                               .ToList();

            var forecastErrorsCalculator = new PlainForecastErrorsCalculator(_config);

            // Act
            var forecastErrors = forecastErrorsCalculator
                                 .CalculateHourly(_installationId, newMeasurements, newForecasts);

            // Assert
            forecastsStartDate  = forecastsStartDate.ToLocalTime();
            measurementsEndDate = measurementsEndDate.ToLocalTime();

            Assert.Equal(numberOfMeasurementsInDay, forecastErrors.Count);
            Assert.Equal(forecastsStartDate, forecastErrors[0].FromDateTime);
            Assert.Equal(measurementsEndDate, forecastErrors.Last().TillDateTime);
        }