On 01/13/17 14:47, Christophe Milard wrote:
> checking the thread safety of odp_random.
> 
> Signed-off-by: Christophe Milard <christophe.mil...@linaro.org>
> ---
>  test/common_plat/validation/api/random/random.c | 46 
> +++++++++++++++++++++++++
>  test/common_plat/validation/api/random/random.h |  1 +
>  2 files changed, 47 insertions(+)
> 
> diff --git a/test/common_plat/validation/api/random/random.c 
> b/test/common_plat/validation/api/random/random.c
> index a0e2ef7..17234db 100644
> --- a/test/common_plat/validation/api/random/random.c
> +++ b/test/common_plat/validation/api/random/random.c
> @@ -8,6 +8,8 @@
>  #include <odp_cunit_common.h>
>  #include "random.h"
>  
> +#define STRESS_TEST_SZ 100000
> +
>  void random_test_get_size(void)
>  {
>       int32_t ret;
> @@ -61,10 +63,54 @@ void random_test_repeat(void)
>       CU_ASSERT(memcmp(buf1, buf2, sizeof(buf1)) == 0);
>  }
>  
> +/*
> + * thread part for the random_test_stress
> + */
> +static int run_test_stress(void *arg ODP_UNUSED)
> +{
> +     int32_t i;
> +     int32_t rc;
> +     uint8_t buf[4096];
> +
> +     odp_random_kind_t max_kind = odp_random_max_kind();
> +
> +     /* generate plenty of random data of different length and different
> +      * quality (using the 2 first bytes of the previous iteration buffer as
> +      * length and quality)
> +      */
> +     for (i = 0; i < STRESS_TEST_SZ; i++) {
> +             rc = odp_random_data(buf, buf[0] + 2, buf[1] % (max_kind + 1));
> +             CU_ASSERT(rc > 0);
> +     }
> +
> +     fflush(stdout);


is fflush() for ASSERT? isn't it stderr?

> +     return CU_get_number_of_failures();
> +}
> +
> +/*
> + * stress tests
> + */
> +void random_test_stress(void)
> +{
> +     pthrd_arg thrdarg;
> +     odp_cpumask_t unused;
> +
> +     thrdarg.numthrds = odp_cpumask_default_worker(&unused, 0);
> +     if (thrdarg.numthrds > MAX_WORKERS)
> +             thrdarg.numthrds = MAX_WORKERS;
> +
> +     /* create threads */
> +     odp_cunit_thread_create(run_test_stress, &thrdarg);
> +
> +     /* wait for all thread endings: */
> +     CU_ASSERT(odp_cunit_thread_exit(&thrdarg) >= 0);
> +}
> +
>  odp_testinfo_t random_suite[] = {
>       ODP_TEST_INFO(random_test_get_size),
>       ODP_TEST_INFO(random_test_kind),
>       ODP_TEST_INFO(random_test_repeat),
> +     ODP_TEST_INFO(random_test_stress),
>       ODP_TEST_INFO_NULL,
>  };
>  
> diff --git a/test/common_plat/validation/api/random/random.h 
> b/test/common_plat/validation/api/random/random.h
> index c4bca78..f9538aa 100644
> --- a/test/common_plat/validation/api/random/random.h
> +++ b/test/common_plat/validation/api/random/random.h
> @@ -13,6 +13,7 @@
>  void random_test_get_size(void);
>  void random_test_kind(void);
>  void random_test_repeat(void);
> +void random_test_stress(void);
>  
>  /* test arrays: */
>  extern odp_testinfo_t random_suite[];
> 

Reply via email to