all repos — bibel @ master

Unnamed repository; edit this file 'description' to name the repository.

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}