// run-pass
// Tests for if as expressions

fn test_if() { let rs: bool = if true { true } else { false }; assert!((rs)); }

fn test_else() {
    let rs: bool = if false { false } else { true };
    assert!((rs));
}

fn test_elseif1() {
    let rs: bool = if true { true } else if true { false } else { false };
    assert!((rs));
}

fn test_elseif2() {
    let rs: bool = if false { false } else if true { true } else { false };
    assert!((rs));
}

fn test_elseif3() {
    let rs: bool = if false { false } else if false { false } else { true };
    assert!((rs));
}

fn test_inferrence() {
    let rs = if true { true } else { false };
    assert!((rs));
}

fn test_if_as_if_condition() {
    let rs1 = if if false { false } else { true } { true } else { false };
    assert!((rs1));
    let rs2 = if if true { false } else { true } { false } else { true };
    assert!((rs2));
}

fn test_if_as_block_result() {
    let rs = if true { if false { false } else { true } } else { false };
    assert!((rs));
}

pub fn main() {
    test_if();
    test_else();
    test_elseif1();
    test_elseif2();
    test_elseif3();
    test_inferrence();
    test_if_as_if_condition();
    test_if_as_block_result();
}
