aboutsummaryrefslogtreecommitdiff
path: root/internal/casino/roulette_history_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'internal/casino/roulette_history_test.go')
-rw-r--r--internal/casino/roulette_history_test.go79
1 files changed, 79 insertions, 0 deletions
diff --git a/internal/casino/roulette_history_test.go b/internal/casino/roulette_history_test.go
new file mode 100644
index 0000000..fbd2f65
--- /dev/null
+++ b/internal/casino/roulette_history_test.go
@@ -0,0 +1,79 @@
+package casino
+
+import (
+ "math/rand"
+ "reflect"
+ "testing"
+)
+
+func TestRouletteHistoryTracksCompletedSpinsOnly(t *testing.T) {
+ for _, double := range []bool{false, true} {
+ table := rouletteFixture()
+ table.Config.Roulette.DoubleZero = double
+ table.join("a")
+ wallet := &testWallet{chips: 1000}
+ rng := rand.New(rand.NewSource(7))
+ wheel := rouletteWheel(double)
+ var expected []string
+ var first *RouletteSnapshot
+ for i := 0; i < rouletteHistoryLimit+5; i++ {
+ table.bet("a", "red", 1, wallet)
+ before := table.view()
+ if !reflect.DeepEqual(before.History, expected) {
+ t.Fatalf("history changed on bet: %v", before.History)
+ }
+ // Two betting ticks, then two spinning ticks. No sample until the last.
+ for j := 0; j < 3; j++ {
+ table.tick()
+ if !reflect.DeepEqual(table.view().History, expected) {
+ t.Fatal("history revealed before settlement")
+ }
+ }
+ events := table.tick()
+ result := events[0].Snapshot.(*RouletteSnapshot)
+ expected = append(expected, wheel[rng.Intn(len(wheel))])
+ if len(expected) > rouletteHistoryLimit {
+ expected = expected[1:]
+ }
+ if !reflect.DeepEqual(result.History, expected) || result.Pockets[2] != expected[len(expected)-1] {
+ t.Fatalf("wrong result history: %v, want %v", result.History, expected)
+ }
+ if i == 0 {
+ first = result
+ }
+ if !reflect.DeepEqual(table.view().History, expected) {
+ t.Fatal("round reset lost history")
+ }
+ }
+ if len(first.History) != 1 || first.History[0] != first.Pockets[2] {
+ t.Fatal("later spins mutated an earlier snapshot")
+ }
+ snapshot := table.view()
+ snapshot.History[0] = "bad"
+ if !reflect.DeepEqual(table.view().History, expected) {
+ t.Fatal("snapshot aliases engine history")
+ }
+ table.refundAll()
+ table.tick()
+ if !reflect.DeepEqual(table.view().History, expected) {
+ t.Fatal("refund or idle tick changed history")
+ }
+ if len(rouletteFixture().view().History) != 0 {
+ t.Fatal("history leaked to another table")
+ }
+ }
+}
+
+func TestRouletteCancelledSpinDoesNotEnterHistory(t *testing.T) {
+ table := rouletteFixture()
+ table.join("a")
+ table.bet("a", "red", 1, &testWallet{chips: 100})
+ table.tick()
+ table.tick()
+ table.markDisconnected("a")
+ table.tick()
+ table.tick()
+ if len(table.view().History) != 0 {
+ t.Fatal("cancelled spin recorded a result")
+ }
+}