use core::any::TypeId; use core::intrinsics::assume; #[test] fn test_typeid_sized_types() { struct X; struct Y(u32); assert_eq!(TypeId::of::(), TypeId::of::()); assert_eq!(TypeId::of::(), TypeId::of::()); assert!(TypeId::of::() != TypeId::of::()); } #[test] fn test_typeid_unsized_types() { trait Z {} struct X(str); struct Y(dyn Z + 'static); assert_eq!(TypeId::of::(), TypeId::of::()); assert_eq!(TypeId::of::(), TypeId::of::()); assert!(TypeId::of::() != TypeId::of::()); } // Check that `const_assume` feature allow `assume` intrinsic // to be used in const contexts. #[test] fn test_assume_can_be_in_const_contexts() { const unsafe fn foo(x: usize, y: usize) -> usize { // SAFETY: the entire function is not safe, // but it is just an example not used elsewhere. unsafe { assume(y != 0) }; x / y } let rs = unsafe { foo(42, 97) }; assert_eq!(rs, 0); }