Skip to content

Commit

Permalink
tests: nrf_compress: decompression: arm_thumb: Fix for chunks
Browse files Browse the repository at this point in the history
Updates the test to support the new cross-chunk ARM thumb filter
functionality, and verfies that the output size is the expected
size

Signed-off-by: Jamie McCrae <[email protected]>
  • Loading branch information
nordicjm committed Oct 24, 2024
1 parent cbae84c commit acaaf83
Showing 1 changed file with 16 additions and 3 deletions.
19 changes: 16 additions & 3 deletions tests/subsys/nrf_compress/decompression/arm_thumb/src/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -18,13 +18,16 @@ static const uint8_t output_expected[] = {
#include "arm_thumb.inc"
};

#define PLUS_MINUS_OUTPUT_SIZE 2

ZTEST(nrf_compress_decompression, test_valid_implementation)
{
int rc;
uint32_t pos = 0;
uint32_t offset;
uint8_t *output;
uint32_t output_size;
uint32_t total_output_size = 0;
struct nrf_compress_implementation *implementation = NULL;

implementation = nrf_compress_implementation_find(NRF_COMPRESS_TYPE_ARM_THUMB);
Expand All @@ -36,26 +39,36 @@ ZTEST(nrf_compress_decompression, test_valid_implementation)

while (pos < sizeof(input_compressed)) {
uint32_t input_data_size;
bool last = false;

input_data_size = implementation->decompress_bytes_needed(NULL);
zassert_equal(input_data_size, CONFIG_NRF_COMPRESS_CHUNK_SIZE,
"Expected to need chunk size bytes for LZMA data");

if ((pos + input_data_size) >= sizeof(input_compressed)) {
input_data_size = sizeof(input_compressed) - pos;
last = true;
}

rc = implementation->decompress(NULL, &input_compressed[pos], input_data_size,
false, &offset, &output, &output_size);
last, &offset, &output, &output_size);

zassert_ok(rc, "Expected data decompress to be successful");
zassert_equal(output_size, input_data_size,
"Expected data decompress to be successful");
zassert_mem_equal(output, &output_expected[pos], output_size);

if (!(output_size == input_data_size || output_size ==
(input_data_size + PLUS_MINUS_OUTPUT_SIZE) || output_size ==
(input_data_size - PLUS_MINUS_OUTPUT_SIZE))) {
zassert_ok(1, "Expected data output size is not valid");
}

pos += offset;
total_output_size += output_size;
}

zassert_equal(total_output_size, sizeof(output_expected),
"Expected data decompress output size to match data input size");

rc = implementation->deinit(NULL);
zassert_ok(rc, "Expected deinit to be successful");
}
Expand Down

0 comments on commit acaaf83

Please sign in to comment.