#!/usr/bin/ruby

func hi (i) {

    func user (user) {
        return ("Username is '%s'".sprintf(user));      # child function return
        "Child function error! in #{__FILE__} at line #{__LINE__}\n" -> die;
    }

    user('sidef');

    if (i == 3) {

        if (i == 1+2) {
            return "IF(3) RETURN";
        }

        die "Error! (1)"
    }
    elsif (i == 3) {
        die "ERROR: re-true elsif!"
    }
    elsif (i == 1) {
        return "ELSIF(1) RETURN";
        die "Error! (2)"
    }

    i == 3 && (
        return "&& RETURN";
        die "Error! (3)"
    );

    if (i == 2) {
        return "IF(2) RETURN";
        die "Error! (4)"
    }

    return "FUNC RETURN";
    "ERROR RETURN";
}

hi(1) == "ELSIF(1) RETURN" || die "Error hi(1)!"
hi(2) == "IF(2) RETURN"    || die "Error hi(2)!"
hi(3) == "IF(3) RETURN"    || die "Error hi(3)!"
hi(4) == "FUNC RETURN"     || die "Error hi(4)!"

#
## Return from 'for' loop
#

func for_loop {

    for (["a", "z", "f"]) { |c|

        if (c == "z") {
            return "LOOP RETURN";
        }

        if (c == "f") {
            die "LOOP ERROR!";
        }
    }

    die "Error hello(name)!";
}

for_loop() == "LOOP RETURN" || die "Error hello(Sidef)!";

say "** Test passed!";