diff --git a/lib/chibi/string.scm b/lib/chibi/string.scm index 630d53fe..5ee2bd1b 100644 --- a/lib/chibi/string.scm +++ b/lib/chibi/string.scm @@ -54,11 +54,13 @@ (define (string-split str . o) (let ((pred (make-char-predicate (if (pair? o) (car o) #\space))) - (limit (if (and (pair? o) (pair? (cdr o))) (cadr o) (string-size str))) + (limit (if (and (pair? o) (pair? (cdr o))) + (cadr o) + (+ 1 (string-size str)))) (start (string-cursor-start str)) (end (string-cursor-end str))) (if (string-cursor>=? start end) - (list "") + '() (let lp ((i start) (n 1) (res '())) (cond ((>= n limit) diff --git a/tests/string-tests.scm b/tests/string-tests.scm index f4fa86f3..2cf481b3 100644 --- a/tests/string-tests.scm +++ b/tests/string-tests.scm @@ -41,8 +41,10 @@ (test "foobarbaz" (string-join '("foo" "bar" "baz"))) (test "foo bar baz" (string-join '("foo" "bar" "baz") " ")) -(test '("") (string-split "")) +(test '() (string-split "")) +(test '("" "") (string-split " ")) (test '("foo" "bar" "baz") (string-split "foo bar baz")) +(test '("foo" "bar" "baz" "") (string-split "foo bar baz ")) (test '("foo" "bar" "baz") (string-split "foo:bar:baz" #\:)) (test '("" "foo" "bar" "baz") (string-split ":foo:bar:baz" #\:)) (test '("foo" "bar" "baz" "") (string-split "foo:bar:baz:" #\:))