package compiler_test import ( "context" "github.com/MontFerret/ferret/pkg/compiler" "github.com/MontFerret/ferret/pkg/runtime" . "github.com/smartystreets/goconvey/convey" "testing" ) func TestCollectCount(t *testing.T) { Convey("Should count grouped values", t, func() { c := compiler.New() prog, err := c.Compile(` LET users = [ { active: true, age: 31, gender: "m", married: true }, { active: true, age: 25, gender: "f", married: false }, { active: true, age: 36, gender: "m", married: false }, { active: false, age: 69, gender: "m", married: true }, { active: true, age: 45, gender: "f", married: true } ] FOR i IN users COLLECT WITH COUNT INTO c RETURN c `) So(err, ShouldBeNil) So(prog, ShouldHaveSameTypeAs, &runtime.Program{}) out, err := prog.Run(context.Background()) So(err, ShouldBeNil) So(string(out), ShouldEqual, `[5]`) }) } func BenchmarkCollectCount(b *testing.B) { p := compiler.New().MustCompile(` LET users = [ { active: true, age: 31, gender: "m", married: true }, { active: true, age: 25, gender: "f", married: false }, { active: true, age: 36, gender: "m", married: false }, { active: false, age: 69, gender: "m", married: true }, { active: true, age: 45, gender: "f", married: true } ] FOR i IN users COLLECT WITH COUNT INTO c RETURN c `) for n := 0; n < b.N; n++ { p.Run(context.Background()) } }