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 [email protected]
Note that posts from new members are moderated - please be patient with your
first post.
To unsubscribe from this group, send email to
[email protected]
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 [email protected].
For more options, visit https://groups.google.com/d/optout.