54 lines
1.3 KiB
Go
54 lines
1.3 KiB
Go
package queenattack
|
|
|
|
import "testing"
|
|
|
|
// Arguments to CanQueenAttack are in algebraic notation.
|
|
// See http://en.wikipedia.org/wiki/Algebraic_notation_(chess)
|
|
|
|
var tests = []struct {
|
|
w, b string
|
|
attack bool
|
|
ok bool
|
|
}{
|
|
{"b4", "b4", false, false}, // same square
|
|
{"a8", "b9", false, false}, // off board
|
|
{"here", "there", false, false}, // invalid
|
|
{"", "", false, false},
|
|
|
|
{"b3", "d7", false, true}, // no attack
|
|
{"b4", "b7", true, true}, // same file
|
|
{"e4", "b4", true, true}, // same rank
|
|
{"a1", "f6", true, true}, // common diagonals
|
|
{"a6", "b7", true, true},
|
|
{"d1", "f3", true, true},
|
|
{"f1", "a6", true, true},
|
|
}
|
|
|
|
func TestCanQueenAttack(t *testing.T) {
|
|
for _, test := range tests {
|
|
switch attack, err := CanQueenAttack(test.w, test.b); {
|
|
case err != nil:
|
|
if test.ok {
|
|
t.Fatalf("CanQueenAttack(%s, %s) returned error %q. "+
|
|
"Error not expected.",
|
|
test.w, test.b, err)
|
|
}
|
|
case !test.ok:
|
|
t.Fatalf("CanQueenAttack(%s, %s) = %t, %v. Expected error.",
|
|
test.w, test.b, attack, err)
|
|
case attack != test.attack:
|
|
t.Fatalf("CanQueenAttack(%s, %s) = %t, want %t.",
|
|
test.w, test.b, attack, test.attack)
|
|
}
|
|
}
|
|
}
|
|
|
|
// Benchmark combined time for all test cases
|
|
func BenchmarkCanQueenAttack(b *testing.B) {
|
|
for i := 0; i < b.N; i++ {
|
|
for _, test := range tests {
|
|
CanQueenAttack(test.w, test.b)
|
|
}
|
|
}
|
|
}
|