summaryrefslogtreecommitdiff
path: root/REORG.TODO/stdlib/tst-rand48.c
diff options
context:
space:
mode:
authorZack Weinberg <zackw@panix.com>2017-06-08 15:39:03 -0400
committerZack Weinberg <zackw@panix.com>2017-06-08 15:39:03 -0400
commit5046dbb4a7eba5eccfd258f92f4735c9ffc8d069 (patch)
tree4470480d904b65cf14ca524f96f79eca818c3eaf /REORG.TODO/stdlib/tst-rand48.c
parent199fc19d3aaaf57944ef036e15904febe877fc93 (diff)
downloadglibc-5046dbb4a7eba5eccfd258f92f4735c9ffc8d069.tar.gz
Prepare for radical source tree reorganization.zack/build-layout-experiment
All top-level files and directories are moved into a temporary storage directory, REORG.TODO, except for files that will certainly still exist in their current form at top level when we're done (COPYING, COPYING.LIB, LICENSES, NEWS, README), all old ChangeLog files (which are moved to the new directory OldChangeLogs, instead), and the generated file INSTALL (which is just deleted; in the new order, there will be no generated files checked into version control).
Diffstat (limited to 'REORG.TODO/stdlib/tst-rand48.c')
-rw-r--r--REORG.TODO/stdlib/tst-rand48.c393
1 files changed, 393 insertions, 0 deletions
diff --git a/REORG.TODO/stdlib/tst-rand48.c b/REORG.TODO/stdlib/tst-rand48.c
new file mode 100644
index 0000000000..973c62e1eb
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-rand48.c
@@ -0,0 +1,393 @@
+#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"