Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions devel/200_75.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
# [200_75] 改进 string-any 和 string-every 的测试用例

## 2026/04/30 优化其他测试用例

## 2026/04/29 优化 string-any-test.scm

# char, string 支持 Unicode
Expand Down
15 changes: 11 additions & 4 deletions tests/liii/string-cursor/reverse-list-to-string-test.scm
Original file line number Diff line number Diff line change
Expand Up @@ -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)
10 changes: 10 additions & 0 deletions tests/liii/string-cursor/string-concatenate-reverse-test.scm
Original file line number Diff line number Diff line change
Expand Up @@ -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 '()) => "")
Expand All @@ -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)
10 changes: 10 additions & 0 deletions tests/liii/string-cursor/string-concatenate-test.scm
Original file line number Diff line number Diff line change
Expand Up @@ -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)
26 changes: 19 additions & 7 deletions tests/liii/string-cursor/string-contains-right-test.scm
Original file line number Diff line number Diff line change
Expand Up @@ -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")))
Expand Down Expand Up @@ -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"))
Expand Down
12 changes: 12 additions & 0 deletions tests/liii/string-cursor/string-contains-test.scm
Original file line number Diff line number Diff line change
Expand Up @@ -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")))
Expand Down Expand Up @@ -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"))
Expand Down
6 changes: 6 additions & 0 deletions tests/liii/string-cursor/string-copy-slash-cursors-test.scm
Original file line number Diff line number Diff line change
Expand Up @@ -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"))
Expand Down
14 changes: 13 additions & 1 deletion tests/liii/string-cursor/string-count-test.scm
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
;;
;; 语法
;; ----
;; (string-count pred s)
;; (string-count pred s [start end])
;;
;; 参数
;; ----
Expand All @@ -18,6 +18,9 @@
;; s : string
;; 要统计的字符串
;;
;; start, end : integer 或 string-cursor? (可选)
;; 子串范围,默认为整个字符串
;;
;; 返回值
;; ------
;; integer
Expand All @@ -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)
Expand All @@ -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)))
Expand Down
13 changes: 13 additions & 0 deletions tests/liii/string-cursor/string-cursor-back-test.scm
Original file line number Diff line number Diff line change
Expand Up @@ -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"))
Expand Down Expand Up @@ -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)
50 changes: 48 additions & 2 deletions tests/liii/string-cursor/string-cursor-diff-test.scm
Original file line number Diff line number Diff line change
Expand Up @@ -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))
Expand All @@ -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))

Expand Down
6 changes: 6 additions & 0 deletions tests/liii/string-cursor/string-cursor-end-test.scm
Original file line number Diff line number Diff line change
Expand Up @@ -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 "")))
Expand Down
27 changes: 26 additions & 1 deletion tests/liii/string-cursor/string-cursor-eq-p-test.scm
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
6 changes: 6 additions & 0 deletions tests/liii/string-cursor/string-cursor-forward-test.scm
Original file line number Diff line number Diff line change
Expand Up @@ -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"))
Expand Down
27 changes: 26 additions & 1 deletion tests/liii/string-cursor/string-cursor-ge-p-test.scm
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
Loading
Loading