Erlang
(page 88)
code/CustomGenerators/erlang/pbt/test/prop_generators.erl
I would like to share inner step calculation while gathering values (by groups of 10). I was confused a litter how is the calculation going.
I have inserted an expression to print the parameters.
prop_collect2() ->
?FORALL(Bin, (binary()),
(collect(to_range(10, byte_size(Bin)),
is_binary(Bin)))).
%%%%%%%%%%%%%%%
%%% Helpers %%%
%%%%%%%%%%%%%%%
to_range(M, N) ->
Base = N div M,
io:format("~2B = ~2B div ~B | {~2B, ~B} = {~2B * ~B, (~B + 1)*~B~n",
[Base, N, M, Base * M, (Base + 1) * M, Base, M, Base, M]),
{Base * M, (Base + 1) * M}.
Command:
rebar3 proper -p prop_collect2
Output (with the intermediate calculations):
0 = 0 div 10 | { 0, 10} = { 0 * 10, (0 + 1)*10
. 0 = 1 div 10 | { 0, 10} = { 0 * 10, (0 + 1)*10
. 0 = 0 div 10 | { 0, 10} = { 0 * 10, (0 + 1)*10
. 0 = 0 div 10 | { 0, 10} = { 0 * 10, (0 + 1)*10
...
. 3 = 38 div 10 | {30, 40} = { 3 * 10, (3 + 1)*10
. 3 = 33 div 10 | {30, 40} = { 3 * 10, (3 + 1)*10
. 1 = 15 div 10 | {10, 20} = { 1 * 10, (1 + 1)*10
. 2 = 22 div 10 | {20, 30} = { 2 * 10, (2 + 1)*10
OK: Passed 100 test(s).
56.00% {0,10}
28.00% {10,20}
9.00% {20,30}
7.00% {30,40}
===>
1/1 properties passed