1 // run-pass
2 
main()3 fn main() {
4     // test compound assignment operators with ref as right-hand side,
5     // for each operator, with various types as operands.
6 
7     // test AddAssign
8     {
9         let mut x = 3i8;
10         x += &2i8;
11         assert_eq!(x, 5i8);
12     }
13 
14     // test SubAssign
15     {
16         let mut x = 7i16;
17         x -= &4;
18         assert_eq!(x, 3i16);
19     }
20 
21     // test MulAssign
22     {
23         let mut x = 3f32;
24         x *= &3f32;
25         assert_eq!(x, 9f32);
26     }
27 
28     // test DivAssign
29     {
30         let mut x = 6f64;
31         x /= &2f64;
32         assert_eq!(x, 3f64);
33     }
34 
35     // test RemAssign
36     {
37         let mut x = 7i64;
38         x %= &4i64;
39         assert_eq!(x, 3i64);
40     }
41 
42     // test BitOrAssign
43     {
44         let mut x = 0b1010u8;
45         x |= &0b1100u8;
46         assert_eq!(x, 0b1110u8);
47     }
48 
49     // test BitAndAssign
50     {
51         let mut x = 0b1010u16;
52         x &= &0b1100u16;
53         assert_eq!(x, 0b1000u16);
54     }
55 
56     // test BitXorAssign
57     {
58         let mut x = 0b1010u32;
59         x ^= &0b1100u32;
60         assert_eq!(x, 0b0110u32);
61     }
62 
63     // test ShlAssign
64     {
65         let mut x = 0b1010u64;
66         x <<= &2u32;
67         assert_eq!(x, 0b101000u64);
68     }
69 
70     // test ShrAssign
71     {
72         let mut x = 0b1010u64;
73         x >>= &2i16;
74         assert_eq!(x, 0b10u64);
75     }
76 }
77