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)
}
}
|