[erlang-questions] random:seed in R14, R15, ...

Uwe Dauernheim uwe@REDACTED
Thu Jul 19 10:21:56 CEST 2012


@Rapsey For now I don't use the seeding and just give predefined fixture data, thanks.
@Samuel The problem is that given the same seed, you get different sequences:

$ PATH=/Users/uwe/dev/OTP/R14B03/bin erl
Erlang R14B03 ...

1> random:seed({1,2,3}).
undefined
2> random:uniform().    
1.9796325776202811e-4
3> random:uniform().
0.03381877363047378
4> random:uniform().
0.7775418875596665

$ PATH=/Users/uwe/dev/OTP/R15B01/bin erl
Erlang R15B01 ...

1> random:seed({1,2,3}).
undefined
2> random:uniform().    
0.05074967983013061
3> random:uniform().
0.6727957987976656
4> random:uniform().
0.16422626735554258

But it was my bad, the documentation actually now states that:

"The implementation changed in R15. Upgrading to R15 will break applications that expect a specific output for a given seed. The output is still deterministic number series, but different compared to releases older than R15."

On Jul 19, 2012, at 8:37 AM, Samuel wrote:

>> When writing test cases that exercise e.g. random:uniform/0 one wants to use random:seed/1 with a fixed seed for deterministic test results, but providing the seed function with a fixed value seems to result in a different sequence for R14 and R15 (maybe for older or upcoming release as well). This is a problem when distributing your code and you are not sure which release will be used.
>> 
>> What is the common solution for this?
> 
> For randomised tests cases I usually seed the generator with now() as
> I would do for normal pseudorandom usage, but I write the tests so
> that, if failed, I get the originating seed in the report. That means
> that the tests are not deterministic in general, but deterministic
> enough to replay if needed. In theory, that way you also increase the
> chances of finding a weird failing sequence by repeating the tests
> over and over.
> 
> It is similar to the strategy used by QuickCheck, which is a bit more
> advanced. There you don't control the seed either, but when something
> fails it reports the counterexample back, so you don't need the seed.
> 
> In general, if you are testing with pseudorandom generators is because
> you want to increase the coverage in a state space to big to be
> covered by just exploring the possible combinations, so you don't want
> to restrict your random sequences to just one.
> 
> Regards
> -- 
> Samuel




More information about the erlang-questions mailing list