Added more tokenizer tests
This commit is contained in:
parent
be1b8723f4
commit
eba0176ae6
@ -228,10 +228,10 @@ func Tokenize(buffer []byte) List {
|
|||||||
// kind = ReturnType
|
// kind = ReturnType
|
||||||
case ".":
|
case ".":
|
||||||
kind = Period
|
kind = Period
|
||||||
case "/":
|
// case "/":
|
||||||
kind = Div
|
// kind = Div
|
||||||
case "/=":
|
// case "/=":
|
||||||
kind = DivAssign
|
// kind = DivAssign
|
||||||
case ":=":
|
case ":=":
|
||||||
kind = Define
|
kind = Define
|
||||||
case "<":
|
case "<":
|
||||||
|
@ -25,7 +25,7 @@ func TestFunction(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestKeyword(t *testing.T) {
|
func TestKeyword(t *testing.T) {
|
||||||
tokens := token.Tokenize([]byte("assert if import else loop return"))
|
tokens := token.Tokenize([]byte("assert if import else loop return switch"))
|
||||||
|
|
||||||
expected := []token.Kind{
|
expected := []token.Kind{
|
||||||
token.Assert,
|
token.Assert,
|
||||||
@ -34,6 +34,7 @@ func TestKeyword(t *testing.T) {
|
|||||||
token.Else,
|
token.Else,
|
||||||
token.Loop,
|
token.Loop,
|
||||||
token.Return,
|
token.Return,
|
||||||
|
token.Switch,
|
||||||
token.EOF,
|
token.EOF,
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -87,7 +88,7 @@ func TestNumber(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestOperator(t *testing.T) {
|
func TestOperator(t *testing.T) {
|
||||||
tokens := token.Tokenize([]byte(`a + b - c * d / e`))
|
tokens := token.Tokenize([]byte(`a + b - c * d / e % f << g >> h & i | j ^ k`))
|
||||||
|
|
||||||
expected := []token.Kind{
|
expected := []token.Kind{
|
||||||
token.Identifier,
|
token.Identifier,
|
||||||
@ -99,6 +100,18 @@ func TestOperator(t *testing.T) {
|
|||||||
token.Identifier,
|
token.Identifier,
|
||||||
token.Div,
|
token.Div,
|
||||||
token.Identifier,
|
token.Identifier,
|
||||||
|
token.Mod,
|
||||||
|
token.Identifier,
|
||||||
|
token.Shl,
|
||||||
|
token.Identifier,
|
||||||
|
token.Shr,
|
||||||
|
token.Identifier,
|
||||||
|
token.And,
|
||||||
|
token.Identifier,
|
||||||
|
token.Or,
|
||||||
|
token.Identifier,
|
||||||
|
token.Xor,
|
||||||
|
token.Identifier,
|
||||||
token.EOF,
|
token.EOF,
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -108,7 +121,7 @@ func TestOperator(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestOperatorAssign(t *testing.T) {
|
func TestOperatorAssign(t *testing.T) {
|
||||||
tokens := token.Tokenize([]byte(`a += b -= c *= d /= e &= f |= g ^= h <<= i >>= j`))
|
tokens := token.Tokenize([]byte(`a += b -= c *= d /= e %= f &= g |= h ^= i <<= j >>= k`))
|
||||||
|
|
||||||
expected := []token.Kind{
|
expected := []token.Kind{
|
||||||
token.Identifier,
|
token.Identifier,
|
||||||
@ -120,6 +133,8 @@ func TestOperatorAssign(t *testing.T) {
|
|||||||
token.Identifier,
|
token.Identifier,
|
||||||
token.DivAssign,
|
token.DivAssign,
|
||||||
token.Identifier,
|
token.Identifier,
|
||||||
|
token.ModAssign,
|
||||||
|
token.Identifier,
|
||||||
token.AndAssign,
|
token.AndAssign,
|
||||||
token.Identifier,
|
token.Identifier,
|
||||||
token.OrAssign,
|
token.OrAssign,
|
||||||
@ -138,6 +153,31 @@ func TestOperatorAssign(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestOperatorEquality(t *testing.T) {
|
||||||
|
tokens := token.Tokenize([]byte(`a == b != c <= d >= e < f > g`))
|
||||||
|
|
||||||
|
expected := []token.Kind{
|
||||||
|
token.Identifier,
|
||||||
|
token.Equal,
|
||||||
|
token.Identifier,
|
||||||
|
token.NotEqual,
|
||||||
|
token.Identifier,
|
||||||
|
token.LessEqual,
|
||||||
|
token.Identifier,
|
||||||
|
token.GreaterEqual,
|
||||||
|
token.Identifier,
|
||||||
|
token.Less,
|
||||||
|
token.Identifier,
|
||||||
|
token.Greater,
|
||||||
|
token.Identifier,
|
||||||
|
token.EOF,
|
||||||
|
}
|
||||||
|
|
||||||
|
for i, kind := range expected {
|
||||||
|
assert.Equal(t, tokens[i].Kind, kind)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func TestNegateFirstToken(t *testing.T) {
|
func TestNegateFirstToken(t *testing.T) {
|
||||||
tokens := token.Tokenize([]byte(`-a`))
|
tokens := token.Tokenize([]byte(`-a`))
|
||||||
|
|
||||||
@ -409,3 +449,45 @@ func TestStringEOF(t *testing.T) {
|
|||||||
assert.Equal(t, tokens[i].Kind, kind)
|
assert.Equal(t, tokens[i].Kind, kind)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestReturnType(t *testing.T) {
|
||||||
|
tokens := token.Tokenize([]byte("()->"))
|
||||||
|
|
||||||
|
expected := []token.Kind{
|
||||||
|
token.GroupStart,
|
||||||
|
token.GroupEnd,
|
||||||
|
token.ReturnType,
|
||||||
|
token.EOF,
|
||||||
|
}
|
||||||
|
|
||||||
|
for i, kind := range expected {
|
||||||
|
assert.Equal(t, tokens[i].Kind, kind)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestMinusAtEOF(t *testing.T) {
|
||||||
|
tokens := token.Tokenize([]byte("1-"))
|
||||||
|
|
||||||
|
expected := []token.Kind{
|
||||||
|
token.Number,
|
||||||
|
token.Sub,
|
||||||
|
token.EOF,
|
||||||
|
}
|
||||||
|
|
||||||
|
for i, kind := range expected {
|
||||||
|
assert.Equal(t, tokens[i].Kind, kind)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestRune(t *testing.T) {
|
||||||
|
tokens := token.Tokenize([]byte("'a'"))
|
||||||
|
|
||||||
|
expected := []token.Kind{
|
||||||
|
token.Rune,
|
||||||
|
token.EOF,
|
||||||
|
}
|
||||||
|
|
||||||
|
for i, kind := range expected {
|
||||||
|
assert.Equal(t, tokens[i].Kind, kind)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user