Implemented unary operator parsing
This commit is contained in:
parent
86e7ade051
commit
093bd79c82
8 changed files with 142 additions and 16 deletions
|
@ -83,13 +83,81 @@ func TestNumber(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestOperator(t *testing.T) {
|
||||
tokens := token.Tokenize([]byte(`+ - * /`))
|
||||
tokens := token.Tokenize([]byte(`a + b - c * d / e`))
|
||||
|
||||
expected := []token.Kind{
|
||||
token.Identifier,
|
||||
token.Add,
|
||||
token.Identifier,
|
||||
token.Sub,
|
||||
token.Identifier,
|
||||
token.Mul,
|
||||
token.Identifier,
|
||||
token.Div,
|
||||
token.Identifier,
|
||||
token.EOF,
|
||||
}
|
||||
|
||||
for i, kind := range expected {
|
||||
assert.Equal(t, tokens[i].Kind, kind)
|
||||
}
|
||||
}
|
||||
|
||||
func TestNegateFirstToken(t *testing.T) {
|
||||
tokens := token.Tokenize([]byte(`-a`))
|
||||
|
||||
expected := []token.Kind{
|
||||
token.Negate,
|
||||
token.Identifier,
|
||||
token.EOF,
|
||||
}
|
||||
|
||||
for i, kind := range expected {
|
||||
assert.Equal(t, tokens[i].Kind, kind)
|
||||
}
|
||||
}
|
||||
|
||||
func TestNegateAfterGroupStart(t *testing.T) {
|
||||
tokens := token.Tokenize([]byte(`(-a)`))
|
||||
|
||||
expected := []token.Kind{
|
||||
token.GroupStart,
|
||||
token.Negate,
|
||||
token.Identifier,
|
||||
token.GroupEnd,
|
||||
token.EOF,
|
||||
}
|
||||
|
||||
for i, kind := range expected {
|
||||
assert.Equal(t, tokens[i].Kind, kind)
|
||||
}
|
||||
}
|
||||
|
||||
func TestNegateSub(t *testing.T) {
|
||||
tokens := token.Tokenize([]byte(`-a-b`))
|
||||
|
||||
expected := []token.Kind{
|
||||
token.Negate,
|
||||
token.Identifier,
|
||||
token.Sub,
|
||||
token.Identifier,
|
||||
token.EOF,
|
||||
}
|
||||
|
||||
for i, kind := range expected {
|
||||
assert.Equal(t, tokens[i].Kind, kind)
|
||||
}
|
||||
}
|
||||
|
||||
func TestNegateAfterOperator(t *testing.T) {
|
||||
tokens := token.Tokenize([]byte(`-a + -b`))
|
||||
|
||||
expected := []token.Kind{
|
||||
token.Negate,
|
||||
token.Identifier,
|
||||
token.Add,
|
||||
token.Negate,
|
||||
token.Identifier,
|
||||
token.EOF,
|
||||
}
|
||||
|
||||
|
@ -99,18 +167,28 @@ func TestOperator(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestOperatorAssign(t *testing.T) {
|
||||
tokens := token.Tokenize([]byte(`+= -= *= /= &= |= ^= <<= >>=`))
|
||||
tokens := token.Tokenize([]byte(`a += b -= c *= d /= e &= f |= g ^= h <<= i >>= j`))
|
||||
|
||||
expected := []token.Kind{
|
||||
token.Identifier,
|
||||
token.AddAssign,
|
||||
token.Identifier,
|
||||
token.SubAssign,
|
||||
token.Identifier,
|
||||
token.MulAssign,
|
||||
token.Identifier,
|
||||
token.DivAssign,
|
||||
token.Identifier,
|
||||
token.AndAssign,
|
||||
token.Identifier,
|
||||
token.OrAssign,
|
||||
token.Identifier,
|
||||
token.XorAssign,
|
||||
token.Identifier,
|
||||
token.ShlAssign,
|
||||
token.Identifier,
|
||||
token.ShrAssign,
|
||||
token.Identifier,
|
||||
token.EOF,
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue