请在2024州 Clojure调查!分享您的想法。

欢迎!有关如何使用的更多信息,请参阅关于页面。

0投票
test.check

目前默认的字符生成器仅限于从0到255的范围。Java字符的范围可以从\0000到\FFFF。如果这是一个感兴趣的地方,我会在需要时添加补丁,因为无论如何我都需要这样做。

6 个答案

0投票
_ Comment made by: gfredericks_

确实需要这个,但我认为解决方案的细节并不明显——特别是这样一个生成器应该有什么样的分布。

我对Unicode的模糊理解是,很多(我认为是大多数)代码点都没有分配给任何特定的字符,因此如果您随机选择代码点,您就会得到大量的不可打印的内容。

我花了一些时间来处理这个问题,当时我在test.chuck中实现了[string-from-regex|https://github.com/gfredericks/test.chuck#string-from-regex](使用均匀分布),您可以通过执行 {{(gen/sample (com.gfredericks.test.chuck.generators/string-from-regex #".*"))}} 来查看结果


("" "
0投票

Comment made by: m0smith

你提出了很好的观点。我也要审查Java Character类,因为它似乎包含了一些可以用于优化的Unicode信息。

0投票

Comment made by: m0smith

;;
;; test.check对Unicode的支持
;;
;; Unicode支持分为两部分:基于字符的和基于码点/整数的
;;
;; 范围和选择
;; 范围是一个范围定义的向量
;; 范围定义可以是以下之一
;; 单个字符
;; 范围的起始和结束对(向量)
;;
;; 选择是一个生成器,从范围向量中选择。例如:
;; (choices (link: 1 2 [100 200)))
;; 会返回1、2以及从100到200的数字。在本例中,范围对100和200的成员可以是选择接受的任何内容。
;; 基于字符的Unicode支持与正常的字符和字符串生成器相似
;;
;;
| 标准生成器 | Unicode生成器 | 生成 |
;;
| char | uchar | 从\u0000到\uFFFF的有效Unicode字符(字符)|
| :-- | :-- | :-- |
| char-asciii | uchar-alpha | 字母Unicode字符 |
| | uchar-numeric | 数字Unicode字符 |
| char-alphanumeric | uchar-alphanumeric | 字母和数字Unicode字符 |
| string | ustring | 仅由字符组成的Unicode字符串 |
| string-alphanumeric | ustring-alphanumeric | Unicode的字母数字字符串 |
| | ustring-choices | 在给定范围内的Unicode字符串 |
| namespace | unamespace | 适用于作为Clojure命名空间的Unicode字符串 |
| keyword | ukeyword | 适用于作为Clojure关键字的Unicode字符串 |
| keyword-ns | ukeyword-ns | 可选命名空间的Unicode字符串,适用于作为Clojure关键字 |
| symbol | usymbol | 适用于作为Clojure符号的Unicode字符串 |
| symbol-ns | usymbol-ns | 可选命名空间的Unicode字符串,适用于作为Clojure符号 |
| symbol-ns | usymbol-ns | 可选命名空间的Unicode字符串,适用于作为Clojure符号 |

;; 基于码点或整数的字符

| 标准生成器 | Unicode生成器 | Unicode描述 |
| :-- | :-- | :-- | :-- |
| string | ustring-from-code-point | 生成由任何有效码点组成的Unicode字符串。 |
| :-- |
| char | code-point | 生成一个有效的Unicode码点 |
| :-- |

0投票
通过

由:gfredericks评论

你是在想这些生成器通常都会有均匀分布,并且无法打印的值的问题并不足够严重以至于需要特别处理吗?

第二组生成器应该包括关键字、符号等类似的内容吗?

我认为如果有数十个新的生成器,我会倾向于将它们放在一个单独的命名空间中。

0投票
通过

Comment made by: m0smith

我列出了所有我希望构建的新生成器。基本上,我想要将基于字符串的生成器映射到当前的类似行为。例如,关键字和符号具有ukeyword和usymbol以实现Unicode关键字和符号。

添加来自TCHECK-99的apply-to将使人们创建Unicode字符串生成器更容易。

我预计Unicode函数的版本将与当前版本有非常相似的分布。例外的是基于"choices"的版本,它在每个范围内均匀分布,而不管范围的尺寸大小如何。

0投票
by
参考: https://clojure.atlassian.net/browse/TCHECK-97(由 m0smith 报告)
...