aboutsummaryrefslogtreecommitdiff
path: root/tests/test_bcj_exact_size.c
diff options
context:
space:
mode:
Diffstat (limited to 'tests/test_bcj_exact_size.c')
-rw-r--r--tests/test_bcj_exact_size.c75
1 files changed, 41 insertions, 34 deletions
diff --git a/tests/test_bcj_exact_size.c b/tests/test_bcj_exact_size.c
index 4a11a9c6..bd034ef2 100644
--- a/tests/test_bcj_exact_size.c
+++ b/tests/test_bcj_exact_size.c
@@ -15,25 +15,24 @@
#include "tests.h"
-/// Something to be compressed
-static const uint8_t in[16] = "0123456789ABCDEF";
-
-/// in[] after compression
-static uint8_t compressed[1024];
-static size_t compressed_size = 0;
+static void
+test_exact_size(void)
+{
+ // Something to be compressed
+ const uint8_t in[16] = "0123456789ABCDEF";
-/// Output buffer for decompressing compressed[]
-static uint8_t out[sizeof(in)];
+ // in[] after compression
+ uint8_t compressed[1024];
+ size_t compressed_size = 0;
+ // Output buffer for decompressing compressed[]
+ uint8_t out[sizeof(in)];
-static void
-compress(void)
-{
// Compress with PowerPC BCJ and LZMA2. PowerPC BCJ is used because
// it has fixed 4-byte alignment which makes triggering the potential
// bug easy.
lzma_options_lzma opt_lzma2;
- succeed(lzma_lzma_preset(&opt_lzma2, 0));
+ assert_false(lzma_lzma_preset(&opt_lzma2, 0));
lzma_filter filters[3] = {
{ .id = LZMA_FILTER_POWERPC, .options = NULL },
@@ -41,18 +40,16 @@ compress(void)
{ .id = LZMA_VLI_UNKNOWN, .options = NULL },
};
- expect(lzma_stream_buffer_encode(filters, LZMA_CHECK_CRC32, NULL,
+ assert_lzma_ret(lzma_stream_buffer_encode(
+ filters, LZMA_CHECK_CRC32, NULL,
in, sizeof(in),
- compressed, &compressed_size, sizeof(compressed))
- == LZMA_OK);
-}
+ compressed, &compressed_size, sizeof(compressed)),
+ LZMA_OK);
-
-static void
-decompress(void)
-{
+ // Decompress so that we won't give more output space than
+ // the Stream will need.
lzma_stream strm = LZMA_STREAM_INIT;
- expect(lzma_stream_decoder(&strm, 10 << 20, 0) == LZMA_OK);
+ assert_lzma_ret(lzma_stream_decoder(&strm, 10 << 20, 0), LZMA_OK);
strm.next_in = compressed;
strm.next_out = out;
@@ -63,13 +60,13 @@ decompress(void)
const lzma_ret ret = lzma_code(&strm, LZMA_RUN);
if (ret == LZMA_STREAM_END) {
- expect(strm.total_in == compressed_size);
- expect(strm.total_out == sizeof(in));
+ assert_uint_eq(strm.total_in, compressed_size);
+ assert_uint_eq(strm.total_out, sizeof(in));
lzma_end(&strm);
return;
}
- expect(ret == LZMA_OK);
+ assert_lzma_ret(ret, LZMA_OK);
if (strm.total_out < sizeof(in))
strm.avail_out = 1;
@@ -78,7 +75,7 @@ decompress(void)
static void
-decompress_empty(void)
+test_empty_block(void)
{
// An empty file with one Block using PowerPC BCJ and LZMA2.
static const uint8_t empty_bcj_lzma2[] = {
@@ -93,21 +90,31 @@ decompress_empty(void)
// Decompress without giving any output space.
uint64_t memlimit = 1 << 20;
+ uint8_t out[1];
size_t in_pos = 0;
size_t out_pos = 0;
- expect(lzma_stream_buffer_decode(&memlimit, 0, NULL,
+ assert_lzma_ret(lzma_stream_buffer_decode(&memlimit, 0, NULL,
empty_bcj_lzma2, &in_pos, sizeof(empty_bcj_lzma2),
- out, &out_pos, 0) == LZMA_OK);
- expect(in_pos == sizeof(empty_bcj_lzma2));
- expect(out_pos == 0);
+ out, &out_pos, 0),
+ LZMA_OK);
+ assert_uint_eq(in_pos, sizeof(empty_bcj_lzma2));
+ assert_uint_eq(out_pos, 0);
}
extern int
-main(void)
+main(int argc, char **argv)
{
- compress();
- decompress();
- decompress_empty();
- return 0;
+ tuktest_start(argc, argv);
+
+ if (!lzma_filter_encoder_is_supported(LZMA_FILTER_POWERPC)
+ || !lzma_filter_decoder_is_supported(
+ LZMA_FILTER_POWERPC))
+ tuktest_early_skip("PowerPC BCJ encoder and/or decoder "
+ "is disabled");
+
+ tuktest_run(test_exact_size);
+ tuktest_run(test_empty_block);
+
+ return tuktest_end();
}