Improve choose/2 and int/2 generators.
authorNick Vatamaniuc <vatamane@apache.org>
Wed, 31 Jan 2018 06:03:57 +0000 (01:03 -0500)
committerNick Vatamaniuc <vatamane@apache.org>
Tue, 6 Feb 2018 15:00:31 +0000 (10:00 -0500)
commitb4ce70c9e292c2e576e3076cdaa6151352417fde
tree7b05473d67545036e383fa0483a60d4d22daead2
parentfc812bdaf5b9a964504d61c31c5e934a44ff2e2c
Improve choose/2 and int/2 generators.

API level changes:

* Previously `choose/2` shrunk to the lowest limit, it now shrink to
lowest absolute value. This behavior is consistent with QuickCheck and Proper.

* Previously `int/2` ignored the bounds and always shrunk to 0. The new
behavior is equivalent to the `choose/2` function.

Implementation details:

Previously `int/2` function always decremented by 1 when shrinking. That works
for small integers, but is very inefficient and slow for large integer
boundaries. `choose/2` on the other hand always halved its value, however it
might skip interesting values around the shrink target or the Min / Max
boundaries.

The improvement is to get the best for both cases. If the current value is
close to the shrinking target then decrement by 1 is used, otherwise
halving is used. The transition is done probabilistically based on an
exponential function. The closer to the interesting boundary the value is,
there is an exponentially higher chance of decrement being used.

Fixes #66
THANKS
src/triq_dom.erl
test/triq_tests.erl