import stdio
import t, c


# ============================================================
# 闭包 + nonlocal/global 测试
# ============================================================

# 全局变量
g_count: int = 0


# global 关键字测试：修改全局变量
def test_global() -> int:
    global g_count
    g_count = g_count + 1
    return g_count


# nonlocal 关键字测试：嵌套函数修改外层局部变量
def make_counter() -> t.CPtr:
    count: int = 0

    # 内部函数（闭包）捕获 count
    def counter() -> int:
        nonlocal count
        count = count + 1
        return count

    return counter


def closure_test() -> int:
    # global 测试
    stdio.printf("global: %d\n", test_global())
    stdio.printf("global: %d\n", test_global())
    stdio.printf("global: %d\n", test_global())

    # nonlocal/闭包测试
    f: t.CPtr = make_counter()
    stdio.printf("closure: %d\n", f())
    stdio.printf("closure: %d\n", f())
    stdio.printf("closure: %d\n", f())

    return 0
