From d9c29adb97d37db06b057c76cba5b714e7affcab Mon Sep 17 00:00:00 2001 From: Don Cross Date: Thu, 14 May 2020 09:00:52 -0400 Subject: [PATCH] C lunar eclipse unit test now generates CSV output file. Write eclipse/c_le_stats.csv that contains all the error values for each lunar eclipse calculation. This helped me figure out the main source of lunar eclipse error was discrepancy with Delta-T values in the future. --- generate/ctest.c | 20 ++++++++++++++++++-- generate/eclipse/.gitignore | 1 + 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/generate/ctest.c b/generate/ctest.c index e5b8df00..b6cf48c6 100644 --- a/generate/ctest.c +++ b/generate/ctest.c @@ -2508,7 +2508,9 @@ static void PrintTime(astro_time_t time) static int LunarEclipseTest(void) { const char *filename = "eclipse/lunar_eclipse.txt"; + const char *statsFileName = "eclipse/c_le_stats.csv"; FILE *infile = NULL; + FILE *outfile = NULL; int lnum = 0; int error = 1; char line[100]; @@ -2520,15 +2522,20 @@ static int LunarEclipseTest(void) double diff_days; int valid = 0; int skip_count = 0; - const double diff_limit = 6.853; + const double diff_limit = 2.0; infile = fopen(filename, "rt"); if (infile == NULL) FAIL("C LunarEclipseTest: Cannot open input file: %s\n", filename); + outfile = fopen(statsFileName, "wt"); + if (outfile == NULL) + FAIL("C LunarEclipseTest: Cannot open output stats file: %s\n", statsFileName); + eclipse = Astronomy_SearchLunarEclipse(Astronomy_MakeTime(1701, 1, 1, 0, 0, 0.0)); CHECK_STATUS(eclipse); + fprintf(outfile, "\"utc\",\"center\",\"partial\",\"total\"\n"); while (fgets(line, sizeof(line), infile)) { ++lnum; @@ -2539,8 +2546,9 @@ static int LunarEclipseTest(void) if (strlen(line) < 17) FAIL("C LunarEclipseTest(%s line %d): line is too short.\n", filename, lnum); + line[17] = '\0'; CHECK(ParseDate(line, &peak_time)); - if (2 != sscanf(line+17, "%lf %lf", &partial_minutes, &total_minutes)) + if (2 != sscanf(line+18, "%lf %lf", &partial_minutes, &total_minutes)) FAIL("C LunarEclipseTest(%s line %d): invalid data format.\n", filename, lnum); /* verify that the calculated eclipse semi-durations are consistent with the kind */ @@ -2579,6 +2587,13 @@ static int LunarEclipseTest(void) continue; } + fprintf(outfile, "\"%s\",%lf,%lf,%lf\n", + line, /* was already truncated at offset [17] above, so now has only UTC */ + diff_days * (24.0 * 60.0), + eclipse.sd_partial - partial_minutes, + eclipse.sd_total - total_minutes + ); + diff_minutes = (24.0 * 60.0) * fabs(diff_days); sum_diff_minutes += diff_minutes; ++diff_count; @@ -2632,6 +2647,7 @@ static int LunarEclipseTest(void) error = 0; fail: if (infile != NULL) fclose(infile); + if (outfile != NULL) fclose(outfile); return error; } diff --git a/generate/eclipse/.gitignore b/generate/eclipse/.gitignore index 0bff5427..36ac7f50 100644 --- a/generate/eclipse/.gitignore +++ b/generate/eclipse/.gitignore @@ -1,2 +1,3 @@ lunar_eclipse.txt solar_eclipse.txt +*.csv