From 834de04635979c2df79a5682a7faceac9705761f Mon Sep 17 00:00:00 2001 From: Chuck Smith Date: Thu, 28 Mar 2024 15:14:05 -0400 Subject: [PATCH] blacklist certain tests --- .gitignore | 1 + evaluator/evaluator_test.go | 25 +++++++++++++---- vm/vm_test.go | 53 +++++++++++++++++++++++++++++++++++++ 3 files changed, 74 insertions(+), 5 deletions(-) diff --git a/.gitignore b/.gitignore index a9a9f7c..eab4e41 100644 --- a/.gitignore +++ b/.gitignore @@ -87,4 +87,5 @@ fabric.properties .DS_Store /dist +/.vscode /monkey-lang \ No newline at end of file diff --git a/evaluator/evaluator_test.go b/evaluator/evaluator_test.go index f05589b..0e6a864 100644 --- a/evaluator/evaluator_test.go +++ b/evaluator/evaluator_test.go @@ -8,10 +8,16 @@ import ( "monkey/parser" "monkey/utils" "os" + "path" "path/filepath" + "strings" "testing" ) +var BlacklistedExamples = map[string]bool{ + "echoserver": true, +} + func assertEvaluated(t *testing.T, expected interface{}, actual object.Object) { t.Helper() @@ -884,17 +890,26 @@ func TestImportSearchPaths(t *testing.T) { } func TestExamples(t *testing.T) { - matches, err := filepath.Glob("../examples/*.monkey") + matches, err := filepath.Glob("./examples/*.monkey") if err != nil { t.Error(err) } for _, match := range matches { - b, err := os.ReadFile(match) - if err != nil { - t.Error(err) + basename := path.Base(match) + name := strings.TrimSuffix(basename, filepath.Ext(basename)) + + if BlacklistedExamples[name] { + t.Skipf("not testing blacklisted example %s", name) } - testEval(string(b)) + + t.Run(name, func(t *testing.T) { + b, err := os.ReadFile(match) + if err != nil { + t.Error(err) + } + testEval(string(b)) + }) } } diff --git a/vm/vm_test.go b/vm/vm_test.go index a87f7b7..7a2617f 100644 --- a/vm/vm_test.go +++ b/vm/vm_test.go @@ -15,6 +15,10 @@ import ( "testing" ) +var BlacklistedExamples = map[string]bool{ + "echoserver": true, +} + type vmTestCase struct { input string expected interface{} @@ -1051,6 +1055,55 @@ func TestIntegration(t *testing.T) { } } +func TestExamples(t *testing.T) { + if testing.Short() { + t.Skip("skipping test in short mode.") + } + + matches, err := filepath.Glob("../examples/*.monkey") + if err != nil { + t.Error(err) + } + + for _, match := range matches { + basename := path.Base(match) + name := strings.TrimSuffix(basename, filepath.Ext(basename)) + + if BlacklistedExamples[name] { + t.Skipf("not testing blacklisted example %s", name) + } + + t.Run(name, func(t *testing.T) { + b, err := os.ReadFile(match) + if err != nil { + t.Error(err) + } + + input := string(b) + program := parse(input) + + c := compiler.New() + err = c.Compile(program) + if err != nil { + t.Log(input) + t.Fatalf("compiler error: %s", err) + } + + vm := New(c.Bytecode()) + + err = vm.Run() + if err != nil { + t.Log(input) + t.Fatalf("vm error: %s", err) + } + if vm.sp != 0 { + t.Log(input) + t.Fatal("vm stack pointer non-zero") + } + }) + } +} + func BenchmarkFibonacci(b *testing.B) { tests := map[string]string{ "iterative": `