mirror of
https://github.com/featurebasedb/featurebase.git
synced 2026-10-07 19:37:51 +00:00
104 lines
4.5 KiB
Go
104 lines
4.5 KiB
Go
package query
|
|
|
|
import (
|
|
"testing"
|
|
. "github.com/smartystreets/goconvey/convey"
|
|
)
|
|
|
|
func TestLexer(t *testing.T) {
|
|
Convey("Basic lexical analysis", t, func() {
|
|
tokens := Lex("get(10)")
|
|
So(len(tokens), ShouldEqual, 4)
|
|
So(tokens[0].Text, ShouldEqual, "get")
|
|
So(tokens[0].Type, ShouldEqual, TYPE_FUNC)
|
|
So(tokens[1].Text, ShouldEqual, "(")
|
|
So(tokens[1].Type, ShouldEqual, TYPE_LP)
|
|
So(tokens[2].Text, ShouldEqual, "10")
|
|
So(tokens[2].Type, ShouldEqual, TYPE_ID)
|
|
So(tokens[3].Text, ShouldEqual, ")")
|
|
So(tokens[3].Type, ShouldEqual, TYPE_RP)
|
|
|
|
tokens2 := Lex("intersect(get(10), get(11), get(12))")
|
|
So(len(tokens2), ShouldEqual, 17)
|
|
So(tokens2[0].Text, ShouldEqual, "intersect")
|
|
So(tokens2[0].Type, ShouldEqual, TYPE_FUNC)
|
|
So(tokens2[1].Text, ShouldEqual, "(")
|
|
So(tokens2[1].Type, ShouldEqual, TYPE_LP)
|
|
So(tokens2[2].Text, ShouldEqual, "get")
|
|
So(tokens2[2].Type, ShouldEqual, TYPE_FUNC)
|
|
So(tokens2[3].Text, ShouldEqual, "(")
|
|
So(tokens2[3].Type, ShouldEqual, TYPE_LP)
|
|
So(tokens2[4].Text, ShouldEqual, "10")
|
|
So(tokens2[4].Type, ShouldEqual, TYPE_ID)
|
|
So(tokens2[5].Text, ShouldEqual, ")")
|
|
So(tokens2[5].Type, ShouldEqual, TYPE_RP)
|
|
So(tokens2[6].Text, ShouldEqual, ",")
|
|
So(tokens2[6].Type, ShouldEqual, TYPE_COMMA)
|
|
So(tokens2[7].Text, ShouldEqual, "get")
|
|
So(tokens2[7].Type, ShouldEqual, TYPE_FUNC)
|
|
So(tokens2[8].Text, ShouldEqual, "(")
|
|
So(tokens2[8].Type, ShouldEqual, TYPE_LP)
|
|
So(tokens2[9].Text, ShouldEqual, "11")
|
|
So(tokens2[9].Type, ShouldEqual, TYPE_ID)
|
|
So(tokens2[10].Text, ShouldEqual, ")")
|
|
So(tokens2[10].Type, ShouldEqual, TYPE_RP)
|
|
So(tokens2[11].Text, ShouldEqual, ",")
|
|
So(tokens2[11].Type, ShouldEqual, TYPE_COMMA)
|
|
So(tokens2[12].Text, ShouldEqual, "get")
|
|
So(tokens2[12].Type, ShouldEqual, TYPE_FUNC)
|
|
So(tokens2[13].Text, ShouldEqual, "(")
|
|
So(tokens2[13].Type, ShouldEqual, TYPE_LP)
|
|
So(tokens2[14].Text, ShouldEqual, "12")
|
|
So(tokens2[14].Type, ShouldEqual, TYPE_ID)
|
|
So(tokens2[15].Text, ShouldEqual, ")")
|
|
So(tokens2[15].Type, ShouldEqual, TYPE_RP)
|
|
So(tokens2[16].Text, ShouldEqual, ")")
|
|
So(tokens2[16].Type, ShouldEqual, TYPE_RP)
|
|
|
|
tokens3 := Lex("intersect(get(10), get(11), concat(12,14))")
|
|
So(len(tokens3), ShouldEqual, 19)
|
|
So(tokens3[0].Text, ShouldEqual, "intersect")
|
|
So(tokens3[0].Type, ShouldEqual, TYPE_FUNC)
|
|
So(tokens3[1].Text, ShouldEqual, "(")
|
|
So(tokens3[1].Type, ShouldEqual, TYPE_LP)
|
|
So(tokens3[2].Text, ShouldEqual, "get")
|
|
So(tokens3[2].Type, ShouldEqual, TYPE_FUNC)
|
|
So(tokens3[3].Text, ShouldEqual, "(")
|
|
So(tokens3[3].Type, ShouldEqual, TYPE_LP)
|
|
So(tokens3[4].Text, ShouldEqual, "10")
|
|
So(tokens3[4].Type, ShouldEqual, TYPE_ID)
|
|
So(tokens3[5].Text, ShouldEqual, ")")
|
|
So(tokens3[5].Type, ShouldEqual, TYPE_RP)
|
|
So(tokens3[6].Text, ShouldEqual, ",")
|
|
So(tokens3[6].Type, ShouldEqual, TYPE_COMMA)
|
|
So(tokens3[7].Text, ShouldEqual, "get")
|
|
So(tokens3[7].Type, ShouldEqual, TYPE_FUNC)
|
|
So(tokens3[8].Text, ShouldEqual, "(")
|
|
So(tokens3[8].Type, ShouldEqual, TYPE_LP)
|
|
So(tokens3[9].Text, ShouldEqual, "11")
|
|
So(tokens3[9].Type, ShouldEqual, TYPE_ID)
|
|
So(tokens3[10].Text, ShouldEqual, ")")
|
|
So(tokens3[10].Type, ShouldEqual, TYPE_RP)
|
|
So(tokens3[11].Text, ShouldEqual, ",")
|
|
So(tokens3[11].Type, ShouldEqual, TYPE_COMMA)
|
|
So(tokens3[12].Text, ShouldEqual, "concat")
|
|
So(tokens3[12].Type, ShouldEqual, TYPE_FUNC)
|
|
So(tokens3[13].Text, ShouldEqual, "(")
|
|
So(tokens3[13].Type, ShouldEqual, TYPE_LP)
|
|
So(tokens3[14].Text, ShouldEqual, "12")
|
|
So(tokens3[14].Type, ShouldEqual, TYPE_ID)
|
|
So(tokens3[15].Text, ShouldEqual, ",")
|
|
So(tokens3[15].Type, ShouldEqual, TYPE_COMMA)
|
|
So(tokens3[16].Text, ShouldEqual, "14")
|
|
So(tokens3[16].Type, ShouldEqual, TYPE_ID)
|
|
So(tokens3[17].Text, ShouldEqual, ")")
|
|
So(tokens3[17].Type, ShouldEqual, TYPE_RP)
|
|
So(tokens3[18].Text, ShouldEqual, ")")
|
|
So(tokens3[18].Type, ShouldEqual, TYPE_RP)
|
|
|
|
tokens4 := Lex("concat(1,2,345,890)")
|
|
So(len(tokens4), ShouldEqual, 10)
|
|
So(tokens4[6].Text, ShouldEqual, "345")
|
|
So(tokens4[6].Type, ShouldEqual, TYPE_ID)
|
|
})
|
|
}
|