Skip to content

Commit 8ad0399

Browse files
committed
test fastcover optimize
1 parent a391153 commit 8ad0399

File tree

2 files changed

+102
-1
lines changed

2 files changed

+102
-1
lines changed

c2rust-lib.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,9 @@ pub use crate::lib::common::zstd_common::{
142142
pub use crate::lib::dictBuilder::cover::{
143143
ZDICT_optimizeTrainFromBuffer_cover, ZDICT_trainFromBuffer_cover,
144144
};
145-
pub use crate::lib::dictBuilder::fastcover::ZDICT_trainFromBuffer_fastCover;
145+
pub use crate::lib::dictBuilder::fastcover::{
146+
ZDICT_optimizeTrainFromBuffer_fastCover, ZDICT_trainFromBuffer_fastCover,
147+
};
146148
pub use crate::lib::zdict::{
147149
experimental::{ZDICT_cover_params_t, ZDICT_fastCover_params_t},
148150
ZDICT_getDictID, ZDICT_getErrorName, ZDICT_isError, ZDICT_params_t, ZDICT_trainFromBuffer,

test-libzstd-rs-sys/src/dict_builder.rs

Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -289,3 +289,102 @@ fn test_optimize_train_from_buffer_cover_pool(thread_count: u32) {
289289
(compressed, dict_buffer)
290290
});
291291
}
292+
293+
#[test]
294+
#[cfg(not(target_family = "wasm"))]
295+
fn test_optimize_train_from_buffer_fastcover_single_threaded() {
296+
test_optimize_train_from_buffer_fastcover_pool(1);
297+
}
298+
299+
#[test]
300+
#[ignore = "let's fix the single-threaded case first"]
301+
#[cfg(not(target_family = "wasm"))]
302+
fn test_optimize_train_from_buffer_fastcover_multi_threaded() {
303+
test_optimize_train_from_buffer_fastcover_pool(4);
304+
}
305+
306+
fn test_optimize_train_from_buffer_fastcover_pool(thread_count: u32) {
307+
let input_data = "The quick brown fox jumps high";
308+
309+
assert_eq_rs_c!({
310+
let mut sample_data = Vec::new();
311+
312+
let mut sample_sizes = Vec::new();
313+
314+
for &s in &SAMPLES {
315+
sample_data.extend_from_slice(s.as_bytes());
316+
317+
sample_sizes.push(s.len());
318+
}
319+
320+
let dict_capacity = 16 * 1024;
321+
322+
let mut dict_buffer = vec![0u8; dict_capacity];
323+
324+
let mut params = ZDICT_fastCover_params_t {
325+
k: 200,
326+
d: 8,
327+
steps: 4,
328+
nbThreads: thread_count,
329+
splitPoint: 0.5,
330+
shrinkDict: 0,
331+
shrinkDictMaxRegression: 1,
332+
zParams: ZDICT_params_t {
333+
compressionLevel: 3,
334+
notificationLevel: 1,
335+
dictID: 0,
336+
},
337+
f: 20,
338+
accel: 1,
339+
};
340+
341+
let dict_size = ZDICT_optimizeTrainFromBuffer_fastCover(
342+
dict_buffer.as_mut_ptr() as *mut c_void,
343+
dict_buffer.len(),
344+
sample_data.as_ptr() as *const c_void,
345+
sample_sizes.as_ptr(),
346+
sample_sizes.len() as u32,
347+
&mut params,
348+
);
349+
350+
assert_eq!(
351+
ZDICT_isError(dict_size),
352+
0,
353+
"Dict training failed {:?}",
354+
CStr::from_ptr(ZDICT_getErrorName(dict_size)).to_str(),
355+
);
356+
357+
dict_buffer.truncate(dict_size);
358+
359+
println!("Dictionary size: {}", dict_size);
360+
361+
let cctx = ZSTD_createCCtx();
362+
363+
assert!(!cctx.is_null());
364+
365+
let max_compressed_size = ZSTD_compressBound(input_data.len());
366+
367+
let mut compressed = vec![0u8; max_compressed_size];
368+
369+
let compressed_size = ZSTD_compress_usingDict(
370+
cctx,
371+
compressed.as_mut_ptr() as *mut c_void,
372+
compressed.len(),
373+
input_data.as_bytes().as_ptr() as *const c_void,
374+
input_data.len(),
375+
dict_buffer.as_ptr() as *const c_void,
376+
dict_buffer.len(),
377+
3, // compression level
378+
);
379+
380+
assert_eq!(ZSTD_isError(compressed_size), 0, "Compression failed");
381+
382+
compressed.truncate(compressed_size);
383+
384+
println!("Compressed size: {}", compressed_size);
385+
386+
ZSTD_freeCCtx(cctx);
387+
388+
(compressed, dict_buffer)
389+
});
390+
}

0 commit comments

Comments
 (0)