#!/usr/bin/env alsh

@define PI 3.14159

// test various features

function test_variables_and_scopes() {
    let x = 10
    echo "x: $x"

    let block = {
        echo "inside block, x: $x"
        let y = 20
        echo "y: $y"
    }

    // y is not accessible here, should error if uncommented
    // echo "y outside block: $y"
}

function test_looops() {
    let count = 0
    loop {
        echo "Loop iteration: $count"
        let count = ($count + 1)
        if ($count >= 5) {
            break
        }
    }

    loop count 3 {
        echo "Counted loop iteration"
    }

    let ticks = 0
    loop interval 1 {
        $ticks = ($ticks + 1) // need a variable to die
        echo "Interval loop tick: $ticks"
        if ($ticks >= 5) {
            break
        }
    }
}

function test_lops() {

    let i = 0
    for (, $i < 5, $i = ($i + 1)) { // init left empty as i declared it one line above
        echo "C-style For loop iteration: $i"
    } // C style for

    while ($i < 10) {
        echo "While loop iteration: $i"
        let i = ($i + 1)
    } // while loop

    foreach item in [1, 2, 3] {
        echo "Foreach loop item: $item"
    } // iterator style for
}

function assignment_test() {
    let a = 5
    echo "a: $a"

    $a = 10
    echo "a after reassignment: $a"

    let b = $a
    echo "b (assigned from a): $b"
}

@main
function test_stuff() {
    //test_variables_and_scopes()
    //test_looops()
    test_lops()
    //assignment_test()
}