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));
}