OSDN Git Service

Update platform-specific-expected-file support so that platforms can be
authorTom Lane <tgl@sss.pgh.pa.us>
Sun, 9 Jan 2000 20:54:36 +0000 (20:54 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Sun, 9 Jan 2000 20:54:36 +0000 (20:54 +0000)
specified by regular-expression patterns.  Add some more files.

doc/src/sgml/regress.sgml
src/test/regress/README
src/test/regress/expected/geometry-hppa1.1.out [new file with mode: 0644]
src/test/regress/expected/geometry-i86-gnulibc.out [new file with mode: 0644]
src/test/regress/expected/int2-not-representable.out [new file with mode: 0644]
src/test/regress/expected/int4-not-representable.out [new file with mode: 0644]
src/test/regress/regress.sh
src/test/regress/resultmap
src/test/regress/run_check.sh

index 380f428..ed211bf 100644 (file)
@@ -9,17 +9,15 @@ Regression test instructions and analysis.
 
 <Para>
   The PostgreSQL regression tests are a comprehensive set of tests for the
-  SQL implementation embedded in PostgreSQL developed by Jolly Chen and
-  Andrew Yu. It tests standard SQL operations as well as the extended
-  capabilities of PostgreSQL.
+  SQL implementation embedded in PostgreSQL.  They test standard SQL
+  operations as well as the extended capabilities of PostgreSQL.
 </Para>
 
 <Para>
-  These tests have recently been revised by Marc Fournier and Thomas Lockhart
-and are now packaged as
-  functional units which should make them easier to run and easier to interpret.
-From <ProductName>PostgreSQL</ProductName> v6.1 onward
- the regression tests are current for every official release. 
+  The regression tests were originally developed by Jolly Chen and Andrew Yu,
+  and were extensively revised/repackaged by Marc Fournier and Thomas Lockhart.
+  From <ProductName>PostgreSQL</ProductName> v6.1 onward
+  the regression tests are current for every official release. 
 </Para>
 
 <Para>
@@ -66,19 +64,18 @@ The runtime path is /usr/local/pgsql (other paths are possible).
 <Title>Regression Environment</Title>
 
 <Para>
-  The regression test is invoked by the <Command>make</Command> command which compiles
-  a <Acronym>C</Acronym> program into a shared library
-  in the current directory.  Localized shell scripts are also created in
-  the current directory. The output file templates are massaged into the
-  <FileName>./expected/*.out</FileName> files.  The localization replaces macros in the source
-  files with absolute pathnames and user names.
+  To prepare for regression testing, do <Command>make all</Command> in the regression test
+  directory.  This compiles a <Acronym>C</Acronym> program with PostgreSQL extension functions
+  into a shared library.  Localized SQL scripts and output-comparison
+  files are also created for the tests that need them.  The localization
+  replaces macros in the source files with absolute pathnames and user names.  
 </Para>
 
 <Para>
-  Normally, the regression test should be run as the pg_superuser since
+  Normally, the regression tests should be run as the postgres user since
   the 'src/test/regress' directory and sub-directories are owned by the
-  pg_superuser. If you run the regression test as another user the
-  'src/test/regress' directory tree should be writeable to that user.
+  postgres user. If you run the regression test as another user the
+  'src/test/regress' directory tree must be writeable to that user.
 </Para>
 
 <Para>
@@ -132,7 +129,7 @@ The runtime path is /usr/local/pgsql (other paths are possible).
   expected/ . .out files that represent what we *expect* the results to
               look like
 
-  results/ .. .out files that represent what the results *actually* look
+  results/ .. .out files that contain what the results *actually* look
               like. Also used as temporary storage for table copy testing.
       </ProgramListing>
     </Para>
@@ -297,25 +294,6 @@ The runtime path is /usr/local/pgsql (other paths are possible).
     </Sect2>
     
     <Sect2>
-      <Title>OID differences</Title>
-      
-      <Para>
-       There are several places where PostgreSQL OID (object identifiers) appear
-       in 'regress.out'. OID's are unique 32-bit integers which are generated
-       by the PostgreSQL backend whenever a table row is inserted or updated.
-       If you run the regression test on a non-virgin database or run it multiple
-       times, the OID's reported will have different values. 
-       
-       The following SQL statements in 'misc.out' have shown this behavior:
-       
-       QUERY: SELECT user_relns() AS user_relns ORDER BY user_relns;
-       
-       The 'a,523676' row is composed from an OID.
-      </Para>
-      
-    </Sect2>
-    
-    <Sect2>
       <Title>Date and time differences</Title>
       
       <Para>
@@ -431,5 +409,55 @@ The runtime path is /usr/local/pgsql (other paths are possible).
     </Sect2>
     
   </Sect1>
+
+  <Sect1>
+    <Title>Platform-specific comparison files</Title>
+
+     <Para>
+  Since some of the tests inherently produce platform-specific results,
+  we have provided a way to supply platform-specific result comparison
+  files.  Frequently, the same variation applies to multiple platforms;
+  rather than supplying a separate comparison file for every platform,
+  there is a mapping file that defines which comparison file to use.
+  So, to eliminate bogus test "failures" for a particular platform,
+  you must choose or make a variant result file, and then add a line
+  to the mapping file, which is "resultmap".
+     </Para>
+
+     <Para>
+  Each line in the mapping file is of the form
+       <ProgramListing>
+               testname/platformnamepattern=comparisonfilename
+       </ProgramListing>
+  The test name is just the name of the particular regression test module.
+  The platform name pattern is a pattern in the style of expr(1) (that is,
+  a regular expression with an implicit ^ anchor at the start).  It is matched
+  against the platform name as printed by config.guess.  The comparison
+  file name is the name of the substitute result comparison file.
+     </Para>
+
+     <Para>
+  For example: the int2 regress test includes a deliberate entry of a value
+  that is too large to fit in int2.  The specific error message that is
+  produced is platform-dependent; our reference platform emits
+       <ProgramListing>
+    ERROR:  pg_atoi: error reading "100000": Numerical result out of range
+       </ProgramListing>
+  but a fair number of other Unix platforms emit
+       <ProgramListing>
+    ERROR:  pg_atoi: error reading "100000": Result too large
+       </ProgramListing>
+  Therefore, we provide a variant comparison file, int2-too-large.out,
+  that includes this spelling of the error message.  To silence the
+  bogus "failure" message on HPPA platforms,  resultmap includes
+       <ProgramListing>
+               int2/hppa=int2-too-large
+       </ProgramListing>
+  which will trigger on any machine for which config.guess's output
+  begins with 'hppa'.  Other lines in resultmap select the variant
+  comparison file for other platforms where it's appropriate.
+     </Para>
+    
+  </Sect1>
   
 </Chapter>
index 4715255..86428c9 100644 (file)
@@ -3,10 +3,12 @@ Introduction
 
   The PostgreSQL regression tests are a comprehensive set of tests for the
   SQL implementation embedded in PostgreSQL.  They test standard SQL
-  operations as well as the extensibility capabilities of PostgreSQL.
+  operations as well as the extended capabilities of PostgreSQL.
 
   The regression tests were originally developed by Jolly Chen and Andrew Yu,
   and were extensively revised/repackaged by Marc Fournier and Thomas Lockhart.
+  From PostgreSQL v6.1 onward the regression tests are current for every
+  official release.
 
   Some properly installed and fully functional PostgreSQL installations
   can fail some of these regression tests due to artifacts of floating point
@@ -17,12 +19,17 @@ Introduction
 
 Preparation
 
-  To prepare for regression testing, do "make all".  This compiles
-  a 'C' program with PostgreSQL extension functions into a shared library
-  in the current directory.  Localized SQL scripts and output-comparison
+  To prepare for regression testing, do "make all" in the regression test
+  directory.  This compiles a 'C' program with PostgreSQL extension functions
+  into a shared library.  Localized SQL scripts and output-comparison
   files are also created for the tests that need them.  The localization
   replaces macros in the source files with absolute pathnames and user names.  
 
+  Normally, the regression tests should be run as the postgres user since
+  the 'src/test/regress' directory and sub-directories are owned by the
+  postgres user. If you run the regression test as another user the
+  'src/test/regress' directory tree must be writeable to that user.
+
   It was formerly necessary to run the postmaster with system time zone
   set to PST, but this is no longer required.  You can run the regression
   tests under your normal postmaster configuration.  The test script will
@@ -64,11 +71,6 @@ Running the regression test
   need an already-installed postmaster.  Instead, runcheck creates
   a temporary installation under the regress directory.
 
-  Normally, the regression tests should be run as the postgres user since
-  the 'src/test/regress' directory and sub-directories are owned by the
-  postgres user. If you run the regression test as another user the
-  'src/test/regress' directory tree must be writeable to that user.
-
 Comparing expected/actual output
 
   The results are in files in the ./results directory. These results
@@ -172,11 +174,12 @@ Platform-specific comparison files
   to the mapping file, which is "resultmap".
 
   Each line in the mapping file is of the form
-               testname/platformname=comparisonfilename
+               testname/platformnamepattern=comparisonfilename
   The test name is just the name of the particular regression test module.
-  The platform name is the platform name as printed by config.guess (in
-  the toplevel PostgreSQL src directory), or any prefix of it.  The
-  comparison file name is the name of the substitute result comparison file.
+  The platform name pattern is a pattern in the style of expr(1) (that is,
+  a regular expression with an implicit ^ anchor at the start).  It is matched
+  against the platform name as printed by config.guess.  The comparison
+  file name is the name of the substitute result comparison file.
 
   For example: the int2 regress test includes a deliberate entry of a value
   that is too large to fit in int2.  The specific error message that is
diff --git a/src/test/regress/expected/geometry-hppa1.1.out b/src/test/regress/expected/geometry-hppa1.1.out
new file mode 100644 (file)
index 0000000..c4ccbd6
--- /dev/null
@@ -0,0 +1,532 @@
+--
+-- GEOMETRY
+--
+--
+-- Points
+--
+SELECT '' AS four, center(f1) AS center
+   FROM BOX_TBL;
+ four | center  
+------+---------
+      | (1,1)
+      | (2,2)
+      | (2.5,3)
+      | (3,3)
+(4 rows)
+
+SELECT '' AS four, (@@ f1) AS center
+   FROM BOX_TBL;
+ four | center  
+------+---------
+      | (1,1)
+      | (2,2)
+      | (2.5,3)
+      | (3,3)
+(4 rows)
+
+SELECT '' AS six, point(f1) AS center
+   FROM CIRCLE_TBL;
+ six |  center   
+-----+-----------
+     | (0,0)
+     | (1,2)
+     | (1,3)
+     | (1,2)
+     | (100,200)
+     | (100,0)
+(6 rows)
+
+SELECT '' AS six, (@@ f1) AS center
+   FROM CIRCLE_TBL;
+ six |  center   
+-----+-----------
+     | (0,0)
+     | (1,2)
+     | (1,3)
+     | (1,2)
+     | (100,200)
+     | (100,0)
+(6 rows)
+
+SELECT '' AS two, (@@ f1) AS center
+   FROM POLYGON_TBL
+   WHERE (# f1) > 2;
+ two |               center                
+-----+-------------------------------------
+     | (1.33333333333333,1.33333333333333)
+     | (2.33333333333333,1.33333333333333)
+(2 rows)
+
+-- "is horizontal" function
+SELECT '' AS two, p1.f1
+   FROM POINT_TBL p1
+   WHERE ishorizontal(p1.f1, point '(0,0)');
+ two |   f1    
+-----+---------
+     | (0,0)
+     | (-10,0)
+(2 rows)
+
+-- "is horizontal" operator
+SELECT '' AS two, p1.f1
+   FROM POINT_TBL p1
+   WHERE p1.f1 ?- point '(0,0)';
+ two |   f1    
+-----+---------
+     | (0,0)
+     | (-10,0)
+(2 rows)
+
+-- "is vertical" function
+SELECT '' AS one, p1.f1
+   FROM POINT_TBL p1
+   WHERE isvertical(p1.f1, point '(5.1,34.5)');
+ one |     f1     
+-----+------------
+     | (5.1,34.5)
+(1 row)
+
+-- "is vertical" operator
+SELECT '' AS one, p1.f1
+   FROM POINT_TBL p1
+   WHERE p1.f1 ?| point '(5.1,34.5)';
+ one |     f1     
+-----+------------
+     | (5.1,34.5)
+(1 row)
+
+--
+-- Line segments
+--
+-- intersection
+SELECT '' AS count, p.f1, l.s, l.s # p.f1 AS intersection
+   FROM LSEG_TBL l, POINT_TBL p;
+ERROR:  Unable to identify an operator '#' for types 'lseg' and 'point'
+       You will have to retype this query using an explicit cast
+-- closest point
+SELECT '' AS thirty, p.f1, l.s, p.f1 ## l.s AS closest
+   FROM LSEG_TBL l, POINT_TBL p;
+ thirty |     f1     |               s               |                closest                
+--------+------------+-------------------------------+---------------------------------------
+        | (0,0)      | [(1,2),(3,4)]                 | (1,2)
+        | (-10,0)    | [(1,2),(3,4)]                 | (1,2)
+        | (-3,4)     | [(1,2),(3,4)]                 | (1,2)
+        | (5.1,34.5) | [(1,2),(3,4)]                 | (3,4)
+        | (-5,-12)   | [(1,2),(3,4)]                 | (1,2)
+        | (10,10)    | [(1,2),(3,4)]                 | (3,4)
+        | (0,0)      | [(0,0),(6,6)]                 | (0,0)
+        | (-10,0)    | [(0,0),(6,6)]                 | (0,0)
+        | (-3,4)     | [(0,0),(6,6)]                 | (0.5,0.5)
+        | (5.1,34.5) | [(0,0),(6,6)]                 | (6,6)
+        | (-5,-12)   | [(0,0),(6,6)]                 | (0,0)
+        | (10,10)    | [(0,0),(6,6)]                 | (6,6)
+        | (0,0)      | [(10,-10),(-3,-4)]            | (-2.04878048780488,-4.4390243902439)
+        | (-10,0)    | [(10,-10),(-3,-4)]            | (-3,-4)
+        | (-3,4)     | [(10,-10),(-3,-4)]            | (-3,-4)
+        | (5.1,34.5) | [(10,-10),(-3,-4)]            | (-3,-4)
+        | (-5,-12)   | [(10,-10),(-3,-4)]            | (-1.60487804878049,-4.64390243902439)
+        | (10,10)    | [(10,-10),(-3,-4)]            | (2.39024390243902,-6.48780487804878)
+        | (0,0)      | [(-1000000,200),(300000,-40)] | (0.0028402365895872,15.384614860264)
+        | (-10,0)    | [(-1000000,200),(300000,-40)] | (-9.99715942258202,15.3864610140472)
+        | (-3,4)     | [(-1000000,200),(300000,-40)] | (-2.99789812267519,15.3851688427303)
+        | (5.1,34.5) | [(-1000000,200),(300000,-40)] | (5.09647083221496,15.3836744976925)
+        | (-5,-12)   | [(-1000000,200),(300000,-40)] | (-4.99494420845634,15.3855375281616)
+        | (10,10)    | [(-1000000,200),(300000,-40)] | (10.000993741978,15.3827690473092)
+        | (0,0)      | [(11,22),(33,44)]             | (11,22)
+        | (-10,0)    | [(11,22),(33,44)]             | (11,22)
+        | (-3,4)     | [(11,22),(33,44)]             | (11,22)
+        | (5.1,34.5) | [(11,22),(33,44)]             | (14.3,25.3)
+        | (-5,-12)   | [(11,22),(33,44)]             | (11,22)
+        | (10,10)    | [(11,22),(33,44)]             | (11,22)
+(30 rows)
+
+--
+-- Lines
+--
+--
+-- Boxes
+--
+SELECT '' as six, box(f1) AS box FROM CIRCLE_TBL;
+ six |                                    box                                     
+-----+----------------------------------------------------------------------------
+     | (2.12132034355964,2.12132034355964),(-2.12132034355964,-2.12132034355964)
+     | (71.7106781186547,72.7106781186547),(-69.7106781186547,-68.7106781186547)
+     | (4.53553390593274,6.53553390593274),(-2.53553390593274,-0.535533905932737)
+     | (3.12132034355964,4.12132034355964),(-1.12132034355964,-0.121320343559642)
+     | (107.071067811865,207.071067811865),(92.9289321881345,192.928932188135)
+     | (170.710678118655,70.7106781186547),(29.2893218813453,-70.7106781186547)
+(6 rows)
+
+-- translation
+SELECT '' AS twentyfour, b.f1 + p.f1 AS translation
+   FROM BOX_TBL b, POINT_TBL p;
+ twentyfour |       translation       
+------------+-------------------------
+            | (2,2),(0,0)
+            | (3,3),(1,1)
+            | (2.5,3.5),(2.5,2.5)
+            | (3,3),(3,3)
+            | (-8,2),(-10,0)
+            | (-7,3),(-9,1)
+            | (-7.5,3.5),(-7.5,2.5)
+            | (-7,3),(-7,3)
+            | (-1,6),(-3,4)
+            | (0,7),(-2,5)
+            | (-0.5,7.5),(-0.5,6.5)
+            | (0,7),(0,7)
+            | (7.1,36.5),(5.1,34.5)
+            | (8.1,37.5),(6.1,35.5)
+            | (7.6,38),(7.6,37)
+            | (8.1,37.5),(8.1,37.5)
+            | (-3,-10),(-5,-12)
+            | (-2,-9),(-4,-11)
+            | (-2.5,-8.5),(-2.5,-9.5)
+            | (-2,-9),(-2,-9)
+            | (12,12),(10,10)
+            | (13,13),(11,11)
+            | (12.5,13.5),(12.5,12.5)
+            | (13,13),(13,13)
+(24 rows)
+
+SELECT '' AS twentyfour, b.f1 - p.f1 AS translation
+   FROM BOX_TBL b, POINT_TBL p;
+ twentyfour |        translation        
+------------+---------------------------
+            | (2,2),(0,0)
+            | (3,3),(1,1)
+            | (2.5,3.5),(2.5,2.5)
+            | (3,3),(3,3)
+            | (12,2),(10,0)
+            | (13,3),(11,1)
+            | (12.5,3.5),(12.5,2.5)
+            | (13,3),(13,3)
+            | (5,-2),(3,-4)
+            | (6,-1),(4,-3)
+            | (5.5,-0.5),(5.5,-1.5)
+            | (6,-1),(6,-1)
+            | (-3.1,-32.5),(-5.1,-34.5)
+            | (-2.1,-31.5),(-4.1,-33.5)
+            | (-2.6,-31),(-2.6,-32)
+            | (-2.1,-31.5),(-2.1,-31.5)
+            | (7,14),(5,12)
+            | (8,15),(6,13)
+            | (7.5,15.5),(7.5,14.5)
+            | (8,15),(8,15)
+            | (-8,-8),(-10,-10)
+            | (-7,-7),(-9,-9)
+            | (-7.5,-6.5),(-7.5,-7.5)
+            | (-7,-7),(-7,-7)
+(24 rows)
+
+-- scaling and rotation
+SELECT '' AS twentyfour, b.f1 * p.f1 AS rotation
+   FROM BOX_TBL b, POINT_TBL p;
+ twentyfour |          rotation           
+------------+-----------------------------
+            | (0,0),(0,0)
+            | (0,0),(0,0)
+            | (0,0),(0,0)
+            | (0,0),(0,0)
+            | (0,0),(-20,-20)
+            | (-10,-10),(-30,-30)
+            | (-25,-25),(-25,-35)
+            | (-30,-30),(-30,-30)
+            | (0,2),(-14,0)
+            | (-7,3),(-21,1)
+            | (-17.5,2.5),(-21.5,-0.5)
+            | (-21,3),(-21,3)
+            | (0,79.2),(-58.8,0)
+            | (-29.4,118.8),(-88.2,39.6)
+            | (-73.5,104.1),(-108,99)
+            | (-88.2,118.8),(-88.2,118.8)
+            | (14,0),(0,-34)
+            | (21,-17),(7,-51)
+            | (29.5,-42.5),(17.5,-47.5)
+            | (21,-51),(21,-51)
+            | (0,40),(0,0)
+            | (0,60),(0,20)
+            | (0,60),(-10,50)
+            | (0,60),(0,60)
+(24 rows)
+
+SELECT '' AS twenty, b.f1 / p.f1 AS rotation
+   FROM BOX_TBL b, POINT_TBL p
+   WHERE (p.f1 <-> point '(0,0)') >= 1;
+ twenty |                                     rotation                                      
+--------+-----------------------------------------------------------------------------------
+        | (0,0),(-0.2,-0.2)
+        | (-0.1,-0.1),(-0.3,-0.3)
+        | (-0.25,-0.25),(-0.25,-0.35)
+        | (-0.3,-0.3),(-0.3,-0.3)
+        | (0.08,0),(0,-0.56)
+        | (0.12,-0.28),(0.04,-0.84)
+        | (0.26,-0.7),(0.1,-0.82)
+        | (0.12,-0.84),(0.12,-0.84)
+        | (0.0651176557643925,0),(0,-0.0483449262493217)
+        | (0.0976764836465887,-0.0241724631246608),(0.0325588278821962,-0.0725173893739825)
+        | (0.109762715208919,-0.0562379754328844),(0.0813970697054906,-0.0604311578116521)
+        | (0.0976764836465887,-0.0725173893739825),(0.0976764836465887,-0.0725173893739825)
+        | (0,0.0828402366863905),(-0.201183431952663,0)
+        | (-0.100591715976331,0.124260355029586),(-0.301775147928994,0.0414201183431953)
+        | (-0.251479289940828,0.103550295857988),(-0.322485207100592,0.0739644970414201)
+        | (-0.301775147928994,0.124260355029586),(-0.301775147928994,0.124260355029586)
+        | (0.2,0),(0,0)
+        | (0.3,0),(0.1,0)
+        | (0.3,0.05),(0.25,0)
+        | (0.3,0),(0.3,0)
+(20 rows)
+
+--
+-- Paths
+--
+SET geqo TO 'off';
+SELECT '' AS eight, points(f1) AS npoints, f1 AS path FROM PATH_TBL;
+ eight | npoints |           path            
+-------+---------+---------------------------
+       |       2 | [(1,2),(3,4)]
+       |       2 | ((1,2),(3,4))
+       |       4 | [(0,0),(3,0),(4,5),(1,6)]
+       |       2 | ((1,2),(3,4))
+       |       2 | ((1,2),(3,4))
+       |       2 | [(1,2),(3,4)]
+       |       2 | [(11,12),(13,14)]
+       |       2 | ((11,12),(13,14))
+(8 rows)
+
+SELECT '' AS four, path(f1) FROM POLYGON_TBL;
+ four |        path         
+------+---------------------
+      | ((2,0),(2,4),(0,0))
+      | ((3,1),(3,3),(1,0))
+      | ((0,0))
+      | ((0,1),(0,1))
+(4 rows)
+
+-- translation
+SELECT '' AS eight, p1.f1 + point '(10,10)' AS dist_add
+   FROM PATH_TBL p1;
+ eight |             dist_add              
+-------+-----------------------------------
+       | [(11,12),(13,14)]
+       | ((11,12),(13,14))
+       | [(10,10),(13,10),(14,15),(11,16)]
+       | ((11,12),(13,14))
+       | ((11,12),(13,14))
+       | [(11,12),(13,14)]
+       | [(21,22),(23,24)]
+       | ((21,22),(23,24))
+(8 rows)
+
+-- scaling and rotation
+SELECT '' AS eight, p1.f1 * point '(2,-1)' AS dist_mul
+   FROM PATH_TBL p1;
+ eight |           dist_mul           
+-------+------------------------------
+       | [(4,3),(10,5)]
+       | ((4,3),(10,5))
+       | [(0,0),(6,-3),(13,6),(8,11)]
+       | ((4,3),(10,5))
+       | ((4,3),(10,5))
+       | [(4,3),(10,5)]
+       | [(34,13),(40,15)]
+       | ((34,13),(40,15))
+(8 rows)
+
+RESET geqo;
+--
+-- Polygons
+--
+-- containment
+SELECT '' AS twentyfour, p.f1, poly.f1, poly.f1 ~ p.f1 AS contains
+   FROM POLYGON_TBL poly, POINT_TBL p;
+ twentyfour |     f1     |         f1          | contains 
+------------+------------+---------------------+----------
+            | (0,0)      | ((2,0),(2,4),(0,0)) | t
+            | (-10,0)    | ((2,0),(2,4),(0,0)) | f
+            | (-3,4)     | ((2,0),(2,4),(0,0)) | f
+            | (5.1,34.5) | ((2,0),(2,4),(0,0)) | f
+            | (-5,-12)   | ((2,0),(2,4),(0,0)) | f
+            | (10,10)    | ((2,0),(2,4),(0,0)) | f
+            | (0,0)      | ((3,1),(3,3),(1,0)) | f
+            | (-10,0)    | ((3,1),(3,3),(1,0)) | f
+            | (-3,4)     | ((3,1),(3,3),(1,0)) | f
+            | (5.1,34.5) | ((3,1),(3,3),(1,0)) | f
+            | (-5,-12)   | ((3,1),(3,3),(1,0)) | f
+            | (10,10)    | ((3,1),(3,3),(1,0)) | f
+            | (0,0)      | ((0,0))             | t
+            | (-10,0)    | ((0,0))             | f
+            | (-3,4)     | ((0,0))             | f
+            | (5.1,34.5) | ((0,0))             | f
+            | (-5,-12)   | ((0,0))             | f
+            | (10,10)    | ((0,0))             | f
+            | (0,0)      | ((0,1),(0,1))       | f
+            | (-10,0)    | ((0,1),(0,1))       | f
+            | (-3,4)     | ((0,1),(0,1))       | f
+            | (5.1,34.5) | ((0,1),(0,1))       | f
+            | (-5,-12)   | ((0,1),(0,1))       | f
+            | (10,10)    | ((0,1),(0,1))       | f
+(24 rows)
+
+SELECT '' AS twentyfour, p.f1, poly.f1, p.f1 @ poly.f1 AS contained
+   FROM POLYGON_TBL poly, POINT_TBL p;
+ twentyfour |     f1     |         f1          | contained 
+------------+------------+---------------------+-----------
+            | (0,0)      | ((2,0),(2,4),(0,0)) | t
+            | (-10,0)    | ((2,0),(2,4),(0,0)) | f
+            | (-3,4)     | ((2,0),(2,4),(0,0)) | f
+            | (5.1,34.5) | ((2,0),(2,4),(0,0)) | f
+            | (-5,-12)   | ((2,0),(2,4),(0,0)) | f
+            | (10,10)    | ((2,0),(2,4),(0,0)) | f
+            | (0,0)      | ((3,1),(3,3),(1,0)) | f
+            | (-10,0)    | ((3,1),(3,3),(1,0)) | f
+            | (-3,4)     | ((3,1),(3,3),(1,0)) | f
+            | (5.1,34.5) | ((3,1),(3,3),(1,0)) | f
+            | (-5,-12)   | ((3,1),(3,3),(1,0)) | f
+            | (10,10)    | ((3,1),(3,3),(1,0)) | f
+            | (0,0)      | ((0,0))             | t
+            | (-10,0)    | ((0,0))             | f
+            | (-3,4)     | ((0,0))             | f
+            | (5.1,34.5) | ((0,0))             | f
+            | (-5,-12)   | ((0,0))             | f
+            | (10,10)    | ((0,0))             | f
+            | (0,0)      | ((0,1),(0,1))       | f
+            | (-10,0)    | ((0,1),(0,1))       | f
+            | (-3,4)     | ((0,1),(0,1))       | f
+            | (5.1,34.5) | ((0,1),(0,1))       | f
+            | (-5,-12)   | ((0,1),(0,1))       | f
+            | (10,10)    | ((0,1),(0,1))       | f
+(24 rows)
+
+SELECT '' AS four, points(f1) AS npoints, f1 AS polygon
+   FROM POLYGON_TBL;
+ four | npoints |       polygon       
+------+---------+---------------------
+      |       3 | ((2,0),(2,4),(0,0))
+      |       3 | ((3,1),(3,3),(1,0))
+      |       1 | ((0,0))
+      |       2 | ((0,1),(0,1))
+(4 rows)
+
+SELECT '' AS four, polygon(f1)
+   FROM BOX_TBL;
+ four |                  polygon                  
+------+-------------------------------------------
+      | ((0,0),(0,2),(2,2),(2,0))
+      | ((1,1),(1,3),(3,3),(3,1))
+      | ((2.5,2.5),(2.5,3.5),(2.5,3.5),(2.5,2.5))
+      | ((3,3),(3,3),(3,3),(3,3))
+(4 rows)
+
+SELECT '' AS four, polygon(f1)
+   FROM PATH_TBL WHERE isclosed(f1);
+ four |      polygon      
+------+-------------------
+      | ((1,2),(3,4))
+      | ((1,2),(3,4))
+      | ((1,2),(3,4))
+      | ((11,12),(13,14))
+(4 rows)
+
+SELECT '' AS four, f1 AS open_path, polygon( pclose(f1)) AS polygon
+   FROM PATH_TBL
+   WHERE isopen(f1);
+ four |         open_path         |          polygon          
+------+---------------------------+---------------------------
+      | [(1,2),(3,4)]             | ((1,2),(3,4))
+      | [(0,0),(3,0),(4,5),(1,6)] | ((0,0),(3,0),(4,5),(1,6))
+      | [(1,2),(3,4)]             | ((1,2),(3,4))
+      | [(11,12),(13,14)]         | ((11,12),(13,14))
+(4 rows)
+
+-- convert circles to polygons using the default number of points
+SELECT '' AS six, polygon(f1)
+   FROM CIRCLE_TBL;
+ six |                                                                                                                                                                                           polygon                                                                                                                                                                                           
+-----+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+     | ((-3,0),(-2.59807621135076,1.50000000000442),(-1.49999999999116,2.59807621135842),(1.53102359017709e-11,3),(1.50000000001768,2.59807621134311),(2.59807621136607,1.4999999999779),(3,-3.06204718035418e-11),(2.59807621133545,-1.50000000003094),(1.49999999996464,-2.59807621137373),(-4.59307077053127e-11,-3),(-1.5000000000442,-2.5980762113278),(-2.59807621138138,-1.49999999995138))
+     | ((-99,2),(-85.6025403783588,52.0000000001473),(-48.9999999997054,88.602540378614),(1.00000000051034,102),(51.0000000005893,88.6025403781036),(87.6025403788692,51.9999999992634),(101,1.99999999897932),(87.6025403778485,-48.0000000010313),(50.9999999988214,-84.6025403791243),(0.999999998468976,-98),(-49.0000000014732,-84.6025403775933),(-85.6025403793795,-47.9999999983795))
+     | ((-4,3),(-3.33012701891794,5.50000000000737),(-1.49999999998527,7.3301270189307),(1.00000000002552,8),(3.50000000002946,7.33012701890518),(5.33012701894346,5.49999999996317),(6,2.99999999994897),(5.33012701889242,0.499999999948437),(3.49999999994107,-1.33012701895622),(0.999999999923449,-2),(-1.50000000007366,-1.33012701887967),(-3.33012701896897,0.500000000081028))
+     | ((-2,2),(-1.59807621135076,3.50000000000442),(-0.499999999991161,4.59807621135842),(1.00000000001531,5),(2.50000000001768,4.59807621134311),(3.59807621136607,3.4999999999779),(4,1.99999999996938),(3.59807621133545,0.499999999969062),(2.49999999996464,-0.598076211373729),(0.999999999954069,-1),(-0.500000000044197,-0.598076211327799),(-1.59807621138138,0.500000000048616))
+     | ((90,200),(91.3397459621641,205.000000000015),(95.0000000000295,208.660254037861),(100.000000000051,210),(105.000000000059,208.66025403781),(108.660254037887,204.999999999926),(110,199.999999999898),(108.660254037785,194.999999999897),(104.999999999882,191.339745962088),(99.9999999998469,190),(94.9999999998527,191.339745962241),(91.3397459620621,195.000000000162))
+     | ((0,0),(13.3974596216412,50.0000000001473),(50.0000000002946,86.602540378614),(100.00000000051,100),(150.000000000589,86.6025403781036),(186.602540378869,49.9999999992634),(200,-1.02068239345139e-09),(186.602540377848,-50.0000000010313),(149.999999998821,-86.6025403791243),(99.999999998469,-100),(49.9999999985268,-86.6025403775933),(13.3974596206205,-49.9999999983795))
+(6 rows)
+
+-- convert the circle to an 8-point polygon
+SELECT '' AS six, polygon(8, f1)
+   FROM CIRCLE_TBL;
+ six |                                                                                                                  polygon                                                                                                                  
+-----+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+     | ((-3,0),(-2.12132034355423,2.12132034356506),(1.53102359017709e-11,3),(2.12132034357588,2.1213203435434),(3,-3.06204718035418e-11),(2.12132034353258,-2.12132034358671),(-4.59307077053127e-11,-3),(-2.12132034359753,-2.12132034352175))
+     | ((-99,2),(-69.7106781184743,72.7106781188352),(1.00000000051034,102),(71.710678119196,72.7106781181135),(101,1.99999999897932),(71.7106781177526,-68.7106781195569),(0.999999998468976,-98),(-69.7106781199178,-68.7106781173917))
+     | ((-4,3),(-2.53553390592372,6.53553390594176),(1.00000000002552,8),(4.5355339059598,6.53553390590567),(6,2.99999999994897),(4.53553390588763,-0.535533905977846),(0.999999999923449,-2),(-2.53553390599589,-0.535533905869586))
+     | ((-2,2),(-1.12132034355423,4.12132034356506),(1.00000000001531,5),(3.12132034357588,4.1213203435434),(4,1.99999999996938),(3.12132034353258,-0.121320343586707),(0.999999999954069,-1),(-1.12132034359753,-0.121320343521752))
+     | ((90,200),(92.9289321881526,207.071067811884),(100.000000000051,210),(107.07106781192,207.071067811811),(110,199.999999999898),(107.071067811775,192.928932188044),(99.9999999998469,190),(92.9289321880082,192.928932188261))
+     | ((0,0),(29.2893218815257,70.7106781188352),(100.00000000051,100),(170.710678119196,70.7106781181135),(200,-1.02068239345139e-09),(170.710678117753,-70.7106781195569),(99.999999998469,-100),(29.2893218800822,-70.7106781173917))
+(6 rows)
+
+--
+-- Circles
+--
+SELECT '' AS six, circle(f1, 50.0)
+   FROM POINT_TBL;
+ six |     circle      
+-----+-----------------
+     | <(0,0),50>
+     | <(-10,0),50>
+     | <(-3,4),50>
+     | <(5.1,34.5),50>
+     | <(-5,-12),50>
+     | <(10,10),50>
+(6 rows)
+
+SELECT '' AS four, circle(f1)
+   FROM BOX_TBL;
+ four |         circle          
+------+-------------------------
+      | <(1,1),1.4142135623731>
+      | <(2,2),1.4142135623731>
+      | <(2.5,3),0.5>
+      | <(3,3),0>
+(4 rows)
+
+SELECT '' AS two, circle(f1)
+   FROM POLYGON_TBL
+   WHERE (# f1) >= 3;
+ two |                         circle                         
+-----+--------------------------------------------------------
+     | <(1.33333333333333,1.33333333333333),2.04168905063636>
+     | <(2.33333333333333,1.33333333333333),1.47534300379185>
+(2 rows)
+
+SELECT '' AS twentyfour, c1.f1 AS circle, p1.f1 AS point, (p1.f1 <-> c1.f1) AS distance
+   FROM CIRCLE_TBL c1, POINT_TBL p1
+   WHERE (p1.f1 <-> c1.f1) > 0
+   ORDER BY distance, circle, point using <<;
+ twentyfour |     circle     |   point    |     distance     
+------------+----------------+------------+------------------
+            | <(100,0),100>  | (5.1,34.5) | 0.97653192697797
+            | <(1,2),3>      | (-3,4)     | 1.47213595499958
+            | <(0,0),3>      | (-3,4)     |                2
+            | <(100,0),100>  | (-3,4)     | 3.07764064044152
+            | <(100,0),100>  | (-5,-12)   | 5.68348972285122
+            | <(1,3),5>      | (-10,0)    | 6.40175425099138
+            | <(1,3),5>      | (10,10)    | 6.40175425099138
+            | <(0,0),3>      | (-10,0)    |                7
+            | <(1,2),3>      | (-10,0)    | 8.18033988749895
+            | <(1,2),3>      | (10,10)    |  9.0415945787923
+            | <(0,0),3>      | (-5,-12)   |               10
+            | <(100,0),100>  | (-10,0)    |               10
+            | <(0,0),3>      | (10,10)    |  11.142135623731
+            | <(1,3),5>      | (-5,-12)   | 11.1554944214035
+            | <(1,2),3>      | (-5,-12)   | 12.2315462117278
+            | <(1,3),5>      | (5.1,34.5) | 26.7657047773223
+            | <(1,2),3>      | (5.1,34.5) |  29.757594539282
+            | <(0,0),3>      | (5.1,34.5) | 31.8749193547455
+            | <(100,200),10> | (5.1,34.5) | 180.778038568384
+            | <(100,200),10> | (10,10)    | 200.237960416286
+            | <(100,200),10> | (-3,4)     | 211.415898254845
+            | <(100,200),10> | (0,0)      | 213.606797749979
+            | <(100,200),10> | (-10,0)    | 218.254244210267
+            | <(100,200),10> | (-5,-12)   | 226.577682802077
+(24 rows)
+
diff --git a/src/test/regress/expected/geometry-i86-gnulibc.out b/src/test/regress/expected/geometry-i86-gnulibc.out
new file mode 100644 (file)
index 0000000..7f4d381
--- /dev/null
@@ -0,0 +1,532 @@
+--
+-- GEOMETRY
+--
+--
+-- Points
+--
+SELECT '' AS four, center(f1) AS center
+   FROM BOX_TBL;
+ four | center  
+------+---------
+      | (1,1)
+      | (2,2)
+      | (2.5,3)
+      | (3,3)
+(4 rows)
+
+SELECT '' AS four, (@@ f1) AS center
+   FROM BOX_TBL;
+ four | center  
+------+---------
+      | (1,1)
+      | (2,2)
+      | (2.5,3)
+      | (3,3)
+(4 rows)
+
+SELECT '' AS six, point(f1) AS center
+   FROM CIRCLE_TBL;
+ six |  center   
+-----+-----------
+     | (0,0)
+     | (1,2)
+     | (1,3)
+     | (1,2)
+     | (100,200)
+     | (100,0)
+(6 rows)
+
+SELECT '' AS six, (@@ f1) AS center
+   FROM CIRCLE_TBL;
+ six |  center   
+-----+-----------
+     | (0,0)
+     | (1,2)
+     | (1,3)
+     | (1,2)
+     | (100,200)
+     | (100,0)
+(6 rows)
+
+SELECT '' AS two, (@@ f1) AS center
+   FROM POLYGON_TBL
+   WHERE (# f1) > 2;
+ two |               center                
+-----+-------------------------------------
+     | (1.33333333333333,1.33333333333333)
+     | (2.33333333333333,1.33333333333333)
+(2 rows)
+
+-- "is horizontal" function
+SELECT '' AS two, p1.f1
+   FROM POINT_TBL p1
+   WHERE ishorizontal(p1.f1, point '(0,0)');
+ two |   f1    
+-----+---------
+     | (0,0)
+     | (-10,0)
+(2 rows)
+
+-- "is horizontal" operator
+SELECT '' AS two, p1.f1
+   FROM POINT_TBL p1
+   WHERE p1.f1 ?- point '(0,0)';
+ two |   f1    
+-----+---------
+     | (0,0)
+     | (-10,0)
+(2 rows)
+
+-- "is vertical" function
+SELECT '' AS one, p1.f1
+   FROM POINT_TBL p1
+   WHERE isvertical(p1.f1, point '(5.1,34.5)');
+ one |     f1     
+-----+------------
+     | (5.1,34.5)
+(1 row)
+
+-- "is vertical" operator
+SELECT '' AS one, p1.f1
+   FROM POINT_TBL p1
+   WHERE p1.f1 ?| point '(5.1,34.5)';
+ one |     f1     
+-----+------------
+     | (5.1,34.5)
+(1 row)
+
+--
+-- Line segments
+--
+-- intersection
+SELECT '' AS count, p.f1, l.s, l.s # p.f1 AS intersection
+   FROM LSEG_TBL l, POINT_TBL p;
+ERROR:  Unable to identify an operator '#' for types 'lseg' and 'point'
+       You will have to retype this query using an explicit cast
+-- closest point
+SELECT '' AS thirty, p.f1, l.s, p.f1 ## l.s AS closest
+   FROM LSEG_TBL l, POINT_TBL p;
+ thirty |     f1     |               s               |                closest                
+--------+------------+-------------------------------+---------------------------------------
+        | (0,0)      | [(1,2),(3,4)]                 | (1,2)
+        | (-10,0)    | [(1,2),(3,4)]                 | (1,2)
+        | (-3,4)     | [(1,2),(3,4)]                 | (1,2)
+        | (5.1,34.5) | [(1,2),(3,4)]                 | (3,4)
+        | (-5,-12)   | [(1,2),(3,4)]                 | (1,2)
+        | (10,10)    | [(1,2),(3,4)]                 | (3,4)
+        | (0,0)      | [(0,0),(6,6)]                 | (-0,0)
+        | (-10,0)    | [(0,0),(6,6)]                 | (0,0)
+        | (-3,4)     | [(0,0),(6,6)]                 | (0.5,0.5)
+        | (5.1,34.5) | [(0,0),(6,6)]                 | (6,6)
+        | (-5,-12)   | [(0,0),(6,6)]                 | (0,0)
+        | (10,10)    | [(0,0),(6,6)]                 | (6,6)
+        | (0,0)      | [(10,-10),(-3,-4)]            | (-2.04878048780488,-4.4390243902439)
+        | (-10,0)    | [(10,-10),(-3,-4)]            | (-3,-4)
+        | (-3,4)     | [(10,-10),(-3,-4)]            | (-3,-4)
+        | (5.1,34.5) | [(10,-10),(-3,-4)]            | (-3,-4)
+        | (-5,-12)   | [(10,-10),(-3,-4)]            | (-1.60487804878049,-4.64390243902439)
+        | (10,10)    | [(10,-10),(-3,-4)]            | (2.39024390243902,-6.48780487804878)
+        | (0,0)      | [(-1000000,200),(300000,-40)] | (0.0028402365895872,15.384614860264)
+        | (-10,0)    | [(-1000000,200),(300000,-40)] | (-9.99715942258202,15.3864610140473)
+        | (-3,4)     | [(-1000000,200),(300000,-40)] | (-2.99789812267519,15.3851688427303)
+        | (5.1,34.5) | [(-1000000,200),(300000,-40)] | (5.09647083221496,15.3836744976925)
+        | (-5,-12)   | [(-1000000,200),(300000,-40)] | (-4.99494420845634,15.3855375281616)
+        | (10,10)    | [(-1000000,200),(300000,-40)] | (10.000993741978,15.3827690473092)
+        | (0,0)      | [(11,22),(33,44)]             | (11,22)
+        | (-10,0)    | [(11,22),(33,44)]             | (11,22)
+        | (-3,4)     | [(11,22),(33,44)]             | (11,22)
+        | (5.1,34.5) | [(11,22),(33,44)]             | (14.3,25.3)
+        | (-5,-12)   | [(11,22),(33,44)]             | (11,22)
+        | (10,10)    | [(11,22),(33,44)]             | (11,22)
+(30 rows)
+
+--
+-- Lines
+--
+--
+-- Boxes
+--
+SELECT '' as six, box(f1) AS box FROM CIRCLE_TBL;
+ six |                                    box                                     
+-----+----------------------------------------------------------------------------
+     | (2.12132034355964,2.12132034355964),(-2.12132034355964,-2.12132034355964)
+     | (71.7106781186548,72.7106781186548),(-69.7106781186548,-68.7106781186548)
+     | (4.53553390593274,6.53553390593274),(-2.53553390593274,-0.535533905932738)
+     | (3.12132034355964,4.12132034355964),(-1.12132034355964,-0.121320343559643)
+     | (107.071067811865,207.071067811865),(92.9289321881345,192.928932188135)
+     | (170.710678118655,70.7106781186548),(29.2893218813452,-70.7106781186548)
+(6 rows)
+
+-- translation
+SELECT '' AS twentyfour, b.f1 + p.f1 AS translation
+   FROM BOX_TBL b, POINT_TBL p;
+ twentyfour |       translation       
+------------+-------------------------
+            | (2,2),(0,0)
+            | (3,3),(1,1)
+            | (2.5,3.5),(2.5,2.5)
+            | (3,3),(3,3)
+            | (-8,2),(-10,0)
+            | (-7,3),(-9,1)
+            | (-7.5,3.5),(-7.5,2.5)
+            | (-7,3),(-7,3)
+            | (-1,6),(-3,4)
+            | (0,7),(-2,5)
+            | (-0.5,7.5),(-0.5,6.5)
+            | (0,7),(0,7)
+            | (7.1,36.5),(5.1,34.5)
+            | (8.1,37.5),(6.1,35.5)
+            | (7.6,38),(7.6,37)
+            | (8.1,37.5),(8.1,37.5)
+            | (-3,-10),(-5,-12)
+            | (-2,-9),(-4,-11)
+            | (-2.5,-8.5),(-2.5,-9.5)
+            | (-2,-9),(-2,-9)
+            | (12,12),(10,10)
+            | (13,13),(11,11)
+            | (12.5,13.5),(12.5,12.5)
+            | (13,13),(13,13)
+(24 rows)
+
+SELECT '' AS twentyfour, b.f1 - p.f1 AS translation
+   FROM BOX_TBL b, POINT_TBL p;
+ twentyfour |        translation        
+------------+---------------------------
+            | (2,2),(0,0)
+            | (3,3),(1,1)
+            | (2.5,3.5),(2.5,2.5)
+            | (3,3),(3,3)
+            | (12,2),(10,0)
+            | (13,3),(11,1)
+            | (12.5,3.5),(12.5,2.5)
+            | (13,3),(13,3)
+            | (5,-2),(3,-4)
+            | (6,-1),(4,-3)
+            | (5.5,-0.5),(5.5,-1.5)
+            | (6,-1),(6,-1)
+            | (-3.1,-32.5),(-5.1,-34.5)
+            | (-2.1,-31.5),(-4.1,-33.5)
+            | (-2.6,-31),(-2.6,-32)
+            | (-2.1,-31.5),(-2.1,-31.5)
+            | (7,14),(5,12)
+            | (8,15),(6,13)
+            | (7.5,15.5),(7.5,14.5)
+            | (8,15),(8,15)
+            | (-8,-8),(-10,-10)
+            | (-7,-7),(-9,-9)
+            | (-7.5,-6.5),(-7.5,-7.5)
+            | (-7,-7),(-7,-7)
+(24 rows)
+
+-- scaling and rotation
+SELECT '' AS twentyfour, b.f1 * p.f1 AS rotation
+   FROM BOX_TBL b, POINT_TBL p;
+ twentyfour |          rotation           
+------------+-----------------------------
+            | (0,0),(0,0)
+            | (0,0),(0,0)
+            | (0,0),(0,0)
+            | (0,0),(0,0)
+            | (-0,0),(-20,-20)
+            | (-10,-10),(-30,-30)
+            | (-25,-25),(-25,-35)
+            | (-30,-30),(-30,-30)
+            | (-0,2),(-14,0)
+            | (-7,3),(-21,1)
+            | (-17.5,2.5),(-21.5,-0.5)
+            | (-21,3),(-21,3)
+            | (0,79.2),(-58.8,0)
+            | (-29.4,118.8),(-88.2,39.6)
+            | (-73.5,104.1),(-108,99)
+            | (-88.2,118.8),(-88.2,118.8)
+            | (14,-0),(0,-34)
+            | (21,-17),(7,-51)
+            | (29.5,-42.5),(17.5,-47.5)
+            | (21,-51),(21,-51)
+            | (0,40),(0,0)
+            | (0,60),(0,20)
+            | (0,60),(-10,50)
+            | (0,60),(0,60)
+(24 rows)
+
+SELECT '' AS twenty, b.f1 / p.f1 AS rotation
+   FROM BOX_TBL b, POINT_TBL p
+   WHERE (p.f1 <-> point '(0,0)') >= 1;
+ twenty |                                     rotation                                      
+--------+-----------------------------------------------------------------------------------
+        | (0,-0),(-0.2,-0.2)
+        | (-0.1,-0.1),(-0.3,-0.3)
+        | (-0.25,-0.25),(-0.25,-0.35)
+        | (-0.3,-0.3),(-0.3,-0.3)
+        | (0.08,-0),(0,-0.56)
+        | (0.12,-0.28),(0.04,-0.84)
+        | (0.26,-0.7),(0.1,-0.82)
+        | (0.12,-0.84),(0.12,-0.84)
+        | (0.0651176557643925,0),(0,-0.0483449262493217)
+        | (0.0976764836465887,-0.0241724631246608),(0.0325588278821962,-0.0725173893739825)
+        | (0.109762715208919,-0.0562379754328844),(0.0813970697054906,-0.0604311578116521)
+        | (0.0976764836465887,-0.0725173893739825),(0.0976764836465887,-0.0725173893739825)
+        | (-0,0.0828402366863905),(-0.201183431952663,0)
+        | (-0.100591715976331,0.124260355029586),(-0.301775147928994,0.0414201183431953)
+        | (-0.251479289940828,0.103550295857988),(-0.322485207100592,0.0739644970414201)
+        | (-0.301775147928994,0.124260355029586),(-0.301775147928994,0.124260355029586)
+        | (0.2,0),(0,0)
+        | (0.3,0),(0.1,0)
+        | (0.3,0.05),(0.25,0)
+        | (0.3,0),(0.3,0)
+(20 rows)
+
+--
+-- Paths
+--
+SET geqo TO 'off';
+SELECT '' AS eight, points(f1) AS npoints, f1 AS path FROM PATH_TBL;
+ eight | npoints |           path            
+-------+---------+---------------------------
+       |       2 | [(1,2),(3,4)]
+       |       2 | ((1,2),(3,4))
+       |       4 | [(0,0),(3,0),(4,5),(1,6)]
+       |       2 | ((1,2),(3,4))
+       |       2 | ((1,2),(3,4))
+       |       2 | [(1,2),(3,4)]
+       |       2 | [(11,12),(13,14)]
+       |       2 | ((11,12),(13,14))
+(8 rows)
+
+SELECT '' AS four, path(f1) FROM POLYGON_TBL;
+ four |        path         
+------+---------------------
+      | ((2,0),(2,4),(0,0))
+      | ((3,1),(3,3),(1,0))
+      | ((0,0))
+      | ((0,1),(0,1))
+(4 rows)
+
+-- translation
+SELECT '' AS eight, p1.f1 + point '(10,10)' AS dist_add
+   FROM PATH_TBL p1;
+ eight |             dist_add              
+-------+-----------------------------------
+       | [(11,12),(13,14)]
+       | ((11,12),(13,14))
+       | [(10,10),(13,10),(14,15),(11,16)]
+       | ((11,12),(13,14))
+       | ((11,12),(13,14))
+       | [(11,12),(13,14)]
+       | [(21,22),(23,24)]
+       | ((21,22),(23,24))
+(8 rows)
+
+-- scaling and rotation
+SELECT '' AS eight, p1.f1 * point '(2,-1)' AS dist_mul
+   FROM PATH_TBL p1;
+ eight |           dist_mul           
+-------+------------------------------
+       | [(4,3),(10,5)]
+       | ((4,3),(10,5))
+       | [(0,0),(6,-3),(13,6),(8,11)]
+       | ((4,3),(10,5))
+       | ((4,3),(10,5))
+       | [(4,3),(10,5)]
+       | [(34,13),(40,15)]
+       | ((34,13),(40,15))
+(8 rows)
+
+RESET geqo;
+--
+-- Polygons
+--
+-- containment
+SELECT '' AS twentyfour, p.f1, poly.f1, poly.f1 ~ p.f1 AS contains
+   FROM POLYGON_TBL poly, POINT_TBL p;
+ twentyfour |     f1     |         f1          | contains 
+------------+------------+---------------------+----------
+            | (0,0)      | ((2,0),(2,4),(0,0)) | t
+            | (-10,0)    | ((2,0),(2,4),(0,0)) | f
+            | (-3,4)     | ((2,0),(2,4),(0,0)) | f
+            | (5.1,34.5) | ((2,0),(2,4),(0,0)) | f
+            | (-5,-12)   | ((2,0),(2,4),(0,0)) | f
+            | (10,10)    | ((2,0),(2,4),(0,0)) | f
+            | (0,0)      | ((3,1),(3,3),(1,0)) | f
+            | (-10,0)    | ((3,1),(3,3),(1,0)) | f
+            | (-3,4)     | ((3,1),(3,3),(1,0)) | f
+            | (5.1,34.5) | ((3,1),(3,3),(1,0)) | f
+            | (-5,-12)   | ((3,1),(3,3),(1,0)) | f
+            | (10,10)    | ((3,1),(3,3),(1,0)) | f
+            | (0,0)      | ((0,0))             | t
+            | (-10,0)    | ((0,0))             | f
+            | (-3,4)     | ((0,0))             | f
+            | (5.1,34.5) | ((0,0))             | f
+            | (-5,-12)   | ((0,0))             | f
+            | (10,10)    | ((0,0))             | f
+            | (0,0)      | ((0,1),(0,1))       | f
+            | (-10,0)    | ((0,1),(0,1))       | f
+            | (-3,4)     | ((0,1),(0,1))       | f
+            | (5.1,34.5) | ((0,1),(0,1))       | f
+            | (-5,-12)   | ((0,1),(0,1))       | f
+            | (10,10)    | ((0,1),(0,1))       | f
+(24 rows)
+
+SELECT '' AS twentyfour, p.f1, poly.f1, p.f1 @ poly.f1 AS contained
+   FROM POLYGON_TBL poly, POINT_TBL p;
+ twentyfour |     f1     |         f1          | contained 
+------------+------------+---------------------+-----------
+            | (0,0)      | ((2,0),(2,4),(0,0)) | t
+            | (-10,0)    | ((2,0),(2,4),(0,0)) | f
+            | (-3,4)     | ((2,0),(2,4),(0,0)) | f
+            | (5.1,34.5) | ((2,0),(2,4),(0,0)) | f
+            | (-5,-12)   | ((2,0),(2,4),(0,0)) | f
+            | (10,10)    | ((2,0),(2,4),(0,0)) | f
+            | (0,0)      | ((3,1),(3,3),(1,0)) | f
+            | (-10,0)    | ((3,1),(3,3),(1,0)) | f
+            | (-3,4)     | ((3,1),(3,3),(1,0)) | f
+            | (5.1,34.5) | ((3,1),(3,3),(1,0)) | f
+            | (-5,-12)   | ((3,1),(3,3),(1,0)) | f
+            | (10,10)    | ((3,1),(3,3),(1,0)) | f
+            | (0,0)      | ((0,0))             | t
+            | (-10,0)    | ((0,0))             | f
+            | (-3,4)     | ((0,0))             | f
+            | (5.1,34.5) | ((0,0))             | f
+            | (-5,-12)   | ((0,0))             | f
+            | (10,10)    | ((0,0))             | f
+            | (0,0)      | ((0,1),(0,1))       | f
+            | (-10,0)    | ((0,1),(0,1))       | f
+            | (-3,4)     | ((0,1),(0,1))       | f
+            | (5.1,34.5) | ((0,1),(0,1))       | f
+            | (-5,-12)   | ((0,1),(0,1))       | f
+            | (10,10)    | ((0,1),(0,1))       | f
+(24 rows)
+
+SELECT '' AS four, points(f1) AS npoints, f1 AS polygon
+   FROM POLYGON_TBL;
+ four | npoints |       polygon       
+------+---------+---------------------
+      |       3 | ((2,0),(2,4),(0,0))
+      |       3 | ((3,1),(3,3),(1,0))
+      |       1 | ((0,0))
+      |       2 | ((0,1),(0,1))
+(4 rows)
+
+SELECT '' AS four, polygon(f1)
+   FROM BOX_TBL;
+ four |                  polygon                  
+------+-------------------------------------------
+      | ((0,0),(0,2),(2,2),(2,0))
+      | ((1,1),(1,3),(3,3),(3,1))
+      | ((2.5,2.5),(2.5,3.5),(2.5,3.5),(2.5,2.5))
+      | ((3,3),(3,3),(3,3),(3,3))
+(4 rows)
+
+SELECT '' AS four, polygon(f1)
+   FROM PATH_TBL WHERE isclosed(f1);
+ four |      polygon      
+------+-------------------
+      | ((1,2),(3,4))
+      | ((1,2),(3,4))
+      | ((1,2),(3,4))
+      | ((11,12),(13,14))
+(4 rows)
+
+SELECT '' AS four, f1 AS open_path, polygon( pclose(f1)) AS polygon
+   FROM PATH_TBL
+   WHERE isopen(f1);
+ four |         open_path         |          polygon          
+------+---------------------------+---------------------------
+      | [(1,2),(3,4)]             | ((1,2),(3,4))
+      | [(0,0),(3,0),(4,5),(1,6)] | ((0,0),(3,0),(4,5),(1,6))
+      | [(1,2),(3,4)]             | ((1,2),(3,4))
+      | [(11,12),(13,14)]         | ((11,12),(13,14))
+(4 rows)
+
+-- convert circles to polygons using the default number of points
+SELECT '' AS six, polygon(f1)
+   FROM CIRCLE_TBL;
+ six |                                                                                                                                       polygon                                                                                                                                        
+-----+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+     | ((-3,0),(-2.59807621135332,1.5),(-1.5,2.59807621135332),(-1.83690953073357e-16,3),(1.5,2.59807621135332),(2.59807621135332,1.5),(3,3.67381906146713e-16),(2.59807621135332,-1.5),(1.5,-2.59807621135332),(5.5107285922007e-16,-3),(-1.5,-2.59807621135332),(-2.59807621135332,-1.5))
+     | ((-99,2),(-85.6025403784439,52),(-49,88.6025403784439),(0.999999999999994,102),(51,88.6025403784439),(87.6025403784439,52),(101,2.00000000000001),(87.6025403784439,-48),(51,-84.6025403784438),(1.00000000000002,-98),(-49,-84.6025403784439),(-85.6025403784438,-48))
+     | ((-4,3),(-3.33012701892219,5.5),(-1.5,7.33012701892219),(1,8),(3.5,7.33012701892219),(5.33012701892219,5.5),(6,3),(5.33012701892219,0.500000000000001),(3.5,-1.33012701892219),(1,-2),(-1.5,-1.33012701892219),(-3.33012701892219,0.499999999999998))
+     | ((-2,2),(-1.59807621135332,3.5),(-0.5,4.59807621135332),(1,5),(2.5,4.59807621135332),(3.59807621135332,3.5),(4,2),(3.59807621135332,0.500000000000001),(2.5,-0.598076211353315),(1,-1),(-0.5,-0.598076211353316),(-1.59807621135332,0.499999999999999))
+     | ((90,200),(91.3397459621556,205),(95,208.660254037844),(100,210),(105,208.660254037844),(108.660254037844,205),(110,200),(108.660254037844,195),(105,191.339745962156),(100,190),(95,191.339745962156),(91.3397459621556,195))
+     | ((0,0),(13.3974596215561,50),(50,86.6025403784439),(100,100),(150,86.6025403784439),(186.602540378444,50),(200,1.22460635382238e-14),(186.602540378444,-50),(150,-86.6025403784438),(100,-100),(50,-86.6025403784439),(13.3974596215562,-50))
+(6 rows)
+
+-- convert the circle to an 8-point polygon
+SELECT '' AS six, polygon(8, f1)
+   FROM CIRCLE_TBL;
+ six |                                                                                                                 polygon                                                                                                                  
+-----+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+     | ((-3,0),(-2.12132034355964,2.12132034355964),(-1.83690953073357e-16,3),(2.12132034355964,2.12132034355964),(3,3.67381906146713e-16),(2.12132034355964,-2.12132034355964),(5.5107285922007e-16,-3),(-2.12132034355964,-2.12132034355964))
+     | ((-99,2),(-69.7106781186548,72.7106781186548),(0.999999999999994,102),(71.7106781186547,72.7106781186548),(101,2.00000000000001),(71.7106781186548,-68.7106781186547),(1.00000000000002,-98),(-69.7106781186547,-68.7106781186548))
+     | ((-4,3),(-2.53553390593274,6.53553390593274),(1,8),(4.53553390593274,6.53553390593274),(6,3),(4.53553390593274,-0.535533905932737),(1,-2),(-2.53553390593274,-0.535533905932738))
+     | ((-2,2),(-1.12132034355964,4.12132034355964),(1,5),(3.12132034355964,4.12132034355964),(4,2),(3.12132034355964,-0.121320343559642),(1,-1),(-1.12132034355964,-0.121320343559643))
+     | ((90,200),(92.9289321881345,207.071067811865),(100,210),(107.071067811865,207.071067811865),(110,200),(107.071067811865,192.928932188135),(100,190),(92.9289321881345,192.928932188135))
+     | ((0,0),(29.2893218813452,70.7106781186548),(100,100),(170.710678118655,70.7106781186548),(200,1.22460635382238e-14),(170.710678118655,-70.7106781186547),(100,-100),(29.2893218813453,-70.7106781186548))
+(6 rows)
+
+--
+-- Circles
+--
+SELECT '' AS six, circle(f1, 50.0)
+   FROM POINT_TBL;
+ six |     circle      
+-----+-----------------
+     | <(0,0),50>
+     | <(-10,0),50>
+     | <(-3,4),50>
+     | <(5.1,34.5),50>
+     | <(-5,-12),50>
+     | <(10,10),50>
+(6 rows)
+
+SELECT '' AS four, circle(f1)
+   FROM BOX_TBL;
+ four |         circle          
+------+-------------------------
+      | <(1,1),1.4142135623731>
+      | <(2,2),1.4142135623731>
+      | <(2.5,3),0.5>
+      | <(3,3),0>
+(4 rows)
+
+SELECT '' AS two, circle(f1)
+   FROM POLYGON_TBL
+   WHERE (# f1) >= 3;
+ two |                         circle                         
+-----+--------------------------------------------------------
+     | <(1.33333333333333,1.33333333333333),2.04168905063636>
+     | <(2.33333333333333,1.33333333333333),1.47534300379185>
+(2 rows)
+
+SELECT '' AS twentyfour, c1.f1 AS circle, p1.f1 AS point, (p1.f1 <-> c1.f1) AS distance
+   FROM CIRCLE_TBL c1, POINT_TBL p1
+   WHERE (p1.f1 <-> c1.f1) > 0
+   ORDER BY distance, circle, point using <<;
+ twentyfour |     circle     |   point    |     distance      
+------------+----------------+------------+-------------------
+            | <(100,0),100>  | (5.1,34.5) | 0.976531926977964
+            | <(1,2),3>      | (-3,4)     |  1.47213595499958
+            | <(0,0),3>      | (-3,4)     |                 2
+            | <(100,0),100>  | (-3,4)     |  3.07764064044151
+            | <(100,0),100>  | (-5,-12)   |  5.68348972285122
+            | <(1,3),5>      | (-10,0)    |  6.40175425099138
+            | <(1,3),5>      | (10,10)    |  6.40175425099138
+            | <(0,0),3>      | (-10,0)    |                 7
+            | <(1,2),3>      | (-10,0)    |  8.18033988749895
+            | <(1,2),3>      | (10,10)    |   9.0415945787923
+            | <(0,0),3>      | (-5,-12)   |                10
+            | <(100,0),100>  | (-10,0)    |                10
+            | <(0,0),3>      | (10,10)    |   11.142135623731
+            | <(1,3),5>      | (-5,-12)   |  11.1554944214035
+            | <(1,2),3>      | (-5,-12)   |  12.2315462117278
+            | <(1,3),5>      | (5.1,34.5) |  26.7657047773224
+            | <(1,2),3>      | (5.1,34.5) |   29.757594539282
+            | <(0,0),3>      | (5.1,34.5) |  31.8749193547455
+            | <(100,200),10> | (5.1,34.5) |  180.778038568384
+            | <(100,200),10> | (10,10)    |  200.237960416286
+            | <(100,200),10> | (-3,4)     |  211.415898254845
+            | <(100,200),10> | (0,0)      |  213.606797749979
+            | <(100,200),10> | (-10,0)    |  218.254244210267
+            | <(100,200),10> | (-5,-12)   |  226.577682802077
+(24 rows)
+
diff --git a/src/test/regress/expected/int2-not-representable.out b/src/test/regress/expected/int2-not-representable.out
new file mode 100644 (file)
index 0000000..5cd205b
--- /dev/null
@@ -0,0 +1,215 @@
+--
+-- INT2
+-- NOTE: int2 operators never check for over/underflow!
+-- Some of these answers are consequently numerically incorrect.
+--
+CREATE TABLE INT2_TBL(f1 int2);
+INSERT INTO INT2_TBL(f1) VALUES ('0');
+INSERT INTO INT2_TBL(f1) VALUES ('1234');
+INSERT INTO INT2_TBL(f1) VALUES ('-1234');
+INSERT INTO INT2_TBL(f1) VALUES ('34.5');
+ERROR:  pg_atoi: error in "34.5": can't parse ".5"
+-- largest and smallest values 
+INSERT INTO INT2_TBL(f1) VALUES ('32767');
+INSERT INTO INT2_TBL(f1) VALUES ('-32767');
+-- bad input values -- should give warnings 
+INSERT INTO INT2_TBL(f1) VALUES ('100000');
+ERROR:  pg_atoi: error reading "100000": Math result not representable
+INSERT INTO INT2_TBL(f1) VALUES ('asdf');
+ERROR:  pg_atoi: error in "asdf": can't parse "asdf"
+SELECT '' AS five, INT2_TBL.*;
+ five |   f1   
+------+--------
+      |      0
+      |   1234
+      |  -1234
+      |  32767
+      | -32767
+(5 rows)
+
+SELECT '' AS four, i.* FROM INT2_TBL i WHERE i.f1 <> int2 '0';
+ four |   f1   
+------+--------
+      |   1234
+      |  -1234
+      |  32767
+      | -32767
+(4 rows)
+
+SELECT '' AS four, i.* FROM INT2_TBL i WHERE i.f1 <> int4 '0';
+ four |   f1   
+------+--------
+      |   1234
+      |  -1234
+      |  32767
+      | -32767
+(4 rows)
+
+SELECT '' AS one, i.* FROM INT2_TBL i WHERE i.f1 = int2 '0';
+ one | f1 
+-----+----
+     |  0
+(1 row)
+
+SELECT '' AS one, i.* FROM INT2_TBL i WHERE i.f1 = int4 '0';
+ one | f1 
+-----+----
+     |  0
+(1 row)
+
+SELECT '' AS two, i.* FROM INT2_TBL i WHERE i.f1 < int2 '0';
+ two |   f1   
+-----+--------
+     |  -1234
+     | -32767
+(2 rows)
+
+SELECT '' AS two, i.* FROM INT2_TBL i WHERE i.f1 < int4 '0';
+ two |   f1   
+-----+--------
+     |  -1234
+     | -32767
+(2 rows)
+
+SELECT '' AS three, i.* FROM INT2_TBL i WHERE i.f1 <= int2 '0';
+ three |   f1   
+-------+--------
+       |      0
+       |  -1234
+       | -32767
+(3 rows)
+
+SELECT '' AS three, i.* FROM INT2_TBL i WHERE i.f1 <= int4 '0';
+ three |   f1   
+-------+--------
+       |      0
+       |  -1234
+       | -32767
+(3 rows)
+
+SELECT '' AS two, i.* FROM INT2_TBL i WHERE i.f1 > int2 '0';
+ two |  f1   
+-----+-------
+     |  1234
+     | 32767
+(2 rows)
+
+SELECT '' AS two, i.* FROM INT2_TBL i WHERE i.f1 > int4 '0';
+ two |  f1   
+-----+-------
+     |  1234
+     | 32767
+(2 rows)
+
+SELECT '' AS three, i.* FROM INT2_TBL i WHERE i.f1 >= int2 '0';
+ three |  f1   
+-------+-------
+       |     0
+       |  1234
+       | 32767
+(3 rows)
+
+SELECT '' AS three, i.* FROM INT2_TBL i WHERE i.f1 >= int4 '0';
+ three |  f1   
+-------+-------
+       |     0
+       |  1234
+       | 32767
+(3 rows)
+
+-- positive odds 
+SELECT '' AS one, i.* FROM INT2_TBL i WHERE (i.f1 % int2 '2') = int2 '1';
+ one |  f1   
+-----+-------
+     | 32767
+(1 row)
+
+-- any evens 
+SELECT '' AS three, i.* FROM INT2_TBL i WHERE (i.f1 % int4 '2') = int2 '0';
+ three |  f1   
+-------+-------
+       |     0
+       |  1234
+       | -1234
+(3 rows)
+
+SELECT '' AS five, i.f1, i.f1 * int2 '2' AS x FROM INT2_TBL i;
+ five |   f1   |   x   
+------+--------+-------
+      |      0 |     0
+      |   1234 |  2468
+      |  -1234 | -2468
+      |  32767 |    -2
+      | -32767 |     2
+(5 rows)
+
+SELECT '' AS five, i.f1, i.f1 * int4 '2' AS x FROM INT2_TBL i;
+ five |   f1   |   x    
+------+--------+--------
+      |      0 |      0
+      |   1234 |   2468
+      |  -1234 |  -2468
+      |  32767 |  65534
+      | -32767 | -65534
+(5 rows)
+
+SELECT '' AS five, i.f1, i.f1 + int2 '2' AS x FROM INT2_TBL i;
+ five |   f1   |   x    
+------+--------+--------
+      |      0 |      2
+      |   1234 |   1236
+      |  -1234 |  -1232
+      |  32767 | -32767
+      | -32767 | -32765
+(5 rows)
+
+SELECT '' AS five, i.f1, i.f1 + int4 '2' AS x FROM INT2_TBL i;
+ five |   f1   |   x    
+------+--------+--------
+      |      0 |      2
+      |   1234 |   1236
+      |  -1234 |  -1232
+      |  32767 |  32769
+      | -32767 | -32765
+(5 rows)
+
+SELECT '' AS five, i.f1, i.f1 - int2 '2' AS x FROM INT2_TBL i;
+ five |   f1   |   x   
+------+--------+-------
+      |      0 |    -2
+      |   1234 |  1232
+      |  -1234 | -1236
+      |  32767 | 32765
+      | -32767 | 32767
+(5 rows)
+
+SELECT '' AS five, i.f1, i.f1 - int4 '2' AS x FROM INT2_TBL i;
+ five |   f1   |   x    
+------+--------+--------
+      |      0 |     -2
+      |   1234 |   1232
+      |  -1234 |  -1236
+      |  32767 |  32765
+      | -32767 | -32769
+(5 rows)
+
+SELECT '' AS five, i.f1, i.f1 / int2 '2' AS x FROM INT2_TBL i;
+ five |   f1   |   x    
+------+--------+--------
+      |      0 |      0
+      |   1234 |    617
+      |  -1234 |   -617
+      |  32767 |  16383
+      | -32767 | -16383
+(5 rows)
+
+SELECT '' AS five, i.f1, i.f1 / int4 '2' AS x FROM INT2_TBL i;
+ five |   f1   |   x    
+------+--------+--------
+      |      0 |      0
+      |   1234 |    617
+      |  -1234 |   -617
+      |  32767 |  16383
+      | -32767 | -16383
+(5 rows)
+
diff --git a/src/test/regress/expected/int4-not-representable.out b/src/test/regress/expected/int4-not-representable.out
new file mode 100644 (file)
index 0000000..b706c1c
--- /dev/null
@@ -0,0 +1,315 @@
+--
+-- INT4
+-- WARNING: int4 operators never check for over/underflow!
+-- Some of these answers are consequently numerically incorrect.
+--
+CREATE TABLE INT4_TBL(f1 int4);
+INSERT INTO INT4_TBL(f1) VALUES ('0');
+INSERT INTO INT4_TBL(f1) VALUES ('123456');
+INSERT INTO INT4_TBL(f1) VALUES ('-123456');
+INSERT INTO INT4_TBL(f1) VALUES ('34.5');
+ERROR:  pg_atoi: error in "34.5": can't parse ".5"
+-- largest and smallest values 
+INSERT INTO INT4_TBL(f1) VALUES ('2147483647');
+INSERT INTO INT4_TBL(f1) VALUES ('-2147483647');
+-- bad input values -- should give warnings 
+INSERT INTO INT4_TBL(f1) VALUES ('1000000000000');
+ERROR:  pg_atoi: error reading "1000000000000": Math result not representable
+INSERT INTO INT4_TBL(f1) VALUES ('asdf');
+ERROR:  pg_atoi: error in "asdf": can't parse "asdf"
+SELECT '' AS five, INT4_TBL.*;
+ five |     f1      
+------+-------------
+      |           0
+      |      123456
+      |     -123456
+      |  2147483647
+      | -2147483647
+(5 rows)
+
+SELECT '' AS four, i.* FROM INT4_TBL i WHERE i.f1 <> int2 '0';
+ four |     f1      
+------+-------------
+      |      123456
+      |     -123456
+      |  2147483647
+      | -2147483647
+(4 rows)
+
+SELECT '' AS four, i.* FROM INT4_TBL i WHERE i.f1 <> int4 '0';
+ four |     f1      
+------+-------------
+      |      123456
+      |     -123456
+      |  2147483647
+      | -2147483647
+(4 rows)
+
+SELECT '' AS one, i.* FROM INT4_TBL i WHERE i.f1 = int2 '0';
+ one | f1 
+-----+----
+     |  0
+(1 row)
+
+SELECT '' AS one, i.* FROM INT4_TBL i WHERE i.f1 = int4 '0';
+ one | f1 
+-----+----
+     |  0
+(1 row)
+
+SELECT '' AS two, i.* FROM INT4_TBL i WHERE i.f1 < int2 '0';
+ two |     f1      
+-----+-------------
+     |     -123456
+     | -2147483647
+(2 rows)
+
+SELECT '' AS two, i.* FROM INT4_TBL i WHERE i.f1 < int4 '0';
+ two |     f1      
+-----+-------------
+     |     -123456
+     | -2147483647
+(2 rows)
+
+SELECT '' AS three, i.* FROM INT4_TBL i WHERE i.f1 <= int2 '0';
+ three |     f1      
+-------+-------------
+       |           0
+       |     -123456
+       | -2147483647
+(3 rows)
+
+SELECT '' AS three, i.* FROM INT4_TBL i WHERE i.f1 <= int4 '0';
+ three |     f1      
+-------+-------------
+       |           0
+       |     -123456
+       | -2147483647
+(3 rows)
+
+SELECT '' AS two, i.* FROM INT4_TBL i WHERE i.f1 > int2 '0';
+ two |     f1     
+-----+------------
+     |     123456
+     | 2147483647
+(2 rows)
+
+SELECT '' AS two, i.* FROM INT4_TBL i WHERE i.f1 > int4 '0';
+ two |     f1     
+-----+------------
+     |     123456
+     | 2147483647
+(2 rows)
+
+SELECT '' AS three, i.* FROM INT4_TBL i WHERE i.f1 >= int2 '0';
+ three |     f1     
+-------+------------
+       |          0
+       |     123456
+       | 2147483647
+(3 rows)
+
+SELECT '' AS three, i.* FROM INT4_TBL i WHERE i.f1 >= int4 '0';
+ three |     f1     
+-------+------------
+       |          0
+       |     123456
+       | 2147483647
+(3 rows)
+
+-- positive odds 
+SELECT '' AS one, i.* FROM INT4_TBL i WHERE (i.f1 % int2 '2') = int2 '1';
+ one |     f1     
+-----+------------
+     | 2147483647
+(1 row)
+
+-- any evens 
+SELECT '' AS three, i.* FROM INT4_TBL i WHERE (i.f1 % int4 '2') = int2 '0';
+ three |   f1    
+-------+---------
+       |       0
+       |  123456
+       | -123456
+(3 rows)
+
+SELECT '' AS five, i.f1, i.f1 * int2 '2' AS x FROM INT4_TBL i;
+ five |     f1      |    x    
+------+-------------+---------
+      |           0 |       0
+      |      123456 |  246912
+      |     -123456 | -246912
+      |  2147483647 |      -2
+      | -2147483647 |       2
+(5 rows)
+
+SELECT '' AS five, i.f1, i.f1 * int4 '2' AS x FROM INT4_TBL i;
+ five |     f1      |    x    
+------+-------------+---------
+      |           0 |       0
+      |      123456 |  246912
+      |     -123456 | -246912
+      |  2147483647 |      -2
+      | -2147483647 |       2
+(5 rows)
+
+SELECT '' AS five, i.f1, i.f1 + int2 '2' AS x FROM INT4_TBL i;
+ five |     f1      |      x      
+------+-------------+-------------
+      |           0 |           2
+      |      123456 |      123458
+      |     -123456 |     -123454
+      |  2147483647 | -2147483647
+      | -2147483647 | -2147483645
+(5 rows)
+
+SELECT '' AS five, i.f1, i.f1 + int4 '2' AS x FROM INT4_TBL i;
+ five |     f1      |      x      
+------+-------------+-------------
+      |           0 |           2
+      |      123456 |      123458
+      |     -123456 |     -123454
+      |  2147483647 | -2147483647
+      | -2147483647 | -2147483645
+(5 rows)
+
+SELECT '' AS five, i.f1, i.f1 - int2 '2' AS x FROM INT4_TBL i;
+ five |     f1      |     x      
+------+-------------+------------
+      |           0 |         -2
+      |      123456 |     123454
+      |     -123456 |    -123458
+      |  2147483647 | 2147483645
+      | -2147483647 | 2147483647
+(5 rows)
+
+SELECT '' AS five, i.f1, i.f1 - int4 '2' AS x FROM INT4_TBL i;
+ five |     f1      |     x      
+------+-------------+------------
+      |           0 |         -2
+      |      123456 |     123454
+      |     -123456 |    -123458
+      |  2147483647 | 2147483645
+      | -2147483647 | 2147483647
+(5 rows)
+
+SELECT '' AS five, i.f1, i.f1 / int2 '2' AS x FROM INT4_TBL i;
+ five |     f1      |      x      
+------+-------------+-------------
+      |           0 |           0
+      |      123456 |       61728
+      |     -123456 |      -61728
+      |  2147483647 |  1073741823
+      | -2147483647 | -1073741823
+(5 rows)
+
+SELECT '' AS five, i.f1, i.f1 / int4 '2' AS x FROM INT4_TBL i;
+ five |     f1      |      x      
+------+-------------+-------------
+      |           0 |           0
+      |      123456 |       61728
+      |     -123456 |      -61728
+      |  2147483647 |  1073741823
+      | -2147483647 | -1073741823
+(5 rows)
+
+--
+-- more complex expressions
+--
+-- variations on unary minus parsing
+SELECT -2+3 AS one;
+ one 
+-----
+   1
+(1 row)
+
+SELECT 4-2 AS two;
+ two 
+-----
+   2
+(1 row)
+
+SELECT 2- -1 AS three;
+ three 
+-------
+     3
+(1 row)
+
+SELECT 2 - -2 AS four;
+ four 
+------
+    4
+(1 row)
+
+SELECT int2 '2' * int2 '2' = int2 '16' / int2 '4' AS true;
+ true 
+------
+ t
+(1 row)
+
+SELECT int4 '2' * int2 '2' = int2 '16' / int4 '4' AS true;
+ true 
+------
+ t
+(1 row)
+
+SELECT int2 '2' * int4 '2' = int4 '16' / int2 '4' AS true;
+ true 
+------
+ t
+(1 row)
+
+SELECT int4 '1000' < int4 '999' AS false;
+ false 
+-------
+ f
+(1 row)
+
+SELECT 4! AS twenty_four;
+ twenty_four 
+-------------
+          24
+(1 row)
+
+SELECT !!3 AS six;
+ six 
+-----
+   6
+(1 row)
+
+SELECT 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 AS ten;
+ ten 
+-----
+  10
+(1 row)
+
+SELECT 2 + 2 / 2 AS three;
+ three 
+-------
+     3
+(1 row)
+
+SELECT (2 + 2) / 2 AS two;
+ two 
+-----
+   2
+(1 row)
+
+SELECT dsqrt(float8 '64') AS eight;
+ eight 
+-------
+     8
+(1 row)
+
+SELECT |/float8 '64' AS eight;
+ eight 
+-------
+     8
+(1 row)
+
+SELECT ||/float8 '27' AS three;
+ three 
+-------
+     3
+(1 row)
+
index 898c6c4..195b270 100755 (executable)
@@ -1,5 +1,5 @@
 #!/bin/sh
-# $Header: /cvsroot/pgsql/src/test/regress/Attic/regress.sh,v 1.38 2000/01/09 07:53:58 tgl Exp $
+# $Header: /cvsroot/pgsql/src/test/regress/Attic/regress.sh,v 1.39 2000/01/09 20:54:36 tgl Exp $
 #
 if [ $# -eq 0 ]
 then
@@ -27,16 +27,34 @@ else
        ECHO_C='\c'
 fi
 
-if [ -d ./obj ]; then
-       cd ./obj
-fi
-
 PGTZ="PST8PDT"; export PGTZ
 PGDATESTYLE="Postgres,US"; export PGDATESTYLE
 
-#FRONTEND=monitor
 FRONTEND="psql $HOSTLOC -n -e -q"
 
+# ----------
+# Scan resultmap file to find which platform-specific expected files to use.
+# The format of each line of the file is
+#              testname/hostnamepattern=substitutefile
+# where the hostnamepattern is evaluated per the rules of expr(1) --- namely,
+# it is a standard regular expression with an implicit ^ at the start.
+# ----------
+SUBSTLIST=""
+exec 4<resultmap
+while read LINE <&4
+do
+       HOSTPAT=`expr "$LINE" : '.*/\(.*\)='`
+       if [ `expr "$hostname" : "$HOSTPAT"` -ne 0 ]
+       then
+               SUBSTLIST="$SUBSTLIST $LINE"
+       fi
+done
+exec 4<&-
+
+if [ -d ./obj ]; then
+       cd ./obj
+fi
+
 echo "=============== Notes...                              ================="
 echo "postmaster must already be running for the regression tests to succeed."
 echo "Please report any apparent problems to ports@postgresql.org"
@@ -94,32 +112,19 @@ do
        $FRONTEND regression < sql/${tst}.sql > results/${tst}.out 2>&1
 
        #
-       # Check resultmap to see if we should compare to a
-       # system-specific result file.  The format of the .similar file is
-       #       testname/hostname=substitutefile
+       # Check list extracted from resultmap to see if we should compare
+       # to a system-specific expected file.
        # There shouldn't be multiple matches, but take the last if there are.
        #
        EXPECTED="expected/${tst}.out"
-       SUBST=`grep "^$tst/$hostname=" resultmap | sed 's/^.*=//' | tail -1`
-       if test "$SUBST"
-       then EXPECTED="expected/${SUBST}.out"
-       else
-           # Next look for a .similar entry that is a prefix of $hostname.
-           # If there are multiple matches, take the last one.
-           exec 4<resultmap
-           while read LINE <&4
-           do
-               SIMHOST=`expr "$LINE" : '\(.*\)='`
-               MATCH=`expr "$tst/$hostname" : "$SIMHOST"`
-               if test "$MATCH" != 0
-               then SUBST=`echo "$LINE" | sed 's/^.*=//'`
+       for LINE in $SUBSTLIST
+       do
+               if [ `expr "$LINE" : "$tst/"` -ne 0 ]
+               then
+                       SUBST=`echo "$LINE" | sed 's/^.*=//'`
+                       EXPECTED="expected/${SUBST}.out"
                fi
-           done
-           exec 4<&-
-           if test "$SUBST"
-           then EXPECTED="expected/${SUBST}.out"
-           fi
-       fi
+       done
 
        if [ `diff ${DIFFOPT} ${EXPECTED} results/${tst}.out | wc -l` -ne 0 ]
        then
index 43d94d0..983fde0 100644 (file)
@@ -1,4 +1,8 @@
 int2/hppa=int2-too-large
 int4/hppa=int4-too-large
-geometry/hppa2.0=geometry-hppa2.0
+int2/i.86-pc-linux-gnulibc=int2-not-representable
+int4/i.86-pc-linux-gnulibc=int4-not-representable
+geometry/hppa1\.1=geometry-hppa1.1
+geometry/hppa2\.0=geometry-hppa2.0
+geometry/i.86-.*-gnulibc=geometry-i86-gnulibc
 horology/hppa=horology-no-DST-before-1970
index f041fa2..8187e8a 100755 (executable)
@@ -1,6 +1,6 @@
 #!/bin/sh
 #
-# $Header: /cvsroot/pgsql/src/test/regress/Attic/run_check.sh,v 1.5 2000/01/09 07:53:58 tgl Exp $
+# $Header: /cvsroot/pgsql/src/test/regress/Attic/run_check.sh,v 1.6 2000/01/09 20:54:36 tgl Exp $
 
 # ----------
 # Check call syntax
@@ -79,16 +79,23 @@ PGDATESTYLE="Postgres,US"; export PGDATESTYLE
 FRONTEND="$BINDIR/psql $HOSTLOC -n -e -q"
 
 # ----------
-# Prepare temp file holding combined test script.
+# Scan resultmap file to find which platform-specific expected files to use.
+# The format of each line of the file is
+#              testname/hostnamepattern=substitutefile
+# where the hostnamepattern is evaluated per the rules of expr(1) --- namely,
+# it is a standard regular expression with an implicit ^ at the start.
 # ----------
-TESTLIST="/tmp/testlist.$$"
-TESTS=./sql/run_check.tests
-(
-       cat $TESTS 
-       for name in $extratests ; do
-               echo "test $name"
-       done
-) > $TESTLIST
+SUBSTLIST=""
+exec 4<resultmap
+while read LINE <&4
+do
+       HOSTPAT=`expr "$LINE" : '.*/\(.*\)='`
+       if [ `expr "$hostname" : "$HOSTPAT"` -ne 0 ]
+       then
+               SUBSTLIST="$SUBSTLIST $LINE"
+       fi
+done
+exec 4<&-
 
 # ----------
 # Catch SIGINT and SIGTERM to shutdown the postmaster
@@ -104,7 +111,6 @@ trap '      echo ""
                        echo ""
                fi
                echo ""
-               rm $TESTLIST
                exit 1
 ' 2 15
 
@@ -221,15 +227,21 @@ fi
 
 
 # ----------
-# Run the regression tests specified in the $TESTLIST file
+# Run the regression tests specified in the ./sql/run_check.tests file
 # ----------
 echo "=============== Running regression queries...          ================"
 echo "" > regression.diffs
 echo "" > regress.out
 
+TESTS=./sql/run_check.tests
 lno=0
-while read line
-do
+(
+       cat $TESTS 
+       for name in $extratests ; do
+               echo "test $name"
+       done
+) | while read line ; do
+
        # ----------
        # Count line numbers and skip comments and empty lines
        # ----------
@@ -256,8 +268,7 @@ do
                                        pargroup=$name
                                        parntests=0
                                        parpar=0
-                                       while read line
-                                       do
+                                       while read line ; do
                                                # ----------
                                                # Again count line numbers and skip comments
                                                # ----------
@@ -334,14 +345,14 @@ do
                                                                > results/${name}.out 2>&1
                                                        $ECHO_N " $name" $ECHO_C
                                                ) &
-                                       done </dev/null
+                                       done
                                        wait
                                        echo ""
 
                                        # ----------
                                        # Setup status information for the diff check below
                                        # ----------
-                                       checklist=$parlist
+                                       checklist="$parlist"
                                        checkpname=1
                                        ;;
 
@@ -357,7 +368,7 @@ do
                                        # ----------
                                        # Setup status information for the diff check below
                                        # ----------
-                                       checklist=$name
+                                       checklist="$name"
                                        checkpname=0
                                        ;;
 
@@ -379,55 +390,43 @@ do
        # old format, so checkresults will still find the proper
        # information.
        # ----------
-       for tst in $checklist ; do
+       for name in $checklist ; do
                if [ $checkpname -ne 0 ]
                then
-                       pnam=`echo $tst | awk '{printf "%-20.20s", $1;}'`
+                       pnam=`echo $name | awk '{printf "%-20.20s", $1;}'`
                        $ECHO_N "           test $pnam ... " $ECHO_C
                fi
 
                #
-               # Check resultmap to see if we should compare to a
-               # system-specific result file.  The format of the file is
-               #       testname/hostname=substitutefile
+               # Check list extracted from resultmap to see if we should compare
+               # to a system-specific expected file.
                # There shouldn't be multiple matches, but take the last if there are.
                #
-               EXPECTED="expected/${tst}.out"
-               SUBST=`grep "^$tst/$hostname=" resultmap | sed 's/^.*=//' | tail -1`
-               if test "$SUBST"
-               then EXPECTED="expected/${SUBST}.out"
-               else
-                   # Next look for a .similar entry that is a prefix of $hostname.
-                   # If there are multiple matches, take the last one.
-                   while read LINE
-                   do
-                       SIMHOST=`expr "$LINE" : '\(.*\)='`
-                       MATCH=`expr "$tst/$hostname" : "$SIMHOST"`
-                       echo "$LINE $SIMHOST $MATCH"
-                       if test "$MATCH" != 0
-                       then SUBST=`echo "$LINE" | sed 's/^.*=//'`
+               EXPECTED="expected/${name}.out"
+               for LINE in $SUBSTLIST
+               do
+                       if [ `expr "$LINE" : "$name/"` -ne 0 ]
+                       then
+                               SUBST=`echo "$LINE" | sed 's/^.*=//'`
+                               EXPECTED="expected/${SUBST}.out"
                        fi
-                   done <resultmap
-                   if test "$SUBST"
-                   then EXPECTED="expected/${SUBST}.out"
-                   fi
-               fi
+               done
 
-               if [ `diff -w ${EXPECTED} results/${tst}.out | wc -l` -ne 0 ]
+               if [ `diff -w ${EXPECTED} results/${name}.out | wc -l` -ne 0 ]
                then
-                       (       diff -wC3 ${EXPECTED} results/${tst}.out        ; \
+                       (       diff -wC3 ${EXPECTED} results/${name}.out       ; \
                                echo ""                                                                         ; \
                                echo "----------------------"                           ; \
                                echo ""                                                                         ; \
                        ) >> regression.diffs
                        echo "FAILED"
-                       echo "$tst .. failed" >> regress.out
+                       echo "$name .. failed" >> regress.out
                else
                        echo "ok"
-                       echo "$tst .. ok" >> regress.out
+                       echo "$name .. ok" >> regress.out
                fi
        done
-done <$TESTLIST | tee run_check.out 2>&1
+done | tee run_check.out 2>&1
 
 # ----------
 # Finally kill the postmaster we started
@@ -435,6 +434,5 @@ done <$TESTLIST | tee run_check.out 2>&1
 echo "=============== Terminating regression postmaster      ================"
 kill -15 $PMPID
 
-rm $TESTLIST
 
 exit 0