diff --git a/brmsaptool.scm b/brmsaptool.scm index 3cdae46..1817811 100644 --- a/brmsaptool.scm +++ b/brmsaptool.scm @@ -229,8 +229,27 @@ (lambda (a b) (monthperiods l) - l) + (let loop ((l l) + (ps '()) + (cb #f)) + (if (null? l) + (if cb + (reverse (cons (cons cb #f) ps)) + (reverse ps)) + (let ((m (car l)) + (rmt (if cb 'stop 'start))) + (if (eq? (car m) rmt) + (if cb + (loop (cdr l) + (cons (cons cb (cdr m)) ps) + #f) + (loop (cdr l) + ps + (cdr m))) + (error 'period-markers->periods "Invalid start/stop sequence marker" m)))))) (define (period-duration p) 1) @@ -243,6 +262,15 @@ (unit-test 'sort-period-markers (equal? (sort-period-markers '((start 2023 1) (stop 2022 10) (start 2022 3))) '((start 2022 3) (stop 2022 10) (start 2023 1)))) + (unit-test 'period-markers->periods + (equal? (period-markers->periods '((start 2022 3) (stop 2022 10) (start 2023 1) (stop 2023 4))) + '(((2022 3) . (2022 10)) + ((2023 1) . (2023 4))))) + (unit-test 'period-markers->periods-open + (equal? (period-markers->periods '((start 2022 3) (stop 2022 10) (start 2023 1) (stop 2023 4) (start 2023 5))) + '(((2022 3) . (2022 10)) + ((2023 1) . (2023 4)) + ((2023 5) . #f)))) (print " ok.")) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;