    1|       |#![allow(unused_assignments, unused_variables)]
    2|       |// compile-flags: -C opt-level=2 # fix described in rustc_middle/mir/mono.rs
    3|      1|fn main() {
    4|      1|    // Initialize test constants in a way that cannot be determined at compile time, to ensure
    5|      1|    // rustc and LLVM cannot optimize out statements (or coverage counters) downstream from
    6|      1|    // dependent conditions.
    7|      1|    let is_true = std::env::args().len() == 1;
    8|      1|    let is_false = ! is_true;
    9|      1|
   10|      1|    let mut some_string = Some(String::from("the string content"));
   11|      1|    println!(
   12|      1|        "The string or alt: {}"
   13|      1|        ,
   14|      1|        some_string
   15|      1|            .
   16|      1|            unwrap_or_else
   17|      1|        (
   18|      1|            ||
   19|      0|            {
   20|      0|                let mut countdown = 0;
   21|      0|                if is_false {
   22|      0|                    countdown = 10;
   23|      0|                }
   24|      0|                "alt string 1".to_owned()
   25|      1|            }
   26|      1|        )
   27|      1|    );
   28|      1|
   29|      1|    some_string = Some(String::from("the string content"));
   30|      1|    let
   31|      1|        a
   32|       |    =
   33|       |        ||
   34|      0|    {
   35|      0|        let mut countdown = 0;
   36|      0|        if is_false {
   37|      0|            countdown = 10;
   38|      0|        }
   39|      0|        "alt string 2".to_owned()
   40|      0|    };
   41|      1|    println!(
   42|      1|        "The string or alt: {}"
   43|      1|        ,
   44|      1|        some_string
   45|      1|            .
   46|      1|            unwrap_or_else
   47|      1|        (
   48|      1|            a
   49|      1|        )
   50|      1|    );
   51|      1|
   52|      1|    some_string = None;
   53|      1|    println!(
   54|      1|        "The string or alt: {}"
   55|      1|        ,
   56|      1|        some_string
   57|      1|            .
   58|      1|            unwrap_or_else
   59|      1|        (
   60|      1|            ||
   61|      1|            {
   62|      1|                let mut countdown = 0;
   63|      1|                if is_false {
   64|      0|                    countdown = 10;
   65|      1|                }
   66|      1|                "alt string 3".to_owned()
   67|      1|            }
   68|      1|        )
   69|      1|    );
   70|      1|
   71|      1|    some_string = None;
   72|      1|    let
   73|      1|        a
   74|      1|    =
   75|      1|        ||
   76|      1|    {
   77|      1|        let mut countdown = 0;
   78|      1|        if is_false {
   79|      0|            countdown = 10;
   80|      1|        }
   81|      1|        "alt string 4".to_owned()
   82|      1|    };
   83|      1|    println!(
   84|      1|        "The string or alt: {}"
   85|      1|        ,
   86|      1|        some_string
   87|      1|            .
   88|      1|            unwrap_or_else
   89|      1|        (
   90|      1|            a
   91|      1|        )
   92|      1|    );
   93|      1|
   94|      1|    let
   95|      1|        quote_closure
   96|      1|    =
   97|      1|        |val|
   98|      5|    {
   99|      5|        let mut countdown = 0;
  100|      5|        if is_false {
  101|      0|            countdown = 10;
  102|      5|        }
  103|      5|        format!("'{}'", val)
  104|      5|    };
  105|      1|    println!(
  106|      1|        "Repeated, quoted string: {:?}"
  107|      1|        ,
  108|      1|        std::iter::repeat("repeat me")
  109|      1|            .take(5)
  110|      1|            .map
  111|      1|        (
  112|      1|            quote_closure
  113|      1|        )
  114|      1|            .collect::<Vec<_>>()
  115|      1|    );
  116|      1|
  117|      1|    let
  118|      1|        _unused_closure
  119|       |    =
  120|       |        |
  121|       |            mut countdown
  122|       |        |
  123|      0|    {
  124|      0|        if is_false {
  125|      0|            countdown = 10;
  126|      0|        }
  127|      0|        "closure should be unused".to_owned()
  128|      0|    };
  129|       |
  130|      1|    let mut countdown = 10;
  131|      1|    let _short_unused_closure = | _unused_arg: u8 | countdown += 1;
                                                                  ^0
  132|       |
  133|       |
  134|      1|    let short_used_covered_closure_macro = | used_arg: u8 | println!("called");
  135|      1|    let short_used_not_covered_closure_macro = | used_arg: u8 | println!("not called");
                                                                              ^0
  136|      1|    let _short_unused_closure_macro = | _unused_arg: u8 | println!("not called");
                                                                        ^0
  137|       |
  138|       |
  139|       |
  140|       |
  141|      1|    let _short_unused_closure_block = | _unused_arg: u8 | { println!("not called") };
                                                                        ^0
  142|       |
  143|      1|    let _shortish_unused_closure = | _unused_arg: u8 | {
  144|      0|        println!("not called")
  145|      0|    };
  146|       |
  147|      1|    let _as_short_unused_closure = |
  148|       |        _unused_arg: u8
  149|      0|    | { println!("not called") };
  150|       |
  151|      1|    let _almost_as_short_unused_closure = |
  152|       |        _unused_arg: u8
  153|      0|    | { println!("not called") }
  154|       |    ;
  155|       |
  156|       |
  157|       |
  158|       |
  159|       |
  160|      1|    let _short_unused_closure_line_break_no_block = | _unused_arg: u8 |
  161|      0|println!("not called")
  162|       |    ;
  163|       |
  164|      1|    let _short_unused_closure_line_break_no_block2 =
  165|       |        | _unused_arg: u8 |
  166|      0|            println!(
  167|      0|                "not called"
  168|      0|            )
  169|       |    ;
  170|       |
  171|      1|    let short_used_not_covered_closure_line_break_no_block_embedded_branch =
  172|       |        | _unused_arg: u8 |
  173|      0|            println!(
  174|      0|                "not called: {}",
  175|      0|                if is_true { "check" } else { "me" }
  176|      0|            )
  177|       |    ;
  178|       |
  179|      1|    let short_used_not_covered_closure_line_break_block_embedded_branch =
  180|      1|        | _unused_arg: u8 |
  181|      0|        {
  182|      0|            println!(
  183|      0|                "not called: {}",
  184|      0|                if is_true { "check" } else { "me" }
  185|       |            )
  186|      0|        }
  187|       |    ;
  188|       |
  189|      1|    let short_used_covered_closure_line_break_no_block_embedded_branch =
  190|      1|        | _unused_arg: u8 |
  191|      1|            println!(
  192|      1|                "not called: {}",
  193|      1|                if is_true { "check" } else { "me" }
                                                            ^0
  194|      1|            )
  195|       |    ;
  196|       |
  197|      1|    let short_used_covered_closure_line_break_block_embedded_branch =
  198|      1|        | _unused_arg: u8 |
  199|      1|        {
  200|      1|            println!(
  201|      1|                "not called: {}",
  202|      1|                if is_true { "check" } else { "me" }
                                                            ^0
  203|       |            )
  204|      1|        }
  205|       |    ;
  206|       |
  207|      1|    if is_false {
  208|      0|        short_used_not_covered_closure_macro(0);
  209|      0|        short_used_not_covered_closure_line_break_no_block_embedded_branch(0);
  210|      0|        short_used_not_covered_closure_line_break_block_embedded_branch(0);
  211|      1|    }
  212|      1|    short_used_covered_closure_macro(0);
  213|      1|    short_used_covered_closure_line_break_no_block_embedded_branch(0);
  214|      1|    short_used_covered_closure_line_break_block_embedded_branch(0);
  215|      1|}

