From a7a5018f3843b31a5ec3404f192d5044955dec18 Mon Sep 17 00:00:00 2001 From: Brian Picciano Date: Thu, 2 Nov 2023 17:19:01 +0100 Subject: [PATCH] Automate testing of the examples directory --- examples/examples_test.go | 53 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 examples/examples_test.go diff --git a/examples/examples_test.go b/examples/examples_test.go new file mode 100644 index 0000000..899a342 --- /dev/null +++ b/examples/examples_test.go @@ -0,0 +1,53 @@ +package examples_test + +import ( + "embed" + "fmt" + "testing" + + "code.betamike.com/mediocregopher/ginger/gg" + "code.betamike.com/mediocregopher/ginger/vm" + "github.com/stretchr/testify/assert" +) + +//go:embed *.gg +var examplesFS embed.FS + +func TestAllExamples(t *testing.T) { + + tests := []struct { + path string + in vm.Value + exp vm.Value + }{ + { + path: "fib.gg", + in: vm.Value{Value: gg.Number(5)}, + exp: vm.Value{Value: gg.Number(5)}, + }, + { + path: "fib.gg", + in: vm.Value{Value: gg.Number(10)}, + exp: vm.Value{Value: gg.Number(55)}, + }, + { + path: "fib.gg", + in: vm.Value{Value: gg.Number(69)}, + exp: vm.Value{Value: gg.Number(117669030460994)}, + }, + } + + for _, test := range tests { + t.Run(fmt.Sprintf("%s_%v", test.path, test.in), func(t *testing.T) { + f, err := examplesFS.Open(test.path) + if err != nil { + t.Fatal(err) + } + defer f.Close() + + got, err := vm.EvaluateSource(f, test.in, vm.GlobalScope) + assert.NoError(t, err) + assert.True(t, test.exp.Equal(got), "%v != %v", test.exp, got) + }) + } +}