[erlang-questions] PropEr and determinism of statem scenario execution

Scott Lystig Fritchie fritchie@REDACTED
Thu Nov 29 01:24:30 CET 2012


Paul Peregud <paulperegud@REDACTED> wrote:

pp> Hi everyone!  This is a PropEr-related question. [...]

pp> The problem - I don't have a control over schedulers. That leads to
pp> scenarios that MAY OR MAY NOT fail. And that causes problems with
pp> shrinking. As a result after a night of crunching scenarios on a
pp> fast machine I get a test case of 70 steps that is impossible to
pp> debug, because it is too large. When I repeat this test case using
pp> proper:check/2, it fails very seldom.

Just guessing here, but it sounds like you're describing a situation
where there's a side-effect that your model isn't accounting for.  That
thing is usually time, either using erlang:now() or os:timestamp() or
erlang:time() or something like that.

State that happens to be lying around in the file system that affects
your code is also a fun source of nondeterminism.

You can try something like this (untested):

L = [begin
        {_, Before, _} = now(),
        Res = (catch true = proper:check(Property, CounterExample)),
        {_, After, _} = now(),
        {After - Before, Res}
     end || _ <- lists:seq(1,400)].
FailL = [Secs || {Secs, Res} <- L, Res /= true].

... and then see how many items in FailL cross a wall-clock-second-tick
boundary.  It helps if the normal execution time is less than 1 second.
:-)

The only real solution is find all sources of nondeterminism, wall-clock
or whatever source, and stamp them out.

-Scott



More information about the erlang-questions mailing list