git subrepo pull (merge) --force deps/libchdr
[pcsx_rearmed.git] / deps / libchdr / deps / zstd-1.5.5 / tests / bigdict.c
CommitLineData
648db22b 1/*
2 * Copyright (c) Meta Platforms, Inc. and affiliates.
3 * All rights reserved.
4 *
5 * This source code is licensed under both the BSD-style license (found in the
6 * LICENSE file in the root directory of this source tree) and the GPLv2 (found
7 * in the COPYING file in the root directory of this source tree).
8 * You may select, at your option, one of the above-listed licenses.
9 */
10
11#include <assert.h>
12#include <stdio.h>
13#include <stddef.h>
14#include <stdlib.h>
15#include <stdint.h>
16#include "datagen.h"
17#include "mem.h"
18#define ZSTD_STATIC_LINKING_ONLY
19#include "zstd.h"
20
21static int
22compress(ZSTD_CCtx* cctx, ZSTD_DCtx* dctx,
23 void* dst, size_t dstCapacity,
24 void const* src, size_t srcSize,
25 void* roundtrip, ZSTD_EndDirective end)
26{
27 ZSTD_inBuffer in = {src, srcSize, 0};
28 ZSTD_outBuffer out = {dst, dstCapacity, 0};
29 int ended = 0;
30
31 while (!ended && (in.pos < in.size || out.pos > 0)) {
32 size_t rc;
33 out.pos = 0;
34 rc = ZSTD_compressStream2(cctx, &out, &in, end);
35 if (ZSTD_isError(rc))
36 return 1;
37 if (end == ZSTD_e_end && rc == 0)
38 ended = 1;
39 {
40 ZSTD_inBuffer rtIn = {dst, out.pos, 0};
41 ZSTD_outBuffer rtOut = {roundtrip, srcSize, 0};
42 rc = 1;
43 while (rtIn.pos < rtIn.size || rtOut.pos > 0) {
44 rtOut.pos = 0;
45 rc = ZSTD_decompressStream(dctx, &rtOut, &rtIn);
46 if (ZSTD_isError(rc)) {
47 fprintf(stderr, "Decompression error: %s\n", ZSTD_getErrorName(rc));
48 return 1;
49 }
50 if (rc == 0)
51 break;
52 }
53 if (ended && rc != 0) {
54 fprintf(stderr, "Frame not finished!\n");
55 return 1;
56 }
57 }
58 }
59
60 return 0;
61}
62
63int main(int argc, const char** argv)
64{
65 ZSTD_CCtx* cctx = ZSTD_createCCtx();
66 ZSTD_DCtx* dctx = ZSTD_createDCtx();
67 const size_t dataSize = (size_t)1 << 30;
68 const size_t outSize = ZSTD_compressBound(dataSize);
69 const size_t bufferSize = (size_t)1 << 31;
70 char* buffer = (char*)malloc(bufferSize);
71 void* out = malloc(outSize);
72 void* roundtrip = malloc(dataSize);
73 (void)argc;
74 (void)argv;
75
76 if (!buffer || !out || !roundtrip || !cctx || !dctx) {
77 fprintf(stderr, "Allocation failure\n");
78 return 1;
79 }
80
81 if (ZSTD_isError(ZSTD_CCtx_setParameter(cctx, ZSTD_c_windowLog, 31)))
82 return 1;
83 if (ZSTD_isError(ZSTD_CCtx_setParameter(cctx, ZSTD_c_nbWorkers, 1)))
84 return 1;
85 if (ZSTD_isError(ZSTD_CCtx_setParameter(cctx, ZSTD_c_overlapLog, 9)))
86 return 1;
87 if (ZSTD_isError(ZSTD_CCtx_setParameter(cctx, ZSTD_c_checksumFlag, 1)))
88 return 1;
89 if (ZSTD_isError(ZSTD_CCtx_setParameter(cctx, ZSTD_c_strategy, ZSTD_btopt)))
90 return 1;
91 if (ZSTD_isError(ZSTD_CCtx_setParameter(cctx, ZSTD_c_targetLength, 7)))
92 return 1;
93 if (ZSTD_isError(ZSTD_CCtx_setParameter(cctx, ZSTD_c_minMatch, 7)))
94 return 1;
95 if (ZSTD_isError(ZSTD_CCtx_setParameter(cctx, ZSTD_c_searchLog, 1)))
96 return 1;
97 if (ZSTD_isError(ZSTD_CCtx_setParameter(cctx, ZSTD_c_hashLog, 10)))
98 return 1;
99 if (ZSTD_isError(ZSTD_CCtx_setParameter(cctx, ZSTD_c_chainLog, 10)))
100 return 1;
101
102 if (ZSTD_isError(ZSTD_DCtx_setParameter(dctx, ZSTD_d_windowLogMax, 31)))
103 return 1;
104
105 RDG_genBuffer(buffer, bufferSize, 1.0, 0.0, 0xbeefcafe);
106
107 /* Compress 30 GB */
108 {
109 int i;
110 for (i = 0; i < 10; ++i) {
111 fprintf(stderr, "Compressing 1 GB\n");
112 if (compress(cctx, dctx, out, outSize, buffer, dataSize, roundtrip, ZSTD_e_continue))
113 return 1;
114 }
115 }
116 fprintf(stderr, "Compressing 1 GB\n");
117 if (compress(cctx, dctx, out, outSize, buffer, dataSize, roundtrip, ZSTD_e_end))
118 return 1;
119
120 fprintf(stderr, "Success!\n");
121
122 free(roundtrip);
123 free(out);
124 free(buffer);
125 ZSTD_freeDCtx(dctx);
126 ZSTD_freeCCtx(cctx);
127 return 0;
128}