use super::*;
#[test]
fn collapsed_samples_have_zero_dispersion() {
let mean = latent([2, 2], vec![1.0, -2.0, 3.0, 0.5]);
let samples = vec![mean.clone(), mean.clone(), mean];
assert_eq!(sample_dispersion(&samples).unwrap(), 0.0);
}
#[test]
fn varied_samples_have_positive_dispersion() {
let samples = vec![
latent([1, 2], vec![0.0, 0.0]),
latent([1, 2], vec![2.0, 0.0]),
];
assert!(sample_dispersion(&samples).unwrap() > 0.0);
}
#[test]
fn sample_dispersion_matches_hand_computed_variance() {
let samples = vec![
latent([1, 2], vec![0.0, 5.0]),
latent([1, 2], vec![2.0, 5.0]),
];
assert!((sample_dispersion(&samples).unwrap() - 0.5).abs() < 1e-6);
}
#[test]
fn single_sample_is_total_and_zero() {
let samples = vec![latent([2, 1], vec![1.0, 2.0])];
assert_eq!(sample_dispersion(&samples).unwrap(), 0.0);
}
#[test]
fn rejects_empty_set() {
assert!(matches!(sample_dispersion(&[]), Err(Error::Validation(_))));
}
#[test]
fn rejects_shape_mismatch() {
let samples = vec![
latent([1, 2], vec![0.0, 0.0]),
latent([2, 1], vec![0.0, 0.0]),
];
assert!(matches!(
sample_dispersion(&samples),
Err(Error::Validation(_))
));
}
#[test]
fn rejects_zero_element_latents() {
let samples = vec![latent([0, 2], vec![]), latent([0, 2], vec![])];
assert!(matches!(
sample_dispersion(&samples),
Err(Error::Validation(_))
));
}