]> git.proxmox.com Git - rustc.git/blob - tests/ui/binop/binops.rs
New upstream version 1.68.2+dfsg1
[rustc.git] / tests / ui / binop / 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 }