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