Skip to content

Commit

Permalink
fix show for RandomDevice (JuliaLang#41233)
Browse files Browse the repository at this point in the history
* fix show for RandomDevice

On Windows, this was displaying an internal buffer, and on Linux, this
was showing the keyword argument `unlimited` as if it was a
positional argument.

* rm spurious space

Co-authored-by: Simeon Schaub <[email protected]>

* Update stdlib/Random/test/runtests.jl

Co-authored-by: Simeon Schaub <[email protected]>

* Update stdlib/Random/test/runtests.jl

Co-authored-by: Simeon Schaub <[email protected]>

Co-authored-by: Simeon Schaub <[email protected]>
  • Loading branch information
rfourquet and simeonschaub committed Nov 9, 2021
1 parent 8fc7e1b commit d87c80c
Show file tree
Hide file tree
Showing 2 changed files with 37 additions and 22 deletions.
6 changes: 6 additions & 0 deletions stdlib/Random/src/RNGs.jl
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,9 @@ if Sys.iswindows()
rand!(rd, rd.buffer)
@inbounds return rd.buffer[1] % sp[]
end

show(io::IO, ::RandomDevice) = print(io, RandomDevice, "()")

else # !windows
struct RandomDevice <: AbstractRNG
unlimited::Bool
Expand Down Expand Up @@ -44,6 +47,9 @@ else # !windows
return fd
end

show(io::IO, rd::RandomDevice) =
print(io, RandomDevice, rd.unlimited ? "()" : "(unlimited=false)")

end # os-test

# NOTE: this can't be put within the if-else block above
Expand Down
53 changes: 31 additions & 22 deletions stdlib/Random/test/runtests.jl
Original file line number Diff line number Diff line change
Expand Up @@ -885,28 +885,37 @@ end
end

@testset "show" begin
m = MersenneTwister(123)
@test string(m) == "MersenneTwister(123)"
Random.jump!(m, 2*big(10)^20)
@test string(m) == "MersenneTwister(123, (200000000000000000000, 0))"
@test m == MersenneTwister(123, (200000000000000000000, 0))
rand(m)
@test string(m) == "MersenneTwister(123, (200000000000000000000, 1002, 0, 1))"

@test m == MersenneTwister(123, (200000000000000000000, 1002, 0, 1))
rand(m, Int64)
@test string(m) == "MersenneTwister(123, (200000000000000000000, 2256, 0, 1, 1002, 1))"
@test m == MersenneTwister(123, (200000000000000000000, 2256, 0, 1, 1002, 1))

m = MersenneTwister(0x0ecfd77f89dcd508caa37a17ebb7556b)
@test string(m) == "MersenneTwister(0xecfd77f89dcd508caa37a17ebb7556b)"
rand(m, Int64)
@test string(m) == "MersenneTwister(0xecfd77f89dcd508caa37a17ebb7556b, (0, 1254, 0, 0, 0, 1))"
@test m == MersenneTwister(0xecfd77f89dcd508caa37a17ebb7556b, (0, 1254, 0, 0, 0, 1))

m = MersenneTwister(0); rand(m, Int64); rand(m)
@test string(m) == "MersenneTwister(0, (0, 2256, 1254, 1, 0, 1))"
@test m == MersenneTwister(0, (0, 2256, 1254, 1, 0, 1))
@testset "MersenneTwister" begin
m = MersenneTwister(123)
@test string(m) == "MersenneTwister(123)"
Random.jump!(m, 2*big(10)^20)
@test string(m) == "MersenneTwister(123, (200000000000000000000, 0))"
@test m == MersenneTwister(123, (200000000000000000000, 0))
rand(m)
@test string(m) == "MersenneTwister(123, (200000000000000000000, 1002, 0, 1))"

@test m == MersenneTwister(123, (200000000000000000000, 1002, 0, 1))
rand(m, Int64)
@test string(m) == "MersenneTwister(123, (200000000000000000000, 2256, 0, 1, 1002, 1))"
@test m == MersenneTwister(123, (200000000000000000000, 2256, 0, 1, 1002, 1))

m = MersenneTwister(0x0ecfd77f89dcd508caa37a17ebb7556b)
@test string(m) == "MersenneTwister(0xecfd77f89dcd508caa37a17ebb7556b)"
rand(m, Int64)
@test string(m) == "MersenneTwister(0xecfd77f89dcd508caa37a17ebb7556b, (0, 1254, 0, 0, 0, 1))"
@test m == MersenneTwister(0xecfd77f89dcd508caa37a17ebb7556b, (0, 1254, 0, 0, 0, 1))

m = MersenneTwister(0); rand(m, Int64); rand(m)
@test string(m) == "MersenneTwister(0, (0, 2256, 1254, 1, 0, 1))"
@test m == MersenneTwister(0, (0, 2256, 1254, 1, 0, 1))
end

@testset "RandomDevice" begin
@test string(RandomDevice()) == "$RandomDevice()"
if !Sys.iswindows()
@test string(RandomDevice(unlimited=false)) == "$RandomDevice(unlimited=false)"
end
end
end

@testset "rand[!] for BigInt/BigFloat" begin
Expand Down

0 comments on commit d87c80c

Please sign in to comment.