commit 9f23dda14b1405092614e70a9778e723a14ed28d
parent ca2e82b49f1c7a0f6044bfdc2697dd3beaa2cad3
Author: Vincent Forest <vincent.forest@meso-star.com>
Date: Wed, 9 Mar 2022 14:27:41 +0100
Test the shtr_lines_view functions
Diffstat:
| M | src/test_shtr_lines.c | | | 364 | ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------------- |
1 file changed, 306 insertions(+), 58 deletions(-)
diff --git a/src/test_shtr_lines.c b/src/test_shtr_lines.c
@@ -36,6 +36,7 @@ print_lines
FOR_EACH(i, 0, nlines) {
fprintf(fp,
"%2d%1d%12.6f%10.3e 0.000E-00.%04d%5.3f%10.4f%4.2f%8.6f"
+ /* Dummy remaining data */
" 0 0 0" /* Global upper quanta */
" 0 0 0" /* Global upper quanta */
" 5 5 0 " /* Local upper quanta */
@@ -60,141 +61,386 @@ print_lines
static int
line_eq
- (const struct shtr_line* tr0,
- const struct shtr_line* tr1)
+ (const struct shtr_line* l0,
+ const struct shtr_line* l1)
{
- CHK(tr0 && tr1);
- return tr0->wavenumber == tr1->wavenumber
- && tr0->intensity == tr1->intensity
- && tr0->gamma_air == tr1->gamma_air
- && tr0->gamma_self == tr1->gamma_self
- && tr0->lower_state_energy == tr1->lower_state_energy
- && tr0->n_air == tr1->n_air
- && tr0->delta_air == tr1->delta_air
- && tr0->molecule_id == tr1->molecule_id
- && tr0->isotope_id_local == tr1->isotope_id_local;
+ CHK(l0 && l1);
+ return l0->wavenumber == l1->wavenumber
+ && l0->intensity == l1->intensity
+ && l0->gamma_air == l1->gamma_air
+ && l0->gamma_self == l1->gamma_self
+ && l0->lower_state_energy == l1->lower_state_energy
+ && l0->n_air == l1->n_air
+ && l0->delta_air == l1->delta_air
+ && l0->molecule_id == l1->molecule_id
+ && l0->isotope_id_local == l1->isotope_id_local;
}
static void
test_load(struct shtr* shtr)
{
- const struct shtr_line lines[] = {
+ const struct shtr_line l[] = {
{0.000134, 2.672E-38, 0.0533, 0.410, 608.4727, 0.79, 0.000060, 1, 4},
{0.000379, 1.055E-39, 0.0418, 0.329,1747.9686, 0.79, 0.000110, 1, 5},
{0.000448, 5.560E-38, 0.0490, 0.364,1093.0269, 0.79, 0.000060, 1, 4},
{0.000686, 1.633E-36, 0.0578, 0.394, 701.1162, 0.79, 0.000180, 1, 4},
{0.000726, 6.613E-33, 0.0695, 0.428, 402.3295, 0.79, 0.000240, 1, 3}
};
- const size_t nlines =
- sizeof(lines) / sizeof(struct shtr_line);
+ const size_t nlines = sizeof(l) / sizeof(struct shtr_line);
- struct shtr_lines_list* trs = NULL;
- const struct shtr_line* trs_list = NULL;
+ struct shtr_lines_list* list = NULL;
+ const struct shtr_line* lines = NULL;
const char* filename = "test_lines.txt";
FILE* fp = NULL;
size_t i, n;
CHK(fp = fopen(filename, "w+"));
- print_lines(fp, lines, nlines);
+ print_lines(fp, l, nlines);
rewind(fp);
- CHK(shtr_lines_list_load_stream(NULL, fp, NULL, &trs) == RES_BAD_ARG);
- CHK(shtr_lines_list_load_stream(shtr, NULL, NULL, &trs) == RES_BAD_ARG);
+ CHK(shtr_lines_list_load_stream(NULL, fp, NULL, &list) == RES_BAD_ARG);
+ CHK(shtr_lines_list_load_stream(shtr, NULL, NULL, &list) == RES_BAD_ARG);
CHK(shtr_lines_list_load_stream(shtr, fp, NULL, NULL) == RES_BAD_ARG);
- CHK(shtr_lines_list_load_stream(shtr, fp, NULL, &trs) == RES_OK);
+ CHK(shtr_lines_list_load_stream(shtr, fp, NULL, &list) == RES_OK);
CHK(shtr_lines_list_get_size(NULL, &n) == RES_BAD_ARG);
- CHK(shtr_lines_list_get_size(trs, NULL) == RES_BAD_ARG);
- CHK(shtr_lines_list_get_size(trs, &n) == RES_OK);
+ CHK(shtr_lines_list_get_size(list, NULL) == RES_BAD_ARG);
+ CHK(shtr_lines_list_get_size(list, &n) == RES_OK);
CHK(n == nlines);
- CHK(shtr_lines_list_get(NULL, &trs_list) == RES_BAD_ARG);
- CHK(shtr_lines_list_get(trs, NULL) == RES_BAD_ARG);
- CHK(shtr_lines_list_get(trs, &trs_list) == RES_OK);
- FOR_EACH(i, 0, n) CHK(line_eq(trs_list+i, lines+i));
+ CHK(shtr_lines_list_get(NULL, &lines) == RES_BAD_ARG);
+ CHK(shtr_lines_list_get(list, NULL) == RES_BAD_ARG);
+ CHK(shtr_lines_list_get(list, &lines) == RES_OK);
+ FOR_EACH(i, 0, n) CHK(line_eq(lines+i, l+i));
CHK(shtr_lines_list_ref_get(NULL) == RES_BAD_ARG);
- CHK(shtr_lines_list_ref_get(trs) == RES_OK);
+ CHK(shtr_lines_list_ref_get(list) == RES_OK);
CHK(shtr_lines_list_ref_put(NULL) == RES_BAD_ARG);
- CHK(shtr_lines_list_ref_put(trs) == RES_OK);
- CHK(shtr_lines_list_ref_put(trs) == RES_OK);
+ CHK(shtr_lines_list_ref_put(list) == RES_OK);
+ CHK(shtr_lines_list_ref_put(list) == RES_OK);
CHK(fclose(fp) == 0);
- CHK(shtr_lines_list_load(NULL, filename, &trs) == RES_BAD_ARG);
- CHK(shtr_lines_list_load(shtr, NULL, &trs) == RES_BAD_ARG);
+ CHK(shtr_lines_list_load(NULL, filename, &list) == RES_BAD_ARG);
+ CHK(shtr_lines_list_load(shtr, NULL, &list) == RES_BAD_ARG);
CHK(shtr_lines_list_load(shtr, filename, NULL) == RES_BAD_ARG);
- CHK(shtr_lines_list_load(shtr, filename, &trs) == RES_OK);
+ CHK(shtr_lines_list_load(shtr, filename, &list) == RES_OK);
- CHK(shtr_lines_list_get_size(trs, &n) == RES_OK);
+ CHK(shtr_lines_list_get_size(list, &n) == RES_OK);
CHK(n == nlines);
- CHK(shtr_lines_list_get(trs, &trs_list) == RES_OK);
- FOR_EACH(i, 0, n) CHK(line_eq(trs_list+i, lines+i));
+ CHK(shtr_lines_list_get(list, &lines) == RES_OK);
+ FOR_EACH(i, 0, n) CHK(line_eq(lines+i, l+i));
- CHK(shtr_lines_list_ref_put(trs) == RES_OK);
+ CHK(shtr_lines_list_ref_put(list) == RES_OK);
}
static void
test_line
(struct shtr* shtr, const struct shtr_line* ln, const res_T res)
{
- struct shtr_lines_list* trs = NULL;
+ struct shtr_lines_list* list = NULL;
FILE* fp = NULL;
CHK(fp = tmpfile());
print_lines(fp, ln, 1);
rewind(fp);
- CHK(shtr_lines_list_load_stream(shtr, fp, NULL, &trs) == res);
+ CHK(shtr_lines_list_load_stream(shtr, fp, NULL, &list) == res);
CHK(fclose(fp) == 0);
- if(res == RES_OK) CHK(shtr_lines_list_ref_put(trs) == RES_OK);
+ if(res == RES_OK) CHK(shtr_lines_list_ref_put(list) == RES_OK);
}
static void
test_load_failures(struct shtr* shtr)
{
- const struct shtr_line tr_ref = {
+ const struct shtr_line ln_ref = {
0.000134, 2.672E-38, 0.0533, 0.410, 608.4727, 0.79, 0.000060, 1, 4,
};
struct shtr_line ln;
+ struct shtr_lines_list* list = NULL;
+ FILE* fp = NULL;
/* Check that the reference line is valid */
- test_line(shtr, &tr_ref, RES_OK);
+ test_line(shtr, &ln_ref, RES_OK);
/* Invalid wavenumber */
- ln = tr_ref; ln.wavenumber = 0;
+ ln = ln_ref; ln.wavenumber = 0;
test_line(shtr, &ln, RES_BAD_ARG);
/* Invalid intensity */
- ln = tr_ref; ln.intensity = 0;
+ ln = ln_ref; ln.intensity = 0;
test_line(shtr, &ln, RES_BAD_ARG);
/* Invalid gamma air */
- ln = tr_ref; ln.gamma_air = -1;
+ ln = ln_ref; ln.gamma_air = -1;
test_line(shtr, &ln, RES_BAD_ARG);
/* Invalid gamma self */
- ln = tr_ref; ln.gamma_self = -1;
+ ln = ln_ref; ln.gamma_self = -1;
test_line(shtr, &ln, RES_BAD_ARG);
/* Unavailable lower state energy */
- ln = tr_ref; ln.lower_state_energy = -1;
+ ln = ln_ref; ln.lower_state_energy = -1;
test_line(shtr, &ln, RES_OK);
/* Invalid lower state energy */
- ln = tr_ref; ln.lower_state_energy = -2;
+ ln = ln_ref; ln.lower_state_energy = -2;
test_line(shtr, &ln, RES_BAD_ARG);
/* Invalid molecule id */
- ln = tr_ref; ln.molecule_id = -1;
+ ln = ln_ref; ln.molecule_id = -1;
test_line(shtr, &ln, RES_BAD_ARG);
/* Bad file formatting */
- ln = tr_ref; ln.molecule_id = 100;
+ ln = ln_ref; ln.molecule_id = 100;
test_line(shtr, &ln, RES_BAD_ARG);
- ln = tr_ref; ln.isotope_id_local = 10;
+ ln = ln_ref; ln.isotope_id_local = 10;
test_line(shtr, &ln, RES_BAD_ARG);
+
+ /* Lines are not correctly sorted */
+ CHK(fp = tmpfile());
+ ln = ln_ref;
+ print_lines(fp, &ln, 1);
+ ln.wavenumber -= 1e-4;
+ print_lines(fp, &ln, 1);
+ rewind(fp);
+ CHK(shtr_lines_list_load_stream(shtr, fp, NULL, &list) == RES_BAD_ARG);
+ CHK(fclose(fp) == 0);
+}
+
+static void
+check_view
+ (const struct shtr_lines_list* list,
+ const struct shtr_lines_view* view,
+ const struct shtr_lines_view_create_args* args)
+{
+ const struct shtr_line* lines = NULL;
+ size_t i, n;
+ size_t nlines_selected = 0;
+ CHK(list && view && args);
+
+ CHK(shtr_lines_list_get_size(list, &n) == RES_OK);
+ CHK(shtr_lines_list_get(list, &lines) == RES_OK);
+ FOR_EACH(i, 0, n) {
+ const struct shtr_line* line = NULL;
+ size_t imolecule;
+
+ /* Discard lines that are out of ranges */
+ if(lines[i].wavenumber < args->wavenumber_range[0]) continue;
+ if(lines[i].wavenumber > args->wavenumber_range[1]) break;
+
+ /* Discard lines that does not belongs to a listed molecule */
+ FOR_EACH(imolecule, 0, args->nmolecules) {
+ if(lines[i].molecule_id == args->molecules[imolecule]) break;
+ }
+ if(imolecule >= args->nmolecules) continue;
+
+ CHK(shtr_lines_view_get_line(view, nlines_selected, &line) == RES_OK);
+ CHK(line_eq(line, lines+i));
+ nlines_selected += 1;
+ }
+
+ CHK(shtr_lines_view_get_size(view, &n) == RES_OK);
+ CHK(n == nlines_selected);
+}
+
+static void
+test_view(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);
+
+ struct shtr_lines_view_create_args args = SHTR_LINES_VIEW_CREATE_ARGS_NULL;
+ struct shtr_lines_list* list = NULL;
+ struct shtr_lines_view* view = NULL;
+ const struct shtr_line* line = NULL;
+ const char* filename = "test_lines.txt";
+ FILE* fp = NULL;
+ size_t i, n;
+
+ CHK(fp = fopen(filename, "w+"));
+ print_lines(fp, l, nlines);
+ rewind(fp);
+
+ CHK(shtr_lines_list_load_stream(shtr, fp, NULL, &list) == RES_OK);
+
+ args.wavenumber_range[0] = 0;
+ args.wavenumber_range[1] = INF;
+ args.molecules[0] = 1;
+ args.molecules[1] = 2;
+ args.molecules[2] = 3;
+ args.nmolecules = 3;
+ CHK(shtr_lines_view_create(NULL, &args, &view) == RES_BAD_ARG);
+ CHK(shtr_lines_view_create(list, NULL, &view) == RES_BAD_ARG);
+ CHK(shtr_lines_view_create(list, &args, NULL) == RES_BAD_ARG);
+ CHK(shtr_lines_view_create(list, &args, &view) == RES_OK);
+
+ CHK(shtr_lines_view_get_size(NULL, &n) == RES_BAD_ARG);
+ CHK(shtr_lines_view_get_size(view, NULL) == RES_BAD_ARG);
+ CHK(shtr_lines_view_get_size(view, &n) == RES_OK);
+ CHK(n == nlines);
+
+ CHK(shtr_lines_view_get_line(NULL, 0, &line) == RES_BAD_ARG);
+ CHK(shtr_lines_view_get_line(view, n, &line) == RES_BAD_ARG);
+ CHK(shtr_lines_view_get_line(view, 0, NULL) == RES_BAD_ARG);
+
+ FOR_EACH(i, 0, n) {
+ CHK(shtr_lines_view_get_line(view, i, &line) == RES_OK);
+ CHK(line_eq(line, l+i));
+ }
+
+ CHK(shtr_lines_view_ref_get(NULL) == RES_BAD_ARG);
+ CHK(shtr_lines_view_ref_get(view) == RES_OK);
+ CHK(shtr_lines_view_ref_put(NULL) == RES_BAD_ARG);
+ CHK(shtr_lines_view_ref_put(view) == RES_OK);
+ CHK(shtr_lines_view_ref_put(view) == RES_OK);
+
+ args.wavenumber_range[0] = 1;
+ args.wavenumber_range[1] = 0;
+ CHK(shtr_lines_view_create(list, &args, &view) == RES_BAD_ARG);
+
+ args.wavenumber_range[0] = 0;
+ args.wavenumber_range[1] = 1;
+ args.nmolecules = 0;
+ CHK(shtr_lines_view_create(list, &args, &view) == RES_OK);
+ CHK(shtr_lines_view_get_size(view, &n) == RES_OK);
+ CHK(n == 0);
+ CHK(shtr_lines_view_ref_put(view) == RES_OK);
+
+ args.wavenumber_range[0] = 2;
+ args.wavenumber_range[1] = INF;
+ args.nmolecules = 3;
+ CHK(shtr_lines_view_create(list, &args, &view) == RES_OK);
+ CHK(shtr_lines_view_get_size(view, &n) == RES_OK);
+ CHK(n == 0);
+ CHK(shtr_lines_view_ref_put(view) == RES_OK);
+
+ args.wavenumber_range[0] = 0;
+ args.wavenumber_range[1] = 1.50;
+ CHK(shtr_lines_view_create(list, &args, &view) == RES_OK);
+ check_view(list, view, &args);
+ CHK(shtr_lines_view_ref_put(view) == RES_OK);
+
+ args.wavenumber_range[0] = 1.50;
+ args.wavenumber_range[1] = 1.51603;
+ CHK(shtr_lines_view_create(list, &args, &view) == RES_OK);
+ check_view(list, view, &args);
+ CHK(shtr_lines_view_ref_put(view) == RES_OK);
+
+ args.wavenumber_range[0] = 0.29477;
+ args.wavenumber_range[1] = 0.29477;
+ CHK(shtr_lines_view_create(list, &args, &view) == RES_OK);
+ CHK(shtr_lines_view_get_size(view, &n) == RES_OK);
+ CHK(n == 1);
+ check_view(list, view, &args);
+ CHK(shtr_lines_view_ref_put(view) == RES_OK);
+
+ args.wavenumber_range[0] = 0.09642;
+ args.wavenumber_range[1] = 0.21283;
+ CHK(shtr_lines_view_create(list, &args, &view) == RES_OK);
+ CHK(shtr_lines_view_get_size(view, &n) == RES_OK);
+ CHK(n == 10);
+ check_view(list, view, &args);
+ CHK(shtr_lines_view_ref_put(view) == RES_OK);
+
+ args.molecules[0] = 2;
+ args.nmolecules = 1;
+ CHK(shtr_lines_view_create(list, &args, &view) == RES_OK);
+ CHK(shtr_lines_view_get_size(view, &n) == RES_OK);
+ CHK(n == 0);
+ CHK(shtr_lines_view_ref_put(view) == RES_OK);
+
+ args.molecules[1] = 1;
+ args.nmolecules = 2;
+ CHK(shtr_lines_view_create(list, &args, &view) == RES_OK);
+ CHK(shtr_lines_view_get_size(view, &n) == RES_OK);
+ CHK(n == 4);
+ check_view(list, view, &args);
+ CHK(shtr_lines_view_ref_put(view) == RES_OK);
+
+ args.molecules[1] = 3;
+ args.nmolecules = 2;
+ CHK(shtr_lines_view_create(list, &args, &view) == RES_OK);
+ CHK(shtr_lines_view_get_size(view, &n) == RES_OK);
+ CHK(n == 6);
+ check_view(list, view, &args);
+ CHK(shtr_lines_view_ref_put(view) == RES_OK);
+
+ args.wavenumber_range[0] = 0;
+ args.wavenumber_range[1] = INF;
+ args.molecules[0] = 2;
+ args.nmolecules = 1;
+ CHK(shtr_lines_view_create(list, &args, &view) == RES_OK);
+ 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
@@ -221,18 +467,18 @@ check_line(const struct shtr_line* ln)
static void
test_load_file(struct shtr* shtr, const char* path)
{
- struct shtr_lines_list* trs = NULL;
- const struct shtr_line* trs_list = NULL;
+ struct shtr_lines_list* list = NULL;
+ const struct shtr_line* lines = NULL;
size_t i, n;
CHK(path);
printf("Loading `%s'.\n", path);
- CHK(shtr_lines_list_load(shtr, path, &trs) == RES_OK);
- CHK(shtr_lines_list_get_size(trs, &n) == RES_OK);
+ CHK(shtr_lines_list_load(shtr, path, &list) == RES_OK);
+ CHK(shtr_lines_list_get_size(list, &n) == RES_OK);
printf(" #lines: %lu\n", n);
- CHK(shtr_lines_list_get(trs, &trs_list) == RES_OK);
- FOR_EACH(i, 0, n) check_line(trs_list+i);
- CHK(shtr_lines_list_ref_put(trs) == RES_OK);
+ CHK(shtr_lines_list_get(list, &lines) == RES_OK);
+ FOR_EACH(i, 0, n) check_line(lines+i);
+ CHK(shtr_lines_list_ref_put(list) == RES_OK);
}
int
@@ -248,6 +494,8 @@ main(int argc, char** argv)
test_load(shtr);
test_load_failures(shtr);
+ test_view(shtr);
+
FOR_EACH(i, 1, argc) {
char buf[64];
struct time t0, t1;