about summary refs log tree commit diff
path: root/src/tools/clippy/tests/ui/invalid_upcast_comparisons.rs
blob: 4f3194869f4300efb962044774b337c9ba377893 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
#![warn(clippy::invalid_upcast_comparisons)]
#![allow(
    unused,
    clippy::eq_op,
    clippy::no_effect,
    clippy::unnecessary_operation,
    clippy::cast_lossless
)]

fn mk_value<T>() -> T {
    unimplemented!()
}

fn main() {
    let u32: u32 = mk_value();
    let u8: u8 = mk_value();
    let i32: i32 = mk_value();
    let i8: i8 = mk_value();

    // always false, since no u8 can be > 300
    (u8 as u32) > 300;
    //~^ invalid_upcast_comparisons

    (u8 as i32) > 300;
    //~^ invalid_upcast_comparisons

    (u8 as u32) == 300;
    //~^ invalid_upcast_comparisons

    (u8 as i32) == 300;
    //~^ invalid_upcast_comparisons

    300 < (u8 as u32);
    //~^ invalid_upcast_comparisons

    300 < (u8 as i32);
    //~^ invalid_upcast_comparisons

    300 == (u8 as u32);
    //~^ invalid_upcast_comparisons

    300 == (u8 as i32);
    //~^ invalid_upcast_comparisons

    // inverted of the above
    (u8 as u32) <= 300;
    //~^ invalid_upcast_comparisons

    (u8 as i32) <= 300;
    //~^ invalid_upcast_comparisons

    (u8 as u32) != 300;
    //~^ invalid_upcast_comparisons

    (u8 as i32) != 300;
    //~^ invalid_upcast_comparisons

    300 >= (u8 as u32);
    //~^ invalid_upcast_comparisons

    300 >= (u8 as i32);
    //~^ invalid_upcast_comparisons

    300 != (u8 as u32);
    //~^ invalid_upcast_comparisons

    300 != (u8 as i32);
    //~^ invalid_upcast_comparisons

    // always false, since u8 -> i32 doesn't wrap
    (u8 as i32) < 0;
    //~^ invalid_upcast_comparisons

    -5 != (u8 as i32);
    //~^ invalid_upcast_comparisons

    // inverted of the above
    (u8 as i32) >= 0;
    //~^ invalid_upcast_comparisons

    -5 == (u8 as i32);
    //~^ invalid_upcast_comparisons

    // always false, since no u8 can be 1337
    1337 == (u8 as i32);
    //~^ invalid_upcast_comparisons

    1337 == (u8 as u32);
    //~^ invalid_upcast_comparisons

    // inverted of the above
    1337 != (u8 as i32);
    //~^ invalid_upcast_comparisons

    1337 != (u8 as u32);
    //~^ invalid_upcast_comparisons

    // Those are Ok:
    (u8 as u32) > 20;
    42 == (u8 as i32);
    42 != (u8 as i32);
    42 > (u8 as i32);
    (u8 as i32) == 42;
    (u8 as i32) != 42;
    (u8 as i32) > 42;
    (u8 as i32) < 42;

    (u8 as i8) == -1;
    (u8 as i8) != -1;
    (u8 as i32) > -1;
    //~^ invalid_upcast_comparisons

    (u8 as i32) < -1;
    //~^ invalid_upcast_comparisons

    (u32 as i32) < -5;
    (u32 as i32) < 10;

    (i8 as u8) == 1;
    (i8 as u8) != 1;
    (i8 as u8) < 1;
    (i8 as u8) > 1;
    (i32 as u32) < 5;
    (i32 as u32) < 10;

    -5 < (u32 as i32);
    0 <= (u32 as i32);
    0 < (u32 as i32);

    -5 > (u32 as i32);
    -5 >= (u8 as i32);
    //~^ invalid_upcast_comparisons

    -5 == (u32 as i32);
}