diff options
| author | Antonio Navarro Perez <antnavper@gmail.com> | 2024-03-20 11:15:48 +0100 |
|---|---|---|
| committer | Antonio Navarro Perez <antnavper@gmail.com> | 2024-03-20 11:15:48 +0100 |
| commit | 649ae829220d6ddd8758d24c3bc2ea7d43e788d6 (patch) | |
| tree | ca5bccce3a8ac04a96fc795b06bc40d08384286d /parser/dump_test.go | |
| parent | 5da3a651ba08859ccc1cdf1094603411696c8df2 (diff) | |
feat: Add simple Dump creation and recovery.
Memory Dump functionality that can restore the previous VM state.
It dumps *global* variables, the only ones defining the program state.
The dump depends on the program itself, and on the index system, which right now is defined by the variable order.
Signed-off-by: Antonio Navarro Perez <antnavper@gmail.com>
Diffstat (limited to 'parser/dump_test.go')
| -rw-r--r-- | parser/dump_test.go | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/parser/dump_test.go b/parser/dump_test.go new file mode 100644 index 0000000..db86c48 --- /dev/null +++ b/parser/dump_test.go @@ -0,0 +1,48 @@ +package parser_test + +import ( + "testing" + + "github.com/mvertes/parscan/parser" +) + +func TestDump(t *testing.T) { + initProgram := "var a int = 2+1; a" + interp := parser.NewInterpreter(GoScanner) + r, e := interp.Eval(initProgram) + t.Log(r, e) + if e != nil { + t.Fatal(e) + } + + r, e = interp.Eval("a = 100") + t.Log(r, e) + if e != nil { + t.Fatal(e) + } + + d := interp.Dump() + t.Log(d) + + interp = parser.NewInterpreter(GoScanner) + r, e = interp.Eval(initProgram) + t.Log(r, e) + if e != nil { + t.Fatal(e) + } + + e = interp.ApplyDump(d) + if e != nil { + t.Fatal(e) + } + + r, e = interp.Eval("a = a + 1;a") + t.Log(r, e) + if e != nil { + t.Fatal(e) + } + + if r.Interface() != int(101) { + t.Fatalf("unexpected result: %v", r) + } +} |
