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}