Unit test for external sequence producer + static CCtx + streaming (#4063)
This commit is contained in:
+61
-2
@@ -2356,7 +2356,7 @@ static int basicUnitTests(U32 seed, double compressibility, int bigTests)
|
|||||||
}
|
}
|
||||||
DISPLAYLEVEL(3, "OK \n");
|
DISPLAYLEVEL(3, "OK \n");
|
||||||
|
|
||||||
DISPLAYLEVEL(3, "test%3i : Testing external sequence producer with static CCtx: ", testNb++);
|
DISPLAYLEVEL(3, "test%3i : Testing external sequence producer with static CCtx (one-shot): ", testNb++);
|
||||||
{
|
{
|
||||||
size_t const dstBufSize = ZSTD_compressBound(CNBufferSize);
|
size_t const dstBufSize = ZSTD_compressBound(CNBufferSize);
|
||||||
BYTE* const dstBuf = (BYTE*)malloc(dstBufSize);
|
BYTE* const dstBuf = (BYTE*)malloc(dstBufSize);
|
||||||
@@ -2375,7 +2375,7 @@ static int basicUnitTests(U32 seed, double compressibility, int bigTests)
|
|||||||
size_t const cctxSize = ZSTD_estimateCCtxSize_usingCCtxParams(params);
|
size_t const cctxSize = ZSTD_estimateCCtxSize_usingCCtxParams(params);
|
||||||
cctxBuf = malloc(cctxSize);
|
cctxBuf = malloc(cctxSize);
|
||||||
staticCCtx = ZSTD_initStaticCCtx(cctxBuf, cctxSize);
|
staticCCtx = ZSTD_initStaticCCtx(cctxBuf, cctxSize);
|
||||||
ZSTD_CCtx_setParametersUsingCCtxParams(staticCCtx, params);
|
CHECK_Z(ZSTD_CCtx_setParametersUsingCCtxParams(staticCCtx, params));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check that compression with external sequence producer succeeds when expected
|
// Check that compression with external sequence producer succeeds when expected
|
||||||
@@ -2408,6 +2408,65 @@ static int basicUnitTests(U32 seed, double compressibility, int bigTests)
|
|||||||
}
|
}
|
||||||
DISPLAYLEVEL(3, "OK \n");
|
DISPLAYLEVEL(3, "OK \n");
|
||||||
|
|
||||||
|
DISPLAYLEVEL(3, "test%3i : Testing external sequence producer with static CCtx (streaming): ", testNb++);
|
||||||
|
{
|
||||||
|
size_t const dstBufSize = ZSTD_compressBound(CNBufferSize);
|
||||||
|
BYTE* const dstBuf = (BYTE*)malloc(dstBufSize);
|
||||||
|
size_t const checkBufSize = CNBufferSize;
|
||||||
|
BYTE* const checkBuf = (BYTE*)malloc(checkBufSize);
|
||||||
|
ZSTD_CCtx_params* params = ZSTD_createCCtxParams();
|
||||||
|
ZSTD_CCtx* staticCCtx;
|
||||||
|
void* cctxBuf;
|
||||||
|
EMF_testCase seqProdState;
|
||||||
|
|
||||||
|
CHECK_Z(ZSTD_CCtxParams_setParameter(params, ZSTD_c_validateSequences, 1));
|
||||||
|
CHECK_Z(ZSTD_CCtxParams_setParameter(params, ZSTD_c_enableSeqProducerFallback, 0));
|
||||||
|
ZSTD_CCtxParams_registerSequenceProducer(params, &seqProdState, zstreamSequenceProducer);
|
||||||
|
|
||||||
|
{
|
||||||
|
size_t const cctxSize = ZSTD_estimateCStreamSize_usingCCtxParams(params);
|
||||||
|
cctxBuf = malloc(cctxSize);
|
||||||
|
staticCCtx = ZSTD_initStaticCCtx(cctxBuf, cctxSize);
|
||||||
|
CHECK_Z(ZSTD_CCtx_setParametersUsingCCtxParams(staticCCtx, params));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check that compression with external sequence producer succeeds when expected
|
||||||
|
seqProdState = EMF_LOTS_OF_SEQS;
|
||||||
|
{
|
||||||
|
ZSTD_inBuffer inBuf = { CNBuffer, CNBufferSize, 0 };
|
||||||
|
ZSTD_outBuffer outBuf = { dstBuf, dstBufSize, 0 };
|
||||||
|
size_t dResult;
|
||||||
|
CHECK_Z(ZSTD_compressStream(staticCCtx, &outBuf, &inBuf));
|
||||||
|
CHECK_Z(ZSTD_endStream(staticCCtx, &outBuf));
|
||||||
|
CHECK(inBuf.pos != inBuf.size, "EMF: inBuf.pos != inBuf.size");
|
||||||
|
dResult = ZSTD_decompress(checkBuf, checkBufSize, outBuf.dst, outBuf.pos);
|
||||||
|
CHECK(ZSTD_isError(dResult), "EMF: Decompression error: %s", ZSTD_getErrorName(dResult));
|
||||||
|
CHECK(dResult != CNBufferSize, "EMF: Corruption!");
|
||||||
|
CHECK(memcmp(CNBuffer, checkBuf, CNBufferSize) != 0, "EMF: Corruption!");
|
||||||
|
}
|
||||||
|
|
||||||
|
CHECK_Z(ZSTD_CCtx_reset(staticCCtx, ZSTD_reset_session_only));
|
||||||
|
|
||||||
|
// Check that compression with external sequence producer fails when expected
|
||||||
|
seqProdState = EMF_BIG_ERROR;
|
||||||
|
{
|
||||||
|
ZSTD_inBuffer inBuf = { CNBuffer, CNBufferSize, 0 };
|
||||||
|
ZSTD_outBuffer outBuf = { dstBuf, dstBufSize, 0 };
|
||||||
|
size_t const cResult = ZSTD_compressStream(staticCCtx, &outBuf, &inBuf);
|
||||||
|
CHECK(!ZSTD_isError(cResult), "EMF: Should have raised an error!");
|
||||||
|
CHECK(
|
||||||
|
ZSTD_getErrorCode(cResult) != ZSTD_error_sequenceProducer_failed,
|
||||||
|
"EMF: Wrong error code: %s", ZSTD_getErrorName(cResult)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
free(dstBuf);
|
||||||
|
free(checkBuf);
|
||||||
|
free(cctxBuf);
|
||||||
|
ZSTD_freeCCtxParams(params);
|
||||||
|
}
|
||||||
|
DISPLAYLEVEL(3, "OK \n");
|
||||||
|
|
||||||
DISPLAYLEVEL(3, "test%3i : Decoder should reject invalid frame header on legacy frames: ", testNb++);
|
DISPLAYLEVEL(3, "test%3i : Decoder should reject invalid frame header on legacy frames: ", testNb++);
|
||||||
{
|
{
|
||||||
const unsigned char compressed[] = { 0x26,0xb5,0x2f,0xfd,0x50,0x91,0xfd,0xd8,0xb5 };
|
const unsigned char compressed[] = { 0x26,0xb5,0x2f,0xfd,0x50,0x91,0xfd,0xd8,0xb5 };
|
||||||
|
|||||||
Reference in New Issue
Block a user