On Thu, Jan 06, 2005 at 02:05:17PM -0500, Tom Lane wrote:
> Marko Kreen <[email protected]> writes:
> > I have not looked at pg_regress much and had not noticed the
> > 'unconditional alternative' feature. I only thought of the
> > resultmap alternative. Unconditionally adding FastFPE results
> > may even be good, so that FastFPE can pass on any platform.
>
> No, it would be bad, because on most other platforms this behavior
> is probably a bug, and altering the tests like that would mask the bug.
>
> The unconditional-acceptance thing has to be used with great caution;
> preferably only for issues that we expect on many platforms (such as
> locale dependencies).
How about the following then: let pg_regress.sh accept multiple
choices from resultmap.
--
marko
Index: src/test/regress/pg_regress.sh
===================================================================
RCS file: /projects/cvsroot/pgsql/src/test/regress/pg_regress.sh,v
retrieving revision 1.51
diff -u -c -r1.51 pg_regress.sh
*** src/test/regress/pg_regress.sh 12 Dec 2004 15:34:15 -0000 1.51
--- src/test/regress/pg_regress.sh 6 Jan 2005 19:30:52 -0000
***************
*** 669,681 ****
# to a system-specific expected file.
# There shouldn't be multiple matches, but take the last if there are.
! EXPECTED="$inputdir/expected/${name}"
for LINE in $SUBSTLIST
do
if [ `expr "$LINE" : "$name="` -ne 0 ]
then
! SUBST=`echo "$LINE" | sed 's/^.*=//'`
! EXPECTED="$inputdir/expected/${SUBST}"
fi
done
--- 669,680 ----
# to a system-specific expected file.
# There shouldn't be multiple matches, but take the last if there are.
! SUBST_VALS="${name}"
for LINE in $SUBSTLIST
do
if [ `expr "$LINE" : "$name="` -ne 0 ]
then
! SUBST_VALS=`echo "$LINE" | sed -e 's/^.*=//' -e 's/,/ /g'`
fi
done
***************
*** 684,701 ****
bestfile=
bestdiff=
! result=2
! for thisfile in $EXPECTED.out ${EXPECTED}_[0-9].out; do
! [ ! -r "$thisfile" ] && continue
! diff $DIFFFLAGS $thisfile $outputdir/results/${name}.out
>/dev/null 2>&1
! result=$?
case $result in
0) break;;
- 1) thisdiff=`diff $DIFFFLAGS $thisfile
$outputdir/results/${name}.out | wc -l`
- if [ -z "$bestdiff" ] || [ "$thisdiff" -lt "$bestdiff" ];
then
- bestdiff=$thisdiff; bestfile=$thisfile
- fi
- continue;;
2) break;;
esac
done
--- 683,707 ----
bestfile=
bestdiff=
! for SUBST in $SUBST_VALS; do
! EXPECTED="$inputdir/expected/${SUBST}"
! result=2
! for thisfile in $EXPECTED.out ${EXPECTED}_[0-9].out; do
! [ ! -r "$thisfile" ] && continue
! diff $DIFFFLAGS $thisfile $outputdir/results/${name}.out
>/dev/null 2>&1
! result=$?
! case $result in
! 0) break;;
! 1) thisdiff=`diff $DIFFFLAGS $thisfile
$outputdir/results/${name}.out | wc -l`
! if [ -z "$bestdiff" ] || [ "$thisdiff" -lt "$bestdiff"
]; then
! bestdiff=$thisdiff; bestfile=$thisfile
! fi
! continue;;
! 2) break;;
! esac
! done
case $result in
0) break;;
2) break;;
esac
done
Index: src/test/regress/resultmap
===================================================================
RCS file: /projects/cvsroot/pgsql/src/test/regress/resultmap,v
retrieving revision 1.79
diff -u -c -r1.79 resultmap
*** src/test/regress/resultmap 23 Dec 2004 03:49:40 -0000 1.79
--- src/test/regress/resultmap 6 Jan 2005 19:30:52 -0000
***************
*** 9,11 ****
--- 9,12 ----
float8/i.86-pc-cygwin=float8-small-is-zero
int8/.*-qnx=int8-exp-three-digits
int8/i.86-pc-mingw32=int8-exp-three-digits
+ point/arm.*-linux-gnu=point,point-fastfpe
*** /dev/null 2005-01-04 07:18:19.000000000 +0200
--- src/test/regress/expected/point-fastfpe.out 2005-01-06 19:58:45.000000000
+0200
***************
*** 0 ****
--- 1,225 ----
+ --
+ -- POINT
+ --
+ CREATE TABLE POINT_TBL(f1 point);
+ INSERT INTO POINT_TBL(f1) VALUES ('(0.0,0.0)');
+ INSERT INTO POINT_TBL(f1) VALUES ('(-10.0,0.0)');
+ INSERT INTO POINT_TBL(f1) VALUES ('(-3.0,4.0)');
+ INSERT INTO POINT_TBL(f1) VALUES ('(5.1, 34.5)');
+ INSERT INTO POINT_TBL(f1) VALUES ('(-5.0,-12.0)');
+ -- bad format points
+ INSERT INTO POINT_TBL(f1) VALUES ('asdfasdf');
+ ERROR: invalid input syntax for type point: "asdfasdf"
+ INSERT INTO POINT_TBL(f1) VALUES ('10.0,10.0');
+ INSERT INTO POINT_TBL(f1) VALUES ('(10.0 10.0)');
+ ERROR: invalid input syntax for type point: "(10.0 10.0)"
+ INSERT INTO POINT_TBL(f1) VALUES ('(10.0,10.0');
+ ERROR: invalid input syntax for type point: "(10.0,10.0"
+ SELECT '' AS six, POINT_TBL.*;
+ six | f1
+ -----+------------
+ | (0,0)
+ | (-10,0)
+ | (-3,4)
+ | (5.1,34.5)
+ | (-5,-12)
+ | (10,10)
+ (6 rows)
+
+ -- left of
+ SELECT '' AS three, p.* FROM POINT_TBL p WHERE p.f1 << '(0.0, 0.0)';
+ three | f1
+ -------+----------
+ | (-10,0)
+ | (-3,4)
+ | (-5,-12)
+ (3 rows)
+
+ -- right of
+ SELECT '' AS three, p.* FROM POINT_TBL p WHERE '(0.0,0.0)' >> p.f1;
+ three | f1
+ -------+----------
+ | (-10,0)
+ | (-3,4)
+ | (-5,-12)
+ (3 rows)
+
+ -- above
+ SELECT '' AS one, p.* FROM POINT_TBL p WHERE '(0.0,0.0)' >^ p.f1;
+ one | f1
+ -----+----------
+ | (-5,-12)
+ (1 row)
+
+ -- below
+ SELECT '' AS one, p.* FROM POINT_TBL p WHERE p.f1 <^ '(0.0, 0.0)';
+ one | f1
+ -----+----------
+ | (-5,-12)
+ (1 row)
+
+ -- equal
+ SELECT '' AS one, p.* FROM POINT_TBL p WHERE p.f1 ~= '(5.1, 34.5)';
+ one | f1
+ -----+------------
+ | (5.1,34.5)
+ (1 row)
+
+ -- point in box
+ SELECT '' AS three, p.* FROM POINT_TBL p
+ WHERE p.f1 @ box '(0,0,100,100)';
+ three | f1
+ -------+------------
+ | (0,0)
+ | (5.1,34.5)
+ | (10,10)
+ (3 rows)
+
+ SELECT '' AS three, p.* FROM POINT_TBL p
+ WHERE not p.f1 @ box '(0,0,100,100)';
+ three | f1
+ -------+----------
+ | (-10,0)
+ | (-3,4)
+ | (-5,-12)
+ (3 rows)
+
+ SELECT '' AS two, p.* FROM POINT_TBL p
+ WHERE p.f1 @ path '[(0,0),(-10,0),(-10,10)]';
+ two | f1
+ -----+---------
+ | (0,0)
+ | (-10,0)
+ (2 rows)
+
+ SELECT '' AS six, p.f1, p.f1 <-> point '(0,0)' AS dist
+ FROM POINT_TBL p
+ ORDER BY dist;
+ six | f1 | dist
+ -----+------------+------------------
+ | (0,0) | 0
+ | (-3,4) | 5
+ | (-10,0) | 10
+ | (-5,-12) | 13
+ | (10,10) | 14.1421356237309
+ | (5.1,34.5) | 34.8749193547455
+ (6 rows)
+
+ SET geqo TO 'off';
+ SELECT '' AS thirtysix, p1.f1 AS point1, p2.f1 AS point2, p1.f1 <-> p2.f1 AS
dist
+ FROM POINT_TBL p1, POINT_TBL p2
+ ORDER BY dist, point1 using <<, point2 using <<;
+ thirtysix | point1 | point2 | dist
+ -----------+------------+------------+------------------
+ | (-10,0) | (-10,0) | 0
+ | (-5,-12) | (-5,-12) | 0
+ | (-3,4) | (-3,4) | 0
+ | (0,0) | (0,0) | 0
+ | (5.1,34.5) | (5.1,34.5) | 0
+ | (10,10) | (10,10) | 0
+ | (-3,4) | (0,0) | 5
+ | (0,0) | (-3,4) | 5
+ | (-10,0) | (-3,4) | 8.06225774829855
+ | (-3,4) | (-10,0) | 8.06225774829855
+ | (-10,0) | (0,0) | 10
+ | (0,0) | (-10,0) | 10
+ | (-10,0) | (-5,-12) | 13
+ | (-5,-12) | (-10,0) | 13
+ | (-5,-12) | (0,0) | 13
+ | (0,0) | (-5,-12) | 13
+ | (0,0) | (10,10) | 14.1421356237309
+ | (10,10) | (0,0) | 14.1421356237309
+ | (-3,4) | (10,10) | 14.3178210632764
+ | (10,10) | (-3,4) | 14.3178210632764
+ | (-5,-12) | (-3,4) | 16.1245154965971
+ | (-3,4) | (-5,-12) | 16.1245154965971
+ | (-10,0) | (10,10) | 22.3606797749979
+ | (10,10) | (-10,0) | 22.3606797749979
+ | (5.1,34.5) | (10,10) | 24.9851956166046
+ | (10,10) | (5.1,34.5) | 24.9851956166046
+ | (-5,-12) | (10,10) | 26.6270539113887
+ | (10,10) | (-5,-12) | 26.6270539113887
+ | (-3,4) | (5.1,34.5) | 31.5572495632937
+ | (5.1,34.5) | (-3,4) | 31.5572495632937
+ | (0,0) | (5.1,34.5) | 34.8749193547455
+ | (5.1,34.5) | (0,0) | 34.8749193547455
+ | (-10,0) | (5.1,34.5) | 37.6597928831267
+ | (5.1,34.5) | (-10,0) | 37.6597928831267
+ | (-5,-12) | (5.1,34.5) | 47.5842410888311
+ | (5.1,34.5) | (-5,-12) | 47.5842410888311
+ (36 rows)
+
+ SELECT '' AS thirty, p1.f1 AS point1, p2.f1 AS point2
+ FROM POINT_TBL p1, POINT_TBL p2
+ WHERE (p1.f1 <-> p2.f1) > 3;
+ thirty | point1 | point2
+ --------+------------+------------
+ | (0,0) | (-10,0)
+ | (0,0) | (-3,4)
+ | (0,0) | (5.1,34.5)
+ | (0,0) | (-5,-12)
+ | (0,0) | (10,10)
+ | (-10,0) | (0,0)
+ | (-10,0) | (-3,4)
+ | (-10,0) | (5.1,34.5)
+ | (-10,0) | (-5,-12)
+ | (-10,0) | (10,10)
+ | (-3,4) | (0,0)
+ | (-3,4) | (-10,0)
+ | (-3,4) | (5.1,34.5)
+ | (-3,4) | (-5,-12)
+ | (-3,4) | (10,10)
+ | (5.1,34.5) | (0,0)
+ | (5.1,34.5) | (-10,0)
+ | (5.1,34.5) | (-3,4)
+ | (5.1,34.5) | (-5,-12)
+ | (5.1,34.5) | (10,10)
+ | (-5,-12) | (0,0)
+ | (-5,-12) | (-10,0)
+ | (-5,-12) | (-3,4)
+ | (-5,-12) | (5.1,34.5)
+ | (-5,-12) | (10,10)
+ | (10,10) | (0,0)
+ | (10,10) | (-10,0)
+ | (10,10) | (-3,4)
+ | (10,10) | (5.1,34.5)
+ | (10,10) | (-5,-12)
+ (30 rows)
+
+ -- put distance result into output to allow sorting with GEQ optimizer - tgl
97/05/10
+ SELECT '' AS fifteen, p1.f1 AS point1, p2.f1 AS point2, (p1.f1 <-> p2.f1) AS
distance
+ FROM POINT_TBL p1, POINT_TBL p2
+ WHERE (p1.f1 <-> p2.f1) > 3 and p1.f1 << p2.f1
+ ORDER BY distance, point1 using <<, point2 using <<;
+ fifteen | point1 | point2 | distance
+ ---------+------------+------------+------------------
+ | (-3,4) | (0,0) | 5
+ | (-10,0) | (-3,4) | 8.06225774829855
+ | (-10,0) | (0,0) | 10
+ | (-10,0) | (-5,-12) | 13
+ | (-5,-12) | (0,0) | 13
+ | (0,0) | (10,10) | 14.1421356237309
+ | (-3,4) | (10,10) | 14.3178210632764
+ | (-5,-12) | (-3,4) | 16.1245154965971
+ | (-10,0) | (10,10) | 22.3606797749979
+ | (5.1,34.5) | (10,10) | 24.9851956166046
+ | (-5,-12) | (10,10) | 26.6270539113887
+ | (-3,4) | (5.1,34.5) | 31.5572495632937
+ | (0,0) | (5.1,34.5) | 34.8749193547455
+ | (-10,0) | (5.1,34.5) | 37.6597928831267
+ | (-5,-12) | (5.1,34.5) | 47.5842410888311
+ (15 rows)
+
+ -- put distance result into output to allow sorting with GEQ optimizer - tgl
97/05/10
+ SELECT '' AS three, p1.f1 AS point1, p2.f1 AS point2, (p1.f1 <-> p2.f1) AS
distance
+ FROM POINT_TBL p1, POINT_TBL p2
+ WHERE (p1.f1 <-> p2.f1) > 3 and p1.f1 << p2.f1 and p1.f1 >^ p2.f1
+ ORDER BY distance;
+ three | point1 | point2 | distance
+ -------+------------+----------+------------------
+ | (-3,4) | (0,0) | 5
+ | (-10,0) | (-5,-12) | 13
+ | (5.1,34.5) | (10,10) | 24.9851956166046
+ (3 rows)
+
+ RESET geqo;
---------------------------(end of broadcast)---------------------------
TIP 7: don't forget to increase your free space map settings