tabula/board_test.go

188 lines
4.4 KiB
Go
Raw Normal View History

2023-11-30 09:10:31 +00:00
package tabula
import (
2023-12-01 05:27:40 +00:00
"fmt"
2023-11-30 09:10:31 +00:00
"testing"
)
2023-12-02 19:25:07 +00:00
func TestMove(t *testing.T) {
2023-12-01 05:27:40 +00:00
b := NewBoard()
b[SpaceRoll1] = 1
b[SpaceRoll2] = 2
got, expected := b[24], int8(2)
if got != expected {
t.Errorf("unexpected space %d value: expected %d: got %d", 24, expected, got)
}
got, expected = b[22], 0
if got != expected {
t.Errorf("unexpected space %d value: expected %d: got %d", 22, expected, got)
}
bc := b.Move(24, 23, 1)
got, expected = b[24], int8(2)
if got != expected {
t.Errorf("unexpected space %d value: expected %d: got %d", 24, expected, got)
}
got, expected = bc[23], int8(1)
2023-12-01 05:27:40 +00:00
if got != expected {
t.Errorf("unexpected space %d value: expected %d: got %d", 23, expected, got)
}
got, expected = bc[24], 1
2023-12-01 05:27:40 +00:00
if got != expected {
t.Errorf("unexpected space %d value: expected %d: got %d", 24, expected, got)
}
got, expected = bc[22], 0
2023-12-01 05:27:40 +00:00
if got != expected {
t.Errorf("unexpected space %d value: expected %d: got %d", 22, expected, got)
}
2023-11-30 09:10:31 +00:00
}
2023-12-02 19:25:07 +00:00
func TestPast(t *testing.T) {
b := NewBoard()
2023-12-05 20:42:54 +00:00
got, expected := b.Past(), false
2023-12-03 01:27:19 +00:00
if got != expected {
t.Errorf("unexpected past value: expected %v: got %v", expected, got)
}
b = Board{0, 1, 3, -1, 0, -1, 0, -2, 0, 0, -1, 0, -3, 3, 0, 0, 0, -2, 0, -5, 4, 0, 2, 2, 0, 0, 0, 0, 5, 5, 5, 5}
2023-12-05 20:42:54 +00:00
got, expected = b.Past(), false
2023-12-03 01:27:19 +00:00
if got != expected {
t.Errorf("unexpected past value: expected %v: got %v", expected, got)
}
b = Board{0, -1, 1, -2, -1, 2, 4, 0, 0, 0, 0, 0, -1, 2, -1, 0, 0, -1, 3, -3, 0, 3, -1, -3, -1, 0, 0, 0, 4, 3, 0, 0}
2023-12-05 20:42:54 +00:00
got, expected = b.Past(), false
2023-12-02 19:25:07 +00:00
if got != expected {
t.Errorf("unexpected past value: expected %v: got %v", expected, got)
}
b = Board{7, 2, 2, 4, 0, -2, 0, 0, -1, 0, -1, 0, 0, 0, 0, 0, -1, -1, 0, -4, 0, -2, -1, -1, -1, 0, 0, 0, 6, 2, 0, 0}
2023-12-05 20:42:54 +00:00
got, expected = b.Past(), true
2023-12-02 19:25:07 +00:00
if got != expected {
t.Errorf("unexpected past value: expected %v: got %v", expected, got)
}
}
2023-12-03 02:18:51 +00:00
func TestBlots(t *testing.T) {
b := NewBoard()
got, expected := b.Blots(1), 0
if got != expected {
2023-12-05 08:27:41 +00:00
t.Errorf("unexpected blots value: expected %v: got %v", expected, got)
2023-12-03 02:18:51 +00:00
}
got, expected = b.Blots(2), 0
if got != expected {
2023-12-05 08:27:41 +00:00
t.Errorf("unexpected blots value: expected %v: got %v", expected, got)
2023-12-03 02:18:51 +00:00
}
b = b.Move(24, 23, 1)
2023-12-06 22:02:04 +00:00
got, expected = b.Blots(1), 19
2023-12-03 02:18:51 +00:00
if got != expected {
2023-12-05 08:27:41 +00:00
t.Errorf("unexpected blots value: expected %v: got %v", expected, got)
2023-12-03 02:18:51 +00:00
}
got, expected = b.Blots(2), 0
if got != expected {
2023-12-05 08:27:41 +00:00
t.Errorf("unexpected blots value: expected %v: got %v", expected, got)
2023-12-03 02:18:51 +00:00
}
b = b.Move(1, 2, 2)
2023-12-06 22:02:04 +00:00
got, expected = b.Blots(1), 19
2023-12-03 02:18:51 +00:00
if got != expected {
2023-12-05 08:27:41 +00:00
t.Errorf("unexpected blots value: expected %v: got %v", expected, got)
2023-12-03 02:18:51 +00:00
}
2023-12-06 22:02:04 +00:00
got, expected = b.Blots(2), 19
2023-12-03 02:18:51 +00:00
if got != expected {
2023-12-05 08:27:41 +00:00
t.Errorf("unexpected blots value: expected %v: got %v", expected, got)
2023-12-03 02:18:51 +00:00
}
}
2023-12-05 20:42:54 +00:00
func TestAnalyze(t *testing.T) {
b := NewBoard()
b = b.Move(24, 23, 1)
b = b.Move(1, 2, 2)
b[SpaceRoll1], b[SpaceRoll2] = 1, 2
2023-12-06 22:02:04 +00:00
available, _ := b.Available(1)
r := b.Analyze(available)
var blots int
for _, r := range r {
blots += r.Blots
}
if blots <= 0 {
t.Errorf("expected >0 blots in results, got %d", blots)
2023-12-05 20:42:54 +00:00
}
}
2023-12-01 05:27:40 +00:00
func BenchmarkAvailable(b *testing.B) {
type testCase struct {
roll1, roll2, roll3, roll4 int8
}
cases := []*testCase{
{1, 1, 1, 1},
{2, 2, 2, 2},
{3, 3, 3, 3},
{4, 4, 4, 4},
{5, 5, 5, 5},
{6, 6, 6, 6},
{1, 2, 0, 0},
{2, 3, 0, 0},
{3, 4, 0, 0},
{4, 5, 0, 0},
{5, 6, 0, 0},
}
for _, c := range cases {
b.Run(fmt.Sprintf("%d-%d", c.roll1, c.roll2), func(b *testing.B) {
board := NewBoard()
board[SpaceRoll1] = c.roll1
board[SpaceRoll2] = c.roll2
board[SpaceRoll3] = c.roll3
board[SpaceRoll4] = c.roll4
2023-12-06 22:02:04 +00:00
var available [][][]int
2023-12-01 05:27:40 +00:00
b.ResetTimer()
for i := 0; i < b.N; i++ {
2023-12-06 22:02:04 +00:00
available, _ = board.Available(1)
2023-12-01 05:27:40 +00:00
}
_ = available
})
}
}
func BenchmarkAnalyze(b *testing.B) {
type testCase struct {
roll1, roll2, roll3, roll4 int8
}
cases := []*testCase{
{1, 1, 1, 1},
{2, 2, 2, 2},
{3, 3, 3, 3},
{4, 4, 4, 4},
{5, 5, 5, 5},
{6, 6, 6, 6},
{1, 2, 0, 0},
{2, 3, 0, 0},
{3, 4, 0, 0},
{4, 5, 0, 0},
{5, 6, 0, 0},
}
for _, c := range cases {
b.Run(fmt.Sprintf("%d-%d", c.roll1, c.roll2), func(b *testing.B) {
board := NewBoard()
board[SpaceRoll1] = c.roll1
board[SpaceRoll2] = c.roll2
board[SpaceRoll3] = c.roll3
board[SpaceRoll4] = c.roll4
2023-12-06 22:02:04 +00:00
available, _ := board.Available(1)
2023-12-01 05:27:40 +00:00
var analysis []*Analysis
b.ResetTimer()
for i := 0; i < b.N; i++ {
2023-12-06 22:02:04 +00:00
analysis = board.Analyze(available)
2023-12-01 05:27:40 +00:00
}
_ = analysis
})
}
2023-11-30 09:10:31 +00:00
}