opcode: implement FromString()

This commit is contained in:
Evgenii Stratonikov 2020-05-21 13:00:11 +03:00
parent e53055a560
commit 1100f629df
2 changed files with 30 additions and 0 deletions

View file

@ -0,0 +1,20 @@
package opcode
import "errors"
var stringToOpcode = make(map[string]Opcode)
func init() {
for i := 0; i < 255; i++ {
op := Opcode(i)
stringToOpcode[op.String()] = op
}
}
// FromString converts string representation to and opcode itself.
func FromString(s string) (Opcode, error) {
if op, ok := stringToOpcode[s]; ok {
return op, nil
}
return 0, errors.New("invalid opcode")
}

View file

@ -4,6 +4,7 @@ import (
"testing" "testing"
"github.com/stretchr/testify/assert" "github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
) )
// Nothing more to test here, really. // Nothing more to test here, really.
@ -18,3 +19,12 @@ func TestStringer(t *testing.T) {
assert.Equal(t, s, o.String()) assert.Equal(t, s, o.String())
} }
} }
func TestFromString(t *testing.T) {
_, err := FromString("abcdef")
require.Error(t, err)
op, err := FromString(MUL.String())
require.NoError(t, err)
require.Equal(t, MUL, op)
}