You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
53 lines
1.0 KiB
53 lines
1.0 KiB
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)
|
|
})
|
|
}
|
|
}
|
|
|