From 7603cb3605a7eff4e0f4c2ca89f500ea9644f4aa Mon Sep 17 00:00:00 2001
From: Dominik Loidolt <dominik.loidolt@univie.ac.at>
Date: Thu, 3 Nov 2022 10:01:56 +0100
Subject: [PATCH] add test caes for the compression data types functions;
 refactor data types functions

---
 cmp_tool.c                                |   4 +-
 include/cmp_data_types.h                  |   4 +-
 lib/cmp_data_types.c                      |   8 +-
 lib/cmp_entity.c                          |   6 +-
 lib/cmp_io.c                              |   3 +-
 test/cmp_data_types/meson.build           |   4 +-
 test/cmp_data_types/test_cmp_data_types.c | 175 +++++++++++++++++++++-
 test/cmp_icu/test_cmp_icu.c               |  82 +++-------
 test/cmp_icu/test_decmp.c                 |   2 +-
 9 files changed, 209 insertions(+), 79 deletions(-)

diff --git a/cmp_tool.c b/cmp_tool.c
index 925e39c..e22afc7 100644
--- a/cmp_tool.c
+++ b/cmp_tool.c
@@ -329,11 +329,11 @@ int main(int argc, char **argv)
 		printf("Importing data file %s ... ", data_file_name);
 		/* count the samples in the data file when samples == 0 */
 		if (cfg.samples == 0) {
-			int samples;
+			int32_t samples;
 			size = read_file_data(data_file_name, cfg.data_type, NULL, 0, 0);
 			if (size <= 0 || size > UINT32_MAX) /* empty file is treated as an error */
 				goto fail;
-			samples = cmp_input_size_to_samples(size, cfg.data_type);
+			samples = cmp_input_size_to_samples((uint32_t)size, cfg.data_type);
 			if (samples < 0)
 				goto fail;
 			cfg.samples = (uint32_t)samples;
diff --git a/include/cmp_data_types.h b/include/cmp_data_types.h
index 41a39f7..aff6aa0 100644
--- a/include/cmp_data_types.h
+++ b/include/cmp_data_types.h
@@ -271,8 +271,8 @@ struct smearing {
 
 
 size_t size_of_a_sample(enum cmp_data_type data_type);
-unsigned int cmp_cal_size_of_data(unsigned int samples, enum cmp_data_type data_type);
-int cmp_input_size_to_samples(unsigned int size, enum cmp_data_type data_type);
+uint32_t cmp_cal_size_of_data(uint32_t samples, enum cmp_data_type data_type);
+int32_t cmp_input_size_to_samples(uint32_t size, enum cmp_data_type data_type);
 
 int cmp_input_big_to_cpu_endianness(void *data, uint32_t data_size_byte,
 				    enum cmp_data_type data_type);
diff --git a/lib/cmp_data_types.c b/lib/cmp_data_types.c
index ed7d5e6..f2b34ee 100644
--- a/lib/cmp_data_types.c
+++ b/lib/cmp_data_types.c
@@ -194,7 +194,7 @@ size_t size_of_a_sample(enum cmp_data_type data_type)
  * @returns the size in bytes to store the data sample; zero on failure
  */
 
-unsigned int cmp_cal_size_of_data(unsigned int samples, enum cmp_data_type data_type)
+uint32_t cmp_cal_size_of_data(uint32_t samples, enum cmp_data_type data_type)
 {
 	size_t s = size_of_a_sample(data_type);
 	uint64_t x; /* use 64 bit to catch overflow */
@@ -224,7 +224,7 @@ unsigned int cmp_cal_size_of_data(unsigned int samples, enum cmp_data_type data_
  * @returns the number samples for the given compression mode; negative on error
  */
 
-int cmp_input_size_to_samples(unsigned int size, enum cmp_data_type data_type)
+int32_t cmp_input_size_to_samples(uint32_t size, enum cmp_data_type data_type)
 {
 	uint32_t samples_size = size_of_a_sample(data_type);
 
@@ -462,7 +462,7 @@ static void be_to_cpus_f_fx_efx_ncob_ecob(struct f_fx_efx_ncob_ecob *a, int samp
 int cmp_input_big_to_cpu_endianness(void *data, uint32_t data_size_byte,
 				    enum cmp_data_type data_type)
 {
-	int samples = cmp_input_size_to_samples(data_size_byte, data_type);
+	int32_t samples = cmp_input_size_to_samples(data_size_byte, data_type);
 
 	if (!data) /* nothing to do */
 		return 0;
@@ -533,10 +533,12 @@ int cmp_input_big_to_cpu_endianness(void *data, uint32_t data_size_byte,
 	/* TODO: implement F_CAM conversion */
 	case DATA_TYPE_F_CAM_OFFSET:
 	case DATA_TYPE_F_CAM_BACKGROUND:
+	/* LCOV_EXCL_START */
 	case DATA_TYPE_UNKNOWN:
 	default:
 		debug_print("Error: Can not swap endianness for this compression data type.\n");
 		return -1;
+	/* LCOV_EXCL_STOP */
 	}
 
 	return 0;
diff --git a/lib/cmp_entity.c b/lib/cmp_entity.c
index a2a6637..4dce331 100644
--- a/lib/cmp_entity.c
+++ b/lib/cmp_entity.c
@@ -2145,7 +2145,7 @@ size_t cmp_ent_build(struct cmp_entity *ent, uint32_t version_id,
 
 int cmp_ent_read_header(struct cmp_entity *ent, struct cmp_cfg *cfg)
 {
-	int samples;
+	int32_t samples;
 
 	if (!cfg)
 		return -1;
@@ -2172,7 +2172,7 @@ int cmp_ent_read_header(struct cmp_entity *ent, struct cmp_cfg *cfg)
 		return -1;
 	}
 
-	cfg->samples = samples;
+	cfg->samples = (uint32_t)samples;
 
 	cfg->icu_output_buf = cmp_ent_get_data_buf(ent);
 
@@ -2532,7 +2532,7 @@ static void cmp_ent_parese_specific_header(struct cmp_entity *ent)
 	enum cmp_data_type data_type = cmp_ent_get_data_type(ent);
 
 	if (cmp_ent_get_data_type_raw_bit(ent)) {
-		debug_print("Uncompressed data bit is set no specific header is used.\n");
+		debug_print("Uncompressed data bit is set. No specific header is used.\n");
 		return;
 	}
 
diff --git a/lib/cmp_io.c b/lib/cmp_io.c
index 3574730..15be88b 100644
--- a/lib/cmp_io.c
+++ b/lib/cmp_io.c
@@ -1397,7 +1397,8 @@ ssize_t read_file_data(const char *file_name, enum cmp_data_type data_type,
 		       void *buf, uint32_t buf_size, int verbose_en)
 {
 	ssize_t size;
-	int samples, err;
+	int32_t samples;
+	int err;
 
 	size = read_file8(file_name, (uint8_t *)buf, buf_size, verbose_en);
 
diff --git a/test/cmp_data_types/meson.build b/test/cmp_data_types/meson.build
index 8de2ef8..17ff50e 100644
--- a/test/cmp_data_types/meson.build
+++ b/test/cmp_data_types/meson.build
@@ -1,7 +1,7 @@
 test_case = files('test_cmp_data_types.c')
 test_runner = test_runner_generator.process(test_case)
 
-test_cmp_icu = executable('test_cmp_data_types',
+test_cmp_data_types = executable('test_cmp_data_types',
    test_case, test_runner,
    include_directories : incdir,
    link_with : cmp_lib,
@@ -9,4 +9,4 @@ test_cmp_icu = executable('test_cmp_data_types',
    build_by_default : false
 )
 
-test('Compression Data Types Unit Tests', test_cmp_icu)
+test('Compression Data Types Unit Tests', test_cmp_data_types)
diff --git a/test/cmp_data_types/test_cmp_data_types.c b/test/cmp_data_types/test_cmp_data_types.c
index 4d6d431..d2037cc 100644
--- a/test/cmp_data_types/test_cmp_data_types.c
+++ b/test/cmp_data_types/test_cmp_data_types.c
@@ -1,5 +1,5 @@
 /**
- * @file cmp_entity.h
+ * @file test_cmp_entity.h
  * @author Dominik Loidolt (dominik.loidolt@univie.ac.at),
  * @date   2022
  *
@@ -23,35 +23,196 @@
 #include <cmp_data_types.h>
 
 
+/**
+ * @test cmp_set_max_us
+ */
+
+void test_cmp_set_max_used_bits(void)
+{
+	struct cmp_max_used_bits set_max_used_bits = cmp_get_max_used_bits();
+	cmp_set_max_used_bits(&set_max_used_bits);
+	cmp_set_max_used_bits(NULL);
+}
+
+
+/**
+ * @test cmp_get_max_used_bits
+ */
+
+void test_cmp_get_max_used_bits(void)
+{
+	struct cmp_max_used_bits max_used_bits = cmp_get_max_used_bits();
+
+	TEST_ASSERT_EQUAL_INT(max_used_bits.nc_imagette, MAX_USED_NC_IMAGETTE_BITS);
+	TEST_ASSERT_EQUAL_INT(max_used_bits.saturated_imagette, MAX_USED_SATURATED_IMAGETTE_BITS);
+	TEST_ASSERT_EQUAL_INT(max_used_bits.fc_imagette, MAX_USED_FC_IMAGETTE_BITS);
+
+	TEST_ASSERT_EQUAL_INT(max_used_bits.f_fx, MAX_USED_F_FX_BITS);
+	TEST_ASSERT_EQUAL_INT(max_used_bits.f_efx, MAX_USED_F_EFX_BITS);
+	TEST_ASSERT_EQUAL_INT(max_used_bits.f_ncob, MAX_USED_F_NCOB_BITS);
+	TEST_ASSERT_EQUAL_INT(max_used_bits.f_ecob, MAX_USED_F_ECOB_BITS);
+
+	TEST_ASSERT_EQUAL_INT(max_used_bits.s_exp_flags, MAX_USED_S_FX_EXPOSURE_FLAGS_BITS);
+	TEST_ASSERT_EQUAL_INT(max_used_bits.s_fx, MAX_USED_S_FX_BITS);
+	TEST_ASSERT_EQUAL_INT(max_used_bits.s_efx, MAX_USED_S_EFX_BITS);
+	TEST_ASSERT_EQUAL_INT(max_used_bits.s_ncob, MAX_USED_S_NCOB_BITS);
+	TEST_ASSERT_EQUAL_INT(max_used_bits.s_ecob, MAX_USED_S_ECOB_BITS);
+
+	TEST_ASSERT_EQUAL_INT(max_used_bits.l_fx_variance, MAX_USED_L_FX_VARIANCE_BITS);
+	TEST_ASSERT_EQUAL_INT(max_used_bits.l_efx, MAX_USED_L_EFX_BITS);
+	TEST_ASSERT_EQUAL_INT(max_used_bits.l_ncob, MAX_USED_L_NCOB_BITS);
+	TEST_ASSERT_EQUAL_INT(max_used_bits.l_ecob, MAX_USED_L_ECOB_BITS);
+	TEST_ASSERT_EQUAL_INT(max_used_bits.l_cob_variance, MAX_USED_L_COB_VARIANCE_BITS);
+
+	TEST_ASSERT_EQUAL_INT(max_used_bits.nc_offset_mean, MAX_USED_NC_OFFSET_MEAN_BITS);
+	TEST_ASSERT_EQUAL_INT(max_used_bits.nc_offset_variance, MAX_USED_NC_OFFSET_VARIANCE_BITS);
+
+	TEST_ASSERT_EQUAL_INT(max_used_bits.nc_background_mean, MAX_USED_NC_BACKGROUND_MEAN_BITS);
+	TEST_ASSERT_EQUAL_INT(max_used_bits.nc_background_variance, MAX_USED_NC_BACKGROUND_VARIANCE_BITS);
+	TEST_ASSERT_EQUAL_INT(max_used_bits.nc_background_outlier_pixels, MAX_USED_NC_BACKGROUND_OUTLIER_PIXELS_BITS);
+
+	TEST_ASSERT_EQUAL_INT(max_used_bits.smearing_mean, MAX_USED_SMEARING_MEAN_BITS);
+	TEST_ASSERT_EQUAL_INT(max_used_bits.smearing_variance_mean, MAX_USED_SMEARING_VARIANCE_MEAN_BITS);
+	TEST_ASSERT_EQUAL_INT(max_used_bits.smearing_outlier_pixels, MAX_USED_SMEARING_OUTLIER_PIXELS_BITS);
+
+	TEST_ASSERT_EQUAL_INT(max_used_bits.fc_offset_mean, MAX_USED_FC_OFFSET_MEAN_BITS);
+	TEST_ASSERT_EQUAL_INT(max_used_bits.fc_offset_variance, MAX_USED_FC_OFFSET_VARIANCE_BITS);
+	TEST_ASSERT_EQUAL_INT(max_used_bits.fc_offset_pixel_in_error, MAX_USED_FC_OFFSET_PIXEL_IN_ERROR_BITS);
+
+	TEST_ASSERT_EQUAL_INT(max_used_bits.fc_background_mean, MAX_USED_FC_BACKGROUND_MEAN_BITS);
+	TEST_ASSERT_EQUAL_INT(max_used_bits.fc_background_variance, MAX_USED_FC_BACKGROUND_VARIANCE_BITS);
+	TEST_ASSERT_EQUAL_INT(max_used_bits.fc_background_outlier_pixels, MAX_USED_FC_BACKGROUND_OUTLIER_PIXELS_BITS);
+}
+
+
+/**
+ * @test size_of_a_sample
+ */
+
+void test_size_of_a_sample(void)
+{
+	size_t size;
+	/* TODO: implied DATA_TYPE_F_CAM_OFFSET and DATA_TYPE_F_CAM_BACKGROUND DATA_TYPE_F_CAM_BACKGROUND*/
+	size = size_of_a_sample(DATA_TYPE_F_CAM_OFFSET);
+	TEST_ASSERT_EQUAL(0, size);
+	size = size_of_a_sample(DATA_TYPE_F_CAM_BACKGROUND);
+	TEST_ASSERT_EQUAL(0, size);
+
+	/* test error cases */
+	size = size_of_a_sample(DATA_TYPE_UNKNOWN);
+	TEST_ASSERT_EQUAL(0, size);
+	size = size_of_a_sample(DATA_TYPE_F_CAM_BACKGROUND +1);
+	TEST_ASSERT_EQUAL(0, size);
+}
+
+
 /**
  * @test cmp_cal_size_of_data
  */
 
 void test_cmp_cal_size_of_data(void)
 {
-	unsigned int s;
+	uint32_t s;
 
 	s = cmp_cal_size_of_data(1, DATA_TYPE_IMAGETTE);
 	TEST_ASSERT_EQUAL_UINT(sizeof(uint16_t), s);
 
+	s = cmp_cal_size_of_data(32, DATA_TYPE_IMAGETTE);
+	TEST_ASSERT_EQUAL_UINT(32 * sizeof(uint16_t), s);
+
 	s = cmp_cal_size_of_data(1, DATA_TYPE_F_FX);
 	TEST_ASSERT_EQUAL_UINT(sizeof(struct f_fx)+MULTI_ENTRY_HDR_SIZE, s);
 
+	s = cmp_cal_size_of_data(4, DATA_TYPE_F_FX);
+	TEST_ASSERT_EQUAL_UINT(4*sizeof(struct f_fx)+MULTI_ENTRY_HDR_SIZE, s);
+
 	/* overflow tests */
 	s = cmp_cal_size_of_data(0x1999999A, DATA_TYPE_BACKGROUND);
 	TEST_ASSERT_EQUAL_UINT(0, s);
 	s = cmp_cal_size_of_data(0x19999999, DATA_TYPE_BACKGROUND);
 	TEST_ASSERT_EQUAL_UINT(0, s);
+	s = cmp_cal_size_of_data(UINT_MAX, DATA_TYPE_L_FX_EFX_NCOB_ECOB);
+	TEST_ASSERT_EQUAL_UINT(0, s);
 }
 
 
 /**
- * @test cmp_set_max_us
+ * @test cmp_input_size_to_samples
  */
 
-void test_cmp_set_max_used_bits(void)
+void test_cmp_input_size_to_samples(void)
 {
-	struct cmp_max_used_bits set_max_used_bits = {0};
-	cmp_set_max_used_bits(&set_max_used_bits);
-	cmp_set_max_used_bits(NULL);
+	enum cmp_data_type data_type;
+	uint32_t size, samples;
+	int32_t samples_get;
+
+	data_type = DATA_TYPE_IMAGETTE;
+	samples = 42;
+	size = cmp_cal_size_of_data(samples, data_type);
+	samples_get = cmp_input_size_to_samples(size, data_type);
+	TEST_ASSERT_EQUAL(samples, samples_get);
+
+	data_type = DATA_TYPE_IMAGETTE;
+	samples = 0;
+	size = cmp_cal_size_of_data(samples, data_type);
+	samples_get = cmp_input_size_to_samples(size, data_type);
+	TEST_ASSERT_EQUAL(samples, samples_get);
+
+	data_type = DATA_TYPE_S_FX_NCOB;
+	samples = 42;
+	size = cmp_cal_size_of_data(samples, data_type);
+	samples_get = cmp_input_size_to_samples(size, data_type);
+	TEST_ASSERT_EQUAL(samples, samples_get);
+
+	data_type = DATA_TYPE_S_FX_NCOB;
+	samples = 0;
+	size = cmp_cal_size_of_data(samples, data_type);
+	samples_get = cmp_input_size_to_samples(size, data_type);
+	TEST_ASSERT_EQUAL(samples, samples_get);
+
+	/* error cases */
+	data_type = DATA_TYPE_S_FX_NCOB;
+	size = MULTI_ENTRY_HDR_SIZE - 1;
+	samples_get = cmp_input_size_to_samples(size, data_type);
+	data_type = DATA_TYPE_S_FX_NCOB;
+
+	data_type = DATA_TYPE_S_FX_NCOB;
+	size = MULTI_ENTRY_HDR_SIZE + 4*sizeof(struct s_fx_ncob) - 1;
+	samples_get = cmp_input_size_to_samples(size, data_type);
+	TEST_ASSERT_EQUAL(-1, samples_get);
+	TEST_ASSERT_EQUAL(-1, samples_get);
+}
+
+
+/**
+ * @test cmp_input_big_to_cpu_endianness
+ */
+
+void test_cmp_input_big_to_cpu_endianness(void)
+{
+	int error;
+	void *data;
+	uint8_t data_err[3] = {0x01, 0xFF, 0x42};
+	uint32_t data_size_byte;
+	enum cmp_data_type data_type;
+
+	/* data = NULL test */
+	data = NULL;
+	data_size_byte = 0;
+	data_type = DATA_TYPE_IMAGETTE;
+	error = cmp_input_big_to_cpu_endianness(data, data_size_byte, data_type);
+	TEST_ASSERT_EQUAL(0, error);
+
+	/* error cases */
+	data = data_err;
+	data_size_byte = 3;
+	data_type = DATA_TYPE_IMAGETTE;
+	error = cmp_input_big_to_cpu_endianness(data, data_size_byte, data_type);
+	TEST_ASSERT_EQUAL(-1, error);
+
+	data = data_err;
+	data_size_byte = 0;
+	data_type = DATA_TYPE_UNKNOWN;
+	error = cmp_input_big_to_cpu_endianness(data, data_size_byte, data_type);
+	TEST_ASSERT_EQUAL(-1, error);
 }
diff --git a/test/cmp_icu/test_cmp_icu.c b/test/cmp_icu/test_cmp_icu.c
index cc8d46e..6126542 100644
--- a/test/cmp_icu/test_cmp_icu.c
+++ b/test/cmp_icu/test_cmp_icu.c
@@ -2168,57 +2168,6 @@ void test_encode_value(void)
 }
 
 
-/**
- * @test cmp_get_max_used_bits
- * TODO: move this test
- */
-
-void test_cmp_get_max_used_bits(void)
-{
-	struct cmp_max_used_bits max_used_bits = cmp_get_max_used_bits();
-
-	TEST_ASSERT_EQUAL_INT(max_used_bits.nc_imagette, MAX_USED_NC_IMAGETTE_BITS);
-	TEST_ASSERT_EQUAL_INT(max_used_bits.saturated_imagette, MAX_USED_SATURATED_IMAGETTE_BITS);
-	TEST_ASSERT_EQUAL_INT(max_used_bits.fc_imagette, MAX_USED_FC_IMAGETTE_BITS);
-
-	TEST_ASSERT_EQUAL_INT(max_used_bits.f_fx, MAX_USED_F_FX_BITS);
-	TEST_ASSERT_EQUAL_INT(max_used_bits.f_efx, MAX_USED_F_EFX_BITS);
-	TEST_ASSERT_EQUAL_INT(max_used_bits.f_ncob, MAX_USED_F_NCOB_BITS);
-	TEST_ASSERT_EQUAL_INT(max_used_bits.f_ecob, MAX_USED_F_ECOB_BITS);
-
-	TEST_ASSERT_EQUAL_INT(max_used_bits.s_exp_flags, MAX_USED_S_FX_EXPOSURE_FLAGS_BITS);
-	TEST_ASSERT_EQUAL_INT(max_used_bits.s_fx, MAX_USED_S_FX_BITS);
-	TEST_ASSERT_EQUAL_INT(max_used_bits.s_efx, MAX_USED_S_EFX_BITS);
-	TEST_ASSERT_EQUAL_INT(max_used_bits.s_ncob, MAX_USED_S_NCOB_BITS);
-	TEST_ASSERT_EQUAL_INT(max_used_bits.s_ecob, MAX_USED_S_ECOB_BITS);
-
-	TEST_ASSERT_EQUAL_INT(max_used_bits.l_fx_variance, MAX_USED_L_FX_VARIANCE_BITS);
-	TEST_ASSERT_EQUAL_INT(max_used_bits.l_efx, MAX_USED_L_EFX_BITS);
-	TEST_ASSERT_EQUAL_INT(max_used_bits.l_ncob, MAX_USED_L_NCOB_BITS);
-	TEST_ASSERT_EQUAL_INT(max_used_bits.l_ecob, MAX_USED_L_ECOB_BITS);
-	TEST_ASSERT_EQUAL_INT(max_used_bits.l_cob_variance, MAX_USED_L_COB_VARIANCE_BITS);
-
-	TEST_ASSERT_EQUAL_INT(max_used_bits.nc_offset_mean, MAX_USED_NC_OFFSET_MEAN_BITS);
-	TEST_ASSERT_EQUAL_INT(max_used_bits.nc_offset_variance, MAX_USED_NC_OFFSET_VARIANCE_BITS);
-
-	TEST_ASSERT_EQUAL_INT(max_used_bits.nc_background_mean, MAX_USED_NC_BACKGROUND_MEAN_BITS);
-	TEST_ASSERT_EQUAL_INT(max_used_bits.nc_background_variance, MAX_USED_NC_BACKGROUND_VARIANCE_BITS);
-	TEST_ASSERT_EQUAL_INT(max_used_bits.nc_background_outlier_pixels, MAX_USED_NC_BACKGROUND_OUTLIER_PIXELS_BITS);
-
-	TEST_ASSERT_EQUAL_INT(max_used_bits.smearing_mean, MAX_USED_SMEARING_MEAN_BITS);
-	TEST_ASSERT_EQUAL_INT(max_used_bits.smearing_variance_mean, MAX_USED_SMEARING_VARIANCE_MEAN_BITS);
-	TEST_ASSERT_EQUAL_INT(max_used_bits.smearing_outlier_pixels, MAX_USED_SMEARING_OUTLIER_PIXELS_BITS);
-
-	TEST_ASSERT_EQUAL_INT(max_used_bits.fc_offset_mean, MAX_USED_FC_OFFSET_MEAN_BITS);
-	TEST_ASSERT_EQUAL_INT(max_used_bits.fc_offset_variance, MAX_USED_FC_OFFSET_VARIANCE_BITS);
-	TEST_ASSERT_EQUAL_INT(max_used_bits.fc_offset_pixel_in_error, MAX_USED_FC_OFFSET_PIXEL_IN_ERROR_BITS);
-
-	TEST_ASSERT_EQUAL_INT(max_used_bits.fc_background_mean, MAX_USED_FC_BACKGROUND_MEAN_BITS);
-	TEST_ASSERT_EQUAL_INT(max_used_bits.fc_background_variance, MAX_USED_FC_BACKGROUND_VARIANCE_BITS);
-	TEST_ASSERT_EQUAL_INT(max_used_bits.fc_background_outlier_pixels, MAX_USED_FC_BACKGROUND_OUTLIER_PIXELS_BITS);
-}
-
-
 /**
  * @test configure_encoder_setup
  */
@@ -2629,7 +2578,6 @@ void test_compress_imagette_error_cases(void)
 
 	/* compressed data buffer to small test part 2 */
 	cfg.data_type = DATA_TYPE_IMAGETTE;
-	cfg.data_type = DATA_TYPE_IMAGETTE;
 	cfg.cmp_mode = CMP_MODE_DIFF_ZERO;
 	cfg.input_buf = data;
 	cfg.samples = 7;
@@ -2641,6 +2589,22 @@ void test_compress_imagette_error_cases(void)
 	cmp_size = icu_compress_data(&cfg);
 	TEST_ASSERT_EQUAL_INT(CMP_ERROR_SMALL_BUF, cmp_size);
 
+	/* error invalid data_type */
+	cfg.data_type = DATA_TYPE_UNKNOWN;
+	cfg.cmp_mode = CMP_MODE_DIFF_ZERO;
+	cfg.input_buf = data;
+	cfg.samples = 7;
+	cfg.golomb_par = 1;
+	cfg.spill = 8;
+	cfg.icu_output_buf = (uint32_t *)output_buf;
+	cfg.buffer_length = 4;
+	cmp_size = icu_compress_data(&cfg);
+	TEST_ASSERT_EQUAL_INT(-1, cmp_size);
+
+	cfg.data_type = DATA_TYPE_F_CAM_BACKGROUND +1;
+	cmp_size = icu_compress_data(&cfg);
+	TEST_ASSERT_EQUAL_INT(-1, cmp_size);
+
 	/* error in setup */
 	struct cmp_max_used_bits max_used_bits = cmp_get_max_used_bits();
 	max_used_bits.nc_imagette = 33;
@@ -2656,6 +2620,7 @@ void test_compress_imagette_error_cases(void)
 
 	cmp_size = icu_compress_data(&cfg);
 	TEST_ASSERT_EQUAL_INT(-1, cmp_size);
+
 }
 
 
@@ -4448,12 +4413,13 @@ void test_zero_escape_mech_is_used(void)
 
 void test_support_function_call_NULL(void)
 {
-	TEST_ASSERT_FALSE(cmp_cfg_icu_gen_par_is_invalid(NULL));
-	TEST_ASSERT_FALSE(cmp_cfg_icu_buffers_is_invalid(NULL));
-	TEST_ASSERT_FALSE(cmp_cfg_imagette_is_invalid(NULL, ICU_CHECK));
-	TEST_ASSERT_FALSE(cmp_cfg_fx_cob_is_invalid(NULL));
-	TEST_ASSERT_FALSE(cmp_cfg_aux_is_invalid(NULL));
-	TEST_ASSERT_FALSE(cmp_cfg_is_invalid(NULL));
+	TEST_ASSERT_TRUE(cmp_cfg_gen_par_is_invalid(NULL, ICU_CHECK));
+	TEST_ASSERT_TRUE(cmp_cfg_icu_buffers_is_invalid(NULL));
+	TEST_ASSERT_TRUE(cmp_cfg_imagette_is_invalid(NULL, ICU_CHECK));
+	TEST_ASSERT_TRUE(cmp_cfg_fx_cob_is_invalid(NULL));
+	TEST_ASSERT_TRUE(cmp_cfg_aux_is_invalid(NULL));
+	TEST_ASSERT_TRUE(cmp_cfg_is_invalid(NULL));
+	TEST_ASSERT_TRUE(cmp_cfg_fx_cob_get_need_pars(DATA_TYPE_S_FX, NULL));
 }
 
 
diff --git a/test/cmp_icu/test_decmp.c b/test/cmp_icu/test_decmp.c
index 668f43e..0862996 100644
--- a/test/cmp_icu/test_decmp.c
+++ b/test/cmp_icu/test_decmp.c
@@ -703,7 +703,7 @@ void test_s_fx_model(void)
 void generate_random_test_data(void *data, int samples,
 			       enum cmp_data_type data_type)
 {
-	int s = cmp_cal_size_of_data(samples, data_type);
+	uint32_t s = cmp_cal_size_of_data(samples, data_type);
 	memset(data, 0x0, s);
 }
 
-- 
GitLab