
This should probably become documented if it's stable enough. For now it's intended for building wrapping functions, so it's only documented in comments the file.
122 lines
4.3 KiB
Racket
122 lines
4.3 KiB
Racket
#lang racket/base
|
|
|
|
(require tests/eli-tester scribble/text/wrap)
|
|
|
|
#; ; generate test cases from Emacs
|
|
(defmacro wrap-line (str col &rest dummy)
|
|
(let ((r (with-temp-buffer
|
|
(fundamental-mode)
|
|
(insert str)
|
|
(let (; straightforward filling, no fanciness
|
|
(left-margin 0) (fill-column col)
|
|
(adaptive-fill-regexp "\\`\\'")
|
|
(adaptive-fill-first-line-regexp "\\`\\'")
|
|
(filladapt-mode nil))
|
|
(fill-region-as-paragraph (point-min) (point-max) nil t)
|
|
(format "'%S" (split-string
|
|
(buffer-substring (point-min) (point-max))
|
|
"\n"))))))
|
|
`(insert ,r)))
|
|
|
|
(provide wrap-tests)
|
|
(module+ main (wrap-tests))
|
|
(define (wrap-tests)
|
|
(define (w line width result1 result2)
|
|
(test (wrap-line line width) => result1
|
|
(wrap-line line width
|
|
(λ (w n) (values (substring w 0 n) (substring w n) #f)))
|
|
=> result2))
|
|
(test (w "eli barzilay maze is life" 25
|
|
'("eli barzilay maze is life")
|
|
'("eli barzilay maze is life"))
|
|
(w "eli barzilay maze is life" 10
|
|
'("eli" "barzilay" "maze is" "life")
|
|
'("eli barzil" "ay maze is" "life"))
|
|
(w "eli barzilay maze is life" 11
|
|
'("eli" "barzilay" "maze is" "life")
|
|
'("eli barzila" "y maze is l" "ife"))
|
|
(w "eli barzilay maze is life" 12
|
|
'("eli barzilay" "maze is life")
|
|
'("eli barzilay" "maze is life"))
|
|
(w "eli barzilay maze is life" 13
|
|
'("eli barzilay" "maze is life")
|
|
'("eli barzilay" "maze is life"))
|
|
(w "eli barzilay maze is life" 14
|
|
'("eli barzilay" "maze is life")
|
|
'("eli barzilay m" "aze is life"))
|
|
(w "eli barzilay maze is life" 15
|
|
'("eli barzilay" "maze is life")
|
|
'("eli barzilay m" "aze is life"))
|
|
(w "eli barzilay maze is life" 15
|
|
'("eli barzilay" "maze is life")
|
|
'("eli barzilay m" "aze is life"))
|
|
(w "eli barzilay maze is life" 15
|
|
'("eli barzilay" "maze is life")
|
|
'("eli barzilay ma" "ze is life"))
|
|
(w "0123456789" 10
|
|
'("0123456789")
|
|
'("0123456789"))
|
|
(w " xxxxx" 10
|
|
'(" xxxxx")
|
|
'(" xxxxx"))
|
|
(w " xxxxxx" 10
|
|
'(" xxxxxx")
|
|
'(" xxxxx" "x"))
|
|
(w " xxxxxxxxxxx" 10
|
|
'(" xxxxxxxxxxx")
|
|
'(" xxxxx" "xxxxxx"))
|
|
(w "xxxxx " 10
|
|
'("xxxxx ")
|
|
'("xxxxx "))
|
|
(w "xxxxxx " 10
|
|
'("xxxxxx ")
|
|
'("xxxxxx " " "))
|
|
(w " xxxxx " 10
|
|
'(" xxxxx ")
|
|
'(" xxxxx " " "))
|
|
(w " x " 10
|
|
'(" x ")
|
|
'(" x " " "))
|
|
(w "" 10
|
|
'("")
|
|
'(""))
|
|
(w " " 10
|
|
'(" ")
|
|
'(" "))
|
|
(w " " 10
|
|
'(" ")
|
|
'(" "))
|
|
(w " " 10
|
|
'(" ")
|
|
'(" " " "))
|
|
(w "xxxxxxxxxxx " 10
|
|
'("xxxxxxxxxxx ")
|
|
'("xxxxxxxxxx" "x "))
|
|
(w " xxxxxxxxxxx " 10
|
|
'(" xxxxxxxxxxx ")
|
|
'(" xxxxx" "xxxxxx "))
|
|
(w " xxxxxxxxxxx " 10
|
|
'(" xxxxxxxxxxx ")
|
|
'(" xxxxx" "xxxxxx "))
|
|
(w " xxxxxxxxxxx x" 10
|
|
'(" xxxxxxxxxxx" "x")
|
|
'(" xxxxx" "xxxxxx x"))
|
|
(w " xxxxxxxxxxx x" 10
|
|
'(" xxxxxxxxxxx" "x")
|
|
'(" xxxxx" "xxxxxx x"))
|
|
(w "x x x x x x x x x x x" '(10 . 8)
|
|
'("x x x x x" "x x x x" "x x")
|
|
'("x x x x x" "x x x x" "x x"))
|
|
(w "xx x x x x x x x x x x" '(10 . 8)
|
|
'("xx x x x x" "x x x x" "x x")
|
|
'("xx x x x x" "x x x x" "x x"))
|
|
(w "x x x x xxx x x x x x" '(10 . 8)
|
|
'("x x x x" "xxx x x" "x x x")
|
|
'("x x x x xx" "x x x x" "x x"))
|
|
(w "xxxx xxxx xxxx xxxx" '(10 . 5)
|
|
'("xxxx xxxx" "xxxx" "xxxx")
|
|
'("xxxx xxxx" "xxxx" "xxxx"))
|
|
(w "xxxx xxxxxxxx xxxx" '(10 . 5)
|
|
'("xxxx" "xxxxxxxx" "xxxx")
|
|
'("xxxx xxxxx" "xxx x" "xxx"))))
|