1package lightsout23import (4 "math/rand/v2"5 "testing"6)78func skipBenchmarkInShortMode(b *testing.B) {9 b.Helper()10 if testing.Short() {11 b.Skip("skipping benchmark in short mode")12 }13}1415func BenchmarkGenerateByMode(b *testing.B) {16 skipBenchmarkInShortMode(b)1718 cases := []struct {19 name string20 w int21 h int22 }{23 {name: "easy_3x3", w: 3, h: 3},24 {name: "medium_5x5", w: 5, h: 5},25 {name: "hard_7x7", w: 7, h: 7},26 {name: "extreme_9x9", w: 9, h: 9},27 }2829 for _, tt := range cases {30 b.Run(tt.name, func(b *testing.B) {31 rng := rand.New(rand.NewPCG(11, 12))32 b.ReportAllocs()3334 for range b.N {35 _ = GenerateSeeded(tt.w, tt.h, rng)36 }37 })38 }39}4041func BenchmarkToggle(b *testing.B) {42 skipBenchmarkInShortMode(b)4344 cases := []struct {45 name string46 w int47 h int48 x int49 y int50 }{51 {name: "easy_center", w: 3, h: 3, x: 1, y: 1},52 {name: "medium_center", w: 5, h: 5, x: 2, y: 2},53 {name: "hard_center", w: 7, h: 7, x: 3, y: 3},54 {name: "extreme_center", w: 9, h: 9, x: 4, y: 4},55 {name: "extreme_corner", w: 9, h: 9, x: 0, y: 0},56 }5758 for _, tt := range cases {59 b.Run(tt.name, func(b *testing.B) {60 g := makeGrid(tt.h, tt.w, false)61 b.ReportAllocs()6263 for range b.N {64 Toggle(g, tt.x, tt.y)65 }66 })67 }68}