Skip to content

Commit de25c54

Browse files
committed
rebaring: allow overriding RNG by defining macros
1 parent 1118786 commit de25c54

File tree

4 files changed

+40
-18
lines changed

4 files changed

+40
-18
lines changed

.travis.yml

+6-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,11 @@
11
sudo: false
22
language: erlang
3-
script: REBAR=~/rebar3 make all
3+
script:
4+
- REBAR=~/rebar3 make all
5+
- rm -rf _build
6+
- ./configure --use-sfmt
7+
- make fast && cd deps/sfmt && make && cd -
8+
- make all
49

510
otp_release:
611
- 20.3

Makefile

+1-1
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ compile:
4444
$(REBAR) compile
4545

4646
dialyzer: .plt/proper_plt compile
47-
dialyzer -n -nn --plt $< -Wunmatched_returns ebin $(find . -path 'deps/*/ebin/*.beam')
47+
dialyzer -n -nn --plt $< -Wunmatched_returns ebin $(find . -path 'deps/*/ebin/*.beam') $(find . -path '_build/default/lib/*/ebin')
4848

4949
.plt/proper_plt: .plt
5050
dialyzer --build_plt --output_plt $@ --apps erts kernel stdlib compiler crypto syntax_tools

README.md

+5-1
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,11 @@ Quickstart guide
9595
a `make all` call; in that case, you are going to need the `syntax_tools`
9696
application and a recent version of `EDoc`).
9797
Optionally, sfmt-erlang can be selected as an alternative random number
98-
generator using `./configure --use-sfmt` before running `make`.
98+
generator using `./configure --use-sfmt` before running `make`, or with rebar3:
99+
```erlang
100+
{deps, [sfmt]}. %% Once sfmt-erlang supports rebar3 compilation.
101+
{overrides, [{override, proper, [{erl_opts, [{d, 'USE_SFMT'}]}]}]}.
102+
```
99103
* Add PropEr's base directory to your Erlang library path, using one of the
100104
following methods:
101105
1. `ERL_LIBS` environment variable: Add the following line to your shell

include/proper_internal.hrl

+28-15
Original file line numberDiff line numberDiff line change
@@ -33,27 +33,40 @@
3333
%% Random generator selection
3434
%%------------------------------------------------------------------------------
3535

36+
-ifndef(USE_SFMT).
37+
- ifndef(USE_EXSPLUS).
38+
- ifndef(USE_RANDOM).
39+
- ifdef(AT_LEAST_19).
40+
%% for 19.x use 'rand' module
41+
- define(USE_EXSPLUS, true).
42+
- else.
43+
%% for 18.x and older use 'random' module
44+
- define(USE_RANDOM, true).
45+
- endif.
46+
- endif.
47+
- endif.
48+
-endif.
49+
3650
-ifdef(USE_SFMT).
37-
-define(RANDOM_MOD, sfmt).
3851
-define(SEED_NAME, sfmt_seed).
39-
-define(RNG_SET_SEED(Seed), ?RANDOM_MOD:seed(Seed)).
40-
41-
-else.
52+
-define(RNG_SET_SEED(Seed), sfmt:seed(Seed)).
53+
-define(RNG_UNIFORM(), sfmt:uniform()).
54+
-define(RNG_UNIFORM(UpperBound), sfmt:uniform(UpperBound)).
55+
-endif.
4256

43-
-ifdef(AT_LEAST_19).
44-
%% for 19.x use the 'rand' module
45-
-define(RANDOM_MOD, rand).
57+
-ifdef(USE_EXSPLUS).
4658
-define(SEED_NAME, rand_seed).
47-
-define(RNG_SET_SEED(Seed), ?RANDOM_MOD:seed(exsplus,Seed)).
48-
-else.
49-
-define(RANDOM_MOD, random).
50-
-define(SEED_NAME, random_seed).
51-
-define(RNG_SET_SEED(Seed), ?RANDOM_MOD:seed(Seed)).
52-
-endif.
59+
-define(RNG_SET_SEED(Seed), rand:seed(exsplus,Seed)).
60+
-define(RNG_UNIFORM(), rand:uniform()).
61+
-define(RNG_UNIFORM(UpperBound), rand:uniform(UpperBound)).
5362
-endif.
5463

55-
-define(RNG_UNIFORM(), ?RANDOM_MOD:uniform()).
56-
-define(RNG_UNIFORM(UpperBound), ?RANDOM_MOD:uniform(UpperBound)).
64+
-ifdef(USE_RANDOM).
65+
-define(SEED_NAME, random_seed).
66+
-define(RNG_SET_SEED(Seed), random:seed(Seed)).
67+
-define(RNG_UNIFORM(), random:uniform()).
68+
-define(RNG_UNIFORM(UpperBound), random:uniform(UpperBound)).
69+
-endif.
5770

5871
%%------------------------------------------------------------------------------
5972
%% Line annotations

0 commit comments

Comments
 (0)