mirror of
https://github.com/Vale54321/schafkopf-bot.git
synced 2025-12-16 11:49:33 +01:00
479 lines
14 KiB
Kotlin
479 lines
14 KiB
Kotlin
import de.heiserer.cards.Card
|
|
import de.heiserer.cards.CardColor
|
|
import de.heiserer.cards.GameType
|
|
import de.heiserer.cards.UnsortedCardList
|
|
import org.junit.jupiter.api.Assertions.*
|
|
import org.junit.jupiter.api.Test
|
|
import org.junit.jupiter.params.ParameterizedTest
|
|
import org.junit.jupiter.params.provider.MethodSource
|
|
|
|
class UnsortedListTest {
|
|
@Test
|
|
fun `init with all cards`() {
|
|
assertEquals(32, UnsortedCardList(true).size())
|
|
}
|
|
}
|
|
|
|
class SortingCardsTest {
|
|
private val defaultList = listOf(
|
|
Card.SCHELL_7,
|
|
Card.SCHELL_K,
|
|
Card.BLATT_8,
|
|
Card.BLATT_9,
|
|
Card.EICHEL_A,
|
|
Card.HERZ_X,
|
|
Card.EICHEL_U,
|
|
Card.HERZ_O
|
|
)
|
|
|
|
companion object {
|
|
@JvmStatic
|
|
fun gameTypeProvider() = GameType.values().asList()
|
|
}
|
|
|
|
private fun testCardSorting(expectedCards: List<Card>, gameType: GameType) {
|
|
// ARRANGE
|
|
var cards = UnsortedCardList()
|
|
defaultList.shuffled().forEach {
|
|
cards.add(it)
|
|
}
|
|
|
|
// ACT
|
|
cards = cards.asSortedCardList(gameType)
|
|
|
|
// ASSERT
|
|
assertEquals(expectedCards.size, cards.size())
|
|
expectedCards.forEachIndexed { index, card ->
|
|
assertEquals(card, cards.get(index))
|
|
}
|
|
}
|
|
|
|
private fun expectedCardsForGameType(gameType: GameType): List<Card> {
|
|
return when(gameType) {
|
|
GameType.RAMSCH -> defaultList
|
|
GameType.SAU_SPIEL -> defaultList
|
|
GameType.BETTEL -> defaultList
|
|
|
|
GameType.SCHELL_GEIER -> listOf(
|
|
Card.HERZ_X,
|
|
Card.BLATT_8,
|
|
Card.BLATT_9,
|
|
Card.EICHEL_U,
|
|
Card.EICHEL_A,
|
|
Card.SCHELL_7,
|
|
Card.SCHELL_K,
|
|
Card.HERZ_O
|
|
)
|
|
GameType.HERZ_GEIER -> listOf(
|
|
Card.SCHELL_7,
|
|
Card.SCHELL_K,
|
|
Card.BLATT_8,
|
|
Card.BLATT_9,
|
|
Card.EICHEL_U,
|
|
Card.EICHEL_A,
|
|
Card.HERZ_X,
|
|
Card.HERZ_O
|
|
)
|
|
GameType.BLATT_GEIER -> listOf(
|
|
Card.SCHELL_7,
|
|
Card.SCHELL_K,
|
|
Card.HERZ_X,
|
|
Card.EICHEL_U,
|
|
Card.EICHEL_A,
|
|
Card.BLATT_8,
|
|
Card.BLATT_9,
|
|
Card.HERZ_O
|
|
)
|
|
GameType.EICHEL_GEIER -> listOf(
|
|
Card.SCHELL_7,
|
|
Card.SCHELL_K,
|
|
Card.HERZ_X,
|
|
Card.BLATT_8,
|
|
Card.BLATT_9,
|
|
Card.EICHEL_U,
|
|
Card.EICHEL_A,
|
|
Card.HERZ_O
|
|
)
|
|
|
|
GameType.SCHELL_WENZ -> listOf(
|
|
Card.HERZ_O,
|
|
Card.HERZ_X,
|
|
Card.BLATT_8,
|
|
Card.BLATT_9,
|
|
Card.EICHEL_A,
|
|
Card.SCHELL_7,
|
|
Card.SCHELL_K,
|
|
Card.EICHEL_U,
|
|
)
|
|
GameType.HERZ_WENZ -> listOf(
|
|
Card.SCHELL_7,
|
|
Card.SCHELL_K,
|
|
Card.BLATT_8,
|
|
Card.BLATT_9,
|
|
Card.EICHEL_A,
|
|
Card.HERZ_O,
|
|
Card.HERZ_X,
|
|
Card.EICHEL_U
|
|
)
|
|
GameType.BLATT_WENZ -> listOf(
|
|
Card.SCHELL_7,
|
|
Card.SCHELL_K,
|
|
Card.HERZ_O,
|
|
Card.HERZ_X,
|
|
Card.EICHEL_A,
|
|
Card.BLATT_8,
|
|
Card.BLATT_9,
|
|
Card.EICHEL_U,
|
|
)
|
|
GameType.EICHEL_WENZ -> listOf(
|
|
Card.SCHELL_7,
|
|
Card.SCHELL_K,
|
|
Card.HERZ_O,
|
|
Card.HERZ_X,
|
|
Card.BLATT_8,
|
|
Card.BLATT_9,
|
|
Card.EICHEL_A,
|
|
Card.EICHEL_U
|
|
)
|
|
|
|
GameType.GEIER -> listOf(
|
|
Card.SCHELL_7,
|
|
Card.SCHELL_K,
|
|
Card.HERZ_X,
|
|
Card.BLATT_8,
|
|
Card.BLATT_9,
|
|
Card.EICHEL_U,
|
|
Card.EICHEL_A,
|
|
Card.HERZ_O
|
|
)
|
|
GameType.WENZ -> listOf(
|
|
Card.SCHELL_7,
|
|
Card.SCHELL_K,
|
|
Card.HERZ_O,
|
|
Card.HERZ_X,
|
|
Card.BLATT_8,
|
|
Card.BLATT_9,
|
|
Card.EICHEL_A,
|
|
Card.EICHEL_U,
|
|
)
|
|
|
|
GameType.SCHELL_SOLO -> listOf(
|
|
Card.HERZ_X,
|
|
Card.BLATT_8,
|
|
Card.BLATT_9,
|
|
Card.EICHEL_A,
|
|
Card.SCHELL_7,
|
|
Card.SCHELL_K,
|
|
Card.EICHEL_U,
|
|
Card.HERZ_O
|
|
)
|
|
GameType.BLATT_SOLO -> listOf(
|
|
Card.SCHELL_7,
|
|
Card.SCHELL_K,
|
|
Card.HERZ_X,
|
|
Card.EICHEL_A,
|
|
Card.BLATT_8,
|
|
Card.BLATT_9,
|
|
Card.EICHEL_U,
|
|
Card.HERZ_O
|
|
)
|
|
GameType.EICHEL_SOLO -> listOf(
|
|
Card.SCHELL_7,
|
|
Card.SCHELL_K,
|
|
Card.HERZ_X,
|
|
Card.BLATT_8,
|
|
Card.BLATT_9,
|
|
Card.EICHEL_A,
|
|
Card.EICHEL_U,
|
|
Card.HERZ_O
|
|
)
|
|
GameType.HERZ_SOLO -> defaultList
|
|
else -> throw IllegalArgumentException("No expected cards defined for gameType: $gameType")
|
|
}
|
|
}
|
|
|
|
@ParameterizedTest(name = "test sorting for {0}") // This gives a clear name in the test output
|
|
@MethodSource("gameTypeProvider")
|
|
fun `test sorting for all game types`(gameType: GameType) {
|
|
// ARRANGE
|
|
val expectedCards = expectedCardsForGameType(gameType)
|
|
|
|
// ACT & ASSERT
|
|
testCardSorting(expectedCards, gameType)
|
|
}
|
|
|
|
|
|
|
|
|
|
private fun testGetTrumpfCard(expectedCards: List<Card>, gameType: GameType) {
|
|
// ARRANGE
|
|
var cards = UnsortedCardList()
|
|
defaultList.shuffled().forEach {
|
|
cards.add(it)
|
|
}
|
|
|
|
// ACT
|
|
cards = cards.asSortedCardList(gameType).getTrumpf()
|
|
|
|
// ASSERT
|
|
expectedCards.forEachIndexed { index, card ->
|
|
assertEquals(card, cards.get(index))
|
|
}
|
|
}
|
|
|
|
private fun expectedTrumpfCardsForGameType(gameType: GameType): List<Card> {
|
|
val herzList = listOf(
|
|
Card.HERZ_X,
|
|
Card.EICHEL_U,
|
|
Card.HERZ_O
|
|
)
|
|
return when(gameType) {
|
|
GameType.RAMSCH -> herzList
|
|
GameType.SAU_SPIEL -> herzList
|
|
GameType.BETTEL -> herzList
|
|
|
|
GameType.SCHELL_GEIER -> listOf(
|
|
Card.SCHELL_7,
|
|
Card.SCHELL_K,
|
|
Card.HERZ_O
|
|
)
|
|
GameType.HERZ_GEIER -> listOf(
|
|
Card.HERZ_X,
|
|
Card.HERZ_O
|
|
)
|
|
GameType.BLATT_GEIER -> listOf(
|
|
Card.BLATT_8,
|
|
Card.BLATT_9,
|
|
Card.HERZ_O
|
|
)
|
|
GameType.EICHEL_GEIER -> listOf(
|
|
Card.EICHEL_U,
|
|
Card.EICHEL_A,
|
|
Card.HERZ_O
|
|
)
|
|
|
|
GameType.SCHELL_WENZ -> listOf(
|
|
Card.SCHELL_7,
|
|
Card.SCHELL_K,
|
|
Card.EICHEL_U,
|
|
)
|
|
GameType.HERZ_WENZ -> listOf(
|
|
Card.HERZ_O,
|
|
Card.HERZ_X,
|
|
Card.EICHEL_U
|
|
)
|
|
GameType.BLATT_WENZ -> listOf(
|
|
Card.BLATT_8,
|
|
Card.BLATT_9,
|
|
Card.EICHEL_U,
|
|
)
|
|
GameType.EICHEL_WENZ -> listOf(
|
|
Card.EICHEL_A,
|
|
Card.EICHEL_U
|
|
)
|
|
|
|
GameType.GEIER -> listOf(
|
|
Card.HERZ_O
|
|
)
|
|
GameType.WENZ -> listOf(
|
|
Card.EICHEL_U,
|
|
)
|
|
|
|
GameType.SCHELL_SOLO -> listOf(
|
|
Card.SCHELL_7,
|
|
Card.SCHELL_K,
|
|
Card.EICHEL_U,
|
|
Card.HERZ_O
|
|
)
|
|
GameType.BLATT_SOLO -> listOf(
|
|
Card.BLATT_8,
|
|
Card.BLATT_9,
|
|
Card.EICHEL_U,
|
|
Card.HERZ_O
|
|
)
|
|
GameType.EICHEL_SOLO -> listOf(
|
|
Card.EICHEL_A,
|
|
Card.EICHEL_U,
|
|
Card.HERZ_O
|
|
)
|
|
GameType.HERZ_SOLO -> herzList
|
|
else -> throw IllegalArgumentException("No expected cards defined for gameType: $gameType")
|
|
}
|
|
}
|
|
|
|
@ParameterizedTest(name = "test get Trumpfcards for {0}") // This gives a clear name in the test output
|
|
@MethodSource("gameTypeProvider")
|
|
fun `test get Trumpfcards for all game types`(gameType: GameType) {
|
|
// ARRANGE
|
|
val expectedCards = expectedTrumpfCardsForGameType(gameType)
|
|
|
|
// ACT & ASSERT
|
|
testGetTrumpfCard(expectedCards, gameType)
|
|
}
|
|
|
|
|
|
|
|
private fun testCardsWithoutTrumpf(expectedCards: List<Card>, gameType: GameType) {
|
|
// ARRANGE
|
|
var cards = UnsortedCardList()
|
|
defaultList.shuffled().forEach {
|
|
cards.add(it)
|
|
}
|
|
|
|
// ACT
|
|
cards = cards.asSortedCardList(gameType).getCardsWithoutTrumpf()
|
|
|
|
// ASSERT
|
|
expectedCards.forEachIndexed { index, card ->
|
|
assertEquals(card, cards.get(index))
|
|
}
|
|
}
|
|
|
|
private fun expectedCardsWithoutTrumpfForGameType(gameType: GameType): List<Card> {
|
|
val herzList = listOf(
|
|
Card.SCHELL_7,
|
|
Card.SCHELL_K,
|
|
Card.BLATT_8,
|
|
Card.BLATT_9,
|
|
Card.EICHEL_A,
|
|
)
|
|
return when(gameType) {
|
|
GameType.RAMSCH -> herzList
|
|
GameType.SAU_SPIEL -> herzList
|
|
GameType.BETTEL -> herzList
|
|
|
|
GameType.SCHELL_GEIER -> listOf(
|
|
Card.HERZ_X,
|
|
Card.BLATT_8,
|
|
Card.BLATT_9,
|
|
Card.EICHEL_U,
|
|
Card.EICHEL_A,
|
|
)
|
|
GameType.HERZ_GEIER -> listOf(
|
|
Card.SCHELL_7,
|
|
Card.SCHELL_K,
|
|
Card.BLATT_8,
|
|
Card.BLATT_9,
|
|
Card.EICHEL_U,
|
|
Card.EICHEL_A,
|
|
)
|
|
GameType.BLATT_GEIER -> listOf(
|
|
Card.SCHELL_7,
|
|
Card.SCHELL_K,
|
|
Card.HERZ_X,
|
|
Card.EICHEL_U,
|
|
Card.EICHEL_A,
|
|
)
|
|
GameType.EICHEL_GEIER -> listOf(
|
|
Card.SCHELL_7,
|
|
Card.SCHELL_K,
|
|
Card.HERZ_X,
|
|
Card.BLATT_8,
|
|
Card.BLATT_9,
|
|
)
|
|
|
|
GameType.SCHELL_WENZ -> listOf(
|
|
Card.HERZ_O,
|
|
Card.HERZ_X,
|
|
Card.BLATT_8,
|
|
Card.BLATT_9,
|
|
Card.EICHEL_A,
|
|
)
|
|
GameType.HERZ_WENZ -> listOf(
|
|
Card.SCHELL_7,
|
|
Card.SCHELL_K,
|
|
Card.BLATT_8,
|
|
Card.BLATT_9,
|
|
Card.EICHEL_A,
|
|
)
|
|
GameType.BLATT_WENZ -> listOf(
|
|
Card.SCHELL_7,
|
|
Card.SCHELL_K,
|
|
Card.HERZ_O,
|
|
Card.HERZ_X,
|
|
Card.EICHEL_A,
|
|
)
|
|
GameType.EICHEL_WENZ -> listOf(
|
|
Card.SCHELL_7,
|
|
Card.SCHELL_K,
|
|
Card.HERZ_O,
|
|
Card.HERZ_X,
|
|
Card.BLATT_8,
|
|
Card.BLATT_9,
|
|
)
|
|
|
|
GameType.GEIER -> listOf(
|
|
Card.SCHELL_7,
|
|
Card.SCHELL_K,
|
|
Card.HERZ_X,
|
|
Card.BLATT_8,
|
|
Card.BLATT_9,
|
|
Card.EICHEL_U,
|
|
Card.EICHEL_A,
|
|
)
|
|
GameType.WENZ -> listOf(
|
|
Card.SCHELL_7,
|
|
Card.SCHELL_K,
|
|
Card.HERZ_O,
|
|
Card.HERZ_X,
|
|
Card.BLATT_8,
|
|
Card.BLATT_9,
|
|
Card.EICHEL_A,
|
|
)
|
|
|
|
GameType.SCHELL_SOLO -> listOf(
|
|
Card.HERZ_X,
|
|
Card.BLATT_8,
|
|
Card.BLATT_9,
|
|
Card.EICHEL_A,
|
|
)
|
|
GameType.BLATT_SOLO -> listOf(
|
|
Card.SCHELL_7,
|
|
Card.SCHELL_K,
|
|
Card.HERZ_X,
|
|
Card.EICHEL_A,
|
|
)
|
|
GameType.EICHEL_SOLO -> listOf(
|
|
Card.SCHELL_7,
|
|
Card.SCHELL_K,
|
|
Card.HERZ_X,
|
|
Card.BLATT_8,
|
|
Card.BLATT_9,
|
|
)
|
|
GameType.HERZ_SOLO -> herzList
|
|
else -> throw IllegalArgumentException("No expected cards defined for gameType: $gameType")
|
|
}
|
|
}
|
|
|
|
@ParameterizedTest(name = "test get Cards without Trumpf for {0}") // This gives a clear name in the test output
|
|
@MethodSource("gameTypeProvider")
|
|
fun `test get Cards without Trumpf for all game types`(gameType: GameType) {
|
|
// ARRANGE
|
|
val expectedCards = expectedCardsWithoutTrumpfForGameType(gameType)
|
|
|
|
// ACT & ASSERT
|
|
testCardsWithoutTrumpf(expectedCards, gameType)
|
|
}
|
|
|
|
@Test
|
|
fun `test get Cards without Trumpf with Color`() {
|
|
// ARRANGE
|
|
var cards = UnsortedCardList()
|
|
defaultList.shuffled().forEach {
|
|
cards.add(it)
|
|
}
|
|
|
|
val expectedCards = listOf(
|
|
Card.BLATT_8,
|
|
Card.BLATT_9,
|
|
)
|
|
|
|
// ACT
|
|
cards = cards.asSortedCardList(GameType.SAU_SPIEL).getCardsWithoutTrumpf(CardColor.BLATT)
|
|
|
|
// ASSERT
|
|
expectedCards.forEachIndexed { index, card ->
|
|
assertEquals(card, cards.get(index))
|
|
}
|
|
}
|
|
} |