'math.randomseed()' returns the seeds it used

A call to 'math.randomseed()' returns the two components of the seed
it set, so that they can be used to set that same seed again.
This commit is contained in:
Roberto Ierusalimschy
2019-07-17 16:00:24 -03:00
parent 9c28ed05c9
commit 4eefef07ab
4 changed files with 27 additions and 7 deletions

View File

@@ -37,8 +37,6 @@ end
-- tests should require debug when needed
debug = nil
require"bwcoercion"
if usertests then
T = nil -- no "internal" tests for user tests
@@ -46,7 +44,6 @@ else
T = rawget(_G, "T") -- avoid problems with 'strict' module
end
math.randomseed(0)
--[=[
example of a long [comment],
@@ -54,6 +51,14 @@ math.randomseed(0)
]=]
print("\n\tStarting Tests")
do
-- set random seed
local random_x, random_y = math.randomseed()
print(string.format("random seeds: %d, %d", random_x, random_y))
end
print("current path:\n****" .. package.path .. "****\n")

View File

@@ -815,7 +815,7 @@ end
-- low-level!! For the current implementation of random in Lua,
-- the first call after seed 1007 should return 0x7a7040a5a323c9d6
do
-- all computations assume at most 32-bit integers
-- all computations should work with 32-bit integers
local <const> h = 0x7a7040a5 -- higher half
local <const> l = 0xa323c9d6 -- lower half
@@ -840,7 +840,14 @@ do
assert(rand * 2^floatbits == res)
end
math.randomseed()
do
-- testing return of 'randomseed'
local <const> x, <const> y = math.randomseed()
local res = math.random(0)
math.randomseed(x, y) -- should repeat the state
assert(math.random(0) == res)
-- keep the random seed for following tests
end
do -- test random for floats
local randbits = math.min(floatbits, 64) -- at most 64 random bits