From cc9d498f4a1bc29fa4f9aacf58e76ea0061fc69e Mon Sep 17 00:00:00 2001 From: yinyu Date: Thu, 30 Apr 2026 11:34:28 +0800 Subject: [PATCH] =?UTF-8?q?[200=5F75]=20=E4=BC=98=E5=8C=96=E5=85=B6?= =?UTF-8?q?=E4=BB=96=E6=B5=8B=E8=AF=95=E7=94=A8=E4=BE=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- devel/200_75.md | 2 + .../reverse-list-to-string-test.scm | 15 ++++-- .../string-concatenate-reverse-test.scm | 10 ++++ .../string-cursor/string-concatenate-test.scm | 10 ++++ .../string-contains-right-test.scm | 26 +++++++--- .../string-cursor/string-contains-test.scm | 12 +++++ .../string-copy-slash-cursors-test.scm | 6 +++ .../liii/string-cursor/string-count-test.scm | 14 +++++- .../string-cursor/string-cursor-back-test.scm | 13 +++++ .../string-cursor/string-cursor-diff-test.scm | 50 ++++++++++++++++++- .../string-cursor/string-cursor-end-test.scm | 6 +++ .../string-cursor/string-cursor-eq-p-test.scm | 27 +++++++++- .../string-cursor-forward-test.scm | 6 +++ .../string-cursor/string-cursor-ge-p-test.scm | 27 +++++++++- .../string-cursor/string-cursor-gt-p-test.scm | 27 ++++++++++ .../string-cursor/string-cursor-le-p-test.scm | 27 ++++++++++ .../string-cursor/string-cursor-lt-p-test.scm | 27 ++++++++++ .../string-cursor/string-cursor-next-test.scm | 6 +++ .../string-cursor/string-cursor-p-test.scm | 6 +++ .../string-cursor/string-cursor-prev-test.scm | 6 +++ .../string-cursor-start-test.scm | 6 +++ .../string-cursor-to-index-test.scm | 6 +++ .../string-cursor/string-drop-right-test.scm | 6 +++ tests/liii/string-cursor/string-drop-test.scm | 6 +++ .../liii/string-cursor/string-every-test.scm | 1 + .../liii/string-cursor/string-filter-test.scm | 6 +++ .../string-cursor/string-fold-right-test.scm | 6 +++ tests/liii/string-cursor/string-fold-test.scm | 6 +++ .../string-for-each-cursor-test.scm | 6 +++ .../string-cursor/string-index-right-test.scm | 6 +++ .../liii/string-cursor/string-index-test.scm | 6 +++ .../string-index-to-cursor-test.scm | 6 +++ tests/liii/string-cursor/string-join-test.scm | 6 +++ .../liii/string-cursor/string-null-p-test.scm | 6 +++ .../string-cursor/string-pad-right-test.scm | 6 +++ tests/liii/string-cursor/string-pad-test.scm | 6 +++ .../string-prefix-length-test.scm | 6 +++ .../string-cursor/string-prefix-p-test.scm | 6 +++ .../string-ref-slash-cursor-test.scm | 6 +++ .../liii/string-cursor/string-remove-test.scm | 6 +++ .../string-cursor/string-replace-test.scm | 6 +++ .../string-cursor/string-replicate-test.scm | 6 +++ .../string-cursor/string-reverse-test.scm | 6 +++ .../string-cursor/string-skip-right-test.scm | 6 +++ tests/liii/string-cursor/string-skip-test.scm | 6 +++ .../liii/string-cursor/string-split-test.scm | 6 +++ .../string-suffix-length-test.scm | 6 +++ .../string-cursor/string-suffix-p-test.scm | 6 +++ .../string-cursor/string-tabulate-test.scm | 6 +++ .../string-cursor/string-take-right-test.scm | 6 +++ tests/liii/string-cursor/string-take-test.scm | 6 +++ .../string-to-list-slash-cursors-test.scm | 6 +++ .../string-to-vector-slash-cursors-test.scm | 6 +++ .../string-cursor/string-trim-both-test.scm | 6 +++ .../string-cursor/string-trim-right-test.scm | 6 +++ tests/liii/string-cursor/string-trim-test.scm | 6 +++ .../string-unfold-right-test.scm | 6 +++ .../liii/string-cursor/string-unfold-test.scm | 6 +++ .../substring-slash-cursors-test.scm | 6 +++ 59 files changed, 536 insertions(+), 16 deletions(-) diff --git a/devel/200_75.md b/devel/200_75.md index fcb0aaec..41bf00d0 100644 --- a/devel/200_75.md +++ b/devel/200_75.md @@ -1,5 +1,7 @@ # [200_75] 改进 string-any 和 string-every 的测试用例 +## 2026/04/30 优化其他测试用例 + ## 2026/04/29 优化 string-any-test.scm # char, string 支持 Unicode diff --git a/tests/liii/string-cursor/reverse-list-to-string-test.scm b/tests/liii/string-cursor/reverse-list-to-string-test.scm index ea1450be..99a7b27f 100644 --- a/tests/liii/string-cursor/reverse-list-to-string-test.scm +++ b/tests/liii/string-cursor/reverse-list-to-string-test.scm @@ -24,14 +24,21 @@ ;; ---- ;; 1. 与 (liii string) 的区别:无直接对应函数,(liii string-cursor) 独有 ;; 2. 性能:O(n),n 为列表长度 +;; 3. 支持 Unicode 字符(包括多字节字符如中文、Emoji)的正确转换 +;; +;; 相关实现 +;; -------- +;; (liii string) 库中无直接对应函数 +;; 参见: gf doc liii/string-cursor "reverse-list->string" (check (reverse-list->string '(#\c #\b #\a)) => "abc") (check (reverse-list->string '()) => "") ;; Unicode 测试 -(check (reverse-list->string (reverse (string->list/cursors "中文"))) - => - "中文" -) ;check +(check (reverse-list->string (reverse (string->list/cursors "中文"))) => "中文") + +;; Emoji 测试 +(check (reverse-list->string (reverse (string->list/cursors "hello😀world"))) => "hello😀world") +(check (reverse-list->string (reverse (string->list/cursors "😀🎉🚀"))) => "😀🎉🚀") (check-report) diff --git a/tests/liii/string-cursor/string-concatenate-reverse-test.scm b/tests/liii/string-cursor/string-concatenate-reverse-test.scm index 1e5d512f..27fb44fe 100644 --- a/tests/liii/string-cursor/string-concatenate-reverse-test.scm +++ b/tests/liii/string-cursor/string-concatenate-reverse-test.scm @@ -31,6 +31,12 @@ ;; 1. 先反转列表顺序,再连接 ;; 2. 支持可选的 final-string 和 end 参数 ;; 3. 性能:O(n),n 为所有字符串总字节长度 +;; 4. 支持 Unicode 字符(包括多字节字符如中文、Emoji)的正确连接 +;; +;; 相关实现 +;; -------- +;; (liii string) 库中也提供了 string-concatenate-reverse 函数 +;; 参见: gf doc liii/string "string-concatenate-reverse" (check (string-concatenate-reverse '("a" "b" "c")) => "cba") (check (string-concatenate-reverse '()) => "") @@ -39,4 +45,8 @@ ;; Unicode 测试 (check (string-concatenate-reverse '("a" "b") "中文" 1) => "ba中") +;; Emoji 测试 +(check (string-concatenate-reverse '("hello" "😀") "world") => "😀helloworld") +(check (string-concatenate-reverse '("🎉" "🚀")) => "🚀🎉") + (check-report) diff --git a/tests/liii/string-cursor/string-concatenate-test.scm b/tests/liii/string-cursor/string-concatenate-test.scm index 59714abd..d05502f1 100644 --- a/tests/liii/string-cursor/string-concatenate-test.scm +++ b/tests/liii/string-cursor/string-concatenate-test.scm @@ -25,9 +25,19 @@ ;; 1. 列表为空时返回空字符串 ;; 2. 支持 Unicode 字符串 ;; 3. 性能:O(n),n 为所有字符串总字节长度 +;; 4. 支持 Unicode 字符(包括多字节字符如中文、Emoji)的正确连接 +;; +;; 相关实现 +;; -------- +;; (liii string) 库中也提供了 string-concatenate 函数 +;; 参见: gf doc liii/string "string-concatenate" (check (string-concatenate '("a" "b" "c")) => "abc") (check (string-concatenate '()) => "") (check (string-concatenate '("中文" "测试")) => "中文测试") +;; Emoji 测试 +(check (string-concatenate '("hello" "😀" "world")) => "hello😀world") +(check (string-concatenate '("🎉" "🚀")) => "🎉🚀") + (check-report) diff --git a/tests/liii/string-cursor/string-contains-right-test.scm b/tests/liii/string-cursor/string-contains-right-test.scm index 8517d129..347499a2 100644 --- a/tests/liii/string-cursor/string-contains-right-test.scm +++ b/tests/liii/string-cursor/string-contains-right-test.scm @@ -28,6 +28,12 @@ ;; 1. string-contains-right 是 SRFI-130 中的字符串搜索函数 ;; 2. 与 (liii string) 中的 string-contains-right 功能相同,但返回游标而非索引 ;; 3. 性能:O(n×m),n 为 s1 长度,m 为 s2 长度 +;; 4. 支持 Unicode 字符(包括多字节字符如中文、Emoji)的正确搜索 +;; +;; 相关实现 +;; -------- +;; (liii string) 库中也提供了 string-contains-right 函数,返回整数索引 +;; 参见: gf doc liii/string "string-contains-right" ;; 基本测试 (let ((result (string-contains-right "ababab" "ab"))) @@ -55,16 +61,22 @@ ;; 测试使用游标作为 start/end (let* ((s1 "ababab") - (s2 "ab") - (start1 (string-cursor-start s1)) - (end1 (string-cursor-end s1)) - (start2 (string-cursor-start s2)) - (end2 (string-cursor-end s2)) - (result (string-contains-right s1 s2 start1 end1 start2 end2)) - ) ; + (s2 "ab") + (start1 (string-cursor-start s1)) + (end1 (string-cursor-end s1)) + (start2 (string-cursor-start s2)) + (end2 (string-cursor-end s2)) + (result (string-contains-right s1 s2 start1 end1 start2 end2)) + ) ; (check (string-cursor->index s1 result) => 4) ) ;let* +;; Emoji 测试 +(let ((result (string-contains-right "hello😀world😀test" "😀"))) + (check (string-cursor->index "hello😀world😀test" result) => 11) +) ;let +(check (string-contains-right "abcdef" "😀") => #f) + ;; 测试混合类型报错 (check-catch 'type-error (string-contains-right "abc" "ab" 0 (string-cursor-end "abc")) diff --git a/tests/liii/string-cursor/string-contains-test.scm b/tests/liii/string-cursor/string-contains-test.scm index f5b297f9..75fdd695 100644 --- a/tests/liii/string-cursor/string-contains-test.scm +++ b/tests/liii/string-cursor/string-contains-test.scm @@ -28,6 +28,12 @@ ;; 1. string-contains 是 SRFI-130 中的字符串搜索函数 ;; 2. 与 (liii string) 中的 string-contains 功能相同,但返回游标而非索引 ;; 3. 性能:O(n×m),n 为 s1 长度,m 为 s2 长度 +;; 4. 支持 Unicode 字符(包括多字节字符如中文、Emoji)的正确搜索 +;; +;; 相关实现 +;; -------- +;; (liii string) 库中也提供了 string-contains 函数,返回整数索引 +;; 参见: gf doc liii/string "string-contains" ;; 基本测试 (let ((result (string-contains "abcdef" "cd"))) @@ -71,6 +77,12 @@ ;; 测试整数索引限制搜索范围 (check (string-contains "abcdef" "cd" 3 6) => #f) +;; Emoji 测试 +(let ((result (string-contains "hello😀world" "😀"))) + (check (string-cursor->index "hello😀world" result) => 5) +) ;let +(check (string-contains "abcdef" "😀") => #f) + ;; 测试混合类型报错 (check-catch 'type-error (string-contains "abc" "ab" 0 (string-cursor-end "abc")) diff --git a/tests/liii/string-cursor/string-copy-slash-cursors-test.scm b/tests/liii/string-cursor/string-copy-slash-cursors-test.scm index f48cf0a0..a03563da 100644 --- a/tests/liii/string-cursor/string-copy-slash-cursors-test.scm +++ b/tests/liii/string-cursor/string-copy-slash-cursors-test.scm @@ -33,6 +33,12 @@ ;; 3. start 和 end 必须同为整数或同为游标 ;; 4. 与 (liii string) 中的 string-copy 功能类似,但支持游标参数 ;; 5. 性能:O(n),n 为子串字符数 +;; 6. 支持 Unicode 字符(包括多字节字符如中文、Emoji)的正确复制 +;; +;; 相关实现 +;; -------- +;; (liii string) 库中提供了 string-copy 函数,使用整数索引 +;; 参见: gf doc liii/string "string-copy" ;; 基本测试 (let ((s "abcdef")) diff --git a/tests/liii/string-cursor/string-count-test.scm b/tests/liii/string-cursor/string-count-test.scm index 8aec337c..2fe88ef0 100644 --- a/tests/liii/string-cursor/string-count-test.scm +++ b/tests/liii/string-cursor/string-count-test.scm @@ -8,7 +8,7 @@ ;; ;; 语法 ;; ---- -;; (string-count pred s) +;; (string-count pred s [start end]) ;; ;; 参数 ;; ---- @@ -18,6 +18,9 @@ ;; s : string ;; 要统计的字符串 ;; +;; start, end : integer 或 string-cursor? (可选) +;; 子串范围,默认为整个字符串 +;; ;; 返回值 ;; ------ ;; integer @@ -28,6 +31,12 @@ ;; 1. 适用于 ASCII、中文、emoji 等各种 Unicode 字符 ;; 2. 空字符串返回 0 ;; 3. 性能:O(n),n 为检查的字符数 +;; 4. 支持 Unicode 字符(包括多字节字符如中文、Emoji)的正确统计 +;; +;; 相关实现 +;; -------- +;; (liii string) 库中也提供了 string-count 函数 +;; 参见: gf doc liii/string "string-count" ;; 基本测试 - 统计字母字符 (check (string-count char-alphabetic? "abc123") => 3) @@ -41,6 +50,9 @@ ;; 空字符串测试 (check (string-count (lambda (c) #t) "") => 0) +;; Emoji 测试 +(check (string-count (lambda (c) (char=? c #\😀)) "hello😀world😀") => 2) +(check (string-count char-alphabetic? "hello😀world") => 10) ;; 测试使用游标作为 start/end (let* ((s "abc123") (start (string-cursor-start s)) (end (string-cursor-end s))) diff --git a/tests/liii/string-cursor/string-cursor-back-test.scm b/tests/liii/string-cursor/string-cursor-back-test.scm index 7125629a..fdc66049 100644 --- a/tests/liii/string-cursor/string-cursor-back-test.scm +++ b/tests/liii/string-cursor/string-cursor-back-test.scm @@ -32,6 +32,12 @@ ;; 2. 如果 cursor 是整数,会先转换为游标 ;; 3. 如果移动超出范围,会报错 ;; 4. 性能:O(1) +;; 5. 支持 Unicode 字符(包括多字节字符如中文、Emoji)的正确游标移动 +;; +;; 相关实现 +;; -------- +;; (liii string-cursor) 独有函数,无 (liii string) 对应版本 +;; 参见: gf doc liii/string-cursor "string-cursor-back" ;; 测试ASCII字符串 (let* ((end (string-cursor-end "abcdef")) @@ -73,4 +79,11 @@ (check (string-cursor->index s back) => 1) ) ;let* +;; Emoji 测试 +(let* ((end (string-cursor-end "hello😀world")) + (back1 (string-cursor-back "hello😀world" end 1)) + ) ; + (check (string-cursor->index "hello😀world" back1) => 10) +) ;let* + (check-report) diff --git a/tests/liii/string-cursor/string-cursor-diff-test.scm b/tests/liii/string-cursor/string-cursor-diff-test.scm index becedd67..e03ff316 100644 --- a/tests/liii/string-cursor/string-cursor-diff-test.scm +++ b/tests/liii/string-cursor/string-cursor-diff-test.scm @@ -3,8 +3,38 @@ (check-set-mode! 'report-failed) -;; string-cursor-diff: 计算两个string cursor之间的字符距离 -;; 性能:O(1),直接计算索引差 +;; string-cursor-diff +;; 计算两个 string cursor 之间的字符距离。 +;; +;; 语法 +;; ---- +;; (string-cursor-diff str start end) +;; +;; 参数 +;; ---- +;; str : string +;; 源字符串 +;; +;; start, end : integer 或 string-cursor? +;; 起始和结束位置 +;; +;; 返回值 +;; ------ +;; integer +;; 两个游标之间的字符距离 +;; +;; 说明 +;; ---- +;; 1. string-cursor-diff 是 SRFI-130 中的游标操作函数 +;; 2. start 和 end 可以是整数索引或游标,但必须同为一种类型 +;; 3. 如果 start > end,会报错 +;; 4. 性能:O(1),直接计算索引差 +;; 5. 支持 Unicode 字符(包括多字节字符如中文、Emoji)的正确距离计算 +;; +;; 相关实现 +;; -------- +;; (liii string-cursor) 独有函数,无 (liii string) 对应版本 +;; 参见: gf doc liii/string-cursor "string-cursor-diff" (let* ((s "abcdef") (start (string-cursor-start s)) (end (string-cursor-end s)) @@ -23,6 +53,22 @@ ;; 测试混合类型报错 (check-catch 'type-error (string-cursor-diff "abc" 0 (string-cursor-end "abc"))) +;; 测试中文 +(let* ((s "中文测试") + (start (string-cursor-start s)) + (end (string-cursor-end s)) + ) ; + (check (string-cursor-diff s start end) => 4) +) ;let* + +;; 测试 Emoji +(let* ((s "🎉🚀🎁") + (start (string-cursor-start s)) + (end (string-cursor-end s)) + ) ; + (check (string-cursor-diff s start end) => 3) +) ;let* + ;; 测试 start > end 报错 (check-catch 'value-error (string-cursor-diff "abc" 2 1)) diff --git a/tests/liii/string-cursor/string-cursor-end-test.scm b/tests/liii/string-cursor/string-cursor-end-test.scm index a80488b3..62c9297d 100644 --- a/tests/liii/string-cursor/string-cursor-end-test.scm +++ b/tests/liii/string-cursor/string-cursor-end-test.scm @@ -25,6 +25,12 @@ ;; 1. 创建游标时会预扫描字符串生成偏移表 ;; 2. 空字符串返回指向位置0的游标 ;; 3. 性能:O(n),n为字符串字节长度(预扫描一次) +;; 4. 支持 Unicode 字符(包括多字节字符如中文、Emoji)的正确游标定位 +;; +;; 相关实现 +;; -------- +;; (liii string-cursor) 独有函数,无 (liii string) 对应版本 +;; 参见: gf doc liii/string-cursor "string-cursor-end" ;; 测试空字符串 (let ((c (string-cursor-end ""))) diff --git a/tests/liii/string-cursor/string-cursor-eq-p-test.scm b/tests/liii/string-cursor/string-cursor-eq-p-test.scm index 6e5583b3..88103049 100644 --- a/tests/liii/string-cursor/string-cursor-eq-p-test.scm +++ b/tests/liii/string-cursor/string-cursor-eq-p-test.scm @@ -4,7 +4,32 @@ (check-set-mode! 'report-failed) ;; string-cursor=? -;; 性能:O(1),直接比较索引 +;; 比较两个游标是否指向同一位置。 +;; +;; 语法 +;; ---- +;; (string-cursor=? cursor1 cursor2) +;; +;; 参数 +;; ---- +;; cursor1, cursor2 : string-cursor? +;; 要比较的两个游标 +;; +;; 返回值 +;; ------ +;; boolean? +;; 相等返回 #t,否则返回 #f +;; +;; 说明 +;; ---- +;; 1. string-cursor=? 是 SRFI-130 中的游标比较函数 +;; 2. 性能:O(1),直接比较索引 +;; 3. 支持 Unicode 字符串游标的比较 +;; +;; 相关实现 +;; -------- +;; (liii string-cursor) 独有函数,无 (liii string) 对应版本 +;; 参见: gf doc liii/string-cursor "string-cursor=?" (let* ((s "abcde") (c0 (string-index->cursor s 0)) (c1 (string-index->cursor s 1))) (check (string-cursor=? c0 c0) => #t) (check (string-cursor=? c0 c1) => #f) diff --git a/tests/liii/string-cursor/string-cursor-forward-test.scm b/tests/liii/string-cursor/string-cursor-forward-test.scm index 8d3af476..f6ba0bdf 100644 --- a/tests/liii/string-cursor/string-cursor-forward-test.scm +++ b/tests/liii/string-cursor/string-cursor-forward-test.scm @@ -32,6 +32,12 @@ ;; 2. 如果 cursor 是整数,会先转换为游标 ;; 3. 如果移动超出范围,会报错 ;; 4. 性能:O(1) +;; 5. 支持 Unicode 字符(包括多字节字符如中文、Emoji)的正确游标移动 +;; +;; 相关实现 +;; -------- +;; (liii string-cursor) 独有函数,无 (liii string) 对应版本 +;; 参见: gf doc liii/string-cursor "string-cursor-forward" ;; 测试ASCII字符串 (let* ((start (string-cursor-start "abcdef")) diff --git a/tests/liii/string-cursor/string-cursor-ge-p-test.scm b/tests/liii/string-cursor/string-cursor-ge-p-test.scm index 0a1010e2..cf4faea0 100644 --- a/tests/liii/string-cursor/string-cursor-ge-p-test.scm +++ b/tests/liii/string-cursor/string-cursor-ge-p-test.scm @@ -4,7 +4,32 @@ (check-set-mode! 'report-failed) ;; string-cursor>=? -;; 性能:O(1),直接比较索引 +;; 判断游标1是否大于或等于游标2。 +;; +;; 语法 +;; ---- +;; (string-cursor>=? cursor1 cursor2) +;; +;; 参数 +;; ---- +;; cursor1, cursor2 : string-cursor? +;; 要比较的两个游标 +;; +;; 返回值 +;; ------ +;; boolean? +;; 大于或等于返回 #t,否则返回 #f +;; +;; 说明 +;; ---- +;; 1. string-cursor>=? 是 SRFI-130 中的游标比较函数 +;; 2. 性能:O(1),直接比较索引 +;; 3. 支持 Unicode 字符串游标的比较 +;; +;; 相关实现 +;; -------- +;; (liii string-cursor) 独有函数,无 (liii string) 对应版本 +;; 参见: gf doc liii/string-cursor "string-cursor>=?" (let* ((s "abcde") (c0 (string-index->cursor s 0)) (c1 (string-index->cursor s 1))) (check (string-cursor>=? c1 c0) => #t) (check (string-cursor>=? c1 c1) => #t) diff --git a/tests/liii/string-cursor/string-cursor-gt-p-test.scm b/tests/liii/string-cursor/string-cursor-gt-p-test.scm index a3346c46..503ec3f6 100644 --- a/tests/liii/string-cursor/string-cursor-gt-p-test.scm +++ b/tests/liii/string-cursor/string-cursor-gt-p-test.scm @@ -4,6 +4,33 @@ (check-set-mode! 'report-failed) ;; string-cursor>? +;; 判断游标1是否大于游标2。 +;; +;; 语法 +;; ---- +;; (string-cursor>? cursor1 cursor2) +;; +;; 参数 +;; ---- +;; cursor1, cursor2 : string-cursor? +;; 要比较的两个游标 +;; +;; 返回值 +;; ------ +;; boolean? +;; 大于返回 #t,否则返回 #f +;; +;; 说明 +;; ---- +;; 1. string-cursor>? 是 SRFI-130 中的游标比较函数 +;; 2. 性能:O(1),直接比较索引 +;; 3. 支持 Unicode 字符串游标的比较 +;; +;; 相关实现 +;; -------- +;; (liii string-cursor) 独有函数,无 (liii string) 对应版本 +;; 参见: gf doc liii/string-cursor "string-cursor>?" + ;; 性能:O(1),直接比较索引 (let* ((s "abcde") (c0 (string-index->cursor s 0)) diff --git a/tests/liii/string-cursor/string-cursor-le-p-test.scm b/tests/liii/string-cursor/string-cursor-le-p-test.scm index c49cd04a..a426b080 100644 --- a/tests/liii/string-cursor/string-cursor-le-p-test.scm +++ b/tests/liii/string-cursor/string-cursor-le-p-test.scm @@ -4,6 +4,33 @@ (check-set-mode! 'report-failed) ;; string-cursor<=? +;; 判断游标1是否小于或等于游标2。 +;; +;; 语法 +;; ---- +;; (string-cursor<=? cursor1 cursor2) +;; +;; 参数 +;; ---- +;; cursor1, cursor2 : string-cursor? +;; 要比较的两个游标 +;; +;; 返回值 +;; ------ +;; boolean? +;; 小于或等于返回 #t,否则返回 #f +;; +;; 说明 +;; ---- +;; 1. string-cursor<=? 是 SRFI-130 中的游标比较函数 +;; 2. 性能:O(1),直接比较索引 +;; 3. 支持 Unicode 字符串游标的比较 +;; +;; 相关实现 +;; -------- +;; (liii string-cursor) 独有函数,无 (liii string) 对应版本 +;; 参见: gf doc liii/string-cursor "string-cursor<=?" + ;; 性能:O(1),直接比较索引 (let* ((s "abcde") (c0 (string-index->cursor s 0)) (c1 (string-index->cursor s 1))) (check (string-cursor<=? c0 c1) => #t) diff --git a/tests/liii/string-cursor/string-cursor-lt-p-test.scm b/tests/liii/string-cursor/string-cursor-lt-p-test.scm index 6a588d80..e6de4195 100644 --- a/tests/liii/string-cursor/string-cursor-lt-p-test.scm +++ b/tests/liii/string-cursor/string-cursor-lt-p-test.scm @@ -4,6 +4,33 @@ (check-set-mode! 'report-failed) ;; string-cursorcursor s 0)) diff --git a/tests/liii/string-cursor/string-cursor-next-test.scm b/tests/liii/string-cursor/string-cursor-next-test.scm index 12674ac4..0f3de276 100644 --- a/tests/liii/string-cursor/string-cursor-next-test.scm +++ b/tests/liii/string-cursor/string-cursor-next-test.scm @@ -29,6 +29,12 @@ ;; 2. 如果 cursor 是整数,会先转换为游标 ;; 3. 如果已在字符串末尾,会报错 ;; 4. 性能:O(1) +;; 5. 支持 Unicode 字符(包括多字节字符如中文、Emoji)的正确游标移动 +;; +;; 相关实现 +;; -------- +;; (liii string-cursor) 独有函数,无 (liii string) 对应版本 +;; 参见: gf doc liii/string-cursor "string-cursor-next" ;; 测试ASCII字符串 (let* ((start (string-cursor-start "abc")) diff --git a/tests/liii/string-cursor/string-cursor-p-test.scm b/tests/liii/string-cursor/string-cursor-p-test.scm index 03165fa3..0d9a2638 100644 --- a/tests/liii/string-cursor/string-cursor-p-test.scm +++ b/tests/liii/string-cursor/string-cursor-p-test.scm @@ -25,6 +25,12 @@ ;; 1. string-cursor? 是 SRFI-130 中的游标谓词函数 ;; 2. 与 (liii string) 的区别:(liii string-cursor) 提供了完整的游标操作支持 ;; 3. 性能:O(1) +;; 4. 支持 Unicode 字符串游标的判断 +;; +;; 相关实现 +;; -------- +;; (liii string-cursor) 独有函数,无 (liii string) 对应版本 +;; 参见: gf doc liii/string-cursor "string-cursor?" ;; 基本测试 (let ((s "abc") (c (string-cursor-start "abc"))) diff --git a/tests/liii/string-cursor/string-cursor-prev-test.scm b/tests/liii/string-cursor/string-cursor-prev-test.scm index 332a6ba0..625ab3c4 100644 --- a/tests/liii/string-cursor/string-cursor-prev-test.scm +++ b/tests/liii/string-cursor/string-cursor-prev-test.scm @@ -29,6 +29,12 @@ ;; 2. 如果 cursor 是整数,会先转换为游标 ;; 3. 如果已在字符串开头,会报错 ;; 4. 性能:O(1) +;; 5. 支持 Unicode 字符(包括多字节字符如中文、Emoji)的正确游标移动 +;; +;; 相关实现 +;; -------- +;; (liii string-cursor) 独有函数,无 (liii string) 对应版本 +;; 参见: gf doc liii/string-cursor "string-cursor-prev" ;; 测试ASCII字符串 (let* ((s "abc") diff --git a/tests/liii/string-cursor/string-cursor-start-test.scm b/tests/liii/string-cursor/string-cursor-start-test.scm index 9451062d..46ee0a4b 100644 --- a/tests/liii/string-cursor/string-cursor-start-test.scm +++ b/tests/liii/string-cursor/string-cursor-start-test.scm @@ -25,6 +25,12 @@ ;; 1. 创建游标时会预扫描字符串生成偏移表 ;; 2. 空字符串返回指向位置0的游标 ;; 3. 性能:O(n),n为字符串字节长度(预扫描一次) +;; 4. 支持 Unicode 字符(包括多字节字符如中文、Emoji)的正确游标定位 +;; +;; 相关实现 +;; -------- +;; (liii string-cursor) 独有函数,无 (liii string) 对应版本 +;; 参见: gf doc liii/string-cursor "string-cursor-start" ;; 测试空字符串 (let ((c (string-cursor-start ""))) diff --git a/tests/liii/string-cursor/string-cursor-to-index-test.scm b/tests/liii/string-cursor/string-cursor-to-index-test.scm index 3b1609d6..427a206f 100644 --- a/tests/liii/string-cursor/string-cursor-to-index-test.scm +++ b/tests/liii/string-cursor/string-cursor-to-index-test.scm @@ -28,6 +28,12 @@ ;; 1. string-cursor->index 是 SRFI-130 中的游标转换函数 ;; 2. 与 (liii string) 的区别:(liii string-cursor) 提供了完整的游标操作支持 ;; 3. 性能:O(1),直接读取游标中的索引信息 +;; 4. 支持 Unicode 字符(包括多字节字符如中文、Emoji)的正确索引转换 +;; +;; 相关实现 +;; -------- +;; (liii string-cursor) 独有函数,无 (liii string) 对应版本 +;; 参见: gf doc liii/string-cursor "string-cursor->index" ;; 基本测试 (let* ((s "abcdef") diff --git a/tests/liii/string-cursor/string-drop-right-test.scm b/tests/liii/string-cursor/string-drop-right-test.scm index 8d9e0930..4c6b453d 100644 --- a/tests/liii/string-cursor/string-drop-right-test.scm +++ b/tests/liii/string-cursor/string-drop-right-test.scm @@ -29,6 +29,12 @@ ;; 2. nchars等于字符串长度时返回空字符串 ;; 3. 适用于ASCII、中文、emoji等各种Unicode字符 ;; 4. 性能:O(n),n 为跳过的字符数 +;; 5. 支持 Unicode 字符(包括多字节字符如中文、Emoji)的正确截取 +;; +;; 相关实现 +;; -------- +;; (liii string) 库中也提供了 string-drop-right 函数 +;; 参见: gf doc liii/string "string-drop-right" ;; ;; 错误处理 ;; -------- diff --git a/tests/liii/string-cursor/string-drop-test.scm b/tests/liii/string-cursor/string-drop-test.scm index e42c423a..4af5b093 100644 --- a/tests/liii/string-cursor/string-drop-test.scm +++ b/tests/liii/string-cursor/string-drop-test.scm @@ -29,6 +29,12 @@ ;; 2. nchars等于字符串长度时返回空字符串 ;; 3. 适用于ASCII、中文、emoji等各种Unicode字符 ;; 4. 性能:O(n),n 为跳过的字符数 +;; 5. 支持 Unicode 字符(包括多字节字符如中文、Emoji)的正确截取 +;; +;; 相关实现 +;; -------- +;; (liii string) 库中也提供了 string-drop 函数 +;; 参见: gf doc liii/string "string-drop" ;; ;; 错误处理 ;; -------- diff --git a/tests/liii/string-cursor/string-every-test.scm b/tests/liii/string-cursor/string-every-test.scm index ac24c36a..9dde6b5b 100644 --- a/tests/liii/string-cursor/string-every-test.scm +++ b/tests/liii/string-cursor/string-every-test.scm @@ -33,6 +33,7 @@ ;; 2. 与 (liii string) 中的 string-every 功能相同,但本版本使用 cursor 遍历字符串 ;; 3. start/end 参数可以是整数索引或 string-cursor ;; 4. 与 (liii string) 版本的差异:本版本只接受谓词(procedure),不支持字符参数 +;; 5. 支持 Unicode 字符(包括多字节字符如中文、Emoji)的正确遍历和检查 ;; ;; 相关实现 ;; -------- diff --git a/tests/liii/string-cursor/string-filter-test.scm b/tests/liii/string-cursor/string-filter-test.scm index 2b18e852..d12eb9b1 100644 --- a/tests/liii/string-cursor/string-filter-test.scm +++ b/tests/liii/string-cursor/string-filter-test.scm @@ -34,6 +34,12 @@ ;; 1. 返回新字符串,不修改原字符串 ;; 2. 与 (liii string) 的区别:(liii string-cursor) 按字符过滤,支持 Unicode ;; 3. 性能:O(n),只需遍历一次字符串 +;; 4. 支持 Unicode 字符(包括多字节字符如中文、Emoji)的正确过滤 +;; +;; 相关实现 +;; -------- +;; (liii string) 库中也提供了 string-filter 函数 +;; 参见: gf doc liii/string "string-filter" (check (string-filter char-alphabetic? "abc123") => "abc") (check (string-filter char-numeric? "abc123") => "123") diff --git a/tests/liii/string-cursor/string-fold-right-test.scm b/tests/liii/string-cursor/string-fold-right-test.scm index 3b73a2e5..add9938c 100644 --- a/tests/liii/string-cursor/string-fold-right-test.scm +++ b/tests/liii/string-cursor/string-fold-right-test.scm @@ -32,6 +32,12 @@ ;; 2. 适用于 ASCII、中文、emoji 等各种 Unicode 字符 ;; 3. 空字符串返回 knil ;; 4. 性能:O(n),n 为字符串字符数 +;; 5. 支持 Unicode 字符(包括多字节字符如中文、Emoji)的正确折叠 +;; +;; 相关实现 +;; -------- +;; (liii string) 库中也提供了 string-fold-right 函数 +;; 参见: gf doc liii/string "string-fold-right" ;; 基本测试 - ASCII,从右到左折叠为顺序列表 (check (string-fold-right cons '() "abc") => '(#\a #\b #\c)) diff --git a/tests/liii/string-cursor/string-fold-test.scm b/tests/liii/string-cursor/string-fold-test.scm index 7d34921e..9b8b9886 100644 --- a/tests/liii/string-cursor/string-fold-test.scm +++ b/tests/liii/string-cursor/string-fold-test.scm @@ -32,6 +32,12 @@ ;; 2. 适用于 ASCII、中文、emoji 等各种 Unicode 字符 ;; 3. 空字符串返回 knil ;; 4. 性能:O(n),n 为字符串字符数 +;; 5. 支持 Unicode 字符(包括多字节字符如中文、Emoji)的正确折叠 +;; +;; 相关实现 +;; -------- +;; (liii string) 库中也提供了 string-fold 函数 +;; 参见: gf doc liii/string "string-fold" ;; 基本测试 - ASCII,从左到右折叠为逆序列表 (check (string-fold (lambda (c acc) (cons c acc)) '() "abc") => '(#\c #\b #\a)) diff --git a/tests/liii/string-cursor/string-for-each-cursor-test.scm b/tests/liii/string-cursor/string-for-each-cursor-test.scm index 0cdd75a7..e3081157 100644 --- a/tests/liii/string-cursor/string-for-each-cursor-test.scm +++ b/tests/liii/string-cursor/string-for-each-cursor-test.scm @@ -29,6 +29,12 @@ ;; 2. 传递给 proc 的是 cursor 而非字符本身 ;; 3. 需要使用 string-ref/cursor 等函数从 cursor 获取字符 ;; 4. 性能:O(n),n 为字符串字符数 +;; 5. 支持 Unicode 字符(包括多字节字符如中文、Emoji)的正确遍历 +;; +;; 相关实现 +;; -------- +;; (liii string-cursor) 独有函数,无 (liii string) 直接对应版本 +;; 参见: gf doc liii/string-cursor "string-for-each-cursor" ;; 基本测试 - 收集所有 cursor 并通过 string-ref/cursor 读取字符 (let ((result '())) diff --git a/tests/liii/string-cursor/string-index-right-test.scm b/tests/liii/string-cursor/string-index-right-test.scm index f1916d35..35675986 100644 --- a/tests/liii/string-cursor/string-index-right-test.scm +++ b/tests/liii/string-cursor/string-index-right-test.scm @@ -37,6 +37,12 @@ ;; 3. 返回的是 successor cursor(匹配字符的下一个位置) ;; 4. 适用于 ASCII、中文、emoji 等各种 Unicode 字符 ;; 5. 性能:O(n),n 为字符串字符数 +;; 6. 支持 Unicode 字符(包括多字节字符如中文、Emoji)的正确搜索 +;; +;; 相关实现 +;; -------- +;; (liii string) 库中也提供了 string-index-right 函数,返回整数索引 +;; 参见: gf doc liii/string "string-index-right" ;; ;; 错误处理 ;; -------- diff --git a/tests/liii/string-cursor/string-index-test.scm b/tests/liii/string-cursor/string-index-test.scm index 2a566377..bc8c36de 100644 --- a/tests/liii/string-cursor/string-index-test.scm +++ b/tests/liii/string-cursor/string-index-test.scm @@ -36,6 +36,12 @@ ;; 2. 结果始终为 cursor,即使 start/end 是整数索引 ;; 3. 适用于 ASCII、中文、emoji 等各种 Unicode 字符 ;; 4. 性能:O(n),n 为字符串字符数 +;; 5. 支持 Unicode 字符(包括多字节字符如中文、Emoji)的正确搜索 +;; +;; 相关实现 +;; -------- +;; (liii string) 库中也提供了 string-index 函数,返回整数索引 +;; 参见: gf doc liii/string "string-index" ;; ;; 错误处理 ;; -------- diff --git a/tests/liii/string-cursor/string-index-to-cursor-test.scm b/tests/liii/string-cursor/string-index-to-cursor-test.scm index 51133645..3f3c5df9 100644 --- a/tests/liii/string-cursor/string-index-to-cursor-test.scm +++ b/tests/liii/string-cursor/string-index-to-cursor-test.scm @@ -29,6 +29,12 @@ ;; 2. 如果 index 已经是游标,则直接返回 ;; 3. 与 (liii string) 的区别:(liii string-cursor) 提供了完整的游标操作支持 ;; 4. 性能:O(n),需要扫描字符串建立位置映射表 +;; 5. 支持 Unicode 字符(包括多字节字符如中文、Emoji)的正确索引转换 +;; +;; 相关实现 +;; -------- +;; (liii string-cursor) 独有函数,无 (liii string) 对应版本 +;; 参见: gf doc liii/string-cursor "string-index->cursor" ;; 基本测试 (let* ((s "abcdef") diff --git a/tests/liii/string-cursor/string-join-test.scm b/tests/liii/string-cursor/string-join-test.scm index 91c52366..9a580273 100644 --- a/tests/liii/string-cursor/string-join-test.scm +++ b/tests/liii/string-cursor/string-join-test.scm @@ -34,6 +34,12 @@ ;; 4. prefix:在元素之间和开头插入分隔符 ;; 5. 与 (liii string) 的区别:(liii string-cursor) 支持 Unicode 字符串 ;; 6. 性能:O(n),n 为所有字符串总长度 +;; 7. 支持 Unicode 字符(包括多字节字符如中文、Emoji)的正确连接 +;; +;; 相关实现 +;; -------- +;; (liii string) 库中也提供了 string-join 函数 +;; 参见: gf doc liii/string "string-join" (check (string-join '("a" "b" "c")) => "a b c") (check (string-join '("a" "b" "c") ":") => "a:b:c") diff --git a/tests/liii/string-cursor/string-null-p-test.scm b/tests/liii/string-cursor/string-null-p-test.scm index 25bba6f1..7985456b 100644 --- a/tests/liii/string-cursor/string-null-p-test.scm +++ b/tests/liii/string-cursor/string-null-p-test.scm @@ -25,6 +25,12 @@ ;; 1. 空字符串返回#t ;; 2. 包含任意字符(包括中文、emoji)的字符串返回#f ;; 3. 性能:O(1),直接检查长度 +;; 4. 支持 Unicode 字符串的空判断 +;; +;; 相关实现 +;; -------- +;; (liii string) 库中也提供了 string-null? 函数 +;; 参见: gf doc liii/string "string-null?" ;; 基本测试 (check (string-null? "") => #t) diff --git a/tests/liii/string-cursor/string-pad-right-test.scm b/tests/liii/string-cursor/string-pad-right-test.scm index b3d52149..6cd3a600 100644 --- a/tests/liii/string-cursor/string-pad-right-test.scm +++ b/tests/liii/string-cursor/string-pad-right-test.scm @@ -35,6 +35,12 @@ ;; 2. 与 (liii string) 中的 string-pad-right 功能相同 ;; 3. 如果 s 的长度超过 len,则截断右侧 ;; 4. 性能:O(len) +;; 5. 支持 Unicode 字符(包括多字节字符如中文、Emoji)的正确填充 +;; +;; 相关实现 +;; -------- +;; (liii string) 库中也提供了 string-pad-right 函数 +;; 参见: gf doc liii/string "string-pad-right" (check (string-pad-right "325" 5) => "325 ") (check (string-pad-right "71325" 5) => "71325") diff --git a/tests/liii/string-cursor/string-pad-test.scm b/tests/liii/string-cursor/string-pad-test.scm index 894a681d..be881a59 100644 --- a/tests/liii/string-cursor/string-pad-test.scm +++ b/tests/liii/string-cursor/string-pad-test.scm @@ -35,6 +35,12 @@ ;; 2. 与 (liii string) 中的 string-pad 功能相同 ;; 3. 如果 s 的长度超过 len,则截断右侧 ;; 4. 性能:O(len) +;; 5. 支持 Unicode 字符(包括多字节字符如中文、Emoji)的正确填充 +;; +;; 相关实现 +;; -------- +;; (liii string) 库中也提供了 string-pad 函数 +;; 参见: gf doc liii/string "string-pad" (check (string-pad "325" 5) => " 325") (check (string-pad "71325" 5) => "71325") diff --git a/tests/liii/string-cursor/string-prefix-length-test.scm b/tests/liii/string-cursor/string-prefix-length-test.scm index 8912a283..20590020 100644 --- a/tests/liii/string-cursor/string-prefix-length-test.scm +++ b/tests/liii/string-cursor/string-prefix-length-test.scm @@ -28,6 +28,12 @@ ;; 1. string-prefix-length 是 SRFI-130 中的字符串比较函数 ;; 2. 与 (liii string) 中的 string-prefix-length 功能相同 ;; 3. 性能:O(n),n 为公共前缀长度 +;; 4. 支持 Unicode 字符(包括多字节字符如中文、Emoji)的正确比较 +;; +;; 相关实现 +;; -------- +;; (liii string) 库中也提供了 string-prefix-length 函数 +;; 参见: gf doc liii/string "string-prefix-length" (check (string-prefix-length "" "") => 0) (check (string-prefix-length "abc" "abc") => 3) diff --git a/tests/liii/string-cursor/string-prefix-p-test.scm b/tests/liii/string-cursor/string-prefix-p-test.scm index 916a09ec..b2ed982a 100644 --- a/tests/liii/string-cursor/string-prefix-p-test.scm +++ b/tests/liii/string-cursor/string-prefix-p-test.scm @@ -28,6 +28,12 @@ ;; 1. string-prefix? 是 SRFI-130 中的字符串比较函数 ;; 2. 与 (liii string) 中的 string-prefix? 功能相同 ;; 3. 性能:O(n),n 为 s1 的长度 +;; 4. 支持 Unicode 字符(包括多字节字符如中文、Emoji)的正确比较 +;; +;; 相关实现 +;; -------- +;; (liii string) 库中也提供了 string-prefix? 函数 +;; 参见: gf doc liii/string "string-prefix?" (check (string-prefix? "" "") => #t) (check (string-prefix? "" "abc") => #t) diff --git a/tests/liii/string-cursor/string-ref-slash-cursor-test.scm b/tests/liii/string-cursor/string-ref-slash-cursor-test.scm index 7741a6b6..30fa7a49 100644 --- a/tests/liii/string-cursor/string-ref-slash-cursor-test.scm +++ b/tests/liii/string-cursor/string-ref-slash-cursor-test.scm @@ -30,6 +30,12 @@ ;; 3. 与 (scheme base) 中的 string-ref 不同,本函数按字符访问而非按字节 ;; 4. 与 (liii string) 中的 string-ref 功能类似,但支持游标参数 ;; 5. 性能:O(1),当传入游标时;O(n) 当传入整数索引时 +;; 6. 支持 Unicode 字符(包括多字节字符如中文、Emoji)的正确访问 +;; +;; 相关实现 +;; -------- +;; (liii string) 库中提供了 string-ref 函数,使用整数索引 +;; 参见: gf doc liii/string "string-ref" ;; 测试ASCII (let ((s "abc")) diff --git a/tests/liii/string-cursor/string-remove-test.scm b/tests/liii/string-cursor/string-remove-test.scm index 373ae5ce..38a1eff1 100644 --- a/tests/liii/string-cursor/string-remove-test.scm +++ b/tests/liii/string-cursor/string-remove-test.scm @@ -34,6 +34,12 @@ ;; 1. string-remove 是 string-filter 的补集 ;; 2. 与 (liii string) 的区别:(liii string-cursor) 按字符移除,支持 Unicode ;; 3. 性能:O(n),只需遍历一次字符串 +;; 4. 支持 Unicode 字符(包括多字节字符如中文、Emoji)的正确移除 +;; +;; 相关实现 +;; -------- +;; (liii string) 库中也提供了 string-remove 函数 +;; 参见: gf doc liii/string "string-remove" (check (string-remove char-alphabetic? "abc123") => "123") (check (string-remove char-numeric? "abc123") => "abc") diff --git a/tests/liii/string-cursor/string-replace-test.scm b/tests/liii/string-cursor/string-replace-test.scm index a11ef6c6..abc0faf2 100644 --- a/tests/liii/string-cursor/string-replace-test.scm +++ b/tests/liii/string-cursor/string-replace-test.scm @@ -40,6 +40,12 @@ ;; 1. 返回新字符串,不修改原字符串 ;; 2. 与 (liii string) 的区别:(liii string-cursor) 按字符位置操作,支持 Unicode ;; 3. 性能:O(n),n 为涉及的字符串总长度 +;; 4. 支持 Unicode 字符(包括多字节字符如中文、Emoji)的正确替换 +;; +;; 相关实现 +;; -------- +;; (liii string) 库中也提供了 string-replace 函数 +;; 参见: gf doc liii/string "string-replace" (check (string-replace "It's easy to code it up in Scheme." "lots of fun" 5 9) => diff --git a/tests/liii/string-cursor/string-replicate-test.scm b/tests/liii/string-cursor/string-replicate-test.scm index 2f2d641d..5d722a10 100644 --- a/tests/liii/string-cursor/string-replicate-test.scm +++ b/tests/liii/string-cursor/string-replicate-test.scm @@ -38,6 +38,12 @@ ;; 2. 支持 Unicode 字符串 ;; 3. 与 (liii string) 的区别:(liii string-cursor) 按字符操作,(liii string) 按字节操作 ;; 4. 性能:O(n),n 为输出字符串长度 +;; 5. 支持 Unicode 字符(包括多字节字符如中文、Emoji)的正确复制 +;; +;; 相关实现 +;; -------- +;; (liii string) 库中也提供了 string-replicate 函数 +;; 参见: gf doc liii/string "string-replicate" ;; 基本测试 (check (string-replicate "abcdef" 2 8) => "cdefab") diff --git a/tests/liii/string-cursor/string-reverse-test.scm b/tests/liii/string-cursor/string-reverse-test.scm index 83bdf20c..916a84b9 100644 --- a/tests/liii/string-cursor/string-reverse-test.scm +++ b/tests/liii/string-cursor/string-reverse-test.scm @@ -32,6 +32,12 @@ ;; 2. 支持 Unicode 字符,包括中文和 emoji ;; 3. 支持可选的 start/end 参数指定子串反转 ;; 4. 性能:O(n),n 为子串字符数 +;; 5. 支持 Unicode 字符(包括多字节字符如中文、Emoji)的正确反转 +;; +;; 相关实现 +;; -------- +;; (liii string) 库中也提供了 string-reverse 函数 +;; 参见: gf doc liii/string "string-reverse" ;; 基本测试 (check (string-reverse "abc") => "cba") diff --git a/tests/liii/string-cursor/string-skip-right-test.scm b/tests/liii/string-cursor/string-skip-right-test.scm index 978176e9..d0ef646d 100644 --- a/tests/liii/string-cursor/string-skip-right-test.scm +++ b/tests/liii/string-cursor/string-skip-right-test.scm @@ -38,6 +38,12 @@ ;; 3. 搜索范围是 [start, end) ;; 4. 与 (liii string) 的区别:(liii string-cursor) 按字符操作,支持 Unicode ;; 5. 性能:O(n),n 为字符串字符数 +;; 6. 支持 Unicode 字符(包括多字节字符如中文、Emoji)的正确搜索 +;; +;; 相关实现 +;; -------- +;; (liii string) 库中也提供了 string-skip-right 函数 +;; 参见: gf doc liii/string "string-skip-right" ;; 基本测试 - ASCII (let ((s "abc123")) diff --git a/tests/liii/string-cursor/string-skip-test.scm b/tests/liii/string-cursor/string-skip-test.scm index 4b1da973..27218b8b 100644 --- a/tests/liii/string-cursor/string-skip-test.scm +++ b/tests/liii/string-cursor/string-skip-test.scm @@ -36,6 +36,12 @@ ;; 2. 常用于跳过空白字符等场景 ;; 3. 搜索范围是 [start, end) ;; 4. 性能:O(n),n 为字符串字符数 +;; 5. 支持 Unicode 字符(包括多字节字符如中文、Emoji)的正确搜索 +;; +;; 相关实现 +;; -------- +;; (liii string) 库中也提供了 string-skip 函数 +;; 参见: gf doc liii/string "string-skip" ;; 基本测试 (let ((s " abc")) diff --git a/tests/liii/string-cursor/string-split-test.scm b/tests/liii/string-cursor/string-split-test.scm index 6bd2206a..4c7c8b66 100644 --- a/tests/liii/string-cursor/string-split-test.scm +++ b/tests/liii/string-cursor/string-split-test.scm @@ -40,6 +40,12 @@ ;; 1. 支持空分隔符,此时按字符分割 ;; 2. 与 (liii string) 的区别:(liii string-cursor) 按字符操作,正确处理 Unicode ;; 3. 性能:O(n×m),n 为 s 长度,m 为 delimiter 长度 +;; 4. 支持 Unicode 字符(包括多字节字符如中文、Emoji)的正确分割 +;; +;; 相关实现 +;; -------- +;; (liii string) 库中也提供了 string-split 函数 +;; 参见: gf doc liii/string "string-split" (check (string-split "a:b:c" ":") => '("a" "b" "c")) (check (string-split "abc" "") => '("a" "b" "c")) diff --git a/tests/liii/string-cursor/string-suffix-length-test.scm b/tests/liii/string-cursor/string-suffix-length-test.scm index b62c0e9e..bb29861f 100644 --- a/tests/liii/string-cursor/string-suffix-length-test.scm +++ b/tests/liii/string-cursor/string-suffix-length-test.scm @@ -28,6 +28,12 @@ ;; 1. string-suffix-length 是 SRFI-130 中的字符串比较函数 ;; 2. 与 (liii string) 中的 string-suffix-length 功能相同 ;; 3. 性能:O(n),n 为公共后缀长度 +;; 4. 支持 Unicode 字符(包括多字节字符如中文、Emoji)的正确比较 +;; +;; 相关实现 +;; -------- +;; (liii string) 库中也提供了 string-suffix-length 函数 +;; 参见: gf doc liii/string "string-suffix-length" (check (string-suffix-length "" "") => 0) (check (string-suffix-length "abc" "abc") => 3) diff --git a/tests/liii/string-cursor/string-suffix-p-test.scm b/tests/liii/string-cursor/string-suffix-p-test.scm index b9914ed1..27f7c3c7 100644 --- a/tests/liii/string-cursor/string-suffix-p-test.scm +++ b/tests/liii/string-cursor/string-suffix-p-test.scm @@ -28,6 +28,12 @@ ;; 1. string-suffix? 是 SRFI-130 中的字符串比较函数 ;; 2. 与 (liii string) 中的 string-suffix? 功能相同 ;; 3. 性能:O(n),n 为 s1 的长度 +;; 4. 支持 Unicode 字符(包括多字节字符如中文、Emoji)的正确比较 +;; +;; 相关实现 +;; -------- +;; (liii string) 库中也提供了 string-suffix? 函数 +;; 参见: gf doc liii/string "string-suffix?" (check (string-suffix? "" "") => #t) (check (string-suffix? "" "abc") => #t) diff --git a/tests/liii/string-cursor/string-tabulate-test.scm b/tests/liii/string-cursor/string-tabulate-test.scm index e1934c1a..a0eec464 100644 --- a/tests/liii/string-cursor/string-tabulate-test.scm +++ b/tests/liii/string-cursor/string-tabulate-test.scm @@ -28,6 +28,12 @@ ;; 1. (proc i) 对每个 i 从 0 到 len-1 调用 ;; 2. 与 (liii string) 的区别:无直接对应函数,(liii string-cursor) 独有 ;; 3. 性能:O(n),n 为 len +;; 4. 支持 Unicode 字符(包括多字节字符如中文、Emoji)的正确构造 +;; +;; 相关实现 +;; -------- +;; (liii string-cursor) 独有函数,无 (liii string) 对应版本 +;; 参见: gf doc liii/string-cursor "string-tabulate" (check (string-tabulate (lambda (i) (integer->char (+ i 65))) 3) => "ABC") (check (string-tabulate (lambda (i) #\a) 0) => "") diff --git a/tests/liii/string-cursor/string-take-right-test.scm b/tests/liii/string-cursor/string-take-right-test.scm index 3113dcdd..6587ce5e 100644 --- a/tests/liii/string-cursor/string-take-right-test.scm +++ b/tests/liii/string-cursor/string-take-right-test.scm @@ -29,6 +29,12 @@ ;; 2. nchars等于字符串长度时返回原字符串 ;; 3. 适用于ASCII、中文、emoji等各种Unicode字符 ;; 4. 性能:O(n),n 为取用的字符数 +;; 5. 支持 Unicode 字符(包括多字节字符如中文、Emoji)的正确截取 +;; +;; 相关实现 +;; -------- +;; (liii string) 库中也提供了 string-take-right 函数 +;; 参见: gf doc liii/string "string-take-right" ;; ;; 错误处理 ;; -------- diff --git a/tests/liii/string-cursor/string-take-test.scm b/tests/liii/string-cursor/string-take-test.scm index 8ba0c736..309cd1d8 100644 --- a/tests/liii/string-cursor/string-take-test.scm +++ b/tests/liii/string-cursor/string-take-test.scm @@ -29,6 +29,12 @@ ;; 2. nchars等于字符串长度时返回原字符串 ;; 3. 适用于ASCII、中文、emoji等各种Unicode字符 ;; 4. 性能:O(n),n 为取用的字符数 +;; 5. 支持 Unicode 字符(包括多字节字符如中文、Emoji)的正确截取 +;; +;; 相关实现 +;; -------- +;; (liii string) 库中也提供了 string-take 函数 +;; 参见: gf doc liii/string "string-take" ;; ;; 错误处理 ;; -------- diff --git a/tests/liii/string-cursor/string-to-list-slash-cursors-test.scm b/tests/liii/string-cursor/string-to-list-slash-cursors-test.scm index 622f49a9..7a771f28 100644 --- a/tests/liii/string-cursor/string-to-list-slash-cursors-test.scm +++ b/tests/liii/string-cursor/string-to-list-slash-cursors-test.scm @@ -31,6 +31,12 @@ ;; 1. 返回新分配的列表 ;; 2. 与 (liii string) 的区别:(liii string-cursor) 按字符转换,支持 Unicode ;; 3. 性能:O(n),n 为子串字符数 +;; 4. 支持 Unicode 字符(包括多字节字符如中文、Emoji)的正确转换 +;; +;; 相关实现 +;; -------- +;; (liii string) 库中提供了 string->list 函数 +;; 参见: gf doc liii/string "string->list" (check (string->list/cursors "abc") => '(#\a #\b #\c)) (check (string->list/cursors "abc" 1 2) => '(#\b)) diff --git a/tests/liii/string-cursor/string-to-vector-slash-cursors-test.scm b/tests/liii/string-cursor/string-to-vector-slash-cursors-test.scm index 9c7fb227..4913a6be 100644 --- a/tests/liii/string-cursor/string-to-vector-slash-cursors-test.scm +++ b/tests/liii/string-cursor/string-to-vector-slash-cursors-test.scm @@ -31,6 +31,12 @@ ;; 1. 返回新分配的向量 ;; 2. 与 (liii string) 的区别:(liii string-cursor) 按字符转换,支持 Unicode ;; 3. 性能:O(n),n 为子串字符数 +;; 4. 支持 Unicode 字符(包括多字节字符如中文、Emoji)的正确转换 +;; +;; 相关实现 +;; -------- +;; (liii string) 库中提供了 string->vector 函数 +;; 参见: gf doc liii/string "string->vector" (check (string->vector/cursors "abc") => #(#\a #\b #\c)) (check (string->vector/cursors "abc" 1 2) => #(#\b)) diff --git a/tests/liii/string-cursor/string-trim-both-test.scm b/tests/liii/string-cursor/string-trim-both-test.scm index 7aee2f5b..0b148812 100644 --- a/tests/liii/string-cursor/string-trim-both-test.scm +++ b/tests/liii/string-cursor/string-trim-both-test.scm @@ -31,6 +31,12 @@ ;; 1. string-trim-both 是 SRFI-130 中的字符串修剪函数 ;; 2. 与 (liii string) 中的 string-trim-both 功能相同 ;; 3. 性能:O(n),n 为被修剪的字符数 +;; 4. 支持 Unicode 字符(包括多字节字符如中文、Emoji)的正确修剪 +;; +;; 相关实现 +;; -------- +;; (liii string) 库中也提供了 string-trim-both 函数 +;; 参见: gf doc liii/string "string-trim-both" (check (string-trim-both " abc ") => "abc") (check (string-trim-both "abc") => "abc") diff --git a/tests/liii/string-cursor/string-trim-right-test.scm b/tests/liii/string-cursor/string-trim-right-test.scm index 3a20e9ec..9eadea33 100644 --- a/tests/liii/string-cursor/string-trim-right-test.scm +++ b/tests/liii/string-cursor/string-trim-right-test.scm @@ -31,6 +31,12 @@ ;; 1. string-trim-right 是 SRFI-130 中的字符串修剪函数 ;; 2. 与 (liii string) 中的 string-trim-right 功能相同 ;; 3. 性能:O(n),n 为被修剪的字符数 +;; 4. 支持 Unicode 字符(包括多字节字符如中文、Emoji)的正确修剪 +;; +;; 相关实现 +;; -------- +;; (liii string) 库中也提供了 string-trim-right 函数 +;; 参见: gf doc liii/string "string-trim-right" (check (string-trim-right " abc ") => " abc") (check (string-trim-right "abc ") => "abc") diff --git a/tests/liii/string-cursor/string-trim-test.scm b/tests/liii/string-cursor/string-trim-test.scm index a08a8d4c..ab47cd67 100644 --- a/tests/liii/string-cursor/string-trim-test.scm +++ b/tests/liii/string-cursor/string-trim-test.scm @@ -31,6 +31,12 @@ ;; 1. string-trim 是 SRFI-130 中的字符串修剪函数 ;; 2. 与 (liii string) 中的 string-trim 功能相同 ;; 3. 性能:O(n),n 为被修剪的字符数 +;; 4. 支持 Unicode 字符(包括多字节字符如中文、Emoji)的正确修剪 +;; +;; 相关实现 +;; -------- +;; (liii string) 库中也提供了 string-trim 函数 +;; 参见: gf doc liii/string "string-trim" ;; 基本测试 (check (string-trim " abc ") => "abc ") diff --git a/tests/liii/string-cursor/string-unfold-right-test.scm b/tests/liii/string-cursor/string-unfold-right-test.scm index c850fc7b..82e09a6b 100644 --- a/tests/liii/string-cursor/string-unfold-right-test.scm +++ b/tests/liii/string-cursor/string-unfold-right-test.scm @@ -40,6 +40,12 @@ ;; 1. 与 string-unfold 类似,但字符按相反顺序构建 ;; 2. 与 (liii string) 的区别:无直接对应函数,(liii string-cursor) 独有 ;; 3. 性能:O(n),n 为生成的字符数 +;; 4. 支持 Unicode 字符(包括多字节字符如中文、Emoji)的正确构造 +;; +;; 相关实现 +;; -------- +;; (liii string-cursor) 独有函数,无 (liii string) 对应版本 +;; 参见: gf doc liii/string-cursor "string-unfold-right" (check (string-unfold-right (lambda (n) (> n 2)) (lambda (n) (integer->char (+ n 65))) diff --git a/tests/liii/string-cursor/string-unfold-test.scm b/tests/liii/string-cursor/string-unfold-test.scm index e3861370..288fbe69 100644 --- a/tests/liii/string-cursor/string-unfold-test.scm +++ b/tests/liii/string-cursor/string-unfold-test.scm @@ -40,6 +40,12 @@ ;; 1. 是通用的字符串构造器,类似于列表的 unfold ;; 2. 与 (liii string) 的区别:无直接对应函数,(liii string-cursor) 独有 ;; 3. 性能:O(n),n 为生成的字符数 +;; 4. 支持 Unicode 字符(包括多字节字符如中文、Emoji)的正确构造 +;; +;; 相关实现 +;; -------- +;; (liii string-cursor) 独有函数,无 (liii string) 对应版本 +;; 参见: gf doc liii/string-cursor "string-unfold" (check (string-unfold (lambda (n) (> n 2)) (lambda (n) (integer->char (+ n 65))) diff --git a/tests/liii/string-cursor/substring-slash-cursors-test.scm b/tests/liii/string-cursor/substring-slash-cursors-test.scm index e9455a0c..3978402e 100644 --- a/tests/liii/string-cursor/substring-slash-cursors-test.scm +++ b/tests/liii/string-cursor/substring-slash-cursors-test.scm @@ -29,6 +29,12 @@ ;; 2. start 和 end 必须同为游标或同为整数索引 ;; 3. 与 (liii string) 中的 substring 功能类似,但支持游标参数 ;; 4. 性能:O(n),n 为子串字符数 +;; 5. 支持 Unicode 字符(包括多字节字符如中文、Emoji)的正确截取 +;; +;; 相关实现 +;; -------- +;; (liii string) 库中提供了 substring 函数,使用整数索引 +;; 参见: gf doc liii/string "substring" ;; 测试ASCII (let ((s "abcdef"))