helena 0.1.0

Core types and component interfaces for helena, a latent data-to-waveform generation platform.
Documentation
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(_))
    ));
}