feat(compress): move sequence validation identity to Rust
ZSTD_resolveExternalSequenceValidation() is a pure int identity used while resolving CCtx parameters. Route its existing C wrapper through a Rust extern "C" entry point in the parameter module, preserving the int-to-int ABI and every call-site result. Add boundary coverage for signed int modes. Test Plan: - `cargo test --manifest-path rust/Cargo.toml --no-default-features --features compression` -- passed (253 tests) - `make -B -C lib -j2 lib` -- passed - required clippy passes for the compression feature, benches, and tests -- passed - `cargo +nightly fmt --manifest-path rust/Cargo.toml` and `git diff --check` -- passed
This commit is contained in:
@@ -106,6 +106,7 @@ size_t ZSTD_rust_params_resolveMaxBlockSize(size_t maxBlockSize);
|
|||||||
size_t ZSTD_rust_params_getBlockSize(size_t maxBlockSize, U32 windowLog);
|
size_t ZSTD_rust_params_getBlockSize(size_t maxBlockSize, U32 windowLog);
|
||||||
void ZSTD_rust_params_overrideCParams(ZSTD_compressionParameters* cParams,
|
void ZSTD_rust_params_overrideCParams(ZSTD_compressionParameters* cParams,
|
||||||
const ZSTD_compressionParameters* overrides);
|
const ZSTD_compressionParameters* overrides);
|
||||||
|
int ZSTD_rust_params_resolveExternalSequenceValidation(int mode);
|
||||||
int ZSTD_rust_params_rowMatchFinderSupported(int strategy);
|
int ZSTD_rust_params_rowMatchFinderSupported(int strategy);
|
||||||
int ZSTD_rust_params_rowMatchFinderUsed(int strategy, int mode);
|
int ZSTD_rust_params_rowMatchFinderUsed(int strategy, int mode);
|
||||||
int ZSTD_rust_params_resolveRowMatchFinderMode(
|
int ZSTD_rust_params_resolveRowMatchFinderMode(
|
||||||
@@ -605,7 +606,7 @@ static ZSTD_ParamSwitch_e ZSTD_resolveEnableLdm(ZSTD_ParamSwitch_e mode,
|
|||||||
}
|
}
|
||||||
|
|
||||||
static int ZSTD_resolveExternalSequenceValidation(int mode) {
|
static int ZSTD_resolveExternalSequenceValidation(int mode) {
|
||||||
return mode;
|
return ZSTD_rust_params_resolveExternalSequenceValidation(mode);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Resolves maxBlockSize to the default if no value is present. */
|
/* Resolves maxBlockSize to the default if no value is present. */
|
||||||
|
|||||||
@@ -415,6 +415,17 @@ pub extern "C" fn ZSTD_rust_params_resolveExternalRepcodeSearch(
|
|||||||
resolve_external_repcode_search(mode, compression_level)
|
resolve_external_repcode_search(mode, compression_level)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[inline]
|
||||||
|
fn resolve_external_sequence_validation(mode: c_int) -> c_int {
|
||||||
|
mode
|
||||||
|
}
|
||||||
|
|
||||||
|
/// C ABI for `ZSTD_resolveExternalSequenceValidation()`.
|
||||||
|
#[no_mangle]
|
||||||
|
pub extern "C" fn ZSTD_rust_params_resolveExternalSequenceValidation(mode: c_int) -> c_int {
|
||||||
|
resolve_external_sequence_validation(mode)
|
||||||
|
}
|
||||||
|
|
||||||
#[inline]
|
#[inline]
|
||||||
fn cdict_indices_are_tagged(cparams: ZSTD_compressionParameters) -> bool {
|
fn cdict_indices_are_tagged(cparams: ZSTD_compressionParameters) -> bool {
|
||||||
cparams.strategy == ZSTD_FAST || cparams.strategy == ZSTD_DFAST
|
cparams.strategy == ZSTD_FAST || cparams.strategy == ZSTD_DFAST
|
||||||
@@ -1213,6 +1224,16 @@ mod tests {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn external_sequence_validation_preserves_its_int_mode() {
|
||||||
|
for mode in [c_int::MIN, -1, 0, 1, c_int::MAX] {
|
||||||
|
assert_eq!(
|
||||||
|
ZSTD_rust_params_resolveExternalSequenceValidation(mode),
|
||||||
|
mode
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn level_tables_match_representative_clevels_entries() {
|
fn level_tables_match_representative_clevels_entries() {
|
||||||
let large = select_cparams(3, ZSTD_CONTENTSIZE_UNKNOWN, 0, ZSTD_RUST_CPM_UNKNOWN);
|
let large = select_cparams(3, ZSTD_CONTENTSIZE_UNKNOWN, 0, ZSTD_RUST_CPM_UNKNOWN);
|
||||||
|
|||||||
Reference in New Issue
Block a user