public void SunStudyMurmanskAlwaysNightTimeDuringWinter2020() { double latitude = 68.971557; double longitude = 33.070630; DateTimeOffset alertWinterDateDayAtNoon = new DateTimeOffset(2020, 1, 2, 12, 0, 0, new TimeSpan(-5, 0, 0)); float testAlwaysNightRatio = SunStudy.CalculateSolarDimming(alertWinterDateDayAtNoon, latitude, longitude, 16 /* fake altitude */); Debug.Assert(testAlwaysNightRatio == 0); }
public void SunStudyAntarticaDavisAlwaysNightTimeDuringWinter2019() { double latitude = -68.682687; double longitude = 79.295626; DateTimeOffset davisWinterDateNightAtNoon = new DateTimeOffset(2019, 06, 21, 12, 0, 0, new TimeSpan(-4, 0, 0)); float testAlwayNightRatio = SunStudy.CalculateSolarDimming(davisWinterDateNightAtNoon, latitude, longitude, 1 /* fake altitude */); Debug.Assert(testAlwayNightRatio == 0); }
public void SunStudyAlertAlwaysNightTimeDuringWinter2020() { double latitude = 82.496299; double longitude = -62.359018; DateTimeOffset alertWinterDateDayAtNoon = new DateTimeOffset(2020, 1, 2, 12, 0, 0, new TimeSpan(-5, 0, 0)); float testAlwaysNightRatio = SunStudy.CalculateSolarDimming(alertWinterDateDayAtNoon, latitude, longitude, 16 /* fake altitude */); Debug.Assert(testAlwaysNightRatio == 0); }
public void SunStudyAlertAlwaysNightTimeDuringWinter2019() { double latitude = 82.496299; double longitude = -62.359018; var alertWinterDateDayAtNoon = new DateTimeOffset(2019, 12, 3, 0, 01, 0, new TimeSpan(-5, 0, 0)); float testAlwaysNightRatio = SunStudy.CalculateSolarDimming(alertWinterDateDayAtNoon, latitude, longitude, 16); // using a fake altitude Debug.Assert(testAlwaysNightRatio == 0); }
public static void SetSunStudyData(SunStudy sunStudy, SunStudyData sunStudyData) { sunStudy.MinuteOfDay = sunStudyData.timeOfDay; sunStudy.DayOfYear = sunStudyData.timeOfYear; sunStudy.UtcOffset = sunStudyData.utcOffset / 100f; sunStudy.CoordLatitude = sunStudyData.latitude; sunStudy.CoordLongitude = sunStudyData.longitude; sunStudy.NorthAngle = sunStudyData.northAngle; sunStudy.Azimuth = sunStudyData.azimuth; sunStudy.Altitude = sunStudyData.altitude; sunStudy.PlacementMode = sunStudyData.isStaticMode ? SunPlacementMode.Static: SunPlacementMode.Geographical; }
public void SunStudyAntarticaDavisAlwaysDayTimeDuringSummer2020() { double latitude = -68.682687; double longitude = 79.295626; DateTimeOffset davisSummerDateAt2AM = new DateTimeOffset(2020, 01, 11, 2, 0, 0, new TimeSpan(13, 0, 0)); float testAlwaysDay = SunStudy.CalculateSolarDimming(davisSummerDateAt2AM, latitude, longitude, 1 /* fake altitude */); Debug.Assert(testAlwaysDay == 1); DateTimeOffset davisSummerDateAt10PM = new DateTimeOffset(2020, 01, 11, 22, 0, 0, new TimeSpan(13, 0, 0)); testAlwaysDay = SunStudy.CalculateSolarDimming(davisSummerDateAt10PM, latitude, longitude, 1 /* fake altitude */); Debug.Assert(testAlwaysDay == 1); }
public void SunStudyMurmanskAlwaysDayTimeDuringSummer2019() { double latitude = 68.971557; double longitude = 33.070630; DateTimeOffset alertSummerDateDayAt2AM = new DateTimeOffset(2019, 06, 21, 2, 0, 0, new TimeSpan(-4, 0, 0)); float testAlwaysDay = SunStudy.CalculateSolarDimming(alertSummerDateDayAt2AM, latitude, longitude, 16 /* fake altitude */); Debug.Assert(testAlwaysDay == 1); DateTimeOffset alertSummerDateDayAt10PM = new DateTimeOffset(2019, 06, 21, 22, 0, 0, new TimeSpan(-4, 0, 0)); testAlwaysDay = SunStudy.CalculateSolarDimming(alertSummerDateDayAt10PM, latitude, longitude, 16 /* fake altitude */); Debug.Assert(testAlwaysDay == 1); }
public void SunStudyAlertAlwaysDayTimeDuringSummer2019() { double latitude = 82.496299; double longitude = -62.359018; DateTimeOffset alertSummerDateDayAt2AM = new DateTimeOffset(2019, 06, 21, 2, 0, 0, new TimeSpan(-4, 0, 0)); float testAlwaysDay = SunStudy.CalculateSolarDimming(alertSummerDateDayAt2AM, latitude, longitude, 16 /* fake altitude */); Debug.Assert(testAlwaysDay == 1); DateTimeOffset alertSummerDateDayAt10PM = new DateTimeOffset(2019, 06, 21, 22, 0, 0, new TimeSpan(-4, 0, 0)); testAlwaysDay = SunStudy.CalculateSolarDimming(alertSummerDateDayAt10PM, latitude, longitude, 16 /* fake altitude */); Debug.Assert(testAlwaysDay == 1); }
public void SunStudyAntarticaDavisAlwaysDayTimeDuringSummer2019() { double latitude = -68.682687; double longitude = 79.295626; var davisSummerDateAt2AM = new DateTimeOffset(2019, 12, 15, 2, 0, 0, new TimeSpan(13, 0, 0)); float testAlwaysDay = SunStudy.CalculateSolarDimming(davisSummerDateAt2AM, latitude, longitude, 1); // using a fake altitude Debug.Assert(testAlwaysDay == 1); var davisSummerDateAt10PM = new DateTimeOffset(2019, 12, 27, 22, 0, 0, new TimeSpan(13, 0, 0)); testAlwaysDay = SunStudy.CalculateSolarDimming(davisSummerDateAt10PM, latitude, longitude, 1); // using a fake altitude Debug.Assert(testAlwaysDay == 1); }
protected void ExecuteSolarCycleTest(float errorThresholdMinutes, string testJsonFileName) { SunStudyTestJson.RootTest testData = LoadTestData(testJsonFileName); var geoCoordinates = Tuple.Create <float, float>(testData.latitude, testData.longitude); int utcOffsetHour = (int)testData.utcOffset; int utcOffsetMinute = (int)((testData.utcOffset - utcOffsetHour) * 60f); var offset = new TimeSpan(utcOffsetHour, utcOffsetMinute, 0); foreach (var value in testData.values) { if (value.timeH != 0) { // For solar tests, we can test only one hour entry per day since we are testing sunrise and sunset times. continue; } double sunriseCheck = value.localSunriseHourFraction; int sunriseCheckHour = (int)sunriseCheck; double sunriseCheckMinutes = sunriseCheckHour * 60.0 + (sunriseCheck - sunriseCheckHour); double sunsetCheck = value.localSunsetHourFraction; int sunsetCheckHour = (int)sunsetCheck; double sunsetCheckMinutes = sunsetCheckHour * 60.0 + (sunsetCheck - sunsetCheckHour); var solarCheckDate = new DateTimeOffset(value.dateY, value.dateM, value.dateD, 0, 0, 0, offset); (double julianSunrise, double julianSunset, double transit) = SunStudy.GetJulianDatesForSunriseAndSunset(solarCheckDate, geoCoordinates.Item1, geoCoordinates.Item2); DateTimeOffset sunriseDateTime = SunStudy.MakeDateTimeOffsetWithJulianDateTimeFraction(julianSunrise, solarCheckDate); DateTimeOffset sunsetDateTime = SunStudy.MakeDateTimeOffsetWithJulianDateTimeFraction(julianSunset, solarCheckDate); double sunriseTestMinutes = sunriseDateTime.Hour * 60.0 + sunriseDateTime.Minute; double sunsetTestMinutes = sunsetDateTime.Hour * 60.0 + sunsetDateTime.Minute; Assert.AreEqual(sunriseCheckMinutes, sunriseTestMinutes, errorThresholdMinutes, $"Sunrise time not equal with {errorThresholdMinutes} minutes accuracy: JD Sunrise = {julianSunrise}, SPA Check JD value = {sunriseCheck}"); Assert.AreEqual(sunsetCheckMinutes, sunsetTestMinutes, errorThresholdMinutes, $"Sunset time not equal with {errorThresholdMinutes} minutes accuracy: JD Sunrise = {julianSunrise}, SPA Check JD value = {sunsetCheck}"); } }
private void GeoPositionExecuteTests( Tuple <float, float> geoCoordinates, // latitude, longitude List <DateTimeOffset> dateTimeInputList, List <Tuple <float, float> > expectedOutputsList, // azimuth, elevation (uncorrected) float ERROR_RATE, bool testAzimuth) { Assert.IsTrue(dateTimeInputList.Count == expectedOutputsList.Count); for (int testCaseIndex = 0; testCaseIndex < dateTimeInputList.Count; ++testCaseIndex) { DateTimeOffset dt = dateTimeInputList[testCaseIndex]; var expectedResult = expectedOutputsList[testCaseIndex]; (float resultAzimuth, float resultAltitude) = SunStudy.CalculateSunPosition(dt, geoCoordinates.Item1, geoCoordinates.Item2); if (testAzimuth) { Assert.AreEqual(expectedResult.Item1, resultAzimuth, ERROR_RATE, $"Azimuth not equal with {ERROR_RATE} acc.: TestH: {dt.Hour}"); } else { Assert.AreEqual(expectedResult.Item2, resultAltitude, ERROR_RATE, $"Elevation not equal with {ERROR_RATE} acc.: TestH: {dt.Hour}"); } } }
void ExecuteTest(float errorThreshold, string testJsonFileName, bool testAzimuth) { SunStudyTestJson.RootTest testData = LoadTestData(testJsonFileName); var geoCoordinates = Tuple.Create <float, float>(testData.latitude, testData.longitude); int utcOffsetHour = (int)testData.utcOffset; int utcOffsetMinute = (int)((testData.utcOffset - utcOffsetHour) * 60f); var offset = new TimeSpan(utcOffsetHour, utcOffsetMinute, 0); var dateTimeInputs = new List <DateTimeOffset>(); var expectedOutputs = new List <Tuple <float, float> >(); foreach (var test in testData.values) { dateTimeInputs.Add(new DateTimeOffset(test.dateY, test.dateM, test.dateD, test.timeH, test.timeM, test.timeS, offset)); expectedOutputs.Add(Tuple.Create <float, float>(test.azimuth, test.elevation)); } Assert.IsTrue(dateTimeInputs.Count == expectedOutputs.Count); for (int testCaseIndex = 0; testCaseIndex < dateTimeInputs.Count; ++testCaseIndex) { DateTimeOffset dateTime = dateTimeInputs[testCaseIndex]; var expectedResult = expectedOutputs[testCaseIndex]; (float resultAzimuth, float resultAltitude) = SunStudy.CalculateSunPosition(dateTime, geoCoordinates.Item1, geoCoordinates.Item2); if (testAzimuth) { Assert.AreEqual(expectedResult.Item1, resultAzimuth, errorThreshold, $"Azimuth not equal with {errorThreshold} accuracy at Hour {dateTime.Hour}."); } else { Assert.AreEqual(expectedResult.Item2, resultAltitude, errorThreshold, $"Elevation not equal with {errorThreshold} accuracy at Hour {dateTime.Hour}."); } } }