diff options
author | Elliott Hughes <enh@google.com> | 2014-11-06 12:40:08 -0800 |
---|---|---|
committer | Elliott Hughes <enh@google.com> | 2014-11-06 14:14:37 -0800 |
commit | 274afe8f0eab4139c94d5f8b1ee3d267f449ef42 (patch) | |
tree | 9424b40a8247c264e489358ce007b3ff4176d868 /tests/stdlib_test.cpp | |
parent | 39ba30354a3890dd653ab55819d38eed3855edaa (diff) |
Add POSIX lcong48.
Change-Id: I821046816661d77275cb02c8c99d526bb41afb9c
Diffstat (limited to 'tests/stdlib_test.cpp')
-rw-r--r-- | tests/stdlib_test.cpp | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/tests/stdlib_test.cpp b/tests/stdlib_test.cpp index 421cd8263..050f5a766 100644 --- a/tests/stdlib_test.cpp +++ b/tests/stdlib_test.cpp @@ -28,12 +28,54 @@ #include <sys/types.h> #include <sys/wait.h> +// The random number generator tests all set the seed, get four values, reset the seed and check +// that they get the first two values repeated, and then reset the seed and check two more values +// to rule out the possibility that we're just going round a cycle of four values. +// TODO: factor this out. + TEST(stdlib, drand48) { srand48(0x01020304); EXPECT_DOUBLE_EQ(0.65619299195623526, drand48()); EXPECT_DOUBLE_EQ(0.18522597229772941, drand48()); EXPECT_DOUBLE_EQ(0.42015087072844537, drand48()); EXPECT_DOUBLE_EQ(0.061637783047395089, drand48()); + srand48(0x01020304); + EXPECT_DOUBLE_EQ(0.65619299195623526, drand48()); + EXPECT_DOUBLE_EQ(0.18522597229772941, drand48()); + srand48(0x01020304); + EXPECT_DOUBLE_EQ(0.65619299195623526, drand48()); + EXPECT_DOUBLE_EQ(0.18522597229772941, drand48()); +} + +TEST(stdlib, erand48) { + const unsigned short seed[3] = { 0x330e, 0xabcd, 0x1234 }; + unsigned short xsubi[3]; + memcpy(xsubi, seed, sizeof(seed)); + EXPECT_DOUBLE_EQ(0.39646477376027534, erand48(xsubi)); + EXPECT_DOUBLE_EQ(0.84048536941142515, erand48(xsubi)); + EXPECT_DOUBLE_EQ(0.35333609724524351, erand48(xsubi)); + EXPECT_DOUBLE_EQ(0.44658343479654405, erand48(xsubi)); + memcpy(xsubi, seed, sizeof(seed)); + EXPECT_DOUBLE_EQ(0.39646477376027534, erand48(xsubi)); + EXPECT_DOUBLE_EQ(0.84048536941142515, erand48(xsubi)); + memcpy(xsubi, seed, sizeof(seed)); + EXPECT_DOUBLE_EQ(0.39646477376027534, erand48(xsubi)); + EXPECT_DOUBLE_EQ(0.84048536941142515, erand48(xsubi)); +} + +TEST(stdlib, lcong48) { + unsigned short p[7] = { 0x0102, 0x0304, 0x0506, 0x0708, 0x090a, 0x0b0c, 0x0d0e }; + lcong48(p); + EXPECT_EQ(1531389981, lrand48()); + EXPECT_EQ(1598801533, lrand48()); + EXPECT_EQ(2080534853, lrand48()); + EXPECT_EQ(1102488897, lrand48()); + lcong48(p); + EXPECT_EQ(1531389981, lrand48()); + EXPECT_EQ(1598801533, lrand48()); + lcong48(p); + EXPECT_EQ(1531389981, lrand48()); + EXPECT_EQ(1598801533, lrand48()); } TEST(stdlib, lrand48) { @@ -42,6 +84,12 @@ TEST(stdlib, lrand48) { EXPECT_EQ(397769746, lrand48()); EXPECT_EQ(902267124, lrand48()); EXPECT_EQ(132366131, lrand48()); + srand48(0x01020304); + EXPECT_EQ(1409163720, lrand48()); + EXPECT_EQ(397769746, lrand48()); + srand48(0x01020304); + EXPECT_EQ(1409163720, lrand48()); + EXPECT_EQ(397769746, lrand48()); } TEST(stdlib, random) { @@ -50,6 +98,12 @@ TEST(stdlib, random) { EXPECT_EQ(1399865117, random()); EXPECT_EQ(2032643283, random()); EXPECT_EQ(571329216, random()); + srandom(0x01020304); + EXPECT_EQ(55436735, random()); + EXPECT_EQ(1399865117, random()); + srandom(0x01020304); + EXPECT_EQ(55436735, random()); + EXPECT_EQ(1399865117, random()); } TEST(stdlib, rand) { @@ -58,6 +112,12 @@ TEST(stdlib, rand) { EXPECT_EQ(1399865117, rand()); EXPECT_EQ(2032643283, rand()); EXPECT_EQ(571329216, rand()); + srand(0x01020304); + EXPECT_EQ(55436735, rand()); + EXPECT_EQ(1399865117, rand()); + srand(0x01020304); + EXPECT_EQ(55436735, rand()); + EXPECT_EQ(1399865117, rand()); } TEST(stdlib, mrand48) { @@ -66,6 +126,12 @@ TEST(stdlib, mrand48) { EXPECT_EQ(795539493, mrand48()); EXPECT_EQ(1804534249, mrand48()); EXPECT_EQ(264732262, mrand48()); + srand48(0x01020304); + EXPECT_EQ(-1476639856, mrand48()); + EXPECT_EQ(795539493, mrand48()); + srand48(0x01020304); + EXPECT_EQ(-1476639856, mrand48()); + EXPECT_EQ(795539493, mrand48()); } TEST(stdlib, posix_memalign) { |