| #![cfg_attr(feature = "used_linker", feature(used_with_arg))] | |
| use linkme::distributed_slice; | |
| use once_cell::sync::Lazy; | |
| #[distributed_slice] | |
| static SHENANIGANS: [i32] = [..]; | |
| #[distributed_slice(SHENANIGANS)] | |
| static N: i32 = 9; | |
| #[distributed_slice(SHENANIGANS)] | |
| static NN: i32 = 99; | |
| #[distributed_slice(SHENANIGANS)] | |
| static NNN: i32 = 999; | |
| #[test] | |
| fn test() { | |
| assert_eq!(SHENANIGANS.len(), 3); | |
| let mut sum = 0; | |
| for n in SHENANIGANS { | |
| sum += n; | |
| } | |
| assert_eq!(sum, 9 + 99 + 999); | |
| } | |
| #[test] | |
| fn test_empty() { | |
| #[distributed_slice] | |
| static EMPTY: [i32] = [..]; | |
| assert!(EMPTY.is_empty()); | |
| } | |
| #[test] | |
| fn test_non_copy() { | |
| struct NonCopy(i32); | |
| #[distributed_slice] | |
| static NONCOPY: [NonCopy] = [..]; | |
| #[distributed_slice(NONCOPY)] | |
| static ELEMENT: NonCopy = NonCopy(9); | |
| assert!(!NONCOPY.is_empty()); | |
| } | |
| #[test] | |
| fn test_interior_mutable() { | |
| #[distributed_slice] | |
| static MUTABLE: [Lazy<i32>] = [..]; | |
| #[distributed_slice(MUTABLE)] | |
| static ELEMENT: Lazy<i32> = Lazy::new(|| -1); | |
| assert!(MUTABLE.len() == 1); | |
| assert!(*MUTABLE[0] == -1); | |
| } | |
| #[test] | |
| fn test_elided_lifetime() { | |
| #[distributed_slice] | |
| pub static MYSLICE: [&str] = [..]; | |
| #[distributed_slice(MYSLICE)] | |
| static ELEMENT: &str = "..."; | |
| assert!(!MYSLICE.is_empty()); | |
| } |