summaryrefslogtreecommitdiff
path: root/vm/vm_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'vm/vm_test.go')
-rw-r--r--vm/vm_test.go102
1 files changed, 53 insertions, 49 deletions
diff --git a/vm/vm_test.go b/vm/vm_test.go
index a968281..950e61e 100644
--- a/vm/vm_test.go
+++ b/vm/vm_test.go
@@ -69,7 +69,7 @@ var tests = []struct {
{Op: Sub},
{Op: Exit},
},
- start: 0, end: 1, mem: "[1]",
+ start: 0, end: 1, mem: "[-1]",
}, { // #02 -- A simple multiplication.
code: []Instruction{
{Op: Push, Arg: []int{3}},
@@ -80,16 +80,16 @@ var tests = []struct {
start: 0, end: 1, mem: "[6]",
}, { // #03 -- lower.
code: []Instruction{
- {Op: Push, Arg: []int{3}},
{Op: Push, Arg: []int{2}},
+ {Op: Push, Arg: []int{3}},
{Op: Lower},
{Op: Exit},
},
start: 0, end: 1, mem: "[true]",
}, { // #04 -- greater.
code: []Instruction{
- {Op: Push, Arg: []int{2}},
{Op: Push, Arg: []int{3}},
+ {Op: Push, Arg: []int{2}},
{Op: Greater},
{Op: Exit},
},
@@ -153,16 +153,18 @@ var tests = []struct {
{Op: Exit},
},
start: 1, end: 3, mem: "[6 <nil>]",
-}, { // #12 -- Defining and calling a function in VM.
- code: []Instruction{
- {Op: Jump, Arg: []int{3}}, // 0
- {Op: Push, Arg: []int{3}}, // 1
- {Op: Return, Arg: []int{1, 1}}, // 2
- {Op: Push, Arg: []int{1}}, // 3
- {Op: Calli, Arg: []int{1}}, // 4
- {Op: Exit}, // 5
- },
- start: 0, end: 1, mem: "[3]",
+ /*
+ }, { // #12 -- Defining and calling a function in VM.
+ code: []Instruction{
+ {Op: Jump, Arg: []int{3}}, // 0
+ {Op: Push, Arg: []int{3}}, // 1
+ {Op: Return, Arg: []int{1, 1}}, // 2
+ {Op: Push, Arg: []int{1}}, // 3
+ {Op: Calli, Arg: []int{1}}, // 4
+ {Op: Exit}, // 5
+ },
+ start: 0, end: 1, mem: "[3]",
+ */
}, { // #13 -- Defining and calling a function in VM.
code: []Instruction{
{Op: Jump, Arg: []int{3}}, // 0
@@ -170,7 +172,7 @@ var tests = []struct {
{Op: Return, Arg: []int{1, 1}}, // 2
{Op: Push, Arg: []int{1}}, // 3
{Op: Push, Arg: []int{1}}, // 4
- {Op: Call}, // 5
+ {Op: Call, Arg: []int{0}}, // 5
{Op: Exit}, // 6
},
start: 0, end: 1, mem: "[3]",
@@ -183,56 +185,58 @@ var tests = []struct {
{Op: Return, Arg: []int{1, 1}}, // 4
{Op: Push, Arg: []int{1}}, // 5
{Op: Push, Arg: []int{1}}, // 6
- {Op: Call}, // 7
+ {Op: Call, Arg: []int{0}}, // 7
{Op: Exit}, // 8
},
- start: 0, end: 1, mem: "[3]",
+ start: 1, end: 2, mem: "[3]",
}, { // #15 -- Fibonacci numbers, hand written. Showcase recursivity.
code: []Instruction{
{Op: Jump, Arg: []int{19}}, // 0
- {Op: Push, Arg: []int{2}}, // 2 [2]
{Op: Fdup, Arg: []int{-2}}, // 1 [2 i]
+ {Op: Push, Arg: []int{2}}, // 2 [2]
{Op: Lower}, // 3 [true/false]
{Op: JumpTrue, Arg: []int{13}}, // 4 [], goto 17
- {Op: Push, Arg: []int{2}}, // 5 [i 2]
+ {Op: Push, Arg: []int{1}}, // 5
{Op: Fdup, Arg: []int{-2}}, // 6 [i]
- {Op: Sub}, // 7 [(i-2)]
- {Op: Push, Arg: []int{1}}, // 8
- {Op: Call}, // 9 [fib(i-2)]
- {Op: Push, Arg: []int{1}}, // 10 [(i-2) i 1]
+ {Op: Push, Arg: []int{2}}, // 7 [i 2]
+ {Op: Sub}, // 8 [(i-2)]
+ {Op: Call, Arg: []int{1}}, // 9 [fib(i-2)]
+ {Op: Push, Arg: []int{1}}, // 10
{Op: Fdup, Arg: []int{-2}}, // 11 [fib(i-2) i]
- {Op: Sub}, // 12 [(i-2) (i-1)]
- {Op: Push, Arg: []int{1}}, // 13
- {Op: Call}, // 14 [fib(i-2) fib(i-1)]
+ {Op: Push, Arg: []int{1}}, // 12 [(i-2) i 1]
+ {Op: Sub}, // 13 [(i-2) (i-1)]
+ {Op: Call, Arg: []int{1}}, // 14 [fib(i-2) fib(i-1)]
{Op: Add}, // 15 [fib(i-2)+fib(i-1)]
{Op: Return, Arg: []int{1, 1}}, // 16 return i
{Op: Fdup, Arg: []int{-2}}, // 17 [i]
{Op: Return, Arg: []int{1, 1}}, // 18 return i
- {Op: Push, Arg: []int{6}}, // 19 [1]
- {Op: Push, Arg: []int{1}}, // 20
- {Op: Call}, // 21 [fib(*1)]
+ {Op: Push, Arg: []int{1}}, // 19
+ {Op: Push, Arg: []int{6}}, // 20 [1]
+ {Op: Call, Arg: []int{1}}, // 21 [fib(*1)]
{Op: Exit}, // 22
},
start: 0, end: 1, mem: "[8]",
-}, { // #16 -- Fibonacci with some immediate instructions.
- code: []Instruction{
- {Op: Jump, Arg: []int{14}}, // 0
- {Op: Fdup, Arg: []int{-2}}, // 1 [i]
- {Op: Loweri, Arg: []int{2}}, // 2 [true/false]
- {Op: JumpTrue, Arg: []int{9}}, // 3 [], goto 12
- {Op: Fdup, Arg: []int{-2}}, // 4 [i]
- {Op: Subi, Arg: []int{2}}, // 5 [(i-2)]
- {Op: Calli, Arg: []int{1}}, // 6 [fib(i-2)]
- {Op: Fdup, Arg: []int{-2}}, // 7 [fib(i-2) i]
- {Op: Subi, Arg: []int{1}}, // 8 [(i-2) (i-1)]
- {Op: Calli, Arg: []int{1}}, // 9 [fib(i-2) fib(i-1)], call 1
- {Op: Add}, // 10 [fib(i-2)+fib(i-1)]
- {Op: Return, Arg: []int{1, 1}}, // 11 return i
- {Op: Fdup, Arg: []int{-2}}, // 12 [i]
- {Op: Return, Arg: []int{1, 1}}, // 13 return i
- {Op: Push, Arg: []int{6}}, // 14 [1]
- {Op: Calli, Arg: []int{1}}, // 15 [fib(*1)], call 1
- {Op: Exit}, // 16
- },
- start: 0, end: 1, mem: "[8]",
+ /*
+ }, { // #16 -- Fibonacci with some immediate instructions.
+ code: []Instruction{
+ {Op: Jump, Arg: []int{14}}, // 0
+ {Op: Fdup, Arg: []int{-2}}, // 1 [i]
+ {Op: Loweri, Arg: []int{2}}, // 2 [true/false]
+ {Op: JumpTrue, Arg: []int{9}}, // 3 [], goto 12
+ {Op: Fdup, Arg: []int{-2}}, // 4 [i]
+ {Op: Subi, Arg: []int{2}}, // 5 [(i-2)]
+ {Op: Calli, Arg: []int{1}}, // 6 [fib(i-2)]
+ {Op: Fdup, Arg: []int{-2}}, // 7 [fib(i-2) i]
+ {Op: Subi, Arg: []int{1}}, // 8 [(i-2) (i-1)]
+ {Op: Calli, Arg: []int{1}}, // 9 [fib(i-2) fib(i-1)], call 1
+ {Op: Add}, // 10 [fib(i-2)+fib(i-1)]
+ {Op: Return, Arg: []int{1, 1}}, // 11 return i
+ {Op: Fdup, Arg: []int{-2}}, // 12 [i]
+ {Op: Return, Arg: []int{1, 1}}, // 13 return i
+ {Op: Push, Arg: []int{6}}, // 14 [1]
+ {Op: Calli, Arg: []int{1}}, // 15 [fib(*1)], call 1
+ {Op: Exit}, // 16
+ },
+ start: 0, end: 1, mem: "[8]",
+ */
}}