namespace AdventOfCode2023 open BenchmarkDotNet.Attributes open BenchmarkDotNet.Configs open BenchmarkDotNet.Running module Benchmarks = type Benchmark1To5 () = [] member _.Setup () = Run.shouldWrite <- false [] member val Day = 0 with get, set [] member val IsPartOne = false with get, set [] member this.Benchmark () : unit = Run.allRuns.[this.Day - 1] (not this.IsPartOne) (Inputs.day this.Day) [] member _.Cleanup () = Run.shouldWrite <- true type Benchmark6To10 () = [] member _.Setup () = Run.shouldWrite <- false [] member val Day = 0 with get, set [] member val IsPartOne = false with get, set [] member this.Benchmark () : unit = Run.allRuns.[this.Day - 1] (not this.IsPartOne) (Inputs.day this.Day) [] member _.Cleanup () = Run.shouldWrite <- true type Benchmark11To15 () = [] member _.Setup () = Run.shouldWrite <- false [] member val Day = 0 with get, set [] member val IsPartOne = false with get, set [] member this.Benchmark () : unit = Run.allRuns.[this.Day - 1] (not this.IsPartOne) (Inputs.day this.Day) [] member _.Cleanup () = Run.shouldWrite <- true type Benchmark16To20 () = [] member _.Setup () = Run.shouldWrite <- false [] member val Day = 0 with get, set [] member val IsPartOne = false with get, set [] member this.Benchmark () : unit = Run.allRuns.[this.Day - 1] (not this.IsPartOne) (Inputs.day this.Day) [] member _.Cleanup () = Run.shouldWrite <- true module Program = [] let main args = let config = ManualConfig.Create(DefaultConfig.Instance).WithOptions ConfigOptions.DisableOptimizationsValidator let _summary = BenchmarkRunner.Run config let _summary = BenchmarkRunner.Run config let _summary = BenchmarkRunner.Run config 0