use scsys_state::{NState, Nary, State};
#[test]
fn test_state() {
let mut state = State::<usize>::zero();
assert_eq!(state, 0);
state.set(5);
assert_eq!(state, 5);
assert_eq!(state.take(), 5);
assert_eq!(state, 0);
let mapped = state.map(|x| x + 1);
assert_eq!(mapped, 1);
assert_ne!(mapped, state);
}
#[test]
fn test_state_views() {
let mut state = State::<usize>::zero();
let view = state.view();
assert_eq!(view.get(), &&0);
assert_eq!(view.copied(), 0);
state.set(5);
assert_eq!(state.view().value(), &mut 5_usize);
}
#[test]
fn test_option_state() {
let mut state = State::<Option<usize>>::none();
assert_eq!(state.get(), &None);
state.set(Some(5));
assert_eq!(state.get(), &Some(5));
}
#[test]
fn test_nary_state() {
let state = NState::<usize, 4>::new(0);
assert!(state.is_kind::<Nary<4>>());
assert!(!state.is_kind::<Nary<2>>());
assert!(!state.is_kind::<Nary<{ usize::MAX }>>());
}
#[cfg(feature = "rand")]
#[test]
fn test_random_state() {
let a = State::<f32>::random();
let b = State::<f32>::random();
assert_ne!(a, b);
}