Как мне сгенерировать сгенерированные значения как отдельные аргументы в clojure.spec?

У меня есть следующий код, я пытаюсь использовать path-and-subpath генератор для создания значений для (s/fdef conj-set ...),

(def path (s/coll-of (s/with-gen string? #(s/gen #{"a" "b" "c" "d"}))
                     :min-count 1
                     :kind vector?
                     :into []))

(s/def ::path
  (s/with-gen
    path
    (fn [] (gen/fmap #(vec (take 5 %)) (s/gen path)))))

;; GENERATES THE TUPLES OF PATH AND SUB-PATH
(def path-and-subpath
  (->
   ::path
   s/gen
   (gen/bind
    (fn [xs]
      (gen/tuple
       (gen/return xs)
       (->> xs count inc (s/int-in 1) s/gen))))
   (gen/bind
    (fn [[xs i]]
      (gen/tuple
       (gen/return xs)
       (gen/return (subvec xs 0 i)))))))

(s/fdef conj-set
        :args (s/and
               (s/cat :path <FIRST_VALUE_IN_GENERATED_TUPLE>
                      :sub-path <SECOND_VALUE_IN_GENERTED_TUPLE>)
               #(= (-> % :args :sub-path)
                   (->> % :args :full-path (take (-> % :args :sub-path count))))))

Я не знаю, как соединить эти две вещи. У меня есть генератор, который генерирует кортеж, у меня есть fdef с зависимыми аргументами, которые я хочу указать. Как их совместить?

0 ответов

Другие вопросы по тегам