Merge remote-tracking branch 'origin/master' into glyphs
This commit is contained in:
commit
3796ee09a3
4 changed files with 26 additions and 9 deletions
|
@ -214,7 +214,7 @@ func InnerMain(command string, args ...string) error {
|
||||||
i++
|
i++
|
||||||
if len(args) == i {
|
if len(args) == i {
|
||||||
return fmt.Errorf("move command must be passed bearing")
|
return fmt.Errorf("move command must be passed bearing")
|
||||||
} else if _, err := maths.FromString(args[i]); err != nil {
|
} else if _, err := maths.BearingFromString(args[i]); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
commands = append(commands,
|
commands = append(commands,
|
||||||
|
|
|
@ -55,8 +55,8 @@ func (d Bearing) ShortString() string {
|
||||||
return bearingStrings[d].Short
|
return bearingStrings[d].Short
|
||||||
}
|
}
|
||||||
|
|
||||||
// FromString gets the Direction from a string
|
// BearingFromString gets the Direction from a string
|
||||||
func FromString(s string) (Bearing, error) {
|
func BearingFromString(s string) (Bearing, error) {
|
||||||
for i, d := range bearingStrings {
|
for i, d := range bearingStrings {
|
||||||
if strings.EqualFold(d.Long, s) || strings.EqualFold(d.Short, s) {
|
if strings.EqualFold(d.Long, s) || strings.EqualFold(d.Short, s) {
|
||||||
return Bearing(i), nil
|
return Bearing(i), nil
|
||||||
|
@ -80,3 +80,18 @@ var bearingVectors = []Vector{
|
||||||
func (d Bearing) Vector() Vector {
|
func (d Bearing) Vector() Vector {
|
||||||
return bearingVectors[d]
|
return bearingVectors[d]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// IsCardinal returns if this is a cardinal (NESW)
|
||||||
|
func (d Bearing) IsCardinal() bool {
|
||||||
|
switch d {
|
||||||
|
case North:
|
||||||
|
fallthrough
|
||||||
|
case East:
|
||||||
|
fallthrough
|
||||||
|
case South:
|
||||||
|
fallthrough
|
||||||
|
case West:
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
|
@ -13,19 +13,19 @@ func TestDirection(t *testing.T) {
|
||||||
assert.Equal(t, "N", dir.ShortString())
|
assert.Equal(t, "N", dir.ShortString())
|
||||||
assert.Equal(t, Vector{X: 0, Y: 1}, dir.Vector())
|
assert.Equal(t, Vector{X: 0, Y: 1}, dir.Vector())
|
||||||
|
|
||||||
dir, err := FromString("N")
|
dir, err := BearingFromString("N")
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
assert.Equal(t, North, dir)
|
assert.Equal(t, North, dir)
|
||||||
|
|
||||||
dir, err = FromString("n")
|
dir, err = BearingFromString("n")
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
assert.Equal(t, North, dir)
|
assert.Equal(t, North, dir)
|
||||||
|
|
||||||
dir, err = FromString("north")
|
dir, err = BearingFromString("north")
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
assert.Equal(t, North, dir)
|
assert.Equal(t, North, dir)
|
||||||
|
|
||||||
dir, err = FromString("NorthWest")
|
dir, err = BearingFromString("NorthWest")
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
assert.Equal(t, NorthWest, dir)
|
assert.Equal(t, NorthWest, dir)
|
||||||
}
|
}
|
||||||
|
|
|
@ -426,8 +426,10 @@ func (w *World) Enqueue(rover string, commands ...Command) error {
|
||||||
for _, c := range commands {
|
for _, c := range commands {
|
||||||
switch c.Command {
|
switch c.Command {
|
||||||
case roveapi.CommandType_move:
|
case roveapi.CommandType_move:
|
||||||
if _, err := maths.FromString(c.Bearing); err != nil {
|
if b, err := maths.BearingFromString(c.Bearing); err != nil {
|
||||||
return fmt.Errorf("unknown bearing: %s", c.Bearing)
|
return fmt.Errorf("unknown bearing: %s", c.Bearing)
|
||||||
|
} else if !b.IsCardinal() {
|
||||||
|
return fmt.Errorf("bearing must be cardinal")
|
||||||
}
|
}
|
||||||
case roveapi.CommandType_broadcast:
|
case roveapi.CommandType_broadcast:
|
||||||
if len(c.Message) > 3 {
|
if len(c.Message) > 3 {
|
||||||
|
@ -505,7 +507,7 @@ func (w *World) ExecuteCommand(c *Command, rover string) (err error) {
|
||||||
|
|
||||||
switch c.Command {
|
switch c.Command {
|
||||||
case roveapi.CommandType_move:
|
case roveapi.CommandType_move:
|
||||||
if dir, err := maths.FromString(c.Bearing); err != nil {
|
if dir, err := maths.BearingFromString(c.Bearing); err != nil {
|
||||||
return err
|
return err
|
||||||
} else if _, err := w.MoveRover(rover, dir); err != nil {
|
} else if _, err := w.MoveRover(rover, dir); err != nil {
|
||||||
return err
|
return err
|
||||||
|
|
Loading…
Add table
Reference in a new issue