Skip to content
Permalink
master
Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Go to file
 
 
Cannot retrieve contributors at this time
#include <float.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#ifndef DECIMAL_DIG
# define DECIMAL_DIG 21
#endif
static int
do_test (void)
{
unsigned short int xs[3] = { 0x0001, 0x0012, 0x0123 };
unsigned short int lxs[7];
unsigned short int *xsp;
int result = 0;
long int l;
double d;
double e;
/* Test srand48. */
srand48 (0x98765432);
/* Get the values of the internal Xi array. */
xsp = seed48 (xs);
if (xsp[0] != 0x330e || xsp[1] != 0x5432 || xsp[2] != 0x9876)
{
puts ("srand48(0x98765432) didn't set correct value");
printf (" expected: { %04hx, %04hx, %04hx }\n", 0x330e, 0x5432, 0x9876);
printf (" seen: { %04hx, %04hx, %04hx }\n", xsp[0], xsp[1], xsp[2]);
result = 1;
}
/* Put the values back. */
memcpy (xs, xsp, sizeof (xs));
(void) seed48 (xs);
/* See whether the correct values are installed. */
l = lrand48 ();
if (l != 0x2fed1413l)
{
printf ("lrand48() in line %d failed: expected %lx, seen %lx\n",
__LINE__ - 4, 0x2fed1413l, l);
result = 1;
}
l = mrand48 ();
if (l != -0x5d73effdl)
{
printf ("mrand48() in line %d failed: expected %lx, seen %lx\n",
__LINE__ - 4, -0x5d73effdl, l);
result = 1;
}
l = lrand48 ();
if (l != 0x585fcfb7l)
{
printf ("lrand48() in line %d failed: expected %lx, seen %lx\n",
__LINE__ - 4, 0x585fcfb7l, l);
result = 1;
}
l = mrand48 ();
if (l != -0x61770b8cl)
{
printf ("mrand48() in line %d failed: expected %lx, seen %lx\n",
__LINE__ - 4, -0x61770b8cl, l);
result = 1;
}
/* Test seed48. The previous call should have install the values in
the initialization of `xs' above. */
xs[0] = 0x1234;
xs[1] = 0x5678;
xs[2] = 0x9012;
xsp = seed48 (xs);
if (xsp[0] != 0x62f2 || xsp[1] != 0xf474 || xsp[2] != 0x9e88)
{
puts ("seed48() did not install the values correctly");
printf (" expected: { %04hx, %04hx, %04hx }\n", 0x62f2, 0xf474, 0x9e88);
printf (" seen: { %04hx, %04hx, %04hx }\n", xsp[0], xsp[1], xsp[2]);
result = 1;
}
/* Test lrand48 and mrand48. We continue from the seed established
above. */
l = lrand48 ();
if (l != 0x017e48b5l)
{
printf ("lrand48() in line %d failed: expected %lx, seen %lx\n",
__LINE__ - 4, 0x017e48b5l, l);
result = 1;
}
l = mrand48 ();
if (l != -0x1485e05dl)
{
printf ("mrand48() in line %d failed: expected %lx, seen %lx\n",
__LINE__ - 4, -0x1485e05dl, l);
result = 1;
}
l = lrand48 ();
if (l != 0x6b6a3f95l)
{
printf ("lrand48() in line %d failed: expected %lx, seen %lx\n",
__LINE__ - 4, 0x6b6a3f95l, l);
result = 1;
}
l = mrand48 ();
if (l != 0x175c0d6fl)
{
printf ("mrand48() in line %d failed: expected %lx, seen %lx\n",
__LINE__ - 4, 0x175c0d6fl, l);
result = 1;
}
/* Test lcong48. */
lxs[0] = 0x4567;
lxs[1] = 0x6789;
lxs[2] = 0x8901;
lxs[3] = 0x0123;
lxs[4] = 0x2345;
lxs[5] = 0x1111;
lxs[6] = 0x2222;
lcong48 (lxs);
/* See whether the correct values are installed. */
l = lrand48 ();
if (l != 0x6df63d66l)
{
printf ("lrand48() in line %d failed: expected %lx, seen %lx\n",
__LINE__ - 4, 0x6df63d66l, l);
result = 1;
}
l = mrand48 ();
if (l != 0x2f92c8e1l)
{
printf ("mrand48() in line %d failed: expected %lx, seen %lx\n",
__LINE__ - 4, 0x2f92c8e1l, l);
result = 1;
}
l = lrand48 ();
if (l != 0x3b4869ffl)
{
printf ("lrand48() in line %d failed: expected %lx, seen %lx\n",
__LINE__ - 4, 0x3b4869ffl, l);
result = 1;
}
l = mrand48 ();
if (l != 0x5cd4cc3el)
{
printf ("mrand48() in line %d failed: expected %lx, seen %lx\n",
__LINE__ - 4, 0x5cd4cc3el, l);
result = 1;
}
/* Check whether srand48() restores the A and C parameters. */
srand48 (0x98765432);
/* See whether the correct values are installed. */
l = lrand48 ();
if (l != 0x2fed1413l)
{
printf ("lrand48() in line %d failed: expected %lx, seen %lx\n",
__LINE__ - 4, 0x2fed1413l, l);
result = 1;
}
l = mrand48 ();
if (l != -0x5d73effdl)
{
printf ("mrand48() in line %d failed: expected %lx, seen %lx\n",
__LINE__ - 4, -0x5d73effdl, l);
result = 1;
}
l = lrand48 ();
if (l != 0x585fcfb7l)
{
printf ("lrand48() in line %d failed: expected %lx, seen %lx\n",
__LINE__ - 4, 0x585fcfb7l, l);
result = 1;
}
l = mrand48 ();
if (l != -0x61770b8cl)
{
printf ("mrand48() in line %d failed: expected %lx, seen %lx\n",
__LINE__ - 4, -0x61770b8cl, l);
result = 1;
}
/* And again to see whether seed48() does the same. */
lcong48 (lxs);
/* See whether lxs wasn't modified. */
l = lrand48 ();
if (l != 0x6df63d66l)
{
printf ("lrand48() in line %d failed: expected %lx, seen %lx\n",
__LINE__ - 4, 0x6df63d66l, l);
result = 1;
}
/* Test seed48. The previous call should have install the values in
the initialization of `xs' above. */
xs[0] = 0x1234;
xs[1] = 0x5678;
xs[2] = 0x9012;
xsp = seed48 (xs);
if (xsp[0] != 0x0637 || xsp[1] != 0x7acd || xsp[2] != 0xdbec)
{
puts ("seed48() did not install the values correctly");
printf (" expected: { %04hx, %04hx, %04hx }\n", 0x0637, 0x7acd, 0xdbec);
printf (" seen: { %04hx, %04hx, %04hx }\n", xsp[0], xsp[1], xsp[2]);
result = 1;
}
/* Test lrand48 and mrand48. We continue from the seed established
above. */
l = lrand48 ();
if (l != 0x017e48b5l)
{
printf ("lrand48() in line %d failed: expected %lx, seen %lx\n",
__LINE__ - 4, 0x017e48b5l, l);
result = 1;
}
l = mrand48 ();
if (l != -0x1485e05dl)
{
printf ("mrand48() in line %d failed: expected %lx, seen %lx\n",
__LINE__ - 4, -0x1485e05dl, l);
result = 1;
}
l = lrand48 ();
if (l != 0x6b6a3f95l)
{
printf ("lrand48() in line %d failed: expected %lx, seen %lx\n",
__LINE__ - 4, 0x6b6a3f95l, l);
result = 1;
}
l = mrand48 ();
if (l != 0x175c0d6fl)
{
printf ("mrand48() in line %d failed: expected %lx, seen %lx\n",
__LINE__ - 4, 0x175c0d6fl, l);
result = 1;
}
/* Test drand48. */
d = drand48 ();
if (d != 0.0908832261858485424)
{
printf ("drand48() in line %d failed: expected %.*g, seen %.*g\n",
__LINE__ - 4, DECIMAL_DIG, 0.0908832261858485424,
DECIMAL_DIG, d);
result = 1;
}
d = drand48 ();
if (d != 0.943149381730059133133)
{
printf ("drand48() in line %d failed: expected %.*g, seen %.*g\n",
__LINE__ - 4, DECIMAL_DIG, 0.943149381730059133133,
DECIMAL_DIG, d);
result = 1;
}
/* Now the functions which get the Xis passed. */
xs[0] = 0x3849;
xs[1] = 0x5061;
xs[2] = 0x7283;
l = nrand48 (xs);
if (l != 0x1efe61a1l)
{
printf ("nrand48() in line %d failed: expected %lx, seen %lx\n",
__LINE__ - 4, 0x1efe61a1l, l);
result = 1;
}
l = jrand48 (xs);
if (l != -0xa973860l)
{
printf ("jrand48() in line %d failed: expected %lx, seen %lx\n",
__LINE__ - 4, -0xa973860l, l);
result = 1;
}
l = nrand48 (xs);
if (l != 0x2a5e57fel)
{
printf ("nrand48() in line %d failed: expected %lx, seen %lx\n",
__LINE__ - 4, 0x2a5e57fel, l);
result = 1;
}
l = jrand48 (xs);
if (l != 0x71a779a8l)
{
printf ("jrand48() in line %d failed: expected %lx, seen %lx\n",
__LINE__ - 4, 0x71a779a8l, l);
result = 1;
}
/* Test whether the global A and C are used. */
lcong48 (lxs);
l = nrand48 (xs);
if (l != 0x32beee9fl)
{
printf ("nrand48() in line %d failed: expected %lx, seen %lx\n",
__LINE__ - 4, 0x32beee9fl, l);
result = 1;
}
l = jrand48 (xs);
if (l != 0x7bddf3bal)
{
printf ("jrand48() in line %d failed: expected %lx, seen %lx\n",
__LINE__ - 4, 0x7bddf3bal, l);
result = 1;
}
l = nrand48 (xs);
if (l != 0x85bdf28l)
{
printf ("nrand48() in line %d failed: expected %lx, seen %lx\n",
__LINE__ - 4, 0x85bdf28l, l);
result = 1;
}
l = jrand48 (xs);
if (l != 0x7b433e47l)
{
printf ("jrand48() in line %d failed: expected %lx, seen %lx\n",
__LINE__ - 4, 0x7b433e47l, l);
result = 1;
}
/* Test erand48. Also compare with the drand48 results. */
(void) seed48 (xs);
d = drand48 ();
e = erand48 (xs);
if (d != e)
{
printf ("\
drand48() and erand48 in lines %d and %d produce different results\n",
__LINE__ - 6, __LINE__ - 5);
printf (" drand48() = %g, erand48() = %g\n", d, e);
result = 1;
}
else if (e != 0.640650904452755298735)
{
printf ("erand48() in line %d failed: expected %.*g, seen %.*g\n",
__LINE__ - 4, DECIMAL_DIG, 0.640650904452755298735,
DECIMAL_DIG, e);
result = 1;
}
d = drand48 ();
e = erand48 (xs);
if (d != e)
{
printf ("\
drand48() and erand48 in lines %d and %d produce different results\n",
__LINE__ - 6, __LINE__ - 5);
printf (" drand48() = %g, erand48() = %g\n", d, e);
result = 1;
}
else if (e != 0.115372323508150742555)
{
printf ("erand48() in line %d failed: expected %.*g, seen %.*g\n",
__LINE__ - 4, DECIMAL_DIG, 0.0115372323508150742555,
DECIMAL_DIG, e);
result = 1;
}
return result;
}
#define TEST_FUNCTION do_test ()
#include "../test-skeleton.c"