]>
Commit | Line | Data |
---|---|---|
0bf4aa26 | 1 | #![allow(non_camel_case_types)] |
223e47cc LB |
2 | // Binop corner cases |
3 | ||
4 | fn test_nil() { | |
970d7e83 | 5 | assert_eq!((), ()); |
223e47cc LB |
6 | assert!((!(() != ()))); |
7 | assert!((!(() < ()))); | |
8 | assert!((() <= ())); | |
9 | assert!((!(() > ()))); | |
10 | assert!((() >= ())); | |
11 | } | |
12 | ||
13 | fn test_bool() { | |
14 | assert!((!(true < false))); | |
15 | assert!((!(true <= false))); | |
16 | assert!((true > false)); | |
17 | assert!((true >= false)); | |
18 | ||
19 | assert!((false < true)); | |
20 | assert!((false <= true)); | |
21 | assert!((!(false > true))); | |
22 | assert!((!(false >= true))); | |
23 | ||
24 | // Bools support bitwise binops | |
970d7e83 LB |
25 | assert_eq!(false & false, false); |
26 | assert_eq!(true & false, false); | |
27 | assert_eq!(true & true, true); | |
28 | assert_eq!(false | false, false); | |
29 | assert_eq!(true | false, true); | |
30 | assert_eq!(true | true, true); | |
31 | assert_eq!(false ^ false, false); | |
32 | assert_eq!(true ^ false, true); | |
33 | assert_eq!(true ^ true, false); | |
223e47cc LB |
34 | } |
35 | ||
223e47cc LB |
36 | fn test_ptr() { |
37 | unsafe { | |
85aaf69f SL |
38 | let p1: *const u8 = ::std::mem::transmute(0_usize); |
39 | let p2: *const u8 = ::std::mem::transmute(0_usize); | |
40 | let p3: *const u8 = ::std::mem::transmute(1_usize); | |
223e47cc | 41 | |
970d7e83 | 42 | assert_eq!(p1, p2); |
223e47cc LB |
43 | assert!(p1 != p3); |
44 | assert!(p1 < p3); | |
45 | assert!(p1 <= p3); | |
46 | assert!(p3 > p1); | |
47 | assert!(p3 >= p3); | |
48 | assert!(p1 <= p2); | |
49 | assert!(p1 >= p2); | |
50 | } | |
51 | } | |
52 | ||
85aaf69f | 53 | #[derive(PartialEq, Debug)] |
223e47cc | 54 | struct p { |
c34b1796 AL |
55 | x: isize, |
56 | y: isize, | |
223e47cc LB |
57 | } |
58 | ||
c34b1796 | 59 | fn p(x: isize, y: isize) -> p { |
223e47cc LB |
60 | p { |
61 | x: x, | |
62 | y: y | |
63 | } | |
64 | } | |
65 | ||
66 | fn test_class() { | |
1a4d82fc | 67 | let q = p(1, 2); |
223e47cc | 68 | let mut r = p(1, 2); |
970d7e83 | 69 | |
223e47cc | 70 | unsafe { |
1a4d82fc | 71 | println!("q = {:x}, r = {:x}", |
c34b1796 AL |
72 | (::std::mem::transmute::<*const p, usize>(&q)), |
73 | (::std::mem::transmute::<*const p, usize>(&r))); | |
223e47cc | 74 | } |
970d7e83 | 75 | assert_eq!(q, r); |
223e47cc LB |
76 | r.y = 17; |
77 | assert!((r.y != q.y)); | |
970d7e83 | 78 | assert_eq!(r.y, 17); |
223e47cc LB |
79 | assert!((q != r)); |
80 | } | |
81 | ||
82 | pub fn main() { | |
83 | test_nil(); | |
84 | test_bool(); | |
223e47cc LB |
85 | test_ptr(); |
86 | test_class(); | |
87 | } |