diff --git a/shared/src/main/scala/com/mogproject/mogami/core/State.scala b/shared/src/main/scala/com/mogproject/mogami/core/State.scala index 4ae5030..f980b8b 100644 --- a/shared/src/main/scala/com/mogproject/mogami/core/State.scala +++ b/shared/src/main/scala/com/mogproject/mogami/core/State.scala @@ -257,6 +257,10 @@ case class State(turn: Player = BLACK, board: BoardType = Map.empty, hand: HandT case None => List() } + /** + * Check if the in-hand piece is non-empty. + */ + def hasHand(h: Hand): Boolean = hand.get(h).exists(_ > 0) } object State extends CsaStateReader with SfenStateReader { diff --git a/shared/src/test/scala/com/mogproject/mogami/core/StateSpec.scala b/shared/src/test/scala/com/mogproject/mogami/core/StateSpec.scala index 77b1549..fa909ed 100644 --- a/shared/src/test/scala/com/mogproject/mogami/core/StateSpec.scala +++ b/shared/src/test/scala/com/mogproject/mogami/core/StateSpec.scala @@ -882,4 +882,11 @@ class StateSpec extends FlatSpec with MustMatchers with GeneratorDrivenPropertyC |P-00HI00KA00KI00GI00KE00KY00FU |-""".stripMargin).get.isMated mustBe false } + + "State#hasHand" must "return if the in-hand piece exists" in { + State.HIRATE.hasHand(Hand(BP)) mustBe false + State.empty.updateHandPiece(BP, 1).get.hasHand(Hand(BP)) mustBe true + State.empty.updateHandPiece(BP, 2).get.hasHand(Hand(BP)) mustBe true + State.empty.updateHandPiece(BP, 18).get.hasHand(Hand(BP)) mustBe true + } } \ No newline at end of file