#![allow(dead_code)] #![feature(plugin)] #![plugin(bounded_integer_plugin)] #[macro_use] extern crate bounded_integer; trait AssertVariants { fn assert(self); } macro_rules! assert_variants { ($t:ty { $($v:pat),+ }) => { impl AssertVariants for $t { fn assert(self) { match self { $($v => ()),+ } } } } } bounded_integer! { enum A: i8 { 0...0 } } bounded_integer! { enum B: i8 { -2...2 } } assert_variants!(A { A::Z0 }); assert_variants!(B { B::N2, B::N1, B::Z0, B::P1, B::P2 }); #[test] fn a_variants() { assert_eq!(0, A::Z0 as i8); } #[test] fn b_variants() { assert_eq!(-2, B::N2 as i8); assert_eq!(-1, B::N1 as i8); assert_eq!(0, B::Z0 as i8); assert_eq!(1, B::P1 as i8); assert_eq!(2, B::P2 as i8); }