exercism/go/queen-attack/queen_attack_test.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)
}
}
}