Re: [HACKERS] union regression test - Mailing list pgsql-hackers
From | Bruce Momjian |
---|---|
Subject | Re: [HACKERS] union regression test |
Date | |
Msg-id | 199809221650.MAA17961@candle.pha.pa.us Whole thread Raw |
In response to | Re: [HACKERS] union regression test (Brook Milligan <brook@trillium.NMSU.Edu>) |
List | pgsql-hackers |
Applied. > Here are some patches to fix up the regression tests so that the union > test passes. Interestingly, the fix involves no changes or special > cases in the union test and actually removes a special case for the > numerology test. Thus, following the strategy outlined below is a > definite improvement over the previous situation. > > > 1. Modify the float8 test so that the table contains exactly the same > > values on all platforms. In this case, this would mean removing > > the "extra" rows that creep in on NetBSD because of the different > > handling of small (in absolute value) numbers. Following this > > strategy generally (i.e., in other similar cases) would mean that > > all tables could be used at will by "derived" tests without > > propagating special cases beyond the direct tests where boundary > > cases are critical to include. > > Absolutely. That was my intent. The internal tests should be as > rigorous as possible. The last thing done would be to leave the table > in a state that is absolutely identical across all platforms. Yes, > deleting everything and reinserting the well-behaved values seems like > the easiest thing to do. > > Perhaps future regression testers can try to follow the points alluded > to above and outlined specifically below: > > 1. Make the tests internal to each test/regress/sql/*.sql file as > rigorous as possible so that all relevant features are exercised. > > 2. Place any tests that lead to platform specific results as late as > possible within each *.sql file so that later tests within the > same file will not repeat failures of earlier tests but will > instead document legitimate differences. > > 3. Ensure that the contents of all tables constructed or modified by > a single *.sql file are identical upon completion across all > platforms. This will ensure that derived tests will not propagate > errors/differences of earlier tests. > > These ideas are encapsulated in the patches below for the float8 tests > that resulted in platform-specific differences that then propagated to > both the numerology and union tests. Also, even within the float8 > tests were a bunch of platform-specific differences that really only > propagated a single difference; now that difference is tested at the > end so that almost all results are identical across platforms. > > NOTE: test/regress/expected/numerology-NetBSD.out should be removed. > > NOTE: I can't test anything except NetBSD. I tried to make the > "default" float8.out correspond to what I expect other systems will > generate, but would appreciate it if someone else would check it over. > > NOTE: with these patches to the most recent snapshot every regression > test passes for NetBSD 1.3.2/i386. > > Cheers, > Brook > > =========================================================================== > --- test/regress/sql/float8.sql.orig Sun May 11 09:41:51 1997 > +++ test/regress/sql/float8.sql Mon Sep 21 12:14:12 1998 > @@ -12,15 +12,6 @@ > > INSERT INTO FLOAT8_TBL(f1) VALUES ('1.2345678901234e-200'); > > --- test for over and under flow > -INSERT INTO FLOAT8_TBL(f1) VALUES ('10e400'); > - > -INSERT INTO FLOAT8_TBL(f1) VALUES ('-10e400'); > - > -INSERT INTO FLOAT8_TBL(f1) VALUES ('10e-400'); > - > -INSERT INTO FLOAT8_TBL(f1) VALUES ('-10e-400'); > - > > SELECT '' AS five, FLOAT8_TBL.*; > > @@ -98,6 +89,32 @@ > SELECT '' AS bad, : (f.f1) from FLOAT8_TBL f; > > SELECT '' AS bad, f.f1 / '0.0' from FLOAT8_TBL f; > + > +SELECT '' AS five, FLOAT8_TBL.*; > + > +-- test for over and under flow > +INSERT INTO FLOAT8_TBL(f1) VALUES ('10e400'); > + > +INSERT INTO FLOAT8_TBL(f1) VALUES ('-10e400'); > + > +INSERT INTO FLOAT8_TBL(f1) VALUES ('10e-400'); > + > +INSERT INTO FLOAT8_TBL(f1) VALUES ('-10e-400'); > + > +-- maintain external table consistency across platforms > +-- delete all values and reinsert well-behaved ones > + > +DELETE FROM FLOAT8_TBL; > + > +INSERT INTO FLOAT8_TBL(f1) VALUES ('0.0'); > + > +INSERT INTO FLOAT8_TBL(f1) VALUES ('-34.84'); > + > +INSERT INTO FLOAT8_TBL(f1) VALUES ('-1004.30'); > + > +INSERT INTO FLOAT8_TBL(f1) VALUES ('-1.2345678901234e+200'); > + > +INSERT INTO FLOAT8_TBL(f1) VALUES ('-1.2345678901234e-200'); > > SELECT '' AS five, FLOAT8_TBL.*; > > =========================================================================== > --- test/regress/expected/float8.out.orig Sun Jan 4 20:35:30 1998 > +++ test/regress/expected/float8.out Mon Sep 21 12:07:51 1998 > @@ -4,14 +4,6 @@ > QUERY: INSERT INTO FLOAT8_TBL(f1) VALUES ('-34.84'); > QUERY: INSERT INTO FLOAT8_TBL(f1) VALUES ('1.2345678901234e+200'); > QUERY: INSERT INTO FLOAT8_TBL(f1) VALUES ('1.2345678901234e-200'); > -QUERY: INSERT INTO FLOAT8_TBL(f1) VALUES ('10e400'); > -ERROR: Bad float8 input format '10e400' > -QUERY: INSERT INTO FLOAT8_TBL(f1) VALUES ('-10e400'); > -ERROR: Bad float8 input format '-10e400' > -QUERY: INSERT INTO FLOAT8_TBL(f1) VALUES ('10e-400'); > -ERROR: Bad float8 input format '10e-400' > -QUERY: INSERT INTO FLOAT8_TBL(f1) VALUES ('-10e-400'); > -ERROR: Bad float8 input format '-10e-400' > QUERY: SELECT '' AS five, FLOAT8_TBL.*; > five|f1 > ----+-------------------- > @@ -222,5 +214,29 @@ > |-1004.3 > |-1.2345678901234e+200 > |-1.2345678901234e-200 > +(5 rows) > + > +QUERY: INSERT INTO FLOAT8_TBL(f1) VALUES ('10e400'); > +ERROR: Bad float8 input format '10e400' > +QUERY: INSERT INTO FLOAT8_TBL(f1) VALUES ('-10e400'); > +ERROR: Bad float8 input format '-10e400' > +QUERY: INSERT INTO FLOAT8_TBL(f1) VALUES ('10e-400'); > +ERROR: Bad float8 input format '10e-400' > +QUERY: INSERT INTO FLOAT8_TBL(f1) VALUES ('-10e-400'); > +ERROR: Bad float8 input format '-10e-400' > +QUERY: DELETE FROM FLOAT8_TBL; > +QUERY: INSERT INTO FLOAT8_TBL(f1) VALUES ('0.0'); > +QUERY: INSERT INTO FLOAT8_TBL(f1) VALUES ('-34.84'); > +QUERY: INSERT INTO FLOAT8_TBL(f1) VALUES ('-1004.30'); > +QUERY: INSERT INTO FLOAT8_TBL(f1) VALUES ('-1.2345678901234e+200'); > +QUERY: INSERT INTO FLOAT8_TBL(f1) VALUES ('-1.2345678901234e-200'); > +QUERY: SELECT '' AS five, FLOAT8_TBL.*; > +five|f1 > +----+--------------------- > + |0 > + |-34.84 > + |-1004.3 > + |-1.2345678901234e+200 > + |-1.2345678901234e-200 > (5 rows) > > =========================================================================== > --- test/regress/expected/float8-NetBSD.out.orig Sun Mar 22 12:46:31 1998 > +++ test/regress/expected/float8-NetBSD.out Mon Sep 21 11:47:24 1998 > @@ -4,12 +4,6 @@ > QUERY: INSERT INTO FLOAT8_TBL(f1) VALUES ('-34.84'); > QUERY: INSERT INTO FLOAT8_TBL(f1) VALUES ('1.2345678901234e+200'); > QUERY: INSERT INTO FLOAT8_TBL(f1) VALUES ('1.2345678901234e-200'); > -QUERY: INSERT INTO FLOAT8_TBL(f1) VALUES ('10e400'); > -ERROR: Bad float8 input format '10e400' > -QUERY: INSERT INTO FLOAT8_TBL(f1) VALUES ('-10e400'); > -ERROR: Bad float8 input format '-10e400' > -QUERY: INSERT INTO FLOAT8_TBL(f1) VALUES ('10e-400'); > -QUERY: INSERT INTO FLOAT8_TBL(f1) VALUES ('-10e-400'); > QUERY: SELECT '' AS five, FLOAT8_TBL.*; > five|f1 > ----+-------------------- > @@ -18,9 +12,7 @@ > |-34.84 > |1.2345678901234e+200 > |1.2345678901234e-200 > - |0 > - |0 > -(7 rows) > +(5 rows) > > QUERY: SELECT '' AS four, f.* FROM FLOAT8_TBL f WHERE f.f1 <> '1004.3'; > four|f1 > @@ -29,9 +21,7 @@ > |-34.84 > |1.2345678901234e+200 > |1.2345678901234e-200 > - |0 > - |0 > -(6 rows) > +(4 rows) > > QUERY: SELECT '' AS one, f.* FROM FLOAT8_TBL f WHERE f.f1 = '1004.3'; > one| f1 > @@ -45,9 +35,7 @@ > | 0 > | -34.84 > |1.2345678901234e-200 > - | 0 > - | 0 > -(5 rows) > +(3 rows) > > QUERY: SELECT '' AS three, f.* FROM FLOAT8_TBL f WHERE f.f1 < '1004.3'; > three| f1 > @@ -55,9 +43,7 @@ > | 0 > | -34.84 > |1.2345678901234e-200 > - | 0 > - | 0 > -(5 rows) > +(3 rows) > > QUERY: SELECT '' AS four, f.* FROM FLOAT8_TBL f WHERE '1004.3' >= f.f1; > four| f1 > @@ -66,9 +52,7 @@ > | 1004.3 > | -34.84 > |1.2345678901234e-200 > - | 0 > - | 0 > -(6 rows) > +(4 rows) > > QUERY: SELECT '' AS four, f.* FROM FLOAT8_TBL f WHERE f.f1 <= '1004.3'; > four| f1 > @@ -77,9 +61,7 @@ > | 1004.3 > | -34.84 > |1.2345678901234e-200 > - | 0 > - | 0 > -(6 rows) > +(4 rows) > > QUERY: SELECT '' AS three, f.f1, f.f1 * '-10' AS x > FROM FLOAT8_TBL f > @@ -137,9 +119,7 @@ > |-34.84 |34.84 > |1.2345678901234e+200|1.2345678901234e+200 > |1.2345678901234e-200|1.2345678901234e-200 > - |0 |0 > - |0 |0 > -(7 rows) > +(5 rows) > > QUERY: SELECT '' AS five, f.f1, %f.f1 AS trunc_f1 > FROM FLOAT8_TBL f; > @@ -150,9 +130,7 @@ > |-34.84 |-34 > |1.2345678901234e+200|1.2345678901234e+200 > |1.2345678901234e-200|0 > - |0 |0 > - |0 |0 > -(7 rows) > +(5 rows) > > QUERY: SELECT '' AS five, f.f1, f.f1 % AS round_f1 > FROM FLOAT8_TBL f; > @@ -163,9 +141,7 @@ > |-34.84 |-35 > |1.2345678901234e+200|1.2345678901234e+200 > |1.2345678901234e-200|0 > - |0 |0 > - |0 |0 > -(7 rows) > +(5 rows) > > QUERY: SELECT '' AS three, f.f1, |/f.f1 AS sqrt_f1 > FROM FLOAT8_TBL f > @@ -195,9 +171,7 @@ > |-34.84 |-3.26607421344208 > |1.2345678901234e+200|4.97933859234765e+66 > |1.2345678901234e-200|2.3112042409018e-67 > - |0 |0 > - |0 |0 > -(7 rows) > +(5 rows) > > QUERY: SELECT '' AS five, FLOAT8_TBL.*; > five|f1 > @@ -207,9 +181,7 @@ > |-34.84 > |1.2345678901234e+200 > |1.2345678901234e-200 > - |0 > - |0 > -(7 rows) > +(5 rows) > > QUERY: UPDATE FLOAT8_TBL > SET f1 = FLOAT8_TBL.f1 * '-1' > @@ -231,10 +203,30 @@ > ----+--------------------- > |0 > |-34.84 > - |0 > - |0 > |-1004.3 > |-1.2345678901234e+200 > |-1.2345678901234e-200 > -(7 rows) > +(5 rows) > + > +QUERY: INSERT INTO FLOAT8_TBL(f1) VALUES ('10e400'); > +ERROR: Bad float8 input format '10e400' > +QUERY: INSERT INTO FLOAT8_TBL(f1) VALUES ('-10e400'); > +ERROR: Bad float8 input format '-10e400' > +QUERY: INSERT INTO FLOAT8_TBL(f1) VALUES ('10e-400'); > +QUERY: INSERT INTO FLOAT8_TBL(f1) VALUES ('-10e-400'); > +QUERY: DELETE FROM FLOAT8_TBL; > +QUERY: INSERT INTO FLOAT8_TBL(f1) VALUES ('0.0'); > +QUERY: INSERT INTO FLOAT8_TBL(f1) VALUES ('-34.84'); > +QUERY: INSERT INTO FLOAT8_TBL(f1) VALUES ('-1004.30'); > +QUERY: INSERT INTO FLOAT8_TBL(f1) VALUES ('-1.2345678901234e+200'); > +QUERY: INSERT INTO FLOAT8_TBL(f1) VALUES ('-1.2345678901234e-200'); > +QUERY: SELECT '' AS five, FLOAT8_TBL.*; > +five|f1 > +----+--------------------- > + |0 > + |-34.84 > + |-1004.3 > + |-1.2345678901234e+200 > + |-1.2345678901234e-200 > +(5 rows) > > =========================================================================== > --- test/regress/expected/numerology-NetBSD.out.orig Sun Mar 22 12:46:37 1998 > +++ test/regress/expected/numerology-NetBSD.out Mon Sep 21 12:49:07 1998 > @@ -1,122 +0,0 @@ > -QUERY: CREATE TABLE TEMP_FLOAT (f1 FLOAT8); > -QUERY: INSERT INTO TEMP_FLOAT (f1) > - SELECT float8(f1) FROM INT4_TBL; > -QUERY: INSERT INTO TEMP_FLOAT (f1) > - SELECT float8(f1) FROM INT2_TBL; > -QUERY: SELECT '' AS ten, f1 FROM TEMP_FLOAT > - ORDER BY f1; > -ten| f1 > ----+----------- > - |-2147483647 > - | -123456 > - | -32767 > - | -1234 > - | 0 > - | 0 > - | 1234 > - | 32767 > - | 123456 > - | 2147483647 > -(10 rows) > - > -QUERY: CREATE TABLE TEMP_INT4 (f1 INT4); > -QUERY: INSERT INTO TEMP_INT4 (f1) > - SELECT int4(f1) FROM FLOAT8_TBL > - WHERE (f1 > -2147483647) AND (f1 < 2147483647); > -QUERY: INSERT INTO TEMP_INT4 (f1) > - SELECT int4(f1) FROM INT2_TBL; > -QUERY: SELECT '' AS nine, f1 FROM TEMP_INT4 > - ORDER BY f1; > -nine| f1 > -----+------ > - |-32767 > - | -1234 > - | -1004 > - | -35 > - | 0 > - | 0 > - | 0 > - | 0 > - | 0 > - | 1234 > - | 32767 > -(11 rows) > - > -QUERY: CREATE TABLE TEMP_INT2 (f1 INT2); > -QUERY: INSERT INTO TEMP_INT2 (f1) > - SELECT int2(f1) FROM FLOAT8_TBL > - WHERE (f1 >= -32767) AND (f1 <= 32767); > -QUERY: INSERT INTO TEMP_INT2 (f1) > - SELECT int2(f1) FROM INT4_TBL > - WHERE (f1 >= -32767) AND (f1 <= 32767); > -QUERY: SELECT '' AS five, f1 FROM TEMP_INT2 > - ORDER BY f1; > -five| f1 > -----+----- > - |-1004 > - | -35 > - | 0 > - | 0 > - | 0 > - | 0 > - | 0 > -(7 rows) > - > -QUERY: CREATE TABLE TEMP_GROUP (f1 INT4, f2 INT4, f3 FLOAT8); > -QUERY: INSERT INTO TEMP_GROUP > - SELECT 1, (- i.f1), (- f.f1) > - FROM INT4_TBL i, FLOAT8_TBL f; > -QUERY: INSERT INTO TEMP_GROUP > - SELECT 2, i.f1, f.f1 > - FROM INT4_TBL i, FLOAT8_TBL f; > -QUERY: SELECT DISTINCT f1 AS two FROM TEMP_GROUP; > -two > ---- > - 1 > - 2 > -(2 rows) > - > -QUERY: SELECT f1 AS two, max(f3) AS max_float, min(f3) as min_float > - FROM TEMP_GROUP > - GROUP BY two > - ORDER BY two, max_float, min_float; > -two|max_float |min_float > ----+--------------------+--------------------- > - 1|1.2345678901234e+200|0 > - 2|0 |-1.2345678901234e+200 > -(2 rows) > - > -QUERY: SELECT f1 AS two, max(f3) AS max_float, min(f3) AS min_float > - FROM TEMP_GROUP > - GROUP BY two > - ORDER BY two, max_float, min_float; > -two|max_float |min_float > ----+--------------------+--------------------- > - 1|1.2345678901234e+200|0 > - 2|0 |-1.2345678901234e+200 > -(2 rows) > - > -QUERY: SELECT f1 AS two, (max(f3) + 1) AS max_plus_1, (min(f3) - 1) AS min_minus_1 > - FROM TEMP_GROUP > - GROUP BY two > - ORDER BY two, min_minus_1; > -two|max_plus_1 |min_minus_1 > ----+--------------------+--------------------- > - 1|1.2345678901234e+200|-1 > - 2|1 |-1.2345678901234e+200 > -(2 rows) > - > -QUERY: SELECT f1 AS two, (max(f3) + 1) AS max_plus_1, (min(f3) - 1) AS min_minus_1 > - FROM TEMP_GROUP > - GROUP BY two > - ORDER BY two, min_minus_1; > -two|max_plus_1 |min_minus_1 > ----+--------------------+--------------------- > - 1|1.2345678901234e+200|-1 > - 2|1 |-1.2345678901234e+200 > -(2 rows) > - > -QUERY: DROP TABLE TEMP_INT2; > -QUERY: DROP TABLE TEMP_INT4; > -QUERY: DROP TABLE TEMP_FLOAT; > -QUERY: DROP TABLE TEMP_GROUP; > > -- Bruce Momjian | 830 Blythe Avenue maillist@candle.pha.pa.us | Drexel Hill, Pennsylvania 19026 http://www.op.net/~candle | (610) 353-9879(w) + If your life is a hard drive, | (610) 853-3000(h) + Christ can be your backup. |
pgsql-hackers by date: