use crate::base::state::State;
use std::f64::consts::PI;
#[derive(Clone, Debug, PartialEq)]
pub struct SO2State {
pub value: f64,
}
impl SO2State {
pub fn new(val: f64) -> Self {
SO2State {
value: (val + PI).rem_euclid(2.0 * PI) - PI,
}
}
pub fn normalise(&mut self) -> Self {
SO2State {
value: (self.value + PI).rem_euclid(2.0 * PI) - PI,
}
}
}
impl State for SO2State {}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_so2_state_creation() {
let state = SO2State { value: 1.0 };
assert_eq!(state.value, 1.0);
}
#[test]
fn test_so2_state_clone() {
let state1 = SO2State { value: 1.0 };
let state2 = state1.clone();
assert_eq!(state1, state2);
}
#[test]
fn test_so2_state_normalise() {
let mut state1 = SO2State {
value: 3.0 * PI / 2.0,
};
let state2 = state1.normalise();
assert_eq!(state2.value, -PI / 2.0);
}
}