let a = 2;
let b = 3;
let f1 = [a](n: Int) -> Int {
return a * n;
};
let f2 = [b](n: Int) -> Int {
return b * n;
};
let f3 = [a, b](n: Int) -> Int {
return a + b * n;
};
let f4 = [a, b](n1: Int, n2: Int) -> Int {
return a * n1 + b * n2;
};
let f5 = [b, a](n1: Int, n2: Int) -> Int {
return a * n1 + b * n2;
};
if f1(5) != 10 || f2(5) != 15 || f3(5) != 17 || f4(5, 7) != 31 || f5(5, 7) != 31 {
panic("This should not happen");
}
let i = -1;
let count = [i]() {
i.inc();
return *i;
};
let c0 = count();
let c1 = count();
let c2 = count();
let c3 = count();
if c0 != 0 || c1 != 1 || c2 != 2 || c3 != 3 {
panic("This should not happen");
}