That's great, thanks Reid! I'll take a look.

Cheers,
Colin


On 28 June 2014 04:16, Reid Draper <reiddra...@gmail.com> wrote:

> Hi Colin,
>
> You've correctly followed the guide for writing recursive generators.
> Trouble is, the guide (which I wrote) is wrong! I'll work on getting it
> updated shortly, but in the interim, you can check out the detailed commit
> message here:
> https://github.com/clojure/test.check/commit/2a2bd8f09a59391e7a0510291094c529ec3d922e,
> which fixes this issue in test.check's built-in recursive generators.
> Additionally, that commit offers a new convenience function for writing
> your own recursive generators, without all of the current boilerplate. This
> commit should be available on 0.5.9-SNAPSHOT, and should be a in a release
> soon.
>
> Reid
>
>
> On Friday, June 20, 2014 12:18:21 PM UTC-5, Colin Fleming wrote:
>>
>> Hi all,
>>
>> I'm trying to use test.check to create random objects to test some
>> serialisation code I'm having problems with. In the past, generative
>> testing has worked really well for me for exactly this use case. However,
>> I'm finding that I'm getting OutOfMemoryError when trying to test a lot of
>> iterations:
>>
>> (defn object [size]
>>   (if (= 0 size)
>>     (gen/one-of
>>       [(gen/return nil)
>>        gen/boolean
>>        gen/string
>>        gen/keyword
>>        gen/nat])
>>     (let [new-size (quot size 2)
>>           next (gen/resize new-size (gen/sized object))]
>>       (gen/one-of
>>         [(gen/return nil)
>>          gen/boolean
>>          gen/string
>>          gen/keyword
>>          (gen/vector next)
>>          (gen/map next next)
>>          (gen/fmap set (gen/vector next))
>>          gen/nat]))))
>>
>> (def object-serializes
>>   (prop/for-all [v (gen/sized object)]
>>     (let [serialiser (ClojureSerialiser. {})
>>           byte-stream (ByteArrayOutputStream.)
>>           data-stream (DataOutputStream. byte-stream)
>>           _ (.serialise serialiser data-stream v)
>>           bytes (.toByteArray byte-stream)]
>>       (= v (.deserialise serialiser (DataInputStream.
>> (ByteArrayInputStream. bytes)))))))
>>
>> (check/quick-check 500 object-serializes)
>> java.lang.OutOfMemoryError: Java heap space
>> Dumping heap to java_pid9895.hprof ...
>> Heap dump file created [1976236588 bytes in 35.110 secs]
>> OutOfMemoryError Java heap space  
>> clojure.test.check.rose-tree/permutations/iter--43--47
>> (rose_tree.clj:71)
>>
>> Looking at the heap dump in MAT, it looks like something internal to
>> test.check is holding onto the head of a sequence:
>>
>> clojure.lang.PersistentVector
>> + clojure.test.check.generators$sequence$fn__109$fn__110$fn__111
>> | + clojure.test.check.generators$gen_bind$fn__149
>>
>> I assume this is something I'm doing wrong, but I have no idea what. Can
>> anyone suggest anything?
>>
>> Thanks,
>> Colin
>>
>  --
> 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.

Reply via email to