xref: /aosp_15_r20/external/zstd/tests/regression/config.c (revision 01826a4963a0d8a59bc3812d29bdf0fb76416722)
1*01826a49SYabin Cui /*
2*01826a49SYabin Cui  * Copyright (c) Meta Platforms, Inc. and affiliates.
3*01826a49SYabin Cui  * All rights reserved.
4*01826a49SYabin Cui  *
5*01826a49SYabin Cui  * This source code is licensed under both the BSD-style license (found in the
6*01826a49SYabin Cui  * LICENSE file in the root directory of this source tree) and the GPLv2 (found
7*01826a49SYabin Cui  * in the COPYING file in the root directory of this source tree).
8*01826a49SYabin Cui  * You may select, at your option, one of the above-listed licenses.
9*01826a49SYabin Cui  */
10*01826a49SYabin Cui 
11*01826a49SYabin Cui #include "config.h"
12*01826a49SYabin Cui 
13*01826a49SYabin Cui /* Define a config for each fast level we want to test with. */
14*01826a49SYabin Cui #define FAST_LEVEL(x)                                               \
15*01826a49SYabin Cui     param_value_t const level_fast##x##_param_values[] = {          \
16*01826a49SYabin Cui         {.param = ZSTD_c_compressionLevel, .value = -x},            \
17*01826a49SYabin Cui     };                                                              \
18*01826a49SYabin Cui     config_t const level_fast##x = {                                \
19*01826a49SYabin Cui         .name = "level -" #x,                                       \
20*01826a49SYabin Cui         .cli_args = "--fast=" #x,                                   \
21*01826a49SYabin Cui         .param_values = PARAM_VALUES(level_fast##x##_param_values), \
22*01826a49SYabin Cui     };                                                              \
23*01826a49SYabin Cui     config_t const level_fast##x##_dict = {                         \
24*01826a49SYabin Cui         .name = "level -" #x " with dict",                          \
25*01826a49SYabin Cui         .cli_args = "--fast=" #x,                                   \
26*01826a49SYabin Cui         .param_values = PARAM_VALUES(level_fast##x##_param_values), \
27*01826a49SYabin Cui         .use_dictionary = 1,                                        \
28*01826a49SYabin Cui     };
29*01826a49SYabin Cui 
30*01826a49SYabin Cui /* Define a config for each level we want to test with. */
31*01826a49SYabin Cui #define LEVEL(x)                                                                  \
32*01826a49SYabin Cui     param_value_t const level_##x##_param_values[] = {                            \
33*01826a49SYabin Cui         {.param = ZSTD_c_compressionLevel, .value = x},                           \
34*01826a49SYabin Cui     };                                                                            \
35*01826a49SYabin Cui     param_value_t const level_##x##_param_values_dms[] = {                        \
36*01826a49SYabin Cui         {.param = ZSTD_c_compressionLevel, .value = x},                           \
37*01826a49SYabin Cui         {.param = ZSTD_c_enableDedicatedDictSearch, .value = 0},                  \
38*01826a49SYabin Cui         {.param = ZSTD_c_forceAttachDict, .value = ZSTD_dictForceAttach},         \
39*01826a49SYabin Cui     };                                                                            \
40*01826a49SYabin Cui     param_value_t const level_##x##_param_values_dds[] = {                        \
41*01826a49SYabin Cui         {.param = ZSTD_c_compressionLevel, .value = x},                           \
42*01826a49SYabin Cui         {.param = ZSTD_c_enableDedicatedDictSearch, .value = 1},                  \
43*01826a49SYabin Cui         {.param = ZSTD_c_forceAttachDict, .value = ZSTD_dictForceAttach},         \
44*01826a49SYabin Cui     };                                                                            \
45*01826a49SYabin Cui     param_value_t const level_##x##_param_values_dictcopy[] = {                   \
46*01826a49SYabin Cui         {.param = ZSTD_c_compressionLevel, .value = x},                           \
47*01826a49SYabin Cui         {.param = ZSTD_c_enableDedicatedDictSearch, .value = 0},                  \
48*01826a49SYabin Cui         {.param = ZSTD_c_forceAttachDict, .value = ZSTD_dictForceCopy},           \
49*01826a49SYabin Cui     };                                                                            \
50*01826a49SYabin Cui     param_value_t const level_##x##_param_values_dictload[] = {                   \
51*01826a49SYabin Cui         {.param = ZSTD_c_compressionLevel, .value = x},                           \
52*01826a49SYabin Cui         {.param = ZSTD_c_enableDedicatedDictSearch, .value = 0},                  \
53*01826a49SYabin Cui         {.param = ZSTD_c_forceAttachDict, .value = ZSTD_dictForceLoad},           \
54*01826a49SYabin Cui     };                                                                            \
55*01826a49SYabin Cui     config_t const level_##x = {                                                  \
56*01826a49SYabin Cui         .name = "level " #x,                                                      \
57*01826a49SYabin Cui         .cli_args = "-" #x,                                                       \
58*01826a49SYabin Cui         .param_values = PARAM_VALUES(level_##x##_param_values),                   \
59*01826a49SYabin Cui     };                                                                            \
60*01826a49SYabin Cui     config_t const level_##x##_dict = {                                           \
61*01826a49SYabin Cui         .name = "level " #x " with dict",                                         \
62*01826a49SYabin Cui         .cli_args = "-" #x,                                                       \
63*01826a49SYabin Cui         .param_values = PARAM_VALUES(level_##x##_param_values),                   \
64*01826a49SYabin Cui         .use_dictionary = 1,                                                      \
65*01826a49SYabin Cui     };                                                                            \
66*01826a49SYabin Cui     config_t const level_##x##_dict_dms = {                                       \
67*01826a49SYabin Cui         .name = "level " #x " with dict dms",                                     \
68*01826a49SYabin Cui         .cli_args = "-" #x,                                                       \
69*01826a49SYabin Cui         .param_values = PARAM_VALUES(level_##x##_param_values_dms),               \
70*01826a49SYabin Cui         .use_dictionary = 1,                                                      \
71*01826a49SYabin Cui         .advanced_api_only = 1,                                                   \
72*01826a49SYabin Cui     };                                                                            \
73*01826a49SYabin Cui     config_t const level_##x##_dict_dds = {                                       \
74*01826a49SYabin Cui         .name = "level " #x " with dict dds",                                     \
75*01826a49SYabin Cui         .cli_args = "-" #x,                                                       \
76*01826a49SYabin Cui         .param_values = PARAM_VALUES(level_##x##_param_values_dds),               \
77*01826a49SYabin Cui         .use_dictionary = 1,                                                      \
78*01826a49SYabin Cui         .advanced_api_only = 1,                                                   \
79*01826a49SYabin Cui     };                                                                            \
80*01826a49SYabin Cui     config_t const level_##x##_dict_copy = {                                      \
81*01826a49SYabin Cui         .name = "level " #x " with dict copy",                                    \
82*01826a49SYabin Cui         .cli_args = "-" #x,                                                       \
83*01826a49SYabin Cui         .param_values = PARAM_VALUES(level_##x##_param_values_dictcopy),          \
84*01826a49SYabin Cui         .use_dictionary = 1,                                                      \
85*01826a49SYabin Cui         .advanced_api_only = 1,                                                   \
86*01826a49SYabin Cui     };                                                                            \
87*01826a49SYabin Cui     config_t const level_##x##_dict_load = {                                      \
88*01826a49SYabin Cui         .name = "level " #x " with dict load",                                    \
89*01826a49SYabin Cui         .cli_args = "-" #x,                                                       \
90*01826a49SYabin Cui         .param_values = PARAM_VALUES(level_##x##_param_values_dictload),          \
91*01826a49SYabin Cui         .use_dictionary = 1,                                                      \
92*01826a49SYabin Cui         .advanced_api_only = 1,                                                   \
93*01826a49SYabin Cui     };
94*01826a49SYabin Cui 
95*01826a49SYabin Cui /* Define a config specifically to test row hash based levels and settings.
96*01826a49SYabin Cui  */
97*01826a49SYabin Cui #define ROW_LEVEL(x, y)                                                            \
98*01826a49SYabin Cui     param_value_t const row_##y##_level_##x##_param_values[] = {                   \
99*01826a49SYabin Cui         {.param = ZSTD_c_useRowMatchFinder, .value = y},                           \
100*01826a49SYabin Cui         {.param = ZSTD_c_compressionLevel, .value = x},                            \
101*01826a49SYabin Cui     };                                                                             \
102*01826a49SYabin Cui     param_value_t const row_##y##_level_##x##_param_values_dms[] = {               \
103*01826a49SYabin Cui         {.param = ZSTD_c_useRowMatchFinder, .value = y},                           \
104*01826a49SYabin Cui         {.param = ZSTD_c_compressionLevel, .value = x},                            \
105*01826a49SYabin Cui         {.param = ZSTD_c_enableDedicatedDictSearch, .value = 0},                   \
106*01826a49SYabin Cui         {.param = ZSTD_c_forceAttachDict, .value = ZSTD_dictForceAttach},          \
107*01826a49SYabin Cui     };                                                                             \
108*01826a49SYabin Cui     param_value_t const row_##y##_level_##x##_param_values_dds[] = {               \
109*01826a49SYabin Cui         {.param = ZSTD_c_useRowMatchFinder, .value = y},                           \
110*01826a49SYabin Cui         {.param = ZSTD_c_compressionLevel, .value = x},                            \
111*01826a49SYabin Cui         {.param = ZSTD_c_enableDedicatedDictSearch, .value = 1},                   \
112*01826a49SYabin Cui         {.param = ZSTD_c_forceAttachDict, .value = ZSTD_dictForceAttach},          \
113*01826a49SYabin Cui     };                                                                             \
114*01826a49SYabin Cui     param_value_t const row_##y##_level_##x##_param_values_dictcopy[] = {          \
115*01826a49SYabin Cui         {.param = ZSTD_c_useRowMatchFinder, .value = y},                           \
116*01826a49SYabin Cui         {.param = ZSTD_c_compressionLevel, .value = x},                            \
117*01826a49SYabin Cui         {.param = ZSTD_c_enableDedicatedDictSearch, .value = 0},                   \
118*01826a49SYabin Cui         {.param = ZSTD_c_forceAttachDict, .value = ZSTD_dictForceCopy},            \
119*01826a49SYabin Cui     };                                                                             \
120*01826a49SYabin Cui     param_value_t const row_##y##_level_##x##_param_values_dictload[] = {          \
121*01826a49SYabin Cui         {.param = ZSTD_c_useRowMatchFinder, .value = y},                           \
122*01826a49SYabin Cui         {.param = ZSTD_c_compressionLevel, .value = x},                            \
123*01826a49SYabin Cui         {.param = ZSTD_c_enableDedicatedDictSearch, .value = 0},                   \
124*01826a49SYabin Cui         {.param = ZSTD_c_forceAttachDict, .value = ZSTD_dictForceLoad},            \
125*01826a49SYabin Cui     };                                                                             \
126*01826a49SYabin Cui     config_t const row_##y##_level_##x = {                                         \
127*01826a49SYabin Cui         .name = "level " #x " row " #y,                                            \
128*01826a49SYabin Cui         .cli_args = "-" #x,                                                        \
129*01826a49SYabin Cui         .param_values = PARAM_VALUES(row_##y##_level_##x##_param_values),          \
130*01826a49SYabin Cui         .advanced_api_only = 1,                                                    \
131*01826a49SYabin Cui     };                                                                             \
132*01826a49SYabin Cui     config_t const row_##y##_level_##x##_dict_dms = {                              \
133*01826a49SYabin Cui         .name = "level " #x " row " #y " with dict dms",                           \
134*01826a49SYabin Cui         .cli_args = "-" #x,                                                        \
135*01826a49SYabin Cui         .param_values = PARAM_VALUES(row_##y##_level_##x##_param_values_dms),      \
136*01826a49SYabin Cui         .use_dictionary = 1,                                                       \
137*01826a49SYabin Cui         .advanced_api_only = 1,                                                    \
138*01826a49SYabin Cui     };                                                                             \
139*01826a49SYabin Cui     config_t const row_##y##_level_##x##_dict_dds = {                              \
140*01826a49SYabin Cui         .name = "level " #x " row " #y " with dict dds",                           \
141*01826a49SYabin Cui         .cli_args = "-" #x,                                                        \
142*01826a49SYabin Cui         .param_values = PARAM_VALUES(row_##y##_level_##x##_param_values_dds),      \
143*01826a49SYabin Cui         .use_dictionary = 1,                                                       \
144*01826a49SYabin Cui         .advanced_api_only = 1,                                                    \
145*01826a49SYabin Cui     };                                                                             \
146*01826a49SYabin Cui     config_t const row_##y##_level_##x##_dict_copy = {                             \
147*01826a49SYabin Cui         .name = "level " #x " row " #y" with dict copy",                          \
148*01826a49SYabin Cui         .cli_args = "-" #x,                                                        \
149*01826a49SYabin Cui         .param_values = PARAM_VALUES(row_##y##_level_##x##_param_values_dictcopy), \
150*01826a49SYabin Cui         .use_dictionary = 1,                                                       \
151*01826a49SYabin Cui         .advanced_api_only = 1,                                                    \
152*01826a49SYabin Cui     };                                                                             \
153*01826a49SYabin Cui     config_t const row_##y##_level_##x##_dict_load = {                             \
154*01826a49SYabin Cui         .name = "level " #x " row " #y " with dict load",                          \
155*01826a49SYabin Cui         .cli_args = "-" #x,                                                        \
156*01826a49SYabin Cui         .param_values = PARAM_VALUES(row_##y##_level_##x##_param_values_dictload), \
157*01826a49SYabin Cui         .use_dictionary = 1,                                                       \
158*01826a49SYabin Cui         .advanced_api_only = 1,                                                    \
159*01826a49SYabin Cui     };
160*01826a49SYabin Cui 
161*01826a49SYabin Cui #define PARAM_VALUES(pv) \
162*01826a49SYabin Cui     { .data = pv, .size = sizeof(pv) / sizeof((pv)[0]) }
163*01826a49SYabin Cui 
164*01826a49SYabin Cui #include "levels.h"
165*01826a49SYabin Cui 
166*01826a49SYabin Cui #undef LEVEL
167*01826a49SYabin Cui #undef FAST_LEVEL
168*01826a49SYabin Cui #undef ROW_LEVEL
169*01826a49SYabin Cui 
170*01826a49SYabin Cui static config_t no_pledged_src_size = {
171*01826a49SYabin Cui     .name = "no source size",
172*01826a49SYabin Cui     .cli_args = "",
173*01826a49SYabin Cui     .param_values = PARAM_VALUES(level_0_param_values),
174*01826a49SYabin Cui     .no_pledged_src_size = 1,
175*01826a49SYabin Cui };
176*01826a49SYabin Cui 
177*01826a49SYabin Cui static config_t no_pledged_src_size_with_dict = {
178*01826a49SYabin Cui     .name = "no source size with dict",
179*01826a49SYabin Cui     .cli_args = "",
180*01826a49SYabin Cui     .param_values = PARAM_VALUES(level_0_param_values),
181*01826a49SYabin Cui     .no_pledged_src_size = 1,
182*01826a49SYabin Cui     .use_dictionary = 1,
183*01826a49SYabin Cui };
184*01826a49SYabin Cui 
185*01826a49SYabin Cui static param_value_t const ldm_param_values[] = {
186*01826a49SYabin Cui     {.param = ZSTD_c_enableLongDistanceMatching, .value = ZSTD_ps_enable},
187*01826a49SYabin Cui };
188*01826a49SYabin Cui 
189*01826a49SYabin Cui static config_t ldm = {
190*01826a49SYabin Cui     .name = "long distance mode",
191*01826a49SYabin Cui     .cli_args = "--long",
192*01826a49SYabin Cui     .param_values = PARAM_VALUES(ldm_param_values),
193*01826a49SYabin Cui };
194*01826a49SYabin Cui 
195*01826a49SYabin Cui static param_value_t const mt_param_values[] = {
196*01826a49SYabin Cui     {.param = ZSTD_c_nbWorkers, .value = 2},
197*01826a49SYabin Cui };
198*01826a49SYabin Cui 
199*01826a49SYabin Cui static config_t mt = {
200*01826a49SYabin Cui     .name = "multithreaded",
201*01826a49SYabin Cui     .cli_args = "-T2",
202*01826a49SYabin Cui     .param_values = PARAM_VALUES(mt_param_values),
203*01826a49SYabin Cui };
204*01826a49SYabin Cui 
205*01826a49SYabin Cui static param_value_t const mt_ldm_param_values[] = {
206*01826a49SYabin Cui     {.param = ZSTD_c_nbWorkers, .value = 2},
207*01826a49SYabin Cui     {.param = ZSTD_c_enableLongDistanceMatching, .value = ZSTD_ps_enable},
208*01826a49SYabin Cui };
209*01826a49SYabin Cui 
210*01826a49SYabin Cui static config_t mt_ldm = {
211*01826a49SYabin Cui     .name = "multithreaded long distance mode",
212*01826a49SYabin Cui     .cli_args = "-T2 --long",
213*01826a49SYabin Cui     .param_values = PARAM_VALUES(mt_ldm_param_values),
214*01826a49SYabin Cui };
215*01826a49SYabin Cui 
216*01826a49SYabin Cui static param_value_t mt_advanced_param_values[] = {
217*01826a49SYabin Cui     {.param = ZSTD_c_nbWorkers, .value = 2},
218*01826a49SYabin Cui     {.param = ZSTD_c_literalCompressionMode, .value = ZSTD_ps_disable},
219*01826a49SYabin Cui };
220*01826a49SYabin Cui 
221*01826a49SYabin Cui static config_t mt_advanced = {
222*01826a49SYabin Cui     .name = "multithreaded with advanced params",
223*01826a49SYabin Cui     .cli_args = "-T2 --no-compress-literals",
224*01826a49SYabin Cui     .param_values = PARAM_VALUES(mt_advanced_param_values),
225*01826a49SYabin Cui };
226*01826a49SYabin Cui 
227*01826a49SYabin Cui static param_value_t const small_wlog_param_values[] = {
228*01826a49SYabin Cui     {.param = ZSTD_c_windowLog, .value = 10},
229*01826a49SYabin Cui };
230*01826a49SYabin Cui 
231*01826a49SYabin Cui static config_t small_wlog = {
232*01826a49SYabin Cui     .name = "small window log",
233*01826a49SYabin Cui     .cli_args = "--zstd=wlog=10",
234*01826a49SYabin Cui     .param_values = PARAM_VALUES(small_wlog_param_values),
235*01826a49SYabin Cui };
236*01826a49SYabin Cui 
237*01826a49SYabin Cui static param_value_t const small_hlog_param_values[] = {
238*01826a49SYabin Cui     {.param = ZSTD_c_hashLog, .value = 6},
239*01826a49SYabin Cui     {.param = ZSTD_c_strategy, .value = (int)ZSTD_btopt},
240*01826a49SYabin Cui };
241*01826a49SYabin Cui 
242*01826a49SYabin Cui static config_t small_hlog = {
243*01826a49SYabin Cui     .name = "small hash log",
244*01826a49SYabin Cui     .cli_args = "--zstd=hlog=6,strat=7",
245*01826a49SYabin Cui     .param_values = PARAM_VALUES(small_hlog_param_values),
246*01826a49SYabin Cui };
247*01826a49SYabin Cui 
248*01826a49SYabin Cui static param_value_t const small_clog_param_values[] = {
249*01826a49SYabin Cui     {.param = ZSTD_c_chainLog, .value = 6},
250*01826a49SYabin Cui     {.param = ZSTD_c_strategy, .value = (int)ZSTD_btopt},
251*01826a49SYabin Cui };
252*01826a49SYabin Cui 
253*01826a49SYabin Cui static config_t small_clog = {
254*01826a49SYabin Cui     .name = "small chain log",
255*01826a49SYabin Cui     .cli_args = "--zstd=clog=6,strat=7",
256*01826a49SYabin Cui     .param_values = PARAM_VALUES(small_clog_param_values),
257*01826a49SYabin Cui };
258*01826a49SYabin Cui 
259*01826a49SYabin Cui static param_value_t const uncompressed_literals_param_values[] = {
260*01826a49SYabin Cui     {.param = ZSTD_c_compressionLevel, .value = 3},
261*01826a49SYabin Cui     {.param = ZSTD_c_literalCompressionMode, .value = ZSTD_ps_disable},
262*01826a49SYabin Cui };
263*01826a49SYabin Cui 
264*01826a49SYabin Cui static config_t uncompressed_literals = {
265*01826a49SYabin Cui     .name = "uncompressed literals",
266*01826a49SYabin Cui     .cli_args = "-3 --no-compress-literals",
267*01826a49SYabin Cui     .param_values = PARAM_VALUES(uncompressed_literals_param_values),
268*01826a49SYabin Cui };
269*01826a49SYabin Cui 
270*01826a49SYabin Cui static param_value_t const uncompressed_literals_opt_param_values[] = {
271*01826a49SYabin Cui     {.param = ZSTD_c_compressionLevel, .value = 19},
272*01826a49SYabin Cui     {.param = ZSTD_c_literalCompressionMode, .value = ZSTD_ps_disable},
273*01826a49SYabin Cui };
274*01826a49SYabin Cui 
275*01826a49SYabin Cui static config_t uncompressed_literals_opt = {
276*01826a49SYabin Cui     .name = "uncompressed literals optimal",
277*01826a49SYabin Cui     .cli_args = "-19 --no-compress-literals",
278*01826a49SYabin Cui     .param_values = PARAM_VALUES(uncompressed_literals_opt_param_values),
279*01826a49SYabin Cui };
280*01826a49SYabin Cui 
281*01826a49SYabin Cui static param_value_t const huffman_literals_param_values[] = {
282*01826a49SYabin Cui     {.param = ZSTD_c_compressionLevel, .value = -1},
283*01826a49SYabin Cui     {.param = ZSTD_c_literalCompressionMode, .value = ZSTD_ps_enable},
284*01826a49SYabin Cui };
285*01826a49SYabin Cui 
286*01826a49SYabin Cui static config_t huffman_literals = {
287*01826a49SYabin Cui     .name = "huffman literals",
288*01826a49SYabin Cui     .cli_args = "--fast=1 --compress-literals",
289*01826a49SYabin Cui     .param_values = PARAM_VALUES(huffman_literals_param_values),
290*01826a49SYabin Cui };
291*01826a49SYabin Cui 
292*01826a49SYabin Cui static param_value_t const explicit_params_param_values[] = {
293*01826a49SYabin Cui     {.param = ZSTD_c_checksumFlag, .value = 1},
294*01826a49SYabin Cui     {.param = ZSTD_c_contentSizeFlag, .value = 0},
295*01826a49SYabin Cui     {.param = ZSTD_c_dictIDFlag, .value = 0},
296*01826a49SYabin Cui     {.param = ZSTD_c_strategy, .value = (int)ZSTD_greedy},
297*01826a49SYabin Cui     {.param = ZSTD_c_windowLog, .value = 18},
298*01826a49SYabin Cui     {.param = ZSTD_c_hashLog, .value = 21},
299*01826a49SYabin Cui     {.param = ZSTD_c_chainLog, .value = 21},
300*01826a49SYabin Cui     {.param = ZSTD_c_targetLength, .value = 100},
301*01826a49SYabin Cui };
302*01826a49SYabin Cui 
303*01826a49SYabin Cui static config_t explicit_params = {
304*01826a49SYabin Cui     .name = "explicit params",
305*01826a49SYabin Cui     .cli_args = "--no-check --no-dictID --zstd=strategy=3,wlog=18,hlog=21,clog=21,tlen=100",
306*01826a49SYabin Cui     .param_values = PARAM_VALUES(explicit_params_param_values),
307*01826a49SYabin Cui };
308*01826a49SYabin Cui 
309*01826a49SYabin Cui static config_t const* g_configs[] = {
310*01826a49SYabin Cui 
311*01826a49SYabin Cui #define FAST_LEVEL(x) &level_fast##x, &level_fast##x##_dict,
312*01826a49SYabin Cui #define LEVEL(x) &level_##x, &level_##x##_dict, &level_##x##_dict_dms, &level_##x##_dict_dds, &level_##x##_dict_copy, &level_##x##_dict_load,
313*01826a49SYabin Cui #define ROW_LEVEL(x, y) &row_##y##_level_##x, &row_##y##_level_##x##_dict_dms, &row_##y##_level_##x##_dict_dds, &row_##y##_level_##x##_dict_copy, &row_##y##_level_##x##_dict_load,
314*01826a49SYabin Cui #include "levels.h"
315*01826a49SYabin Cui #undef ROW_LEVEL
316*01826a49SYabin Cui #undef LEVEL
317*01826a49SYabin Cui #undef FAST_LEVEL
318*01826a49SYabin Cui 
319*01826a49SYabin Cui     &no_pledged_src_size,
320*01826a49SYabin Cui     &no_pledged_src_size_with_dict,
321*01826a49SYabin Cui     &ldm,
322*01826a49SYabin Cui     &mt,
323*01826a49SYabin Cui     &mt_ldm,
324*01826a49SYabin Cui     &small_wlog,
325*01826a49SYabin Cui     &small_hlog,
326*01826a49SYabin Cui     &small_clog,
327*01826a49SYabin Cui     &explicit_params,
328*01826a49SYabin Cui     &uncompressed_literals,
329*01826a49SYabin Cui     &uncompressed_literals_opt,
330*01826a49SYabin Cui     &huffman_literals,
331*01826a49SYabin Cui     &mt_advanced,
332*01826a49SYabin Cui     NULL,
333*01826a49SYabin Cui };
334*01826a49SYabin Cui 
335*01826a49SYabin Cui config_t const* const* configs = g_configs;
336*01826a49SYabin Cui 
config_skip_data(config_t const * config,data_t const * data)337*01826a49SYabin Cui int config_skip_data(config_t const* config, data_t const* data) {
338*01826a49SYabin Cui     return config->use_dictionary && !data_has_dict(data);
339*01826a49SYabin Cui }
340*01826a49SYabin Cui 
config_get_level(config_t const * config)341*01826a49SYabin Cui int config_get_level(config_t const* config)
342*01826a49SYabin Cui {
343*01826a49SYabin Cui     param_values_t const params = config->param_values;
344*01826a49SYabin Cui     size_t i;
345*01826a49SYabin Cui     for (i = 0; i < params.size; ++i) {
346*01826a49SYabin Cui         if (params.data[i].param == ZSTD_c_compressionLevel)
347*01826a49SYabin Cui             return (int)params.data[i].value;
348*01826a49SYabin Cui     }
349*01826a49SYabin Cui     return CONFIG_NO_LEVEL;
350*01826a49SYabin Cui }
351*01826a49SYabin Cui 
config_get_zstd_params(config_t const * config,uint64_t srcSize,size_t dictSize)352*01826a49SYabin Cui ZSTD_parameters config_get_zstd_params(
353*01826a49SYabin Cui     config_t const* config,
354*01826a49SYabin Cui     uint64_t srcSize,
355*01826a49SYabin Cui     size_t dictSize)
356*01826a49SYabin Cui {
357*01826a49SYabin Cui     ZSTD_parameters zparams = {};
358*01826a49SYabin Cui     param_values_t const params = config->param_values;
359*01826a49SYabin Cui     int level = config_get_level(config);
360*01826a49SYabin Cui     if (level == CONFIG_NO_LEVEL)
361*01826a49SYabin Cui         level = 3;
362*01826a49SYabin Cui     zparams = ZSTD_getParams(
363*01826a49SYabin Cui         level,
364*01826a49SYabin Cui         config->no_pledged_src_size ? ZSTD_CONTENTSIZE_UNKNOWN : srcSize,
365*01826a49SYabin Cui         dictSize);
366*01826a49SYabin Cui     for (size_t i = 0; i < params.size; ++i) {
367*01826a49SYabin Cui         unsigned const value = params.data[i].value;
368*01826a49SYabin Cui         switch (params.data[i].param) {
369*01826a49SYabin Cui             case ZSTD_c_contentSizeFlag:
370*01826a49SYabin Cui                 zparams.fParams.contentSizeFlag = value;
371*01826a49SYabin Cui                 break;
372*01826a49SYabin Cui             case ZSTD_c_checksumFlag:
373*01826a49SYabin Cui                 zparams.fParams.checksumFlag = value;
374*01826a49SYabin Cui                 break;
375*01826a49SYabin Cui             case ZSTD_c_dictIDFlag:
376*01826a49SYabin Cui                 zparams.fParams.noDictIDFlag = !value;
377*01826a49SYabin Cui                 break;
378*01826a49SYabin Cui             case ZSTD_c_windowLog:
379*01826a49SYabin Cui                 zparams.cParams.windowLog = value;
380*01826a49SYabin Cui                 break;
381*01826a49SYabin Cui             case ZSTD_c_chainLog:
382*01826a49SYabin Cui                 zparams.cParams.chainLog = value;
383*01826a49SYabin Cui                 break;
384*01826a49SYabin Cui             case ZSTD_c_hashLog:
385*01826a49SYabin Cui                 zparams.cParams.hashLog = value;
386*01826a49SYabin Cui                 break;
387*01826a49SYabin Cui             case ZSTD_c_searchLog:
388*01826a49SYabin Cui                 zparams.cParams.searchLog = value;
389*01826a49SYabin Cui                 break;
390*01826a49SYabin Cui             case ZSTD_c_minMatch:
391*01826a49SYabin Cui                 zparams.cParams.minMatch = value;
392*01826a49SYabin Cui                 break;
393*01826a49SYabin Cui             case ZSTD_c_targetLength:
394*01826a49SYabin Cui                 zparams.cParams.targetLength = value;
395*01826a49SYabin Cui                 break;
396*01826a49SYabin Cui             case ZSTD_c_strategy:
397*01826a49SYabin Cui                 zparams.cParams.strategy = (ZSTD_strategy)value;
398*01826a49SYabin Cui                 break;
399*01826a49SYabin Cui             default:
400*01826a49SYabin Cui                 break;
401*01826a49SYabin Cui         }
402*01826a49SYabin Cui     }
403*01826a49SYabin Cui     return zparams;
404*01826a49SYabin Cui }
405