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.
