]> git.lizzy.rs Git - rust.git/blob - src/test/run-pass/shift.rs
Auto merge of #28816 - petrochenkov:unistruct, r=nrc
[rust.git] / src / test / run-pass / shift.rs
1 // Copyright 2012 The Rust Project Developers. See the COPYRIGHT
2 // file at the top-level directory of this distribution and at
3 // http://rust-lang.org/COPYRIGHT.
4 //
5 // Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
6 // http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
7 // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
8 // option. This file may not be copied, modified, or distributed
9 // except according to those terms.
10
11 // Testing shifts for various combinations of integers
12 // Issue #1570
13
14
15 pub fn main() {
16     test_misc();
17     test_expr();
18     test_const();
19 }
20
21 fn test_misc() {
22     assert_eq!(1 << 1 << 1 << 1 << 1 << 1, 32);
23 }
24
25 fn test_expr() {
26     let v10 = 10 as usize;
27     let v4 = 4 as u8;
28     let v2 = 2 as u8;
29     assert_eq!(v10 >> v2 as usize, v2 as usize);
30     assert_eq!(v10 << v4 as usize, 160 as usize);
31
32     let v10 = 10 as u8;
33     let v4 = 4 as usize;
34     let v2 = 2 as usize;
35     assert_eq!(v10 >> v2 as usize, v2 as u8);
36     assert_eq!(v10 << v4 as usize, 160 as u8);
37
38     let v10 = 10 as isize;
39     let v4 = 4 as i8;
40     let v2 = 2 as i8;
41     assert_eq!(v10 >> v2 as usize, v2 as isize);
42     assert_eq!(v10 << v4 as usize, 160 as isize);
43
44     let v10 = 10 as i8;
45     let v4 = 4 as isize;
46     let v2 = 2 as isize;
47     assert_eq!(v10 >> v2 as usize, v2 as i8);
48     assert_eq!(v10 << v4 as usize, 160 as i8);
49
50     let v10 = 10 as usize;
51     let v4 = 4 as isize;
52     let v2 = 2 as isize;
53     assert_eq!(v10 >> v2 as usize, v2 as usize);
54     assert_eq!(v10 << v4 as usize, 160 as usize);
55 }
56
57 fn test_const() {
58     static r1_1: usize = 10_usize >> 2_usize;
59     static r2_1: usize = 10_usize << 4_usize;
60     assert_eq!(r1_1, 2 as usize);
61     assert_eq!(r2_1, 160 as usize);
62
63     static r1_2: u8 = 10u8 >> 2_usize;
64     static r2_2: u8 = 10u8 << 4_usize;
65     assert_eq!(r1_2, 2 as u8);
66     assert_eq!(r2_2, 160 as u8);
67
68     static r1_3: isize = 10 >> 2_usize;
69     static r2_3: isize = 10 << 4_usize;
70     assert_eq!(r1_3, 2 as isize);
71     assert_eq!(r2_3, 160 as isize);
72
73     static r1_4: i8 = 10i8 >> 2_usize;
74     static r2_4: i8 = 10i8 << 4_usize;
75     assert_eq!(r1_4, 2 as i8);
76     assert_eq!(r2_4, 160 as i8);
77
78     static r1_5: usize = 10_usize >> 2_usize;
79     static r2_5: usize = 10_usize << 4_usize;
80     assert_eq!(r1_5, 2 as usize);
81     assert_eq!(r2_5, 160 as usize);
82 }