1 // Copyright 2019 The Servo Project Developers. See the COPYRIGHT
2 // file at the top-level directory of this distribution and at
3 // http://rust-lang.org/COPYRIGHT.
4 //
5 // Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
6 // http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
7 // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
8 // option. This file may not be copied, modified, or distributed
9 // except according to those terms.
10 
11 #![allow(dead_code)]
12 
13 use peek_poke::{PeekPoke, Poke};
14 use std::{marker::PhantomData, mem::size_of};
15 
16 #[test]
test_numbers()17 fn test_numbers() {
18     assert_eq!(u8::max_size(), size_of::<u8>());
19     assert_eq!(u16::max_size(), size_of::<u16>());
20     assert_eq!(u32::max_size(), size_of::<u32>());
21     assert_eq!(u64::max_size(), size_of::<u64>());
22     assert_eq!(usize::max_size(), size_of::<usize>());
23     assert_eq!(i8::max_size(), size_of::<i8>());
24     assert_eq!(i16::max_size(), size_of::<i16>());
25     assert_eq!(i32::max_size(), size_of::<i32>());
26     assert_eq!(i64::max_size(), size_of::<i64>());
27     assert_eq!(isize::max_size(), size_of::<isize>());
28     // floating
29     assert_eq!(f32::max_size(), size_of::<f32>());
30     assert_eq!(f64::max_size(), size_of::<f64>());
31 }
32 
33 #[test]
test_bool()34 fn test_bool() {
35     assert_eq!(bool::max_size(), size_of::<u8>());
36 }
37 
38 #[test]
test_option()39 fn test_option() {
40     assert_eq!(
41         Option::<usize>::max_size(),
42         <u8>::max_size() + <usize>::max_size()
43     );
44 }
45 
46 #[test]
test_fixed_size_array()47 fn test_fixed_size_array() {
48     assert_eq!(<[u32; 32]>::max_size(), 32 * size_of::<u32>());
49     assert_eq!(<[u64; 8]>::max_size(), 8 * size_of::<u64>());
50     assert_eq!(<[u8; 19]>::max_size(), 19 * size_of::<u8>());
51 }
52 
53 #[test]
test_tuple()54 fn test_tuple() {
55     assert_eq!(<(isize, )>::max_size(), size_of::<isize>());
56     assert_eq!(<(isize, isize, isize)>::max_size(), 3 * size_of::<isize>());
57     assert_eq!(<(isize, ())>::max_size(), size_of::<isize>());
58 }
59 
60 #[test]
test_basic_struct()61 fn test_basic_struct() {
62     #[derive(Debug, PeekPoke)]
63     struct Bar {
64         a: u32,
65         b: u32,
66         c: u32,
67     }
68 
69     assert_eq!(<Bar>::max_size(), 3 * <u32>::max_size());
70 }
71 
72 #[test]
test_enum()73 fn test_enum() {
74     #[derive(Clone, Copy, PeekPoke)]
75     enum TestEnum {
76         NoArg,
77         OneArg(usize),
78         Args(usize, usize),
79         AnotherNoArg,
80         StructLike { x: usize, y: f32 },
81     }
82     assert_eq!(
83         TestEnum::max_size(),
84         <u8>::max_size() + 2 * <usize>::max_size()
85     );
86 }
87 
88 #[test]
test_enum_cstyle()89 fn test_enum_cstyle() {
90     #[repr(u32)]
91     #[derive(Clone, Copy, PeekPoke)]
92     enum BorderStyle {
93         None = 0,
94         Solid = 1,
95         Double = 2,
96         Dotted = 3,
97         Dashed = 4,
98         Hidden = 5,
99         Groove = 6,
100         Ridge = 7,
101         Inset = 8,
102         Outset = 9,
103     }
104     assert_eq!(BorderStyle::max_size(), <u8>::max_size());
105 }
106 
107 #[test]
test_phantom_data()108 fn test_phantom_data() {
109     struct Bar;
110     #[derive(PeekPoke)]
111     struct Foo {
112         x: u32,
113         y: u32,
114         _marker: PhantomData<Bar>,
115     }
116     assert_eq!(Foo::max_size(), 2 * size_of::<u32>())
117 }
118