-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtest.sql
More file actions
110 lines (90 loc) · 4.72 KB
/
test.sql
File metadata and controls
110 lines (90 loc) · 4.72 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
-- Test script for pg_ddate extension
-- Don't trust it too much, it's AI-generated
-- Stop execution on any error
\set ON_ERROR_STOP on
CREATE EXTENSION IF NOT EXISTS pg_ddate;
-- Test basic date conversion
SELECT '2025-01-01'::date::ddate;
SELECT '2025-03-01'::date::ddate;
SELECT '2025-12-31'::date::ddate;
-- Test leap year and St. Tib's Day
SELECT '2024-02-29'::date::ddate;
-- Test input parsing (now supports holiday names!)
SELECT 'Chaos 1, 3191 YOLD'::ddate;
SELECT 'Discord 23, 3191 YOLD'::ddate;
SELECT 'Chaos 5, 3191 YOLD'::ddate; -- Regular format
SELECT 'Mungday, Chaos 5, 3191 YOLD'::ddate; -- Holiday format
SELECT 'Chaos 50, 3191 YOLD'::ddate; -- Regular format
SELECT 'Chaoflux, Chaos 50, 3191 YOLD'::ddate; -- Holiday format
-- Test conversion back to date
SELECT 'Chaos 1, 3191 YOLD'::ddate::date;
SELECT 'Discord 23, 3191 YOLD'::ddate::date;
-- Test comparison operators
SELECT 'Chaos 1, 3191 YOLD'::ddate = 'Chaos 1, 3191 YOLD'::ddate;
SELECT 'Chaos 1, 3191 YOLD'::ddate < 'Chaos 2, 3191 YOLD'::ddate;
SELECT 'Discord 1, 3191 YOLD'::ddate > 'Chaos 73, 3191 YOLD'::ddate;
-- Test all flux holidays (day 50 of each season)
SELECT '2025-02-19'::date::ddate; -- Should be: Chaoflux, Chaos 50, 3191 YOLD
SELECT '2025-05-03'::date::ddate; -- Should be: Discoflux, Discord 50, 3191 YOLD
SELECT '2025-07-15'::date::ddate; -- Should be: Confuflux, Confusion 50, 3191 YOLD
SELECT '2025-09-26'::date::ddate; -- Should be: Bureflux, Bureaucracy 50, 3191 YOLD
SELECT '2025-12-08'::date::ddate; -- Should be: Afflux, The Aftermath 50, 3191 YOLD
-- Test all apostle holydays (day 5 of each season)
SELECT '2025-01-05'::date::ddate; -- Should be: Mungday, Chaos 5, 3191 YOLD
SELECT '2025-03-19'::date::ddate; -- Should be: Mojoday, Discord 5, 3191 YOLD
SELECT '2025-05-31'::date::ddate; -- Should be: Syaday, Confusion 5, 3191 YOLD
SELECT '2025-08-12'::date::ddate; -- Should be: Zaraday, Bureaucracy 5, 3191 YOLD
SELECT '2025-10-24'::date::ddate; -- Should be: Maladay, The Aftermath 5, 3191 YOLD
-- Test St. Tib's Day parsing
SELECT 'St. Tib''s Day, 3190 YOLD'::ddate;
SELECT 'St. Tib''s Day, 3190 YOLD'::ddate::date;
-- Test all seasons
SELECT 'Chaos 15, 3191 YOLD'::ddate::date;
SELECT 'Discord 15, 3191 YOLD'::ddate::date;
SELECT 'Confusion 15, 3191 YOLD'::ddate::date;
SELECT 'Bureaucracy 15, 3191 YOLD'::ddate::date;
-- SELECT 'The Aftermath 15, 3191 YOLD'::ddate::date; -- Input parsing doesn't support spaces in season names
-- Test weekday cycle
SELECT '2025-01-01'::date::ddate; -- Sweetmorn
SELECT '2025-01-02'::date::ddate; -- Boomtime
SELECT '2025-01-03'::date::ddate; -- Pungenday
SELECT '2025-01-04'::date::ddate; -- Prickle-Prickle
SELECT '2025-01-05'::date::ddate; -- Setting Orange (also Mungday)
-- Test ordering
SELECT d FROM (VALUES
('Chaos 1, 3191 YOLD'::ddate),
('Discord 23, 3191 YOLD'::ddate),
('Confusion 50, 3191 YOLD'::ddate),
('St. Tib''s Day, 3192 YOLD'::ddate)
) AS t(d) ORDER BY d;
-- Test current_ddate() function
SELECT ddate_now(); -- Should return today's date in Discordian format
SELECT ddate_now()::date = current_date; -- Should be true
-- Test year calculations (2025 + 1166 = 3191)
SELECT '2025-06-15'::date::ddate; -- Should show 3191 YOLD
SELECT '2024-06-15'::date::ddate; -- Should show 3190 YOLD
SELECT '2026-06-15'::date::ddate; -- Should show 3192 YOLD
-- Test the new ~ operator for regex matching
SELECT '2025-02-19'::date::ddate ~ 'Chaoflux'; -- Should be true
SELECT '2025-05-03'::date::ddate ~ 'Discoflux'; -- Should be true
SELECT '2025-07-15'::date::ddate ~ 'Confuflux'; -- Should be true
SELECT '2025-09-26'::date::ddate ~ 'Bureflux'; -- Should be true
SELECT '2025-12-08'::date::ddate ~ 'Afflux'; -- Should be true
-- Test apostle holiday regex matching
SELECT '2025-01-05'::date::ddate ~ 'Mungday'; -- Should be true
SELECT '2025-03-19'::date::ddate ~ 'Mojoday'; -- Should be true
SELECT '2025-05-31'::date::ddate ~ 'Syaday'; -- Should be true
SELECT '2025-08-12'::date::ddate ~ 'Zaraday'; -- Should be true
SELECT '2025-10-24'::date::ddate ~ 'Maladay'; -- Should be true
-- Test regex patterns
SELECT '2025-01-01'::date::ddate ~ 'Sweetmorn'; -- Should be true (weekday)
SELECT '2025-01-01'::date::ddate ~ '3191 YOLD'; -- Should be true (year)
SELECT '2025-01-01'::date::ddate ~ 'Chaos.*1'; -- Should be true (season and day)
SELECT '2025-01-01'::date::ddate ~ 'Discord'; -- Should be false (wrong season)
-- Test more holiday input parsing
SELECT 'Discoflux, Discord 50, 3191 YOLD'::ddate; -- Should work
SELECT 'Mojoday, Discord 5, 3191 YOLD'::ddate; -- Should work
SELECT 'Syaday, Confusion 5, 3191 YOLD'::ddate; -- Should work
-- Test edge cases
SELECT 'Chaos 73, 3191 YOLD'::ddate::date; -- Last day of Chaos
-- SELECT 'The Aftermath 73, 3191 YOLD'::ddate::date; -- Input parsing doesn't support spaces in season names