[PATCH 1/1] Newlib01: Add tests for rand() and lrand48()
Gedare Bloom
gedare at rtems.org
Wed Jun 8 15:43:49 UTC 2022
ok
On Wed, Jun 8, 2022 at 3:02 AM Matthew Joyce
<matthew.joyce at embedded-brains.de> wrote:
>
> From: Matt Joyce <matthew.joyce at embedded-brains.de>
>
> Check that the state of rand() and lrand48() is thread-specific,
> that they are properly initialized, and return the expected
> sequence of pseudo-random numbers for default seed values.
> ---
> testsuites/libtests/newlib01/init.c | 50 +++++++++++++++++++++++
> testsuites/libtests/newlib01/newlib01.doc | 3 ++
> 2 files changed, 53 insertions(+)
>
> diff --git a/testsuites/libtests/newlib01/init.c b/testsuites/libtests/newlib01/init.c
> index 8975a72fad..0bb3c4628b 100644
> --- a/testsuites/libtests/newlib01/init.c
> +++ b/testsuites/libtests/newlib01/init.c
> @@ -82,6 +82,50 @@ static void wait(void)
> rtems_test_assert(sc == RTEMS_SUCCESSFUL);
> }
>
> +/*
> + * Check that rand() is properly initialized and returns the expected sequence
> + * for default seed values. A call to rand() without any previous call to
> + * srand() generates the same sequence as when srand() is first called with a
> + * seed value of 1.
> + */
> +static void test_rand(void)
> +{
> + int rv;
> +
> + rv = rand();
> + rtems_test_assert(rv == 1481765933);
> + rv = rand();
> + rtems_test_assert(rv == 1085377743);
> + rv = rand();
> + rtems_test_assert(rv == 1270216262);
> +
> + srand(1);
> + rv = rand();
> + rtems_test_assert(rv == 1481765933);
> + rv = rand();
> + rtems_test_assert(rv == 1085377743);
> + rv = rand();
> + rtems_test_assert(rv == 1270216262);
> +}
> +
> +/*
> + * Check that lrand48() is properly initialized and returns the expected
> + * sequence for default seed values. A call to lrand48() without any previous
> + * call to srand48() uses default constant initializer values set in the _seed
> + * member of struct _rand48.
> + */
> +static void test_lrand48(void)
> +{
> + long rv;
> +
> + rv = lrand48();
> + rtems_test_assert(rv == 851401618);
> + rv = lrand48();
> + rtems_test_assert(rv == 1804928587);
> + rv = lrand48();
> + rtems_test_assert(rv == 758783491);
> +}
> +
> static void stdio_file_worker(rtems_task_argument arg)
> {
> test_context *ctx = &test_instance;
> @@ -90,6 +134,9 @@ static void stdio_file_worker(rtems_task_argument arg)
> char buf[1] = { 'x' };
> size_t n;
>
> + test_rand();
> + test_lrand48();
> +
> rtems_test_assert(reent->__cleanup == NULL);
>
> output = stdout = fopen(&stdio_file_path[0], "r+");
> @@ -454,6 +501,9 @@ static void Init(rtems_task_argument arg)
> int rv;
>
> TEST_BEGIN();
> + test_rand();
> + test_lrand48();
> +
> ctx->main_task_id = rtems_task_self();
>
> /* Fill dynamic file pool in Newlib */
> diff --git a/testsuites/libtests/newlib01/newlib01.doc b/testsuites/libtests/newlib01/newlib01.doc
> index fbda12aa98..dc16584418 100644
> --- a/testsuites/libtests/newlib01/newlib01.doc
> +++ b/testsuites/libtests/newlib01/newlib01.doc
> @@ -19,3 +19,6 @@ concepts:
> - Check that exit procedures provide proper resource cleanup. Ensure that
> a file opened from a worker task--but that is not assigned to a stdio
> stream--is not closed during thread termination.
> + - Check that the state of random number generators is thread-specific, they
> + are properly initialized, and return the expected sequence for default
> + seed values.
> --
> 2.31.1
>
> _______________________________________________
> devel mailing list
> devel at rtems.org
> http://lists.rtems.org/mailman/listinfo/devel
More information about the devel
mailing list