| # 2024-08-19 |
| # |
| # The author disclaims copyright to this source code. In place of |
| # a legal notice, here is a blessing: |
| # |
| # May you do good and not evil. |
| # May you find forgiveness for yourself and forgive others. |
| # May you share freely, never taking more than you give. |
| # |
| #*********************************************************************** |
| # |
| # https://sqlite.org/forum/forumpost/eaa0a09786c6368b |
| # |
| # Apparently SQLite has been miscomputing leap-year dates before |
| # the year 0400. |
| # |
| |
| set testdir [file dirname $argv0] |
| source $testdir/tester.tcl |
| |
| # Skip this whole file if date and time functions are omitted |
| # at compile-time |
| # |
| ifcapable {!datetime} { |
| finish_test |
| return |
| } |
| |
| # Data sources: |
| # 1-10 https://ssd.jpl.nasa.gov/tools/jdc/#/cd |
| # 11 Jean Meeus, Astronomical Algorithms, ISBN 0-943396-61-1, p.59 |
| # 12 https://en.wikipedia.org/wiki/Julian_day |
| # |
| # ID YEAR MONTH DAY JD |
| set date5data { |
| 1 2024 2 29 2460369.5 |
| 2 2024 3 1 2460370.5 |
| 3 2023 2 28 2460003.5 |
| 4 2023 3 1 2460004.5 |
| 5 2000 2 29 2451603.5 |
| 6 2000 3 1 2451604.5 |
| 7 1900 2 28 2415078.5 |
| 8 1900 3 1 2415079.5 |
| 9 1712 2 29 2346413.5 |
| 10 1712 3 1 2346414.5 |
| 11 1977 4 26 2443259.5 |
| 12 2013 1 1 2456293.5 |
| } |
| |
| foreach {id y m d jd} $date5data { |
| set date [format %04d-%02d-%02d $y $m $d] |
| do_execsql_test date5-jd$jd { |
| SELECT date($::jd); |
| } $date |
| do_execsql_test date5-cal/$date { |
| SELECT julianday($::date); |
| } $jd |
| for {set i 1} {$y+400*$i<=9999} {incr i} { |
| set y2 [expr {$y+400*$i}] |
| set date2 [format %04d-%02d-%02d $y2 $m $d] |
| set jd2 [expr {$jd+146097*$i}] |
| do_execsql_test date5-jd$jd2 { |
| SELECT date($::jd2); |
| } $date2 |
| do_execsql_test date5-cal/$date2 { |
| SELECT julianday($::date2); |
| } $jd2 |
| } |
| for {set i 1} {$y-400*$i>=-4712} {incr i} { |
| set y2 [expr {$y-400*$i}] |
| if {$y2<0} { |
| set date2 [format -%04d-%02d-%02d [expr {-$y2}] $m $d] |
| } else { |
| set date2 [format %04d-%02d-%02d $y2 $m $d] |
| } |
| set jd2 [expr {$jd-146097*$i}] |
| do_execsql_test date5-jd$jd2 { |
| SELECT date($::jd2); |
| } $date2 |
| do_execsql_test date5-cal/$date2 { |
| SELECT julianday($::date2); |
| } $jd2 |
| } |
| } |
| |
| finish_test |