Fixed on master, thanks for the report. > On May 24, 2016, at 2:05 PM, Ambrose Bonnaire-Sergeant > <abonnaireserge...@gmail.com> wrote: > > Thanks Rich. Now it seems test.check is eager to generate very large > individual samples, which sounds > like a different problem. > > (s/def ::a (s/nilable (s/cat :a ::a > :b ::b > :c ::c))) > (s/def ::b (s/nilable (s/cat :a ::a > :b ::b > :c ::c))) > (s/def ::c (s/nilable (s/cat :a ::a > :b ::b > :c ::c))) > (time > (count > (binding [s/*recursion-limit* 2] > (gen/sample (s/gen ::a) 3)))) > ;"Elapsed time: 50106.721779 msecs" > 3 > > Thanks, > Ambrose > > > On Tue, May 24, 2016 at 1:25 PM, Rich Hickey <richhic...@gmail.com> wrote: > And now, in the alpha release branching gens *are* lazy, so gen calls on > recursive specs are fast. > > > On May 23, 2016, at 6:49 PM, Rich Hickey <richhic...@gmail.com> wrote: > > > > Currently gens are not lazy, so entire tree is generated. This is because > > a) test.check isn’t lazy either and b) we want errors when asking for gen, > > not using it. But it is rough for recursive specs as you see. > > > > For now you can limit the recursion depth to control the branching: > > > > (binding [s/*recursion-limit* 3] > > (time (s/gen ::a))) > > > > > >> On May 23, 2016, at 6:34 PM, Ambrose Bonnaire-Sergeant > >> <abonnaireserge...@gmail.com> wrote: > >> > >> I'm observing mutually recursive regex ops taking a long time to generate > >> test.check generators. Is this expected? > >> > >> (s/def ::a (s/nilable (s/cat :a ::a > >> :b ::b > >> :c ::c))) > >> (s/def ::b (s/nilable (s/cat :a ::a > >> :b ::b > >> :c ::c))) > >> (s/def ::c (s/nilable (s/cat :a ::a > >> :b ::b > >> :c ::c))) > >> > >> (time (s/gen ::a)) > >> ;"Elapsed time: 3993.431793 msecs" > >> nil > >> > >> Thanks, > >> Ambrose > >> > >> > >> On Mon, May 23, 2016 at 6:12 PM, Nicola Mometto <brobro...@gmail.com> > >> wrote: > >> Looks like it is, in the meanwhile this patch should fix it: > >> http://sprunge.us/XTiA > >> > >> > >>> On 23 May 2016, at 23:03, Nicola Mometto <brobro...@gmail.com> wrote: > >>> > >>> Possibly CLJ-1544 related? > >>> > >>>> On 23 May 2016, at 22:59, Ambrose Bonnaire-Sergeant > >>>> <abonnaireserge...@gmail.com> wrote: > >>>> > >>>> I'm having trouble calling `s/gen`, might be some sort of AOT > >>>> compilation error. > >>>> (I'm guessing this line has something to do with it). > >>>> > >>>> I'm using the latest master-SNAPSHOT. > >>>> > >>>> (ns gen-load.core > >>>> (:require [clojure.spec :as s])) > >>>> > >>>> (s/gen integer?) > >>>> ;CompilerException java.lang.NoClassDefFoundError: > >>>> clojure/spec/gen$gen_for_pred, compiling:(gen_load/core.clj:4:1) > >>>> > >>>> Thanks, > >>>> Ambrose > >>>> > >>>> On Mon, May 23, 2016 at 5:33 PM, Ambrose Bonnaire-Sergeant > >>>> <abonnaireserge...@gmail.com> wrote: > >>>> I see, thanks. > >>>> > >>>> On Mon, May 23, 2016 at 5:29 PM, Rich Hickey <richhic...@gmail.com> > >>>> wrote: > >>>> fdef will not add doc metadata (see rationale re: not putting more stuff > >>>> in the namespaces/vars), but specs will be present when you call ‘doc’. > >>>> That doc enhancement was in a push later in the afternoon. > >>>> > >>>> https://github.com/clojure/clojure/commit/4c8efbc42efa22ec1d08a1e9fa5dd25db99766a9 > >>>> > >>>>> On May 23, 2016, at 5:26 PM, Ambrose Bonnaire-Sergeant > >>>>> <abonnaireserge...@gmail.com> wrote: > >>>>> > >>>>> Thanks Rich+team, this is awesome. > >>>>> > >>>>> Instrumented vars via `fdef` do not seem to add :doc metadata yet > >>>>> (which is advertised in the docstring for `fdef`). > >>>>> > >>>>> Am I missing something? > >>>>> > >>>>> Thanks, > >>>>> Ambrose > >>>>> > >>>>> On Mon, May 23, 2016 at 5:20 PM, Andrey Grin <andrey.g...@gmail.com> > >>>>> wrote: > >>>>> Thank you. Yes, it seems that for recursion I can use the same > >>>>> approach. As for inheritance currently I just include all parent > >>>>> attributes in every child schema. As for spec definition multi-spec, as > >>>>> I understand it, requires "defmethod" for every class which is probably > >>>>> a problem for my case since all inheritance hierarchies are also > >>>>> determined at run-time. I will need to find some approach that is both > >>>>> dynamic and supports precise error messages in case validation fails. > >>>>> > >>>>> > >>>>> Am Montag, 23. Mai 2016 22:38:24 UTC+2 schrieb Alex Miller: > >>>>> I think you could apply the same idea - use a regular translation > >>>>> between Java class and registered name and then always refer to the > >>>>> registered name. > >>>>> > >>>>> There are probably multiple approaches to modeling inheritance, so hard > >>>>> to recommend something without knowing more. In general, attributes > >>>>> coming from super classes can be modeled using the parent attribute > >>>>> name. And I would recommend looking into multi-spec for doing > >>>>> validation of a number of "types" that could be flowing into the same > >>>>> location by leveraging a multimethod that conditionally provides the > >>>>> spec to use. > >>>>> > >>>>> On Monday, May 23, 2016 at 3:09:46 PM UTC-5, Andrey Grin wrote: > >>>>> Thanks, Alex. I've taken random example from plumatic.schema wiki to > >>>>> quickly illustrate the question. In my actual use case I dynamically > >>>>> generate schemas based on hundreds of model Java classes (beans) with > >>>>> mutual references so I need recursion (and also some way to model > >>>>> inheritance, that was is achieved with "conditional" in plumatic). Will > >>>>> try to implement the same with spec. > >>>>> > >>>>> > >>>>> -- > >>>>> 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. > >>>>> > >>>>> > >>>>> -- > >>>>> 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. > >>>> > >>>> -- > >>>> 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. > >>>> > >>>> > >>>> > >>>> -- > >>>> 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. > >>> > >> > >> -- > >> 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. > >> > >> > >> -- > >> 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. > > > > -- > 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. > > > -- > 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.
-- 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.