<div dir="ltr"><div><div><div><div><div><div>I don't think you are missing anything.<br><br></div>Some QuickCheck systems will use a size parameter like 1-100 and then they "scale" the range over that size. If you ask for, say, 30 test cases, they usually scale 1-100 over the first 15, and then they run 15 with the full range.<br><br></div>The idea, roughly, is that while you eventually want to check a full range, but many errors occur when a range is small. And small cases are often easier to debug.<br><br></div>This notion goes hand in hand with shrinking: if you _do_ find a large test case, pick a strategy for finding a failure, but for a simpler generated input.<br><br></div>As for integers, I often use something like:<br><br>%% @doc pow_2_int/0 generates integers close to a power of two<br>%% It turns out that integers around powers of two are often able to mess up stuff<br>%% because of their bitwise representation. This generator generates integers close<br>%% to a power of two deliberately.<br>%% @end<br>pow_2_int() -><br>    ?LET({Sign, Exponent, Perturb}, {sign(), choose(0, 128), choose(-3, 3)},<br>        Sign * pow(2, Exponent) + Perturb).<br><br>sign() -> elements([1, -1]).<br><br>pow(0, 0) -> 0;<br>pow(_Base, 0) -> 1;<br>pow(Base, N) -> Base * pow(Base, N-1).<br><br></div>(This is from [0])<br><br></div>It doesn't generate any integer, but since a lot of systems cannot handle corner case integers well, this is an excellent way to check them. Especially if they have two-complement representations and have one more negative value than positive. The above code sequence has found bugs in Erlangs bignum handling btw.<br><div><br>[0] <a href="https://github.com/jlouis/eqc_lib/blob/master/eqc_lib.erl#L14-L27">https://github.com/jlouis/eqc_lib/blob/master/eqc_lib.erl#L14-L27</a><br></div></div><br><div class="gmail_quote"><div dir="ltr">On Thu, May 17, 2018 at 12:35 PM Ryan Maclear <<a href="mailto:ryanm@miranetworks.net">ryanm@miranetworks.net</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div><div><div><div><div><div>Hi All,<br><br></div>I've gone through the code for the integer() type and have found where my issue arises from.<br><br></div>the proper_gen:pick/1 function has a default Size of 10, but the proper_gen:pick/2 function provides for a size to be passed.<br><br></div>If I call:<br><br></div>proper_gen:pick(proper_types:char(), 1114111), I get results as expected.<br><br></div>Since the definition of char() is equivalent to integer(0,16#10ffff), I would have expected the proper_gen:pick_type(proper_types:char()) call to result in the arity 2 version of this function being called, or at least have the Size set to the upper bound of the integer range in the integer_gen function call, either in proper_types:integer_gen/2 function call.<br><br></div><div>Does this make sense or am I missing something?<br><br></div><div>Regards,<br></div><div>Ryan Maclear<br></div><div><div><div><br><br><br></div></div></div></div><div class="gmail_extra"><br><div class="gmail_quote">On 17 May 2018 at 11:08, Ryan Maclear <span dir="ltr"><<a href="mailto:ryanm@miranetworks.net" target="_blank">ryanm@miranetworks.net</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Appologies, I hit send before finisinh the email. Here is the complete mail:<span><br><br><div><div><div><div><div><div><div><div><span style="font-family:arial,helvetica,sans-serif">I'm busy learning to use proper and have the following issue. When calling the function<br><code><span class="m_1524290863092969076m_-8319070164835859940gmail-m_7209538006811084840gmail-tok-nn"><br></span></code></span>From the API docs, the char() type has a range of 0 to (1114111) 16#10ffff.<br></div></div><span style="font-family:arial,helvetica,sans-serif"><br>When calling the function<br><code><span class="m_1524290863092969076m_-8319070164835859940gmail-m_7209538006811084840gmail-tok-nn"><br>proper_gen</span><span class="m_1524290863092969076m_-8319070164835859940gmail-m_7209538006811084840gmail-tok-p">:</span><span class="m_1524290863092969076m_-8319070164835859940gmail-m_7209538006811084840gmail-tok-nf">pick</span><span class="m_1524290863092969076m_-8319070164835859940gmail-m_7209538006811084840gmail-tok-p">(</span><span class="m_1524290863092969076m_-8319070164835859940gmail-m_7209538006811084840gmail-tok-nn">proper_types</span><span class="m_1524290863092969076m_-8319070164835859940gmail-m_7209538006811084840gmail-tok-p">:</span><span class="m_1524290863092969076m_-8319070164835859940gmail-m_7209538006811084840gmail-tok-nf">term</span><span class="m_1524290863092969076m_-8319070164835859940gmail-m_7209538006811084840gmail-tok-p">()).</span></code></span><br><br>manually
 many times (I've tried in around 3000 times) and on different VMs, the 
function always seems to return only one of the following values:<br><br></div>{ok,0},<br></div>{ok,2},<br></div>{ok,3},<br></div>{ok,6}<br></div>{ok,12} and<br></div><div>{ok,13}<br><br></div></span><div><span>I see the same behaviour for <br><br></span>proper_gen:pick(proper_types:range(0,16#10ffff)).<br><br></div><div>which I believe is equivalent.<br></div><span><div><br></div><div>I have tried on erlang 19.3.6.9, erlang 20.3.6 on a Mac as well as on a ubuntu trusty docker image with erlang 19.3.<br></div><div><br></div><div>In all three vms I see the same set of results being returned. <br><br></div><div>Is there something else I need to do before calling this function?<br><br></div><div>Thanks,<br></div><div>Ryan</div><br></span></div><div class="m_1524290863092969076HOEnZb"><div class="m_1524290863092969076h5"><div class="gmail_extra"><br><div class="gmail_quote">On 17 May 2018 at 11:07, Ryan Maclear <span dir="ltr"><<a href="mailto:ryanm@miranetworks.net" target="_blank">ryanm@miranetworks.net</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div><div><div><div><div><div><div><div><div><span style="font-family:arial,helvetica,sans-serif">Good Day,<br><br></span></div><span style="font-family:arial,helvetica,sans-serif">I'm busy learning to use proper and have the following issue. When calling the function<br><code><span class="m_1524290863092969076m_-8319070164835859940m_7209538006811084840gmail-tok-nn"><br></span></code></span>From the API docs, the char() type has a range of 0 to (1114111) 16#10ffff.<br></div></div><span style="font-family:arial,helvetica,sans-serif"><br>When calling the function<br><code><span class="m_1524290863092969076m_-8319070164835859940m_7209538006811084840gmail-tok-nn"><br>proper_gen</span><span class="m_1524290863092969076m_-8319070164835859940m_7209538006811084840gmail-tok-p">:</span><span class="m_1524290863092969076m_-8319070164835859940m_7209538006811084840gmail-tok-nf">pick</span><span class="m_1524290863092969076m_-8319070164835859940m_7209538006811084840gmail-tok-p">(</span><span class="m_1524290863092969076m_-8319070164835859940m_7209538006811084840gmail-tok-nn">proper_types</span><span class="m_1524290863092969076m_-8319070164835859940m_7209538006811084840gmail-tok-p">:</span><span class="m_1524290863092969076m_-8319070164835859940m_7209538006811084840gmail-tok-nf">term</span><span class="m_1524290863092969076m_-8319070164835859940m_7209538006811084840gmail-tok-p">()).</span></code></span><br><br>manually many times (I've tried in around 3000 times) and on different VMs, the function always seems to return only one of the following values:<br><br></div>{ok,0},<br></div>{ok,2},<br></div>{ok,3},<br></div>{ok,6}<br></div>{ok,12} and<br></div><div>{ok,13}<br><br></div><div>I see the same behaviour for <br><br></div><div><br></div><div>I have tried on erlang 19.3.6.9, erlang 20.3.6 on a Mac as well as on a ubuntu trusty docker image with erlang 19.3.<br></div><div><br></div><div>In all three vms I see the same set of results being returned. <br><br></div><div>Is there something else I need to do before calling this function?<br><br></div><div>Thanks,<br></div><div>Ryan<br></div></div>
</blockquote></div><br></div>
</div></div></blockquote></div><br></div>
_______________________________________________<br>
erlang-questions mailing list<br>
<a href="mailto:erlang-questions@erlang.org" target="_blank">erlang-questions@erlang.org</a><br>
<a href="http://erlang.org/mailman/listinfo/erlang-questions" rel="noreferrer" target="_blank">http://erlang.org/mailman/listinfo/erlang-questions</a><br>
</blockquote></div>