#![cfg(feature = "wilcoxon")]
mod nocover;
use basic_stats::{
core::{AltHyp, StatsError},
wilcoxon::RankSum,
};
use nocover::nocover;
#[test]
fn test_from_slices() {
let good = [];
let bad = [1., 2., 1.];
assert!(RankSum::from_slices(&bad, &bad).is_err());
assert!(RankSum::from_slices(&bad, &good).is_err());
assert!(RankSum::from_slices(&good, &bad).is_err());
if nocover() {
assert!(RankSum::from_slices(&good, &good).is_ok());
}
}
#[test]
fn test_z() {
let s0 = [];
let s11 = [1.];
let s12 = [2.];
let s22 = [2., 2.];
let s42 = [2., 2., 2., 2.];
let s52 = [2., 2., 2., 2., 2.];
let smx = [2., 2., 2., 3., 3.];
let rs0_0 = RankSum::from_slices(&s0, &s0).unwrap();
let rs0_11 = RankSum::from_slices(&s0, &s11).unwrap();
let rs11_0 = RankSum::from_slices(&s11, &s0).unwrap();
assert!(rs0_0.z().is_err());
assert!(rs0_11.z().is_err());
assert!(rs11_0.z().is_err());
let get_z = |name: &str, x: &[f64], y: &[f64]| -> Result<f64, StatsError> {
let rs = RankSum::from_slices(x, y).unwrap();
let z = rs.z();
println!("{name}: z={z:?}");
z
};
_ = get_z("S11-s11", &s11, &s11);
_ = get_z("S11-s12", &s11, &s12);
_ = get_z("S12-s22", &s12, &s22);
_ = get_z("S22-s42", &s22, &s42);
_ = get_z("S22-s52", &s22, &s52);
_ = get_z("S22-smx", &s22, &smx);
_ = get_z("S42-s52", &s42, &s52);
_ = get_z("S42-smx", &s42, &smx);
_ = get_z("S52-smx", &s52, &smx);
assert!(get_z("S11-s11", &s11, &s11).is_err());
assert!(get_z("S12-s22", &s12, &s22).is_err());
assert!(get_z("S22-s42", &s22, &s42).is_err());
assert!(get_z("S22-s52", &s22, &s52).is_err());
assert!(get_z("S42-s52", &s42, &s52).is_err());
assert!(get_z("S52-smx", &s52, &smx).is_err());
if nocover() {
assert!(get_z("S11-s12", &s11, &s12).unwrap().is_finite());
assert!(get_z("S22-smx", &s22, &smx).unwrap().is_finite());
assert!(get_z("S42-smx", &s42, &smx).unwrap().is_finite());
}
}
#[test]
fn test_z_test() {
let x = [1.];
let y = [2.];
let rs = RankSum::from_slices(&x, &y).unwrap();
let alt_hyp = AltHyp::Ne;
assert!(rs.z_test(alt_hyp, 0.).is_err());
assert!(rs.z_test(alt_hyp, 1.).is_err());
if nocover() {
assert!(rs.z_test(alt_hyp, 0.5).is_ok());
}
}