fn empty_array() -> [u16; 0] { [] } fn mini_array() -> [u16; 1] { [42] } fn big_array() -> [u16; 5] { [5, 4, 3, 2, 1] } fn array_array() -> [[u8; 2]; 3] { [[5, 4], [3, 2], [1, 0]] } fn index_unsafe() -> i32 { let a = [0, 10, 20, 30]; unsafe { *a.get_unchecked(2) } } fn index() -> i32 { let a = [0, 10, 20, 30]; a[2] } fn array_repeat() -> [u8; 8] { [42; 8] } fn slice_index() -> u8 { let arr: &[_] = &[101, 102, 103, 104, 105, 106]; arr[5] } fn from() { const N: usize = 16; type Array = [u8; N]; let array: Array = [0; N]; let slice: &[u8] = &array[..]; let result = <&Array>::try_from(slice); assert_eq!(&array, result.unwrap()); let vec = Vec::from(array); assert_eq!(vec.len(), N); } fn eq() { const N: usize = 16; type Array = [u8; N]; let array1: Array = [0; N]; let array2: Array = [0; N]; let array3: Array = [1; N]; assert_eq!(array1, array2); assert_ne!(array1, array3); } fn debug() { let array = [0u8, 42, 13, 71]; println!("{:?}", array); } fn huge_zst() { fn id(x: T) -> T { x } // A "huge" zero-sized array. Make sure we don't loop over it in any part of Miri. let val = [(); usize::MAX]; id(val); // make a copy let val = [val; 2]; id(val); // Also wrap it in a union (which, in particular, hits the logic for computing union padding). let _copy = std::mem::MaybeUninit::new(val); } fn main() { assert_eq!(empty_array(), []); assert_eq!(index_unsafe(), 20); assert_eq!(index(), 20); assert_eq!(slice_index(), 106); assert_eq!(big_array(), [5, 4, 3, 2, 1]); assert_eq!(array_array(), [[5, 4], [3, 2], [1, 0]]); assert_eq!(array_repeat(), [42; 8]); assert_eq!(mini_array(), [42]); from(); eq(); debug(); huge_zst(); }