extern crate rstm_state as rstm;
use rstm::{Halt, State};
#[test]
fn state() {
let mut state = State(0);
assert_eq!(state.get(), &0);
assert_eq!(state.value(), 0);
assert_eq!(state.replace(1), 0);
assert_eq!(*state.get(), 1);
state.set(2);
assert_eq!(*state.get(), 2);
state.reset();
assert_eq!(*state.get(), 0);
state.swap(&mut State(10));
assert_eq!(*state.get(), 10);
}
#[test]
fn halt_state() {
let state = State(0_usize);
assert_eq! { state.halt(), Halt::Halt(0) }
assert_eq! { state.into_halt(), Halt::Step(0) }
}
#[test]
fn cast_state() {
let q = State(0_isize);
let r = unsafe { q.cast::<usize>() };
assert_eq!(r, 0_usize);
}
#[test]
fn convert_state() {
let q = State(0_isize);
let r = q.into_any();
assert_eq!(*r.0.downcast_ref::<isize>().unwrap(), 0_isize);
}
#[test]
fn numstate() {
let one = State::<isize>::one();
let zero = State::<f32>::zero();
assert_eq!(one, 1);
assert_eq!(zero, 0.0);
}