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