1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
| require "./const"
require "colorize"
module Fork
module Benchmark
extend self
def run
board = Board.new("k7/7P/5K1/7q/8/8/8/8 b - - 0 1")
run_benchmark("queen not attacking", board, [{H5, H7}])
board = Board.new("r5rk/5p1p/5R2/4B3/8/8/7P/7K w - - 0 1")
run_benchmark("discovered checkmate", board, [{F6, A6}, {F7, F6}, {E5, F6}, {G8, G7}, {A6, A8}])
board = Board.new("R2qkbnr/3n1ppp/3P4/8/4P3/1p3N1P/2P2PP1/1NBQ1RK1 b - - 0 1")
run_benchmark("take that rook fast bro", board, [{D8, A8}])
board = Board.new("kb1r4/b2p4/8/2P5/8/5Q2/8/2K5 b - - 0 1")
run_benchmark("double push & en passant", board, [{D7, D5}, {C5, D6}])
end
private def run_benchmark(name, board, moves)
engine_moves = [] of Move
elapsed_time = Time.measure do
moves.size.times do
res = Search.new(board, 6).run
if m = res.first
board.make_move(m)
engine_moves << m
end
end
end
puts "#{name}: time: #{elapsed_time}"
moves.each_with_index do |m, i|
from, to = m
em = engine_moves[i]
ok = from == em.from && to == em.to
status_test = ok ? "OK".colorize(:green) : "WRONG".colorize(:red)
puts "#{status_test}: wanted: #{Fork.square_to_text(from)}-#{Fork.square_to_text(to)} was: #{Fork.square_to_text(em.from)}-#{Fork.square_to_text(em.to)}"
end
end
end
end
|