//! > Test boolean if.

//! > test_function_name
test_function_lowering

//! > function
fn foo(a: bool, x: felt) -> felt {
    if a {
        1
    } else {
        x
    }
}

//! > function_name
foo

//! > module_code

//! > semantic_diagnostics

//! > lowering_diagnostics

//! > lowering_format
blk0:
Inputs: v2: ()
Statements:
  (v3: core::felt) <- 1u
Drops: v2, v1
End:
  Callsite(v3)

blk1:
Inputs: v4: ()
Statements:
Drops: v4
End:
  Callsite(v1)

blk2 (root):
Inputs: v0: core::bool, v1: core::felt
Statements:
  (v5: core::felt) <- match_enum(v0) {
    bool::False => blk1,
    bool::True => blk0,
  }
Drops: v0, v1
End:
  Callsite(v5)

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

//! > Test if analyzer.

//! > test_function_name
test_function_lowering

//! > function
fn foo(x: felt) -> felt {
    if x == 0 {
        1
    } else {
        x
    }
}

//! > function_name
foo

//! > module_code

//! > semantic_diagnostics

//! > lowering_diagnostics

//! > lowering_format
blk0:
Inputs:
Statements:
  (v1: core::felt) <- 1u
Drops: v0
End:
  Callsite(v1)

blk1:
Inputs: v2: core::NonZero::<core::felt>
Statements:
Drops: v2
End:
  Callsite(v0)

blk2 (root):
Inputs: v0: core::felt
Statements:
  (v3: core::felt) <- match core::felt_jump_nz(v0) {
    () => blk0,
    (v2) => blk1,
  }
Drops: v0
End:
  Callsite(v3)

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

//! > Test if without else.

//! > test_function_name
test_function_lowering

//! > function
fn foo(x: felt) -> felt {
    if 0 == x {
        return 10;
    }
    20
}

//! > function_name
foo

//! > module_code

//! > semantic_diagnostics

//! > lowering_diagnostics

//! > lowering_format
blk0:
Inputs:
Statements:
  (v1: core::felt) <- 10u
Drops: v0
End:
  Return(v1)

blk1:
Inputs: v2: core::NonZero::<core::felt>
Statements:
Drops: v2
End:
  Callsite()

blk2 (root):
Inputs: v0: core::felt
Statements:
  () <- match core::felt_jump_nz(v0) {
    () => blk0,
    (v2) => blk1,
  }
  (v3: core::felt) <- 20u
Drops: v0
End:
  Callsite(v3)

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

//! > Test if x == y

//! > test_function_name
test_function_lowering

//! > function
fn foo(x: felt, y: felt, z: felt, w: felt) -> felt {
    if x + y == z - w {
        0
    } else {
        1
    }
}

//! > function_name
foo

//! > module_code

//! > semantic_diagnostics

//! > lowering_diagnostics

//! > lowering_format
blk0:
Inputs:
Statements:
  (v7: core::felt) <- 0u
Drops:
End:
  Callsite(v7)

blk1:
Inputs: v8: core::NonZero::<core::felt>
Statements:
  (v9: core::felt) <- 1u
Drops: v8
End:
  Callsite(v9)

blk2 (root):
Inputs: v0: core::felt, v1: core::felt, v2: core::felt, v3: core::felt
Statements:
  (v4: core::felt) <- core::felt_add(v0, v1)
  (v5: core::felt) <- core::felt_sub(v2, v3)
  (v6: core::felt) <- core::felt_sub(v4, v5)
  (v10: core::felt) <- match core::felt_jump_nz(v6) {
    () => blk0,
    (v8) => blk1,
  }
Drops: v0, v1, v2, v3, v4, v5, v6
End:
  Callsite(v10)
