mirror of
https://github.com/rust-lang/rust.git
synced 2025-06-19 11:07:32 +00:00
60 lines
1.5 KiB
Rust
60 lines
1.5 KiB
Rust
// 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() {
|
|
use std::mem::size_of;
|
|
|
|
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)));
|
|
}
|