[erlang-questions] PropEr way to deal with recursive types
Sat Sep 10 15:06:06 CEST 2011
On 09/10/11 14:46, Motiejus Jakštys wrote:
> On Fri, Sep 09, 2011 at 05:10:30PM -0700, James Aimonetti wrote:
>> I tried limiting the proplist to 5 tuples, heavily weighting the
>> proplist_value union towards binary(), etc. When I run
>> "proper:module(json_tester).", I see a string of periods (varies how far
>> it gets), then the VM hangs and I have to get into the JCL to interrupt
>> the process. My assumption is that the generator is getting stuck
>> creating a big data structure, as CPU and memory increase rapidly.
>> I've looked at three examples that Fred Herbert shared but
>> haven't found the mental bridge between his examples and my attempt. I
>> don't doubt that I'm misusing or ignorant of the right functions or
>> macros in PropEr to make this easier.
>> Any hints? :)
> You can limit recursion depth as well. Just pass max_size to the
> proper:quickcheck() function. That helped me as I didn't have to write
> my own recursive generator. :)
The PropEr way to deal with recursive types is to delay writing your own
generators as long as possible. You can start with writing just the
recursive type definitions and use them as a "for free" generator. If
that proves not to be adequate for your application, you can try to
globally limit the recursion depth in the way suggested by Motiejus.
Only if even that is not enough (for some reason) should you try to
resort to ?SIZED, resize, ?LAZY, and friends.
If you encounter any problem at any point in the above we would like to
hear about it (preferably with a small test that exhibits the problem).
Please use either the address or github for that as not
all PropEr developers read erlang-questions.
> As the topic is quite similar, I would like to remind about creating
> custom types in PropEr.
We are (slowly) working on this one...
More information about the erlang-questions