about summary refs log tree commit diff
path: root/src/test/run-make-fulldeps/coverage/closure.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/test/run-make-fulldeps/coverage/closure.rs')
-rw-r--r--src/test/run-make-fulldeps/coverage/closure.rs62
1 files changed, 62 insertions, 0 deletions
diff --git a/src/test/run-make-fulldeps/coverage/closure.rs b/src/test/run-make-fulldeps/coverage/closure.rs
index 66bbbc55399..914cb0fe051 100644
--- a/src/test/run-make-fulldeps/coverage/closure.rs
+++ b/src/test/run-make-fulldeps/coverage/closure.rs
@@ -90,4 +90,66 @@ fn main() {
             a
         )
     );
+
+    let
+        quote_closure
+    =
+        |val|
+    {
+        let mut countdown = 0;
+        if is_false {
+            countdown = 10;
+        }
+        format!("'{}'", val)
+    };
+    println!(
+        "Repeated, quoted string: {:?}"
+        ,
+        std::iter::repeat("repeat me")
+            .take(5)
+            .map
+        (
+            quote_closure
+        )
+            .collect::<Vec<_>>()
+    );
+
+    let
+        _unused_closure
+    =
+        |
+            mut countdown
+        |
+    {
+        if is_false {
+            countdown = 10;
+        }
+        "closure should be unused".to_owned()
+    };
+
+    let mut countdown = 10;
+    let _short_unused_closure = | _unused_arg: u8 | countdown += 1;
+
+    // Macros can sometimes confuse the coverage results. Compare this next assignment, with an
+    // unused closure that invokes the `println!()` macro, with the closure assignment above, that
+    // does not use a macro. The closure above correctly shows `0` executions.
+    let _short_unused_closure = | _unused_arg: u8 | println!("not called");
+    // The closure assignment above is executed, with a line count of `1`, but the `println!()`
+    // could not have been called, and yet, there is no indication that it wasn't...
+
+    // ...but adding block braces gives the expected result, showing the block was not executed.
+    let _short_unused_closure_block = | _unused_arg: u8 | { println!("not called") };
+
+    let _shortish_unused_closure = | _unused_arg: u8 | {
+        println!("not called")
+    };
+
+    let _as_short_unused_closure = |
+        _unused_arg: u8
+    | { println!("not called") };
+
+    let _almost_as_short_unused_closure = |
+        _unused_arg: u8
+    | { println!("not called") }
+    ;
 }