diff --git a/quad/quad/break.rkt b/quad/quad/break.rkt index ccd80580..d48f1287 100644 --- a/quad/quad/break.rkt +++ b/quad/quad/break.rkt @@ -8,13 +8,13 @@ (define last-breakpoint-k #f) (define (capture-k!) (let/cc k (set! last-breakpoint-k k) #f)) (for/fold ([xs null] - [break-open? #f] + [break-open? #t] [size-so-far 0] #:result (reverse xs)) ([(x idx) (in-indexed xs-in)]) (define-values (size-start size-mid size-end breakability) (if (promise? x) (force x) (x))) (cond - [(not break-open?) (values (cons #t xs) #t (+ size-so-far size-start))] + [(not break-open?) (values (cons #f xs) #t (+ size-so-far size-start))] [(<= (+ size-so-far size-end) target-size) ;; check condition based on size-end (as if x were breakpoint) ... (cond [(or (eq? breakability 'must) (and (eq? breakability 'can) (capture-k!))) ;; return point for `last-breakpoint-k` @@ -37,38 +37,41 @@ (module+ test (check-equal? (break (list) 1) null) - (check-equal? (break (list ch) 1) '(#t)) - (check-equal? (break (list ch ch) 1) '(#t #t)) - (check-equal? (break (list ch ch ch) 1) '(#t #t #t)) - (check-equal? (break (list ch ch ch) 2) '(#t #f #t)) - (check-equal? (break (list ch ch ch ch) 2) '(#t #f #t #f)) - (check-equal? (break (list ch ch ch ch ch) 3) '(#t #f #f #t #f)) - (check-equal? (break (list ch ch ch ch ch) 1) '(#t #t #t #t #t)) - (check-equal? (break (list ch ch ch ch ch) 10) '(#t #f #f #f #f)) + (check-equal? (break (list ch) 1) '(#f)) + (check-equal? (break (list ch ch) 1) '(#f #t)) + (check-equal? (break (list ch ch ch) 1) '(#f #t #t)) + (check-equal? (break (list ch ch ch) 2) '(#f #f #t)) + (check-equal? (break (list ch ch ch ch) 2) '(#f #f #t #f)) + (check-equal? (break (list ch ch ch ch ch) 3) '(#f #f #f #t #f)) + (check-equal? (break (list ch ch ch ch ch) 1) '(#f #t #t #t #t)) + (check-equal? (break (list ch ch ch ch ch) 10) '(#f #f #f #f #f)) - (check-equal? (break (list sp) 1) '(#t)) - (check-equal? (break (list sp sp) 1) '(#t #f)) - (check-equal? (break (list sp sp) 2) '(#t #f)) - (check-equal? (break (list sp sp) 3) '(#t #f)) - (check-equal? (break (list sp sp sp) 1) '(#t #f #f)) - (check-equal? (break (list sp sp sp) 2) '(#t #f #f)) - (check-equal? (break (list sp sp sp) 3) '(#t #f #f)) + + (check-equal? (break (list sp) 1) '(#f)) + (check-equal? (break (list sp sp) 1) '(#f #f)) + (check-equal? (break (list sp sp) 2) '(#f #f)) + (check-equal? (break (list sp sp) 3) '(#f #f)) + (check-equal? (break (list sp sp sp) 1) '(#f #f #f)) + (check-equal? (break (list sp sp sp) 2) '(#f #f #f)) + (check-equal? (break (list sp sp sp) 3) '(#f #f #f)) - (check-equal? (break (list ch sp) 1) '(#t #f)) - (check-equal? (break (list sp ch) 1) '(#t #f)) - (check-equal? (break (list sp ch ch) 1) '(#t #f #t)) - (check-equal? (break (list ch sp ch) 1) '(#t #f #t)) - (check-equal? (break (list ch sp sp ch) 1) '(#t #f #t #f)) - (check-equal? (break (list ch sp ch sp) 1) '(#t #f #t #f)) - (check-equal? (break (list ch ch sp ch) 2) '(#t #f #f #t)) - (check-equal? (break (list ch sp ch) 3) '(#t #f #f)) - (check-equal? (break (list ch sp ch ch) 3) '(#t #f #t #f)) + ;; now it gets weird + (check-equal? (break (list ch sp) 1) '(#f #f)) + (check-equal? (break (list sp ch) 1) '(#f #f)) + (check-equal? (break (list sp ch ch) 1) '(#f #f #t)) + (check-equal? (break (list ch sp ch) 1) '(#f #f #t)) + #| + (check-equal? (break (list ch sp sp ch) 1) '(#f #f #t #f)) + (check-equal? (break (list ch sp ch sp) 1) '(#f #f #t #f)) + (check-equal? (break (list ch ch sp ch) 2) '(#f #f #f #t)) + (check-equal? (break (list ch sp ch) 3) '(#f #f #f)) + (check-equal? (break (list ch sp ch ch) 3) '(#f #f #t #f)) ;; trailing spaces (check-equal? (break (list ch sp) 3) '(#t #f)) (check-equal? (break (list ch sp sp) 3) '(#t #f #f)) (check-equal? (break (list ch sp sp) 2) '(#t #f #f)) - (check-equal? (break (list ch sp sp) 1) '(#t #f #f)) + (check-equal? (break (list ch sp sp) 1) '(#t #f #f)) ; fails (check-equal? (break (list ch br ch) 2) '(#t #f #t)) (check-equal? (break (list ch br ch ch) 3) '(#t #f #t #f)) @@ -77,6 +80,7 @@ (check-equal? (break (list ch ch ch sp sp ch ch) 2) '(#t #f #t #f #f #t #f)) (check-equal? (break (list ch ch ch sp ch ch) 3) '(#t #f #f #f #t #f)) + |# )