example/
example.rs

1extern crate enum_unitary;
2use enum_unitary::enum_unitary;
3
4enum_unitary!{
5  #[derive(Debug, PartialEq)]
6  pub enum Myenum {
7    A, B, C
8  }
9}
10
11fn main() {
12  use enum_unitary::{FromPrimitive, ToPrimitive};
13
14  assert_eq!(enum_iterator::cardinality::<Myenum>(), 3);
15  assert_eq!(Into::<usize>::into (Myenum::A), 0);
16  assert_eq!(Into::<usize>::into (Myenum::B), 1);
17  assert_eq!(Into::<usize>::into (Myenum::C), 2);
18  assert_eq!(Some (Myenum::A), Myenum::from_usize (0));
19  assert_eq!(Some (Myenum::B), Myenum::from_usize (1));
20  assert_eq!(Some (Myenum::C), Myenum::from_usize (2));
21  assert_eq!(None, Myenum::from_usize (3));
22  assert_eq!(Some (0), Myenum::A.to_usize());
23  assert_eq!(Some (1), Myenum::B.to_usize());
24  assert_eq!(Some (2), Myenum::C.to_usize());
25  assert_eq!(enum_iterator::first::<Myenum>().unwrap(), Myenum::A);
26  assert_eq!(enum_iterator::last::<Myenum>().unwrap(),  Myenum::C);
27  let mut i = enum_iterator::all::<Myenum>();
28  assert_eq!(i.next(), Some (Myenum::A));
29  assert_eq!(i.next(), Some (Myenum::B));
30  assert_eq!(i.next(), Some (Myenum::C));
31  assert_eq!(i.next(), None);
32  assert_eq!(enum_iterator::next (&Myenum::A), Some (Myenum::B));
33  assert_eq!(enum_iterator::previous (&Myenum::A), None);
34  assert_eq!(enum_iterator::next (&Myenum::B), Some (Myenum::C));
35  assert_eq!(enum_iterator::previous (&Myenum::B), Some (Myenum::A));
36  assert_eq!(enum_iterator::next (&Myenum::C), None);
37  assert_eq!(enum_iterator::previous (&Myenum::C), Some (Myenum::B));
38}