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

欢迎!有关本网站的工作原理,请参阅关于页面。

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

这部分很容易


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


生成器是最复杂的部分。test.check没有大整数生成器,只有针对长整型数字的{{large-integer}}。我认为我们可能需要一个能生成长整型范围之外数字的bigint生成器(因为这可能是bug可能存在的位置)。制作一个高质量的大整数生成器(具有良好的增长和收缩特性)需要更多思考。

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主版本中,但我预计它很快会出现。

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