star-sp

Random number generators and distributions
git clone git://git.meso-star.fr/star-sp.git
Log | Files | Refs | README | LICENSE

commit a370aae963dfbab4aab5adba378736dc29afe6ac
parent 01b798d1f0882bb6a25e582af66532dd38b22fa0
Author: Vincent Forest <vincent.forest@meso-star.com>
Date:   Wed,  2 Dec 2020 10:32:01 +0100

Test the ssp_rng_proxy_create2 function with an initial RNG state

Diffstat:
Msrc/test_ssp_rng_proxy.c | 36++++++++++++++++++++++++++++++++++--
1 file changed, 34 insertions(+), 2 deletions(-)

diff --git a/src/test_ssp_rng_proxy.c b/src/test_ssp_rng_proxy.c @@ -93,6 +93,8 @@ test_creation2(void) args.sequence_size = 32; args.sequence_pitch = 0; CHK(ssp_rng_proxy_create2(NULL, &args, &proxy) == RES_BAD_ARG); + args.sequence_pitch = 31; + CHK(ssp_rng_proxy_create2(NULL, &args, &proxy) == RES_BAD_ARG); args.sequence_pitch = 32; args.nbuckets = 0; CHK(ssp_rng_proxy_create2(NULL, &args, &proxy) == RES_BAD_ARG); @@ -101,7 +103,7 @@ test_creation2(void) args.nbuckets = 1; CHK(ssp_rng_proxy_create2(NULL, &args, &proxy) == RES_OK); CHK(ssp_rng_proxy_ref_put(proxy) == RES_OK); - + args.nbuckets = 4; CHK(ssp_rng_proxy_create2(NULL, &args, &proxy) == RES_OK); CHK(ssp_rng_proxy_ref_put(proxy) == RES_OK); @@ -212,7 +214,7 @@ test_rng_from_proxy2(void) CHK(ssp_rng_ref_put(rng[1]) == RES_OK); CHK(ssp_rng_ref_put(rng[2]) == RES_OK); CHK(ssp_rng_ref_put(rng[3]) == RES_OK); - + args.type = &ssp_rng_mt19937_64; args.sequence_size = block_sz; args.sequence_pitch = 2*block_sz; @@ -296,6 +298,7 @@ test_multi_proxies(void) static void test_proxy_from_rng(void) { + struct ssp_rng_proxy_create2_args args = SSP_RNG_PROXY_CREATE2_ARGS_NULL; struct ssp_rng_proxy* proxy; struct ssp_rng* rng[4]; struct ssp_rng_type type; @@ -340,6 +343,35 @@ test_proxy_from_rng(void) FOR_EACH(k, 0, j) CHK(r[k] != r[j]); } } + + FOR_EACH(i, 1, 4) CHK(ssp_rng_ref_put(rng[i]) == RES_OK); + + args.rng = rng[0]; + args.sequence_offset = 0; + args.sequence_size = 4000; + args.sequence_pitch = 4000; + args.nbuckets = 4; + CHK(ssp_rng_proxy_create2(NULL, &args, &proxy) == RES_BAD_ARG); + CHK(ssp_rng_ref_put(rng[0]) == RES_OK); + + CHK(ssp_rng_create(NULL, &ssp_rng_threefry, &rng[0]) == RES_OK); + CHK(ssp_rng_discard(rng[0], 100) == RES_OK); + + args.rng = rng[0]; + CHK(ssp_rng_proxy_create2(NULL, &args, &proxy) == RES_OK); + CHK(ssp_rng_ref_put(rng[0]) == RES_OK); + FOR_EACH(i, 0, 4) { + CHK(ssp_rng_proxy_create_rng(proxy, i, &rng[i]) == RES_OK); + } + + FOR_EACH(i, 0, NRANDS) { + FOR_EACH(j, 0, 4) { + r[j] = ssp_rng_get(rng[j]); + FOR_EACH(k, 0, j) CHK(r[k] != r[j]); + } + } + + CHK(ssp_rng_proxy_ref_put(proxy) == RES_OK); FOR_EACH(i, 0, 4) CHK(ssp_rng_ref_put(rng[i]) == RES_OK); }