]> git.ipfire.org Git - thirdparty/zstd.git/commitdiff
added --memtest=# command to fuzzer
authorYann Collet <cyan@fb.com>
Wed, 19 Jul 2017 23:01:16 +0000 (16:01 -0700)
committerYann Collet <cyan@fb.com>
Wed, 19 Jul 2017 23:01:16 +0000 (16:01 -0700)
to jump directly to relevant test section

tests/fuzzer.c

index 3099f346e0b3de09099525387c633d8ee628eb28..06f984087dd67d435bf43102733d0f8415401fab 100644 (file)
@@ -139,7 +139,7 @@ static void FUZ_freeDebug(void* counter, void* address)
 
 static void FUZ_displayMallocStats(mallocCounter_t count)
 {
-    DISPLAYLEVEL(3, "peak:%u KB,  nbMallocs:%u, total:%u KB \n",
+    DISPLAYLEVEL(3, "peak:%6u KB,  nbMallocs:%2u, total:%6u KB \n",
         (U32)(count.peakMalloc >> 10),
         count.nbMalloc,
         (U32)(count.totalMalloc >> 10));
@@ -153,7 +153,7 @@ static void FUZ_displayMallocStats(mallocCounter_t count)
         exit(1);                                   \
 }   }
 
-static int FUZ_mallocTests(unsigned seed, double compressibility)
+static int FUZ_mallocTests(unsigned seed, double compressibility, unsigned part)
 {
     size_t const inSize = 64 MB + 16 MB + 4 MB + 1 MB + 256 KB + 64 KB; /* 85.3 MB */
     size_t const outSize = ZSTD_compressBound(inSize);
@@ -171,6 +171,7 @@ static int FUZ_mallocTests(unsigned seed, double compressibility)
     RDG_genBuffer(inBuffer, inSize, compressibility, 0. /*auto*/, seed);
 
     /* simple compression tests */
+    if (part <= 1)
     {   int compressionLevel;
         for (compressionLevel=1; compressionLevel<=6; compressionLevel++) {
             mallocCounter_t malcount = INIT_MALLOC_COUNTER;
@@ -183,6 +184,7 @@ static int FUZ_mallocTests(unsigned seed, double compressibility)
     }   }
 
     /* streaming compression tests */
+    if (part <= 2)
     {   int compressionLevel;
         for (compressionLevel=1; compressionLevel<=6; compressionLevel++) {
             mallocCounter_t malcount = INIT_MALLOC_COUNTER;
@@ -199,6 +201,7 @@ static int FUZ_mallocTests(unsigned seed, double compressibility)
     }   }
 
     /* advanced MT API test */
+    if (part <= 3)
     {   U32 nbThreads;
         for (nbThreads=1; nbThreads<=4; nbThreads++) {
             int compressionLevel;
@@ -218,6 +221,7 @@ static int FUZ_mallocTests(unsigned seed, double compressibility)
     }   }   }
 
     /* advanced MT streaming API test */
+    if (part <= 4)
     {   U32 nbThreads;
         for (nbThreads=1; nbThreads<=4; nbThreads++) {
             int compressionLevel;
@@ -1442,6 +1446,19 @@ static unsigned readU32FromChar(const char** stringPtr)
     return result;
 }
 
+/** longCommandWArg() :
+ *  check if *stringPtr is the same as longCommand.
+ *  If yes, @return 1 and advances *stringPtr to the position which immediately follows longCommand.
+ *  @return 0 and doesn't modify *stringPtr otherwise.
+ */
+static unsigned longCommandWArg(const char** stringPtr, const char* longCommand)
+{
+    size_t const comSize = strlen(longCommand);
+    int const result = !strncmp(*stringPtr, longCommand, comSize);
+    if (result) *stringPtr += comSize;
+    return result;
+}
+
 int main(int argc, const char** argv)
 {
     U32 seed = 0;
@@ -1465,6 +1482,8 @@ int main(int argc, const char** argv)
         /* Handle commands. Aggregated commands are allowed */
         if (argument[0]=='-') {
 
+            if (longCommandWArg(&argument, "--memtest=")) { memTestsOnly = readU32FromChar(&argument); continue; }
+
             if (!strcmp(argument, "--memtest")) { memTestsOnly=1; continue; }
             if (!strcmp(argument, "--no-big-tests")) { bigTests=0; continue; }
 
@@ -1539,7 +1558,7 @@ int main(int argc, const char** argv)
 
     if (memTestsOnly) {
         g_displayLevel = MAX(3, g_displayLevel);
-        return FUZ_mallocTests(seed, ((double)proba) / 100);
+        return FUZ_mallocTests(seed, ((double)proba) / 100, memTestsOnly);
     }
 
     if (nbTests < testNb) nbTests = testNb;