blob: cd5f6e5b95b4632c8443dd57701c590f1fda03f6 [file] [log] [blame]
/* test_compress_bound.cc - Test compressBound() 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>
#define MAX_LENGTH (32)
class compress_bound_variant : public testing::TestWithParam<int32_t> {
public:
void estimate(int32_t level) {
z_size_t estimate_len = 0;
uint8_t *uncompressed = NULL;
uint8_t dest[128];
int err;
uncompressed = (uint8_t *)malloc(MAX_LENGTH);
ASSERT_TRUE(uncompressed != NULL);
/* buffer with values for worst case compression */
for (int32_t j = 0; j < MAX_LENGTH; j++) {
uncompressed[j] = (uint8_t)j;
}
for (z_size_t i = 0; i < MAX_LENGTH; i++) {
z_size_t dest_len = sizeof(dest);
/* calculate actual output length */
estimate_len = PREFIX(compressBound)(i);
err = PREFIX(compress2)(dest, &dest_len, uncompressed, i, level);
EXPECT_EQ(err, Z_OK);
EXPECT_GE(estimate_len, dest_len) <<
"level: " << level << "\n" <<
"length: " << i;
}
free(uncompressed);
}
};
TEST_P(compress_bound_variant, estimate) {
estimate(GetParam());
}
INSTANTIATE_TEST_SUITE_P(compress_bound, compress_bound_variant,
testing::Values(0, 1, 2, 3, 4, 5, 6, 7, 8, 9));