diff --git a/tests/Makefile b/tests/Makefile index d551a85ef..4789b1ccf 100644 --- a/tests/Makefile +++ b/tests/Makefile @@ -342,21 +342,36 @@ test-decodecorpus: decodecorpus test-decodecorpus-cli: decodecorpus @echo "\n ---- decodecorpus basic cli tests ----" - mkdir tests - ./decodecorpus -n5 -otests -ptests - cd testdir - zstd -d z000000.zst -D dictionary -o tmp0 - zstd -d z000001.zst -D dictionary -o tmp1 - zstd -d z000002.zst -D dictionary -o tmp2 - zstd -d z000003.zst -D dictionary -o tmp3 - zstd -d z000004.zst -D dictionary -o tmp4 - diff z000000 tmp0 - diff z000001 tmp1 - diff z000002 tmp2 - diff z000003 tmp3 - diff z000004 tmp4 - cd .. - rm -rf testdir + @mkdir testdir + ./decodecorpus -n5 -otestdir -ptestdir + @cd testdir \ + zstd -d z000000.zst -o tmp0 \ + zstd -d z000001.zst -o tmp1 \ + zstd -d z000002.zst -o tmp2 \ + zstd -d z000003.zst -o tmp3 \ + zstd -d z000004.zst -o tmp4 \ + diff z000000 tmp0 \ + diff z000001 tmp1 \ + diff z000002 tmp2 \ + diff z000003 tmp3 \ + diff z000004 tmp4 \ + @rm ./* \ + @cd .. + + ./decodecorpus -n5 -otestdir -ptestdir --use-dict=1MB + @cd testdir \ + zstd -d z000000.zst -D dictionary -o tmp0 \ + zstd -d z000001.zst -D dictionary -o tmp1 \ + zstd -d z000002.zst -D dictionary -o tmp2 \ + zstd -d z000003.zst -D dictionary -o tmp3 \ + zstd -d z000004.zst -D dictionary -o tmp4 \ + diff z000000 tmp0 \ + diff z000001 tmp1 \ + diff z000002 tmp2 \ + diff z000003 tmp3 \ + diff z000004 tmp4 \ + @cd .. + @rm -rf testdir test-pool: pool $(QEMU_SYS) ./pool diff --git a/tests/decodecorpus.c b/tests/decodecorpus.c index 9e4ff810c..81ddc4b69 100644 --- a/tests/decodecorpus.c +++ b/tests/decodecorpus.c @@ -648,7 +648,6 @@ static U32 generateSequences(U32* seed, frame_t* frame, seqStore_t* seqStore, } DISPLAYLEVEL(5, " total match lengths: %u\n", (U32)remainingMatch); - for (i = 0; i < numSequences; i++) { /* Generate match and literal lengths by exponential distribution to * ensure nice numbers */ @@ -683,8 +682,15 @@ static U32 generateSequences(U32* seed, frame_t* frame, seqStore_t* seqStore, 1; if (info.useDict && (RAND(seed) & 1)) { /* need to occasionally generate offsets that go past the start */ - U32 const lenPastStart = RAND(seed) % info.dictContentSize + 1; + U32 const lenPastStart = (RAND(seed) % info.dictContentSize) + 1; offset = ((BYTE*)srcPtr - (BYTE*)frame->srcStart)+lenPastStart; + if (lenPastStart > frame->header.windowSize) { + matchLen = MIN(matchLen, frame->header.windowSize); + } + if (offset > frame->header.windowSize) { + U32 const matchLenBound = MIN(frame->header.windowSize, lenPastStart); + matchLen = MIN(matchLen, matchLenBound); + } } offsetCode = offset + ZSTD_REP_MOVE; repIndex = 2;