@@ -146,6 +146,10 @@ fn parameters(
146146
147147// --- loops ---
148148
149+ fn id ( v : i32 ) -> i32 {
150+ return v;
151+ }
152+
149153fn loops ( ) {
150154 let mut a: i64 = 10 ;
151155 let b: i64 = 20 ;
@@ -171,10 +175,54 @@ fn loops() {
171175 println ! ( "x is {}" , x) ;
172176 }
173177
178+ for x
179+ in 1 ..10 {
180+ println ! ( "x is {:?}" , x) ;
181+ }
182+
183+ for x
184+ in 1 ..10 {
185+ println ! ( "x + 1 is {}" , x + 1 ) ;
186+ }
187+
188+ for x
189+ in 1 ..10 {
190+ for y
191+ in 1 ..x {
192+ println ! ( "y is {}" , y) ;
193+ }
194+ }
195+
196+ for x // SPURIOUS: unused variable
197+ in 1 ..10 {
198+ println ! ( "x is {x}" ) ;
199+ }
200+
201+ for x // SPURIOUS: unused variable
202+ in 1 ..10 {
203+ _ = format ! ( "x is {x}" ) ;
204+ }
205+
206+ for x
207+ in 1 ..10 {
208+ println ! ( "x is {val}" , val = x) ;
209+ }
210+
174211 for x
175212 in 1 ..10 {
176213 assert ! ( x != 11 ) ;
177214 }
215+
216+ for x
217+ in 1 ..10 {
218+ assert_eq ! ( x, 1 ) ;
219+ }
220+
221+ for x
222+ in 1 ..10 {
223+ assert_eq ! ( id( x) , id( 1 ) ) ;
224+ }
225+
178226}
179227
180228// --- lets ---
@@ -302,6 +350,27 @@ fn if_lets_matches() {
302350 p => { // BAD: unused variable
303351 }
304352 }
353+
354+ let duration1 = std:: time:: Duration :: new ( 10 , 0 ) ; // ten seconds
355+ assert_eq ! ( duration1. as_secs( ) , 10 ) ;
356+
357+ let duration2: Result < std:: time:: Duration , String > =
358+ Ok ( std:: time:: Duration :: new ( 10 , 0 ) ) ;
359+ match duration2 {
360+ Ok ( n) => { println ! ( "duration was {} seconds" , n. as_secs( ) ) ; }
361+ Err ( _) => { println ! ( "failed" ) ; }
362+ }
363+
364+ let ( left,
365+ right) = // BAD: unused value [NOT DETECTED] SPURIOUS: unused variable
366+ ( 1 , 2 ) ;
367+ _ = left;
368+
369+ let pair = ( 1 , 2 ) ;
370+ let ( left2,
371+ right2) = // BAD: unused value [NOT DETECTED] SPURIOUS: unused variable
372+ pair;
373+ _ = left2;
305374}
306375
307376fn shadowing ( ) -> i32 {
@@ -322,7 +391,58 @@ fn shadowing() -> i32 {
322391 }
323392}
324393
394+ // --- function pointers ---
395+
396+ type FuncPtr = fn ( i32 ) -> i32 ;
397+
398+ fn increment ( x : i32 ) -> i32 {
399+ return x + 1 ;
400+ }
401+
402+ fn func_ptrs ( ) {
403+ let my_func: FuncPtr = increment;
404+
405+ for x
406+ in 1 ..10 {
407+ _ = x + 1 ;
408+ }
409+
410+ for x
411+ in 1 ..10 {
412+ _ = increment ( x) ;
413+ }
414+
415+ for x
416+ in 1 ..10 {
417+ _ = my_func ( x) ;
418+ }
419+ }
420+
421+ // --- folds and closures ---
422+
423+ fn folds_and_closures ( ) {
424+ let a1 = 1 ..10 ;
425+ _ = a1. sum :: < i32 > ( ) ;
426+
427+ let a2 = 1 ..10 ;
428+ _ = a2. fold ( 0 , | acc : i32 , val : i32 | -> i32 { acc + val } ) ;
429+
430+ let a3 = 1 ..10 ;
431+ _ = a3. fold ( 0 , | acc, val | acc + val) ;
432+
433+ let a4 = 1 ..10 ;
434+ _ = a4. fold ( 0 , | acc, val | acc) ; // BAD: unused variable
435+
436+ let a5 = 1 ..10 ;
437+ _ = a5. fold ( 0 , | acc, val | val) ; // BAD: unused variable
438+
439+ let i6 = 1 ;
440+ let a6 = 1 ..10 ;
441+ _ = a6. fold ( 0 , | acc, val | acc + val + i6) ;
442+ }
443+
325444// --- main ---
445+
326446fn main ( ) {
327447 locals_1 ( ) ;
328448 locals_2 ( ) ;
@@ -333,6 +453,8 @@ fn main() {
333453 loops ( ) ;
334454 if_lets_matches ( ) ;
335455 shadowing ( ) ;
456+ func_ptrs ( ) ;
457+ folds_and_closures ( ) ;
336458
337459 unreachable_if ( ) ;
338460 unreachable_panic ( ) ;
0 commit comments