From 5793191a1bf95947119a9692d6b02734c31ff208 Mon Sep 17 00:00:00 2001 From: AlysonStahl-NOAA <166434581+AlysonStahl-NOAA@users.noreply.github.com> Date: Mon, 23 Sep 2024 10:29:25 -0600 Subject: [PATCH] Fix bug with g2c_aecpackf()/g2c_aecpackd() and add test (#512) * fixing aecpack bug and adding test * compare float values with epsilon * fixed value check for other tests --------- Co-authored-by: Edward Hartnett <38856240+edwardhartnett@users.noreply.github.com> --- src/aecpack.c | 6 +++--- tests/tst_aec.c | 33 +++++++++++++++++++++++++++++++-- 2 files changed, 34 insertions(+), 5 deletions(-) diff --git a/src/aecpack.c b/src/aecpack.c index 5d5838e2..348cb264 100644 --- a/src/aecpack.c +++ b/src/aecpack.c @@ -225,16 +225,16 @@ aecpack_int(void *fld, int fld_is_double, g2int width, g2int height, g2int *idrs ctemplen = ndpts * nbytes; sbits(ctemp, ifld, 0, nbytes * 8, 0, ndpts); - ret = enc_aec(ctemp, ctemplen, nbits, ccsds_flags, ccsds_block_size, ccsds_rsi, cpack, lcpack); - if (ret < 0) + *lcpack = enc_aec(ctemp, ctemplen, nbits, ccsds_flags, ccsds_block_size, ccsds_rsi, cpack, lcpack); + if (*lcpack < 0) { if (verbose) printf("aecpack: ERROR Packing AEC = %d\n", ret); nbits = 0; *lcpack = 0; + ret = G2C_EAEC; } - *lcpack = ret; free(ctemp); } else diff --git a/tests/tst_aec.c b/tests/tst_aec.c index e5a7208d..60220bdf 100644 --- a/tests/tst_aec.c +++ b/tests/tst_aec.c @@ -91,7 +91,7 @@ main() for (i = 0; i < DATA_LEN; i++) { //printf("%g %g\n",fld[i], fld_in[i]); - if (fld[i] != fld_in[i]) + if (abs(fld[i] - fld_in[i]) >= EPSILON) return G2C_ERROR; } } @@ -120,11 +120,40 @@ main() for (i = 0; i < DATA_LEN; i++) { /* printf("%g %g\n", fld[i], fld_in[i]); */ - if (fld[i] != fld_in[i]) + if (abs(fld[i] - fld_in[i]) >= EPSILON) return G2C_ERROR; } } printf("ok!\n"); + printf("Testing g2c_aecpackd()/g2c_aecunpackd() calls with data..."); + { + size_t height = 2, width = 2; + size_t ndpts = DATA_LEN, len = PACKED_LEN; + double fld[DATA_LEN] = {1.0, 2.0, 3.0, 4.0}; + double fld_in[DATA_LEN]; + unsigned char cpack[PACKED_LEN]; + size_t lcpack; + g2int idrstmpl[8] = {0, 1, 1, 0, 0, 0, 16, 128}; + int i, ret; + + idrstmpl[5] = CCSDS_FLAGS; + + /* Pack the data. */ + g2c_aecpackd(fld, width, height, (int *)idrstmpl, cpack, &lcpack); + + /* Unpack the data. */ + ret = g2c_aecunpackd(cpack, len, (int *)idrstmpl, ndpts, fld_in); + if (ret < 0) + return G2C_ERROR; + + for (i = 0; i < DATA_LEN; i++) + { + /* printf("%g %g\n", fld[i], fld_in[i]); */ + if (abs(fld[i] - fld_in[i]) >= EPSILON) + return G2C_ERROR; + } + } + printf("ok!\n"); printf("SUCCESS!\n"); return 0; }