]> git.lizzy.rs Git - rust.git/blob - src/tools/clippy/tests/ui/never_loop.rs
Auto merge of #74772 - JohnTitor:add-tests, r=lcnr
[rust.git] / src / tools / clippy / tests / ui / never_loop.rs
1 #![allow(
2     clippy::single_match,
3     unused_assignments,
4     unused_variables,
5     clippy::while_immutable_condition
6 )]
7
8 fn test1() {
9     let mut x = 0;
10     loop {
11         // clippy::never_loop
12         x += 1;
13         if x == 1 {
14             return;
15         }
16         break;
17     }
18 }
19
20 fn test2() {
21     let mut x = 0;
22     loop {
23         x += 1;
24         if x == 1 {
25             break;
26         }
27     }
28 }
29
30 fn test3() {
31     let mut x = 0;
32     loop {
33         // never loops
34         x += 1;
35         break;
36     }
37 }
38
39 fn test4() {
40     let mut x = 1;
41     loop {
42         x += 1;
43         match x {
44             5 => return,
45             _ => (),
46         }
47     }
48 }
49
50 fn test5() {
51     let i = 0;
52     loop {
53         // never loops
54         while i == 0 {
55             // never loops
56             break;
57         }
58         return;
59     }
60 }
61
62 fn test6() {
63     let mut x = 0;
64     'outer: loop {
65         x += 1;
66         loop {
67             // never loops
68             if x == 5 {
69                 break;
70             }
71             continue 'outer;
72         }
73         return;
74     }
75 }
76
77 fn test7() {
78     let mut x = 0;
79     loop {
80         x += 1;
81         match x {
82             1 => continue,
83             _ => (),
84         }
85         return;
86     }
87 }
88
89 fn test8() {
90     let mut x = 0;
91     loop {
92         x += 1;
93         match x {
94             5 => return,
95             _ => continue,
96         }
97     }
98 }
99
100 fn test9() {
101     let x = Some(1);
102     while let Some(y) = x {
103         // never loops
104         return;
105     }
106 }
107
108 fn test10() {
109     for x in 0..10 {
110         // never loops
111         match x {
112             1 => break,
113             _ => return,
114         }
115     }
116 }
117
118 fn test11<F: FnMut() -> i32>(mut f: F) {
119     loop {
120         return match f() {
121             1 => continue,
122             _ => (),
123         };
124     }
125 }
126
127 pub fn test12(a: bool, b: bool) {
128     'label: loop {
129         loop {
130             if a {
131                 continue 'label;
132             }
133             if b {
134                 break;
135             }
136         }
137         break;
138     }
139 }
140
141 pub fn test13() {
142     let mut a = true;
143     loop {
144         // infinite loop
145         while a {
146             if true {
147                 a = false;
148                 continue;
149             }
150             return;
151         }
152     }
153 }
154
155 pub fn test14() {
156     let mut a = true;
157     'outer: while a {
158         // never loops
159         while a {
160             if a {
161                 a = false;
162                 continue;
163             }
164         }
165         break 'outer;
166     }
167 }
168
169 // Issue #1991: the outter loop should not warn.
170 pub fn test15() {
171     'label: loop {
172         while false {
173             break 'label;
174         }
175     }
176 }
177
178 // Issue #4058: `continue` in `break` expression
179 pub fn test16() {
180     let mut n = 1;
181     loop {
182         break if n != 5 {
183             n += 1;
184             continue;
185         };
186     }
187 }
188
189 fn main() {
190     test1();
191     test2();
192     test3();
193     test4();
194     test5();
195     test6();
196     test7();
197     test8();
198     test9();
199     test10();
200     test11(|| 0);
201     test12(true, false);
202     test13();
203     test14();
204 }