//@ run-pass #![allow(non_camel_case_types)] // Binop corner cases fn test_nil() { assert_eq!((), ()); assert!(!(() != ())); assert!(!(() < ())); assert!(() <= ()); assert!(!(() > ())); assert!(() >= ()); } fn test_bool() { assert!(!(true < false)); assert!(!(true <= false)); assert!(true > false); assert!(true >= false); assert!(false < true); assert!(false <= true); assert!(!(false > true)); assert!(!(false >= true)); // Bools support bitwise binops assert_eq!(false & false, false); assert_eq!(true & false, false); assert_eq!(true & true, true); assert_eq!(false | false, false); assert_eq!(true | false, true); assert_eq!(true | true, true); assert_eq!(false ^ false, false); assert_eq!(true ^ false, true); assert_eq!(true ^ true, false); } fn test_ptr() { unsafe { let p1: *const u8 = ::std::mem::transmute(0_usize); let p2: *const u8 = ::std::mem::transmute(0_usize); let p3: *const u8 = ::std::mem::transmute(1_usize); assert_eq!(p1, p2); assert!(p1 != p3); assert!(p1 < p3); assert!(p1 <= p3); assert!(p3 > p1); assert!(p3 >= p3); assert!(p1 <= p2); assert!(p1 >= p2); } } #[derive(PartialEq, Debug)] struct p { x: isize, y: isize, } fn p(x: isize, y: isize) -> p { p { x: x, y: y } } fn test_class() { let q = p(1, 2); let mut r = p(1, 2); unsafe { println!("q = {:x}, r = {:x}", (::std::mem::transmute::<*const p, usize>(&q)), (::std::mem::transmute::<*const p, usize>(&r))); } assert_eq!(q, r); r.y = 17; assert!(r.y != q.y); assert_eq!(r.y, 17); assert!(q != r); } pub fn main() { test_nil(); test_bool(); test_ptr(); test_class(); }