| // Allows the macro invocation below to work | 
 | use crate as rustc_index; | 
 |  | 
 | crate::newtype_index! { | 
 |     #[orderable] | 
 |     #[max = 0xFFFF_FFFA] | 
 |     struct MyIdx {} | 
 | } | 
 |  | 
 | #[test] | 
 | fn index_size_is_optimized() { | 
 |     assert_eq!(size_of::<MyIdx>(), 4); | 
 |     // Uses 0xFFFF_FFFB | 
 |     assert_eq!(size_of::<Option<MyIdx>>(), 4); | 
 |     // Uses 0xFFFF_FFFC | 
 |     assert_eq!(size_of::<Option<Option<MyIdx>>>(), 4); | 
 |     // Uses 0xFFFF_FFFD | 
 |     assert_eq!(size_of::<Option<Option<Option<MyIdx>>>>(), 4); | 
 |     // Uses 0xFFFF_FFFE | 
 |     assert_eq!(size_of::<Option<Option<Option<Option<MyIdx>>>>>(), 4); | 
 |     // Uses 0xFFFF_FFFF | 
 |     assert_eq!(size_of::<Option<Option<Option<Option<Option<MyIdx>>>>>>(), 4); | 
 |     // Uses a tag | 
 |     assert_eq!(size_of::<Option<Option<Option<Option<Option<Option<MyIdx>>>>>>>(), 8); | 
 | } | 
 |  | 
 | #[test] | 
 | fn range_iterator_iterates_forwards() { | 
 |     let range = MyIdx::from_u32(1)..MyIdx::from_u32(4); | 
 |     assert_eq!( | 
 |         range.collect::<Vec<_>>(), | 
 |         [MyIdx::from_u32(1), MyIdx::from_u32(2), MyIdx::from_u32(3)] | 
 |     ); | 
 | } | 
 |  | 
 | #[test] | 
 | fn range_iterator_iterates_backwards() { | 
 |     let range = MyIdx::from_u32(1)..MyIdx::from_u32(4); | 
 |     assert_eq!( | 
 |         range.rev().collect::<Vec<_>>(), | 
 |         [MyIdx::from_u32(3), MyIdx::from_u32(2), MyIdx::from_u32(1)] | 
 |     ); | 
 | } | 
 |  | 
 | #[test] | 
 | fn range_count_is_correct() { | 
 |     let range = MyIdx::from_u32(1)..MyIdx::from_u32(4); | 
 |     assert_eq!(range.count(), 3); | 
 | } | 
 |  | 
 | #[test] | 
 | fn range_size_hint_is_correct() { | 
 |     let range = MyIdx::from_u32(1)..MyIdx::from_u32(4); | 
 |     assert_eq!(range.size_hint(), (3, Some(3))); | 
 | } |