Add cSize regression test to fuzzer.c
This commit is contained in:
parent
c87d2e5866
commit
b8bfc4e63d
@ -575,6 +575,8 @@ size_t ZSTD_ldm_blockCompress(rawSeqStore_t* rawSeqStore,
|
|||||||
BYTE const* const iend = istart + srcSize;
|
BYTE const* const iend = istart + srcSize;
|
||||||
/* Input positions */
|
/* Input positions */
|
||||||
BYTE const* ip = istart;
|
BYTE const* ip = istart;
|
||||||
|
|
||||||
|
/* If using opt parser, use LDMs only as candidates rather than always accepting them */
|
||||||
if (cParams->strategy >= ZSTD_btopt) {
|
if (cParams->strategy >= ZSTD_btopt) {
|
||||||
size_t lastLLSize;
|
size_t lastLLSize;
|
||||||
ms->ldmSeqStore = *rawSeqStore;
|
ms->ldmSeqStore = *rawSeqStore;
|
||||||
|
@ -774,7 +774,9 @@ FORCE_INLINE_TEMPLATE U32 ZSTD_BtGetAllMatches (
|
|||||||
static void ZSTD_opt_skipBytesInLdmSeqStore(rawSeqStore_t* ldmSeqStore, size_t nbBytes) {
|
static void ZSTD_opt_skipBytesInLdmSeqStore(rawSeqStore_t* ldmSeqStore, size_t nbBytes) {
|
||||||
while (nbBytes && ldmSeqStore->pos < ldmSeqStore->size) {
|
while (nbBytes && ldmSeqStore->pos < ldmSeqStore->size) {
|
||||||
rawSeq currSeq = ldmSeqStore->seq[ldmSeqStore->pos];
|
rawSeq currSeq = ldmSeqStore->seq[ldmSeqStore->pos];
|
||||||
|
/* posInSequence necessarily must never represent a value beyond the sequence */
|
||||||
assert(ldmSeqStore->posInSequence <= currSeq.matchLength + currSeq.litLength);
|
assert(ldmSeqStore->posInSequence <= currSeq.matchLength + currSeq.litLength);
|
||||||
|
|
||||||
if (nbBytes <= currSeq.litLength) {
|
if (nbBytes <= currSeq.litLength) {
|
||||||
ldmSeqStore->posInSequence += nbBytes;
|
ldmSeqStore->posInSequence += nbBytes;
|
||||||
return;
|
return;
|
||||||
@ -782,6 +784,7 @@ static void ZSTD_opt_skipBytesInLdmSeqStore(rawSeqStore_t* ldmSeqStore, size_t n
|
|||||||
ldmSeqStore->posInSequence += currSeq.litLength;
|
ldmSeqStore->posInSequence += currSeq.litLength;
|
||||||
nbBytes -= currSeq.litLength;
|
nbBytes -= currSeq.litLength;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (nbBytes < currSeq.matchLength) {
|
if (nbBytes < currSeq.matchLength) {
|
||||||
ldmSeqStore->posInSequence += nbBytes;
|
ldmSeqStore->posInSequence += nbBytes;
|
||||||
return;
|
return;
|
||||||
|
@ -780,6 +780,44 @@ static int basicUnitTests(U32 const seed, double compressibility)
|
|||||||
}
|
}
|
||||||
DISPLAYLEVEL(3, "OK \n");
|
DISPLAYLEVEL(3, "OK \n");
|
||||||
|
|
||||||
|
DISPLAYLEVEL(3, "test%3i : testing ldm no regressions in size for opt parser : ", testNb++);
|
||||||
|
{
|
||||||
|
size_t cSizeLdm;
|
||||||
|
size_t cSizeNoLdm;
|
||||||
|
ZSTD_CCtx* const cctx = ZSTD_createCCtx();
|
||||||
|
|
||||||
|
RDG_genBuffer(CNBuffer, CNBuffSize, 0.5, 0.5, seed);
|
||||||
|
|
||||||
|
/* Enable checksum to verify round trip. */
|
||||||
|
CHECK_Z(ZSTD_CCtx_setParameter(cctx, ZSTD_c_checksumFlag, 1));
|
||||||
|
CHECK_Z(ZSTD_CCtx_setParameter(cctx, ZSTD_c_enableLongDistanceMatching, 1));
|
||||||
|
CHECK_Z(ZSTD_CCtx_setParameter(cctx, ZSTD_c_compressionLevel, 19));
|
||||||
|
|
||||||
|
/* Round trip once with ldm. */
|
||||||
|
cSizeLdm = ZSTD_compress2(cctx, compressedBuffer, compressedBufferSize, CNBuffer, CNBuffSize);
|
||||||
|
CHECK_Z(cSizeLdm);
|
||||||
|
CHECK_Z(ZSTD_decompress(decodedBuffer, CNBuffSize, compressedBuffer, cSizeLdm));
|
||||||
|
|
||||||
|
ZSTD_CCtx_reset(cctx, ZSTD_reset_session_and_parameters);
|
||||||
|
CHECK_Z(ZSTD_CCtx_setParameter(cctx, ZSTD_c_checksumFlag, 1));
|
||||||
|
CHECK_Z(ZSTD_CCtx_setParameter(cctx, ZSTD_c_enableLongDistanceMatching, 0));
|
||||||
|
CHECK_Z(ZSTD_CCtx_setParameter(cctx, ZSTD_c_compressionLevel, 19));
|
||||||
|
|
||||||
|
/* Round trip once without ldm. */
|
||||||
|
cSizeNoLdm = ZSTD_compress2(cctx, compressedBuffer, compressedBufferSize, CNBuffer, CNBuffSize);
|
||||||
|
CHECK_Z(cSizeNoLdm);
|
||||||
|
CHECK_Z(ZSTD_decompress(decodedBuffer, CNBuffSize, compressedBuffer, cSizeNoLdm));
|
||||||
|
|
||||||
|
if (cSizeLdm > cSizeNoLdm) {
|
||||||
|
DISPLAY("Using long mode should not cause regressions for btopt+\n");
|
||||||
|
testResult = 1;
|
||||||
|
goto _output_error;
|
||||||
|
}
|
||||||
|
|
||||||
|
ZSTD_freeCCtx(cctx);
|
||||||
|
}
|
||||||
|
DISPLAYLEVEL(3, "OK \n");
|
||||||
|
|
||||||
/* Note: this test takes 0.5 seconds to run */
|
/* Note: this test takes 0.5 seconds to run */
|
||||||
DISPLAYLEVEL(3, "test%3i : testing refPrefx vs refPrefx + ldm (size comparison) : ", testNb++);
|
DISPLAYLEVEL(3, "test%3i : testing refPrefx vs refPrefx + ldm (size comparison) : ", testNb++);
|
||||||
{
|
{
|
||||||
|
@ -1217,7 +1217,7 @@ then
|
|||||||
println "\n===> zstdmt round-trip tests "
|
println "\n===> zstdmt round-trip tests "
|
||||||
roundTripTest -g4M "1 -T0"
|
roundTripTest -g4M "1 -T0"
|
||||||
roundTripTest -g8M "3 -T2"
|
roundTripTest -g8M "3 -T2"
|
||||||
roundTripTest -g8M "3 -T0 --long"
|
roundTripTest -g8M "19 -T0 --long"
|
||||||
roundTripTest -g8000K "2 --threads=2"
|
roundTripTest -g8000K "2 --threads=2"
|
||||||
fileRoundTripTest -g4M "19 -T2 -B1M"
|
fileRoundTripTest -g4M "19 -T2 -B1M"
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user