diff options
author | jan.nijtmans <nijtmans@users.sourceforge.net> | 2023-09-15 06:34:43 (GMT) |
---|---|---|
committer | jan.nijtmans <nijtmans@users.sourceforge.net> | 2023-09-15 06:34:43 (GMT) |
commit | 8edd42396d9257bcc76b5457f3c49834ef2cb22b (patch) | |
tree | 5cc82c91dd4e5130d6abb30a7b66d5d1919cba57 | |
parent | 6e62967ee57a8ce0b804a5e6d103659722d56283 (diff) | |
parent | 7539841ffd6ed3122986a4aef9fc0b60e477c607 (diff) | |
download | tcl-8edd42396d9257bcc76b5457f3c49834ef2cb22b.zip tcl-8edd42396d9257bcc76b5457f3c49834ef2cb22b.tar.gz tcl-8edd42396d9257bcc76b5457f3c49834ef2cb22b.tar.bz2 |
Merge 8.7
-rw-r--r-- | .github/workflows/linux-build.yml | 1 | ||||
-rw-r--r-- | generic/tclClock.c | 8 | ||||
-rw-r--r-- | tests/clock.test | 14 |
3 files changed, 20 insertions, 3 deletions
diff --git a/.github/workflows/linux-build.yml b/.github/workflows/linux-build.yml index 7c015df..b616d14 100644 --- a/.github/workflows/linux-build.yml +++ b/.github/workflows/linux-build.yml @@ -21,6 +21,7 @@ jobs: - "--enable-symbols" - "--enable-symbols=mem" - "--enable-symbols=all" + - "CFLAGS=-ftrapv" defaults: run: shell: bash diff --git a/generic/tclClock.c b/generic/tclClock.c index 5d3caa1..336561a 100644 --- a/generic/tclClock.c +++ b/generic/tclClock.c @@ -447,11 +447,13 @@ ClockGetdatefieldsObjCmd( } /* - * Extract Julian day. + * Extract Julian day. Always round the quotient down by subtracting 1 + * when the remainder is negative (i.e. if the quotient was rounded up). */ - fields.julianDay = (int) ((fields.localSeconds + JULIAN_SEC_POSIX_EPOCH) - / SECONDS_PER_DAY); + fields.julianDay = (int) ((fields.localSeconds / SECONDS_PER_DAY) - + ((fields.localSeconds % SECONDS_PER_DAY) < 0) + + JULIAN_DAY_POSIX_EPOCH); /* * Convert to Julian or Gregorian calendar. diff --git a/tests/clock.test b/tests/clock.test index 4bac104..3f20607 100644 --- a/tests/clock.test +++ b/tests/clock.test @@ -18596,6 +18596,20 @@ test clock-7.9 {Julian Day, two values} { clock scan {2440588 2440589} -format {%J %J} -gmt true } 86400 +test clock-7.10 {Julian Day, negative amount} { + # Note: %J does not accept negative input; + # add negative amounts to Julian day 0 instead + set s0 [clock scan 0 -format %J -gmt true] + set J0 [scan [clock format $s0 -format %J -gmt true] %lld] + set s0m1d [clock add $s0 -1 days] + set s0m24h [clock add $s0 -24 hours] + set J0m24h [scan [clock format $s0m24h -format %J -gmt true] %lld] + set s0m1s [clock add $s0 -1 seconds] + set J0m1s [scan [clock format $s0m1s -format %J -gmt true] %lld] + list $s0m1d $s0m24h $J0m24h $s0m1s $J0m1s $s0 $J0 \ + [::tcl::mathop::== $s0m1d $s0m24h] [::tcl::mathop::== $J0m24h $J0m1s] +} [list -210866889600 -210866889600 -1 -210866803201 -1 -210866803200 0 1 1] + # BEGIN testcases8 # Test parsing of ccyymmdd |