star-sp

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

commit 0effa0cb821429b844c5f6a43d07035c05007c4a
parent 3790b13ee38cfce6f8f6aa25f59c80c66124cdd5
Author: Vincent Forest <vincent.forest@meso-star.com>
Date:   Tue,  1 Dec 2020 16:24:56 +0100

Test the internal proxy cache mechanism

Diffstat:
Msrc/test_ssp_rng_proxy.c | 39+++++++++++++++++++++++++++++++++++++++
1 file changed, 39 insertions(+), 0 deletions(-)

diff --git a/src/test_ssp_rng_proxy.c b/src/test_ssp_rng_proxy.c @@ -417,6 +417,44 @@ test_write(void) fclose(stream); } +static void +test_cache(void) +{ + struct ssp_rng_proxy* proxy; + struct ssp_rng* rng0; + struct ssp_rng* rng1; + struct ssp_rng* rng; + const size_t nbuckets = 2; + const size_t sequence_pitch = 2/*#RNs per bucket*/ * nbuckets; + const size_t nrands = 20000; + size_t i; + + CHK(ssp_rng_proxy_create2(NULL, &ssp_rng_mt19937_64, 0, sequence_pitch, + sequence_pitch, nbuckets, &proxy) == RES_OK); + + CHK(ssp_rng_proxy_create_rng(proxy, 0, &rng0) == RES_OK); + CHK(ssp_rng_proxy_create_rng(proxy, 1, &rng1) == RES_OK); + + CHK(ssp_rng_create(NULL, &ssp_rng_mt19937_64, &rng) == RES_OK); + FOR_EACH(i, 0, nrands) { + CHK(ssp_rng_get(rng0) == ssp_rng_get(rng)); + if(i % 2) CHK(ssp_rng_discard(rng, 2) == RES_OK); + } + CHK(ssp_rng_ref_put(rng) == RES_OK); + + CHK(ssp_rng_create(NULL, &ssp_rng_mt19937_64, &rng) == RES_OK); + CHK(ssp_rng_discard(rng, 2) == RES_OK); + FOR_EACH(i, 0, nrands) { + CHK(ssp_rng_get(rng1) == ssp_rng_get(rng)); + if(i % 2) CHK(ssp_rng_discard(rng, 2) == RES_OK); + } + CHK(ssp_rng_ref_put(rng) == RES_OK); + + CHK(ssp_rng_proxy_ref_put(proxy) == RES_OK); + CHK(ssp_rng_ref_put(rng0) == RES_OK); + CHK(ssp_rng_ref_put(rng1) == RES_OK); +} + int main(int argc, char** argv) { @@ -429,6 +467,7 @@ main(int argc, char** argv) test_proxy_from_rng(); test_read(); test_write(); + test_cache(); CHK(mem_allocated_size() == 0); return 0; }