]>
Commit | Line | Data |
---|---|---|
064997fb FG |
1 | // check-pass |
2 | //! An array must have the correct length. | |
3 | ||
4 | #![crate_type = "lib"] | |
5 | #![feature(transmutability)] | |
6 | #![allow(dead_code, incomplete_features, non_camel_case_types)] | |
7 | ||
8 | mod assert { | |
f2b60f7d | 9 | use std::mem::{Assume, BikeshedIntrinsicFrom}; |
064997fb FG |
10 | pub struct Context; |
11 | ||
12 | pub fn is_maybe_transmutable<Src, Dst>() | |
13 | where | |
f2b60f7d | 14 | Dst: BikeshedIntrinsicFrom<Src, Context, { Assume::SAFETY.and(Assume::VALIDITY) }> |
064997fb FG |
15 | {} |
16 | } | |
17 | ||
18 | fn should_have_len_0() { | |
19 | type Array = [u8; 0]; | |
20 | #[repr(C)] struct Struct(); | |
21 | assert::is_maybe_transmutable::<Array, Struct>(); | |
22 | assert::is_maybe_transmutable::<Struct, Array>(); | |
23 | } | |
24 | ||
25 | fn should_have_len_1() { | |
26 | type Array = [u8; 1]; | |
27 | #[repr(C)] struct Struct(u8); | |
28 | assert::is_maybe_transmutable::<Array, Struct>(); | |
29 | assert::is_maybe_transmutable::<Struct, Array>(); | |
30 | } | |
31 | ||
32 | fn should_have_len_2() { | |
33 | type Array = [u8; 2]; | |
34 | #[repr(C)] struct Struct(u8, u8); | |
35 | assert::is_maybe_transmutable::<Array, Struct>(); | |
36 | assert::is_maybe_transmutable::<Struct, Array>(); | |
37 | } | |
38 | ||
39 | fn should_have_len_3() { | |
40 | type Array = [u8; 3]; | |
41 | #[repr(C)] struct Struct(u8, u8, u8); | |
42 | assert::is_maybe_transmutable::<Array, Struct>(); | |
43 | assert::is_maybe_transmutable::<Struct, Array>(); | |
44 | } |