Skip to content

Commit ee4878d

Browse files
michielp1807folkertdev
authored andcommitted
Add dictionary train fuzz test
1 parent 5e6944b commit ee4878d

File tree

3 files changed

+60
-1
lines changed

3 files changed

+60
-1
lines changed

c2rust-lib.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -139,7 +139,9 @@ pub use crate::lib::common::zstd_common::{
139139
ZSTD_getErrorName, ZSTD_isError, ZSTD_versionNumber, ZSTD_versionString,
140140
};
141141

142-
pub use crate::lib::dictBuilder::cover::ZDICT_trainFromBuffer_cover;
142+
pub use crate::lib::dictBuilder::cover::{
143+
ZDICT_optimizeTrainFromBuffer_cover, ZDICT_trainFromBuffer_cover,
144+
};
143145
pub use crate::lib::dictBuilder::fastcover::ZDICT_trainFromBuffer_fastCover;
144146
pub use crate::lib::zdict::{
145147
experimental::{ZDICT_cover_params_t, ZDICT_fastCover_params_t},

fuzz/Cargo.toml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,3 +35,10 @@ path = "fuzz_targets/dictionary_round_trip.rs"
3535
test = false
3636
doc = false
3737
bench = false
38+
39+
[[bin]]
40+
name = "dictionary_train"
41+
path = "fuzz_targets/dictionary_train.rs"
42+
test = false
43+
doc = false
44+
bench = false
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
#![no_main]
2+
3+
use c2rust_out_fuzz::{assert_eq_rs_c, ArbitrarySamples};
4+
use libfuzzer_sys::fuzz_target;
5+
6+
// COVER dictionary builder tests
7+
fuzz_target!(|data: (u8, u8, ArbitrarySamples)| {
8+
let (k, d, samples) = data;
9+
10+
let d = 1 + (d as u32 % 16);
11+
let k = d + (k as u32 % 256);
12+
13+
// train
14+
let (_dict_size, dict) = assert_eq_rs_c!({
15+
let mut params = libzstd_rs_sys::ZDICT_cover_params_t::default();
16+
params.d = d;
17+
params.k = k;
18+
19+
let mut dict = vec![0u8; samples.dict_size];
20+
let dict_size = ZDICT_trainFromBuffer_cover(
21+
dict.as_mut_ptr().cast(),
22+
samples.dict_size,
23+
samples.samples.as_ptr().cast(),
24+
samples.sample_sizes.as_ptr(),
25+
samples.nb_samples as u32,
26+
std::mem::transmute(params),
27+
);
28+
29+
(dict_size, dict)
30+
});
31+
32+
// optimize
33+
assert_eq_rs_c!({
34+
let mut opt_params = libzstd_rs_sys::ZDICT_cover_params_t::default();
35+
opt_params.steps = 4;
36+
37+
let mut dict = dict.clone();
38+
39+
let opt_dict_size = ZDICT_optimizeTrainFromBuffer_cover(
40+
dict.as_mut_ptr().cast(),
41+
samples.dict_size,
42+
samples.samples.as_ptr().cast(),
43+
samples.sample_sizes.as_ptr(),
44+
samples.nb_samples as u32 / 4,
45+
std::mem::transmute(&mut opt_params),
46+
);
47+
48+
(opt_dict_size, dict)
49+
});
50+
});

0 commit comments

Comments
 (0)