diff options
| author | Tom Lane | 2023-01-09 17:44:00 +0000 |
|---|---|---|
| committer | Tom Lane | 2023-01-09 17:44:00 +0000 |
| commit | 38d81760c4d7e22b95252e3545596602c9e38806 (patch) | |
| tree | c5f8802619bf418dbdcc40392bb6d47123861908 /src/test | |
| parent | 2673ebf49acfd83b09c777ced8f21eacd27b51ce (diff) | |
Invent random_normal() to provide normally-distributed random numbers.
There is already a version of this in contrib/tablefunc, but it
seems sufficiently widely useful to justify having it in core.
Paul Ramsey
Discussion: https://postgr.es/m/CACowWR0DqHAvOKUCNxTrASFkWsDLqKMd6WiXvVvaWg4pV1BMnQ@mail.gmail.com
Diffstat (limited to 'src/test')
| -rw-r--r-- | src/test/regress/expected/random.out | 28 | ||||
| -rw-r--r-- | src/test/regress/sql/random.sql | 24 |
2 files changed, 52 insertions, 0 deletions
diff --git a/src/test/regress/expected/random.out b/src/test/regress/expected/random.out index a919b28d8da..30bd8661389 100644 --- a/src/test/regress/expected/random.out +++ b/src/test/regress/expected/random.out @@ -51,3 +51,31 @@ SELECT AVG(random) FROM RANDOM_TBL ----- (0 rows) +-- now test random_normal() +TRUNCATE random_tbl; +INSERT INTO random_tbl (random) + SELECT count(*) + FROM onek WHERE random_normal(0, 1) < 0; +INSERT INTO random_tbl (random) + SELECT count(*) + FROM onek WHERE random_normal(0) < 0; +INSERT INTO random_tbl (random) + SELECT count(*) + FROM onek WHERE random_normal() < 0; +INSERT INTO random_tbl (random) + SELECT count(*) + FROM onek WHERE random_normal(stddev => 1, mean => 0) < 0; +-- expect similar, but not identical values +SELECT random, count(random) FROM random_tbl + GROUP BY random HAVING count(random) > 3; + random | count +--------+------- +(0 rows) + +-- approximately check expected distribution +SELECT AVG(random) FROM random_tbl + HAVING AVG(random) NOT BETWEEN 400 AND 600; + avg +----- +(0 rows) + diff --git a/src/test/regress/sql/random.sql b/src/test/regress/sql/random.sql index 8187b2c288a..3104af46b72 100644 --- a/src/test/regress/sql/random.sql +++ b/src/test/regress/sql/random.sql @@ -42,3 +42,27 @@ SELECT random, count(random) FROM RANDOM_TBL SELECT AVG(random) FROM RANDOM_TBL HAVING AVG(random) NOT BETWEEN 80 AND 120; + +-- now test random_normal() + +TRUNCATE random_tbl; +INSERT INTO random_tbl (random) + SELECT count(*) + FROM onek WHERE random_normal(0, 1) < 0; +INSERT INTO random_tbl (random) + SELECT count(*) + FROM onek WHERE random_normal(0) < 0; +INSERT INTO random_tbl (random) + SELECT count(*) + FROM onek WHERE random_normal() < 0; +INSERT INTO random_tbl (random) + SELECT count(*) + FROM onek WHERE random_normal(stddev => 1, mean => 0) < 0; + +-- expect similar, but not identical values +SELECT random, count(random) FROM random_tbl + GROUP BY random HAVING count(random) > 3; + +-- approximately check expected distribution +SELECT AVG(random) FROM random_tbl + HAVING AVG(random) NOT BETWEEN 400 AND 600; |
