Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

use fishnetKey and remove fairysfname #225

Merged
merged 1 commit into from
Mar 3, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion build.sbt
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ name := "strategygames"

organization := "org.playstrategy"

version := "10.2.1-pstrat175"
version := "10.2.1-pstrat176"

scalaVersion := "2.13.10"

Expand Down
9 changes: 6 additions & 3 deletions src/main/scala/chess/variant/Variant.scala
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,12 @@ abstract class Variant private[variant] (
) {

val fishnetKey = key match {
case "fiveCheck" => "5check"
case "noCastling" => "nocastle"
case _ => key
case "threeCheck" => "3check"
case "fiveCheck" => "5check"
case "noCastling" => "nocastle"
case "racingKings" => "racingkings"
case "kingOfTheHill" => "kingofthehill"
case _ => key // defaults to chess in fairystockfish if unknown
}

def pieces: Map[Pos, Piece]
Expand Down
4 changes: 2 additions & 2 deletions src/main/scala/fairysf/Api.scala
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ object Api {
// at the moment
// NOTE: this means we can't use this API to test chess related things
// only the variants we support
val variant = Variant.byFairySFName(position.variant())
val variant = Variant.byFishnetKey(position.variant())

def makeMoves(movesList: List[String]): Position =
if (movesList.isEmpty) this
Expand Down Expand Up @@ -133,7 +133,7 @@ object Api {
}

def positionFromVariant(variant: Variant): Position =
new FairyPosition(new FairyStockfish.Position(variant.fairysfName.name))
new FairyPosition(new FairyStockfish.Position(variant.fishnetKey))

def positionFromVariantName(variantName: String): Position =
new FairyPosition(new FairyStockfish.Position(variantName))
Expand Down
2 changes: 1 addition & 1 deletion src/main/scala/fairysf/format/Forsyth.scala
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ object Forsyth {
Some(History(currentTurn = uciMove.toList))
)
} else (fen, None, None)
val apiPosition = Api.positionFromVariantNameAndFEN(variant.fairysfName.name, fsfFen.value)
val apiPosition = Api.positionFromVariantNameAndFEN(variant.fishnetKey, fsfFen.value)
Some(
Situation(
Board(
Expand Down
4 changes: 2 additions & 2 deletions src/main/scala/fairysf/variant/Amazons.scala
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ case object Amazons
key = "amazons",
name = "Amazons",
standardInitialPosition = true,
fairysfName = FairySFName("amazons"),
fishnetKey = "amazons",
boardSize = Board.Dim10x10
) {

Expand Down Expand Up @@ -152,7 +152,7 @@ case object Amazons
}

override def valid(board: Board, strict: Boolean): Boolean =
Api.validateFEN(fairysfName.name, board.apiPosition.fen.value)
Api.validateFEN(fishnetKey, board.apiPosition.fen.value)

override def staleMate(situation: Situation): Boolean = false
override def specialEnd(situation: Situation): Boolean = situation.board.apiPosition.legalMoves.isEmpty
Expand Down
2 changes: 1 addition & 1 deletion src/main/scala/fairysf/variant/BreakthroughTroyka.scala
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ case object BreakthroughTroyka
key = "breakthroughtroyka",
name = "Breakthrough",
standardInitialPosition = true,
fairysfName = FairySFName("breakthrough"),
fishnetKey = "breakthrough",
boardSize = Board.Dim8x8
) {

Expand Down
2 changes: 1 addition & 1 deletion src/main/scala/fairysf/variant/Flipello.scala
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ case object Flipello
key = "flipello",
name = "Flipello",
standardInitialPosition = true,
fairysfName = FairySFName("ps-flipello"),
fishnetKey = "ps-flipello",
boardSize = Board.Dim8x8
) {

Expand Down
2 changes: 1 addition & 1 deletion src/main/scala/fairysf/variant/Flipello10.scala
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ case object Flipello10
key = "flipello10",
name = "Flipello10",
standardInitialPosition = true,
fairysfName = FairySFName("ps-flipello10"),
fishnetKey = "ps-flipello10",
boardSize = Board.Dim10x10
) {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ case object MiniBreakthroughTroyka
key = "minibreakthroughtroyka",
name = "Mini Breakthrough",
standardInitialPosition = true,
fairysfName = FairySFName("ps-minibreakthrough"),
fishnetKey = "ps-minibreakthrough",
boardSize = Board.Dim5x5
) {

Expand Down
2 changes: 1 addition & 1 deletion src/main/scala/fairysf/variant/MiniShogi.scala
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ case object MiniShogi
key = "minishogi",
name = "Mini Shogi",
standardInitialPosition = true,
fairysfName = FairySFName("minishogi"),
fishnetKey = "minishogi",
boardSize = Board.Dim5x5
) {

Expand Down
2 changes: 1 addition & 1 deletion src/main/scala/fairysf/variant/MiniXiangqi.scala
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ case object MiniXiangqi
key = "minixiangqi",
name = "Mini Xiangqi",
standardInitialPosition = true,
fairysfName = FairySFName("ps-minixiangqi"),
fishnetKey = "ps-minixiangqi",
boardSize = Board.Dim7x7
) {

Expand Down
2 changes: 1 addition & 1 deletion src/main/scala/fairysf/variant/Shogi.scala
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ case object Shogi
key = "shogi",
name = "Shogi",
standardInitialPosition = true,
fairysfName = FairySFName("shogi"),
fishnetKey = "shogi",
boardSize = Board.Dim9x9
) {

Expand Down
16 changes: 7 additions & 9 deletions src/main/scala/fairysf/variant/Variant.scala
Original file line number Diff line number Diff line change
Expand Up @@ -9,15 +9,13 @@ import strategygames.fairysf.format.{ FEN, Forsyth, Uci }
import strategygames.fairysf.format.pgn.Binary
import strategygames.{ GameFamily, Player }

case class FairySFName(val name: String)

// Correctness depends on singletons for each variant ID
abstract class Variant private[variant] (
val id: Int,
val key: String,
val name: String,
val standardInitialPosition: Boolean,
val fairysfName: FairySFName,
val fishnetKey: String,
val boardSize: Board.BoardSize
) {

Expand Down Expand Up @@ -48,11 +46,11 @@ abstract class Variant private[variant] (
def perfId: Int
def perfIcon: Char

def initialFen: FEN = Api.initialFen(fairysfName.name)
def initialFen: FEN = Api.initialFen(fishnetKey)

lazy val position: Api.Position = Api.positionFromVariantName(this.fairysfName.name)
lazy val position: Api.Position = Api.positionFromVariantName(fishnetKey)

def pieces: Map[Pos, Piece] = Api.pieceMapFromFen(fairysfName.name, initialFen.value)
def pieces: Map[Pos, Piece] = Api.pieceMapFromFen(fishnetKey, initialFen.value)

def exportBoardFen(board: Board): FEN = board.apiPosition.fen

Expand Down Expand Up @@ -239,7 +237,7 @@ abstract class Variant private[variant] (
board

def valid(board: Board, @nowarn strict: Boolean): Boolean =
Api.validateFEN(fairysfName.name, Forsyth.exportBoard(board))
Api.validateFEN(fishnetKey, Forsyth.exportBoard(board))

val roles: List[Role] = Role.all

Expand Down Expand Up @@ -291,8 +289,8 @@ object Variant {
val byKey = all map { v =>
(v.key, v)
} toMap
val byFairySFName = all map { v =>
(v.fairysfName.name, v)
val byFishnetKey = all map { v =>
(v.fishnetKey, v)
} toMap

val default = Shogi
Expand Down
2 changes: 1 addition & 1 deletion src/main/scala/fairysf/variant/Xiangqi.scala
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ case object Xiangqi
key = "xiangqi",
name = "Xiangqi",
standardInitialPosition = true,
fairysfName = FairySFName("ps-xiangqi"),
fishnetKey = "ps-xiangqi",
boardSize = Board.Dim9x10
) {

Expand Down
2 changes: 1 addition & 1 deletion src/main/scala/variant/Variant.scala
Original file line number Diff line number Diff line change
Expand Up @@ -351,7 +351,7 @@ object Variant {
extends Variant(
id = v.id,
key = v.key,
fishnetKey = v.fairysfName.name,
fishnetKey = v.fishnetKey,
name = v.name,
standardInitialPosition = v.standardInitialPosition
) {
Expand Down
2 changes: 1 addition & 1 deletion src/test/scala/fairysf/AmazonsApiTest.scala
Original file line number Diff line number Diff line change
Expand Up @@ -180,7 +180,7 @@ class AmazonsApiTest extends FairySFTest {
}
"be valid" in {
// NOTE: this test only makes sense at the API level, because we can convert it
val name = variant.Amazons.fairysfName.name
val name = variant.Amazons.fishnetKey
val initialFen = Api.toFairySFFen(name, variant.Amazons.initialFen.value)
FairyStockfish.validateFEN(name, initialFen) must_== true
}
Expand Down
4 changes: 2 additions & 2 deletions src/test/scala/fairysf/BoardApiTest.scala
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ class FairyStockfishBoardApiTest extends Specification with ValidatedMatchers {
val position = Api.positionFromVariant(variant.Shogi)
"be valid" in {
Api.validateFEN(
variant.Shogi.fairysfName.name,
variant.Shogi.fishnetKey,
variant.Shogi.initialFen.value
) must_== true
}
Expand Down Expand Up @@ -37,7 +37,7 @@ class FairyStockfishBoardApiTest extends Specification with ValidatedMatchers {
}
"be valid" in {
Api.validateFEN(
variant.Xiangqi.fairysfName.name,
variant.Xiangqi.fishnetKey,
variant.Xiangqi.initialFen.value
) must_== true
}
Expand Down
6 changes: 3 additions & 3 deletions src/test/scala/fairysf/FairyStockfishTest.scala
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ class FairyStockfishTest extends Specification with ValidatedMatchers {
"Shogi initial fen" should {
"be valid" in {
FairyStockfish.validateFEN(
variant.Shogi.fairysfName.name,
variant.Shogi.fishnetKey,
variant.Shogi.initialFen.value
) must_== true
}
Expand All @@ -30,7 +30,7 @@ class FairyStockfishTest extends Specification with ValidatedMatchers {
"Shogi initial fen minus middle rank" should {
"be invalid" in {
FairyStockfish.validateFEN(
variant.Shogi.fairysfName.name,
variant.Shogi.fishnetKey,
"lnsgkgsnl/1r5b1/ppppppppp/9/9/PPPPPPPPP/1B5R1/LNSGKGSNL[] w - - 0 1"
) must_== false
}
Expand All @@ -39,7 +39,7 @@ class FairyStockfishTest extends Specification with ValidatedMatchers {
"Random string" should {
"be invalid fen" in {
FairyStockfish.validateFEN(
variant.Shogi.fairysfName.name,
variant.Shogi.fishnetKey,
"I'm a Shogi FEN! (not)"
) must_== false
}
Expand Down
Loading