tests/smoke/uglies/scopes.primi

Summary

Maintainability
Test Coverage
import std.time: sleep
import ._helpers: assert_not

global_a = 1

function fun_a(local_a, call) {

    global_a = global_a + 1
    local_a = local_a + 1
    print('fun_a: global = {}, local_a = {}'.format(global_a, local_a))

    fn_b = function(local_b) {

        global_a = global_a + 1
        local_a = local_a + 1
        local_b = local_b + 1
        print('fun_inner: global = {}, local_a = {}, local_b = {}'.format(global_a, local_a, local_b))
        sleep(0.2)

        // Uncomment to see how errors
        // in nested function calls are displayed.
        //1/0

        // Uncomment to start debugger REPL at this place.
        //debugger()

    }

    if (call) {

        sleep(0.5)
        fn_b(local_a)
        1 / 100

    }

    return fn_b

}

print("start")
assert(global_a == 1)

inner_fn_b = fun_a(global_a, false)
_ = "Added global_a + 1 inside function fun_a, but global_a remained unchanged in global scope"
assert(global_a == 1, _)

inner_fn_b(global_a)
_ = "Added global_a + 1 inside function fn_b/inner_fn_b, but global_a remained unchanged in global scope"
assert(global_a == 1, _)

fun_a(0, true)
_ = "global_a remained unchanged in global scope"
assert(global_a == 1, _)