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) - based on current output
43 {
44 name: "Day 110 - evangelion",
45 date: time.Date(2026, 4, 20, 0, 0, 0, 0, time.UTC),
46 readingMode: bible.ReadingModeEvangelion,
47 expectedBook: 41, // Mark
48 expectedChapter: 6,
49 expectedStartVerse: 46,
50 expectedEndVerse: 56,
51 },
52 // Test New Testament mode - should also start at Matthew 1:1-12
53 {
54 name: "Day 1 - new_testament",
55 date: time.Date(2026, 1, 1, 0, 0, 0, 0, time.UTC),
56 readingMode: bible.ReadingModeNewTestament,
57 expectedBook: 40,
58 expectedChapter: 1,
59 expectedStartVerse: 1,
60 expectedEndVerse: 12,
61 },
62 // Test Old Testament mode - should start at Genesis 1:1-12
63 {
64 name: "Day 1 - old_testament",
65 date: time.Date(2026, 1, 1, 0, 0, 0, 0, time.UTC),
66 readingMode: bible.ReadingModeOldTestament,
67 expectedBook: 1,
68 expectedChapter: 1,
69 expectedStartVerse: 1,
70 expectedEndVerse: 12,
71 },
72 // Test wrap-around: Day that would exceed total Gospel verses
73 // 3779 verses / 12 verses/day = ~315 days
74 // Day 316 should wrap back to near beginning (offset = (316-1)*12 = 3780, modulo 3779 = 1)
75 // So should be Matthew 1:2-13
76 {
77 name: "Day 316 - evangelion (wrap test)",
78 date: time.Date(2026, 11, 12, 0, 0, 0, 0, time.UTC), // Day 316
79 readingMode: bible.ReadingModeEvangelion,
80 expectedBook: 40,
81 expectedChapter: 1,
82 expectedStartVerse: 2,
83 expectedEndVerse: 13,
84 },
85 }
86
87 // Run tests
88 passed := 0
89 failed := 0
90
91 fmt.Println("=== Running Date Progression Tests ===")
92 fmt.Printf("Using Bible: %s\n", bibleData.Metadata.Name)
93 fmt.Printf("Total verses in file: %d\n", len(bibleData.Verses))
94
95 for _, tc := range testCases {
96 fmt.Printf("\nTest: %s\n", tc.name)
97 fmt.Printf(" Date: %s (Day of year: %d)\n", tc.date.Format("2006-01-02"), tc.date.YearDay())
98
99 dateProg := bible.NewDateProgressionWithReadingMode(bibleData, 12, tc.readingMode)
100 bookmark, err := dateProg.GetPositionForDate(tc.date)
101
102 if err != nil {
103 fmt.Printf(" FAILED: Error: %v\n", err)
104 failed++
105 continue
106 }
107
108 fmt.Printf(" Result: Book %d, Chapter %d, Verses %d-%d\n",
109 bookmark.Book, bookmark.Chapter, bookmark.FirstVerse, bookmark.SecondVerse)
110
111 if int(bookmark.Book) == tc.expectedBook &&
112 bookmark.Chapter == tc.expectedChapter &&
113 bookmark.FirstVerse == tc.expectedStartVerse &&
114 bookmark.SecondVerse == tc.expectedEndVerse {
115 fmt.Printf(" ✓ PASSED\n")
116 passed++
117 } else {
118 fmt.Printf(" ✗ FAILED: Expected Book %d, Chapter %d, Verses %d-%d\n",
119 tc.expectedBook, tc.expectedChapter, tc.expectedStartVerse, tc.expectedEndVerse)
120 failed++
121 }
122 }
123
124 fmt.Printf("\n=== Test Summary ===\n")
125 fmt.Printf("Passed: %d\n", passed)
126 fmt.Printf("Failed: %d\n", failed)
127
128 if failed > 0 {
129 fmt.Printf("❌ Some tests FAILED\n")
130 os.Exit(1)
131 } else {
132 fmt.Printf("✅ All tests PASSED\n")
133 }
134}