Handle invalid cases

master
Manfred Touron 9 years ago
parent 3fdedcb83d
commit 120f82d221
No known key found for this signature in database
GPG Key ID: 0DCB9CE0CABAE1B5

@ -25,11 +25,20 @@ func NewResolverFromString(theMap string) Resolver {
}
func (r *Resolver) GetStartPosition() (Position, error) {
var found *Position
for y, line := range r.Lines {
if pos := strings.Index(line, "S"); pos != -1 {
return Position{pos, y}, nil
for x, char := range line {
if fmt.Sprintf("%c", char) == "S" {
if found != nil {
return Position{-1, -1}, fmt.Errorf("Multiple starting points")
}
found = &Position{x, y}
}
}
}
if found != nil {
return *found, nil
}
return Position{-1, -1}, fmt.Errorf("No such starting point")
}
@ -39,9 +48,9 @@ func (r *Resolver) Run() (string, error) {
return "", err
}
fmt.Println("===============================")
r.PrintMap()
fmt.Println("")
// fmt.Println("===============================")
// r.PrintMap()
// fmt.Println("")
return r.Step(startPos, Position{-1, -1})
}

@ -70,10 +70,30 @@ O<| | |>O
+-+++-+
O<| | |>O
+->E<-+
`,
`
6-----+
| +-^
+---+->B
+---^
`,
`
abc
de
`,
`
S-S-S-+
| +-^
+---+->B
+---^
`,
}
var outputs = []string{
"a", "b", "b", "Q", "A", "B", "Y", "B", "E",
"a", "b", "b", "Q", "A", "B", "Y", "B", "E", "", "", "",
}
var errs = []error{
nil, nil, nil, nil, nil, nil, nil, nil, nil, fmt.Errorf("No such starting point"), fmt.Errorf("No such starting point"), fmt.Errorf("Multiple starting points"),
}
func ExampleResolver_a() {
@ -88,7 +108,7 @@ func TestResolver(t *testing.T) {
Convey(fmt.Sprintf("input %d", idx+1), func() {
resolver := NewResolverFromString(input[1 : len(input)-1])
output, err := resolver.Run()
So(err, ShouldBeNil)
So(err, ShouldResemble, errs[idx])
So(output, ShouldEqual, outputs[idx])
})
}

Loading…
Cancel
Save