protected const float ERROR_RATE = 1f / 60f; // Less than 1 minute of error is acceptable. private SunStudyTestsJson.RootTest LoadTestData(string in_testfilename) { string file_path = System.IO.Path.Combine(Application.dataPath, "Tests", "Data", in_testfilename); if (!System.IO.File.Exists(file_path)) { string[] guids = AssetDatabase.FindAssets(System.IO.Path.GetFileNameWithoutExtension(in_testfilename)); if (guids.Length > 0) { foreach (string guid in guids) { string path = AssetDatabase.GUIDToAssetPath(guid); if (System.IO.File.Exists(path)) { file_path = path; break; } } } } string json = System.IO.File.ReadAllText(file_path); SunStudyTestsJson.RootTest testData = JsonUtility.FromJson <SunStudyTestsJson.RootTest>(json); return(testData); }
//protected void ExecuteSolarCycleTest(float ERROR_RATE_MINUTES, string testJsonFileName) //{ // SunStudyTestsJson.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); // TimeSpan offset = new TimeSpan(utcOffsetHour, utcOffsetMinute, 0); // foreach(SunStudyTestsJson.TestValue value in testData.values) // { // if (value.timeH != 0) // continue; // For Solar tests, we can test only one hour entry per day since we are testing sunrise and sunset times. // 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); // DateTimeOffset 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.MakeDateTimeOffsetWithJDateTimeFraction(julianSunrise, solarCheckDate); // DateTimeOffset sunsetDateTime = SunStudy.MakeDateTimeOffsetWithJDateTimeFraction(julianSunset, solarCheckDate); // double sunriseTestMinutes = sunriseDateTime.Hour * 60.0 + sunriseDateTime.Minute; // double sunsetTestMinutes = sunsetDateTime.Hour * 60.0 + sunsetDateTime.Minute; // Assert.AreEqual(sunriseCheckMinutes, sunriseTestMinutes, ERROR_RATE_MINUTES, $"Sunrise Time not equal with {ERROR_RATE_MINUTES} minutes accuracy: JD Sunrise: {julianSunrise}, SPA Check JD value: {sunriseCheck}"); // Assert.AreEqual(sunsetCheckMinutes, sunsetTestMinutes, ERROR_RATE_MINUTES, $"Sunset Time not equal with {ERROR_RATE_MINUTES} minutes accuracy: JD Sunrise: {julianSunrise}, SPA Check JD value: {sunsetCheck}"); // } //} protected void ExecuteTest(float ERROR_RATE, string testJsonFileName, bool testAzimuth = true) { SunStudyTestsJson.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); TimeSpan offset = new TimeSpan(utcOffsetHour, utcOffsetMinute, 0); List <DateTimeOffset> datetimeInputs = new List <DateTimeOffset>(); List <Tuple <float, float> > outputResults = new List <Tuple <float, float> >(); foreach (SunStudyTestsJson.TestValue test in testData.values) { datetimeInputs.Add(new DateTimeOffset(test.dateY, test.dateM, test.dateD, test.timeH, test.timeM, test.timeS, offset)); outputResults.Add(Tuple.Create <float, float>(test.azimuth, test.elevation)); } GeoPositionExecuteTests(geoCoordinates, datetimeInputs, outputResults, ERROR_RATE, testAzimuth); }