no this isn't about alexandria ocasio-cortez
1package main
2
3import (
4 "os"
5 "testing"
6
7 "tangled.org/evan.jarrett.net/aoc2025/internal"
8)
9
10const testInput = `11-22,95-115,998-1012,1188511880-1188511890,222220-222224,1698522-1698528,446443-446449,38593856-38593862,565653-565659,824824821-824824827,2121212118-2121212124`
11
12func TestPart1(t *testing.T) {
13 d := &DayTwo{}
14 if err := d.ParseInput(testInput); err != nil {
15 t.Fatalf("ParseInput failed: %v", err)
16 }
17
18 got, err := d.Part1()
19 if err != nil {
20 t.Fatalf("Part1 failed: %v", err)
21 }
22
23 want := 1227775554
24 if got != want {
25 t.Errorf("Part1() = %d, want %d", got, want)
26 }
27}
28
29func TestPart2(t *testing.T) {
30 d := &DayTwo{}
31 if err := d.ParseInput(testInput); err != nil {
32 t.Fatalf("ParseInput failed: %v", err)
33 }
34
35 got, err := d.Part2()
36 if err != nil {
37 t.Fatalf("Part2 failed: %v", err)
38 }
39
40 want := 4174379265
41 if got != want {
42 t.Errorf("Part2() = %d, want %d", got, want)
43 }
44}
45
46// getRealInput loads the real puzzle input, caching it to a file to avoid
47// repeated network calls during benchmarks.
48func getRealInput(b *testing.B) string {
49 b.Helper()
50 const cacheFile = "testdata/input.txt"
51
52 // Try to read from cache first
53 if data, err := os.ReadFile(cacheFile); err == nil {
54 return string(data)
55 }
56
57 // Fetch from AOC and cache it
58 input, err := internal.GetInput(2)
59 if err != nil {
60 b.Skipf("Could not fetch real input: %v", err)
61 }
62
63 // Cache for future runs
64 _ = os.MkdirAll("testdata", 0755)
65 _ = os.WriteFile(cacheFile, []byte(input), 0644)
66
67 return input
68}
69
70func BenchmarkPart1(b *testing.B) {
71 input := getRealInput(b)
72
73 d := &DayTwo{}
74 if err := d.ParseInput(input); err != nil {
75 b.Fatalf("ParseInput failed: %v", err)
76 }
77
78 b.ResetTimer()
79 for i := 0; i < b.N; i++ {
80 d.Part1()
81 }
82}
83
84func BenchmarkPart2(b *testing.B) {
85 input := getRealInput(b)
86
87 d := &DayTwo{}
88 if err := d.ParseInput(input); err != nil {
89 b.Fatalf("ParseInput failed: %v", err)
90 }
91
92 b.ResetTimer()
93 for i := 0; i < b.N; i++ {
94 d.Part2()
95 }
96}