]> git.lizzy.rs Git - rust.git/blob - src/tools/miri/tests/pass/arrays.rs
Auto merge of #101837 - scottmcm:box-array-from-vec, r=m-ou-se
[rust.git] / src / tools / miri / tests / pass / arrays.rs
1 use std::convert::TryFrom;
2
3 fn empty_array() -> [u16; 0] {
4     []
5 }
6
7 fn mini_array() -> [u16; 1] {
8     [42]
9 }
10
11 fn big_array() -> [u16; 5] {
12     [5, 4, 3, 2, 1]
13 }
14
15 fn array_array() -> [[u8; 2]; 3] {
16     [[5, 4], [3, 2], [1, 0]]
17 }
18
19 fn index_unsafe() -> i32 {
20     let a = [0, 10, 20, 30];
21     unsafe { *a.get_unchecked(2) }
22 }
23
24 fn index() -> i32 {
25     let a = [0, 10, 20, 30];
26     a[2]
27 }
28
29 fn array_repeat() -> [u8; 8] {
30     [42; 8]
31 }
32
33 fn slice_index() -> u8 {
34     let arr: &[_] = &[101, 102, 103, 104, 105, 106];
35     arr[5]
36 }
37
38 fn from() {
39     const N: usize = 16;
40     type Array = [u8; N];
41     let array: Array = [0; N];
42     let slice: &[u8] = &array[..];
43
44     let result = <&Array>::try_from(slice);
45     assert_eq!(&array, result.unwrap());
46
47     let vec = Vec::from(array);
48     assert_eq!(vec.len(), N);
49 }
50
51 fn eq() {
52     const N: usize = 16;
53     type Array = [u8; N];
54     let array1: Array = [0; N];
55     let array2: Array = [0; N];
56     let array3: Array = [1; N];
57     assert_eq!(array1, array2);
58     assert_ne!(array1, array3);
59 }
60
61 fn debug() {
62     let array = [0u8, 42, 13, 71];
63     println!("{:?}", array);
64 }
65
66 fn main() {
67     assert_eq!(empty_array(), []);
68     assert_eq!(index_unsafe(), 20);
69     assert_eq!(index(), 20);
70     assert_eq!(slice_index(), 106);
71     assert_eq!(big_array(), [5, 4, 3, 2, 1]);
72     assert_eq!(array_array(), [[5, 4], [3, 2], [1, 0]]);
73     assert_eq!(array_repeat(), [42; 8]);
74     assert_eq!(mini_array(), [42]);
75     from();
76     eq();
77     debug();
78 }