Files
game-cards/tests/test_hand_evaluator.gd

72 lines
2.3 KiB
GDScript

extends GutTest
var _config: RuleConfig
const _C = preload("res://src/core/constants.gd")
func before_each():
_config = RuleConfig.standard()
func _card(orig_id: int, deck_idx: int = 0) -> Card:
var suit: int
var rank: int
if orig_id == 52:
suit = 4; rank = 15
elif orig_id == 53:
suit = 5; rank = 16
else:
suit = orig_id % 4
rank = 2 + (orig_id / 4)
var c := Card.create(orig_id, suit, rank)
c.card_id = Card.card_id_from_deck(orig_id, deck_idx)
return c
func _cards(ids: Array) -> Array[Card]:
var result: Array[Card] = []
for spec in ids:
if spec is int:
result.append(_card(spec as int))
elif spec is Array:
result.append(_card(spec[0] as int, spec[1] as int))
return result
func test_single():
var cards := _cards([0])
var result := HandEvaluator.evaluate(cards, 5, _config)
assert_eq(result.type, _C.TYPE_SINGLE)
func test_pair():
# Two cards of same rank from different decks
var cards: Array[Card] = [_card(0, 0), _card(0, 1)]
var result := HandEvaluator.evaluate(cards, 5, _config)
assert_eq(result.type, _C.TYPE_PAIR)
func test_straight():
# 3,4,5,6,7: orig_ids 4,8,12,16,20 (all from deck 0)
var cards := _cards([4, 8, 12, 16, 20])
var result := HandEvaluator.evaluate(cards, 5, _config)
assert_eq(result.type, _C.TYPE_STRAIGHT)
assert_eq(result.primary_rank, 7)
func test_not_a_combo():
var cards := _cards([0, 1, 2])
var result := HandEvaluator.evaluate(cards, 5, _config)
assert_eq(result.type, HandEvaluator.INVALID)
func test_bomb():
# Four 2s: same orig_id from both decks
var cards: Array[Card] = [_card(0, 0), _card(0, 1), _card(1, 0), _card(1, 1)]
var result := HandEvaluator.evaluate(cards, 5, _config)
assert_eq(result.type, _C.TYPE_BOMB)
assert_eq(result.primary_rank, 2)
assert_true(result.is_pure_bomb)
func test_rocket():
var cards: Array[Card] = [_card(52, 0), _card(52, 1), _card(53, 0), _card(53, 1)]
var result := HandEvaluator.evaluate(cards, 5, _config)
assert_eq(result.type, _C.TYPE_ROCKET)
func test_evaluator_null_on_empty():
var cards: Array[Card] = []
var result := HandEvaluator.evaluate(cards, 5, _config)
assert_null(result)