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