#![cfg(feature = "serde")]
use lambert_izzo::{LambertError, NonFiniteParameter, Position};
#[test]
fn errors_round_trip_through_serde_json() {
let cases = [
LambertError::NonFiniteInput {
parameter: NonFiniteParameter::Tof,
value: f64::MAX,
},
LambertError::NonPositiveTimeOfFlight { tof: -1.0 },
LambertError::NonPositiveMu { mu: 0.0 },
LambertError::DegeneratePositionVector {
position: Position::R1,
norm: 0.0,
},
LambertError::CollinearGeometry { sin_angle: 1e-16 },
LambertError::NoConvergence {
iterations: 15,
last_step: 1e-3,
n_revs: 0,
},
LambertError::NoConvergence {
iterations: 15,
last_step: 1e-7,
n_revs: 4,
},
LambertError::SingularDenominator { n_revs: 0 },
LambertError::SingularDenominator { n_revs: 5 },
];
for original in &cases {
let json = serde_json::to_string(original)
.expect("LambertError serializes to JSON");
let restored: LambertError = serde_json::from_str(&json)
.expect("LambertError deserializes from its own JSON");
assert_eq!(original, &restored, "round-trip mismatch via {json}");
}
}