xref: /aosp_15_r20/external/zstd/contrib/seqBench/seqBench.c (revision 01826a4963a0d8a59bc3812d29bdf0fb76416722)
1*01826a49SYabin Cui #define ZSTD_STATIC_LINKING_ONLY
2*01826a49SYabin Cui #include <zstd.h>
3*01826a49SYabin Cui #include <stdio.h>
4*01826a49SYabin Cui #include <stdlib.h>
5*01826a49SYabin Cui #include <assert.h>
6*01826a49SYabin Cui #include <string.h>
7*01826a49SYabin Cui 
main(int argc,char * argv[])8*01826a49SYabin Cui int main(int argc, char *argv[]) {
9*01826a49SYabin Cui     ZSTD_CCtx* zc = ZSTD_createCCtx();
10*01826a49SYabin Cui 
11*01826a49SYabin Cui     if (argc != 2) {
12*01826a49SYabin Cui         printf("Usage: seqBench <file>\n"); // TODO provide the block delim option here
13*01826a49SYabin Cui         return 1;
14*01826a49SYabin Cui     }
15*01826a49SYabin Cui 
16*01826a49SYabin Cui     FILE *f = fopen(argv[1], "rb");
17*01826a49SYabin Cui     fseek(f, 0, SEEK_END);
18*01826a49SYabin Cui     long inBufSize = ftell(f);
19*01826a49SYabin Cui     fseek(f, 0, SEEK_SET);
20*01826a49SYabin Cui 
21*01826a49SYabin Cui     char *inBuf = malloc(inBufSize + 1);
22*01826a49SYabin Cui     fread(inBuf, inBufSize, 1, f);
23*01826a49SYabin Cui     fclose(f);
24*01826a49SYabin Cui 
25*01826a49SYabin Cui     size_t seqsSize = ZSTD_sequenceBound(inBufSize);
26*01826a49SYabin Cui     ZSTD_Sequence *seqs = (ZSTD_Sequence*)malloc(seqsSize * sizeof(ZSTD_Sequence));
27*01826a49SYabin Cui     char *outBuf = malloc(ZSTD_compressBound(inBufSize));
28*01826a49SYabin Cui 
29*01826a49SYabin Cui     ZSTD_generateSequences(zc, seqs, seqsSize, inBuf, inBufSize);
30*01826a49SYabin Cui     ZSTD_CCtx_setParameter(zc, ZSTD_c_blockDelimiters, ZSTD_sf_explicitBlockDelimiters);
31*01826a49SYabin Cui     size_t outBufSize = ZSTD_compressSequences(zc, outBuf, inBufSize, seqs, seqsSize, inBuf, inBufSize);
32*01826a49SYabin Cui     if (ZSTD_isError(outBufSize)) {
33*01826a49SYabin Cui         printf("ERROR: %lu\n", outBufSize);
34*01826a49SYabin Cui         return 1;
35*01826a49SYabin Cui     }
36*01826a49SYabin Cui 
37*01826a49SYabin Cui     char *validationBuf = malloc(inBufSize);
38*01826a49SYabin Cui     ZSTD_decompress(validationBuf, inBufSize, outBuf, outBufSize);
39*01826a49SYabin Cui 
40*01826a49SYabin Cui     if (memcmp(inBuf, validationBuf, inBufSize) == 0) {
41*01826a49SYabin Cui         printf("Compression and decompression were successful!\n");
42*01826a49SYabin Cui     } else {
43*01826a49SYabin Cui         printf("ERROR: input and validation buffers don't match!\n");
44*01826a49SYabin Cui         for (int i = 0; i < inBufSize; i++) {
45*01826a49SYabin Cui             if (inBuf[i] != validationBuf[i]) {
46*01826a49SYabin Cui                 printf("First bad index: %d\n", i);
47*01826a49SYabin Cui                 break;
48*01826a49SYabin Cui             }
49*01826a49SYabin Cui         }
50*01826a49SYabin Cui     }
51*01826a49SYabin Cui 
52*01826a49SYabin Cui     return 0;
53*01826a49SYabin Cui }
54