Thanks for the quick and clear answer flipping (s/* integer?) and
sequential? indeed did the trick.
On Friday, June 10, 2016 at 5:19:29 PM UTC+2, Alex Miller wrote:
>
> sequential? is not really adding any value here - using a regex op will
> *only* match something that's sequential.
>
> The other thing to know here is that s/and creates a generator that
> generates based on the first spec, then filters based on the subsequent
> ones. So if you wanted to do sequences of an *even* number of numbers you
> could do:
>
> (s/exercise (s/and (s/* integer?) #(even? (count %))))
>
> This will generate sequences of numbers and filter all that don't have an
> even number of elements. If your generator is too broad or your filters
> aren't selective enough, you may need to provide a custom generator:
>
> ;; generator creates any sequence of nums, but only want ones containing 42
> (s/exercise (s/and (s/* integer?) #(some #{42} %)))
> ;; fails
>
> ;; add custom generator that generates random seq of nums, then injects 42
> (s/def ::nums (s/* integer?))
> (s/exercise (s/with-gen
> (s/and ::nums #(some #{42} %))
> (fn [] (gen/fmap #(conj % 42) (s/gen ::nums)))))
>
>
>
>
> On Friday, June 10, 2016 at 10:01:48 AM UTC-5, Frank Versnel wrote:
>>
>> Hi,
>>
>> I'm currently playing around with clojure spec trying to write a spec for
>> an old program I wrote and stumbled upon the following:
>>
>> Whenever I try to generate something that is both sequential and
>> something else it doesn't really work most of the time.
>> For example when I try to create a sequence of integers like this:
>>
>> (s/exercise (s/and sequential? (s/* integer?)))
>>
>> It will often fail to produce anything in the first 100 tries while:
>>
>> (s/exercise (s/and (s/* integer?)))
>>
>> works flawlessly every time. Maybe I'm doing something wrong or maybe I
>> do need to
>> write a custom generator for the sequential bit?
>>
>> Best regards,
>>
>> Frank
>>
>
--
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.