Add ZSTD_set{C,F,}Params() helper functions
* Add ZSTD_setFParams() and ZSTD_setParams()
* Modify ZSTD_setCParams() to use ZSTD_setParameter() to avoid a second path setting parameters
* Add unit tests
* Update documentation to suggest using them to replace deprecated functions

Fixes #3396.
See PR #3395. A function that takes `ZSTD_parameters` or `ZSTD_compressionParams`, or `ZSTD_frameParams` and applies them to the cctx/cctxParams would be useful.
Add helper functions to set ZSTD_parameters on a cctx or cctxParams
diff --git a/lib/compress/zstd_compress.c b/lib/compress/zstd_compress.c
index dc70dfbd82e..72108311ace 100644
--- a/lib/compress/zstd_compress.c
+++ b/lib/compress/zstd_compress.c
@@ -1178,16 +1178,39 @@ size_t ZSTD_CCtx_setParametersUsingCCtxParams(
 
 size_t ZSTD_CCtx_setCParams(ZSTD_CCtx* cctx, ZSTD_compressionParameters cparams)
 {
+    ZSTD_STATIC_ASSERT(sizeof(cparams) == 7 * 4 /* all params are listed below */);
     DEBUGLOG(4, "ZSTD_CCtx_setCParams");
-    assert(cctx != NULL);
-    if (cctx->streamStage != zcss_init) {
-        /* All parameters in @cparams are allowed to be updated during MT compression.
-         * This must be signaled, so that MT compression picks up the changes */
-        cctx->cParamsChanged = 1;
-    }
-    /* only update if parameters are valid */
+    /* only update if all parameters are valid */
     FORWARD_IF_ERROR(ZSTD_checkCParams(cparams), "");
-    cctx->requestedParams.cParams = cparams;
+    FORWARD_IF_ERROR(ZSTD_CCtx_setParameter(cctx, ZSTD_c_windowLog, cparams.windowLog), "");
+    FORWARD_IF_ERROR(ZSTD_CCtx_setParameter(cctx, ZSTD_c_chainLog, cparams.chainLog), "");
+    FORWARD_IF_ERROR(ZSTD_CCtx_setParameter(cctx, ZSTD_c_hashLog, cparams.hashLog), "");
+    FORWARD_IF_ERROR(ZSTD_CCtx_setParameter(cctx, ZSTD_c_searchLog, cparams.searchLog), "");
+    FORWARD_IF_ERROR(ZSTD_CCtx_setParameter(cctx, ZSTD_c_minMatch, cparams.minMatch), "");
+    FORWARD_IF_ERROR(ZSTD_CCtx_setParameter(cctx, ZSTD_c_targetLength, cparams.targetLength), "");
+    FORWARD_IF_ERROR(ZSTD_CCtx_setParameter(cctx, ZSTD_c_strategy, cparams.strategy), "");
+    return 0;
+}
+
+size_t ZSTD_CCtx_setFParams(ZSTD_CCtx* cctx, ZSTD_frameParameters fparams)
+{
+    ZSTD_STATIC_ASSERT(sizeof(fparams) == 3 * 4 /* all params are listed below */);
+    DEBUGLOG(4, "ZSTD_CCtx_setFParams");
+    FORWARD_IF_ERROR(ZSTD_CCtx_setParameter(cctx, ZSTD_c_contentSizeFlag, fparams.contentSizeFlag != 0), "");
+    FORWARD_IF_ERROR(ZSTD_CCtx_setParameter(cctx, ZSTD_c_checksumFlag, fparams.checksumFlag != 0), "");
+    FORWARD_IF_ERROR(ZSTD_CCtx_setParameter(cctx, ZSTD_c_dictIDFlag, fparams.noDictIDFlag == 0), "");
+    return 0;
+}
+
+size_t ZSTD_CCtx_setParams(ZSTD_CCtx* cctx, ZSTD_parameters params)
+{
+    DEBUGLOG(4, "ZSTD_CCtx_setParams");
+    /* First check cParams, because we want to update all or none. */
+    FORWARD_IF_ERROR(ZSTD_checkCParams(params.cParams), "");
+    /* Next set fParams, because this could fail if the cctx isn't in init stage. */
+    FORWARD_IF_ERROR(ZSTD_CCtx_setFParams(cctx, params.fParams), "");
+    /* Finally set cParams, which should succeed. */
+    FORWARD_IF_ERROR(ZSTD_CCtx_setCParams(cctx, params.cParams), "");
     return 0;
 }
 
diff --git a/lib/zstd.h b/lib/zstd.h
index 6c0c8eecbfe..56c43624a85 100644
--- a/lib/zstd.h
+++ b/lib/zstd.h
@@ -1803,12 +1803,26 @@ ZSTDLIB_STATIC_API size_t ZSTD_checkCParams(ZSTD_compressionParameters params);
 ZSTDLIB_STATIC_API ZSTD_compressionParameters ZSTD_adjustCParams(ZSTD_compressionParameters cPar, unsigned long long srcSize, size_t dictSize);
 
 /*! ZSTD_CCtx_setCParams() :
- *  Set all parameters provided within @cparams into the working @cctx.
+ *  Set all parameters provided within @p cparams into the working @p cctx.
  *  Note : if modifying parameters during compression (MT mode only),
  *         note that changes to the .windowLog parameter will be ignored.
- * @return 0 on success, or an error code (can be checked with ZSTD_isError()) */
+ * @return 0 on success, or an error code (can be checked with ZSTD_isError()).
+ *         On failure, no parameters are updated.
+ */
 ZSTDLIB_STATIC_API size_t ZSTD_CCtx_setCParams(ZSTD_CCtx* cctx, ZSTD_compressionParameters cparams);
 
+/*! ZSTD_CCtx_setFParams() :
+ *  Set all parameters provided within @p fparams into the working @p cctx.
+ * @return 0 on success, or an error code (can be checked with ZSTD_isError()).
+ */
+ZSTDLIB_STATIC_API size_t ZSTD_CCtx_setFParams(ZSTD_CCtx* cctx, ZSTD_frameParameters fparams);
+
+/*! ZSTD_CCtx_setParams() :
+ *  Set all parameters provided within @p params into the working @p cctx.
+ * @return 0 on success, or an error code (can be checked with ZSTD_isError()).
+ */
+ZSTDLIB_STATIC_API size_t ZSTD_CCtx_setParams(ZSTD_CCtx* cctx, ZSTD_parameters params);
+
 /*! ZSTD_compress_advanced() :
  *  Note : this function is now DEPRECATED.
  *         It can be replaced by ZSTD_compress2(), in combination with ZSTD_CCtx_setParameter() and other parameter setters.
@@ -2452,12 +2466,9 @@ size_t ZSTD_initCStream_usingDict(ZSTD_CStream* zcs,
                            int compressionLevel);
 
 /*! ZSTD_initCStream_advanced() :
- * This function is DEPRECATED, and is approximately equivalent to:
+ * This function is DEPRECATED, and is equivalent to:
  *     ZSTD_CCtx_reset(zcs, ZSTD_reset_session_only);
- *     // Pseudocode: Set each zstd parameter and leave the rest as-is.
- *     for ((param, value) : params) {
- *         ZSTD_CCtx_setParameter(zcs, param, value);
- *     }
+ *     ZSTD_CCtx_setParams(zcs, params);
  *     ZSTD_CCtx_setPledgedSrcSize(zcs, pledgedSrcSize);
  *     ZSTD_CCtx_loadDictionary(zcs, dict, dictSize);
  *
@@ -2486,12 +2497,9 @@ ZSTDLIB_STATIC_API
 size_t ZSTD_initCStream_usingCDict(ZSTD_CStream* zcs, const ZSTD_CDict* cdict);
 
 /*! ZSTD_initCStream_usingCDict_advanced() :
- *   This function is DEPRECATED, and is approximately equivalent to:
+ *   This function is DEPRECATED, and is equivalent to:
  *     ZSTD_CCtx_reset(zcs, ZSTD_reset_session_only);
- *     // Pseudocode: Set each zstd frame parameter and leave the rest as-is.
- *     for ((fParam, value) : fParams) {
- *         ZSTD_CCtx_setParameter(zcs, fParam, value);
- *     }
+ *     ZSTD_CCtx_setFParams(zcs, fParams);
  *     ZSTD_CCtx_setPledgedSrcSize(zcs, pledgedSrcSize);
  *     ZSTD_CCtx_refCDict(zcs, cdict);
  *

diff --git a/tests/fuzzer.c b/tests/fuzzer.c
index 85fa38475dd..fa5f89aa62e 100644
--- a/tests/fuzzer.c
+++ b/tests/fuzzer.c
@@ -1650,6 +1650,133 @@ static int basicUnitTests(U32 const seed, double compressibility)
     }
     DISPLAYLEVEL(3, "OK \n");
 
+    DISPLAYLEVEL(3, "test%3d : ZSTD_CCtx_setCParams() : ", testNb++);
+    {   ZSTD_CCtx* const cctx = ZSTD_createCCtx();
+        int value;
+        ZSTD_compressionParameters cparams = ZSTD_getCParams(1, 0, 0);
+        cparams.strategy = -1;
+        /* Set invalid cParams == no change. */
+        CHECK(ZSTD_isError(ZSTD_CCtx_setCParams(cctx, cparams)));
+
+        CHECK_Z(ZSTD_CCtx_getParameter(cctx, ZSTD_c_windowLog, &value));
+        CHECK_EQ(value, 0);
+        CHECK_Z(ZSTD_CCtx_getParameter(cctx, ZSTD_c_chainLog, &value));
+        CHECK_EQ(value, 0);
+        CHECK_Z(ZSTD_CCtx_getParameter(cctx, ZSTD_c_hashLog, &value));
+        CHECK_EQ(value, 0);
+        CHECK_Z(ZSTD_CCtx_getParameter(cctx, ZSTD_c_searchLog, &value));
+        CHECK_EQ(value, 0);
+        CHECK_Z(ZSTD_CCtx_getParameter(cctx, ZSTD_c_minMatch, &value));
+        CHECK_EQ(value, 0);
+        CHECK_Z(ZSTD_CCtx_getParameter(cctx, ZSTD_c_targetLength, &value));
+        CHECK_EQ(value, 0);
+        CHECK_Z(ZSTD_CCtx_getParameter(cctx, ZSTD_c_strategy, &value));
+        CHECK_EQ(value, 0);
+
+        cparams = ZSTD_getCParams(12, 0, 0);
+        CHECK_Z(ZSTD_CCtx_setCParams(cctx, cparams));
+
+        CHECK_Z(ZSTD_CCtx_getParameter(cctx, ZSTD_c_windowLog, &value));
+        CHECK_EQ(value, (int)cparams.windowLog);
+        CHECK_Z(ZSTD_CCtx_getParameter(cctx, ZSTD_c_chainLog, &value));
+        CHECK_EQ(value, (int)cparams.chainLog);
+        CHECK_Z(ZSTD_CCtx_getParameter(cctx, ZSTD_c_hashLog, &value));
+        CHECK_EQ(value, (int)cparams.hashLog);
+        CHECK_Z(ZSTD_CCtx_getParameter(cctx, ZSTD_c_searchLog, &value));
+        CHECK_EQ(value, (int)cparams.searchLog);
+        CHECK_Z(ZSTD_CCtx_getParameter(cctx, ZSTD_c_minMatch, &value));
+        CHECK_EQ(value, (int)cparams.minMatch);
+        CHECK_Z(ZSTD_CCtx_getParameter(cctx, ZSTD_c_targetLength, &value));
+        CHECK_EQ(value, (int)cparams.targetLength);
+        CHECK_Z(ZSTD_CCtx_getParameter(cctx, ZSTD_c_strategy, &value));
+        CHECK_EQ(value, (int)cparams.strategy);
+
+        ZSTD_freeCCtx(cctx);
+    }
+
+    DISPLAYLEVEL(3, "test%3d : ZSTD_CCtx_setFParams() : ", testNb++);
+    {   ZSTD_CCtx* const cctx = ZSTD_createCCtx();
+        int value;
+        ZSTD_frameParameters fparams = {0, 1, 1};
+
+        CHECK_Z(ZSTD_CCtx_getParameter(cctx, ZSTD_c_contentSizeFlag, &value));
+        CHECK_EQ(value, 1);
+        CHECK_Z(ZSTD_CCtx_getParameter(cctx, ZSTD_c_checksumFlag, &value));
+        CHECK_EQ(value, 0);
+        CHECK_Z(ZSTD_CCtx_getParameter(cctx, ZSTD_c_dictIDFlag, &value));
+        CHECK_EQ(value, 1);
+
+        CHECK_Z(ZSTD_CCtx_setFParams(cctx, fparams));
+
+        CHECK_Z(ZSTD_CCtx_getParameter(cctx, ZSTD_c_contentSizeFlag, &value));
+        CHECK_EQ(value, fparams.contentSizeFlag);
+        CHECK_Z(ZSTD_CCtx_getParameter(cctx, ZSTD_c_checksumFlag, &value));
+        CHECK_EQ(value, fparams.checksumFlag);
+        CHECK_Z(ZSTD_CCtx_getParameter(cctx, ZSTD_c_dictIDFlag, &value));
+        CHECK_EQ(value, !fparams.noDictIDFlag);
+
+        ZSTD_freeCCtx(cctx);
+    }
+
+    DISPLAYLEVEL(3, "test%3d : ZSTD_CCtx_setCarams() : ", testNb++);
+    {   ZSTD_CCtx* const cctx = ZSTD_createCCtx();
+        int value;
+        ZSTD_parameters params = ZSTD_getParams(1, 0, 0);
+        params.cParams.strategy = -1;
+        /* Set invalid params == no change. */
+        CHECK(ZSTD_isError(ZSTD_CCtx_setParams(cctx, params)));
+
+        CHECK_Z(ZSTD_CCtx_getParameter(cctx, ZSTD_c_windowLog, &value));
+        CHECK_EQ(value, 0);
+        CHECK_Z(ZSTD_CCtx_getParameter(cctx, ZSTD_c_chainLog, &value));
+        CHECK_EQ(value, 0);
+        CHECK_Z(ZSTD_CCtx_getParameter(cctx, ZSTD_c_hashLog, &value));
+        CHECK_EQ(value, 0);
+        CHECK_Z(ZSTD_CCtx_getParameter(cctx, ZSTD_c_searchLog, &value));
+        CHECK_EQ(value, 0);
+        CHECK_Z(ZSTD_CCtx_getParameter(cctx, ZSTD_c_minMatch, &value));
+        CHECK_EQ(value, 0);
+        CHECK_Z(ZSTD_CCtx_getParameter(cctx, ZSTD_c_targetLength, &value));
+        CHECK_EQ(value, 0);
+        CHECK_Z(ZSTD_CCtx_getParameter(cctx, ZSTD_c_strategy, &value));
+        CHECK_EQ(value, 0);
+        CHECK_Z(ZSTD_CCtx_getParameter(cctx, ZSTD_c_contentSizeFlag, &value));
+        CHECK_EQ(value, 1);
+        CHECK_Z(ZSTD_CCtx_getParameter(cctx, ZSTD_c_checksumFlag, &value));
+        CHECK_EQ(value, 0);
+        CHECK_Z(ZSTD_CCtx_getParameter(cctx, ZSTD_c_dictIDFlag, &value));
+        CHECK_EQ(value, 1);
+
+        params = ZSTD_getParams(12, 0, 0);
+        params.fParams.contentSizeFlag = 0;
+        params.fParams.checksumFlag = 1;
+        params.fParams.noDictIDFlag = 1;
+        CHECK_Z(ZSTD_CCtx_setParams(cctx, params));
+
+        CHECK_Z(ZSTD_CCtx_getParameter(cctx, ZSTD_c_windowLog, &value));
+        CHECK_EQ(value, (int)params.cParams.windowLog);
+        CHECK_Z(ZSTD_CCtx_getParameter(cctx, ZSTD_c_chainLog, &value));
+        CHECK_EQ(value, (int)params.cParams.chainLog);
+        CHECK_Z(ZSTD_CCtx_getParameter(cctx, ZSTD_c_hashLog, &value));
+        CHECK_EQ(value, (int)params.cParams.hashLog);
+        CHECK_Z(ZSTD_CCtx_getParameter(cctx, ZSTD_c_searchLog, &value));
+        CHECK_EQ(value, (int)params.cParams.searchLog);
+        CHECK_Z(ZSTD_CCtx_getParameter(cctx, ZSTD_c_minMatch, &value));
+        CHECK_EQ(value, (int)params.cParams.minMatch);
+        CHECK_Z(ZSTD_CCtx_getParameter(cctx, ZSTD_c_targetLength, &value));
+        CHECK_EQ(value, (int)params.cParams.targetLength);
+        CHECK_Z(ZSTD_CCtx_getParameter(cctx, ZSTD_c_strategy, &value));
+        CHECK_EQ(value, (int)params.cParams.strategy);
+        CHECK_Z(ZSTD_CCtx_getParameter(cctx, ZSTD_c_contentSizeFlag, &value));
+        CHECK_EQ(value, params.fParams.contentSizeFlag);
+        CHECK_Z(ZSTD_CCtx_getParameter(cctx, ZSTD_c_checksumFlag, &value));
+        CHECK_EQ(value, params.fParams.checksumFlag);
+        CHECK_Z(ZSTD_CCtx_getParameter(cctx, ZSTD_c_dictIDFlag, &value));
+        CHECK_EQ(value, !params.fParams.noDictIDFlag);
+
+        ZSTD_freeCCtx(cctx);
+    }
+
     DISPLAYLEVEL(3, "test%3d : ldm conditionally enabled by default doesn't change cctx params: ", testNb++);
     {   ZSTD_CCtx* const cctx = ZSTD_createCCtx();
         ZSTD_outBuffer out = {NULL, 0, 0};

{"cltools/zstdgrep.sh": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "compression/verbose-wlog.sh": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "compression/levels.sh": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "compression/multi-threaded.sh": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "file-stat/compress-stdin-to-file.sh": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "file-stat/decompress-file-to-file.sh": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "compression/adapt.sh": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "compression/stream-size.sh": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "file-stat/decompress-stdin-to-file.sh": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "dict-builder/no-inputs.sh": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "dict-builder/empty-input.sh": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "compression/format.sh": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "compression/row-match-finder.sh": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "compression/basic.sh": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "file-stat/compress-file-to-file.sh": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "zstd-symlinks/zstdcat.sh": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "compression/golden.sh": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "progress/no-progress.sh": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "dictionaries/dictionary-mismatch.sh": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "compression/multiple-files.sh": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "file-stat/decompress-file-to-stdout.sh": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "compression/window-resize.sh": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "basic/version.sh": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "basic/output_dir.sh": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "cltools/zstdless.sh": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "decompression/golden.sh": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "progress/progress.sh": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "compression/compress-literals.sh": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "decompression/pass-through.sh": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "compression/long-distance-matcher.sh": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "basic/memlimit.sh": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "file-stat/decompress-stdin-to-stdout.sh": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "file-stat/compress-file-to-stdout.sh": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "compression/gzip-compat.sh": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "dictionaries/golden.sh": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "basic/help.sh": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "file-stat/compress-stdin-to-stdout.sh": {"run": "PASS", "test": "NONE", "fix": "PASS"}}
{"cltools/zstdgrep.sh": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "compression/verbose-wlog.sh": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "compression/levels.sh": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "compression/multi-threaded.sh": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "file-stat/compress-stdin-to-file.sh": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "file-stat/decompress-file-to-file.sh": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "compression/adapt.sh": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "compression/stream-size.sh": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "file-stat/decompress-stdin-to-file.sh": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "dict-builder/no-inputs.sh": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "dict-builder/empty-input.sh": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "compression/format.sh": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "compression/row-match-finder.sh": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "compression/basic.sh": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "file-stat/compress-file-to-file.sh": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "zstd-symlinks/zstdcat.sh": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "compression/golden.sh": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "progress/no-progress.sh": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "dictionaries/dictionary-mismatch.sh": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "compression/multiple-files.sh": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "file-stat/decompress-file-to-stdout.sh": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "compression/window-resize.sh": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "basic/version.sh": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "basic/output_dir.sh": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "cltools/zstdless.sh": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "decompression/golden.sh": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "progress/progress.sh": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "compression/compress-literals.sh": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "decompression/pass-through.sh": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "compression/long-distance-matcher.sh": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "basic/memlimit.sh": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "file-stat/decompress-stdin-to-stdout.sh": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "file-stat/compress-file-to-stdout.sh": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "compression/gzip-compat.sh": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "dictionaries/golden.sh": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "basic/help.sh": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "file-stat/compress-stdin-to-stdout.sh": {"run": "PASS", "test": "NONE", "fix": "PASS"}}
{"passed_count": 37, "failed_count": 0, "skipped_count": 0, "passed_tests": ["cltools/zstdgrep.sh", "compression/verbose-wlog.sh", "compression/levels.sh", "compression/multi-threaded.sh", "file-stat/compress-stdin-to-file.sh", "file-stat/decompress-file-to-file.sh", "compression/adapt.sh", "compression/stream-size.sh", "file-stat/decompress-stdin-to-file.sh", "dict-builder/no-inputs.sh", "dict-builder/empty-input.sh", "compression/format.sh", "compression/row-match-finder.sh", "compression/basic.sh", "file-stat/compress-file-to-file.sh", "zstd-symlinks/zstdcat.sh", "compression/golden.sh", "progress/no-progress.sh", "dictionaries/dictionary-mismatch.sh", "compression/multiple-files.sh", "file-stat/decompress-file-to-stdout.sh", "compression/window-resize.sh", "basic/version.sh", "basic/output_dir.sh", "cltools/zstdless.sh", "decompression/golden.sh", "progress/progress.sh", "compression/compress-literals.sh", "decompression/pass-through.sh", "compression/long-distance-matcher.sh", "basic/memlimit.sh", "file-stat/decompress-stdin-to-stdout.sh", "file-stat/compress-file-to-stdout.sh", "compression/gzip-compat.sh", "dictionaries/golden.sh", "basic/help.sh", "file-stat/compress-stdin-to-stdout.sh"], "failed_tests": [], "skipped_tests": []}
{"passed_count": 0, "failed_count": 0, "skipped_count": 0, "passed_tests": [], "failed_tests": [], "skipped_tests": []}
{"passed_count": 37, "failed_count": 0, "skipped_count": 0, "passed_tests": ["cltools/zstdgrep.sh", "compression/verbose-wlog.sh", "compression/levels.sh", "compression/multi-threaded.sh", "file-stat/compress-stdin-to-file.sh", "file-stat/decompress-file-to-file.sh", "compression/adapt.sh", "compression/stream-size.sh", "file-stat/decompress-stdin-to-file.sh", "dict-builder/no-inputs.sh", "dict-builder/empty-input.sh", "compression/format.sh", "compression/row-match-finder.sh", "compression/basic.sh", "file-stat/compress-file-to-file.sh", "zstd-symlinks/zstdcat.sh", "compression/golden.sh", "progress/no-progress.sh", "dictionaries/dictionary-mismatch.sh", "compression/multiple-files.sh", "file-stat/decompress-file-to-stdout.sh", "compression/window-resize.sh", "basic/version.sh", "basic/output_dir.sh", "cltools/zstdless.sh", "decompression/golden.sh", "progress/progress.sh", "compression/compress-literals.sh", "decompression/pass-through.sh", "compression/long-distance-matcher.sh", "basic/memlimit.sh", "file-stat/decompress-stdin-to-stdout.sh", "file-stat/compress-file-to-stdout.sh", "compression/gzip-compat.sh", "dictionaries/golden.sh", "basic/help.sh", "file-stat/compress-stdin-to-stdout.sh"], "failed_tests": [], "skipped_tests": []}