1# Copyright 2013 Luciad (http://www.luciad.com) 2# 3# Licensed under the Apache License, Version 2.0 (the "License"); 4# you may not use this file except in compliance with the License. 5# You may obtain a copy of the License at 6# 7# http://www.apache.org/licenses/LICENSE-2.0 8# 9# Unless required by applicable law or agreed to in writing, software 10# distributed under the License is distributed on an "AS IS" BASIS, 11# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12# See the License for the specific language governing permissions and 13# limitations under the License. 14 15require_relative 'gpkg' 16 17if ENV['GPKG_HAVE_GEOM_FUNC'] 18 describe 'ST_Area' do 19 it 'should return NULL when passed NULL' do 20 expect('SELECT ST_Area(NULL)').to have_result nil 21 end 22 23 it 'should raise an error on invalid input' do 24 expect("SELECT ST_Area(x'FFFFFFFFFF')").to raise_sql_error 25 end 26 27 it 'should return zero for 0 and 1 dimensional geometry' do 28 expect("SELECT ST_Area(GeomFromText('Point(1 0)'))").to have_result 0 29 expect("SELECT ST_Area(GeomFromText('LineString(1 1, 2 2)'))").to have_result 0 30 end 31 32 it 'should return a valid value for 2 dimensional geometry' do 33 expect("SELECT ST_Area(GeomFromText('Polygon((0 0, 2 0, 1 2, 0 0))'))").to have_result 2.0 34 end 35 end 36 37 describe 'ST_Length' do 38 it 'should return NULL when passed NULL' do 39 expect('SELECT ST_Length(NULL)').to have_result nil 40 end 41 42 it 'should raise an error on invalid input' do 43 expect("SELECT ST_Length(x'FFFFFFFFFF')").to raise_sql_error 44 end 45 46 it 'should return zero for 0 dimensional geometry' do 47 expect("SELECT ST_Area(GeomFromText('Point(1 0)'))").to have_result 0 48 end 49 50 it 'should return a valid value for 1 and 2 dimensional geometry' do 51 expect("SELECT ST_Length(GeomFromText('LineString(1 1, 2 2)'))").to have_result 1.4142135623730951 52 expect("SELECT ST_Length(GeomFromText('Polygon((0 0, 2 0, 1 2, 0 0))'))").to have_result 6.47213595499958 53 end 54 end 55 56 describe 'ST_IsClosed' do 57 it 'should return NULL when passed NULL' do 58 expect('SELECT ST_IsClosed(NULL)').to have_result nil 59 end 60 61 it 'should raise an error on invalid input' do 62 expect("SELECT ST_IsClosed(x'FFFFFFFFFF')").to raise_sql_error 63 expect("SELECT ST_IsClosed(GeomFromText('Point(1 0)'))").to raise_sql_error 64 expect("SELECT ST_IsClosed(GeomFromText('Polygon((0 0, 2 0, 1 2, 0 0))'))").to raise_sql_error 65 66 end 67 68 it 'should return a valid value' do 69 expect("SELECT ST_IsClosed(GeomFromText('LineString(1 1, 2 2)'))").to have_result 0 70 end 71 end 72 73 describe 'ST_IsSimple' do 74 it 'should return NULL when passed NULL' do 75 expect('SELECT ST_IsSimple(NULL)').to have_result nil 76 end 77 78 it 'should raise an error on invalid input' do 79 expect("SELECT ST_IsSimple(x'FFFFFFFFFF')").to raise_sql_error 80 end 81 82 it 'should return a valid value' do 83 expect("SELECT ST_IsSimple(GeomFromText('Point(1 0)'))").to have_result 1 84 expect("SELECT ST_IsSimple(GeomFromText('LineString(1 1, 2 2)'))").to have_result 1 85 expect("SELECT ST_IsSimple(GeomFromText('Polygon((0 0, 2 0, 1 2, 0 0))'))").to have_result 1 86 end 87 end 88 89 describe 'ST_IsRing' do 90 it 'should return NULL when passed NULL' do 91 expect('SELECT ST_IsRing(NULL)').to have_result nil 92 end 93 94 it 'should raise an error on invalid input' do 95 expect("SELECT ST_IsRing(x'FFFFFFFFFF')").to raise_sql_error 96 end 97 98 it 'should return a valid value' do 99 expect("SELECT ST_IsRing(GeomFromText('Point(1 0)'))").to have_result 0 100 expect("SELECT ST_IsRing(GeomFromText('LineString(1 1, 2 2)'))").to have_result 0 101 expect("SELECT ST_IsRing(GeomFromText('Polygon((0 0, 2 0, 1 2, 0 0))'))").to have_result 0 102 end 103 end 104 105 describe 'ST_IsValid' do 106 it 'should return NULL when passed NULL' do 107 expect('SELECT ST_IsValid(NULL)').to have_result nil 108 end 109 110 it 'should raise an error on invalid input' do 111 expect("SELECT ST_IsValid(x'FFFFFFFFFF')").to raise_sql_error 112 end 113 114 it 'should return a valid value' do 115 expect("SELECT ST_IsValid(GeomFromText('Point(1 0)'))").to have_result 1 116 expect("SELECT ST_IsValid(GeomFromText('Point EMPTY'))").to have_result 1 117 expect("SELECT ST_IsValid(GeomFromText('LineString(1 1, 2 2)'))").to have_result 1 118 expect("SELECT ST_IsValid(GeomFromText('LineString EMPTY'))").to have_result 1 119 expect("SELECT ST_IsValid(GeomFromText('Polygon((0 0, 2 0, 1 2, 0 0))'))").to have_result 1 120 expect("SELECT ST_IsValid(GeomFromText('Polygon empty'))").to have_result 1 121 expect("SELECT ST_IsValid(GeomFromText('MultiPoint((1 0),(1 2),EMPTY)'))").to have_result 1 122 expect("SELECT ST_IsValid(GeomFromText('MultiPoint empty'))").to have_result 1 123 expect("SELECT ST_IsValid(GeomFromText('MultiLineString((1 1, 2 2),(2 2, 1 1),EMPTY)'))").to have_result 1 124 expect("SELECT ST_IsValid(GeomFromText('MultiLineString EMPTY'))").to have_result 1 125 expect("SELECT ST_IsValid(GeomFromText('MultiPolygon(((0 0, 2 0, 1 2, 0 0)), EMPTY)'))").to have_result 1 126 expect("SELECT ST_IsValid(GeomFromText('MultiPolygon empty'))").to have_result 1 127 expect("SELECT ST_IsValid(GeomFromText('GeometryCollection empty'))").to have_result 1 128 expect("SELECT ST_IsValid(GeomFromText('GeometryCollection (point(1 2), linestring(1 3, 4 5, 7 2))'))").to have_result 1 129 end 130 end 131 132 describe 'ST_Relate' do 133 it 'should return NULL when either argument is NULL' do 134 expect("SELECT ST_Relate(NULL, GeomFromText('Polygon((0 0, 2 0, 1 2, 0 0))'), '')").to have_result nil 135 expect("SELECT ST_Relate(GeomFromText('Polygon((0 0, 2 0, 1 2, 0 0))'), NULL, '')").to have_result nil 136 expect("SELECT ST_Relate(NULL, NULL, '')").to have_result nil 137 expect("SELECT ST_Relate(GeomFromText('Polygon((1 1, 2 1, 2 2, 1 2, 1 1))'), GeomFromText('Polygon((0 0, 3 0, 3 3, 0 3, 0 0))'), NULL)").to have_result nil 138 end 139 140 it 'should raise an error on invalid input' do 141 expect("SELECT ST_Relate(x'FFFFFFFFFF', GeomFromText('Polygon((0 0, 2 0, 1 2, 0 0))'), '')").to raise_sql_error 142 expect("SELECT ST_Relate(GeomFromText('Polygon((0 0, 2 0, 1 2, 0 0))'), x'FFFFFFFFFF', '')").to raise_sql_error 143 expect("SELECT ST_Relate(x'FFFFFFFFFF', x'FFFFFFFFFF', '')").to raise_sql_error 144 expect("SELECT ST_Relate(GeomFromText('Polygon((1 1, 2 1, 2 2, 1 2, 1 1))'), GeomFromText('Polygon((0 0, 3 0, 3 3, 0 3, 0 0))'), '')").to raise_sql_error 145 expect("SELECT ST_Relate(GeomFromText('Polygon((1 1, 2 1, 2 2, 1 2, 1 1))'), GeomFromText('Polygon((0 0, 3 0, 3 3, 0 3, 0 0))'), 'Flub')").to raise_sql_error 146 end 147 148 it 'should return a valid value' do 149 expect("SELECT ST_Relate(GeomFromText('Polygon((1 1, 2 1, 2 2, 1 2, 1 1))'), GeomFromText('Polygon((0 0, 3 0, 3 3, 0 3, 0 0))'), 'T*F**F***')").to have_result 1 150 expect("SELECT ST_Relate(GeomFromText('Polygon((0 0, 3 0, 3 3, 0 3, 0 0))'), GeomFromText('Polygon((1 1, 2 1, 2 2, 1 2, 1 1))'), 'T*F**F***')").to have_result 0 151 end 152 end 153 154 describe 'ST_Disjoint' do 155 it 'should return NULL when either argument is NULL' do 156 expect("SELECT ST_Disjoint(NULL, GeomFromText('Polygon((0 0, 2 0, 1 2, 0 0))'))").to have_result nil 157 expect("SELECT ST_Disjoint(GeomFromText('Polygon((0 0, 2 0, 1 2, 0 0))'), NULL)").to have_result nil 158 expect('SELECT ST_Disjoint(NULL, NULL)').to have_result nil 159 end 160 161 it 'should raise an error on invalid input' do 162 expect("SELECT ST_Disjoint(x'FFFFFFFFFF', GeomFromText('Polygon((0 0, 2 0, 1 2, 0 0))'))").to raise_sql_error 163 expect("SELECT ST_Disjoint(GeomFromText('Polygon((0 0, 2 0, 1 2, 0 0))'), x'FFFFFFFFFF')").to raise_sql_error 164 expect("SELECT ST_Disjoint(x'FFFFFFFFFF', x'FFFFFFFFFF')").to raise_sql_error 165 end 166 167 it 'should return a valid value' do 168 expect("SELECT ST_Disjoint(GeomFromText('Polygon((0 0, 2 0, 1 2, 0 0))'), GeomFromText('Polygon((0 0, 2 0, 1 2, 0 0))'))").to have_result 0 169 expect("SELECT ST_Disjoint(GeomFromText('Polygon((0 10, 2 10, 1 12, 0 10))'), GeomFromText('Polygon((0 0, 2 0, 1 2, 0 0))'))").to have_result 1 170 end 171 end 172 173 describe 'ST_Intersects' do 174 it 'should return NULL when either argument is NULL' do 175 expect("SELECT ST_Intersects(NULL, GeomFromText('Polygon((0 0, 2 0, 1 2, 0 0))'))").to have_result nil 176 expect("SELECT ST_Intersects(GeomFromText('Polygon((0 0, 2 0, 1 2, 0 0))'), NULL)").to have_result nil 177 expect('SELECT ST_Intersects(NULL, NULL)').to have_result nil 178 end 179 180 it 'should raise an error on invalid input' do 181 expect("SELECT ST_Intersects(x'FFFFFFFFFF', GeomFromText('Polygon((0 0, 2 0, 1 2, 0 0))'))").to raise_sql_error 182 expect("SELECT ST_Intersects(GeomFromText('Polygon((0 0, 2 0, 1 2, 0 0))'), x'FFFFFFFFFF')").to raise_sql_error 183 expect("SELECT ST_Intersects(x'FFFFFFFFFF', x'FFFFFFFFFF')").to raise_sql_error 184 end 185 186 it 'should return a valid value' do 187 expect("SELECT ST_Intersects(GeomFromText('Polygon((0 0, 2 0, 1 2, 0 0))'), GeomFromText('Polygon((0 0, 2 0, 1 2, 0 0))'))").to have_result 1 188 expect("SELECT ST_Intersects(GeomFromText('Polygon((0 10, 2 10, 1 12, 0 10))'), GeomFromText('Polygon((0 0, 2 0, 1 2, 0 0))'))").to have_result 0 189 end 190 end 191 192 describe 'ST_Touches' do 193 it 'should return NULL when either argument is NULL' do 194 expect("SELECT ST_Touches(NULL, GeomFromText('Polygon((0 0, 2 0, 1 2, 0 0))'))").to have_result nil 195 expect("SELECT ST_Touches(GeomFromText('Polygon((0 0, 2 0, 1 2, 0 0))'), NULL)").to have_result nil 196 expect('SELECT ST_Touches(NULL, NULL)').to have_result nil 197 end 198 199 it 'should raise an error on invalid input' do 200 expect("SELECT ST_Touches(x'FFFFFFFFFF', GeomFromText('Polygon((0 0, 2 0, 1 2, 0 0))'))").to raise_sql_error 201 expect("SELECT ST_Touches(GeomFromText('Polygon((0 0, 2 0, 1 2, 0 0))'), x'FFFFFFFFFF')").to raise_sql_error 202 expect("SELECT ST_Touches(x'FFFFFFFFFF', x'FFFFFFFFFF')").to raise_sql_error 203 end 204 205 it 'should return a valid value' do 206 expect("SELECT ST_Touches(GeomFromText('Polygon((0 0, 2 0, 0 2, 0 0))'), GeomFromText('Polygon((0 2, 2 0, 2 2, 0 2))'))").to have_result 1 207 expect("SELECT ST_Touches(GeomFromText('Polygon((0 10, 2 10, 1 12, 0 10))'), GeomFromText('Polygon((0 0, 2 0, 1 2, 0 0))'))").to have_result 0 208 end 209 end 210 211 describe 'ST_Crosses' do 212 it 'should return NULL when either argument is NULL' do 213 expect("SELECT ST_Crosses(NULL, GeomFromText('Polygon((0 0, 2 0, 1 2, 0 0))'))").to have_result nil 214 expect("SELECT ST_Crosses(GeomFromText('Polygon((0 0, 2 0, 1 2, 0 0))'), NULL)").to have_result nil 215 expect('SELECT ST_Crosses(NULL, NULL)').to have_result nil 216 end 217 218 it 'should raise an error on invalid input' do 219 expect("SELECT ST_Crosses(x'FFFFFFFFFF', GeomFromText('Polygon((0 0, 2 0, 1 2, 0 0))'))").to raise_sql_error 220 expect("SELECT ST_Crosses(GeomFromText('Polygon((0 0, 2 0, 1 2, 0 0))'), x'FFFFFFFFFF')").to raise_sql_error 221 expect("SELECT ST_Crosses(x'FFFFFFFFFF', x'FFFFFFFFFF')").to raise_sql_error 222 end 223 224 it 'should return a valid value' do 225 expect("SELECT ST_Crosses(GeomFromText('LineString(0 0, 2 2)'), GeomFromText('LineString(0 2, 2 0)'))").to have_result 1 226 expect("SELECT ST_Crosses(GeomFromText('LineString(0 0, 2 2)'), GeomFromText('LineString(10 2, 12 0)'))").to have_result 0 227 end 228 end 229 230 describe 'ST_Within' do 231 it 'should return NULL when either argument is NULL' do 232 expect("SELECT ST_Within(NULL, GeomFromText('Polygon((0 0, 2 0, 1 2, 0 0))'))").to have_result nil 233 expect("SELECT ST_Within(GeomFromText('Polygon((0 0, 2 0, 1 2, 0 0))'), NULL)").to have_result nil 234 expect('SELECT ST_Within(NULL, NULL)').to have_result nil 235 end 236 237 it 'should raise an error on invalid input' do 238 expect("SELECT ST_Within(x'FFFFFFFFFF', GeomFromText('Polygon((0 0, 2 0, 1 2, 0 0))'))").to raise_sql_error 239 expect("SELECT ST_Within(GeomFromText('Polygon((0 0, 2 0, 1 2, 0 0))'), x'FFFFFFFFFF')").to raise_sql_error 240 expect("SELECT ST_Within(x'FFFFFFFFFF', x'FFFFFFFFFF')").to raise_sql_error 241 end 242 243 it 'should return a valid value' do 244 expect("SELECT ST_Within(GeomFromText('Polygon((1 1, 2 1, 2 2, 1 2, 1 1))'), GeomFromText('Polygon((0 0, 3 0, 3 3, 0 3, 0 0))'))").to have_result 1 245 expect("SELECT ST_Within(GeomFromText('Polygon((0 0, 3 0, 3 3, 0 3, 0 0))'), GeomFromText('Polygon((1 1, 2 1, 2 2, 1 2, 1 1))'))").to have_result 0 246 end 247 end 248 249 describe 'ST_Contains' do 250 it 'should return NULL when either argument is NULL' do 251 expect("SELECT ST_Contains(NULL, GeomFromText('Polygon((0 0, 2 0, 1 2, 0 0))'))").to have_result nil 252 expect("SELECT ST_Contains(GeomFromText('Polygon((0 0, 2 0, 1 2, 0 0))'), NULL)").to have_result nil 253 expect('SELECT ST_Contains(NULL, NULL)').to have_result nil 254 end 255 256 it 'should raise an error on invalid input' do 257 expect("SELECT ST_Contains(x'FFFFFFFFFF', GeomFromText('Polygon((0 0, 2 0, 1 2, 0 0))'))").to raise_sql_error 258 expect("SELECT ST_Contains(GeomFromText('Polygon((0 0, 2 0, 1 2, 0 0))'), x'FFFFFFFFFF')").to raise_sql_error 259 expect("SELECT ST_Contains(x'FFFFFFFFFF', x'FFFFFFFFFF')").to raise_sql_error 260 end 261 262 it 'should return a valid value' do 263 expect("SELECT ST_Contains(GeomFromText('Polygon((1 1, 2 1, 2 2, 1 2, 1 1))'), GeomFromText('Polygon((0 0, 3 0, 3 3, 0 3, 0 0))'))").to have_result 0 264 expect("SELECT ST_Contains(GeomFromText('Polygon((0 0, 3 0, 3 3, 0 3, 0 0))'), GeomFromText('Polygon((1 1, 2 1, 2 2, 1 2, 1 1))'))").to have_result 1 265 end 266 end 267 268 describe 'ST_Overlaps' do 269 it 'should return NULL when either argument is NULL' do 270 expect("SELECT ST_Overlaps(NULL, GeomFromText('Polygon((0 0, 2 0, 1 2, 0 0))'))").to have_result nil 271 expect("SELECT ST_Overlaps(GeomFromText('Polygon((0 0, 2 0, 1 2, 0 0))'), NULL)").to have_result nil 272 expect('SELECT ST_Overlaps(NULL, NULL)').to have_result nil 273 end 274 275 it 'should raise an error on invalid input' do 276 expect("SELECT ST_Overlaps(x'FFFFFFFFFF', GeomFromText('Polygon((0 0, 2 0, 1 2, 0 0))'))").to raise_sql_error 277 expect("SELECT ST_Overlaps(GeomFromText('Polygon((0 0, 2 0, 1 2, 0 0))'), x'FFFFFFFFFF')").to raise_sql_error 278 expect("SELECT ST_Overlaps(x'FFFFFFFFFF', x'FFFFFFFFFF')").to raise_sql_error 279 end 280 281 it 'should return a valid value' do 282 expect("SELECT ST_Overlaps(GeomFromText('Polygon((1 1, 2 1, 2 2, 1 2, 1 1))'), GeomFromText('Polygon((0 0, 3 0, 3 3, 0 3, 0 0))'))").to have_result 0 283 expect("SELECT ST_Overlaps(GeomFromText('Polygon((0 0, 3 0, 3 3, 0 3, 0 0))'),GeomFromText('Polygon((1 0, 4 0, 4 3, 1 3, 1 0))'))").to have_result 1 284 end 285 end 286 287 describe 'ST_Equals' do 288 it 'should return NULL when either argument is NULL' do 289 expect("SELECT ST_Equals(NULL, GeomFromText('Polygon((0 0, 2 0, 1 2, 0 0))'))").to have_result nil 290 expect("SELECT ST_Equals(GeomFromText('Polygon((0 0, 2 0, 1 2, 0 0))'), NULL)").to have_result nil 291 expect('SELECT ST_Equals(NULL, NULL)').to have_result nil 292 end 293 294 it 'should raise an error on invalid input' do 295 expect("SELECT ST_Equals(x'FFFFFFFFFF', GeomFromText('Polygon((0 0, 2 0, 1 2, 0 0))'))").to raise_sql_error 296 expect("SELECT ST_Equals(GeomFromText('Polygon((0 0, 2 0, 1 2, 0 0))'), x'FFFFFFFFFF')").to raise_sql_error 297 expect("SELECT ST_Equals(x'FFFFFFFFFF', x'FFFFFFFFFF')").to raise_sql_error 298 end 299 300 it 'should return a valid value' do 301 expect("SELECT ST_Equals(GeomFromText('Polygon((0 0, 2 0, 0 2, 0 0))'), GeomFromText('Polygon((0 0, 2 0, 0 2, 0 0))'))").to have_result 1 302 expect("SELECT ST_Equals(GeomFromText('Polygon((0 10, 2 10, 1 12, 0 10))'), GeomFromText('Polygon((0 0, 2 0, 1 2, 0 0))'))").to have_result 0 303 end 304 end 305 306 describe 'ST_Covers' do 307 if geos_version[0] > 3 || geos_version[1] >= 3 308 it 'should return NULL when either argument is NULL' do 309 expect("SELECT ST_Covers(NULL, GeomFromText('Polygon((0 0, 2 0, 1 2, 0 0))'))").to have_result nil 310 expect("SELECT ST_Covers(GeomFromText('Polygon((0 0, 2 0, 1 2, 0 0))'), NULL)").to have_result nil 311 expect('SELECT ST_Covers(NULL, NULL)').to have_result nil 312 end 313 314 it 'should raise an error on invalid input' do 315 expect("SELECT ST_Covers(x'FFFFFFFFFF', GeomFromText('Polygon((0 0, 2 0, 1 2, 0 0))'))").to raise_sql_error 316 expect("SELECT ST_Covers(GeomFromText('Polygon((0 0, 2 0, 1 2, 0 0))'), x'FFFFFFFFFF')").to raise_sql_error 317 expect("SELECT ST_Covers(x'FFFFFFFFFF', x'FFFFFFFFFF')").to raise_sql_error 318 end 319 320 it 'should return a valid value' do 321 expect("SELECT ST_Covers(GeomFromText('Polygon((1 1, 2 1, 2 2, 1 2, 1 1))'), GeomFromText('Polygon((0 0, 3 0, 3 3, 0 3, 0 0))'))").to have_result 0 322 expect("SELECT ST_Covers(GeomFromText('Polygon((0 0, 3 0, 3 3, 0 3, 0 0))'),GeomFromText('Polygon((1 1, 2 1, 2 2, 1 2, 1 1))'))").to have_result 1 323 end 324 end 325 end 326 327 describe 'ST_CoveredBy' do 328 if geos_version[0] > 3 || geos_version[1] >= 3 329 it 'should return NULL when either argument is NULL' do 330 expect("SELECT ST_CoveredBy(NULL, GeomFromText('Polygon((0 0, 2 0, 1 2, 0 0))'))").to have_result nil 331 expect("SELECT ST_CoveredBy(GeomFromText('Polygon((0 0, 2 0, 1 2, 0 0))'), NULL)").to have_result nil 332 expect('SELECT ST_CoveredBy(NULL, NULL)').to have_result nil 333 end 334 335 it 'should raise an error on invalid input' do 336 expect("SELECT ST_CoveredBy(x'FFFFFFFFFF', GeomFromText('Polygon((0 0, 2 0, 1 2, 0 0))'))").to raise_sql_error 337 expect("SELECT ST_CoveredBy(GeomFromText('Polygon((0 0, 2 0, 1 2, 0 0))'), x'FFFFFFFFFF')").to raise_sql_error 338 expect("SELECT ST_CoveredBy(x'FFFFFFFFFF', x'FFFFFFFFFF')").to raise_sql_error 339 end 340 341 it 'should return a valid value' do 342 expect("SELECT ST_CoveredBy(GeomFromText('Polygon((1 1, 2 1, 2 2, 1 2, 1 1))'), GeomFromText('Polygon((0 0, 3 0, 3 3, 0 3, 0 0))'))").to have_result 1 343 expect("SELECT ST_CoveredBy(GeomFromText('Polygon((0 0, 3 0, 3 3, 0 3, 0 0))'),GeomFromText('Polygon((1 1, 2 1, 2 2, 1 2, 1 1))'))").to have_result 0 344 end 345 end 346 end 347 348 describe 'ST_Distance' do 349 it 'should return NULL when either argument is NULL' do 350 expect("SELECT ST_Distance(NULL, GeomFromText('Polygon((0 0, 2 0, 1 2, 0 0))'))").to have_result nil 351 expect("SELECT ST_Distance(GeomFromText('Polygon((0 0, 2 0, 1 2, 0 0))'), NULL)").to have_result nil 352 expect('SELECT ST_Distance(NULL, NULL)').to have_result nil 353 end 354 355 it 'should raise an error on invalid input' do 356 expect("SELECT ST_Distance(x'FFFFFFFFFF', GeomFromText('Polygon((0 0, 2 0, 1 2, 0 0))'))").to raise_sql_error 357 expect("SELECT ST_Distance(GeomFromText('Polygon((0 0, 2 0, 1 2, 0 0))'), x'FFFFFFFFFF')").to raise_sql_error 358 expect("SELECT ST_Distance(x'FFFFFFFFFF', x'FFFFFFFFFF')").to raise_sql_error 359 end 360 361 it 'should return a valid value' do 362 expect("SELECT ST_Distance(GeomFromText('Point(0 0)'), GeomFromText('Point(0 2)'))").to have_result 2.0 363 end 364 end 365 366 describe 'ST_HausdorffDistance' do 367 it 'should return NULL when either argument is NULL' do 368 expect("SELECT ST_HausdorffDistance(NULL, GeomFromText('Polygon((0 0, 2 0, 1 2, 0 0))'))").to have_result nil 369 expect("SELECT ST_HausdorffDistance(GeomFromText('Polygon((0 0, 2 0, 1 2, 0 0))'), NULL)").to have_result nil 370 expect('SELECT ST_HausdorffDistance(NULL, NULL)').to have_result nil 371 end 372 373 it 'should raise an error on invalid input' do 374 expect("SELECT ST_HausdorffDistance(x'FFFFFFFFFF', GeomFromText('Polygon((0 0, 2 0, 1 2, 0 0))'))").to raise_sql_error 375 expect("SELECT ST_HausdorffDistance(GeomFromText('Polygon((0 0, 2 0, 1 2, 0 0))'), x'FFFFFFFFFF')").to raise_sql_error 376 expect("SELECT ST_HausdorffDistance(x'FFFFFFFFFF', x'FFFFFFFFFF')").to raise_sql_error 377 end 378 379 it 'should return a valid value' do 380 expect("SELECT ST_HausdorffDistance(GeomFromText('LineString (0 0, 100 0, 10 100, 10 100)'), GeomFromText('LineString (0 100, 0 10, 80 10)'))").to have_result 22.360679774997898 381 end 382 end 383 384 describe 'ST_Boundary' do 385 it 'should return NULL when either argument is NULL' do 386 expect('SELECT ST_Boundary(NULL)').to have_result nil 387 end 388 389 it 'should raise an error on invalid input' do 390 expect("SELECT ST_Boundary(x'FFFFFFFFFF')").to raise_sql_error 391 end 392 393 it 'should return a valid value' do 394 expect("SELECT AsText(ST_Boundary(GeomFromText('Point (0 100)')))").to have_result 'GeometryCollection EMPTY' 395 expect("SELECT AsText(ST_Boundary(GeomFromText('LineString (0 100, 0 10, 80 10)')))").to have_result 'MultiPoint ((0 100), (80 10))' 396 expect("SELECT AsText(ST_Boundary(GeomFromText('Polygon((0 0, 2 0, 2 2, 1 1, 0 2, 0 0))')))").to have_result 'LineString (0 0, 2 0, 2 2, 1 1, 0 2, 0 0)' 397 end 398 end 399 400 describe 'ST_ConvexHull' do 401 it 'should return NULL when either argument is NULL' do 402 expect('SELECT ST_ConvexHull(NULL)').to have_result nil 403 end 404 405 it 'should raise an error on invalid input' do 406 expect("SELECT ST_ConvexHull(x'FFFFFFFFFF')").to raise_sql_error 407 end 408 409 it 'should return a valid value' do 410 expect("SELECT AsText(ST_ConvexHull(GeomFromText('Point (0 100)')))").to have_result 'Point (0 100)' 411 expect("SELECT AsText(ST_ConvexHull(GeomFromText('LineString (0 100, 0 10, 80 10)')))").to have_result 'Polygon ((0 10, 0 100, 80 10, 0 10))' 412 expect("SELECT AsText(ST_ConvexHull(GeomFromText('Polygon((0 0, 2 0, 2 2, 1 1, 0 2, 0 0))')))").to have_result 'Polygon ((0 0, 0 2, 2 2, 2 0, 0 0))' 413 end 414 end 415 416 describe 'ST_Envelope' do 417 it 'should return NULL when either argument is NULL' do 418 expect('SELECT ST_Envelope(NULL)').to have_result nil 419 end 420 421 it 'should raise an error on invalid input' do 422 expect("SELECT ST_Envelope(x'FFFFFFFFFF')").to raise_sql_error 423 end 424 425 it 'should return a valid value' do 426 expect("SELECT AsText(ST_Envelope(GeomFromText('Point (0 100)')))").to have_result 'Point (0 100)' 427 expect("SELECT AsText(ST_Envelope(GeomFromText('LineString (0 100, 0 10, 80 10)')))").to have_result 'Polygon ((0 10, 80 10, 80 100, 0 100, 0 10))' 428 expect("SELECT AsText(ST_Envelope(GeomFromText('Polygon((0 0, 2 0, 2 2, 1 3, 0 2, 0 0))')))").to have_result 'Polygon ((0 0, 2 0, 2 3, 0 3, 0 0))' 429 end 430 end 431 432 describe 'ST_Distance' do 433 it 'should return NULL when either argument is NULL' do 434 expect("SELECT ST_Difference(NULL, GeomFromText('Polygon((0 0, 2 0, 1 2, 0 0))'))").to have_result nil 435 expect("SELECT ST_Difference(GeomFromText('Polygon((0 0, 2 0, 1 2, 0 0))'), NULL)").to have_result nil 436 expect('SELECT ST_Difference(NULL, NULL)').to have_result nil 437 end 438 439 it 'should raise an error on invalid input' do 440 expect("SELECT ST_Difference(x'FFFFFFFFFF', GeomFromText('Polygon((0 0, 2 0, 1 2, 0 0))'))").to raise_sql_error 441 expect("SELECT ST_Difference(GeomFromText('Polygon((0 0, 2 0, 1 2, 0 0))'), x'FFFFFFFFFF')").to raise_sql_error 442 expect("SELECT ST_Difference(x'FFFFFFFFFF', x'FFFFFFFFFF')").to raise_sql_error 443 end 444 445 it 'should return a valid value' do 446 expect("SELECT AsText(ST_Difference(GeomFromText('Polygon((0 0, 2 0, 2 2, 0 2, 0 0))'), GeomFromText('Polygon((1 0, 3 0, 3 2, 1 2, 1 0))')))").to have_result 'Polygon ((1 0, 0 0, 0 2, 1 2, 1 0))' 447 end 448 end 449 450 describe 'ST_SymDifference' do 451 it 'should return NULL when either argument is NULL' do 452 expect("SELECT ST_SymDifference(NULL, GeomFromText('Polygon((0 0, 2 0, 1 2, 0 0))'))").to have_result nil 453 expect("SELECT ST_SymDifference(GeomFromText('Polygon((0 0, 2 0, 1 2, 0 0))'), NULL)").to have_result nil 454 expect('SELECT ST_SymDifference(NULL, NULL)').to have_result nil 455 end 456 457 it 'should raise an error on invalid input' do 458 expect("SELECT ST_SymDifference(x'FFFFFFFFFF', GeomFromText('Polygon((0 0, 2 0, 1 2, 0 0))'))").to raise_sql_error 459 expect("SELECT ST_SymDifference(GeomFromText('Polygon((0 0, 2 0, 1 2, 0 0))'), x'FFFFFFFFFF')").to raise_sql_error 460 expect("SELECT ST_SymDifference(x'FFFFFFFFFF', x'FFFFFFFFFF')").to raise_sql_error 461 end 462 463 it 'should return a valid value' do 464 expect("SELECT AsText(ST_SymDifference(GeomFromText('Polygon((0 0, 2 0, 2 2, 0 2, 0 0))'), GeomFromText('Polygon((1 0, 3 0, 3 2, 1 2, 1 0))')))").to have_result 'MultiPolygon (((1 0, 0 0, 0 2, 1 2, 1 0)), ((2 0, 2 2, 3 2, 3 0, 2 0)))' 465 end 466 end 467 468 describe 'ST_Intersection' do 469 it 'should return NULL when either argument is NULL' do 470 expect("SELECT ST_Intersection(NULL, GeomFromText('Polygon((0 0, 2 0, 1 2, 0 0))'))").to have_result nil 471 expect("SELECT ST_Intersection(GeomFromText('Polygon((0 0, 2 0, 1 2, 0 0))'), NULL)").to have_result nil 472 expect('SELECT ST_Intersection(NULL, NULL)').to have_result nil 473 end 474 475 it 'should raise an error on invalid input' do 476 expect("SELECT ST_Intersection(x'FFFFFFFFFF', GeomFromText('Polygon((0 0, 2 0, 1 2, 0 0))'))").to raise_sql_error 477 expect("SELECT ST_Intersection(GeomFromText('Polygon((0 0, 2 0, 1 2, 0 0))'), x'FFFFFFFFFF')").to raise_sql_error 478 expect("SELECT ST_Intersection(x'FFFFFFFFFF', x'FFFFFFFFFF')").to raise_sql_error 479 end 480 481 it 'should return a valid value' do 482 expect("SELECT AsText(ST_Intersection(GeomFromText('Polygon((0 0, 2 0, 2 2, 0 2, 0 0))'), GeomFromText('Polygon((1 0, 3 0, 3 2, 1 2, 1 0))')))").to have_result 'Polygon ((2 0, 1 0, 1 2, 2 2, 2 0))' 483 end 484 end 485 486 describe 'ST_Union' do 487 it 'should return NULL when either argument is NULL' do 488 expect("SELECT ST_Union(NULL, GeomFromText('Polygon((0 0, 2 0, 1 2, 0 0))'))").to have_result nil 489 expect("SELECT ST_Union(GeomFromText('Polygon((0 0, 2 0, 1 2, 0 0))'), NULL)").to have_result nil 490 expect('SELECT ST_Union(NULL, NULL)').to have_result nil 491 end 492 493 it 'should raise an error on invalid input' do 494 expect("SELECT ST_Union(x'FFFFFFFFFF', GeomFromText('Polygon((0 0, 2 0, 1 2, 0 0))'))").to raise_sql_error 495 expect("SELECT ST_Union(GeomFromText('Polygon((0 0, 2 0, 1 2, 0 0))'), x'FFFFFFFFFF')").to raise_sql_error 496 expect("SELECT ST_Union(x'FFFFFFFFFF', x'FFFFFFFFFF')").to raise_sql_error 497 end 498 499 it 'should return a valid value' do 500 expect("SELECT AsText(ST_Union(GeomFromText('Point(0 0)'), GeomFromText('Point empty')))").to have_result 'Point (0 0)' 501 expect("SELECT AsText(ST_Union(GeomFromText('Point(0 0)'), GeomFromText('Point (1 1)')))").to have_result 'MultiPoint ((0 0), (1 1))' 502 expect("SELECT AsText(ST_Union(GeomFromText('Point(0 0)'), GeomFromText('LineString (1 1, 2 2)')))").to have_result 'GeometryCollection (Point (0 0), LineString (1 1, 2 2))' 503 expect("SELECT AsText(ST_Union(GeomFromText('Point(0 0)'), GeomFromText('LineString (1 1, 2 2)')))").to have_result 'GeometryCollection (Point (0 0), LineString (1 1, 2 2))' 504 expect("SELECT AsText(ST_Union(GeomFromText('LineString(4 5, 5 5)'), GeomFromText('LineString (1 3, 1 4)')))").to have_result 'MultiLineString ((4 5, 5 5), (1 3, 1 4))' 505 expect("SELECT AsText(ST_Union(GeomFromText('LineString(4 5, 5 5)'), GeomFromText('LineString(4 5, 5 5)')))").to have_result 'LineString (4 5, 5 5)' 506 expect("SELECT AsText(ST_Union(GeomFromText('Point(0 0)'), GeomFromText('Polygon ((1 3, 1 4, 2 3, 1 3))')))").to have_result 'GeometryCollection (Point (0 0), Polygon ((1 3, 1 4, 2 3, 1 3)))' 507 expect("SELECT AsText(ST_Union(GeomFromText('Polygon ((1 3, 1 4, 2 3, 1 3))'), GeomFromText('Polygon ((1 3, 1 4, 2 3, 1 3))')))").to have_result 'Polygon ((1 3, 1 4, 2 3, 1 3))' 508 expect("SELECT AsText(ST_Union(GeomFromText('Polygon ((10 3, 10 4, 12 3, 10 3))'), GeomFromText('Polygon ((1 3, 1 4, 2 3, 1 3))')))").to have_result 'MultiPolygon (((10 3, 10 4, 12 3, 10 3)), ((1 3, 1 4, 2 3, 1 3)))' 509 expect("SELECT AsText(ST_Union(GeomFromText('Polygon((0 0, 2 0, 2 2, 0 2, 0 0))'), GeomFromText('Polygon((1 0, 3 0, 3 2, 1 2, 1 0))')))").to have_result 'Polygon ((1 0, 0 0, 0 2, 1 2, 2 2, 3 2, 3 0, 2 0, 1 0))' 510 end 511 end 512end