fix break-at to allow empty breakpoint list as input

pull/2/head
Matthew Butterick 10 years ago
parent 4d5afda80e
commit 8a02b53ac2

@ -94,7 +94,7 @@
(define increasing-positive-list? (and/c list? increasing-positive?)) (define increasing-positive-list? (and/c list? increasing-positive?))
(define+provide/contract (break-at xs bps) (define+provide/contract (break-at xs bps)
(list? (and/c coerce/list? increasing-positive-list?) . -> . (listof list?)) (list? (and/c coerce/list? (or/c empty? increasing-positive-list?)) . -> . (listof list?))
(when (ormap (λ(bp) (>= bp (length xs))) bps) (when (ormap (λ(bp) (>= bp (length xs))) bps)
(error 'break-at (format "breakpoint in ~v is greater than or equal to input list length = ~a" bps (length xs)))) (error 'break-at (format "breakpoint in ~v is greater than or equal to input list length = ~a" bps (length xs))))
;; easier to do back to front, because then the list index for each item won't change during the recursion ;; easier to do back to front, because then the list index for each item won't change during the recursion

@ -162,6 +162,8 @@
(check-equal? (sublist (range 5) 0 1) '(0)) (check-equal? (sublist (range 5) 0 1) '(0))
(check-equal? (sublist (range 5) 0 5) '(0 1 2 3 4)) (check-equal? (sublist (range 5) 0 5) '(0 1 2 3 4))
(check-equal? (break-at '(5 6 7 8) '()) '((5 6 7 8)))
(check-equal? (break-at '(5 6 7 8) '(1 2 3)) '((5) (6) (7) (8))) (check-equal? (break-at '(5 6 7 8) '(1 2 3)) '((5) (6) (7) (8)))
(check-equal? (break-at '(5 6 7 8) '(1 3)) '((5) (6 7) (8))) (check-equal? (break-at '(5 6 7 8) '(1 3)) '((5) (6 7) (8)))
(check-equal? (break-at '(5 6 7 8) '(1)) (break-at '(5 6 7 8) 1)) (check-equal? (break-at '(5 6 7 8) '(1)) (break-at '(5 6 7 8) 1))

Loading…
Cancel
Save