use super::*;
#[test]
fn diagnostics_separate_diversity_from_controllability() {
let grid = vec![
vec![latent([1, 1], vec![0.0]), latent([1, 1], vec![2.0])],
vec![latent([1, 1], vec![10.0]), latent([1, 1], vec![12.0])],
];
let d = GenerationDiagnostics::measure(&grid).unwrap();
assert!(d.within_condition() > 0.0);
assert!(d.between_condition() > 0.0);
assert_eq!(d.condition_count(), 2);
assert_eq!(d.sample_count(), 4);
}
#[test]
fn collapsed_but_controllable_has_zero_within_positive_between() {
let grid = vec![
vec![latent([1, 1], vec![1.0]), latent([1, 1], vec![1.0])],
vec![latent([1, 1], vec![5.0]), latent([1, 1], vec![5.0])],
];
let d = GenerationDiagnostics::measure(&grid).unwrap();
assert_eq!(d.within_condition(), 0.0);
assert!(d.between_condition() > 0.0);
}
#[test]
fn diverse_but_uncontrolled_has_positive_within_zero_between() {
let cond = vec![latent([1, 1], vec![0.0]), latent([1, 1], vec![4.0])];
let grid = vec![cond.clone(), cond];
let d = GenerationDiagnostics::measure(&grid).unwrap();
assert!(d.within_condition() > 0.0);
assert_eq!(d.between_condition(), 0.0);
}
#[test]
fn measure_rejects_empty_grid_and_empty_condition() {
assert!(matches!(
GenerationDiagnostics::measure(&[]),
Err(Error::Validation(_))
));
let grid = vec![vec![latent([1, 1], vec![0.0])], vec![]];
assert!(matches!(
GenerationDiagnostics::measure(&grid),
Err(Error::Validation(_))
));
}
#[test]
fn measure_rejects_cross_condition_shape_mismatch() {
let grid = vec![
vec![latent([1, 2], vec![0.0, 1.0])],
vec![latent([2, 1], vec![0.0, 1.0])],
];
assert!(matches!(
GenerationDiagnostics::measure(&grid),
Err(Error::Validation(_))
));
}
#[test]
fn measure_rejects_ragged_seed_budgets() {
let grid = vec![
vec![latent([1, 1], vec![0.0]), latent([1, 1], vec![2.0])],
vec![latent([1, 1], vec![5.0])],
];
assert!(matches!(
GenerationDiagnostics::measure(&grid),
Err(Error::Validation(_))
));
}