分享你的想法,参与2024 Clojure 状态调查!

欢迎!请参阅关于页面以了解此工作的更多信息。

0 投票
test.check
如果生成值包括尝试次数和时间等元数据,这对生成测试的优化非常有用。
示例

(-> (s/exercise string? 1)
    first
    meta)
;; => {:time-ms 2, :attemts 1}

它有助于查找最慢的生成器,这些生成器最需要定制的改进。

12 答案

0 投票
_由 alexmiller 评论:

我将此移动到 test.check,因为生成器就住在那里。

请注意,并非所有值都可以携带元数据(数字、字符串等),但这是一个有趣的想法。
0 投票
_由 jare_ 评论:

注意,并非所有值都可以携带元数据(数字、字符串等),但这是一个有趣的想法。

这不重要,因为元数据对于生成器工具的开发者而言将非常有用,使用它的人可以通过包装原语来克服限制。

对于最终用户API,类似于 spec/explain(s/explain-data, s/explain-str..) 的功能将是很好的。
我将称之为 s/complexity,这个函数接受一个规范并返回(在 s/complexity-data 的情况下)与原始规范形状相同,并用生成复杂度数据(平均时间、尝试次数、mb 规范形式...)填充的结构。它应该以合理的方式处理过于复杂的规范,即而不是像生成器那样抛出错误,它最好报告哪个部分的规范过于复杂以及其元素的个别复杂度。
0 投票

评论由:jare 发布

另外,s/complexity可能应该每个节点(spec元素)设置超时(可配置),因为这主要是一个调试/分析工具。

0 投票

评论由:gfredericks 发布

这里的“attempts”是什么意思?它是否仅适用于{{gen/such-that}}生成器?

0 投票

评论由:jare 发布

是的,在规格方面,生成器需要重试多少次才能满足规格。

0 投票

评论由:gfredericks 发布

我刚刚注意到这个{{:time-ms}}方面,它可能不仅适用于{{such-that}}。

我同意能够轻松调试生成器性能是有用的,但我不认为这种方法如何应用于一些组合器,如{{gen/fmap}}和{{gen/bind}}。我更容易考虑一个更具体的建议,包括这些情况的细节。

0 投票

评论由:jare 发布

bq.但我认为这种方法如何应用于一些组合器,如gen/fmap并不明显。

元数据不应从{{gen/fmap}}应用函数内部获取。相反,函数内部消耗的时间和其它性能数据应该与{{gen/fmap}}输入状态相关联,然后附加到输出。所以数据将通过嵌套的{{gen/}}调用之间的上下文传递。

bq.元数据不应该从{{gen/fmap}}调用函数内部获取。

或者你可以允许查看输入统计,但不修改它。不是很确定。可能太过复杂。

0 投票
_由 jare_ 评论:

实际上,如果你允许预览,它不仅可以用于调试,还可以用于性能而对生成进行更改。
为了累积生成器的复杂性摊销,通过切换路线来满足某些截止日期。

- - - - -

@gfredericks 由于某种原因,我无法向任何问题添加新评论,所以我更新了旧的评论。

对于


(def g1 ...)

(def g2 (gen/fmap f g1))


 _complexity_ 函数应输出



(complexit g1) => {:name <generator-name> :time-ms 10}

(complexit g2) => {:name :fmap :time-ms 5 :args [{:name <generator-name> :time-ms 10}]}


这里的 _:time-ms 5_ 是在 _f_ 函数内部花费的时间。
0 投票
by

评论由:gfredericks 发布

例如,假设我有

`
(def g1 ...)

(def g2 (gen/fmap f g1))
`

当我从 {{g2}} 生成一个值时,我会得到什么信息?是否会关于 {{g1}},或关于 {{f}},或者以某种方式两者都有关?

0 投票
by

评论由:gfredericks 发布

(link: ~JAre) 我相信您的评论权限已修复。

好的,我现在可以看这可能是一个明确定义的概念。但这可能是一项相当复杂的任务,我需要确保不会出现重大的性能差异。如果有,我们可能需要一个默认禁用它的方法,并确保即使关闭时也不会有性能影响。

0 投票
by

评论由:jare 发布

是的,现在可以工作了。谢谢。

0 投票
by
参考: https://clojure.atlassian.net/browse/TCHECK-153 (由 alex+import 报告)
...