mirror of
https://github.com/TheRealOwenRees/chess-endgame-trainer.git
synced 2026-09-19 11:03:52 +00:00
* create endgame play section * add cache tests * normalise FENs - trim and fuill move to 1 on addition * remove svg on root and allow navbar to exist across all pages * update nav items
45 lines
1.2 KiB
Elixir
45 lines
1.2 KiB
Elixir
defmodule Chesstrainer.EndgamesFixtures do
|
|
@moduledoc """
|
|
This module defines test helpers for creating
|
|
entities via the `Chesstrainer.Endgames` context.
|
|
"""
|
|
|
|
@doc """
|
|
Generate a unique endgame FEN.
|
|
|
|
Endgames have a unique constraint on :fen, so tests need
|
|
distinct FENs when inserting more than one. Each call
|
|
shifts the white king's file to avoid FEN collisions.
|
|
"""
|
|
def unique_endgame_fen do
|
|
# White king on rank 1 in columns b..g, leaving 1-6 empty squares
|
|
# before and 6-1 after. Both before_king and after_king are valid
|
|
# single digits (1-8), and the rank sums to 8.
|
|
offset = System.unique_integer([:positive]) |> rem(6)
|
|
before_king = offset + 1
|
|
after_king = 7 - before_king
|
|
"4k3/8/8/8/8/8/8/#{before_king}K#{after_king} w - - 0 1"
|
|
end
|
|
|
|
@doc """
|
|
Generate an endgame.
|
|
|
|
A simple K v K position with a unique FEN, color,
|
|
key, rating, and result.
|
|
"""
|
|
def endgame_fixture(attrs \\ %{}) do
|
|
{:ok, endgame} =
|
|
attrs
|
|
|> Enum.into(%{
|
|
fen: unique_endgame_fen(),
|
|
key: "KQ v K",
|
|
color: :white,
|
|
result: :win,
|
|
rating: 1500
|
|
})
|
|
|> Chesstrainer.Endgames.create_endgame()
|
|
|
|
endgame
|
|
end
|
|
end
|