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