pub mod anderson;
pub mod ks_test;
pub mod shapiro;
pub use anderson::{anderson_darling, anderson_normal_critical_values};
pub use ks_test::{ks_one_sample, ks_one_sample_mode, ks_two_sample, ks_two_sample_mode};
pub use shapiro::shapiro_wilk;
pub(crate) fn kolmogorov_sf(x: f64) -> f64 {
if x <= 0.0 {
return 1.0;
}
let mut sum = 0.0_f64;
let mut sign = 1.0_f64;
for j in 1..=100 {
let jf = f64::from(j);
let term = (-2.0 * jf * jf * x * x).exp();
sum = sign.mul_add(term, sum);
sign = -sign;
if term < 1e-15 {
break;
}
}
(2.0 * sum).clamp(0.0, 1.0)
}