package ws import ( "testing" "hakemsho/internal/game" ) func card(s game.Suit, r game.Rank) game.Card { return game.Card{Suit: s, Rank: r} } func TestBotWinsWhenOpponentLeads(t *testing.T) { // حریف با شاهِ پیک رهبری کرده؛ بات باید با آسِ پیک (کمترین کارتِ برنده) ببرد. hand := []game.Card{card(game.Spades, game.Ace), card(game.Spades, 3), card(game.Clubs, 5)} trick := []game.TrickCard{{Seat: 0, Card: card(game.Spades, game.King)}} got := botPlay(hand, trick, game.Hearts, game.Spades) if got != card(game.Spades, game.Ace) { t.Errorf("expected S-A to win, got %v", got) } } func TestBotSavesCardWhenPartnerWins(t *testing.T) { // شریک (صندلی۰) با آسِ پیک برنده است؛ باتِ صندلی۲ باید کمترین پیک را بریزد. hand := []game.Card{card(game.Spades, game.King), card(game.Spades, 5)} trick := []game.TrickCard{ {Seat: 0, Card: card(game.Spades, game.Ace)}, {Seat: 1, Card: card(game.Spades, 2)}, } got := botPlay(hand, trick, game.Hearts, game.Spades) if got != card(game.Spades, 5) { t.Errorf("expected low S-5 (save the King), got %v", got) } } func TestBotTrumpsOpponent(t *testing.T) { // بات پیک ندارد و حریف با آسِ پیک می‌برد ⇒ باید با کمترین حکم بِبُرد. hand := []game.Card{card(game.Hearts, 2), card(game.Hearts, game.King), card(game.Clubs, 9)} trick := []game.TrickCard{{Seat: 0, Card: card(game.Spades, game.Ace)}} got := botPlay(hand, trick, game.Hearts, game.Spades) if got != card(game.Hearts, 2) { t.Errorf("expected lowest trump H-2, got %v", got) } } func TestBotDiscardsWhenPartnerWinsAndVoid(t *testing.T) { // شریک می‌برد و بات خالِ زمینه را ندارد ⇒ حکم را هدر ندهد، کارتِ کم بریزد. hand := []game.Card{card(game.Hearts, game.King), card(game.Clubs, 4), card(game.Clubs, 9)} trick := []game.TrickCard{ {Seat: 0, Card: card(game.Spades, game.Ace)}, {Seat: 1, Card: card(game.Spades, 2)}, } got := botPlay(hand, trick, game.Hearts, game.Spades) if got != card(game.Clubs, 4) { t.Errorf("expected low discard C-4 (keep trump), got %v", got) } } func TestBotLeadsNonTrumpAce(t *testing.T) { // در رهبری، آسِ غیرِحکم را نقد کن. hand := []game.Card{card(game.Clubs, game.Ace), card(game.Diamonds, 7), card(game.Hearts, game.King)} got := botPlay(hand, nil, game.Hearts, 0) if got != card(game.Clubs, game.Ace) { t.Errorf("expected to lead C-A, got %v", got) } } func TestBotCannotBeatKeepsLow(t *testing.T) { // حریف با آسِ پیک می‌برد و بات فقط پیکِ پایین دارد ⇒ کمترین را بریزد. hand := []game.Card{card(game.Spades, 4), card(game.Spades, 9)} trick := []game.TrickCard{{Seat: 0, Card: card(game.Spades, game.Ace)}} got := botPlay(hand, trick, game.Hearts, game.Spades) if got != card(game.Spades, 4) { t.Errorf("expected low S-4, got %v", got) } } func TestBotChooseTrumpPrefersStrongLongSuit(t *testing.T) { // خشت: ۴ کارت اما ضعیف؛ گشنیز: ۳ کارت اما آس+شاه. باید گشنیز را حکم کند اگر // امتیازش بیشتر شود — اینجا خشت ۴تایی برنده است. تستِ ساده: بلندترینِ قوی. hand := []game.Card{ card(game.Diamonds, 2), card(game.Diamonds, 3), card(game.Diamonds, 4), card(game.Diamonds, 5), card(game.Clubs, game.Ace), } if got := botChooseTrump(hand); got != game.Diamonds { t.Errorf("expected Diamonds (longest), got %v", got) } }