diff options
| author | Marc Vertes <mvertes@free.fr> | 2023-11-07 21:49:01 +0100 |
|---|---|---|
| committer | Marc Vertes <mvertes@free.fr> | 2023-11-07 21:49:01 +0100 |
| commit | bb783f8f31797597ca0349434e236e6df923e14b (patch) | |
| tree | a0a04a3cae098366d692e892c89a7e9fe614452b /parser/interpreter_test.go | |
| parent | 819826627f90aecdd1d91e24563fe2162061ccf2 (diff) | |
parser: implement switch statement
A VM instruction `EqualSet` has been added to preserve the left
operand on the stack in case of failure, to allow efficient
multiple tests on the same value.
Both the pattern 'if/else if' and the classical case clauses have
been implemented.
Diffstat (limited to 'parser/interpreter_test.go')
| -rw-r--r-- | parser/interpreter_test.go | 35 |
1 files changed, 23 insertions, 12 deletions
diff --git a/parser/interpreter_test.go b/parser/interpreter_test.go index 02cd105..d73d282 100644 --- a/parser/interpreter_test.go +++ b/parser/interpreter_test.go @@ -125,22 +125,33 @@ f(3)`, res: "4"}, }) } -/* func TestSwitch(t *testing.T) { - run(t, []etest{{ - src: ` -func f(a int) int { + src0 := `func f(a int) int { switch a { - default: - a = 0 - case 1,2: - a = a+1 - case 3: - a = a+2 + default: a = 0 + case 1,2: a = a+1 + case 3: a = a+2 + } + return a +} +` + src1 := `func f(a int) int { + switch { + case a < 3: return 2 + case a < 5: return 5 + default: a = 0 } return a } -f(3)`, res: "5"}, +` + run(t, []etest{ + {src: src0 + "f(1)", res: "2"}, + {src: src0 + "f(2)", res: "3"}, + {src: src0 + "f(3)", res: "5"}, + {src: src0 + "f(4)", res: "0"}, + + {src: src1 + "f(1)", res: "2"}, + {src: src1 + "f(4)", res: "5"}, + {src: src1 + "f(6)", res: "0"}, }) } -*/ |
