From fddc0373388f1468f99f60ae57278325c5dcea0d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hugo=20H=C3=B6rnquist?= Date: Tue, 11 Feb 2020 22:16:36 +0100 Subject: Hopefully fixed date+ bugs. --- module/srfi/srfi-19/alt.scm | 13 ++++++++----- tests/srfi-srfi-19-alt-util.scm | 16 ++++++++++++++++ 2 files changed, 24 insertions(+), 5 deletions(-) create mode 100644 tests/srfi-srfi-19-alt-util.scm diff --git a/module/srfi/srfi-19/alt.scm b/module/srfi/srfi-19/alt.scm index 9fe3f9d2..82a16627 100644 --- a/module/srfi/srfi-19/alt.scm +++ b/module/srfi/srfi-19/alt.scm @@ -296,14 +296,17 @@ (values days-fixed change*) (let loop ((target days-fixed) (change change*)) ;; (format (current-error-port) "2 ~s : ~s~%" target change) - (if (>= 12 (+ (month change) (month target))) - (values (set (month target) = (+ (month change))) - (set (month change) 0)) - + (if (< 12 (+ (month change) (month target))) + ;; if we overflow into the next year (loop (set-> target (year = (+ 1)) (month 1)) - (set (month change) = (- 12 (month target)))) + (set (month change) = (- (- 13 (month target))))) + + ;; if we don't overflow our date + (values (set (month target) = (+ (month change))) + (set (month change) 0)) + )))) ;; change** should here should have both month and date = 0 diff --git a/tests/srfi-srfi-19-alt-util.scm b/tests/srfi-srfi-19-alt-util.scm new file mode 100644 index 00000000..498862ea --- /dev/null +++ b/tests/srfi-srfi-19-alt-util.scm @@ -0,0 +1,16 @@ +(((srfi srfi-19 alt) date time) + ((srfi srfi-19 alt util) month-stream) + ((srfi srfi-41) stream->list stream-take + )) + +(test-assert "jan->dec" + (stream->list (stream-take 11 (month-stream #2020-01-01)))) + +(test-assert "dec->jan" + (stream->list (stream-take 2 (month-stream #2020-12-01)))) + +(test-assert "dec->feb" + (stream->list (stream-take 3 (month-stream #2020-12-01)))) + +(test-assert "20 months" + (stream->list (stream-take 20 (month-stream #2020-01-01)))) -- cgit v1.2.3