max_size.rs (3019B)
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] 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] 34 fn test_bool() { 35 assert_eq!(bool::max_size(), size_of::<u8>()); 36 } 37 38 #[test] 39 fn test_option() { 40 assert_eq!( 41 Option::<usize>::max_size(), 42 <u8>::max_size() + <usize>::max_size() 43 ); 44 } 45 46 #[test] 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] 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] 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] 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] 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] 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 }