Improve random regression tests to fail less frequently.

This commit is contained in:
Bruce Momjian 2004-03-15 15:46:25 +00:00
parent 98bb1d2085
commit 6812e95a28
2 changed files with 55 additions and 22 deletions

View File

@ -2,34 +2,51 @@
-- RANDOM -- RANDOM
-- Test the random function -- Test the random function
-- --
-- count the number of tuples originally -- count the number of tuples originally, should be 1000
SELECT count(*) FROM onek; SELECT count(*) FROM onek;
count count
------- -------
1000 1000
(1 row) (1 row)
-- select roughly 1/10 of the tuples -- pick three random rows, they shouldn't match
-- Assume that the "onek" table has 1000 tuples (SELECT unique1 AS random
-- and try to bracket the correct number so we FROM onek ORDER BY random() LIMIT 1)
-- have a regression test which can pass/fail INTERSECT
-- - thomas 1998-08-17 (SELECT unique1 AS random
FROM onek ORDER BY random() LIMIT 1)
INTERSECT
(SELECT unique1 AS random
FROM onek ORDER BY random() LIMIT 1);
random
--------
(0 rows)
-- count roughly 1/10 of the tuples
SELECT count(*) AS random INTO RANDOM_TBL SELECT count(*) AS random INTO RANDOM_TBL
FROM onek WHERE random() < 1.0/10; FROM onek WHERE random() < 1.0/10;
-- select again, the count should be different -- select again, the count should be different
INSERT INTO RANDOM_TBL (random) INSERT INTO RANDOM_TBL (random)
SELECT count(*) SELECT count(*)
FROM onek WHERE random() < 1.0/10; FROM onek WHERE random() < 1.0/10;
-- now test the results for randomness in the correct range -- select again, the count should be different
INSERT INTO RANDOM_TBL (random)
SELECT count(*)
FROM onek WHERE random() < 1.0/10;
-- select again, the count should be different
INSERT INTO RANDOM_TBL (random)
SELECT count(*)
FROM onek WHERE random() < 1.0/10;
-- now test that they are different counts
SELECT random, count(random) FROM RANDOM_TBL SELECT random, count(random) FROM RANDOM_TBL
GROUP BY random HAVING count(random) > 1; GROUP BY random HAVING count(random) > 3;
random | count random | count
--------+------- --------+-------
(0 rows) (0 rows)
SELECT random FROM RANDOM_TBL SELECT AVG(random) FROM RANDOM_TBL
WHERE random NOT BETWEEN 80 AND 120; HAVING AVG(random) NOT BETWEEN 80 AND 120;
random avg
-------- -----
(0 rows) (0 rows)

View File

@ -3,14 +3,20 @@
-- Test the random function -- Test the random function
-- --
-- count the number of tuples originally -- count the number of tuples originally, should be 1000
SELECT count(*) FROM onek; SELECT count(*) FROM onek;
-- select roughly 1/10 of the tuples -- pick three random rows, they shouldn't match
-- Assume that the "onek" table has 1000 tuples (SELECT unique1 AS random
-- and try to bracket the correct number so we FROM onek ORDER BY random() LIMIT 1)
-- have a regression test which can pass/fail INTERSECT
-- - thomas 1998-08-17 (SELECT unique1 AS random
FROM onek ORDER BY random() LIMIT 1)
INTERSECT
(SELECT unique1 AS random
FROM onek ORDER BY random() LIMIT 1);
-- count roughly 1/10 of the tuples
SELECT count(*) AS random INTO RANDOM_TBL SELECT count(*) AS random INTO RANDOM_TBL
FROM onek WHERE random() < 1.0/10; FROM onek WHERE random() < 1.0/10;
@ -19,10 +25,20 @@ INSERT INTO RANDOM_TBL (random)
SELECT count(*) SELECT count(*)
FROM onek WHERE random() < 1.0/10; FROM onek WHERE random() < 1.0/10;
-- now test the results for randomness in the correct range -- select again, the count should be different
INSERT INTO RANDOM_TBL (random)
SELECT count(*)
FROM onek WHERE random() < 1.0/10;
-- select again, the count should be different
INSERT INTO RANDOM_TBL (random)
SELECT count(*)
FROM onek WHERE random() < 1.0/10;
-- now test that they are different counts
SELECT random, count(random) FROM RANDOM_TBL SELECT random, count(random) FROM RANDOM_TBL
GROUP BY random HAVING count(random) > 1; GROUP BY random HAVING count(random) > 3;
SELECT random FROM RANDOM_TBL SELECT AVG(random) FROM RANDOM_TBL
WHERE random NOT BETWEEN 80 AND 120; HAVING AVG(random) NOT BETWEEN 80 AND 120;