aboutsummaryrefslogtreecommitdiff
path: root/internal/casino/blackjack_rules_test.go
blob: 62f4d0a931e44a8bdaec38d97730e2967f0e938a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
package casino

import (
	"strings"
	"testing"
)

func TestBlackjackRuleCardDefaultsAndOverrides(t *testing.T) {
	yes, no := true, false
	cases := []struct {
		cfg  BlackjackConfig
		want []string
	}{
		{BlackjackConfig{}, []string{"Number of decks: 8", "Blackjack pays 3:2", "Dealer stands on soft 17", "Double after split: Yes", "Maximum split hands: 4", "Surrender: Not offered"}},
		{BlackjackConfig{Decks: 1, BlackjackPayout: 1.2, DealerHitSoft17: &yes, DoubleAfterSplit: &no, MaxSplitHands: 2, DoubleSplitBlackjack: &no}, []string{"Number of decks: 1", "Blackjack pays 6:5", "Dealer hits soft 17", "Double after split: No", "Re-splitting: No", "Split-and-doubled 21 receives blackjack payout: No"}},
		{BlackjackConfig{Decks: 6, ResplitAces: &yes, Surrender: &yes}, []string{"Number of decks: 6", "Re-splitting aces: Yes", "Surrender: Late"}},
	}
	for _, tc := range cases {
		cfg := TableConfig{ID: "test", Game: GameBlackjack, Blackjack: tc.cfg}
		text := cfg.BlackjackRulesText()
		for _, want := range tc.want {
			if !strings.Contains(text, want) {
				t.Errorf("missing %q in %s", want, text)
			}
		}
		table := newBlackjackTable(42, cfg, newTestRand())
		events := table.join("alice")
		found := false
		for _, e := range events {
			if e.Message == text {
				found = true
				if e.Public {
					t.Error("rules broadcast to bystanders")
				}
			}
		}
		if !found {
			t.Fatal("joining did not display effective rules")
		}
	}
}

func TestSixToFiveNaturalPayout(t *testing.T) {
	hand := &blackjackHand{bet: 10, cards: []card{{rank: "A"}, {rank: "K"}}}
	_, payout, err := settleHand(hand, 20, false, BlackjackConfig{BlackjackPayout: 1.2})
	if err != nil || payout != 22 {
		t.Fatalf("payout=%d err=%v", payout, err)
	}
}