]> git.lizzy.rs Git - rust.git/blob - tests/run-pass/intrinsics.rs
supply our own implementation of the CTFE pointer comparison intrinsics
[rust.git] / tests / run-pass / intrinsics.rs
1 #![feature(core_intrinsics, const_raw_ptr_comparison)]
2
3 use std::intrinsics;
4 use std::mem::{size_of, size_of_val};
5
6 struct Bomb;
7
8 impl Drop for Bomb {
9     fn drop(&mut self) {
10         eprintln!("BOOM!");
11     }
12 }
13
14 fn main() {
15     assert_eq!(size_of::<Option<i32>>(), 8);
16     assert_eq!(size_of_val(&()), 0);
17     assert_eq!(size_of_val(&42), 4);
18     assert_eq!(size_of_val(&[] as &[i32]), 0);
19     assert_eq!(size_of_val(&[1, 2, 3] as &[i32]), 12);
20     assert_eq!(size_of_val("foobar"), 6);
21
22     assert_eq!(intrinsics::type_name::<Option<i32>>(), "core::option::Option<i32>");
23
24     assert_eq!(intrinsics::likely(false), false);
25     assert_eq!(intrinsics::unlikely(true), true);
26
27     unsafe { intrinsics::forget(Bomb); }
28
29     let _v = intrinsics::discriminant_value(&Some(()));
30     let _v = intrinsics::discriminant_value(&0);
31     let _v = intrinsics::discriminant_value(&true);
32     let _v = intrinsics::discriminant_value(&vec![1,2,3]);
33
34     let addr = &13 as *const i32;
35     let addr2 = (addr as usize).wrapping_add(usize::MAX).wrapping_add(1);
36     assert!(addr.guaranteed_eq(addr2 as *const _));
37     assert!(addr.guaranteed_ne(0x100 as *const _));
38 }