all repos — bibel @ 22bb3a6ab182daf32755b4316471ff8c8f4a4fe6

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) - 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}