112 lines
2.5 KiB
Go
112 lines
2.5 KiB
Go
package soko
|
|
|
|
import (
|
|
"bytes"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
var levelBenchmark = `level:
|
|
._._._._._._._._._._._._._._._._._._._._
|
|
._._._._._#_#_#_._._._._._._._._._._._._
|
|
._._._._._#_#_#_._._._._._._._._._._._._
|
|
._._._._._#_#_#_._._._._._._._._._._._._
|
|
._._._#_#_#_#_#_#_._._._._._._._._._._._
|
|
._._._#_._#_._._#_._._._._#X#_#_~_#_#_._
|
|
._#_#_#_._#_._._#_._._._._._._._~_#_#_._
|
|
._#_#B#_#_#B#_#_#_#_#_#_#_#_#_#_#_#_#_._
|
|
._._._._._#_._._._#_._#@._._._._#_#_._._
|
|
._._._._._#_#_#_#_#_._._._._._._._._._._
|
|
._._._._._._._._._._._._._._._._._._._._
|
|
:level`
|
|
|
|
var levelEasy = `level:
|
|
._._._._._._._._._._
|
|
._#@#_#_#B#_~_#_#X._
|
|
._._._._._._._._._._
|
|
:level`
|
|
|
|
var level1 = `level:
|
|
._._._._._._._._._._
|
|
._#_#_#_#_~_~_~_#_._
|
|
._#_#_._#B~_~_#_#_._
|
|
._#_#_#_#_~_~_~_#_._
|
|
._#_#_._#B~_~_#_#_._
|
|
._#@#_#_#_~_~_#_#X._
|
|
._#_#_~_~_~_#_#_#_._
|
|
._#_#_~_~_~_#_#_#_._
|
|
._._._._._._._._._._
|
|
:level`
|
|
|
|
var level2 = `level:
|
|
._._._._._._._._._._._._._._._._._._._._
|
|
._._._._._#_#_#_._._._._._._._._._._._._
|
|
._._._._._#B#_#_._._._._._._._._._._._._
|
|
._._._._._#_#_#B._._._._._._._._._._._._
|
|
._._._#_#_#B#_#B#_._._._._._._._._._._._
|
|
._._._#_._#_._._#_._._._._#X#_~_~_~_#_._
|
|
._#_#_#_._#_._._#_._._._._._._._~_~_#_._
|
|
._#_#B#_#_#B#_#_#_#_#_#_#_#_#_#_~_#_#_._
|
|
._._._._._#_._._._#_._#@._._._._#_#_._._
|
|
._._._._._#_#_#_#_#_._._._._._._._._._._
|
|
._._._._._._._._._._._._._._._._._._._._
|
|
:level`
|
|
|
|
var level3 = `level:
|
|
._._._._._._._._._._
|
|
._._._._._._._._._._
|
|
._~_#_#_#_#B#_._._._
|
|
._~_#B#_#_._#_._._._
|
|
._~_._#_~_#_#_._._._
|
|
._#X._#_~_#_._._._._
|
|
._._#_#B#_#_._._._._
|
|
._._#@#_._._._._._._
|
|
._._._._._._._._._._
|
|
:level`
|
|
|
|
var level4 = `level:
|
|
._._._._._._._._._._._._
|
|
._._#_#_._._._._._._._._
|
|
._._#_#B#_#B#@#_#_._._._
|
|
._._#_#_#_#_#B#_#_._._._
|
|
._._._._._._#_._._._._._
|
|
._._._._._._#_._._._._._
|
|
._._._._._._#B._._._._._
|
|
._._._#_#_._#_._#_#_._._
|
|
._#_#_#_#_~_#_#_#_#_#_._
|
|
._#_._._#_._#_._#_._#_._
|
|
._#_._#X~_._~_._~_._#_._
|
|
._#_._._#_._#_._#_._#_._
|
|
._#_#_#_#_#_~_#_#_#_#_._
|
|
._._._._._._._._._._._._
|
|
:level`
|
|
|
|
func mustParseLevel(s string) Level {
|
|
l, err := ParseLevel(bytes.NewBufferString(s))
|
|
if err != nil {
|
|
panic("couldn't parse level")
|
|
}
|
|
return l
|
|
}
|
|
|
|
func TestSolver(t *testing.T) {
|
|
solve := func(s string) int {
|
|
l := mustParseLevel(s)
|
|
steps := Solve(l)
|
|
return steps
|
|
}
|
|
assert.Equal(t, 7, solve(levelEasy))
|
|
assert.Equal(t, 35, solve(level1))
|
|
// assert.Equal(t, -1, solve(level2))
|
|
assert.Equal(t, 49, solve(level3))
|
|
// assert.Equal(t, -1, solve(level4))
|
|
}
|
|
|
|
func BenchmarkSolver(b *testing.B) {
|
|
l := mustParseLevel(levelBenchmark)
|
|
for n := 0; n < b.N; n++ {
|
|
Solve(l)
|
|
}
|
|
}
|