The generator should definitely always generate unique values (though only 
because gen/uuid does that), though as you say shrinking is different case 
that would be problematic for what you're doing. When you say "I don't see 
any other error" have you accounted for the fact that test.check normally 
returns *two* results after shrinking (the first failure, and the final 
failure)? This could be especially difficult to notice if the first failure 
was not an exception, and is being reported as merely false while the 
stacktrace of the final failure takes up your whole screen.

To be more precise, the original failure is under the :result key of the 
test.check result, while all the shrinking info is under :shrunk (including 
another :result key).

Other than that I don't have any ideas, but you should be able to check 
your theory about for-all reusing generated values by collecting them in an 
atom or something like that.

Gary

On Thursday, June 2, 2016 at 9:51:46 AM UTC-5, Tom wrote:
>
> Hi,
>
> I'm doing something like:
>
>     (def valid-email (gen/fmap (fn [[name domain]] (str name "@" domain)) 
> (gen/tuple (gen/not-empty gen/string) gen/uuid)))
>
>     (defspec test-email
>       100
>       (for-all [email valid-email]
>                (tx-email! (get-in system [:database :conn]) email)
>
> The email has a unique-by-value constraint (in datomic) and this 
> transaction fails occasionally because the unique-by-value constraint 
> fails. However, this:
>
>     (= 1000 (count (distinct (gen/sample valid-email 1000))))
>
> always succeeds. It seems like for-all reuses a generated value sometimes. 
> Could this be possible? Or maybe this happens when test.check tries to 
> shrink the test case? Except I don't see any other error, one that would 
> cause it to try to shrink.
>
> Thanks.
>
> -Tom
>
>

-- 
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.

Reply via email to