| #include "unity/unity.h" |
| #include "zlib.h" |
| #include <string.h> |
| #include <stdlib.h> |
|
|
| void setUp(void) { |
| |
| } |
|
|
| void tearDown(void) { |
| |
| } |
|
|
| static void init_stream(z_stream *strm) { |
| memset(strm, 0, sizeof(*strm)); |
| int ret = deflateInit(strm, Z_DEFAULT_COMPRESSION); |
| TEST_ASSERT_EQUAL_INT(Z_OK, ret); |
| } |
|
|
| |
| void test_deflateParams_null_stream_returns_error(void) { |
| int ret = deflateParams(NULL, 1, Z_DEFAULT_STRATEGY); |
| TEST_ASSERT_EQUAL_INT(Z_STREAM_ERROR, ret); |
| } |
|
|
| |
| void test_deflateParams_uninitialized_stream_returns_error(void) { |
| z_stream strm; |
| memset(&strm, 0, sizeof(strm)); |
| int ret = deflateParams(&strm, 1, Z_DEFAULT_STRATEGY); |
| TEST_ASSERT_EQUAL_INT(Z_STREAM_ERROR, ret); |
| } |
|
|
| |
| void test_deflateParams_invalid_level_returns_error(void) { |
| z_stream strm; |
| init_stream(&strm); |
|
|
| int ret; |
| ret = deflateParams(&strm, 10, Z_DEFAULT_STRATEGY); |
| TEST_ASSERT_EQUAL_INT(Z_STREAM_ERROR, ret); |
|
|
| ret = deflateParams(&strm, -2, Z_DEFAULT_STRATEGY); |
| TEST_ASSERT_EQUAL_INT(Z_STREAM_ERROR, ret); |
|
|
| deflateEnd(&strm); |
| } |
|
|
| |
| void test_deflateParams_invalid_strategy_returns_error(void) { |
| z_stream strm; |
| init_stream(&strm); |
|
|
| int ret = deflateParams(&strm, 1, Z_FIXED + 1); |
| TEST_ASSERT_EQUAL_INT(Z_STREAM_ERROR, ret); |
|
|
| deflateEnd(&strm); |
| } |
|
|
| |
| void test_deflateParams_accepts_default_compression_constant(void) { |
| z_stream strm; |
| init_stream(&strm); |
|
|
| int ret = deflateParams(&strm, Z_DEFAULT_COMPRESSION, Z_DEFAULT_STRATEGY); |
| TEST_ASSERT_EQUAL_INT(Z_OK, ret); |
|
|
| deflateEnd(&strm); |
| } |
|
|
| |
| void test_deflateParams_fresh_stream_with_pending_input_returns_ok(void) { |
| z_stream strm; |
| init_stream(&strm); |
|
|
| unsigned char inbuf[128]; |
| for (size_t i = 0; i < sizeof(inbuf); i++) inbuf[i] = (unsigned char)(i & 0xFF); |
| unsigned char outbuf[1]; |
|
|
| strm.next_in = inbuf; |
| strm.avail_in = (uInt)sizeof(inbuf); |
| strm.next_out = outbuf; |
| strm.avail_out = (uInt)sizeof(outbuf); |
|
|
| |
| int ret = deflateParams(&strm, 6 , Z_HUFFMAN_ONLY); |
| TEST_ASSERT_EQUAL_INT(Z_OK, ret); |
|
|
| deflateEnd(&strm); |
| } |
|
|
| |
| static void set_last_flush_non_negative(z_stream *strm) { |
| |
| unsigned char dummy; |
| strm->next_out = &dummy; |
| strm->avail_out = 0; |
| strm->next_in = Z_NULL; |
| strm->avail_in = 0; |
| int ret = deflate(strm, Z_NO_FLUSH); |
| |
| TEST_ASSERT_EQUAL_INT(Z_BUF_ERROR, ret); |
| } |
|
|
| |
| void test_deflateParams_triggers_flush_and_returns_buf_error_with_pending_input(void) { |
| z_stream strm; |
| init_stream(&strm); |
|
|
| |
| set_last_flush_non_negative(&strm); |
|
|
| |
| unsigned char inbuf[256]; |
| for (size_t i = 0; i < sizeof(inbuf); i++) inbuf[i] = (unsigned char)('A' + (i % 26)); |
| unsigned char dummy_out; |
| strm.next_in = inbuf; |
| strm.avail_in = (uInt)sizeof(inbuf); |
| strm.next_out = &dummy_out; |
| strm.avail_out = 0; |
|
|
| |
| int ret = deflateParams(&strm, 6 , Z_HUFFMAN_ONLY); |
| TEST_ASSERT_EQUAL_INT(Z_BUF_ERROR, ret); |
|
|
| deflateEnd(&strm); |
| } |
|
|
| |
| void test_deflateParams_flush_path_no_pending_returns_ok(void) { |
| z_stream strm; |
| init_stream(&strm); |
|
|
| |
| set_last_flush_non_negative(&strm); |
|
|
| |
| unsigned char dummy_out; |
| strm.next_in = Z_NULL; |
| strm.avail_in = 0; |
| strm.next_out = &dummy_out; |
| strm.avail_out = 0; |
|
|
| |
| int ret = deflateParams(&strm, 1, Z_DEFAULT_STRATEGY); |
| TEST_ASSERT_EQUAL_INT(Z_OK, ret); |
|
|
| deflateEnd(&strm); |
| } |
|
|
| int main(void) { |
| UNITY_BEGIN(); |
| RUN_TEST(test_deflateParams_null_stream_returns_error); |
| RUN_TEST(test_deflateParams_uninitialized_stream_returns_error); |
| RUN_TEST(test_deflateParams_invalid_level_returns_error); |
| RUN_TEST(test_deflateParams_invalid_strategy_returns_error); |
| RUN_TEST(test_deflateParams_accepts_default_compression_constant); |
| RUN_TEST(test_deflateParams_fresh_stream_with_pending_input_returns_ok); |
| RUN_TEST(test_deflateParams_triggers_flush_and_returns_buf_error_with_pending_input); |
| RUN_TEST(test_deflateParams_flush_path_no_pending_returns_ok); |
| return UNITY_END(); |
| } |