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); }
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); }
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); }
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); }
[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); }
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); }
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); }
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); }