// run-pass
#![allow(unused_braces)]

fn test_int() {
    fn f() -> isize { 10 }
    assert_eq!(f(), 10);
}

fn test_vec() {
    fn f() -> Vec<isize> { vec![10, 11] }
    let vect = f();
    assert_eq!(vect[1], 11);
}

fn test_generic() {
    fn f<T>(t: T) -> T { t }
    assert_eq!(f(10), 10);
}

fn test_alt() {
    fn f() -> isize { match true { false => { 10 } true => { 20 } } }
    assert_eq!(f(), 20);
}

fn test_if() {
    fn f() -> isize { if true { 10 } else { 20 } }
    assert_eq!(f(), 10);
}

fn test_block() {
    fn f() -> isize { { 10 } }
    assert_eq!(f(), 10);
}

fn test_ret() {
    fn f() -> isize {
        return 10 // no semi

    }
    assert_eq!(f(), 10);
}


// From issue #372
fn test_372() {
    fn f() -> isize { let x = { 3 }; x }
    assert_eq!(f(), 3);
}

fn test_nil() { () }

pub fn main() {
    test_int();
    test_vec();
    test_generic();
    test_alt();
    test_if();
    test_block();
    test_ret();
    test_372();
    test_nil();
}
