Commit 3d5dd9bd authored by Thomas G. Lockhart's avatar Thomas G. Lockhart

Start adding tests for new geometry functions.

Not all cleaned up yet.
parent c5035643
...@@ -39,8 +39,8 @@ SELECT '' AS two, f1 FROM CIRCLE_TBL WHERE radius(f1) < 5; ...@@ -39,8 +39,8 @@ SELECT '' AS two, f1 FROM CIRCLE_TBL WHERE radius(f1) < 5;
SELECT '' AS four, f1 FROM CIRCLE_TBL WHERE diameter(f1) >= 10; SELECT '' AS four, f1 FROM CIRCLE_TBL WHERE diameter(f1) >= 10;
SELECT '' as five, c1.f1 AS one, c2.f1 AS two, (c1.f1 <===> c2.f1) AS distance SELECT '' as five, c1.f1 AS one, c2.f1 AS two, (c1.f1 <-> c2.f1) AS distance
FROM CIRCLE_TBL c1, CIRCLE_TBL c2 FROM CIRCLE_TBL c1, CIRCLE_TBL c2
WHERE (c1.f1 < c2.f1) AND ((c1.f1 <===> c2.f1) > 0) WHERE (c1.f1 < c2.f1) AND ((c1.f1 <-> c2.f1) > 0)
ORDER BY distance, one, two; ORDER BY distance, one, two;
...@@ -2,20 +2,54 @@ ...@@ -2,20 +2,54 @@
-- Points -- Points
-- --
SELECT point(f1) FROM CIRCLE_TBL; SELECT '' AS xxx, center(f1) AS center
FROM BOX_TBL;
SELECT '' AS xxx, (@@ f1) AS center
FROM BOX_TBL;
SELECT '' AS xxx, point(f1) AS center
FROM CIRCLE_TBL;
SELECT '' AS xxx, (@@ f1) AS center
FROM CIRCLE_TBL;
SELECT '' AS xxx, (@@ f1) AS center
FROM POLYGON_TBL
WHERE (# f1) > 2;
-- "is horizontal" function
SELECT '' AS two, p1.f1 SELECT '' AS two, p1.f1
FROM POINT_TBL p1 FROM POINT_TBL p1
WHERE ishorizontal(p1.f1, '(0,0)'::point); WHERE ishorizontal(p1.f1, '(0,0)'::point);
-- "is horizontal" operator
SELECT '' AS two, p1.f1
FROM POINT_TBL p1
WHERE p1.f1 ?- '(0,0)'::point;
-- "is vertical" function
SELECT '' AS one, p1.f1
FROM POINT_TBL p1
WHERE isvertical(p1.f1, '(5.1,34.5)'::point);
-- "is vertical" operator
SELECT '' AS one, p1.f1 SELECT '' AS one, p1.f1
FROM POINT_TBL p1 FROM POINT_TBL p1
WHERE isvertical(p1.f1, '(5.1,34.5)'::point); WHERE p1.f1 ?| '(5.1,34.5)'::point;
-- --
-- Line segments -- Line segments
-- --
-- intersection
SELECT '' AS xxx, p.f1, l.s, l.s # p.f1 AS intersection
FROM LSEG_TBL l, POINT_TBL p;
-- closest point
SELECT '' AS xxx, p.f1, l.s, p.f1 ## l.s AS closest
FROM LSEG_TBL l, POINT_TBL p;
-- --
-- Lines -- Lines
-- --
...@@ -24,17 +58,22 @@ SELECT '' AS one, p1.f1 ...@@ -24,17 +58,22 @@ SELECT '' AS one, p1.f1
-- Boxes -- Boxes
-- --
SELECT center(f1) FROM BOX_TBL; SELECT box(f1) AS box FROM CIRCLE_TBL;
SELECT box(f1) FROM CIRCLE_TBL;
-- translation -- translation
SELECT '' AS count, b.f1 + p.f1 SELECT '' AS count, b.f1 + p.f1 AS translation
FROM BOX_TBL b, POINT_TBL p; FROM BOX_TBL b, POINT_TBL p;
SELECT '' AS count, b.f1 - p.f1 AS translation
FROM BOX_TBL b, POINT_TBL p;
-- scaling and rotation -- scaling and rotation
SELECT '' AS count, b.f1 * p.f1 SELECT '' AS count, b.f1 * p.f1 AS rotation
FROM BOX_TBL b, POINT_TBL p; FROM BOX_TBL b, POINT_TBL p;
SELECT '' AS count, b.f1 / p.f1 AS rotation
FROM BOX_TBL b, POINT_TBL p
WHERE (p.f1 <-> '(0,0)'::point) >= 1;
-- --
-- Paths -- Paths
...@@ -42,17 +81,17 @@ SELECT '' AS count, b.f1 * p.f1 ...@@ -42,17 +81,17 @@ SELECT '' AS count, b.f1 * p.f1
SET geqo TO 'off'; SET geqo TO 'off';
SELECT points(f1) AS npoints, f1 AS path FROM PATH_TBL; SELECT '' AS xxx, points(f1) AS npoints, f1 AS path FROM PATH_TBL;
SELECT path(f1) FROM POLYGON_TBL; SELECT '' AS xxx, path(f1) FROM POLYGON_TBL;
-- translation -- translation
SELECT '' AS eight, p1.f1 + '(10,10)'::point AS dist_add SELECT '' AS eight, p1.f1 + '(10,10)'::point AS dist_add
FROM PATH_TBL p1; FROM PATH_TBL p1;
-- scaling and rotation -- scaling and rotation
SELECT '' AS eight, p1.f1 * '(2,-1)'::point AS dist_mul SELECT '' AS eight, p1.f1 * '(2,-1)'::point AS dist_mul
FROM PATH_TBL p1; FROM PATH_TBL p1;
RESET geqo; RESET geqo;
...@@ -60,28 +99,50 @@ RESET geqo; ...@@ -60,28 +99,50 @@ RESET geqo;
-- Polygons -- Polygons
-- --
SELECT points(f1) AS npoints, f1 AS polygon FROM POLYGON_TBL; -- containment
SELECT '' AS xxx, p.f1, poly.f1, poly.f1 ~ p.f1 AS contains
FROM POLYGON_TBL poly, POINT_TBL p;
SELECT polygon(f1) FROM BOX_TBL; SELECT '' AS xxx, p.f1, poly.f1, p.f1 @ poly.f1 AS contained
FROM POLYGON_TBL poly, POINT_TBL p;
SELECT polygon(f1) FROM PATH_TBL WHERE isclosed(f1); SELECT '' AS xxx, points(f1) AS npoints, f1 AS polygon
FROM POLYGON_TBL;
SELECT f1 AS open_path, polygon( pclose(f1)) AS polygon FROM PATH_TBL WHERE isopen(f1); SELECT '' AS xxx, polygon(f1)
FROM BOX_TBL;
SELECT '' AS xxx, polygon(f1)
FROM PATH_TBL WHERE isclosed(f1);
SELECT '' AS xxx, f1 AS open_path, polygon( pclose(f1)) AS polygon
FROM PATH_TBL
WHERE isopen(f1);
-- convert circles to polygons using the default number of points -- convert circles to polygons using the default number of points
SELECT polygon(f1) FROM CIRCLE_TBL; SELECT '' AS xxx, polygon(f1)
FROM CIRCLE_TBL;
-- convert the circle to an 8-point polygon -- convert the circle to an 8-point polygon
SELECT polygon(8, f1) FROM CIRCLE_TBL; SELECT '' AS xxx, polygon(8, f1)
FROM CIRCLE_TBL;
-- --
-- Circles -- Circles
-- --
SELECT circle( f1, 50.0) FROM POINT_TBL; SELECT '' AS xxx, circle(f1, 50.0)
FROM POINT_TBL;
SELECT '' AS xxx, circle(f1)
FROM BOX_TBL;
SELECT '' AS xxx, circle(f1)
FROM POLYGON_TBL
WHERE (# f1) >= 2;
SELECT '' AS twentyfour, c1.f1 AS circle, p1.f1 AS point, (p1.f1 <===> c1.f1) AS distance SELECT '' AS twentyfour, c1.f1 AS circle, p1.f1 AS point, (p1.f1 <-> c1.f1) AS distance
from CIRCLE_TBL c1, POINT_TBL p1 FROM CIRCLE_TBL c1, POINT_TBL p1
WHERE (p1.f1 <===> c1.f1) > 0 WHERE (p1.f1 <-> c1.f1) > 0
ORDER BY distance, circle; ORDER BY distance, circle;
...@@ -21,5 +21,5 @@ select * from LSEG_TBL; ...@@ -21,5 +21,5 @@ select * from LSEG_TBL;
SELECT * FROM LSEG_TBL WHERE s <= '[(1,2),(3,4)]'::lseg; SELECT * FROM LSEG_TBL WHERE s <= '[(1,2),(3,4)]'::lseg;
SELECT * FROM LSEG_TBL WHERE (s <===> '[(1,2),(3,4)]'::lseg) < 10; SELECT * FROM LSEG_TBL WHERE (s <-> '[(1,2),(3,4)]'::lseg) < 10;
...@@ -25,54 +25,54 @@ INSERT INTO POINT_TBL(f1) VALUES ('(10.0,10.0'); ...@@ -25,54 +25,54 @@ INSERT INTO POINT_TBL(f1) VALUES ('(10.0,10.0');
SELECT '' AS six, POINT_TBL.*; SELECT '' AS six, POINT_TBL.*;
-- left of -- left of
SELECT '' AS three, p.* FROM POINT_TBL p WHERE p.f1 !< '(0.0, 0.0)'; SELECT '' AS three, p.* FROM POINT_TBL p WHERE p.f1 << '(0.0, 0.0)';
-- right of -- right of
SELECT '' AS three, p.* FROM POINT_TBL p WHERE '(0.0,0.0)' !> p.f1; SELECT '' AS three, p.* FROM POINT_TBL p WHERE '(0.0,0.0)' >> p.f1;
-- above -- above
SELECT '' AS one, p.* FROM POINT_TBL p WHERE '(0.0,0.0)' !^ p.f1; SELECT '' AS one, p.* FROM POINT_TBL p WHERE '(0.0,0.0)' >^ p.f1;
-- below -- below
SELECT '' AS one, p.* FROM POINT_TBL p WHERE p.f1 !| '(0.0, 0.0)'; SELECT '' AS one, p.* FROM POINT_TBL p WHERE p.f1 <^ '(0.0, 0.0)';
-- equal -- equal
SELECT '' AS one, p.* FROM POINT_TBL p WHERE p.f1 =|= '(5.1, 34.5)'; SELECT '' AS one, p.* FROM POINT_TBL p WHERE p.f1 ~= '(5.1, 34.5)';
-- point in box -- point in box
SELECT '' AS three, p.* FROM POINT_TBL p SELECT '' AS three, p.* FROM POINT_TBL p
WHERE p.f1 ===> '(0,0,100,100)'; WHERE p.f1 @ '(0,0,100,100)'::box;
SELECT '' AS three, p.* FROM POINT_TBL p SELECT '' AS three, p.* FROM POINT_TBL p
WHERE not on_pb(p.f1,'(0,0,100,100)'::box); WHERE not p.f1 @ '(0,0,100,100)'::box;
SELECT '' AS two, p.* FROM POINT_TBL p SELECT '' AS two, p.* FROM POINT_TBL p
WHERE on_ppath(p.f1,'[(0,0),(-10,0),(-10,10)]'::path); WHERE p.f1 @ '[(0,0),(-10,0),(-10,10)]'::path;
SELECT '' AS six, p.f1, p.f1 <===> '(0,0)'::point AS dist SELECT '' AS six, p.f1, p.f1 <-> '(0,0)'::point AS dist
FROM POINT_TBL p FROM POINT_TBL p
ORDER BY dist; ORDER BY dist;
SET geqo TO 'off'; SET geqo TO 'off';
SELECT '' AS thirtysix, p1.f1 AS point1, p2.f1 AS point2, p1.f1 <===> p2.f1 AS dist SELECT '' AS thirtysix, p1.f1 AS point1, p2.f1 AS point2, p1.f1 <-> p2.f1 AS dist
FROM POINT_TBL p1, POINT_TBL p2 FROM POINT_TBL p1, POINT_TBL p2
ORDER BY dist; ORDER BY dist;
SELECT '' AS thirty, p1.f1 AS point1, p2.f1 AS point2 SELECT '' AS thirty, p1.f1 AS point1, p2.f1 AS point2
FROM POINT_TBL p1, POINT_TBL p2 FROM POINT_TBL p1, POINT_TBL p2
WHERE (p1.f1 <===> p2.f1) > 3; WHERE (p1.f1 <-> p2.f1) > 3;
-- put distance result into output to allow sorting with GEQ optimizer - tgl 97/05/10 -- 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 SELECT '' AS fifteen, p1.f1 AS point1, p2.f1 AS point2, (p1.f1 <-> p2.f1) AS distance
FROM POINT_TBL p1, POINT_TBL p2 FROM POINT_TBL p1, POINT_TBL p2
WHERE (p1.f1 <===> p2.f1) > 3 and p1.f1 !< p2.f1 WHERE (p1.f1 <-> p2.f1) > 3 and p1.f1 << p2.f1
ORDER BY distance; ORDER BY distance;
-- put distance result into output to allow sorting with GEQ optimizer - tgl 97/05/10 -- 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 SELECT '' AS three, p1.f1 AS point1, p2.f1 AS point2, (p1.f1 <-> p2.f1) AS distance
FROM POINT_TBL p1, POINT_TBL p2 FROM POINT_TBL p1, POINT_TBL p2
WHERE (p1.f1 <===> p2.f1) > 3 and p1.f1 !< p2.f1 and p1.f1 !^ p2.f1 WHERE (p1.f1 <-> p2.f1) > 3 and p1.f1 << p2.f1 and p1.f1 >^ p2.f1
ORDER BY distance; ORDER BY distance;
RESET geqo; RESET geqo;
......
...@@ -67,17 +67,17 @@ SELECT '' AS zero, p.* ...@@ -67,17 +67,17 @@ SELECT '' AS zero, p.*
-- contained -- contained
SELECT '' AS one, p.* SELECT '' AS one, p.*
FROM POLYGON_TBL p FROM POLYGON_TBL p
WHERE p.f1 @ '(3.0,1.0),(3.0,3.0),(1.0,0.0)'; WHERE p.f1 @ '(3.0,1.0),(3.0,3.0),(1.0,0.0)'::polygon;
-- same -- same
SELECT '' AS one, p.* SELECT '' AS one, p.*
FROM POLYGON_TBL p FROM POLYGON_TBL p
WHERE p.f1 ~= '(3.0,1.0),(3.0,3.0),(1.0,0.0)'; WHERE p.f1 ~= '(3.0,1.0),(3.0,3.0),(1.0,0.0)'::polygon;
-- contains -- contains
SELECT '' AS one, p.* SELECT '' AS one, p.*
FROM POLYGON_TBL p FROM POLYGON_TBL p
WHERE p.f1 ~ '(3.0,1.0),(3.0,3.0),(1.0,0.0)'; WHERE p.f1 ~ '(3.0,1.0),(3.0,3.0),(1.0,0.0)'::polygon;
-- --
-- polygon logic -- polygon logic
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment