refactored fuzzer tests for sequence compression api
add explicit delimiter mode to libfuzzer test
This commit is contained in:
+34
-34
@@ -3114,18 +3114,17 @@ static int basicUnitTests(U32 const seed, double compressibility)
|
||||
|
||||
DISPLAYLEVEL(3, "test%3i : ZSTD_getSequences followed by ZSTD_compressSequences : ", testNb++);
|
||||
{
|
||||
size_t srcSize = 500 KB;
|
||||
BYTE* src = (BYTE*)CNBuffer;
|
||||
BYTE* dst = (BYTE*)compressedBuffer;
|
||||
size_t dstSize = ZSTD_compressBound(srcSize);
|
||||
size_t decompressSize = srcSize;
|
||||
char* decompressBuffer = (char*)malloc(decompressSize);
|
||||
const size_t srcSize = 500 KB;
|
||||
const BYTE* const src = (BYTE*)CNBuffer;
|
||||
BYTE* const dst = (BYTE*)compressedBuffer;
|
||||
const size_t dstCapacity = ZSTD_compressBound(srcSize);
|
||||
const size_t decompressSize = srcSize;
|
||||
char* const decompressBuffer = (char*)malloc(decompressSize);
|
||||
size_t compressedSize;
|
||||
size_t dSize;
|
||||
|
||||
ZSTD_CCtx* cctx = ZSTD_createCCtx();
|
||||
ZSTD_Sequence* seqs = (ZSTD_Sequence*)malloc(srcSize * sizeof(ZSTD_Sequence));
|
||||
size_t seqsSize;
|
||||
ZSTD_CCtx* const cctx = ZSTD_createCCtx();
|
||||
ZSTD_Sequence* const seqs = (ZSTD_Sequence*)malloc(srcSize * sizeof(ZSTD_Sequence));
|
||||
size_t nbSeqs;
|
||||
|
||||
if (seqs == NULL) goto _output_error;
|
||||
assert(cctx != NULL);
|
||||
@@ -3133,36 +3132,37 @@ static int basicUnitTests(U32 const seed, double compressibility)
|
||||
/* Populate src with random data */
|
||||
RDG_genBuffer(CNBuffer, srcSize, compressibility, 0., seed);
|
||||
|
||||
/* Test with block delimiters roundtrip */
|
||||
seqsSize = ZSTD_generateSequences(cctx, seqs, srcSize, src, srcSize);
|
||||
/* Roundtrip Test with block delimiters generated by ZSTD_generateSequences() */
|
||||
nbSeqs = ZSTD_generateSequences(cctx, seqs, srcSize, src, srcSize);
|
||||
ZSTD_CCtx_reset(cctx, ZSTD_reset_session_and_parameters);
|
||||
ZSTD_CCtx_setParameter(cctx, ZSTD_c_blockDelimiters, ZSTD_sf_explicitBlockDelimiters);
|
||||
compressedSize = ZSTD_compressSequences(cctx, dst, dstSize, seqs, seqsSize, src, srcSize);
|
||||
compressedSize = ZSTD_compressSequences(cctx, dst, dstCapacity, seqs, nbSeqs, src, srcSize);
|
||||
if (ZSTD_isError(compressedSize)) {
|
||||
DISPLAY("Error in sequence compression with block delims\n");
|
||||
goto _output_error;
|
||||
}
|
||||
dSize = ZSTD_decompress(decompressBuffer, decompressSize, dst, compressedSize);
|
||||
if (ZSTD_isError(dSize)) {
|
||||
DISPLAY("Error in sequence compression roundtrip with block delims\n");
|
||||
goto _output_error;
|
||||
}
|
||||
{ size_t const dSize = ZSTD_decompress(decompressBuffer, decompressSize, dst, compressedSize);
|
||||
if (ZSTD_isError(dSize)) {
|
||||
DISPLAY("Error in sequence compression roundtrip with block delims\n");
|
||||
goto _output_error;
|
||||
} }
|
||||
assert(!memcmp(decompressBuffer, src, srcSize));
|
||||
|
||||
/* Test with no block delimiters roundtrip */
|
||||
seqsSize = ZSTD_mergeBlockDelimiters(seqs, seqsSize);
|
||||
ZSTD_CCtx_reset(cctx, ZSTD_reset_session_and_parameters);
|
||||
ZSTD_CCtx_setParameter(cctx, ZSTD_c_blockDelimiters, ZSTD_sf_noBlockDelimiters);
|
||||
compressedSize = ZSTD_compressSequences(cctx, dst, dstSize, seqs, seqsSize, src, srcSize);
|
||||
/* Roundtrip Test with no block delimiters */
|
||||
{ size_t const nbSeqsAfterMerge = ZSTD_mergeBlockDelimiters(seqs, nbSeqs);
|
||||
ZSTD_CCtx_reset(cctx, ZSTD_reset_session_and_parameters);
|
||||
ZSTD_CCtx_setParameter(cctx, ZSTD_c_blockDelimiters, ZSTD_sf_noBlockDelimiters);
|
||||
compressedSize = ZSTD_compressSequences(cctx, dst, dstCapacity, seqs, nbSeqsAfterMerge, src, srcSize);
|
||||
}
|
||||
if (ZSTD_isError(compressedSize)) {
|
||||
DISPLAY("Error in sequence compression with no block delims\n");
|
||||
goto _output_error;
|
||||
}
|
||||
dSize = ZSTD_decompress(decompressBuffer, decompressSize, dst, compressedSize);
|
||||
if (ZSTD_isError(dSize)) {
|
||||
DISPLAY("Error in sequence compression roundtrip with no block delims\n");
|
||||
goto _output_error;
|
||||
}
|
||||
{ size_t const dSize = ZSTD_decompress(decompressBuffer, decompressSize, dst, compressedSize);
|
||||
if (ZSTD_isError(dSize)) {
|
||||
DISPLAY("Error in sequence compression roundtrip with no block delims\n");
|
||||
goto _output_error;
|
||||
} }
|
||||
assert(!memcmp(decompressBuffer, src, srcSize));
|
||||
|
||||
ZSTD_freeCCtx(cctx);
|
||||
@@ -3968,9 +3968,9 @@ static int fuzzerTests(U32 seed, unsigned nbTests, unsigned startTest, U32 const
|
||||
DISPLAYLEVEL(5, "fuzzer t%u: Bufferless streaming compression test \n", testNb);
|
||||
{ U32 const testLog = FUZ_rand(&lseed) % maxSrcLog;
|
||||
U32 const dictLog = FUZ_rand(&lseed) % maxSrcLog;
|
||||
int const cLevel = (FUZ_rand(&lseed) %
|
||||
(ZSTD_maxCLevel() -
|
||||
(MAX(testLog, dictLog) / cLevelLimiter))) +
|
||||
int const cLevel = (int)(FUZ_rand(&lseed) %
|
||||
((U32)ZSTD_maxCLevel() -
|
||||
(MAX(testLog, dictLog) / (U32)cLevelLimiter))) +
|
||||
1;
|
||||
maxTestSize = FUZ_rLogLength(&lseed, testLog);
|
||||
if (maxTestSize >= dstBufferSize) maxTestSize = dstBufferSize-1;
|
||||
@@ -4066,7 +4066,7 @@ _cleanup:
|
||||
free(cBuffer);
|
||||
free(dstBuffer);
|
||||
free(mirrorBuffer);
|
||||
return result;
|
||||
return (int)result;
|
||||
|
||||
_output_error:
|
||||
result = 1;
|
||||
@@ -4103,7 +4103,7 @@ static unsigned readU32FromChar(const char** stringPtr)
|
||||
{
|
||||
unsigned result = 0;
|
||||
while ((**stringPtr >='0') && (**stringPtr <='9'))
|
||||
result *= 10, result += **stringPtr - '0', (*stringPtr)++ ;
|
||||
result *= 10, result += (unsigned)(**stringPtr - '0'), (*stringPtr)++ ;
|
||||
if ((**stringPtr=='K') || (**stringPtr=='M')) {
|
||||
result <<= 10;
|
||||
if (**stringPtr=='M') result <<= 10;
|
||||
@@ -4245,7 +4245,7 @@ int main(int argc, const char** argv)
|
||||
}
|
||||
}
|
||||
if (!result)
|
||||
result = fuzzerTests(seed, nbTests, testNb, maxDuration, ((double)proba) / 100, bigTests);
|
||||
result = fuzzerTests(seed, (unsigned)nbTests, (unsigned)testNb, maxDuration, ((double)proba) / 100, bigTests);
|
||||
if (mainPause) {
|
||||
int unused;
|
||||
DISPLAY("Press Enter \n");
|
||||
|
||||
Reference in New Issue
Block a user