star-hitran

Load line-by-line data from the HITRAN database
git clone git://git.meso-star.fr/star-hitran.git
Log | Files | Refs | README | LICENSE

commit 189884c4eee1c365f116d4b3d0eef1ffa5d2e301
parent fad88711a3c3573b9a79cfa61f23f3dd7d7a577d
Author: Vincent Forest <vincent.forest@meso-star.com>
Date:   Mon, 23 May 2022 14:47:15 +0200

Test the line view [de]serialization

Diffstat:
Msrc/test_shtr_lines.c | 160+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++----------
1 file changed, 141 insertions(+), 19 deletions(-)

diff --git a/src/test_shtr_lines.c b/src/test_shtr_lines.c @@ -237,23 +237,6 @@ test_load_failures(struct shtr* shtr) } static void -check_lines_equality - (const struct shtr_line* line1, - const struct shtr_line* line2) -{ - CHK(line1 && line2); - CHK(line1->wavenumber == line2->wavenumber); - CHK(line1->intensity == line2->intensity); - CHK(line1->gamma_air == line2->gamma_air); - CHK(line1->gamma_self == line2->gamma_self); - CHK(line1->lower_state_energy == line2->lower_state_energy); - CHK(line1->n_air == line2->n_air); - CHK(line1->delta_air == line2->delta_air); - CHK(line1->molecule_id == line2->molecule_id); - CHK(line1->isotope_id_local == line2->isotope_id_local); -} - -static void check_lines_list_equality (const struct shtr_lines_list* list1, const struct shtr_lines_list* list2) @@ -272,7 +255,7 @@ check_lines_list_equality CHK(shtr_lines_list_get(list1, &lines1) == RES_OK); CHK(shtr_lines_list_get(list2, &lines2) == RES_OK); FOR_EACH(iline, 0, nlines) { - check_lines_equality(lines1+iline, lines2+iline); + CHK(shtr_line_eq(lines1+iline, lines2+iline)); } } @@ -617,12 +600,150 @@ test_view(struct shtr* shtr) check_view(list, view, &args); CHK(shtr_lines_view_ref_put(view) == RES_OK); - CHK(shtr_lines_list_ref_put(list) == RES_OK); CHK(fclose(fp) == 0); } static void +check_lines_view_equality + (const struct shtr_lines_view* view1, + const struct shtr_lines_view* view2) +{ + size_t n1, n2; + size_t iline, nlines; + CHK(view1 && view2); + + CHK(shtr_lines_view_get_size(view1, &n1) == RES_OK); + CHK(shtr_lines_view_get_size(view2, &n2) == RES_OK); + CHK(n1 == n2); + nlines = n1; + + FOR_EACH(iline, 0, nlines) { + const struct shtr_line* line1 = NULL; + const struct shtr_line* line2 = NULL; + CHK(shtr_lines_view_get_line(view1, iline, &line1) == RES_OK); + CHK(shtr_lines_view_get_line(view2, iline, &line2) == RES_OK); + CHK(shtr_line_eq(line1, line2)); + } +} + +static void +test_view_serialization(struct shtr* shtr) +{ + const struct shtr_line l[] = { + {0.00156, 2.685e-36, 0.0695, 0.428, 399.7263, 0.79, 0.000240, 1, 5}, + {0.03406, 5.898e-37, 0.0883, 0.410, 1711.6192, 0.79, 0.000000, 1, 5}, + {0.03445, 5.263e-33, 0.0504, 0.329, 1570.0616, 0.79, 0.001940, 1, 3}, + {0.03628, 9.296e-29, 0.0704, 0.095, 522.5576, 0.81, 0.000000, 3, 0}, + {0.03671, 2.555e-37, 0.0389, 0.304, 2337.5190, 0.79, 0.002660, 1, 4}, + {0.08403, 8.190e-33, 0.0753, 0.394, 568.0017, 0.79, 0.002180, 1, 4}, + {0.08653, 5.376e-29, 0.0691, 0.083, 1061.6864, 0.76, 0.000000, 3, 0}, + {0.09642, 6.675e-37, 0.0570, 0.351, 2516.3150, 0.79, 0.000000, 1, 4}, + {0.16772, 2.456e-28, 0.0823, 0.105, 751.2922, 0.77, 0.000000, 3, 0}, + {0.18582, 5.338e-32, 0.0925, 0.428, 1717.3356, 0.79, 0.004100, 1, 3}, + {0.19368, 2.553e-32, 0.0901, 0.428, 293.8010, 0.79, 0.001260, 1, 5}, + {0.19688, 1.447e-31, 0.0901, 0.428, 292.3093, 0.79, 0.001260, 1, 4}, + {0.19757, 6.063e-29, 0.0681, 0.078, 1401.6146, 0.76, 0.000000, 3, 0}, + {0.21281, 8.238e-31, 0.0780, 0.103, 127.4733, 0.78, 0.000000, 3, 4}, + {0.21282, 5.999e-31, 0.0780, 0.103, 127.4733, 0.78, 0.000000, 3, 4}, + {0.21283, 7.737e-31, 0.0780, 0.103, 127.4733, 0.78, 0.000000, 3, 4}, + {0.21283, 6.394e-31, 0.0780, 0.103, 127.4733, 0.78, 0.000000, 3, 4}, + {0.21284, 7.260e-31, 0.0780, 0.103, 127.4732, 0.78, 0.000000, 3, 4}, + {0.21284, 6.813e-31, 0.0780, 0.103, 127.4733, 0.78, 0.000000, 3, 4}, + {0.21728, 5.928e-29, 0.0823, 0.105, 1153.4099, 0.77, 0.000000, 3, 0}, + {0.25818, 3.110e-32, 0.0539, 0.311, 1958.1248, 0.79, 0.008600, 1, 3}, + {0.26618, 1.468e-32, 0.0801, 0.378, 2118.9452, 0.79, 0.003100, 1, 3}, + {0.27091, 1.362e-35, 0.0539, 0.311, 1949.2032, 0.79, 0.008600, 1, 5}, + {0.28910, 2.058e-30, 0.0878, 0.106, 7.8611, 0.76, 0.000000, 3, 3}, + {0.29412, 8.666e-33, 0.0795, 0.378, 679.8760, 0.79, 0.004170, 1, 5}, + {0.29477, 1.457e-30, 0.0660, 0.340, 1238.7943, 0.79, 0.007260, 1, 3}, + {0.29673, 1.609e-30, 0.0773, 0.103, 138.7916, 0.78, 0.000000, 3, 3}, + {0.29673, 1.195e-30, 0.0773, 0.103, 138.7916, 0.78, 0.000000, 3, 3}, + {0.29676, 1.268e-30, 0.0773, 0.103, 138.7916, 0.78, 0.000000, 3, 3}, + {1.46280, 7.205e-26, 0.0696, 0.090, 702.3167, 0.82, 0.000000, 3, 0}, + {1.46899, 7.847e-28, 0.0704, 0.095, 1557.6290, 0.81, 0.000000, 3, 0}, + {1.47237, 1.700e-34, 0.0633, 0.297, 2389.2994, 0.79, 0.013980, 1, 4}, + {1.47273, 1.131e-32, 0.0903, 0.123, 0.7753, 0.69, 0.000814, 2, 2}, + {1.47863, 5.318e-33, 0.0925, 0.428, 2877.6872, 0.79, 0.006200, 1, 3}, + {1.48860, 1.058e-27, 0.0760, 0.102, 163.7760, 0.78, 0.000000, 3, 1}, + {1.49043, 4.787e-31, 0.0773, 0.103, 139.7879, 0.78, 0.000000, 3, 4}, + {1.49044, 3.139e-29, 0.0773, 0.103, 139.7879, 0.78, 0.000000, 3, 4}, + {1.49044, 3.332e-29, 0.0773, 0.103, 139.7880, 0.78, 0.000000, 3, 4}, + {1.49045, 2.785e-29, 0.0773, 0.103, 139.7880, 0.78, 0.000000, 3, 4}, + {1.49045, 2.625e-29, 0.0773, 0.103, 139.7880, 0.78, 0.000000, 3, 4}, + {1.49057, 5.941e-27, 0.0909, 0.106, 703.4398, 0.76, 0.000000, 3, 0}, + {1.49110, 1.537e-29, 0.0714, 0.098, 381.8992, 0.80, 0.000000, 3, 3}, + {1.49111, 1.828e-29, 0.0714, 0.098, 381.8992, 0.80, 0.000000, 3, 3}, + {1.49111, 1.648e-29, 0.0714, 0.098, 381.8992, 0.80, 0.000000, 3, 3}, + {1.49111, 1.766e-29, 0.0714, 0.098, 381.8991, 0.80, 0.000000, 3, 3}, + {1.49111, 1.706e-29, 0.0714, 0.098, 381.8991, 0.80, 0.000000, 3, 3}, + {1.49674, 1.208e-25, 0.0719, 0.102, 190.2125, 0.79, 0.000000, 3, 0}, + {1.50216, 4.971e-28, 0.0696, 0.090, 1734.9796, 0.82, 0.000000, 3, 0}, + {1.51178, 3.047e-27, 0.0766, 0.103, 1195.5580, 0.78, 0.000000, 3, 0}, + {1.51399, 1.986e-27, 0.0765, 0.104, 1129.0675, 0.77, 0.000000, 3, 0}, + {1.51442, 2.601e-34, 0.0903, 0.123, 0.7572, 0.69, 0.000814, 2, 3}, + {1.51443, 3.981e-34, 0.0903, 0.123, 0.7572, 0.69, 0.000814, 2, 3}, + {1.51443, 6.637e-35, 0.0903, 0.123, 0.7572, 0.69, 0.000814, 2, 3}, + {1.51444, 3.902e-34, 0.0903, 0.123, 0.7572, 0.69, 0.000814, 2, 3}, + {1.51445, 1.394e-33, 0.0903, 0.123, 0.7572, 0.69, 0.000814, 2, 3}, + {1.51446, 7.166e-34, 0.0903, 0.123, 0.7572, 0.69, 0.000814, 2, 3}, + {1.51446, 2.787e-34, 0.0903, 0.123, 0.7572, 0.69, 0.000814, 2, 3}, + {1.51446, 5.096e-34, 0.0903, 0.123, 0.7572, 0.69, 0.000814, 2, 3}, + {1.51448, 1.672e-34, 0.0903, 0.123, 0.7572, 0.69, 0.000814, 2, 3}, + {1.51597, 4.443e-30, 0.0704, 0.097, 463.6953, 0.81, 0.000000, 3, 3}, + {1.51600, 5.172e-30, 0.0704, 0.097, 463.6952, 0.81, 0.000000, 3, 3}, + {1.51603, 4.580e-30, 0.0704, 0.097, 463.6952, 0.81, 0.000000, 3, 3}, + {1.51605, 5.019e-30, 0.0704, 0.097, 463.6951, 0.81, 0.000000, 3, 3} + }; + const size_t nlines = sizeof(l) / sizeof(struct shtr_line); + + const double cutoff = 25; + + struct shtr_lines_view_create_args args = SHTR_LINES_VIEW_CREATE_ARGS_NULL; + struct shtr_lines_list* list = NULL; + struct shtr_lines_view* view1 = NULL; + struct shtr_lines_view* view2 = NULL; + FILE* fp = NULL; + + CHK(fp = tmpfile()); + print_lines(fp, l, nlines); + rewind(fp); + + CHK(shtr_lines_list_load_stream(shtr, fp, NULL, &list) == RES_OK); + fclose(fp); + + args.wavenumber_range[0] = 0; + args.wavenumber_range[1] = INF; + args.molecules[0].id = 1; + args.molecules[1].id = 2; + args.molecules[2].id = 3; + args.molecules[0].cutoff = cutoff; + args.molecules[1].cutoff = cutoff; + args.molecules[2].cutoff = cutoff; + args.nmolecules = 3; + args.pressure = 0; + CHK(shtr_lines_view_create(list, &args, &view1) == RES_OK); + CHK(shtr_lines_list_ref_put(list) == RES_OK); + + CHK(fp = tmpfile()); + CHK(shtr_lines_view_write(NULL, fp) == RES_BAD_ARG); + CHK(shtr_lines_view_write(view1, NULL) == RES_BAD_ARG); + CHK(shtr_lines_view_write(view1, fp) == RES_OK); + rewind(fp); + + CHK(shtr_lines_view_create_from_stream(NULL, fp, &view2) == RES_BAD_ARG); + CHK(shtr_lines_view_create_from_stream(shtr, NULL, &view2) == RES_BAD_ARG); + CHK(shtr_lines_view_create_from_stream(shtr, fp, NULL) == RES_BAD_ARG); + CHK(shtr_lines_view_create_from_stream(shtr, fp, &view2) == RES_OK); + fclose(fp); + + check_lines_view_equality(view1, view2); + + CHK(shtr_lines_view_ref_put(view1) == RES_OK); + CHK(shtr_lines_view_ref_put(view2) == RES_OK); +} + +static void check_line(const struct shtr_line* ln) { /* Check NaN */ @@ -676,6 +797,7 @@ main(int argc, char** argv) test_load_failures(shtr); test_serialization(shtr); test_view(shtr); + test_view_serialization(shtr); FOR_EACH(i, 1, argc) { char buf[64];