]> git.ipfire.org Git - thirdparty/zstd.git/commitdiff
`ZSTD_maxCLevel` now limited to 21 for 32-bit binaries. 2885/head
authorYonatan Komornik <yoniko@gmail.com>
Tue, 30 Nov 2021 18:31:52 +0000 (10:31 -0800)
committerYonatan Komornik <yoniko@gmail.com>
Tue, 30 Nov 2021 18:31:52 +0000 (10:31 -0800)
CI tests for constrained memory runs with max level on 32-bit binaries.

.github/workflows/dev-short-tests.yml
doc/zstd_manual.html
lib/compress/clevels.h
lib/compress/zstd_compress.c
tests/fuzzer.c
tests/playTests.sh

index c68fe5edfe33e100ad73f5c549d379054c637a0e..bc931e836beb5a866782ae28bcc64573d9caccfc 100644 (file)
@@ -30,6 +30,8 @@ jobs:
     steps:
     - uses: actions/checkout@v2
     - name: make check on 32-bit
+      env:
+        CHECK_CONSTRAINED_MEM: true
       run: |
         sudo apt update
         APT_PACKAGES="gcc-multilib" make apt-install
index 3d62f595281bc7a919427628c46ef08232400a42..7d2e1c6caafb4e28ff72e1e8b836887d113ae92d 100644 (file)
@@ -40,7 +40,7 @@
   functions.
 
   The library supports regular compression levels from 1 up to ZSTD_maxCLevel(),
-  which is currently 22. Levels >= 20, labeled `--ultra`, should be used with
+  which is 22 in most cases. Levels >= 20, labeled `--ultra`, should be used with
   caution, as they require more memory. The library also offers negative
   compression levels, which extend the range of speed vs. ratio preferences.
   The lower the level, the faster the speed (at the cost of compression).
index 9fa6adb5f4801567fa833915d794fbe08ead5231..38622f1a1e05d31cb47ee0db76001a426394f2d3 100644 (file)
@@ -16,7 +16,8 @@
 
 /*-=====  Pre-defined compression levels  =====-*/
 
-#define ZSTD_MAX_CLEVEL     22
+#define ZSTD_MAX_CLEVEL           22
+#define ZSTD_MAX_32BIT_CLEVEL     21
 
 #ifdef __GNUC__
 __attribute__((__unused__))
index 32e486cd8c1b100f9ce913a67dd21ffb4ec7507a..1edd1444a197421ca09b4deaf364f0124e5f4454 100644 (file)
@@ -6166,7 +6166,7 @@ size_t ZSTD_endStream(ZSTD_CStream* zcs, ZSTD_outBuffer* output)
 /*-=====  Pre-defined compression levels  =====-*/
 #include "clevels.h"
 
-int ZSTD_maxCLevel(void) { return ZSTD_MAX_CLEVEL; }
+int ZSTD_maxCLevel(void) { return MEM_32bits() ? ZSTD_MAX_32BIT_CLEVEL : ZSTD_MAX_CLEVEL; }
 int ZSTD_minCLevel(void) { return (int)-ZSTD_TARGETLENGTH_MAX; }
 int ZSTD_defaultCLevel(void) { return ZSTD_CLEVEL_DEFAULT; }
 
@@ -6262,7 +6262,7 @@ static ZSTD_compressionParameters ZSTD_getCParams_internal(int compressionLevel,
     /* row */
     if (compressionLevel == 0) row = ZSTD_CLEVEL_DEFAULT;   /* 0 == default */
     else if (compressionLevel < 0) row = 0;   /* entry 0 is baseline for fast mode */
-    else if (compressionLevel > ZSTD_MAX_CLEVEL) row = ZSTD_MAX_CLEVEL;
+    else if (compressionLevel > ZSTD_maxCLevel()) row = ZSTD_maxCLevel();
     else row = compressionLevel;
 
     {   ZSTD_compressionParameters cp = ZSTD_defaultCParameters[tableID][row];
index e3cdd321d5b57b35c5ab75a8ebcc6b73ae4f4fe8..e2eedbcea7547812421cb518a298da531501bdf4 100644 (file)
@@ -1982,7 +1982,7 @@ static int basicUnitTests(U32 const seed, double compressibility)
             int const rowLevelEnd = 8;
 
             DISPLAYLEVEL(3, "test%3i : flat-dictionary efficiency test : \n", testNb++);
-            assert(maxLevel == 22);
+            assert(maxLevel == (MEM_32bits() ? 21 : 22));
             RDG_genBuffer(CNBuffer, flatdictSize + contentSize, compressibility, 0., seed);
             DISPLAYLEVEL(4, "content hash : %016llx;  dict hash : %016llx \n", XXH64(contentStart, contentSize, 0), XXH64(dict, flatdictSize, 0));
 
index 1edca7c3c72efe42c18c4e066f87eb66cc8aa596..dc7c2e8ed1d00a59ceabd869bc499b4708a2ef71 100755 (executable)
@@ -1538,6 +1538,11 @@ elif [ "$longCSize19wlog23" -gt "$optCSize19wlog23" ]; then
     exit 1
 fi
 
+if [ -n "$CHECK_CONSTRAINED_MEM" ]; then
+    println "\n===>  zsdt constrained memory tests "
+    # shellcheck disable=SC2039
+    (ulimit -Sv 500000 ; datagen -g2M | zstd -22 --single-thread --ultra > /dev/null)
+fi
 
 if [ "$1" != "--test-large-data" ]; then
     println "Skipping large data tests"