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

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

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

这部分很简单


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


生成器是棘手的部分。test.check没有bigint的生成器,只有针对long范围内的{{large-integer}}。我认为在bigint生成器中我们需要超出long范围的数字(因为那很可能是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发表:

更新信息:我已经准备了一个卓越的大整数生成器,但这个边距太小,无法容纳。可能需要微调,但可能适用于这些目的。它尚未在 test.check master 上,但我预计很快就会被更新。

0
参考:[https://clojure.atlassian.net/browse/CLJ-1951](https://clojure.atlassian.net/browse/CLJ-1951)(由 alexmiller 报告)
...