//! > Test simple usage.

//! > test_runner_name
test_function_usage

//! > function
fn foo(a: usize, b: usize) {
    a;
    {
        b;
    }
}

//! > function_name
foo

//! > module_code

//! > semantic_diagnostics

//! > usage
Block 2:4:
  Usage: ParamId(test::b), 
  Changes: 
  Introductions: 
Block 0:27:
  Usage: ParamId(test::a), ParamId(test::b), 
  Changes: 
  Introductions:

//! > ==========================================================================

//! > Test loop usage

//! > test_runner_name
test_function_usage

//! > function
fn foo(mut a: A, ref b: A) {
    let c = 5_usize;
    loop {
        let mut h = 0;
        a.b.c = c;
        if true {
            h = 1;
            let mut x = 4;
            x = 5;
            b = A { b: a.b };
            break b;
        };
    };
}

//! > function_name
foo

//! > module_code
struct A {
    b: B
}
struct B {
    c: usize,
}

//! > semantic_diagnostics

//! > usage
Block 11:16:
  Usage: LocalVarId(test::h), ParamId(test::b), ParamId(test::a)::b, 
  Changes: LocalVarId(test::h), ParamId(test::b), 
  Introductions: LocalVarId(test::x), 
Block 8:9:
  Usage: LocalVarId(test::c), ParamId(test::a)::b, ParamId(test::b), 
  Changes: ParamId(test::a)::b::c, ParamId(test::b), 
  Introductions: LocalVarId(test::h), 
Loop 8:4:
  Usage: LocalVarId(test::c), ParamId(test::a)::b, ParamId(test::b), 
  Changes: ParamId(test::a)::b::c, ParamId(test::b), 
  Introductions: LocalVarId(test::h), 
Block 6:27:
  Usage: ParamId(test::b), ParamId(test::a)::b, 
  Changes: ParamId(test::a)::b::c, ParamId(test::b), 
  Introductions: LocalVarId(test::c),

//! > ==========================================================================

//! > Test while loop usage

//! > test_runner_name
test_function_usage

//! > function
fn foo(mut a: A, ref b: A) {
    let c = 5_usize;
    let only_used_in_condition = 5;
    while only_used_in_condition != c {
        a.b.c = c;
    };
}

//! > function_name
foo

//! > module_code
struct A {
    b: B
}
struct B {
    c: usize,
}

//! > semantic_diagnostics

//! > usage
Block 9:38:
  Usage: LocalVarId(test::c), ParamId(test::a)::b::c, 
  Changes: ParamId(test::a)::b::c, 
  Introductions: 
While 9:4:
  Usage: LocalVarId(test::only_used_in_condition), LocalVarId(test::c), ParamId(test::a)::b::c, 
  Changes: ParamId(test::a)::b::c, 
  Introductions: 
Block 6:27:
  Usage: ParamId(test::a)::b::c, 
  Changes: ParamId(test::a)::b::c, 
  Introductions: LocalVarId(test::c), LocalVarId(test::only_used_in_condition),
