;; These tests are only valid if chibi-scheme is compiled with Unicode
;; support (SEXP_USE_UTF8_STRINGS).

(cond-expand
 (modules (import (only (chibi test) test-begin test test-end)))
 (else #f))

(test-begin "unicode")

(test #\Р (string-ref "Русский" 0))
(test #\и (string-ref "Русский" 5))
(test #\й (string-ref "Русский" 6))

(test 7 (string-length "Русский"))

(test #\日 (string-ref "日本語" 0))
(test #\本 (string-ref "日本語" 1))
(test #\語 (string-ref "日本語" 2))

(test 3 (string-length "日本語"))

(test '(#\日 #\本 #\語) (string->list "日本語"))
(test "日本語" (list->string '(#\日 #\本 #\語)))

(test "日本" (substring "日本語" 0 2))
(test "本語" (substring "日本語" 1 3))

(test "日-語"
      (let ((s (substring "日本語" 0 3)))
        (string-set! s 1 #\-)
        s))

(test "日本人"
      (let ((s (substring "日本語" 0 3)))
        (string-set! s 2 #\人)
        s))

(test "字字字" (make-string 3 #\字))

(test "字字字"
      (let ((s (make-string 3)))
        (string-fill! s #\字)
        s))

(cond-expand (modules (import (chibi loop))) (else #f))

(test "in-string"
 '(#\日 #\本 #\語)
 (loop ((for c (in-string "日本語")) (for res (listing c))) => res))

(test "in-string-reverse"
 '(#\語 #\本 #\日)
 (loop ((for c (in-string-reverse "日本語")) (for res (listing c))) => res))

(test-end)