functions with bindings
This commit is contained in:
@@ -379,6 +379,16 @@ func TestFirstClassFunctions(t *testing.T) {
|
||||
let returnsOne = fn() { 1; };
|
||||
let returnsOneReturner = fn() { returnsOne; };
|
||||
returnsOneReturner()();
|
||||
`,
|
||||
expected: 1,
|
||||
},
|
||||
{
|
||||
input: `
|
||||
let returnsOneReturner = fn() {
|
||||
let returnsOne = fn() { 1; };
|
||||
returnsOne;
|
||||
};
|
||||
returnsOneReturner()();
|
||||
`,
|
||||
expected: 1,
|
||||
},
|
||||
@@ -386,3 +396,55 @@ func TestFirstClassFunctions(t *testing.T) {
|
||||
|
||||
runVmTests(t, tests)
|
||||
}
|
||||
|
||||
func TestCallingFunctionsWithBindings(t *testing.T) {
|
||||
tests := []vmTestCase{
|
||||
{
|
||||
input: `
|
||||
let one = fn() { let one = 1; one };
|
||||
one();
|
||||
`,
|
||||
expected: 1,
|
||||
},
|
||||
{
|
||||
input: `
|
||||
let oneAndTwo = fn() { let one = 1; let two = 2; one + two; };
|
||||
oneAndTwo();
|
||||
`,
|
||||
expected: 3,
|
||||
},
|
||||
{
|
||||
input: `
|
||||
let oneAndTwo = fn() { let one = 1; let two = 2; one + two; };
|
||||
let threeAndFour = fn() { let three = 3; let four = 4; three + four; };
|
||||
oneAndTwo() + threeAndFour();
|
||||
`,
|
||||
expected: 10,
|
||||
},
|
||||
{
|
||||
input: `
|
||||
let firstFoobar = fn() { let foobar = 50; foobar; };
|
||||
let secondFoobar = fn() { let foobar = 100; foobar; };
|
||||
firstFoobar() + secondFoobar();
|
||||
`,
|
||||
expected: 150,
|
||||
},
|
||||
{
|
||||
input: `
|
||||
let globalSeed = 50;
|
||||
let minusOne = fn() {
|
||||
let num = 1;
|
||||
globalSeed - num;
|
||||
}
|
||||
let minusTwo = fn() {
|
||||
let num = 2;
|
||||
globalSeed - num;
|
||||
}
|
||||
minusOne() + minusTwo();
|
||||
`,
|
||||
expected: 97,
|
||||
},
|
||||
}
|
||||
|
||||
runVmTests(t, tests)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user