]> git.ipfire.org Git - thirdparty/zstd.git/commitdiff
wrote a test for dictionary corpus
authorPaul Cruz <paulcruz74@fb.com>
Tue, 20 Jun 2017 00:13:00 +0000 (17:13 -0700)
committerPaul Cruz <paulcruz74@fb.com>
Tue, 20 Jun 2017 00:13:00 +0000 (17:13 -0700)
tests/decodecorpus.c

index 08c2cc0a5f834b720843b143fb256a3c85f5b620..d2bf565c9cbb5748c1e8611bacdba4640e2edd87 100644 (file)
@@ -1297,6 +1297,54 @@ cleanup:
     return ret;
 }
 
+static size_t testDecodeWithDict(U32 seed, size_t dictSize)
+{
+    U32 const dictID = RAND(&seed);
+    int errorDetected = 0;
+    BYTE* const fullDict = malloc(dictSize);
+    if (fullDict == NULL) {
+        return ERROR(GENERIC);
+    }
+
+    {
+        int ret = genRandomDict(dictID, seed, dictSize, fullDict);
+        if (ret != 0) {
+            errorDetected = ERROR(GENERIC);
+            goto dictTestCleanup;
+        }
+    }
+
+    frame_t* fr;
+    {
+        size_t dictContentSize = dictSize-dictSize/4;
+        BYTE* const dictContent = fullDict+dictSize/4;
+        dictInfo const info = initDictInfo(1, dictContentSize, dictContent, dictID);
+        seed = generateFrame(seed, &fr, info);
+    }
+
+    {
+        ZSTD_DCtx* const dctx = ZSTD_createDCtx();
+        {
+            size_t const returnValue = ZSTD_decompress_usingDict(dctx, DECOMPRESSED_BUFFER, MAX_DECOMPRESSED_SIZE,
+                                                   fr.dataStart, (BYTE*)fr.data - (BYTE*)fr.dataStart,
+                                                   fullDict, dictSize);
+            if (ZSTD_isError(returnValue)) {
+               errorDetected = ZSTD_getErrorName(returnValue);
+               goto dictTestCleanup
+            }
+        }
+
+        if (memcmp(DECOMPRESSED_BUFFER, fr->srcStart, (BYTE*)fr->src - (BYTE*)fr->srcStart) != 0) {
+            errorDetected = ERROR(corruption_detected);
+            goto dictTestCleanup;
+        }
+    }
+
+dictTestCleanup:
+    free(fullDict);
+    return errorDetected;
+}
+
 static int runTestMode(U32 seed, unsigned numFiles, unsigned const testDurationS)
 {
     unsigned fnum;