package compiler_test import ( "context" "github.com/MontFerret/ferret/pkg/compiler" "testing" . "github.com/smartystreets/goconvey/convey" ) func TestPrecedence(t *testing.T) { Convey("Math operators", t, func() { Convey("2 + 2 * 2", func() { c := compiler.New() p := c.MustCompile(`RETURN 2 + 2 * 2`) out := p.MustRun(context.Background()) So(string(out), ShouldEqual, "6") }) Convey("2 * 2 + 2", func() { c := compiler.New() p := c.MustCompile(`RETURN 2 * 2 + 2`) out := p.MustRun(context.Background()) So(string(out), ShouldEqual, "6") }) Convey("2 * (2 + 2)", func() { c := compiler.New() p := c.MustCompile(`RETURN 2 * (2 + 2)`) out := p.MustRun(context.Background()) So(string(out), ShouldEqual, "8") }) }) Convey("Logical", t, func() { Convey("TRUE OR TRUE AND FALSE", func() { c := compiler.New() p := c.MustCompile(`RETURN TRUE OR TRUE AND FALSE`) out := p.MustRun(context.Background()) So(string(out), ShouldEqual, "true") }) Convey("FALSE AND TRUE OR TRUE", func() { c := compiler.New() p := c.MustCompile(`RETURN FALSE AND TRUE OR TRUE`) out := p.MustRun(context.Background()) So(string(out), ShouldEqual, "true") }) }) }