2024 Clojure状态调查!中分享您的想法。

欢迎!请查看关于页面获取更多关于如何使用本站的信息。

0
test.check

当前默认的字符生成器范围仅在0到255之间。Java字符的范围是从\0000到\FFFF。如果对此有兴趣,我会作为一个补丁添加,因为我无论如何都需要这样做。

6 答案

0
_由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

由m0smith发表的评论:

你提出了很好的观点。我还会回顾Java Character类,因为它似乎包含了可以好好利用的Unicode信息。

0

由m0smith发表的评论:

;;
;; test.check的Unicode支持
;;
;; Unicode支持分为两个部分:基于字符的和基于代码点/整数的
;;
;; 范围和选择
;; 范围是一个范围定义的向量
;; 一个范围定义要么是
;; 一个单个字符
;; 一对(向量)表示范围的起始和结束
;;
;; choices是一个生成器,从一系列范围中选择。例如,
;; (choices (link: 1 2 [100 200)))
;; 会返回1和2,以及从100到200的数字。在这个例子中,范围对的100和200可以是任何被选择接受的成员。
;; 基于字符的Unicode支持与普通的字符和字符串生成器相类似
;;
;;
| 标准生成器 | Unicode生成器 | 生成 |
;;
| char | uchar | 从\u0000到\uFFFF的有效Unicode字符(char)|
| :-- | :-- | :-- |
| char-ascii | 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 | 适合用作Clojure关键字且可选命名空间的Unicode字符串 |
| symbol | usymbol | 适合用作Clojure符号的Unicode字符串 |
| symbol-ns | usymbol-ns | 适合用作Clojure符号且可选命名空间的Unicode字符串 |
| | |

;; 代码点或整数基础的字符

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

0
通过

评论由:gfredericks发布

你认为这些生成器在一般情况下将有均匀的分布,并且大多不可打印的值的问题并不足够大,需要采取特殊措施吗?

第二组生成器是否应包括keyword、symbol等类似的生成器?

我想任何涉及几十个新生成器的事情,我倾向于将其放入一个单独的命名空间。

0
通过

由m0smith发表的评论:

我列出了我想要构建的所有新生成器。基本上,我想让基于字符串的生成器具有类似于当前生成器的类似行为。例如,关键字和符号有ukeyword和usymbol用于Unicode关键字和符号。

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

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

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