use crate::raim::normal_quantile;
pub fn k_ir_one_sided(ir: f64) -> f64 {
normal_quantile(1.0 - ir)
}
pub fn k_ir_two_sided(ir: f64) -> f64 {
normal_quantile(1.0 - ir / 2.0)
}
pub fn k_running_max(ir: f64) -> f64 {
k_ir_two_sided(ir / 2.0)
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn running_max_uses_half_ir() {
let ir = 1e-3;
assert!((k_running_max(ir) - k_ir_two_sided(ir / 2.0)).abs() < 1e-12);
}
#[test]
fn running_max_strictly_inflates_pointwise() {
for ir in [1e-2, 1e-3, 1e-5, 1e-7] {
assert!(
k_running_max(ir) > k_ir_two_sided(ir),
"running-max K(ir/2) must exceed pointwise K(ir) at ir={ir}"
);
}
}
#[test]
fn multipliers_are_ordered_and_positive() {
let ir = 1e-4;
assert!(k_ir_one_sided(ir) > 0.0);
assert!(k_ir_two_sided(ir) > k_ir_one_sided(ir));
assert!(k_running_max(ir) > k_ir_two_sided(ir));
}
}