aboutsummaryrefslogtreecommitdiff
path: root/internal/game/craps_variants_test.go
diff options
context:
space:
mode:
authorhistoria <[not public]>2026-09-30 16:16:17 -0400
committerhistoria <[not public]>2026-09-30 16:16:17 -0400
commita4c09c2d38d1f3bc1d3ad4bdb0234bdea7c37e73 (patch)
tree00c9567e620f331a59dd44f1f1fa779ecd94a845 /internal/game/craps_variants_test.go
parent724079f8de1ae69965c6267dca3d7fc3cc86afa2 (diff)
downloadthehouseoficarus-a4c09c2d38d1f3bc1d3ad4bdb0234bdea7c37e73.tar.gz
feat: additional craps variants added, standardizard casino command hints
Diffstat (limited to 'internal/game/craps_variants_test.go')
-rw-r--r--internal/game/craps_variants_test.go103
1 files changed, 103 insertions, 0 deletions
diff --git a/internal/game/craps_variants_test.go b/internal/game/craps_variants_test.go
new file mode 100644
index 0000000..76d1424
--- /dev/null
+++ b/internal/game/craps_variants_test.go
@@ -0,0 +1,103 @@
+package game
+
+import (
+ "path/filepath"
+ "strings"
+ "testing"
+
+ "thehouseoficarus/internal/casino"
+ "thehouseoficarus/internal/color"
+ "thehouseoficarus/internal/world"
+)
+
+func TestCrapsVariantRendering(t *testing.T) {
+ for _, v := range []string{"simplified", "high_point", "crapless", "new_york", "die_rich", "diceless"} {
+ for _, unicode := range []bool{false, true} {
+ for _, mode := range []string{"none", "xterm256"} {
+ for _, style := range []string{"dark", "light"} {
+ dice := [2]int{4, 2}
+ if v == "die_rich" {
+ dice[1] = 0
+ }
+ text := renderCrapsSnapshot(&casino.CrapsSnapshot{Variant: v, Point: 4, Dice: dice}, mode, unicode, style)
+ plain := plainRoulette(text)
+ if !strings.Contains(plain, strings.ToUpper(strings.ReplaceAll(v, "_", " "))+" CRAPS") {
+ t.Fatal(v, "title")
+ }
+ if v == "diceless" {
+ for _, token := range []string{"PACK A", "PACK B", "Cards total: 6", "FIRE"} {
+ if !strings.Contains(plain, token) {
+ t.Fatal(v, token)
+ }
+ }
+ if strings.Contains(plain, "Total:") {
+ t.Fatal("dice rendered instead of cards")
+ }
+ } else {
+ if strings.Contains(plain, "FIRE") || strings.Contains(plain, "ALL SMALL") {
+ t.Fatal(v, "unsupported bonus display")
+ }
+ }
+ if v == "die_rich" && !strings.Contains(plain, "Total: 4") {
+ t.Fatal("single die absent")
+ }
+ if mode == "xterm256" && (v == "die_rich" || v == "diceless") {
+ bg := 0
+ if style == "light" {
+ bg = 15
+ }
+ if !strings.Contains(text, color.BgCode(mode, bg)) {
+ t.Fatal(v, "style")
+ }
+ }
+ }
+ }
+ }
+ }
+ for n := 1; n <= 6; n++ {
+ text := renderCrapsDice([2]int{n, 0}, "none", false, "dark")
+ if strings.Count(text, "+-------+") != 2 {
+ t.Fatal("must render exactly one die", text)
+ }
+ }
+}
+
+func TestShippedCrapsGallery(t *testing.T) {
+ w := world.New(filepath.Join("..", "..", "data"))
+ variants := []string{"bank", "simplified", "high_point", "crapless", "new_york", "die_rich", "diceless"}
+ for i, v := range variants {
+ id := 6185 + i
+ room, err := w.LoadRoom(id)
+ if err != nil {
+ t.Fatal(err)
+ }
+ if len(room.CasinoTables) != 1 {
+ t.Fatal(id, "missing table")
+ }
+ cfg := room.CasinoTables[0]
+ if cfg.Game != casino.GameCraps || cfg.Craps.Variant != v {
+ t.Fatal(id, cfg)
+ }
+ if err := cfg.Validate(); err != nil {
+ t.Fatal(id, err)
+ }
+ if i > 0 && room.Exits["south"].Room != id-1 {
+ t.Fatal(id, "missing return exit")
+ }
+ if i < len(variants)-1 && room.Exits["north"].Room != id+1 {
+ t.Fatal(id, "unreachable next table")
+ }
+ m := casino.NewManager(1)
+ m.Join(id, cfg, "a")
+ if m.Table(id, cfg.ID) == nil {
+ t.Fatal(id, "table registration")
+ }
+ }
+ room, err := w.LoadRoom(6182)
+ if err != nil {
+ t.Fatal(err)
+ }
+ if room.Exits["west"].Room != 6185 {
+ t.Fatal("gallery unreachable from roulette")
+ }
+}