mirror of
git://sourceware.org/git/glibc.git
synced 2024-11-27 03:41:23 +08:00
[BZ #3747]
2006-12-18 Jakub Jelinek <jakub@redhat.com> [BZ #3747] * stdlib/jrand48_r.c (__jrand48_r): Make sure result is in the [-231 .. 231) range. * stdlib/tst-rand48.c (main): Fix expected values for 64-bit targets. * stdlib/tst-rand48-2.c: New test. * stdlib/Makefile (tests): Add tst-rand48-2.
This commit is contained in:
parent
9e1444fc3d
commit
5bcba0ed52
10
ChangeLog
10
ChangeLog
@ -1,3 +1,13 @@
|
||||
2006-12-18 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
[BZ #3747]
|
||||
* stdlib/jrand48_r.c (__jrand48_r): Make sure result is in the
|
||||
[-231 .. 231) range.
|
||||
* stdlib/tst-rand48.c (main): Fix expected values for 64-bit
|
||||
targets.
|
||||
* stdlib/tst-rand48-2.c: New test.
|
||||
* stdlib/Makefile (tests): Add tst-rand48-2.
|
||||
|
||||
2006-12-14 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
* misc/tst-pselect.c (do_test): Fix sigblock argument.
|
||||
|
@ -67,7 +67,7 @@ tests := tst-strtol tst-strtod testmb testrand testsort testdiv \
|
||||
tst-xpg-basename tst-random tst-random2 tst-bsearch \
|
||||
tst-limits tst-rand48 bug-strtod tst-setcontext \
|
||||
test-a64l tst-qsort tst-system testmb2 bug-strtod2 \
|
||||
tst-atof1 tst-atof2 tst-strtod2 tst-strtod3
|
||||
tst-atof1 tst-atof2 tst-strtod2 tst-strtod3 tst-rand48-2
|
||||
|
||||
include ../Makeconfig
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* Copyright (C) 1995, 1997, 1998, 2001 Free Software Foundation, Inc.
|
||||
/* Copyright (C) 1995, 1997, 1998, 2001, 2006 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, August 1995.
|
||||
|
||||
@ -30,7 +30,7 @@ __jrand48_r (xsubi, buffer, result)
|
||||
return -1;
|
||||
|
||||
/* Store the result. */
|
||||
*result = ((xsubi[2] << 16) | xsubi[1]) & 0xffffffffl;
|
||||
*result = (int32_t) ((xsubi[2] << 16) | xsubi[1]);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
113
stdlib/tst-rand48-2.c
Normal file
113
stdlib/tst-rand48-2.c
Normal file
@ -0,0 +1,113 @@
|
||||
#include <stdint.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <time.h>
|
||||
|
||||
int
|
||||
main (void)
|
||||
{
|
||||
time_t t = time (NULL);
|
||||
int i, ret = 0;
|
||||
double d;
|
||||
long int l;
|
||||
struct drand48_data data;
|
||||
unsigned short int buf[3];
|
||||
|
||||
srand48 ((long int) t);
|
||||
for (i = 0; i < 50; i++)
|
||||
if ((d = drand48 ()) < 0.0 || d >= 1.0)
|
||||
{
|
||||
printf ("drand48 %d %g\n", i, d);
|
||||
ret = 1;
|
||||
}
|
||||
|
||||
srand48_r ((long int) t, &data);
|
||||
for (i = 0; i < 50; i++)
|
||||
if (drand48_r (&data, &d) != 0 || d < 0.0 || d >= 1.0)
|
||||
{
|
||||
printf ("drand48_r %d %g\n", i, d);
|
||||
ret = 1;
|
||||
}
|
||||
|
||||
buf[2] = (t & 0xffff0000) >> 16; buf[1] = (t & 0xffff); buf[0] = 0x330e;
|
||||
for (i = 0; i < 50; i++)
|
||||
if ((d = erand48 (buf)) < 0.0 || d >= 1.0)
|
||||
{
|
||||
printf ("erand48 %d %g\n", i, d);
|
||||
ret = 1;
|
||||
}
|
||||
|
||||
buf[2] = (t & 0xffff0000) >> 16; buf[1] = (t & 0xffff); buf[0] = 0x330e;
|
||||
for (i = 0; i < 50; i++)
|
||||
if (erand48_r (buf, &data, &d) != 0 || d < 0.0 || d >= 1.0)
|
||||
{
|
||||
printf ("erand48_r %d %g\n", i, d);
|
||||
ret = 1;
|
||||
}
|
||||
|
||||
srand48 ((long int) t);
|
||||
for (i = 0; i < 50; i++)
|
||||
if ((l = lrand48 ()) < 0 || l > INT32_MAX)
|
||||
{
|
||||
printf ("lrand48 %d %ld\n", i, l);
|
||||
ret = 1;
|
||||
}
|
||||
|
||||
srand48_r ((long int) t, &data);
|
||||
for (i = 0; i < 50; i++)
|
||||
if (lrand48_r (&data, &l) != 0 || l < 0 || l > INT32_MAX)
|
||||
{
|
||||
printf ("lrand48_r %d %ld\n", i, l);
|
||||
ret = 1;
|
||||
}
|
||||
|
||||
buf[2] = (t & 0xffff0000) >> 16; buf[1] = (t & 0xffff); buf[0] = 0x330e;
|
||||
for (i = 0; i < 50; i++)
|
||||
if ((l = nrand48 (buf)) < 0 || l > INT32_MAX)
|
||||
{
|
||||
printf ("nrand48 %d %ld\n", i, l);
|
||||
ret = 1;
|
||||
}
|
||||
|
||||
buf[2] = (t & 0xffff0000) >> 16; buf[1] = (t & 0xffff); buf[0] = 0x330e;
|
||||
for (i = 0; i < 50; i++)
|
||||
if (nrand48_r (buf, &data, &l) != 0 || l < 0 || l > INT32_MAX)
|
||||
{
|
||||
printf ("nrand48_r %d %ld\n", i, l);
|
||||
ret = 1;
|
||||
}
|
||||
|
||||
srand48 ((long int) t);
|
||||
for (i = 0; i < 50; i++)
|
||||
if ((l = mrand48 ()) < INT32_MIN || l > INT32_MAX)
|
||||
{
|
||||
printf ("mrand48 %d %ld\n", i, l);
|
||||
ret = 1;
|
||||
}
|
||||
|
||||
srand48_r ((long int) t, &data);
|
||||
for (i = 0; i < 50; i++)
|
||||
if (mrand48_r (&data, &l) != 0 || l < INT32_MIN || l > INT32_MAX)
|
||||
{
|
||||
printf ("mrand48_r %d %ld\n", i, l);
|
||||
ret = 1;
|
||||
}
|
||||
|
||||
buf[2] = (t & 0xffff0000) >> 16; buf[1] = (t & 0xffff); buf[0] = 0x330e;
|
||||
for (i = 0; i < 50; i++)
|
||||
if ((l = jrand48 (buf)) < INT32_MIN || l > INT32_MAX)
|
||||
{
|
||||
printf ("jrand48 %d %ld\n", i, l);
|
||||
ret = 1;
|
||||
}
|
||||
|
||||
buf[2] = (t & 0xffff0000) >> 16; buf[1] = (t & 0xffff); buf[0] = 0x330e;
|
||||
for (i = 0; i < 50; i++)
|
||||
if (jrand48_r (buf, &data, &l) != 0 || l < INT32_MIN || l > INT32_MAX)
|
||||
{
|
||||
printf ("jrand48_r %d %ld\n", i, l);
|
||||
ret = 1;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
@ -44,10 +44,10 @@ main (void)
|
||||
}
|
||||
|
||||
l = mrand48 ();
|
||||
if (l != 0xa28c1003l)
|
||||
if (l != -0x5d73effdl)
|
||||
{
|
||||
printf ("mrand48() in line %d failed: expected %lx, seen %lx\n",
|
||||
__LINE__ - 4, 0xa28c1003l, l);
|
||||
__LINE__ - 4, -0x5d73effdl, l);
|
||||
result = 1;
|
||||
}
|
||||
|
||||
@ -60,10 +60,10 @@ main (void)
|
||||
}
|
||||
|
||||
l = mrand48 ();
|
||||
if (l != 0x9e88f474l)
|
||||
if (l != -0x61770b8cl)
|
||||
{
|
||||
printf ("mrand48() in line %d failed: expected %lx, seen %lx\n",
|
||||
__LINE__ - 4, 0x9e88f474l, l);
|
||||
__LINE__ - 4, -0x61770b8cl, l);
|
||||
result = 1;
|
||||
}
|
||||
|
||||
@ -92,10 +92,10 @@ main (void)
|
||||
}
|
||||
|
||||
l = mrand48 ();
|
||||
if (l != 0xeb7a1fa3l)
|
||||
if (l != -0x1485e05dl)
|
||||
{
|
||||
printf ("mrand48() in line %d failed: expected %lx, seen %lx\n",
|
||||
__LINE__ - 4, 0xeb7a1fa3l, l);
|
||||
__LINE__ - 4, -0x1485e05dl, l);
|
||||
result = 1;
|
||||
}
|
||||
|
||||
@ -171,10 +171,10 @@ main (void)
|
||||
}
|
||||
|
||||
l = mrand48 ();
|
||||
if (l != 0xa28c1003l)
|
||||
if (l != -0x5d73effdl)
|
||||
{
|
||||
printf ("mrand48() in line %d failed: expected %lx, seen %lx\n",
|
||||
__LINE__ - 4, 0xa28c1003l, l);
|
||||
__LINE__ - 4, -0x5d73effdl, l);
|
||||
result = 1;
|
||||
}
|
||||
|
||||
@ -187,10 +187,10 @@ main (void)
|
||||
}
|
||||
|
||||
l = mrand48 ();
|
||||
if (l != 0x9e88f474l)
|
||||
if (l != -0x61770b8cl)
|
||||
{
|
||||
printf ("mrand48() in line %d failed: expected %lx, seen %lx\n",
|
||||
__LINE__ - 4, 0x9e88f474l, l);
|
||||
__LINE__ - 4, -0x61770b8cl, l);
|
||||
result = 1;
|
||||
}
|
||||
|
||||
@ -231,10 +231,10 @@ main (void)
|
||||
}
|
||||
|
||||
l = mrand48 ();
|
||||
if (l != 0xeb7a1fa3l)
|
||||
if (l != -0x1485e05dl)
|
||||
{
|
||||
printf ("mrand48() in line %d failed: expected %lx, seen %lx\n",
|
||||
__LINE__ - 4, 0xeb7a1fa3l, l);
|
||||
__LINE__ - 4, -0x1485e05dl, l);
|
||||
result = 1;
|
||||
}
|
||||
|
||||
@ -287,10 +287,10 @@ main (void)
|
||||
}
|
||||
|
||||
l = jrand48 (xs);
|
||||
if (l != 0xf568c7a0l)
|
||||
if (l != -0xa973860l)
|
||||
{
|
||||
printf ("jrand48() in line %d failed: expected %lx, seen %lx\n",
|
||||
__LINE__ - 4, 0xf568c7a0l, l);
|
||||
__LINE__ - 4, -0xa973860l, l);
|
||||
result = 1;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user