commit 1a338b146cc69c36618ef38660767466c8783488
parent ce70dd08d668a9765e3d401055714eb4cbffecaf
Author: Vincent Forest <vincent.forest@meso-star.com>
Date: Wed, 29 Nov 2017 10:26:03 +0100
Test the proxies created with the ssp_rng_proxy_create2 function
Diffstat:
1 file changed, 146 insertions(+), 0 deletions(-)
diff --git a/src/test_ssp_rng_proxy.c b/src/test_ssp_rng_proxy.c
@@ -71,6 +71,58 @@ test_creation(void)
}
static void
+test_creation2(void)
+{
+ const struct ssp_rng_type* type = &ssp_rng_mt19937_64;
+ struct ssp_rng_proxy* proxy;
+
+ CHK(ssp_rng_proxy_create2(NULL, NULL, 0, 0, 0, 0, NULL) == RES_BAD_ARG);
+ CHK(ssp_rng_proxy_create2(NULL, type, 0, 0, 0, 0, NULL) == RES_BAD_ARG);
+ CHK(ssp_rng_proxy_create2(NULL, NULL, 0, 32, 0, 0, NULL) == RES_BAD_ARG);
+ CHK(ssp_rng_proxy_create2(NULL, type, 0, 32, 0, 0, NULL) == RES_BAD_ARG);
+ CHK(ssp_rng_proxy_create2(NULL, NULL, 0, 0, 32, 0, NULL) == RES_BAD_ARG);
+ CHK(ssp_rng_proxy_create2(NULL, type, 0, 0, 32, 0, NULL) == RES_BAD_ARG);
+ CHK(ssp_rng_proxy_create2(NULL, NULL, 0, 32, 32, 0, NULL) == RES_BAD_ARG);
+ CHK(ssp_rng_proxy_create2(NULL, type, 0, 32, 32, 0, NULL) == RES_BAD_ARG);
+ CHK(ssp_rng_proxy_create2(NULL, NULL, 0, 0, 0, 1, NULL) == RES_BAD_ARG);
+ CHK(ssp_rng_proxy_create2(NULL, type, 0, 0, 0, 1, NULL) == RES_BAD_ARG);
+ CHK(ssp_rng_proxy_create2(NULL, NULL, 0, 32, 0, 1, NULL) == RES_BAD_ARG);
+ CHK(ssp_rng_proxy_create2(NULL, type, 0, 32, 0, 1, NULL) == RES_BAD_ARG);
+ CHK(ssp_rng_proxy_create2(NULL, NULL, 0, 0, 32, 1, NULL) == RES_BAD_ARG);
+ CHK(ssp_rng_proxy_create2(NULL, type, 0, 0, 32, 1, NULL) == RES_BAD_ARG);
+ CHK(ssp_rng_proxy_create2(NULL, NULL, 0, 32, 32, 1, NULL) == RES_BAD_ARG);
+ CHK(ssp_rng_proxy_create2(NULL, type, 0, 32, 32, 1, NULL) == RES_BAD_ARG);
+ CHK(ssp_rng_proxy_create2(NULL, NULL, 0, 0, 0, 0, &proxy) == RES_BAD_ARG);
+ CHK(ssp_rng_proxy_create2(NULL, type, 0, 0, 0, 0, &proxy) == RES_BAD_ARG);
+ CHK(ssp_rng_proxy_create2(NULL, NULL, 0, 32, 0, 0, &proxy) == RES_BAD_ARG);
+ CHK(ssp_rng_proxy_create2(NULL, type, 0, 32, 0, 0, &proxy) == RES_BAD_ARG);
+ CHK(ssp_rng_proxy_create2(NULL, NULL, 0, 0, 32, 0, &proxy) == RES_BAD_ARG);
+ CHK(ssp_rng_proxy_create2(NULL, type, 0, 0, 32, 0, &proxy) == RES_BAD_ARG);
+ CHK(ssp_rng_proxy_create2(NULL, NULL, 0, 32, 32, 0, &proxy) == RES_BAD_ARG);
+ CHK(ssp_rng_proxy_create2(NULL, type, 0, 32, 32, 0, &proxy) == RES_BAD_ARG);
+ CHK(ssp_rng_proxy_create2(NULL, NULL, 0, 0, 0, 1, &proxy) == RES_BAD_ARG);
+ CHK(ssp_rng_proxy_create2(NULL, type, 0, 0, 0, 1, &proxy) == RES_BAD_ARG);
+ CHK(ssp_rng_proxy_create2(NULL, NULL, 0, 32, 0, 1, &proxy) == RES_BAD_ARG);
+ CHK(ssp_rng_proxy_create2(NULL, type, 0, 32, 0, 1, &proxy) == RES_BAD_ARG);
+ CHK(ssp_rng_proxy_create2(NULL, NULL, 0, 0, 32, 1, &proxy) == RES_BAD_ARG);
+ CHK(ssp_rng_proxy_create2(NULL, type, 0, 0, 32, 1, &proxy) == RES_BAD_ARG);
+ CHK(ssp_rng_proxy_create2(NULL, NULL, 0, 32, 32, 1, &proxy) == RES_BAD_ARG);
+ CHK(ssp_rng_proxy_create2(NULL, type, 0, 32, 32, 1, &proxy) == RES_OK);
+ CHK(ssp_rng_proxy_ref_put(proxy) == RES_OK);
+
+ CHK(ssp_rng_proxy_create2(NULL, type, 0, 32, 32, 4, &proxy) == RES_OK);
+ CHK(ssp_rng_proxy_ref_put(proxy) == RES_OK);
+
+ CHK(ssp_rng_proxy_create2(NULL, type, 0, 32, 32, 32, &proxy) == RES_OK);
+ CHK(ssp_rng_proxy_ref_put(proxy) == RES_OK);
+
+ CHK(ssp_rng_proxy_create2(NULL, type, 0, 32, 32, 33, &proxy) == RES_BAD_ARG);
+ CHK(ssp_rng_proxy_create2
+ (&mem_default_allocator, type, 1024, 32, 32, 4, &proxy) == RES_OK);
+ CHK(ssp_rng_proxy_ref_put(proxy) == RES_OK);
+}
+
+static void
test_rng_from_proxy(void)
{
struct ssp_rng_type type;
@@ -111,6 +163,98 @@ test_rng_from_proxy(void)
}
static void
+test_rng_from_proxy2(void)
+{
+ struct ssp_rng_proxy* proxy[2];
+ struct ssp_rng* rng[4];
+ const size_t block_sz = 99;
+ const size_t nrands = 1000;
+ uint64_t* r[4];
+ size_t i, j;
+
+ CHK((r[0] = mem_alloc(sizeof(uint64_t)*nrands)) != NULL);
+ CHK((r[1] = mem_alloc(sizeof(uint64_t)*nrands)) != NULL);
+ CHK((r[2] = mem_alloc(sizeof(uint64_t)*nrands)) != NULL);
+ CHK((r[3] = mem_alloc(sizeof(uint64_t)*nrands)) != NULL);
+
+ CHK(ssp_rng_proxy_create2
+ (NULL, &ssp_rng_mt19937_64, 0, block_sz, block_sz, 4, &proxy[0]) == RES_OK);
+
+ CHK(ssp_rng_proxy_create_rng(proxy[0], 0, &rng[0]) == RES_OK);
+ CHK(ssp_rng_proxy_create_rng(proxy[0], 1, &rng[1]) == RES_OK);
+ CHK(ssp_rng_proxy_create_rng(proxy[0], 2, &rng[2]) == RES_OK);
+ CHK(ssp_rng_proxy_create_rng(proxy[0], 3, &rng[3]) == RES_OK);
+
+ /* Generate random numbers */
+ FOR_EACH(i, 0, nrands) {
+ r[0][i] = ssp_rng_get(rng[0]);
+ r[1][i] = ssp_rng_get(rng[1]);
+ r[2][i] = ssp_rng_get(rng[2]);
+ r[3][i] = ssp_rng_get(rng[3]);
+ }
+
+ /* Check that each RNG generate a unique sequence of random numbers */
+ FOR_EACH(i, 0, nrands) {
+ FOR_EACH(j, 0, nrands) {
+ CHK(r[0][i] != r[1][j]);
+ CHK(r[0][i] != r[2][j]);
+ CHK(r[0][i] != r[3][j]);
+ CHK(r[1][i] != r[2][j]);
+ CHK(r[1][i] != r[3][j]);
+ CHK(r[2][i] != r[3][j]);
+ }
+ }
+
+ CHK(ssp_rng_proxy_ref_put(proxy[0]) == RES_OK);
+ CHK(ssp_rng_ref_put(rng[0]) == RES_OK);
+ 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);
+
+ CHK(ssp_rng_proxy_create2(NULL, &ssp_rng_mt19937_64,
+ 0, block_sz, 2*block_sz, 2, &proxy[0]) == RES_OK);
+ CHK(ssp_rng_proxy_create2(NULL, &ssp_rng_mt19937_64,
+ block_sz, block_sz, 2*block_sz, 2, &proxy[1]) == RES_OK);
+
+ CHK(ssp_rng_proxy_create_rng(proxy[0], 0, &rng[0]) == RES_OK);
+ CHK(ssp_rng_proxy_create_rng(proxy[0], 1, &rng[1]) == RES_OK);
+ CHK(ssp_rng_proxy_create_rng(proxy[1], 0, &rng[2]) == RES_OK);
+ CHK(ssp_rng_proxy_create_rng(proxy[1], 1, &rng[3]) == RES_OK);
+
+ /* Generate random numbers */
+ FOR_EACH(i, 0, nrands) {
+ r[0][i] = ssp_rng_get(rng[0]);
+ r[1][i] = ssp_rng_get(rng[1]);
+ r[2][i] = ssp_rng_get(rng[2]);
+ r[3][i] = ssp_rng_get(rng[3]);
+ }
+
+ /* Check that each RNG generate a unique sequence of random numbers */
+ FOR_EACH(i, 0, nrands) {
+ FOR_EACH(j, 0, nrands) {
+ CHK(r[0][i] != r[1][j]);
+ CHK(r[0][i] != r[2][j]);
+ CHK(r[0][i] != r[3][j]);
+ CHK(r[1][i] != r[2][j]);
+ CHK(r[1][i] != r[3][j]);
+ CHK(r[2][i] != r[3][j]);
+ }
+ }
+
+ CHK(ssp_rng_proxy_ref_put(proxy[0]) == RES_OK);
+ CHK(ssp_rng_proxy_ref_put(proxy[1]) == RES_OK);
+ CHK(ssp_rng_ref_put(rng[0]) == RES_OK);
+ 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);
+
+ mem_rm(r[0]);
+ mem_rm(r[1]);
+ mem_rm(r[2]);
+ mem_rm(r[3]);
+}
+
+static void
test_multi_proxies(void)
{
struct ssp_rng_proxy* proxy1;
@@ -278,7 +422,9 @@ main(int argc, char** argv)
{
(void)argc, (void)argv;
test_creation();
+ test_creation2();
test_rng_from_proxy();
+ test_rng_from_proxy2();
test_multi_proxies();
test_proxy_from_rng();
test_read();