diff options
Diffstat (limited to 'internal/casino/roulette_history_test.go')
| -rw-r--r-- | internal/casino/roulette_history_test.go | 79 |
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") + } +} |
