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