]> git.ipfire.org Git - thirdparty/zlib-ng.git/commitdiff
Added compressBound tests for small buffers.
authorNathan Moinvaziri <nathan@nathanm.com>
Sun, 10 Apr 2022 05:19:56 +0000 (22:19 -0700)
committerHans Kristian Rosbach <hk-github@circlestorm.org>
Tue, 3 May 2022 08:33:05 +0000 (10:33 +0200)
Co-authored-by: Mika T. Lindqvist <postmaster@raasu.org>
test/CMakeLists.txt
test/test_compress_bound.cc [new file with mode: 0644]

index 6ebaf7c96633fe175d036d744de8f29b189babe8..8b250ed780ba1981d68d08791e5fa4fd5f9893b6 100644 (file)
@@ -54,6 +54,7 @@ set(TEST_SRCS
     test_aligned_alloc.cc
     test_compare256.cc
     test_compress.cc
+    test_compress_bound.cc
     test_crc32.cc
     test_cve-2003-0107.cc
     test_deflate_bound.cc
diff --git a/test/test_compress_bound.cc b/test/test_compress_bound.cc
new file mode 100644 (file)
index 0000000..2757fb2
--- /dev/null
@@ -0,0 +1,59 @@
+/* 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<z_size_t> {
+public:
+    void estimate(z_size_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));