use greeners_core::multipletests::MultiTestMethod;
use greeners_core::multipletests::MultipleTests;
const PVALUES: [f64; 4] = [0.01, 0.04, 0.03, 0.005];
const ALPHA: f64 = 0.05;
#[test]
fn test_bonferroni() {
let (reject, corrected) =
MultipleTests::multipletests(&PVALUES, ALPHA, MultiTestMethod::Bonferroni).unwrap();
assert!((corrected[0] - 0.04).abs() < 1e-10);
assert!((corrected[1] - 0.16).abs() < 1e-10);
assert!((corrected[2] - 0.12).abs() < 1e-10);
assert!((corrected[3] - 0.02).abs() < 1e-10);
assert_eq!(reject, vec![true, false, false, true]);
}
#[test]
fn test_benjamini_hochberg() {
let (reject, corrected) =
MultipleTests::multipletests(&PVALUES, ALPHA, MultiTestMethod::BenjaminiHochberg).unwrap();
assert!((corrected[3] - 0.02).abs() < 1e-10);
assert!((corrected[0] - 0.02).abs() < 1e-10);
assert!((corrected[2] - 0.04).abs() < 1e-10);
assert!((corrected[1] - 0.04).abs() < 1e-10);
assert_eq!(reject, vec![true, true, true, true]);
}
#[test]
fn test_holm() {
let (reject, corrected) =
MultipleTests::multipletests(&PVALUES, ALPHA, MultiTestMethod::HolmBonferroni).unwrap();
assert!((corrected[3] - 0.02).abs() < 1e-10);
assert!((corrected[0] - 0.03).abs() < 1e-10);
assert!((corrected[2] - 0.06).abs() < 1e-10);
assert!((corrected[1] - 0.06).abs() < 1e-10);
assert_eq!(reject, vec![true, false, false, true]);
}
#[test]
fn test_sidak() {
let (reject, corrected) =
MultipleTests::multipletests(&PVALUES, ALPHA, MultiTestMethod::Sidak).unwrap();
let expected_0 = 1.0 - (1.0 - 0.01_f64).powi(4);
let expected_3 = 1.0 - (1.0 - 0.005_f64).powi(4);
assert!((corrected[0] - expected_0).abs() < 1e-10);
assert!((corrected[3] - expected_3).abs() < 1e-10);
assert!(reject[0]); assert!(reject[3]); }
#[test]
fn test_empty_pvalues() {
let result = MultipleTests::multipletests(&[], ALPHA, MultiTestMethod::Bonferroni);
assert!(result.is_err());
}