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:
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;
}