commit 2751f0b5d60e3d864e93ccc9246708978348d3a8
parent 7b169fe717398678476f6a2057518a1b7a003a76
Author: Vincent Forest <vincent.forest@meso-star.com>
Date: Wed, 11 Feb 2026 12:36:05 +0100
Test the deserialization of a subset of lines
Diffstat:
| M | src/test_shtr_lines.c | | | 83 | +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
1 file changed, 83 insertions(+), 0 deletions(-)
diff --git a/src/test_shtr_lines.c b/src/test_shtr_lines.c
@@ -390,6 +390,88 @@ test_serialization(struct shtr* shtr)
}
static void
+test_deserialization_of_a_subset(struct shtr* shtr)
+{
+ 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(l) / sizeof(struct shtr_line);
+
+ struct shtr_line_list_load_args load_args = SHTR_LINE_LIST_LOAD_ARGS_NULL__;
+ struct shtr_line_list_read_args read_args = SHTR_LINE_LIST_READ_ARGS_NULL__;
+ struct shtr_line_list_write_args write_args = SHTR_LINE_LIST_WRITE_ARGS_NULL__;
+ struct shtr_line_list* list1 = NULL;
+ struct shtr_line_list* list2 = NULL;
+
+ FILE* fp = NULL;
+ size_t i = 0;
+ size_t n = 0;
+
+ CHK(fp = tmpfile());
+ print_lines(fp, l, nlines);
+ rewind(fp);
+
+ load_args.file = fp;
+ CHK(shtr_line_list_load(shtr, &load_args, &list1) == RES_OK);
+ CHK(fclose(fp) == 0);
+
+ CHK(fp = tmpfile());
+ write_args.file = fp;
+ CHK(shtr_line_list_write(list1, &write_args) == RES_OK);
+
+ rewind(fp);
+ read_args.file = fp;
+ read_args.range[0] = nlines;
+ CHK(shtr_line_list_read(shtr, &read_args, &list2) == RES_OK);
+
+ CHK(shtr_line_list_get_size(list2, &n) == RES_OK);
+ CHK(n == 0);
+ CHK(shtr_line_list_ref_put(list2) == RES_OK);
+
+ rewind(fp);
+ read_args.range[0] = 0;
+ read_args.range[1] = nlines-1; /*inclusive bound*/
+ CHK(shtr_line_list_read(shtr, &read_args, &list2) == RES_OK);
+ check_line_list_equality(list1, list2);
+ CHK(shtr_line_list_ref_put(list2) == RES_OK);
+
+ rewind(fp);
+ read_args.range[0] = 0;
+ read_args.range[1] = 2;
+ CHK(shtr_line_list_read(shtr, &read_args, &list2) == RES_OK);
+ CHK(shtr_line_list_get_size(list2, &n) == RES_OK);
+ CHK(n == read_args.range[1] - read_args.range[0] + 1/*inclusive bounds*/);
+ FOR_EACH(i, 0, n) {
+ struct shtr_line line1, line2;
+ CHK(shtr_line_list_at(list1, i, &line1) == RES_OK);
+ CHK(shtr_line_list_at(list2, i, &line2) == RES_OK);
+ CHK(shtr_line_eq(&line1, &line2));
+ }
+ CHK(shtr_line_list_ref_put(list2) == RES_OK);
+
+ rewind(fp);
+ read_args.range[0] = nlines-3;
+ read_args.range[1] = SIZE_MAX; /* Upper bound will be fit */
+ CHK(shtr_line_list_read(shtr, &read_args, &list2) == RES_OK);
+ CHK(shtr_line_list_get_size(list2, &n) == RES_OK);
+ CHK(n == 3);
+ FOR_EACH(i, 0, n) {
+ struct shtr_line line1, line2;
+ CHK(shtr_line_list_at(list1, i+read_args.range[0], &line1) == RES_OK);
+ CHK(shtr_line_list_at(list2, i, &line2) == RES_OK);
+ CHK(shtr_line_eq(&line1, &line2));
+ }
+ CHK(shtr_line_list_ref_put(list2) == RES_OK);
+
+ CHK(fclose(fp) == 0);
+ CHK(shtr_line_list_ref_put(list1) == RES_OK);
+}
+
+static void
check_line(const struct shtr_line* ln)
{
/* Check NaN */
@@ -447,6 +529,7 @@ main(int argc, char** argv)
test_load(shtr);
test_load_failures(shtr);
test_serialization(shtr);
+ test_deserialization_of_a_subset(shtr);
FOR_EACH(i, 1, argc) {
char buf[64];