@@ -902,6 +902,36 @@ static int basicUnitTests(U32 seed, double compressibility)
902902 } }
903903 DISPLAYLEVEL (3 , "OK \n" );
904904
905+ /* stableSrc + streaming */
906+ DISPLAYLEVEL (3 , "test%3i : ZSTD_c_stableInBuffer compatibility with compressStream2, using different end directives : " , testNb ++ );
907+ CHECK_Z ( ZSTD_initCStream (cctx , 1 ) );
908+ CHECK_Z ( ZSTD_CCtx_setParameter (cctx , ZSTD_c_stableInBuffer , 1 ) );
909+ { ZSTD_inBuffer inBuf ;
910+ ZSTD_outBuffer outBuf ;
911+ const size_t nonZeroStartPos = 18 ;
912+ const size_t inputSize = 500 ;
913+ inBuf .src = CNBuffer ;
914+ inBuf .size = 100 ;
915+ inBuf .pos = nonZeroStartPos ;
916+ outBuf .dst = (char * )(compressedBuffer )+ cSize ;
917+ outBuf .size = ZSTD_compressBound (inputSize );
918+ outBuf .pos = 0 ;
919+ CHECK_Z ( ZSTD_compressStream2 (cctx , & outBuf , & inBuf , ZSTD_e_continue ) );
920+ inBuf .size = 200 ;
921+ CHECK_Z ( ZSTD_compressStream2 (cctx , & outBuf , & inBuf , ZSTD_e_continue ) );
922+ CHECK_Z ( ZSTD_compressStream2 (cctx , & outBuf , & inBuf , ZSTD_e_flush ) );
923+ inBuf .size = nonZeroStartPos + inputSize ;
924+ CHECK_Z ( ZSTD_compressStream2 (cctx , & outBuf , & inBuf , ZSTD_e_continue ) );
925+ CHECK ( ZSTD_compressStream2 (cctx , & outBuf , & inBuf , ZSTD_e_end ) != 0 , "compression should be successful and fully flushed" );
926+ { const void * const realSrcStart = (const char * )inBuf .src + nonZeroStartPos ;
927+ void * const verifBuf = (char * )outBuf .dst + outBuf .pos ;
928+ const size_t decSize = ZSTD_decompress (verifBuf , inputSize , outBuf .dst , outBuf .pos );
929+ CHECK_Z (decSize );
930+ CHECK (decSize != inputSize , "regenerated %zu bytes, instead of %zu" , decSize , inputSize );
931+ CHECK (memcmp (realSrcStart , verifBuf , inputSize ) != 0 , "regenerated data different from original" );
932+ } }
933+ DISPLAYLEVEL (3 , "OK \n" );
934+
905935 DISPLAYLEVEL (3 , "test%3i : ZSTD_compressStream2() with ZSTD_c_stableInBuffer: context size : " , testNb ++ );
906936 { size_t const cctxSize = ZSTD_sizeof_CCtx (cctx );
907937 DISPLAYLEVEL (4 , "cctxSize1=%zu; cctxSize=%zu; cctxSize2=%zu : " , cctxSize1 , cctxSize , cctxSize2 );
0 commit comments