Skip to content

Commit b5be095

Browse files
Improve tests for #26114
1 parent ffe5162 commit b5be095

File tree

1 file changed

+22
-5
lines changed

1 file changed

+22
-5
lines changed

src/test/run-pass/enum-discrim-manual-sizing.rs

+22-5
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
// except according to those terms.
1010

1111

12-
use std::mem::size_of;
12+
use std::mem::{size_of, align_of};
1313

1414
#[repr(i8)]
1515
enum Ei8 {
@@ -71,14 +71,20 @@ enum Euint {
7171
Buint = 1
7272
}
7373

74+
#[repr(u8)]
75+
enum Eu8NonCLike<T> {
76+
_None,
77+
_Some(T),
78+
}
79+
7480
#[repr(i64)]
75-
enum Ei64_non_c_like<T> {
81+
enum Ei64NonCLike<T> {
7682
_None,
7783
_Some(T),
7884
}
7985

8086
#[repr(u64)]
81-
enum Eu64_non_c_like<T> {
87+
enum Eu64NonCLike<T> {
8288
_None,
8389
_Some(T),
8490
}
@@ -94,6 +100,17 @@ pub fn main() {
94100
assert_eq!(size_of::<Eu64>(), 8);
95101
assert_eq!(size_of::<Eint>(), size_of::<isize>());
96102
assert_eq!(size_of::<Euint>(), size_of::<usize>());
97-
assert_eq!(size_of::<Ei64_non_c_like<()>>(), 8);
98-
assert_eq!(size_of::<Eu64_non_c_like<()>>(), 8);
103+
assert_eq!(size_of::<Eu8NonCLike<()>>(), 1);
104+
assert_eq!(size_of::<Ei64NonCLike<()>>(), 8);
105+
assert_eq!(size_of::<Eu64NonCLike<()>>(), 8);
106+
let u8_expected_size = round_up(9, align_of::<Eu64NonCLike<u8>>());
107+
assert_eq!(size_of::<Eu64NonCLike<u8>>(), u8_expected_size);
108+
let array_expected_size = round_up(28, align_of::<Eu64NonCLike<[u32; 5]>>());
109+
assert_eq!(size_of::<Eu64NonCLike<[u32; 5]>>(), array_expected_size);
110+
assert_eq!(size_of::<Eu64NonCLike<[u32; 6]>>(), 32);
111+
}
112+
113+
// Rounds x up to the next multiple of a
114+
fn round_up(x: usize, a: usize) -> usize {
115+
((x + (a - 1)) / a) * a
99116
}

0 commit comments

Comments
 (0)