ginger/vm/vm_test.go
Brian Picciano 4870455430 Completely refactor gg with new BNF file and decoder
The new gg format is based on a BNF file which can be found in the `gg`
directory. The code for decoding `.gg` files has been refactored to
mirror that file. The result is more resilient parsing, better errors,
and a greater ability to extend the format in the future.

The new decoder is notable in that it does not use a lexer. Both lexing
and parsing are done in a single step.

The format syntax itself has also been modified. Rather than using
semi-colons everywhere, commas are used as separators in tuples.
Additionally the final comma/semi-colon is no longer required.
2023-10-25 11:31:33 +02:00

30 lines
419 B
Go

package vm
import (
"bytes"
"testing"
"github.com/mediocregopher/ginger/gg"
"github.com/stretchr/testify/assert"
)
func TestVM(t *testing.T) {
src := `{
incr = { out = add < (1, in); };
out = incr < incr < in;
}`
var in int64 = 5
val, err := EvaluateSource(
bytes.NewBufferString(src),
Value{Value: gg.Number(in)},
GlobalScope,
)
assert.NoError(t, err)
assert.Equal(t, in+2, *val.Number)
}