52 lines
2.2 KiB
Scala
52 lines
2.2 KiB
Scala
package gambit
|
|
|
|
class EvalTest extends munit.FunSuite:
|
|
private def e(fen: String): Int = Eval.evaluate(Fen.parse(fen))
|
|
|
|
test("start position and a mirrored middlegame evaluate to zero") {
|
|
assertEquals(e(Fen.startPosition), 0)
|
|
assertEquals(e("r1bqkbnr/pppp1ppp/2n5/4p3/4P3/2N5/PPPP1PPP/R1BQKBNR w KQkq - 0 1"), 0)
|
|
}
|
|
|
|
test("doubled and isolated pawns are penalised against a clean structure") {
|
|
val clean = e("4k3/8/8/8/8/8/1PP5/4K3 w - - 0 1")
|
|
val doubled = e("4k3/8/8/8/8/1P6/1P6/4K3 w - - 0 1")
|
|
assert(clean > doubled, s"clean $clean should beat doubled $doubled")
|
|
}
|
|
|
|
test("a centralised knight is worth more than a cornered one") {
|
|
val center = e("4k3/8/8/8/4N3/8/8/4K3 w - - 0 1")
|
|
val corner = e("4k3/8/8/8/8/8/8/N3K3 w - - 0 1")
|
|
assert(center > corner, s"center $center should beat corner $corner")
|
|
}
|
|
|
|
test("the bishop pair scores above two knights") {
|
|
val bishops = e("4k3/8/8/8/8/8/8/2B1KB2 w - - 0 1")
|
|
val knights = e("4k3/8/8/8/8/8/8/1N2KN2 w - - 0 1")
|
|
assert(bishops > knights, s"bishop pair $bishops should beat knight pair $knights")
|
|
}
|
|
|
|
test("an exposed king is worse than a king behind its pawn shield") {
|
|
val sheltered = e("6k1/5ppp/8/8/8/8/5PPP/6K1 w - - 0 1")
|
|
val exposed = e("5k2/5ppp/8/8/8/8/5PPP/K7 w - - 0 1")
|
|
assert(exposed < sheltered, s"exposed $exposed should be worse than sheltered $sheltered")
|
|
}
|
|
|
|
test("an enemy queen next to the king adds king danger") {
|
|
val far = e("6k1/5ppp/8/8/q7/8/5PPP/6K1 w - - 0 1")
|
|
val near = e("6k1/5ppp/8/8/8/5q2/5PPP/6K1 w - - 0 1")
|
|
assert(near < far, s"queen next to the king ($near) should score worse than far ($far)")
|
|
}
|
|
|
|
test("a passed pawn is worth more than a blockaded one") {
|
|
val passed = e("4k3/2p4p/8/4P3/8/8/P7/4K3 w - - 0 1")
|
|
val blocked = e("4k3/7p/4p3/4P3/8/8/P7/4K3 w - - 0 1")
|
|
assert(passed > blocked, s"passed $passed should beat blocked $blocked")
|
|
}
|
|
|
|
test("a rook on an open file scores above one behind its own pawn") {
|
|
val open = e("3rk3/p7/8/8/8/8/P7/3RK3 w - - 0 1")
|
|
val closed = e("3rk3/p7/8/8/8/8/3P4/3RK3 w - - 0 1")
|
|
assert(closed < open, s"closed file $closed should be worse than open $open")
|
|
}
|