Hi. I am trying to implement a spec for finite numbers, but I am getting ExceptionInfo Unable to construct gen. This is my approach:
(ns myns (:require [clojure.spec.alpha :as spec] [clojure.spec.gen.alpha :as gen] [clojure.spec.test.alpha :as stest] [incanter.core :refer [save-div]] )) (defn is-finite? [num] (Double/isFinite num)) (spec/def ::finite-num is-finite?) (defn finite-div [a b] (safe-div a b)) (spec/fdef finite-div :args (spec/cat :a ::finite-num :b ::finite-num) :ret number?) ----------------- when I check for ::finite-num spec validation, it works: (spec/valid? ::finite-num 3) => true (spec/valid? ::finite-num Double/POSITIVE_INFINITY) => false (spec/valid? ::finite-num Double/NEGATIVE_INFINITY) => false So far so good. But when I want to check it: (stest/check `finite-div) => ({:spec #object[clojure.spec.alpha$fspec_impl$reify__1355 0x190f4a67 "clojure.spec.alpha$fspec_impl$reify__1355@190f4a67"], :clojure.spec.test.check/ret {:result #error{:cause "Unable to construct gen at: [:a] for: :myns/finite-num", :data #:clojure.spec.alpha{:path [:a], :form :myns/finite-num, :failure :no-gen}, :via [{:type clojure.lang.ExceptionInfo, :message "Unable to construct gen at: [:a] for: :myns/finite-num", :data #:clojure.spec.alpha{:path [:a], :form :myns/finite-num, :failure :no-gen}, :at [clojure.core$ex_info invokeStatic "core.clj" 4725]}], :trace [[clojure.core$ex_info invokeStatic "core.clj" 4725] [clojure.core$ex_info invoke "core.clj" 4725] [clojure.spec.alpha$gensub invokeStatic "alpha.clj" 272] [clojure.spec.alpha$gensub invoke "alpha.clj" 262] [clojure.spec.alpha$re_gen invokeStatic "alpha.clj" 1586] [clojure.spec.alpha$re_gen invoke "alpha.clj" 1560] [clojure.spec.alpha$re_gen$ggens__1296$gen__1297 invoke "alpha.clj" 1571] [clojure.core$map$fn__6873 invoke "core.clj" 2739] [clojure.lang.LazySeq sval "LazySeq.java" 40] [clojure.lang.LazySeq seq "LazySeq.java" 49] [clojure.lang.RT seq "RT.java" 525] [clojure.core$seq__6407 invokeStatic "core.clj" 137] [clojure.core$every_QMARK_ invokeStatic "core.clj" 2652] [clojure.core$every_QMARK_ invoke "core.clj" 2645] [clojure.spec.alpha$re_gen invokeStatic "alpha.clj" 1590] [clojure.spec.alpha$re_gen invoke "alpha.clj" 1560] [clojure.spec.alpha$regex_spec_impl$reify__1340 gen_STAR_ "alpha.clj" 1661] [clojure.spec.alpha$gensub invokeStatic "alpha.clj" 269] [clojure.spec.alpha$gensub invoke "alpha.clj" 262] [clojure.spec.alpha$gen invokeStatic "alpha.clj" 286] [clojure.spec.alpha$gen invoke "alpha.clj" 275] [clojure.spec.test.alpha$quick_check$fn__2427 invoke "alpha.clj" 305] [clojure.spec.test.alpha$quick_check invokeStatic "alpha.clj" 305] [clojure.spec.test.alpha$quick_check invoke "alpha.clj" 302] [clojure.spec.test.alpha$check_1 invokeStatic "alpha.clj" 335] [clojure.spec.test.alpha$check_1 invoke "alpha.clj" 323] [clojure.spec.test.alpha$check$fn__2448 invoke "alpha.clj" 411] [clojure.core$pmap$fn__9370$fn__9371 invoke "core.clj" 6897] [clojure.core$binding_conveyor_fn$fn__6757 invoke "core.clj" 2020] [clojure.lang.AFn call "AFn.java" 18] [java.util.concurrent.FutureTask run "FutureTask.java" 266] [java.util.concurrent.ThreadPoolExecutor runWorker "ThreadPoolExecutor.java" 1149] [java.util.concurrent.ThreadPoolExecutor$Worker run "ThreadPoolExecutor.java" 624] [java.lang.Thread run "Thread.java" 748]]}}, :sym myns/finite-div, :failure #error{:cause "Unable to construct gen at: [:a] for: :myns/finite-num", :data #:clojure.spec.alpha{:path [:a], :form :myns/finite-num, :failure :no-gen}, :via [{:type clojure.lang.ExceptionInfo, :message "Unable to construct gen at: [:a] for: :myns/finite-num", :data #:clojure.spec.alpha{:path [:a], :form :myns/finite-num, :failure :no-gen}, :at [clojure.core$ex_info invokeStatic "core.clj" 4725]}], :trace [[clojure.core$ex_info invokeStatic "core.clj" 4725] [clojure.core$ex_info invoke "core.clj" 4725] [clojure.spec.alpha$gensub invokeStatic "alpha.clj" 272] [clojure.spec.alpha$gensub invoke "alpha.clj" 262] [clojure.spec.alpha$re_gen invokeStatic "alpha.clj" 1586] [clojure.spec.alpha$re_gen invoke "alpha.clj" 1560] [clojure.spec.alpha$re_gen$ggens__1296$gen__1297 invoke "alpha.clj" 1571] [clojure.core$map$fn__6873 invoke "core.clj" 2739] [clojure.lang.LazySeq sval "LazySeq.java" 40] [clojure.lang.LazySeq seq "LazySeq.java" 49] [clojure.lang.RT seq "RT.java" 525] [clojure.core$seq__6407 invokeStatic "core.clj" 137] [clojure.core$every_QMARK_ invokeStatic "core.clj" 2652] [clojure.core$every_QMARK_ invoke "core.clj" 2645] [clojure.spec.alpha$re_gen invokeStatic "alpha.clj" 1590] [clojure.spec.alpha$re_gen invoke "alpha.clj" 1560] [clojure.spec.alpha$regex_spec_impl$reify__1340 gen_STAR_ "alpha.clj" 1661] [clojure.spec.alpha$gensub invokeStatic "alpha.clj" 269] [clojure.spec.alpha$gensub invoke "alpha.clj" 262] [clojure.spec.alpha$gen invokeStatic "alpha.clj" 286] [clojure.spec.alpha$gen invoke "alpha.clj" 275] [clojure.spec.test.alpha$quick_check$fn__2427 invoke "alpha.clj" 305] [clojure.spec.test.alpha$quick_check invokeStatic "alpha.clj" 305] [clojure.spec.test.alpha$quick_check invoke "alpha.clj" 302] [clojure.spec.test.alpha$check_1 invokeStatic "alpha.clj" 335] [clojure.spec.test.alpha$check_1 invoke "alpha.clj" 323] [clojure.spec.test.alpha$check$fn__2448 invoke "alpha.clj" 411] [clojure.core$pmap$fn__9370$fn__9371 invoke "core.clj" 6897] [clojure.core$binding_conveyor_fn$fn__6757 invoke "core.clj" 2020] [clojure.lang.AFn call "AFn.java" 18] [java.util.concurrent.FutureTask run "FutureTask.java" 266] [java.util.concurrent.ThreadPoolExecutor runWorker "ThreadPoolExecutor.java" 1149] [java.util.concurrent.ThreadPoolExecutor$Worker run "ThreadPoolExecutor.java" 624] [java.lang.Thread run "Thread.java" 748]]}}) -- You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups "Clojure" group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.