build/test/test_dates.go (view raw)
1package main
2
3import (
4 "fmt"
5 "os"
6 "time"
7
8 "maxwelljensen/bibel/internal"
9)
10
11// TestCase represents a test case for date progression
12type TestCase struct {
13 name string
14 date time.Time
15 readingMode bible.ReadingMode
16 expectedBook int
17 expectedChapter int
18 expectedStartVerse int
19 expectedEndVerse int
20}
21
22func main() {
23 // Load Bible data
24 bibleData, err := bible.LoadBible("books/pol_nbg.json", false)
25 if err != nil {
26 fmt.Printf("FAILED: Error loading Bible data: %v\n", err)
27 os.Exit(1)
28 }
29
30 // Define test cases - using known values from the fixed system
31 testCases := []TestCase{
32 // Day 1 (1 January) should start at Matthew 1:1-12 for evangelion mode
33 {
34 name: "Day 1 - evangelion",
35 date: time.Date(2026, 1, 1, 0, 0, 0, 0, time.UTC),
36 readingMode: bible.ReadingModeEvangelion,
37 expectedBook: 40,
38 expectedChapter: 1,
39 expectedStartVerse: 1,
40 expectedEndVerse: 12,
41 },
42 // Day 110 (20 April, 2026) - Mark 12:1-12
43 // With cumulative lookahead, all days read 12+ verses and no short days occur.
44 {
45 name: "Day 110 - evangelion",
46 date: time.Date(2026, 4, 20, 0, 0, 0, 0, time.UTC),
47 readingMode: bible.ReadingModeEvangelion,
48 expectedBook: 41, // Mark
49 expectedChapter: 12,
50 expectedStartVerse: 1,
51 expectedEndVerse: 12,
52 },
53 // Test New Testament mode - should also start at Matthew 1:1-12
54 {
55 name: "Day 1 - new_testament",
56 date: time.Date(2026, 1, 1, 0, 0, 0, 0, time.UTC),
57 readingMode: bible.ReadingModeNewTestament,
58 expectedBook: 40,
59 expectedChapter: 1,
60 expectedStartVerse: 1,
61 expectedEndVerse: 12,
62 },
63 // Test Old Testament mode - should start at Genesis 1:1-12
64 {
65 name: "Day 1 - old_testament",
66 date: time.Date(2026, 1, 1, 0, 0, 0, 0, time.UTC),
67 readingMode: bible.ReadingModeOldTestament,
68 expectedBook: 1,
69 expectedChapter: 1,
70 expectedStartVerse: 1,
71 expectedEndVerse: 12,
72 },
73 // Test wrap-around: Day that would exceed total Gospel verses
74 // 3779 verses / 12 verses/day = ~315 days
75 // With cumulative lookahead, extra verses consumed on chapter-boundary
76 // days push the schedule further, so day 316 lands in Matthew 18.
77 {
78 name: "Day 316 - evangelion (wrap test)",
79 date: time.Date(2026, 11, 12, 0, 0, 0, 0, time.UTC), // Day 316
80 readingMode: bible.ReadingModeEvangelion,
81 expectedBook: 40,
82 expectedChapter: 18,
83 expectedStartVerse: 1,
84 expectedEndVerse: 12,
85 },
86 }
87
88 // Run tests
89 passed := 0
90 failed := 0
91
92 fmt.Println("=== Running Date Progression Tests ===")
93 fmt.Printf("Using Bible: %s\n", bibleData.Metadata.Name)
94 fmt.Printf("Total verses in file: %d\n", len(bibleData.Verses))
95
96 for _, tc := range testCases {
97 fmt.Printf("\nTest: %s\n", tc.name)
98 fmt.Printf(" Date: %s (Day of year: %d)\n", tc.date.Format("2006-01-02"), tc.date.YearDay())
99
100 dateProg := bible.NewDateProgressionWithReadingMode(bibleData, 12, tc.readingMode)
101 bookmark, err := dateProg.GetPositionForDate(tc.date)
102
103 if err != nil {
104 fmt.Printf(" FAILED: Error: %v\n", err)
105 failed++
106 continue
107 }
108
109 fmt.Printf(" Result: Book %d, Chapter %d, Verses %d-%d\n",
110 bookmark.Book, bookmark.Chapter, bookmark.FirstVerse, bookmark.SecondVerse)
111
112 if int(bookmark.Book) == tc.expectedBook &&
113 bookmark.Chapter == tc.expectedChapter &&
114 bookmark.FirstVerse == tc.expectedStartVerse &&
115 bookmark.SecondVerse == tc.expectedEndVerse {
116 fmt.Printf(" ✓ PASSED\n")
117 passed++
118 } else {
119 fmt.Printf(" ✗ FAILED: Expected Book %d, Chapter %d, Verses %d-%d\n",
120 tc.expectedBook, tc.expectedChapter, tc.expectedStartVerse, tc.expectedEndVerse)
121 failed++
122 }
123 }
124
125 fmt.Printf("\n=== Test Summary ===\n")
126 fmt.Printf("Passed: %d\n", passed)
127 fmt.Printf("Failed: %d\n", failed)
128
129 if failed > 0 {
130 fmt.Printf("❌ Some tests FAILED\n")
131 os.Exit(1)
132 } else {
133 fmt.Printf("✅ All tests PASSED\n")
134 }
135}