#![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] = [..]; #[distributed_slice(MUTABLE)] static ELEMENT: Lazy = 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()); }