diff --git a/.travis.yml b/.travis.yml index 6d58a6ae..4e16151f 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,6 +1,12 @@ sudo: false language: erlang -script: REBAR=~/rebar3 make all +script: +- ~/rebar3 compile +- REBAR=~/rebar3 make all +- rm -rf _build +- ./configure --use-sfmt +- make fast && cd deps/sfmt && make && cd - +- make all otp_release: - 20.3 diff --git a/Makefile b/Makefile index 8dcbb55b..53fb2266 100644 --- a/Makefile +++ b/Makefile @@ -44,7 +44,7 @@ compile: $(REBAR) compile dialyzer: .plt/proper_plt compile - dialyzer -n -nn --plt $< -Wunmatched_returns ebin $(find . -path 'deps/*/ebin/*.beam') + dialyzer -n -nn --plt $< -Wunmatched_returns ebin $(find . -path 'deps/*/ebin/*.beam') $(find . -path '_build/default/lib/*/ebin') .plt/proper_plt: .plt dialyzer --build_plt --output_plt $@ --apps erts kernel stdlib compiler crypto syntax_tools diff --git a/README.md b/README.md index 80319da0..91291840 100644 --- a/README.md +++ b/README.md @@ -95,7 +95,11 @@ Quickstart guide a `make all` call; in that case, you are going to need the `syntax_tools` application and a recent version of `EDoc`). Optionally, sfmt-erlang can be selected as an alternative random number - generator using `./configure --use-sfmt` before running `make`. + generator using `./configure --use-sfmt` before running `make`, or with rebar3: + ```erlang + {deps, [sfmt]}. %% Once sfmt-erlang supports rebar3 compilation. + {overrides, [{override, proper, [{erl_opts, [{d, 'USE_SFMT'}]}]}]}. + ``` * Add PropEr's base directory to your Erlang library path, using one of the following methods: 1. `ERL_LIBS` environment variable: Add the following line to your shell diff --git a/include/proper_internal.hrl b/include/proper_internal.hrl index f24e40ce..88cf88bc 100644 --- a/include/proper_internal.hrl +++ b/include/proper_internal.hrl @@ -33,27 +33,40 @@ %% Random generator selection %%------------------------------------------------------------------------------ +-ifndef(USE_SFMT). +- ifndef(USE_EXSPLUS). +- ifndef(USE_RANDOM). +- ifdef(AT_LEAST_19). +%% for 19.x use 'rand' module +- define(USE_EXSPLUS, true). +- else. +%% for 18.x and older use 'random' module +- define(USE_RANDOM, true). +- endif. +- endif. +- endif. +-endif. + -ifdef(USE_SFMT). --define(RANDOM_MOD, sfmt). -define(SEED_NAME, sfmt_seed). --define(RNG_SET_SEED(Seed), ?RANDOM_MOD:seed(Seed)). - --else. +-define(RNG_SET_SEED(Seed), sfmt:seed(Seed)). +-define(RNG_UNIFORM(), sfmt:uniform()). +-define(RNG_UNIFORM(UpperBound), sfmt:uniform(UpperBound)). +-endif. --ifdef(AT_LEAST_19). -%% for 19.x use the 'rand' module --define(RANDOM_MOD, rand). +-ifdef(USE_EXSPLUS). -define(SEED_NAME, rand_seed). --define(RNG_SET_SEED(Seed), ?RANDOM_MOD:seed(exsplus,Seed)). --else. --define(RANDOM_MOD, random). --define(SEED_NAME, random_seed). --define(RNG_SET_SEED(Seed), ?RANDOM_MOD:seed(Seed)). --endif. +-define(RNG_SET_SEED(Seed), rand:seed(exsplus,Seed)). +-define(RNG_UNIFORM(), rand:uniform()). +-define(RNG_UNIFORM(UpperBound), rand:uniform(UpperBound)). -endif. --define(RNG_UNIFORM(), ?RANDOM_MOD:uniform()). --define(RNG_UNIFORM(UpperBound), ?RANDOM_MOD:uniform(UpperBound)). +-ifdef(USE_RANDOM). +-define(SEED_NAME, random_seed). +-define(RNG_SET_SEED(Seed), random:seed(Seed)). +-define(RNG_UNIFORM(), random:uniform()). +-define(RNG_UNIFORM(UpperBound), random:uniform(UpperBound)). +-endif. %%------------------------------------------------------------------------------ %% Line annotations