helena 0.1.0

Core types and component interfaces for helena, a latent data-to-waveform generation platform.
Documentation
use super::*;

#[test]
fn serde_round_trips_and_rejects_degenerate() {
    let level = NoiseLevel::from_signal_variance(0.3).unwrap();
    let json = serde_json::to_string(&level).unwrap();
    assert_eq!(serde_json::from_str::<NoiseLevel>(&json).unwrap(), level);

    let schedule = CosineSchedule::new(0.01).unwrap();
    let json = serde_json::to_string(&schedule).unwrap();
    assert_eq!(
        serde_json::from_str::<CosineSchedule>(&json).unwrap(),
        schedule
    );

    assert!(serde_json::from_str::<NoiseLevel>(r#"{"signal_variance":1.5}"#).is_err());
    assert!(serde_json::from_str::<CosineSchedule>(r#"{"offset":-0.5}"#).is_err());
}

#[test]
fn signed_zero_is_canonicalized() {
    let level = NoiseLevel::from_signal_variance(-0.0).unwrap();
    assert_eq!(level, NoiseLevel::from_signal_variance(0.0).unwrap());
    assert_eq!(
        serde_json::to_string(&level).unwrap(),
        r#"{"signal_variance":0.0}"#
    );

    let schedule = CosineSchedule::new(-0.0).unwrap();
    assert_eq!(schedule, CosineSchedule::new(0.0).unwrap());
    assert_eq!(
        serde_json::to_string(&schedule).unwrap(),
        r#"{"offset":0.0}"#
    );
}

#[test]
fn equal_artifacts_hash_equally() {
    let a = CosineSchedule::new(0.008).unwrap();
    let same = CosineSchedule::new(0.008).unwrap();
    let diff = CosineSchedule::new(0.02).unwrap();
    let hash = |s: &CosineSchedule| crate::provenance::sha256_hex(&serde_json::to_vec(s).unwrap());
    assert_eq!(hash(&a), hash(&same));
    assert_ne!(hash(&a), hash(&diff));
}