diff options
Diffstat (limited to 'neozip/test/test_small_buffers.cc')
| -rw-r--r-- | neozip/test/test_small_buffers.cc | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/neozip/test/test_small_buffers.cc b/neozip/test/test_small_buffers.cc new file mode 100644 index 0000000000..bb3449fd88 --- /dev/null +++ b/neozip/test/test_small_buffers.cc @@ -0,0 +1,69 @@ +/* test_small_buffers.cc - Test deflate() and inflate() with small buffers */ + +#include "zbuild.h" +#ifdef ZLIB_COMPAT +# include "zlib.h" +#else +# include "zlib-ng.h" +#endif + +#include <stdio.h> +#include <stdint.h> +#include <stdlib.h> +#include <string.h> + +#include "test_shared.h" + +#include <gtest/gtest.h> + +TEST(deflate, small_buffers) { + PREFIX3(stream) c_stream, d_stream; + uint8_t compr[128], uncompr[128]; + z_size_t compr_len = sizeof(compr), uncompr_len = sizeof(uncompr); + int err; + + memset(&c_stream, 0, sizeof(c_stream)); + memset(&d_stream, 0, sizeof(d_stream)); + + err = PREFIX(deflateInit)(&c_stream, Z_DEFAULT_COMPRESSION); + EXPECT_EQ(err, Z_OK); + + c_stream.next_in = (z_const unsigned char *)hello; + c_stream.next_out = compr; + + while (c_stream.total_in != hello_len && c_stream.total_out < compr_len) { + c_stream.avail_in = c_stream.avail_out = 1; /* force small buffers */ + err = PREFIX(deflate)(&c_stream, Z_NO_FLUSH); + EXPECT_EQ(err, Z_OK); + } + /* Finish the stream, still forcing small buffers */ + for (;;) { + c_stream.avail_out = 1; + err = PREFIX(deflate)(&c_stream, Z_FINISH); + if (err == Z_STREAM_END) break; + EXPECT_EQ(err, Z_OK); + } + + err = PREFIX(deflateEnd)(&c_stream); + EXPECT_EQ(err, Z_OK); + + strcpy((char*)uncompr, "garbage"); + + d_stream.next_in = compr; + d_stream.next_out = uncompr; + + err = PREFIX(inflateInit)(&d_stream); + EXPECT_EQ(err, Z_OK); + + while (d_stream.total_out < uncompr_len && d_stream.total_in < compr_len) { + d_stream.avail_in = d_stream.avail_out = 1; /* force small buffers */ + err = PREFIX(inflate)(&d_stream, Z_NO_FLUSH); + if (err == Z_STREAM_END) break; + EXPECT_EQ(err, Z_OK); + } + + err = PREFIX(inflateEnd)(&d_stream); + EXPECT_EQ(err, Z_OK); + + EXPECT_STREQ((char*)uncompr, hello); +} |
