Skip to content

Commit

Permalink
make srand(::MersenneTwister, seed::Vector{UInt32}) copy the seed
Browse files Browse the repository at this point in the history
  • Loading branch information
rfourquet committed Jun 14, 2016
1 parent 14978f3 commit dcd8308
Show file tree
Hide file tree
Showing 2 changed files with 10 additions and 2 deletions.
2 changes: 1 addition & 1 deletion base/random.jl
Original file line number Diff line number Diff line change
Expand Up @@ -126,7 +126,7 @@ end
@inline rand_ui2x52_raw(r::MersenneTwister) = rand_ui52_raw(r) % UInt128 << 64 | rand_ui52_raw(r)

function srand(r::MersenneTwister, seed::Vector{UInt32})
r.seed = seed
copy!(resize!(r.seed, length(seed)), seed)
dsfmt_init_by_array(r.state, r.seed)
mt_setempty!(r)
return r
Expand Down
10 changes: 9 additions & 1 deletion test/random.jl
Original file line number Diff line number Diff line change
Expand Up @@ -430,9 +430,17 @@ let seed = rand(UInt32, 10)
@test s == r
end

# intialization
# MersenneTwister initialization with invalid values
@test_throws DomainError Base.dSFMT.DSFMT_state(zeros(Int32, rand(0:Base.dSFMT.JN32-1)))
@test_throws DomainError MersenneTwister(zeros(UInt32, 1), Base.dSFMT.DSFMT_state(),
zeros(Float64, 10), 0)
@test_throws DomainError MersenneTwister(zeros(UInt32, 1), Base.dSFMT.DSFMT_state(),
zeros(Float64, Base.Random.MTCacheLength), -1)

# seed is private to MersenneTwister
let seed = rand(UInt32, 10)
r = MersenneTwister(seed)
@test r.seed == seed && r.seed !== seed
resize!(seed, 4)
@test r.seed != seed
end

0 comments on commit dcd8308

Please sign in to comment.