[erlang-questions] PropEr testing of a fixed set of atoms

Jay Nelson jay@REDACTED
Sun Jun 1 01:03:54 CEST 2014


All the PropEr documentation seems to indicate that only random generators
are possible when testing. Maybe I’m missing something obvious, but I would
like to do a simple exhaustive test on the following example:

-type epode_dict_type() :: vbisect | dict | orddict.
-spec is_dict(epode_dict_type(), any()) -> boolean().

I currently do the following to test it, assuming 6 tries will oversample the set of
three values and nearly always test all three cases:

-define(TM, my_dict_module).

check_new_dict() ->
       Test_New = ?FORALL(Dict_Type, epode_dict_type(),
                                             valid_empty_dict(Dict_Type, ?TM:new(Dict_Type)),
       proper:quickcheck(Test_New, [{num_tests, 6}]).

valid_empty_dict(Dict_Type, Dict) ->
    true = ?TM:is_dict(Dict_Type, Dict),
    0 =:= ?TM:size(Dict).


I would like a deterministic generator that would provide a list of all the dictionary
types. I want to be able to update only the epode_dict_type() and have the test
automatically execute for the new types.

I imagine something like:

?FORALL(Dict_Type, proper:enumerate(epode_dict_type()), …)

or

?LET(Dict_Types, proper:enumerate(epode_dict_type()),
          [test(DT) || DT <- Dict_Types])

Are there any deterministic generators?

jay




More information about the erlang-questions mailing list