92 lines
1.4 KiB
Go
92 lines
1.4 KiB
Go
package compiler
|
|
|
|
import (
|
|
"go/token"
|
|
"go/types"
|
|
"testing"
|
|
|
|
"github.com/nspcc-dev/neo-go/pkg/vm/opcode"
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
func TestConvertToken(t *testing.T) {
|
|
type testCase struct {
|
|
name string
|
|
token token.Token
|
|
opcode opcode.Opcode
|
|
typ types.Type
|
|
}
|
|
|
|
testCases := []testCase{
|
|
{"ADD (number)",
|
|
token.ADD,
|
|
opcode.ADD,
|
|
types.Typ[types.Int],
|
|
},
|
|
{"ADD (string)",
|
|
token.ADD,
|
|
opcode.CAT,
|
|
types.Typ[types.String],
|
|
},
|
|
{"SUB",
|
|
token.SUB,
|
|
opcode.SUB,
|
|
nil,
|
|
},
|
|
{"MUL",
|
|
token.MUL,
|
|
opcode.MUL,
|
|
nil,
|
|
},
|
|
{"QUO",
|
|
token.QUO,
|
|
opcode.DIV,
|
|
nil,
|
|
},
|
|
{"REM",
|
|
token.REM,
|
|
opcode.MOD,
|
|
nil,
|
|
},
|
|
{"ADD_ASSIGN (number)",
|
|
token.ADD_ASSIGN,
|
|
opcode.ADD,
|
|
types.Typ[types.Int],
|
|
},
|
|
{"ADD_ASSIGN (string)",
|
|
token.ADD_ASSIGN,
|
|
opcode.CAT,
|
|
types.Typ[types.String],
|
|
},
|
|
{"SUB_ASSIGN",
|
|
token.SUB_ASSIGN,
|
|
opcode.SUB,
|
|
nil,
|
|
},
|
|
{"MUL_ASSIGN",
|
|
token.MUL_ASSIGN,
|
|
opcode.MUL,
|
|
nil,
|
|
},
|
|
{"QUO_ASSIGN",
|
|
token.QUO_ASSIGN,
|
|
opcode.DIV,
|
|
nil,
|
|
},
|
|
{"REM_ASSIGN",
|
|
token.REM_ASSIGN,
|
|
opcode.MOD,
|
|
nil,
|
|
},
|
|
}
|
|
|
|
for _, tcase := range testCases {
|
|
t.Run(tcase.name, func(t *testing.T) { eval(t, tcase.token, tcase.opcode, tcase.typ) })
|
|
}
|
|
}
|
|
|
|
func eval(t *testing.T, token token.Token, opcode opcode.Opcode, typ types.Type) {
|
|
op, err := convertToken(token, typ)
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, opcode, op)
|
|
}
|