| #include "unity/unity.h" |
| #include "zlib.h" |
| #include "deflate.h" |
|
|
| #include <string.h> |
| #include <stdlib.h> |
| #include <stdio.h> |
|
|
| |
| extern void test_check_match(deflate_state *s, IPos start, IPos match, int length); |
|
|
| void setUp(void) { |
| |
| } |
|
|
| void tearDown(void) { |
| |
| } |
|
|
| |
| static deflate_state* init_state(z_stream *strm) { |
| memset(strm, 0, sizeof(*strm)); |
| int ret = deflateInit(strm, Z_DEFAULT_COMPRESSION); |
| TEST_ASSERT_EQUAL_INT(Z_OK, ret); |
| TEST_ASSERT_NOT_NULL(strm->state); |
| return (deflate_state*)strm->state; |
| } |
|
|
| |
| void test_check_match_basic_equal(void) { |
| z_stream strm; |
| deflate_state *s = init_state(&strm); |
|
|
| |
| const IPos match = 50; |
| const IPos start = 100; |
| const int length = 9; |
| const unsigned char seq[] = { 'H','e','l','l','o','Z','l','i','b' }; |
|
|
| |
| TEST_ASSERT_NOT_NULL(s->window); |
| memcpy(s->window + match, seq, length); |
| memcpy(s->window + start, seq, length); |
|
|
| |
| test_check_match(s, start, match, length); |
|
|
| TEST_ASSERT_EQUAL_INT(Z_OK, deflateEnd(&strm)); |
| } |
|
|
| |
| void test_check_match_match_minus_one_case(void) { |
| z_stream strm; |
| deflate_state *s = init_state(&strm); |
|
|
| |
| |
| |
| const IPos match = (IPos)-1; |
| const IPos start = 10; |
| const int length = 6; |
|
|
| const unsigned char pattern[] = { 1, 2, 3, 4, 5 }; |
| TEST_ASSERT_NOT_NULL(s->window); |
|
|
| |
| memcpy(s->window + 0, pattern, sizeof(pattern)); |
| memcpy(s->window + (start + 1), pattern, sizeof(pattern)); |
|
|
| |
| test_check_match(s, start, match, length); |
|
|
| TEST_ASSERT_EQUAL_INT(Z_OK, deflateEnd(&strm)); |
| } |
|
|
| |
| void test_check_match_length_one(void) { |
| z_stream strm; |
| deflate_state *s = init_state(&strm); |
|
|
| const IPos match = 42; |
| const IPos start = 1234; |
| const int length = 1; |
|
|
| TEST_ASSERT_NOT_NULL(s->window); |
|
|
| |
| s->window[match] = (Byte)'Q'; |
| s->window[start] = (Byte)'Q'; |
|
|
| |
| test_check_match(s, start, match, length); |
|
|
| TEST_ASSERT_EQUAL_INT(Z_OK, deflateEnd(&strm)); |
| } |
|
|
| int main(void) { |
| UNITY_BEGIN(); |
| RUN_TEST(test_check_match_basic_equal); |
| RUN_TEST(test_check_match_match_minus_one_case); |
| RUN_TEST(test_check_match_length_one); |
| return UNITY_END(); |
| } |