请在2024年Clojure状态调查!分享您的想法。

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

0
Clojure
添加{{bigint?}}和spec.gen支持。

这部分很简单


(defn bigint?
  "如果n是BigInt则返回true"
  {:added "1.9"}
  [n] (instance? clojure.lang.BigInt n))


生成器是复杂的一环。test.check没有bigints的生成器,只有用于long范围内事物的{{large-integer}}。我认为我们可能需要一个超出long范围的bigint生成器(因为那可能是潜在bug的所在)。制作一个真正高质量的bigint生成器(具有良好的增长和缩减特性)需要更多思考。

http://clojure.github.io/test.check/clojure.test.check.generators.html#var-large-integer

4 个答案

0

评论由: gfredericks发表

万一我没有时间打补丁,我认为这样的生成器是一个不错的起点

`
(def gen-bigint
(gen/sized
(fn [size]

 (let [large-integer (gen/resize size gen/large-integer)] 
   ;; scaling gives us relatively small vectors, but using  
   ;; the resized large-integer above means the numbers in 
   ;; the small vectors will still be big 
   (gen/scale #(+ 2 (/ % 20))
              (gen/fmap (fn [xs] (+ (bigint (first xs)) (reduce * (map bigint (rest xs))))) 
                        (gen/not-empty (gen/vector large-integer)))))))) ```
0

评论由: gfredericks发表

如果上述生成器中的尺寸似乎不足,我应该指出,test.check中的尺寸相对微妙,但要求也不太明确。我很高兴详细讨论。

0

评论由: gfredericks发表

作为更新,我已经整理出一个非常好的bigint生成器,但这个边栏太小无法容纳。它可能需要调整,但可能适用于这些目的。它尚未在test.check master上,但我预计很快就会。

0
参考信息:https://clojure.atlassian.net/browse/CLJ-1951(由 alexmiller 呈报)
...