diff --git a/test/cmp_icu/test_cmp_icu.c b/test/cmp_icu/test_cmp_icu.c index b0b2f03582bf27be8f5a1667cf1b3d8401e28485..82cc9179425a5e37166deb46d744d6c861e6fd86 100644 --- a/test/cmp_icu/test_cmp_icu.c +++ b/test/cmp_icu/test_cmp_icu.c @@ -515,7 +515,7 @@ void test_put_n_bits32(void) /* re-init input arrays after clobbering */ init_PB32_arrays(testarray0, testarray1); - /*** error cases ***/ + /* error cases */ /* n too large */ v = 0x0; n = 33; o = 1; rval = put_n_bits32(v, n, o, testarray0, l); @@ -1004,17 +1004,41 @@ void test_encode_value_multi(void) TEST_ASSERT_EQUAL_HEX(0, bitstream[1]); } -#if 0 + +/** + * @brief put the value unencoded with setup->cmp_par_1 bits without any changes + * in the bitstream + * + * @param value value to put unchanged in the bitstream + * (setup->cmp_par_1 how many bits of the value are used) + * @param unused this parameter is ignored + * @param stream_len length of the bitstream in bits + * @param setup pointer to the encoder setup + * + * @returns the bit length of the bitstream with the added unencoded value on + * success; negative on error + */ + +static uint32_t encode_value_none(uint32_t value, uint32_t unused, uint32_t stream_len, + const struct encoder_setup *setup) +{ + (void)(unused); + + return put_n_bits32(value, setup->encoder_par1, stream_len, + setup->bitstream_adr, setup->max_stream_len); +} + + /** * @test encode_value */ -void no_test_encode_value(void) +void test_encode_value(void) { struct encoder_setup setup = {0}; uint32_t bitstream[4] = {0}; uint32_t data, model; - int cmp_size; + uint32_t cmp_size; setup.encode_method_f = encode_value_none; setup.bitstream_adr = bitstream; @@ -1028,7 +1052,7 @@ void no_test_encode_value(void) data = 0; model = 0; cmp_size = encode_value(data, model, cmp_size, &setup); - TEST_ASSERT_EQUAL_INT(32, cmp_size); + TEST_ASSERT_EQUAL_UINT(32, cmp_size); TEST_ASSERT_EQUAL_HEX(0, bitstream[0]); TEST_ASSERT_EQUAL_HEX(0, bitstream[1]); TEST_ASSERT_EQUAL_HEX(0, bitstream[2]); @@ -1036,7 +1060,7 @@ void no_test_encode_value(void) data = UINT32_MAX; model = 0; cmp_size = encode_value(data, model, cmp_size, &setup); - TEST_ASSERT_EQUAL_INT(64, cmp_size); + TEST_ASSERT_EQUAL_UINT(64, cmp_size); TEST_ASSERT_EQUAL_HEX(0, bitstream[0]); TEST_ASSERT_EQUAL_HEX(0xFFFFFFFF, bitstream[1]); TEST_ASSERT_EQUAL_HEX(0, bitstream[2]); @@ -1046,7 +1070,7 @@ void no_test_encode_value(void) setup.lossy_par = 1; data = UINT32_MAX; model = 0; cmp_size = encode_value(data, model, cmp_size, &setup); - TEST_ASSERT_EQUAL_INT(96, cmp_size); + TEST_ASSERT_EQUAL_UINT(96, cmp_size); TEST_ASSERT_EQUAL_HEX(0, bitstream[0]); TEST_ASSERT_EQUAL_HEX(0xFFFFFFFF, be32_to_cpu(bitstream[1])); TEST_ASSERT_EQUAL_HEX(0x7FFFFFFF, be32_to_cpu(bitstream[2])); @@ -1055,7 +1079,7 @@ void no_test_encode_value(void) setup.lossy_par = 2; data = 0x3; model = 0; cmp_size = encode_value(data, model, cmp_size, &setup); - TEST_ASSERT_EQUAL_INT(128, cmp_size); + TEST_ASSERT_EQUAL_UINT(128, cmp_size); TEST_ASSERT_EQUAL_HEX(0, bitstream[0]); TEST_ASSERT_EQUAL_HEX(0xFFFFFFFF, bitstream[1]); TEST_ASSERT_EQUAL_HEX(0x7FFFFFFF, be32_to_cpu(bitstream[2])); @@ -1063,7 +1087,7 @@ void no_test_encode_value(void) /* small buffer error bitstream can not hold more data*/ cmp_size = encode_value(data, model, cmp_size, &setup); - TEST_ASSERT_EQUAL_INT(CMP_ERROR_SMALL_BUF, cmp_size); + TEST_ASSERT_EQUAL_UINT(CMP_ERROR_SMALL_BUF_, cmp_get_error_code(cmp_size)); /* reset bitstream */ bitstream[0] = 0; @@ -1079,7 +1103,7 @@ void no_test_encode_value(void) data = 0; model = 0; cmp_size = encode_value(data, model, cmp_size, &setup); - TEST_ASSERT_EQUAL_INT(31, cmp_size); + TEST_ASSERT_EQUAL_UINT(31, cmp_size); TEST_ASSERT_EQUAL_HEX(0, bitstream[0]); TEST_ASSERT_EQUAL_HEX(0, bitstream[1]); TEST_ASSERT_EQUAL_HEX(0, bitstream[2]); @@ -1087,7 +1111,7 @@ void no_test_encode_value(void) data = 0x7FFFFFFF; model = 0; cmp_size = encode_value(data, model, cmp_size, &setup); - TEST_ASSERT_EQUAL_INT(62, cmp_size); + TEST_ASSERT_EQUAL_UINT(62, cmp_size); TEST_ASSERT_EQUAL_HEX(0x00000001, be32_to_cpu(bitstream[0])); TEST_ASSERT_EQUAL_HEX(0xFFFFFFFC, be32_to_cpu(bitstream[1])); TEST_ASSERT_EQUAL_HEX(0, bitstream[2]); @@ -1097,7 +1121,7 @@ void no_test_encode_value(void) setup.lossy_par = 1; data = UINT32_MAX; model = UINT32_MAX; cmp_size = encode_value(data, model, cmp_size, &setup); - TEST_ASSERT_EQUAL_INT(93, cmp_size); + TEST_ASSERT_EQUAL_UINT(93, cmp_size); TEST_ASSERT_EQUAL_HEX(0x00000001, be32_to_cpu(bitstream[0])); TEST_ASSERT_EQUAL_HEX(0xFFFFFFFF, be32_to_cpu(bitstream[1])); TEST_ASSERT_EQUAL_HEX(0xFFFFFFF8, be32_to_cpu(bitstream[2])); @@ -1107,16 +1131,15 @@ void no_test_encode_value(void) setup.lossy_par = 0; data = UINT32_MAX; model = 0; cmp_size = encode_value(data, model, cmp_size, &setup); - TEST_ASSERT_EQUAL_INT(CMP_ERROR_HIGH_VALUE, cmp_size); + TEST_ASSERT_EQUAL_UINT(CMP_ERROR_DATA_VALUE_TOO_LARGE, cmp_get_error_code(cmp_size)); /* model are bigger than max_data_bits */ setup.lossy_par = 0; cmp_size = 93; data = 0; model = UINT32_MAX; cmp_size = encode_value(data, model, cmp_size, &setup); - TEST_ASSERT_EQUAL_INT(CMP_ERROR_HIGH_VALUE, cmp_size); + TEST_ASSERT_EQUAL_UINT(CMP_ERROR_DATA_VALUE_TOO_LARGE, cmp_get_error_code(cmp_size)); } -#endif /** @@ -1429,90 +1452,6 @@ void test_compress_imagette_error_cases(void) TEST_ASSERT_EQUAL_INT(CMP_ERROR_PAR_SPECIFIC, cmp_get_error_code((uint32_t)cmp_size)); } -#if 0 -/** - * @test compress_multi_entry_hdr - */ - -void no_test_compress_multi_entry_hdr(void) -{ - int stream_len; - uint8_t data[COLLECTION_HDR_SIZE]; - uint8_t model[COLLECTION_HDR_SIZE]; - uint8_t up_model[COLLECTION_HDR_SIZE]; - uint8_t cmp_data[COLLECTION_HDR_SIZE]; - uint8_t *data_p = NULL; - uint8_t *model_p = NULL; - uint8_t *up_model_p = NULL; - - memset(data, 0x42, sizeof(data)); - - /* no data; no cmp_data no model test */ - /* no data; no model; no up_model; no cmp_data */ - stream_len = compress_multi_entry_hdr((void **)&data_p, (void **)&model_p, - (void **)&up_model_p, NULL); - TEST_ASSERT_EQUAL_INT(96, stream_len); - - /* no model; no up_model */ - data_p = data; - stream_len = compress_multi_entry_hdr((void **)&data_p, (void **)&model_p, - (void **)&up_model_p, cmp_data); - TEST_ASSERT_EQUAL_INT(96, stream_len); - TEST_ASSERT_FALSE(memcmp(cmp_data, data, COLLECTION_HDR_SIZE)); - TEST_ASSERT_EQUAL(data_p-data, COLLECTION_HDR_SIZE); - - /* no up_model */ - memset(cmp_data, 0, sizeof(cmp_data)); - data_p = data; - model_p = model; - up_model_p = NULL; - stream_len = compress_multi_entry_hdr((void **)&data_p, (void **)&model_p, - (void **)&up_model_p, cmp_data); - TEST_ASSERT_EQUAL_INT(96, stream_len); - TEST_ASSERT_FALSE(memcmp(cmp_data, data, COLLECTION_HDR_SIZE)); - TEST_ASSERT_EQUAL(data_p-data, COLLECTION_HDR_SIZE); - TEST_ASSERT_EQUAL(model_p-model, COLLECTION_HDR_SIZE); - - /* all buffer test */ - memset(cmp_data, 0, sizeof(cmp_data)); - data_p = data; - model_p = model; - up_model_p = up_model; - stream_len = compress_multi_entry_hdr((void **)&data_p, (void **)&model_p, - (void **)&up_model_p, cmp_data); - TEST_ASSERT_EQUAL_INT(96, stream_len); - TEST_ASSERT_FALSE(memcmp(cmp_data, data, COLLECTION_HDR_SIZE)); - TEST_ASSERT_FALSE(memcmp(up_model, data, COLLECTION_HDR_SIZE)); - TEST_ASSERT_EQUAL(data_p-data, COLLECTION_HDR_SIZE); - TEST_ASSERT_EQUAL(model_p-model, COLLECTION_HDR_SIZE); - TEST_ASSERT_EQUAL(up_model_p-up_model, COLLECTION_HDR_SIZE); - - /* all buffer test; no cmp_data */ - memset(cmp_data, 0, sizeof(cmp_data)); - data_p = data; - model_p = model; - up_model_p = up_model; - stream_len = compress_multi_entry_hdr((void **)&data_p, (void **)&model_p, - (void **)&up_model_p, NULL); - TEST_ASSERT_EQUAL_INT(96, stream_len); - TEST_ASSERT_FALSE(memcmp(up_model, data, COLLECTION_HDR_SIZE)); - TEST_ASSERT_EQUAL(data_p-data, COLLECTION_HDR_SIZE); - TEST_ASSERT_EQUAL(model_p-model, COLLECTION_HDR_SIZE); - TEST_ASSERT_EQUAL(up_model_p-up_model, COLLECTION_HDR_SIZE); - - /* no data, use up_model test */ - memset(cmp_data, 0, sizeof(cmp_data)); - data_p = NULL; - model_p = model; - up_model_p = up_model; - stream_len = compress_multi_entry_hdr((void **)&data_p, (void **)&model_p, - (void **)&up_model_p, NULL); - TEST_ASSERT_EQUAL_INT(96, stream_len); - TEST_ASSERT_EQUAL(model_p-model, COLLECTION_HDR_SIZE); - TEST_ASSERT_EQUAL(up_model_p-up_model, COLLECTION_HDR_SIZE); -} -#endif - /** * @test pad_bitstream @@ -1587,6 +1526,66 @@ void test_pad_bitstream(void) } +/** + * @test compress_data_internal + */ + +void test_compress_data_internal_error_cases(void) +{ + struct cmp_cfg cfg = {0}; + uint32_t cmp_size; + + uint16_t data[2] = {0, 0}; + uint32_t dst[3] = {0}; + cfg.data_type = DATA_TYPE_IMAGETTE; + cfg.src = data; + cfg.samples = 2; + cfg.dst = dst; + cfg.stream_size = sizeof(dst); + + + cmp_size = compress_data_internal(&cfg, -2U); + TEST_ASSERT_EQUAL_INT(-2U, cmp_size); + + cmp_size = compress_data_internal(&cfg, 7); + TEST_ASSERT_EQUAL_INT(CMP_ERROR_GENERIC, cmp_get_error_code(cmp_size)); + + cmp_size = compress_data_internal(&cfg, 7); + TEST_ASSERT_EQUAL_INT(CMP_ERROR_GENERIC, cmp_get_error_code(cmp_size)); + + cfg.data_type = DATA_TYPE_UNKNOWN; + cmp_size = compress_data_internal(&cfg, 0); + TEST_ASSERT_EQUAL_INT(CMP_ERROR_INT_DATA_TYPE_UNSUPPORTED, cmp_get_error_code(cmp_size)); + + cfg.cmp_mode = CMP_MODE_DIFF_MULTI; + cmp_size = compress_data_internal(&cfg, 0); + TEST_ASSERT_EQUAL_INT(CMP_ERROR_INT_DATA_TYPE_UNSUPPORTED, cmp_get_error_code(cmp_size)); + + cmp_size = compress_data_internal(&cfg, 0); + TEST_ASSERT_EQUAL_INT(CMP_ERROR_INT_DATA_TYPE_UNSUPPORTED, cmp_get_error_code(cmp_size)); + + cfg.data_type = DATA_TYPE_F_FX_EFX; + cmp_size = compress_data_internal(&cfg, 0); + TEST_ASSERT_EQUAL_INT(CMP_ERROR_INT_DATA_TYPE_UNSUPPORTED, cmp_get_error_code(cmp_size)); + + cfg.data_type = DATA_TYPE_F_FX_NCOB; + cmp_size = compress_data_internal(&cfg, 0); + TEST_ASSERT_EQUAL_INT(CMP_ERROR_INT_DATA_TYPE_UNSUPPORTED, cmp_get_error_code(cmp_size)); + + cfg.data_type = DATA_TYPE_F_FX_EFX_NCOB_ECOB; + cmp_size = compress_data_internal(&cfg, 0); + TEST_ASSERT_EQUAL_INT(CMP_ERROR_INT_DATA_TYPE_UNSUPPORTED, cmp_get_error_code(cmp_size)); + + cfg.data_type = DATA_TYPE_F_FX_EFX_NCOB_ECOB; + cmp_size = compress_data_internal(&cfg, 0); + TEST_ASSERT_EQUAL_INT(CMP_ERROR_INT_DATA_TYPE_UNSUPPORTED, cmp_get_error_code(cmp_size)); + + cfg.data_type = 101; + cmp_size = compress_data_internal(&cfg, 0); + TEST_ASSERT_EQUAL_INT(CMP_ERROR_INT_DATA_TYPE_UNSUPPORTED, cmp_get_error_code(cmp_size)); +} + + /** * @test compress_chunk */ @@ -1657,6 +1656,10 @@ void test_compress_chunk_raw_singel_col(void) } +/** + * @test compress_chunk + */ + void test_compress_chunk_raw_two_col(void) { enum { DATA_SIZE_1 = 2*sizeof(struct s_fx), @@ -1773,137 +1776,75 @@ void test_compress_chunk_raw_two_col(void) } -#if 0 -void NOOO_test_compress_chunk_model(void) +/** + * @test compress_chunk + */ + +void test_compress_chunk_aux(void) { - enum { DATA_SIZE_1 = 1*sizeof(struct background), - DATA_SIZE_2 = 2*sizeof(struct offset), + enum { DATA_SIZE_1 = 2*sizeof(struct offset), + DATA_SIZE_2 = 3*sizeof(struct background), CHUNK_SIZE = 2*COLLECTION_HDR_SIZE + DATA_SIZE_1 + DATA_SIZE_2 }; - uint8_t chunk[CHUNK_SIZE]; - uint8_t chunk_model[CHUNK_SIZE]; - uint8_t chunk_up_model[CHUNK_SIZE]; + uint8_t chunk[CHUNK_SIZE+100]; struct collection_hdr *col1 = (struct collection_hdr *)chunk; struct collection_hdr *col2; - struct background *data1 = (struct background *)col1->entry; - struct offset *data2; + struct offset *data1 = (struct offset *)col1->entry; + struct background *data2; struct cmp_par cmp_par = {0}; uint32_t *dst; uint32_t cmp_size; uint32_t dst_capacity = 0; - uint32_t chunk_size; /* create a chunk with two collection */ memset(col1, 0, COLLECTION_HDR_SIZE); - TEST_ASSERT_FALSE(cmp_col_set_subservice(col1, SST_NCxx_S_SCIENCE_BACKGROUND)); + TEST_ASSERT_FALSE(cmp_col_set_subservice(col1, SST_NCxx_S_SCIENCE_OFFSET)); TEST_ASSERT_FALSE(cmp_col_set_data_length(col1, DATA_SIZE_1)); data1[0].mean = 0; data1[0].variance = 1; - data1[0].outlier_pixels = 0xF0; + data1[1].mean = 0xF0; + data1[1].variance = 0xABCDE0FF; col2 = (struct collection_hdr *)(chunk + COLLECTION_HDR_SIZE + DATA_SIZE_1); memset(col2, 0, COLLECTION_HDR_SIZE); - TEST_ASSERT_FALSE(cmp_col_set_subservice(col2, SST_NCxx_S_SCIENCE_OFFSET)); + TEST_ASSERT_FALSE(cmp_col_set_subservice(col2, SST_NCxx_S_SCIENCE_BACKGROUND)); TEST_ASSERT_FALSE(cmp_col_set_data_length(col2, DATA_SIZE_2)); - data2 = (struct offset *)col2->entry; + data2 = (struct background *)col2->entry; data2[0].mean = 1; data2[0].variance = 2; - data2[1].mean = 3; - data2[1].variance = 4; - - /* create a model with two collection */ - col1 = (struct collection_hdr *)chunk_model; - memset(col1, 0, COLLECTION_HDR_SIZE); - TEST_ASSERT_FALSE(cmp_col_set_subservice(col1, SST_NCxx_S_SCIENCE_BACKGROUND)); - TEST_ASSERT_FALSE(cmp_col_set_data_length(col1, DATA_SIZE_1)); - data1[0].mean = 1; - data1[0].variance = 2; - data1[0].outlier_pixels = 0xFFFF; - col2 = (struct collection_hdr *)(chunk + COLLECTION_HDR_SIZE + DATA_SIZE_1); - memset(col2, 0, COLLECTION_HDR_SIZE); - TEST_ASSERT_FALSE(cmp_col_set_subservice(col2, SST_NCxx_S_SCIENCE_OFFSET)); - TEST_ASSERT_FALSE(cmp_col_set_data_length(col2, DATA_SIZE_2)); - data2 = (struct offset *)col2->entry; - data2[0].mean = 0; - data2[0].variance = 0; + data2[0].outlier_pixels = 3; data2[1].mean = 0; - data2[1].variance = 0xEFFFFFFF; + data2[1].variance = 0; + data2[1].outlier_pixels = 0; + data2[2].mean = 0xF; + data2[2].variance = 0xFFFF; + data2[2].outlier_pixels = 0xFFFF; /* compress the data */ - cmp_par.cmp_mode = CMP_MODE_MODEL_ZERO; - cmp_par.model_value = 14; + cmp_par.cmp_mode = CMP_MODE_DIFF_MULTI; cmp_par.nc_offset_mean = 1; - cmp_par.nc_offset_variance = 2; - cmp_par.nc_background_mean = 3; - cmp_par.nc_background_variance = 4; - cmp_par.nc_background_outlier_pixels = 5; - dst = NULL; + cmp_par.nc_offset_variance = UINT16_MAX; - chunk_size = COLLECTION_HDR_SIZE + DATA_SIZE_1; + cmp_par.nc_background_mean = UINT16_MAX; + cmp_par.nc_background_variance = 1; + cmp_par.nc_background_outlier_pixels = 42; + dst = NULL; - cmp_size = compress_chunk(chunk, chunk_size, chunk_model, chunk_up_model, dst, + cmp_size = compress_chunk(chunk, CHUNK_SIZE, NULL, NULL, dst, dst_capacity, &cmp_par); - TEST_ASSERT_EQUAL_INT(NON_IMAGETTE_HEADER_SIZE + COLLECTION_HDR_SIZE + 4, cmp_size); - dst_capacity = cmp_size; + TEST_ASSERT_EQUAL_INT(124, cmp_size); + dst_capacity = ROUND_UP_TO_4(cmp_size); dst = malloc(dst_capacity); TEST_ASSERT_NOT_NULL(dst); cmp_size = compress_chunk(chunk, CHUNK_SIZE, NULL, NULL, dst, dst_capacity, &cmp_par); - TEST_ASSERT_EQUAL_INT(GENERIC_HEADER_SIZE + CHUNK_SIZE, cmp_size); + TEST_ASSERT_EQUAL_INT(124, cmp_size); - /* test results */ - { struct cmp_entity *ent = (struct cmp_entity *)dst; - struct s_fx *raw_cmp_data1 = (struct s_fx *)( - (uint8_t *)cmp_ent_get_data_buf(ent) + COLLECTION_HDR_SIZE); - struct s_fx_efx_ncob_ecob *raw_cmp_data2 = (struct s_fx_efx_ncob_ecob *)( - (uint8_t *)cmp_ent_get_data_buf(ent) + 2*COLLECTION_HDR_SIZE + - DATA_SIZE_1); - TEST_ASSERT_EQUAL_UINT(CHUNK_SIZE, cmp_ent_get_cmp_data_size(ent)); - TEST_ASSERT_EQUAL_UINT(CHUNK_SIZE, cmp_ent_get_original_size(ent)); - TEST_ASSERT_EQUAL_UINT(cmp_par.cmp_mode, cmp_ent_get_cmp_mode(ent)); - TEST_ASSERT_TRUE(cmp_ent_get_data_type_raw_bit(ent)); - TEST_ASSERT_EQUAL_INT(DATA_TYPE_CHUNK, cmp_ent_get_data_type(ent)); - TEST_ASSERT_EQUAL_HEX8_ARRAY(col1, cmp_ent_get_data_buf(ent), COLLECTION_HDR_SIZE); - - /* int i; */ - /* for (i = 0; i < 2; i++) { */ - /* TEST_ASSERT_EQUAL_HEX(data1[i].exp_flags, raw_cmp_data1[i].exp_flags); */ - /* TEST_ASSERT_EQUAL_HEX(data1[i].fx, be32_to_cpu(raw_cmp_data1[i].fx)); */ - /* } */ - - /* TEST_ASSERT_EQUAL_HEX8_ARRAY(col1, cmp_ent_get_data_buf(ent), COLLECTION_HDR_SIZE); */ - - /* for (i = 0; i < 2; i++) { */ - /* TEST_ASSERT_EQUAL_HEX(data1[i].exp_flags, raw_cmp_data1[i].exp_flags); */ - /* TEST_ASSERT_EQUAL_HEX(data1[i].fx, be32_to_cpu(raw_cmp_data1[i].fx)); */ - /* } */ - - /* TEST_ASSERT_EQUAL_HEX8_ARRAY(col2, (uint8_t *)cmp_ent_get_data_buf(ent)+cmp_col_get_size(col1), COLLECTION_HDR_SIZE); */ - - /* for (i = 0; i < 2; i++) { */ - /* TEST_ASSERT_EQUAL_HEX(data2[i].exp_flags, raw_cmp_data2[i].exp_flags); */ - /* TEST_ASSERT_EQUAL_HEX(data2[i].fx, be32_to_cpu(raw_cmp_data2[i].fx)); */ - /* TEST_ASSERT_EQUAL_HEX(data2[i].efx, be32_to_cpu(raw_cmp_data2[i].efx)); */ - /* TEST_ASSERT_EQUAL_HEX(data2[i].ncob_x, be32_to_cpu(raw_cmp_data2[i].ncob_x)); */ - /* TEST_ASSERT_EQUAL_HEX(data2[i].ncob_y, be32_to_cpu(raw_cmp_data2[i].ncob_y)); */ - /* TEST_ASSERT_EQUAL_HEX(data2[i].ecob_x, be32_to_cpu(raw_cmp_data2[i].ecob_x)); */ - /* TEST_ASSERT_EQUAL_HEX(data2[i].ecob_y, be32_to_cpu(raw_cmp_data2[i].ecob_y)); */ - /* } */ - } - free(dst); - - /* error case: dst buffer to small */ - dst_capacity -= 1; - dst = malloc(dst_capacity); TEST_ASSERT_NOT_NULL(dst); + /* error case wrong cmp_par */ + cmp_par.nc_background_outlier_pixels = 0; cmp_size = compress_chunk(chunk, CHUNK_SIZE, NULL, NULL, dst, dst_capacity, &cmp_par); - TEST_ASSERT_EQUAL_INT(CMP_ERROR_SMALL_BUF_, cmp_get_error_code(cmp_size)); - free(dst); + TEST_ASSERT_EQUAL_INT(CMP_ERROR_PAR_SPECIFIC, cmp_get_error_code(cmp_size)); } -/* TODO: chunk tests - * collection with 0 length; - * collection with wrong mix collections; - */ -#endif /** @@ -1961,62 +1902,6 @@ void test_collection_zero_data_length(void) } -/** - * @test compress_chunk - */ -#if 0 -void nootest_collection_zero_data_length_2(void) -{ - enum { DATA_SIZE = 4, - CHUNK_SIZE = COLLECTION_HDR_SIZE + DATA_SIZE + COLLECTION_HDR_SIZE - }; - uint8_t chunk[CHUNK_SIZE]; - struct collection_hdr *col = (struct collection_hdr *)chunk; - uint16_t *data = (struct s_fx *)col->entry; - struct cmp_par cmp_par = {0}; - uint32_t *dst; - int cmp_size; - uint32_t dst_capacity = 43; /* random non zero value */ - - /* create a chunk with a single collection */ - memset(col, 0, COLLECTION_HDR_SIZE); - TEST_ASSERT_FALSE(cmp_col_set_subservice(col, SST_NCxx_S_SCIENCE_IMAGETTE)); - - /* compress the data */ - cmp_par.cmp_mode = CMP_MODE_DIFF_MULTI; - dst = NULL; - - cmp_size = compress_chunk(chunk, CHUNK_SIZE, NULL, NULL, dst, - dst_capacity, &cmp_par); - TEST_ASSERT_EQUAL_INT(NON_IMAGETTE_HEADER_SIZE + CHUNK_SIZE + CMP_COLLECTION_FILD_SIZE, cmp_size); - dst_capacity = (uint32_t)cmp_size; - dst = malloc(dst_capacity); TEST_ASSERT_NOT_NULL(dst); - cmp_size = compress_chunk(chunk, CHUNK_SIZE, NULL, NULL, dst, - dst_capacity, &cmp_par); - TEST_ASSERT_EQUAL_INT(NON_IMAGETTE_HEADER_SIZE + CHUNK_SIZE + CMP_COLLECTION_FILD_SIZE, cmp_size); - - /* test results */ - { struct cmp_entity *ent = (struct cmp_entity *)dst; - - TEST_ASSERT_EQUAL_UINT(CHUNK_SIZE+CMP_COLLECTION_FILD_SIZE, cmp_ent_get_cmp_data_size(ent)); - TEST_ASSERT_EQUAL_UINT(CHUNK_SIZE, cmp_ent_get_original_size(ent)); - TEST_ASSERT_EQUAL_UINT(cmp_par.cmp_mode, cmp_ent_get_cmp_mode(ent)); - TEST_ASSERT_FALSE(cmp_ent_get_data_type_raw_bit(ent)); - TEST_ASSERT_EQUAL_INT(DATA_TYPE_CHUNK, cmp_ent_get_data_type(ent)); - - TEST_ASSERT_EQUAL_HEX8_ARRAY(col, cmp_ent_get_data_buf(ent)+CMP_COLLECTION_FILD_SIZE, COLLECTION_HDR_SIZE); - } - - /* error case: dst buffer to small */ - dst_capacity -= 1; - cmp_size = compress_chunk(chunk, CHUNK_SIZE, NULL, NULL, dst, - dst_capacity, &cmp_par); - TEST_ASSERT_EQUAL_INT(CMP_ERROR_SMALL_BUF, cmp_size); - free(dst); -} -#endif - - static int n_timestamp_fail; /* fail after n calls */ static uint64_t get_timstamp_test(void) { @@ -2030,6 +1915,7 @@ static uint64_t get_timstamp_test(void) return 1ULL << 48; /* invalid time stamp */ } + /** * @test compress_chunk */ @@ -2206,7 +2092,7 @@ void test_compress_chunk_error_cases(void) TEST_ASSERT_EQUAL_INT(CMP_ERROR_COL_SUBSERVICE_UNSUPPORTED, cmp_get_error_code(cmp_size)); TEST_ASSERT_FALSE(cmp_col_set_subservice((struct collection_hdr *)chunk, SST_NCxx_S_SCIENCE_S_FX)); - /* error: TODO */ + /* error: collection size no a multiple of the data size */ TEST_ASSERT_FALSE(cmp_col_set_data_length(col2, DATA_SIZE_2-1)); cmp_size = compress_chunk(chunk, CHUNK_SIZE-1, chunk_model, updated_chunk_model, NULL, dst_capacity, @@ -2410,9 +2296,15 @@ void test_COMPRESS_CHUNK_BOUND(void) void test_compress_chunk_cmp_size_bound(void) { - uint8_t chunk[2*COLLECTION_HDR_SIZE + 42 + 3] = {0}; + enum { + CHUNK_SIZE_1 = 42, + CHUNK_SIZE_2 = 3 + }; + uint8_t chunk[2*COLLECTION_HDR_SIZE + CHUNK_SIZE_1 + CHUNK_SIZE_2] = {0}; uint32_t chunk_size; uint32_t bound, bound_exp; + struct collection_hdr *col2 = (struct collection_hdr *) + (chunk+COLLECTION_HDR_SIZE +CHUNK_SIZE_1); TEST_ASSERT_FALSE(cmp_col_set_data_length((struct collection_hdr *)chunk, 0)); @@ -2436,8 +2328,8 @@ void test_compress_chunk_cmp_size_bound(void) bound_exp = ROUND_UP_TO_4(NON_IMAGETTE_HEADER_SIZE + COLLECTION_HDR_SIZE + CMP_COLLECTION_FILD_SIZE); TEST_ASSERT_EQUAL(bound_exp, bound); - chunk_size = COLLECTION_HDR_SIZE + 42; - TEST_ASSERT_FALSE(cmp_col_set_data_length((struct collection_hdr *)chunk, 42)); + chunk_size = COLLECTION_HDR_SIZE + CHUNK_SIZE_1; + TEST_ASSERT_FALSE(cmp_col_set_data_length((struct collection_hdr *)chunk, CHUNK_SIZE_1)); bound = compress_chunk_cmp_size_bound(chunk, chunk_size); bound_exp = ROUND_UP_TO_4(NON_IMAGETTE_HEADER_SIZE + CMP_COLLECTION_FILD_SIZE + chunk_size); @@ -2448,15 +2340,50 @@ void test_compress_chunk_cmp_size_bound(void) TEST_ASSERT_TRUE(cmp_is_error(bound)); TEST_ASSERT_EQUAL_INT(CMP_ERROR_CHUNK_NULL, cmp_get_error_code(bound)); - TEST_ASSERT_FALSE(cmp_col_set_data_length((struct collection_hdr *)(chunk+chunk_size), 3)); + + /* two collections */ + TEST_ASSERT_FALSE(cmp_col_set_data_length(col2, CHUNK_SIZE_2)); chunk_size = sizeof(chunk); bound = compress_chunk_cmp_size_bound(chunk, chunk_size); bound_exp = ROUND_UP_TO_4(NON_IMAGETTE_HEADER_SIZE + 2*CMP_COLLECTION_FILD_SIZE + chunk_size); TEST_ASSERT_EQUAL(bound_exp, bound); + + TEST_ASSERT_FALSE(cmp_col_set_data_length(col2, 0)); + chunk_size = 2*COLLECTION_HDR_SIZE + CHUNK_SIZE_1; + bound = compress_chunk_cmp_size_bound(chunk, chunk_size); + bound_exp = ROUND_UP_TO_4(NON_IMAGETTE_HEADER_SIZE + 2*CMP_COLLECTION_FILD_SIZE + + chunk_size); + TEST_ASSERT_EQUAL(bound_exp, bound); + + /* wrong chunk_size */ + TEST_ASSERT_FALSE(cmp_col_set_data_length(col2, 0)); + chunk_size = 1 + 2*COLLECTION_HDR_SIZE + CHUNK_SIZE_1; + bound = compress_chunk_cmp_size_bound(chunk, chunk_size); + TEST_ASSERT_TRUE(cmp_is_error(bound)); + TEST_ASSERT_EQUAL_INT(CMP_ERROR_CHUNK_SIZE_INCONSISTENT, cmp_get_error_code(bound)); + + { /* containing only zero data size collections */ + size_t i; + uint8_t *chunk_big; + size_t const max_chunk_size = CMP_ENTITY_MAX_ORIGINAL_SIZE + - NON_IMAGETTE_HEADER_SIZE - CMP_COLLECTION_FILD_SIZE; + + chunk_big = malloc(max_chunk_size); + for (i = 0; i < max_chunk_size-COLLECTION_HDR_SIZE; i = i+COLLECTION_HDR_SIZE) + TEST_ASSERT_FALSE(cmp_col_set_data_length((struct collection_hdr *)&chunk_big[i], 0)); + + bound = compress_chunk_cmp_size_bound(chunk_big, i); + TEST_ASSERT_EQUAL_INT(CMP_ERROR_CHUNK_TOO_LARGE, cmp_get_error_code(bound)); + free(chunk_big); + } } +/** + * @test compress_chunk_set_model_id_and_counter + */ + void test_compress_chunk_set_model_id_and_counter(void) { uint32_t ret; @@ -2491,6 +2418,10 @@ void test_compress_chunk_set_model_id_and_counter(void) ret = compress_chunk_set_model_id_and_counter(NULL, dst_size, model_id, model_counter); TEST_ASSERT_TRUE(cmp_is_error(ret)); TEST_ASSERT_EQUAL(CMP_ERROR_ENTITY_NULL, cmp_get_error_code(ret)); + + ret = compress_chunk_set_model_id_and_counter(&dst, CMP_ERROR(PAR_GENERIC), model_id, model_counter); + TEST_ASSERT_TRUE(cmp_is_error(ret)); + TEST_ASSERT_EQUAL(CMP_ERROR_PAR_GENERIC, cmp_get_error_code(ret)); }