]> git.lizzy.rs Git - rust.git/blob - tests/ui/manual_rem_euclid.fixed
Auto merge of #9622 - llogiq:box-dyn-default, r=Alexendoo
[rust.git] / tests / ui / manual_rem_euclid.fixed
1 // run-rustfix
2 // aux-build:macro_rules.rs
3
4 #![feature(custom_inner_attributes)]
5 #![warn(clippy::manual_rem_euclid)]
6
7 #[macro_use]
8 extern crate macro_rules;
9
10 macro_rules! internal_rem_euclid {
11     () => {
12         let value: i32 = 5;
13         let _: i32 = value.rem_euclid(4);
14     };
15 }
16
17 fn main() {
18     let value: i32 = 5;
19
20     let _: i32 = value.rem_euclid(4);
21     let _: i32 = value.rem_euclid(4);
22     let _: i32 = value.rem_euclid(4);
23     let _: i32 = value.rem_euclid(4);
24     let _: i32 = 1 + value.rem_euclid(4);
25
26     let _: i32 = (3 + value % 4) % 4;
27     let _: i32 = (-4 + value % -4) % -4;
28     let _: i32 = ((5 % 4) + 4) % 4;
29
30     // Make sure the lint does not trigger if it would cause an error, like with an ambiguous
31     // integer type
32     let not_annotated = 24;
33     let _ = ((not_annotated % 4) + 4) % 4;
34     let inferred: _ = 24;
35     let _ = ((inferred % 4) + 4) % 4;
36
37     // For lint to apply the constant must always be on the RHS of the previous value for %
38     let _: i32 = 4 % ((value % 4) + 4);
39     let _: i32 = ((4 % value) + 4) % 4;
40
41     // Lint in internal macros
42     internal_rem_euclid!();
43
44     // Do not lint in external macros
45     manual_rem_euclid!();
46 }
47
48 // Should lint for params too
49 pub fn rem_euclid_4(num: i32) -> i32 {
50     num.rem_euclid(4)
51 }
52
53 // Constant version came later, should still lint
54 pub const fn const_rem_euclid_4(num: i32) -> i32 {
55     num.rem_euclid(4)
56 }
57
58 pub fn msrv_1_37() {
59     #![clippy::msrv = "1.37"]
60
61     let x: i32 = 10;
62     let _: i32 = ((x % 4) + 4) % 4;
63 }
64
65 pub fn msrv_1_38() {
66     #![clippy::msrv = "1.38"]
67
68     let x: i32 = 10;
69     let _: i32 = x.rem_euclid(4);
70 }
71
72 // For const fns:
73 pub const fn msrv_1_51() {
74     #![clippy::msrv = "1.51"]
75
76     let x: i32 = 10;
77     let _: i32 = ((x % 4) + 4) % 4;
78 }
79
80 pub const fn msrv_1_52() {
81     #![clippy::msrv = "1.52"]
82
83     let x: i32 = 10;
84     let _: i32 = x.rem_euclid(4);
85 }