Я пытаюсь выполнить тестирование на основе свойств для этой простой функции:
(defn distinct-kw-keys
[maps]
(->> (map keys maps)
(flatten)
(filter keyword?)
(distinct)
(vec)))
... используя fdef
и check
:
(require '[clojure.spec.alpha :as s]
'[clojure.spec.test.alpha :as test])
(s/fdef distinct-kw-keys
:args (s/cat :maps (s/coll-of map?))
:ret (s/coll-of keyword?
:kind vector?
:distinct true))
(test/check `distinct-kw-keys)
Вызов test/check
завершается через некоторое время, бросая OutOfMemoryError
:
Exception in thread "Timer-1" Error printing return value (OutOfMemoryError) at clojure.test.check.generators/choose$fn (generators.cljc:260). Java heap space
и т. Д.
Я не могу понять, в чем здесь проблема. Функция и характеристики работают нормально, например
(require '[clojure.spec.gen.alpha :as gen])
(s/valid?
(s/coll-of keyword?
:kind vector?
:distinct true)
(distinct-kw-keys
(gen/generate
(s/gen
(s/coll-of map?))))) ;; => true