use super::config::DEFAULT_LAMBDA;
pub const LAMBDA_MIN: f64 = 0.9;
pub const LAMBDA_MAX_INCLUSIVE: f64 = 1.0;
pub fn env_lambda_override() -> Option<f64> {
let raw = std::env::var("CODETETHER_DELEGATION_LAMBDA").ok()?;
let value: f64 = raw.trim().parse().ok()?;
Some(clamp_lambda(value))
}
pub fn clamp_lambda(raw: f64) -> f64 {
if !raw.is_finite() {
return DEFAULT_LAMBDA;
}
if raw <= 0.0 || raw > LAMBDA_MAX_INCLUSIVE {
return DEFAULT_LAMBDA;
}
if raw < LAMBDA_MIN {
return LAMBDA_MIN;
}
raw
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn clamps_below_min_to_min() {
assert!((clamp_lambda(0.5) - LAMBDA_MIN).abs() < 1e-12);
}
#[test]
fn one_passes_through_above_one_falls_back() {
assert!((clamp_lambda(1.0) - 1.0).abs() < 1e-12);
assert!((clamp_lambda(2.5) - DEFAULT_LAMBDA).abs() < 1e-12);
}
#[test]
fn passes_through_in_range() {
assert!((clamp_lambda(0.95) - 0.95).abs() < 1e-12);
}
#[test]
fn nan_falls_back_to_default() {
assert!((clamp_lambda(f64::NAN) - DEFAULT_LAMBDA).abs() < 1e-12);
}
}