clojure.spec/with-gen throws AbstractMethodError

Description

An AbstractMethodError is encountered when trying to evaluate a s/def form with the generator-fn overridden using s/with-gen.

(ns spec-fun.core (:require [clojure.spec :as s] [clojure.test.check.generators :as gen])) (s/def ::int integer?) (s/def ::int-vec (s/with-gen (s/& (s/cat :first ::int :rest (s/* integer?) :last ::int) #(= (:first %) (:last %))) #(gen/let [first (s/gen integer?) rest (gen/such-that (partial at-least 3) (gen/vector (s/gen integer?)))] (concat [first] rest [first])))) ;;=> AbstractMethodError ;; The generator works independently (gen/generate (gen/let [first (s/gen integer?) rest (gen/such-that (partial at-least 3) (gen/vector (s/gen integer?)))] (concat [first] rest [first]))) ;;=> (-13 8593 -33421108 4 6697 0 35835865 -94366552 1 14165115 -4090 42 775 -15238320 233500020 -1 -13) ;; And so does the spec: (s/def ::int-vec (s/& (s/cat :first ::int :rest (s/* integer?) :last ::int) #(= (:first %) (:last %)))) (s/conform ::int-vec '(-13 8593 -33421108 4 6697 0 35835865 -94366552 1 14165115 -4090 42 775 -15238320 233500020 -1 -13)) ;;=> {:first -13, :rest [8593 -33421108 4 6697 0 35835865 -94366552 1 14165115 -4090 42 775 -15238320 233500020 -1], :last -13}

Environment

OSX Yosemite 10.10.5

Activity

Show:

Alex MillerMay 25, 2016 at 4:13 PM

Completed

Details

Assignee

Reporter

Priority

Affects versions

Created May 25, 2016 at 1:16 AM
Updated May 25, 2016 at 4:13 PM
Resolved May 25, 2016 at 4:13 PM

Flag notifications