123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393 |
- #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"
|