pub const DEFAULT_PARALLEL_THRESHOLD_BYTES: u64 = 25 * 1024 * 1024;
#[must_use]
pub fn select_algorithm(
input_size: Option<u64>,
explicit: Option<&str>,
threshold: u64,
gpu_enabled: bool,
) -> &'static str {
if let Some(name) = explicit {
return Box::leak(name.to_owned().into_boxed_str());
}
match input_size {
None => "parallel-deflate",
Some(size) if size >= threshold && gpu_enabled => "gpu-deflate",
Some(size) if size >= threshold => "parallel-deflate",
_ => "default",
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_select_algorithm_auto_selects_parallel_above_threshold() {
let name = select_algorithm(
Some(DEFAULT_PARALLEL_THRESHOLD_BYTES),
None,
DEFAULT_PARALLEL_THRESHOLD_BYTES,
false,
);
assert_eq!(name, "parallel-deflate");
let name_over = select_algorithm(
Some(DEFAULT_PARALLEL_THRESHOLD_BYTES + 1),
None,
DEFAULT_PARALLEL_THRESHOLD_BYTES,
false,
);
assert_eq!(name_over, "parallel-deflate");
}
#[test]
fn test_select_algorithm_uses_default_below_threshold() {
let name = select_algorithm(
Some(DEFAULT_PARALLEL_THRESHOLD_BYTES - 1),
None,
DEFAULT_PARALLEL_THRESHOLD_BYTES,
false,
);
assert_eq!(name, "default");
}
#[test]
fn test_select_algorithm_explicit_override() {
let name = select_algorithm(
Some(1024),
Some("my-algo"),
DEFAULT_PARALLEL_THRESHOLD_BYTES,
false,
);
assert_eq!(name, "my-algo");
let name_large = select_algorithm(
Some(u64::MAX),
Some("default"),
DEFAULT_PARALLEL_THRESHOLD_BYTES,
false,
);
assert_eq!(name_large, "default");
}
#[test]
fn test_select_algorithm_streaming_uses_parallel() {
let name = select_algorithm(None, None, DEFAULT_PARALLEL_THRESHOLD_BYTES, false);
assert_eq!(name, "parallel-deflate");
}
#[test]
fn test_select_algorithm_gpu_enabled_prefers_gpu_above_threshold() {
let name = select_algorithm(
Some(DEFAULT_PARALLEL_THRESHOLD_BYTES),
None,
DEFAULT_PARALLEL_THRESHOLD_BYTES,
true,
);
assert_eq!(name, "gpu-deflate");
}
#[test]
fn test_select_algorithm_gpu_enabled_still_default_below_threshold() {
let name = select_algorithm(
Some(DEFAULT_PARALLEL_THRESHOLD_BYTES - 1),
None,
DEFAULT_PARALLEL_THRESHOLD_BYTES,
true,
);
assert_eq!(name, "default");
}
#[test]
fn test_select_algorithm_gpu_enabled_explicit_override_wins() {
let name = select_algorithm(
Some(DEFAULT_PARALLEL_THRESHOLD_BYTES),
Some("parallel-deflate"),
DEFAULT_PARALLEL_THRESHOLD_BYTES,
true,
);
assert_eq!(name, "parallel-deflate");
}
}