annotate schema/isrs_tests.sql @ 2535:73c8762cee60

Stretch area generation: Throw errors instead of returning NULL It is now an error if not both distance marks for the given stretch can be found or no contiguous axis can be constructed between them.
author Tom Gottfried <tom@intevation.de>
date Thu, 07 Mar 2019 12:20:00 +0100
parents 00cac7890574
children dc4fae4bdb8f
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1298
6590208e3ee1 add headers for licensing to some schema files
Fadi Abbud <fadi.abbud@intevation.de>
parents: 578
diff changeset
1 -- This is Free Software under GNU Affero General Public License v >= 3.0
6590208e3ee1 add headers for licensing to some schema files
Fadi Abbud <fadi.abbud@intevation.de>
parents: 578
diff changeset
2 -- without warranty, see README.md and license for details.
6590208e3ee1 add headers for licensing to some schema files
Fadi Abbud <fadi.abbud@intevation.de>
parents: 578
diff changeset
3
6590208e3ee1 add headers for licensing to some schema files
Fadi Abbud <fadi.abbud@intevation.de>
parents: 578
diff changeset
4 -- SPDX-License-Identifier: AGPL-3.0-or-later
6590208e3ee1 add headers for licensing to some schema files
Fadi Abbud <fadi.abbud@intevation.de>
parents: 578
diff changeset
5 -- License-Filename: LICENSES/AGPL-3.0.txt
6590208e3ee1 add headers for licensing to some schema files
Fadi Abbud <fadi.abbud@intevation.de>
parents: 578
diff changeset
6
6590208e3ee1 add headers for licensing to some schema files
Fadi Abbud <fadi.abbud@intevation.de>
parents: 578
diff changeset
7 -- Copyright (C) 2018 by via donau
6590208e3ee1 add headers for licensing to some schema files
Fadi Abbud <fadi.abbud@intevation.de>
parents: 578
diff changeset
8 -- – Österreichische Wasserstraßen-Gesellschaft mbH
6590208e3ee1 add headers for licensing to some schema files
Fadi Abbud <fadi.abbud@intevation.de>
parents: 578
diff changeset
9 -- Software engineering by Intevation GmbH
6590208e3ee1 add headers for licensing to some schema files
Fadi Abbud <fadi.abbud@intevation.de>
parents: 578
diff changeset
10
6590208e3ee1 add headers for licensing to some schema files
Fadi Abbud <fadi.abbud@intevation.de>
parents: 578
diff changeset
11 -- Author(s):
1301
2304778c4432 add headers for licensing to some schema files
Fadi Abbud <fadi.abbud@intevation.de>
parents: 1298
diff changeset
12 -- * Tom Gottfried <tom@intevation.de>
1298
6590208e3ee1 add headers for licensing to some schema files
Fadi Abbud <fadi.abbud@intevation.de>
parents: 578
diff changeset
13
569
ad07846b09d1 Add function to construct isrs from text
Tom Gottfried <tom@intevation.de>
parents:
diff changeset
14 --
ad07846b09d1 Add function to construct isrs from text
Tom Gottfried <tom@intevation.de>
parents:
diff changeset
15 -- pgTAP test script for ISRS location code types and functions
ad07846b09d1 Add function to construct isrs from text
Tom Gottfried <tom@intevation.de>
parents:
diff changeset
16 --
ad07846b09d1 Add function to construct isrs from text
Tom Gottfried <tom@intevation.de>
parents:
diff changeset
17
ad07846b09d1 Add function to construct isrs from text
Tom Gottfried <tom@intevation.de>
parents:
diff changeset
18 SELECT results_eq($$
578
61af85a432bf Fix extraction of object reference code
Tom Gottfried <tom@intevation.de>
parents: 569
diff changeset
19 SELECT isrs_fromText('DEBON03901G007906548')
569
ad07846b09d1 Add function to construct isrs from text
Tom Gottfried <tom@intevation.de>
parents:
diff changeset
20 $$,
ad07846b09d1 Add function to construct isrs from text
Tom Gottfried <tom@intevation.de>
parents:
diff changeset
21 $$
578
61af85a432bf Fix extraction of object reference code
Tom Gottfried <tom@intevation.de>
parents: 569
diff changeset
22 SELECT CAST(('DE', 'BON', '03901', 'G0079', 6548) AS isrs)
569
ad07846b09d1 Add function to construct isrs from text
Tom Gottfried <tom@intevation.de>
parents:
diff changeset
23 $$,
ad07846b09d1 Add function to construct isrs from text
Tom Gottfried <tom@intevation.de>
parents:
diff changeset
24 'Correct ISRS text input gives respective ISRS location code');
ad07846b09d1 Add function to construct isrs from text
Tom Gottfried <tom@intevation.de>
parents:
diff changeset
25
ad07846b09d1 Add function to construct isrs from text
Tom Gottfried <tom@intevation.de>
parents:
diff changeset
26 SELECT throws_ok($$
ad07846b09d1 Add function to construct isrs from text
Tom Gottfried <tom@intevation.de>
parents:
diff changeset
27 SELECT isrs_fromText('DEUXXX039000000005023')
ad07846b09d1 Add function to construct isrs from text
Tom Gottfried <tom@intevation.de>
parents:
diff changeset
28 $$,
ad07846b09d1 Add function to construct isrs from text
Tom Gottfried <tom@intevation.de>
parents:
diff changeset
29 22023, NULL,
ad07846b09d1 Add function to construct isrs from text
Tom Gottfried <tom@intevation.de>
parents:
diff changeset
30 'ISRS text input needs to have correct length');
1629
9d51f022b8ee Introduce SQL function to clip an area to a stretch
Tom Gottfried <tom@intevation.de>
parents: 1301
diff changeset
31
9d51f022b8ee Introduce SQL function to clip an area to a stretch
Tom Gottfried <tom@intevation.de>
parents: 1301
diff changeset
32 SELECT ok(
2081
40711ca3aa19 Add function to get text representation of location code
Tom Gottfried <tom@intevation.de>
parents: 1983
diff changeset
33 'DEBON03901G007906548' = isrs_asText(isrs_fromText('DEBON03901G007906548'))
40711ca3aa19 Add function to get text representation of location code
Tom Gottfried <tom@intevation.de>
parents: 1983
diff changeset
34 ,
40711ca3aa19 Add function to get text representation of location code
Tom Gottfried <tom@intevation.de>
parents: 1983
diff changeset
35 'isrs_asText() is the inverse of isrs_fromText()');
40711ca3aa19 Add function to get text representation of location code
Tom Gottfried <tom@intevation.de>
parents: 1983
diff changeset
36
2535
73c8762cee60 Stretch area generation: Throw errors instead of returning NULL
Tom Gottfried <tom@intevation.de>
parents: 2453
diff changeset
37 SELECT throws_ok($$
73c8762cee60 Stretch area generation: Throw errors instead of returning NULL
Tom Gottfried <tom@intevation.de>
parents: 2453
diff changeset
38 SELECT ISRSrange_points(isrsrange(
73c8762cee60 Stretch area generation: Throw errors instead of returning NULL
Tom Gottfried <tom@intevation.de>
parents: 2453
diff changeset
39 ('AT', 'XXX', '00001', '00000', 0)::isrs,
73c8762cee60 Stretch area generation: Throw errors instead of returning NULL
Tom Gottfried <tom@intevation.de>
parents: 2453
diff changeset
40 ('AT', 'XXX', '00001', '00000', 99999)::isrs))
73c8762cee60 Stretch area generation: Throw errors instead of returning NULL
Tom Gottfried <tom@intevation.de>
parents: 2453
diff changeset
41 $$,
73c8762cee60 Stretch area generation: Throw errors instead of returning NULL
Tom Gottfried <tom@intevation.de>
parents: 2453
diff changeset
42 'P0002', NULL,
73c8762cee60 Stretch area generation: Throw errors instead of returning NULL
Tom Gottfried <tom@intevation.de>
parents: 2453
diff changeset
43 'ISRSrange_points fails if not both distance marks can be found');
73c8762cee60 Stretch area generation: Throw errors instead of returning NULL
Tom Gottfried <tom@intevation.de>
parents: 2453
diff changeset
44
73c8762cee60 Stretch area generation: Throw errors instead of returning NULL
Tom Gottfried <tom@intevation.de>
parents: 2453
diff changeset
45 SELECT throws_ok($$
73c8762cee60 Stretch area generation: Throw errors instead of returning NULL
Tom Gottfried <tom@intevation.de>
parents: 2453
diff changeset
46 SELECT ISRSrange_axis(isrsrange(
73c8762cee60 Stretch area generation: Throw errors instead of returning NULL
Tom Gottfried <tom@intevation.de>
parents: 2453
diff changeset
47 ('AT', 'XXX', '00001', '00000', 0)::isrs,
73c8762cee60 Stretch area generation: Throw errors instead of returning NULL
Tom Gottfried <tom@intevation.de>
parents: 2453
diff changeset
48 ('AT', 'XXX', '00001', '00000', 2)::isrs),
73c8762cee60 Stretch area generation: Throw errors instead of returning NULL
Tom Gottfried <tom@intevation.de>
parents: 2453
diff changeset
49 0)
73c8762cee60 Stretch area generation: Throw errors instead of returning NULL
Tom Gottfried <tom@intevation.de>
parents: 2453
diff changeset
50 $$,
73c8762cee60 Stretch area generation: Throw errors instead of returning NULL
Tom Gottfried <tom@intevation.de>
parents: 2453
diff changeset
51 'P0002', NULL,
73c8762cee60 Stretch area generation: Throw errors instead of returning NULL
Tom Gottfried <tom@intevation.de>
parents: 2453
diff changeset
52 'ISRSrange_axis fails if no contiguous axis can be constructed');
73c8762cee60 Stretch area generation: Throw errors instead of returning NULL
Tom Gottfried <tom@intevation.de>
parents: 2453
diff changeset
53
2081
40711ca3aa19 Add function to get text representation of location code
Tom Gottfried <tom@intevation.de>
parents: 1983
diff changeset
54 SELECT ok(
1629
9d51f022b8ee Introduce SQL function to clip an area to a stretch
Tom Gottfried <tom@intevation.de>
parents: 1301
diff changeset
55 ISRSrange_area(isrsrange(
9d51f022b8ee Introduce SQL function to clip an area to a stretch
Tom Gottfried <tom@intevation.de>
parents: 1301
diff changeset
56 ('AT', 'XXX', '00001', '00000', 0)::isrs,
9d51f022b8ee Introduce SQL function to clip an area to a stretch
Tom Gottfried <tom@intevation.de>
parents: 1301
diff changeset
57 ('AT', 'XXX', '00001', '00000', 1)::isrs),
9d51f022b8ee Introduce SQL function to clip an area to a stretch
Tom Gottfried <tom@intevation.de>
parents: 1301
diff changeset
58 ST_SetSRID('POLYGON((0 1, 0 2, 1 2, 1 1, 0 1))'::geometry, 4326)
9d51f022b8ee Introduce SQL function to clip an area to a stretch
Tom Gottfried <tom@intevation.de>
parents: 1301
diff changeset
59 ) IS NULL,
9d51f022b8ee Introduce SQL function to clip an area to a stretch
Tom Gottfried <tom@intevation.de>
parents: 1301
diff changeset
60 'ISRSrange_area returns NULL, if given area does not intersect with axis');
9d51f022b8ee Introduce SQL function to clip an area to a stretch
Tom Gottfried <tom@intevation.de>
parents: 1301
diff changeset
61
2453
00cac7890574 Improve TAP tests
Tom Gottfried <tom@intevation.de>
parents: 2431
diff changeset
62 SELECT results_eq($$
00cac7890574 Improve TAP tests
Tom Gottfried <tom@intevation.de>
parents: 2431
diff changeset
63 SELECT every(ST_DWithin(
00cac7890574 Improve TAP tests
Tom Gottfried <tom@intevation.de>
parents: 2431
diff changeset
64 ST_Boundary(ISRSrange_area(
00cac7890574 Improve TAP tests
Tom Gottfried <tom@intevation.de>
parents: 2431
diff changeset
65 isrsrange(
00cac7890574 Improve TAP tests
Tom Gottfried <tom@intevation.de>
parents: 2431
diff changeset
66 ('AT', 'XXX', '00001', '00000', 0)::isrs,
00cac7890574 Improve TAP tests
Tom Gottfried <tom@intevation.de>
parents: 2431
diff changeset
67 ('AT', 'XXX', '00001', '00000', 1)::isrs),
00cac7890574 Improve TAP tests
Tom Gottfried <tom@intevation.de>
parents: 2431
diff changeset
68 (SELECT ST_Collect(CAST(area AS geometry))
00cac7890574 Improve TAP tests
Tom Gottfried <tom@intevation.de>
parents: 2431
diff changeset
69 FROM waterway.waterway_area))),
00cac7890574 Improve TAP tests
Tom Gottfried <tom@intevation.de>
parents: 2431
diff changeset
70 geom,
00cac7890574 Improve TAP tests
Tom Gottfried <tom@intevation.de>
parents: 2431
diff changeset
71 1))
00cac7890574 Improve TAP tests
Tom Gottfried <tom@intevation.de>
parents: 2431
diff changeset
72 FROM waterway.distance_marks_virtual
00cac7890574 Improve TAP tests
Tom Gottfried <tom@intevation.de>
parents: 2431
diff changeset
73 WHERE location_code IN(
00cac7890574 Improve TAP tests
Tom Gottfried <tom@intevation.de>
parents: 2431
diff changeset
74 ('AT', 'XXX', '00001', '00000', 0)::isrs,
00cac7890574 Improve TAP tests
Tom Gottfried <tom@intevation.de>
parents: 2431
diff changeset
75 ('AT', 'XXX', '00001', '00000', 1)::isrs)
00cac7890574 Improve TAP tests
Tom Gottfried <tom@intevation.de>
parents: 2431
diff changeset
76 $$,
00cac7890574 Improve TAP tests
Tom Gottfried <tom@intevation.de>
parents: 2431
diff changeset
77 $$
00cac7890574 Improve TAP tests
Tom Gottfried <tom@intevation.de>
parents: 2431
diff changeset
78 SELECT true
00cac7890574 Improve TAP tests
Tom Gottfried <tom@intevation.de>
parents: 2431
diff changeset
79 $$,
1629
9d51f022b8ee Introduce SQL function to clip an area to a stretch
Tom Gottfried <tom@intevation.de>
parents: 1301
diff changeset
80 'Resulting polygon almost ST_Touches points corresponding to stretch');
1983
f9f1babe52ae Fix area generation from multipolygon input
Tom Gottfried <tom@intevation.de>
parents: 1629
diff changeset
81
2398
8481e6266691 Fix corner case in area generation from stretch
Tom Gottfried <tom@intevation.de>
parents: 2232
diff changeset
82 \set test_area 'POLYGON((-1 1, 2 1, 2 -1, -1 -1, -1 1))'
1983
f9f1babe52ae Fix area generation from multipolygon input
Tom Gottfried <tom@intevation.de>
parents: 1629
diff changeset
83 SELECT ok(
f9f1babe52ae Fix area generation from multipolygon input
Tom Gottfried <tom@intevation.de>
parents: 1629
diff changeset
84 2 = ST_NumGeometries(
f9f1babe52ae Fix area generation from multipolygon input
Tom Gottfried <tom@intevation.de>
parents: 1629
diff changeset
85 ISRSrange_area(
f9f1babe52ae Fix area generation from multipolygon input
Tom Gottfried <tom@intevation.de>
parents: 1629
diff changeset
86 isrsrange(
f9f1babe52ae Fix area generation from multipolygon input
Tom Gottfried <tom@intevation.de>
parents: 1629
diff changeset
87 ('AT', 'XXX', '00001', '00000', 0)::isrs,
f9f1babe52ae Fix area generation from multipolygon input
Tom Gottfried <tom@intevation.de>
parents: 1629
diff changeset
88 ('AT', 'XXX', '00001', '00000', 1)::isrs),
f9f1babe52ae Fix area generation from multipolygon input
Tom Gottfried <tom@intevation.de>
parents: 1629
diff changeset
89 ST_SetSRID(ST_Collect(
f9f1babe52ae Fix area generation from multipolygon input
Tom Gottfried <tom@intevation.de>
parents: 1629
diff changeset
90 ST_Translate(:'test_area',
f9f1babe52ae Fix area generation from multipolygon input
Tom Gottfried <tom@intevation.de>
parents: 1629
diff changeset
91 (ST_XMax(:'test_area'::geometry)
f9f1babe52ae Fix area generation from multipolygon input
Tom Gottfried <tom@intevation.de>
parents: 1629
diff changeset
92 - ST_XMin(:'test_area'::geometry))/2
f9f1babe52ae Fix area generation from multipolygon input
Tom Gottfried <tom@intevation.de>
parents: 1629
diff changeset
93 + 0.1, 0),
f9f1babe52ae Fix area generation from multipolygon input
Tom Gottfried <tom@intevation.de>
parents: 1629
diff changeset
94 ST_Translate(:'test_area',
f9f1babe52ae Fix area generation from multipolygon input
Tom Gottfried <tom@intevation.de>
parents: 1629
diff changeset
95 -((ST_XMax(:'test_area'::geometry)
f9f1babe52ae Fix area generation from multipolygon input
Tom Gottfried <tom@intevation.de>
parents: 1629
diff changeset
96 - ST_XMin(:'test_area'::geometry))/2
f9f1babe52ae Fix area generation from multipolygon input
Tom Gottfried <tom@intevation.de>
parents: 1629
diff changeset
97 + 0.1), 0)),
f9f1babe52ae Fix area generation from multipolygon input
Tom Gottfried <tom@intevation.de>
parents: 1629
diff changeset
98 4326))),
2232
7936b46a88d4 Handle invalid multipolygons in area generation from stretch
Tom Gottfried <tom@intevation.de>
parents: 2081
diff changeset
99 'Two polygons intersecting the axis lead to two polygons in result');
7936b46a88d4 Handle invalid multipolygons in area generation from stretch
Tom Gottfried <tom@intevation.de>
parents: 2081
diff changeset
100
7936b46a88d4 Handle invalid multipolygons in area generation from stretch
Tom Gottfried <tom@intevation.de>
parents: 2081
diff changeset
101 SELECT ok(
7936b46a88d4 Handle invalid multipolygons in area generation from stretch
Tom Gottfried <tom@intevation.de>
parents: 2081
diff changeset
102 1 = ST_NumGeometries(
7936b46a88d4 Handle invalid multipolygons in area generation from stretch
Tom Gottfried <tom@intevation.de>
parents: 2081
diff changeset
103 ISRSrange_area(
7936b46a88d4 Handle invalid multipolygons in area generation from stretch
Tom Gottfried <tom@intevation.de>
parents: 2081
diff changeset
104 isrsrange(
7936b46a88d4 Handle invalid multipolygons in area generation from stretch
Tom Gottfried <tom@intevation.de>
parents: 2081
diff changeset
105 ('AT', 'XXX', '00001', '00000', 0)::isrs,
7936b46a88d4 Handle invalid multipolygons in area generation from stretch
Tom Gottfried <tom@intevation.de>
parents: 2081
diff changeset
106 ('AT', 'XXX', '00001', '00000', 1)::isrs),
7936b46a88d4 Handle invalid multipolygons in area generation from stretch
Tom Gottfried <tom@intevation.de>
parents: 2081
diff changeset
107 ST_SetSRID(ST_Collect(
7936b46a88d4 Handle invalid multipolygons in area generation from stretch
Tom Gottfried <tom@intevation.de>
parents: 2081
diff changeset
108 ST_Translate(:'test_area',
7936b46a88d4 Handle invalid multipolygons in area generation from stretch
Tom Gottfried <tom@intevation.de>
parents: 2081
diff changeset
109 (ST_XMax(:'test_area'::geometry)
7936b46a88d4 Handle invalid multipolygons in area generation from stretch
Tom Gottfried <tom@intevation.de>
parents: 2081
diff changeset
110 - ST_XMin(:'test_area'::geometry))/3,
7936b46a88d4 Handle invalid multipolygons in area generation from stretch
Tom Gottfried <tom@intevation.de>
parents: 2081
diff changeset
111 0),
7936b46a88d4 Handle invalid multipolygons in area generation from stretch
Tom Gottfried <tom@intevation.de>
parents: 2081
diff changeset
112 ST_Translate(:'test_area',
7936b46a88d4 Handle invalid multipolygons in area generation from stretch
Tom Gottfried <tom@intevation.de>
parents: 2081
diff changeset
113 -((ST_XMax(:'test_area'::geometry)
7936b46a88d4 Handle invalid multipolygons in area generation from stretch
Tom Gottfried <tom@intevation.de>
parents: 2081
diff changeset
114 - ST_XMin(:'test_area'::geometry))/3),
7936b46a88d4 Handle invalid multipolygons in area generation from stretch
Tom Gottfried <tom@intevation.de>
parents: 2081
diff changeset
115 0)),
7936b46a88d4 Handle invalid multipolygons in area generation from stretch
Tom Gottfried <tom@intevation.de>
parents: 2081
diff changeset
116 4326))),
7936b46a88d4 Handle invalid multipolygons in area generation from stretch
Tom Gottfried <tom@intevation.de>
parents: 2081
diff changeset
117 'Self-intersecting multipolygon leads to one polygon in result');
2431
48495bd3081d Construct stretch area between distance marks also from non-contiguous axis
Tom Gottfried <tom@intevation.de>
parents: 2398
diff changeset
118
2453
00cac7890574 Improve TAP tests
Tom Gottfried <tom@intevation.de>
parents: 2431
diff changeset
119 SELECT results_eq($$
00cac7890574 Improve TAP tests
Tom Gottfried <tom@intevation.de>
parents: 2431
diff changeset
120 SELECT every(ST_DWithin(
00cac7890574 Improve TAP tests
Tom Gottfried <tom@intevation.de>
parents: 2431
diff changeset
121 ST_Boundary(ISRSrange_area(
00cac7890574 Improve TAP tests
Tom Gottfried <tom@intevation.de>
parents: 2431
diff changeset
122 isrsrange(
00cac7890574 Improve TAP tests
Tom Gottfried <tom@intevation.de>
parents: 2431
diff changeset
123 ('AT', 'XXX', '00001', '00000', 0)::isrs,
00cac7890574 Improve TAP tests
Tom Gottfried <tom@intevation.de>
parents: 2431
diff changeset
124 ('AT', 'XXX', '00001', '00000', 2)::isrs),
00cac7890574 Improve TAP tests
Tom Gottfried <tom@intevation.de>
parents: 2431
diff changeset
125 (SELECT ST_Collect(CAST(area AS geometry))
00cac7890574 Improve TAP tests
Tom Gottfried <tom@intevation.de>
parents: 2431
diff changeset
126 FROM waterway.waterway_area))),
00cac7890574 Improve TAP tests
Tom Gottfried <tom@intevation.de>
parents: 2431
diff changeset
127 geom,
00cac7890574 Improve TAP tests
Tom Gottfried <tom@intevation.de>
parents: 2431
diff changeset
128 1))
00cac7890574 Improve TAP tests
Tom Gottfried <tom@intevation.de>
parents: 2431
diff changeset
129 FROM waterway.distance_marks_virtual
00cac7890574 Improve TAP tests
Tom Gottfried <tom@intevation.de>
parents: 2431
diff changeset
130 WHERE location_code IN(
2431
48495bd3081d Construct stretch area between distance marks also from non-contiguous axis
Tom Gottfried <tom@intevation.de>
parents: 2398
diff changeset
131 ('AT', 'XXX', '00001', '00000', 0)::isrs,
2453
00cac7890574 Improve TAP tests
Tom Gottfried <tom@intevation.de>
parents: 2431
diff changeset
132 ('AT', 'XXX', '00001', '00000', 2)::isrs)
00cac7890574 Improve TAP tests
Tom Gottfried <tom@intevation.de>
parents: 2431
diff changeset
133 $$,
00cac7890574 Improve TAP tests
Tom Gottfried <tom@intevation.de>
parents: 2431
diff changeset
134 $$
00cac7890574 Improve TAP tests
Tom Gottfried <tom@intevation.de>
parents: 2431
diff changeset
135 SELECT true
00cac7890574 Improve TAP tests
Tom Gottfried <tom@intevation.de>
parents: 2431
diff changeset
136 $$,
2431
48495bd3081d Construct stretch area between distance marks also from non-contiguous axis
Tom Gottfried <tom@intevation.de>
parents: 2398
diff changeset
137 'Area generated from non-matching distance mark and non-contiguous axis');