Skip to content

Commit a98af30

Browse files
committed
Fixed return type for several Geometry Accessors methods (nullable int or bool)
1 parent 1224f38 commit a98af30

File tree

3 files changed

+218
-27
lines changed

3 files changed

+218
-27
lines changed

LinqToDBPostGisNetTopologySuite.Tests/GeometryAccessorsTests.cs

Lines changed: 176 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -22,12 +22,21 @@ public void TestGeometryType()
2222
{
2323
using (var db = new PostGisTestDataConnection(TestDatabaseConnectionString))
2424
{
25-
const string wkt = "LINESTRING(77.29 29.07,77.42 29.26,77.27 29.31,77.29 29.07)";
26-
db.TestGeometries.Value(g => g.Id, 1).Value(p => p.Geometry, () => GeometryInput.STGeomFromText(wkt)).Insert();
25+
const string wkt1 = "LINESTRING(77.29 29.07,77.42 29.26,77.27 29.31,77.29 29.07)";
26+
db.TestGeometries.Value(g => g.Id, 1).Value(p => p.Geometry, () => GeometryInput.STGeomFromText(wkt1)).Insert();
27+
db.TestGeometries.Value(g => g.Id, 2).Value(p => p.Geometry, () => null).Insert();
2728

28-
var geometryType = db.TestGeometries.Select(g => g.Geometry.GeometryType()).Single();
29+
var geometryType1 = db.TestGeometries.Where(g => g.Id == 1).Select(g => g.Geometry.GeometryType()).Single();
30+
Assert.AreEqual("LINESTRING", geometryType1);
2931

30-
Assert.AreEqual("LINESTRING", geometryType);
32+
var stGeometryType1 = db.TestGeometries.Where(g => g.Id == 1).Select(g => g.Geometry.STGeometryType()).Single();
33+
Assert.AreEqual("ST_LineString", stGeometryType1);
34+
35+
var geometryType2 = db.TestGeometries.Where(g => g.Id == 2).Select(g => g.Geometry.GeometryType()).Single();
36+
Assert.IsNull(geometryType2);
37+
38+
var stGeometryType2 = db.TestGeometries.Where(g => g.Id == 2).Select(g => g.Geometry.STGeometryType()).Single();
39+
Assert.IsNull(stGeometryType2);
3140
}
3241
}
3342

@@ -40,26 +49,56 @@ public void TestSTBoundary()
4049
db.TestGeometries.Value(g => g.Id, 1).Value(p => p.Geometry, () => GeometryInput.STGeomFromText(wkt1)).Insert();
4150
const string wkt2 = "POLYGON (( 10 130, 50 190, 110 190, 140 150, 150 80, 100 10, 20 40, 10 130), (70 40, 100 50, 120 80, 80 110, 50 90, 70 40))";
4251
db.TestGeometries.Value(g => g.Id, 2).Value(p => p.Geometry, () => GeometryInput.STGeomFromText(wkt2)).Insert();
52+
const string wkt3 = "MULTILINESTRING((1 1 1,0 0 0.5, -1 1 1),(1 1 0.5,0 0 0.5, -1 1 0.5, 1 1 0.5) )";
53+
db.TestGeometries.Value(g => g.Id, 3).Value(p => p.Geometry, () => GeometryInput.STGeomFromText(wkt3)).Insert();
4354

4455
var boundary1 = db.TestGeometries.Where(g => g.Id == 1).Select(g => g.Geometry.STBoundary().STAsText()).Single();
4556
Assert.AreEqual("MULTIPOINT(100 150,160 170)", boundary1);
4657

4758
var boundary2 = db.TestGeometries.Where(g => g.Id == 2).Select(g => g.Geometry.STBoundary().STAsText()).Single();
4859
Assert.AreEqual("MULTILINESTRING((10 130,50 190,110 190,140 150,150 80,100 10,20 40,10 130),(70 40,100 50,120 80,80 110,50 90,70 40))", boundary2);
60+
61+
var boundary3 = db.TestGeometries.Where(g => g.Id == 3).Select(g => g.Geometry.STBoundary().STAsText()).Single();
62+
Assert.AreEqual("MULTIPOINT Z (-1 1 1,1 1 0.75)", boundary3);
4963
}
5064
}
5165

5266
[Test]
53-
public void TestSTDimension()
67+
public void TestSTCoordDim()
5468
{
5569
using (var db = new PostGisTestDataConnection(TestDatabaseConnectionString))
5670
{
57-
const string wkt = "GEOMETRYCOLLECTION(LINESTRING(1 1,0 0),POINT(0 0))";
71+
const string wkt = "CIRCULARSTRING(1 2 3, 1 3 4, 5 6 7, 8 9 10, 11 12 13)";
5872
db.TestGeometries.Value(g => g.Id, 1).Value(p => p.Geometry, () => GeometryInput.STGeomFromText(wkt)).Insert();
73+
db.TestGeometries.Value(g => g.Id, 2).Value(p => p.Geometry, () => null).Insert();
5974

60-
var dimension = db.TestGeometries.Select(g => g.Geometry.STDimension()).Single();
75+
var dimension1 = db.TestGeometries.Where(g => g.Id == 1).Select(g => g.Geometry.STCoordDim()).Single();
76+
Assert.AreEqual(3, dimension1);
6177

62-
Assert.AreEqual(1, dimension);
78+
var dimension2 = db.TestGeometries.Where(g => g.Id == 2).Select(g => g.Geometry.STCoordDim()).Single();
79+
Assert.IsNull(dimension2);
80+
}
81+
}
82+
83+
[Test]
84+
public void TestSTDimension()
85+
{
86+
using (var db = new PostGisTestDataConnection(TestDatabaseConnectionString))
87+
{
88+
const string wkt1 = "GEOMETRYCOLLECTION(LINESTRING(1 1,0 0),POINT(0 0))";
89+
db.TestGeometries.Value(g => g.Id, 1).Value(p => p.Geometry, () => GeometryInput.STGeomFromText(wkt1)).Insert();
90+
const string wkt2 = "POINT(0 0)";
91+
db.TestGeometries.Value(g => g.Id, 2).Value(p => p.Geometry, () => GeometryInput.STGeomFromText(wkt2)).Insert();
92+
db.TestGeometries.Value(g => g.Id, 3).Value(p => p.Geometry, () => null).Insert();
93+
94+
var dimension1 = db.TestGeometries.Where(g => g.Id == 1).Select(g => g.Geometry.STDimension()).Single();
95+
Assert.AreEqual(1, dimension1);
96+
97+
var dimension2 = db.TestGeometries.Where(g => g.Id == 2).Select(g => g.Geometry.STDimension()).Single();
98+
Assert.AreEqual(0, dimension2);
99+
100+
var dimension3 = db.TestGeometries.Where(g => g.Id == 3).Select(g => g.Geometry.STDimension()).Single();
101+
Assert.IsNull(dimension3);
63102
}
64103
}
65104

@@ -68,12 +107,16 @@ public void TestSTEndPoint()
68107
{
69108
using (var db = new PostGisTestDataConnection(TestDatabaseConnectionString))
70109
{
71-
const string wkt = "LINESTRING(1 1, 2 2, 3 3)";
72-
db.TestGeometries.Value(g => g.Id, 1).Value(p => p.Geometry, () => GeometryInput.STGeomFromText(wkt)).Insert();
110+
const string wkt1 = "LINESTRING(1 1, 2 2, 3 3)";
111+
db.TestGeometries.Value(g => g.Id, 1).Value(p => p.Geometry, () => GeometryInput.STGeomFromText(wkt1)).Insert();
112+
const string wkt2 = "POINT(1 1)";
113+
db.TestGeometries.Value(g => g.Id, 2).Value(p => p.Geometry, () => GeometryInput.STGeomFromText(wkt2)).Insert();
73114

74-
var endPoint = db.TestGeometries.Select(g => g.Geometry.STEndPoint().STAsText()).Single();
115+
var endPoint1 = db.TestGeometries.Where(g => g.Id == 1).Select(g => g.Geometry.STEndPoint().STAsText()).Single();
116+
Assert.AreEqual("POINT(3 3)", endPoint1);
75117

76-
Assert.AreEqual("POINT(3 3)", endPoint);
118+
var endPoint2 = db.TestGeometries.Where(g => g.Id == 2).Select(g => g.Geometry.STEndPoint()).Single();
119+
Assert.IsNull(endPoint2);
77120
}
78121
}
79122

@@ -91,6 +134,23 @@ public void TestSTEnvelope()
91134
}
92135
}
93136

137+
[Test]
138+
public void TestSTIsClosed()
139+
{
140+
using (var db = new PostGisTestDataConnection(TestDatabaseConnectionString))
141+
{
142+
const string wkt1 = "LINESTRING(0 0, 1 1)";
143+
db.TestGeometries.Value(g => g.Id, 1).Value(p => p.Geometry, () => GeometryInput.STGeomFromText(wkt1)).Insert();
144+
const string wkt2 = "LINESTRING(0 0, 0 1, 1 1, 0 0)";
145+
db.TestGeometries.Value(g => g.Id, 2).Value(p => p.Geometry, () => GeometryInput.STGeomFromText(wkt2)).Insert();
146+
db.TestGeometries.Value(g => g.Id, 3).Value(p => p.Geometry, () => null).Insert();
147+
148+
Assert.IsFalse(db.TestGeometries.Where(g => g.Id == 1).Select(g => g.Geometry.STIsClosed()).Single());
149+
Assert.IsTrue(db.TestGeometries.Where(g => g.Id == 2).Select(g => g.Geometry.STIsClosed()).Single());
150+
Assert.IsNull(db.TestGeometries.Where(g => g.Id == 3).Select(g => g.Geometry.STIsClosed()).Single());
151+
}
152+
}
153+
94154
[Test]
95155
public void TestSTIsEmpty()
96156
{
@@ -108,6 +168,40 @@ public void TestSTIsEmpty()
108168
}
109169
}
110170

171+
[Test]
172+
public void TestSTIsRing()
173+
{
174+
using (var db = new PostGisTestDataConnection(TestDatabaseConnectionString))
175+
{
176+
const string wkt1 = "LINESTRING(0 0, 0 1, 1 1, 1 0, 0 0)";
177+
db.TestGeometries.Value(g => g.Id, 1).Value(p => p.Geometry, () => GeometryInput.STGeomFromText(wkt1)).Insert();
178+
const string wkt2 = "LINESTRING(0 0, 0 1, 1 0, 1 1, 0 0)";
179+
db.TestGeometries.Value(g => g.Id, 2).Value(p => p.Geometry, () => GeometryInput.STGeomFromText(wkt2)).Insert();
180+
db.TestGeometries.Value(g => g.Id, 3).Value(p => p.Geometry, () => null).Insert();
181+
182+
Assert.IsTrue(db.TestGeometries.Where(g => g.Id == 1).Select(g => g.Geometry.STIsRing()).Single());
183+
Assert.IsFalse(db.TestGeometries.Where(g => g.Id == 2).Select(g => g.Geometry.STIsRing()).Single());
184+
Assert.IsNull(db.TestGeometries.Where(g => g.Id == 3).Select(g => g.Geometry.STIsRing()).Single());
185+
}
186+
}
187+
188+
[Test]
189+
public void TestSTIsSimple()
190+
{
191+
using (var db = new PostGisTestDataConnection(TestDatabaseConnectionString))
192+
{
193+
const string wkt1 = "POLYGON((1 1, 2 1, 2 2, 1 1))";
194+
db.TestGeometries.Value(g => g.Id, 1).Value(p => p.Geometry, () => GeometryInput.STGeomFromText(wkt1)).Insert();
195+
const string wkt2 = "LINESTRING(1 1,2 2,2 3.5,1 3,1 2,2 1)";
196+
db.TestGeometries.Value(g => g.Id, 2).Value(p => p.Geometry, () => GeometryInput.STGeomFromText(wkt2)).Insert();
197+
db.TestGeometries.Value(g => g.Id, 3).Value(p => p.Geometry, () => null).Insert();
198+
199+
Assert.IsTrue(db.TestGeometries.Where(g => g.Id == 1).Select(g => g.Geometry.STIsSimple()).Single());
200+
Assert.IsFalse(db.TestGeometries.Where(g => g.Id == 2).Select(g => g.Geometry.STIsSimple()).Single());
201+
Assert.IsNull(db.TestGeometries.Where(g => g.Id == 3).Select(g => g.Geometry.STIsSimple()).Single());
202+
}
203+
}
204+
111205
[Test]
112206
public void TestSTIsValid()
113207
{
@@ -123,6 +217,33 @@ public void TestSTIsValid()
123217
}
124218
}
125219

220+
[Test]
221+
public void TestSTNPoints()
222+
{
223+
using (var db = new PostGisTestDataConnection(TestDatabaseConnectionString))
224+
{
225+
const string wkt1 = "POINT(77.29 29.07)";
226+
db.TestGeometries.Value(g => g.Id, 1).Value(p => p.Geometry, () => GeometryInput.STGeomFromText(wkt1)).Insert();
227+
const string wkt2 = "LINESTRING(77.29 29.07 1,77.42 29.26 0,77.27 29.31 -1,77.29 29.07 3)";
228+
db.TestGeometries.Value(g => g.Id, 2).Value(p => p.Geometry, () => GeometryInput.STGeomFromText(wkt2)).Insert();
229+
const string wkt3 = "LINESTRING EMPTY";
230+
db.TestGeometries.Value(g => g.Id, 3).Value(p => p.Geometry, () => GeometryInput.STGeomFromText(wkt3)).Insert();
231+
db.TestGeometries.Value(g => g.Id, 4).Value(p => p.Geometry, () => null).Insert();
232+
233+
var nPoints1 = db.TestGeometries.Where(g => g.Id == 1).Select(g => g.Geometry.STNPoints()).Single();
234+
Assert.AreEqual(1, nPoints1);
235+
236+
var nPoints2 = db.TestGeometries.Where(g => g.Id == 2).Select(g => g.Geometry.STNPoints()).Single();
237+
Assert.AreEqual(4, nPoints2);
238+
239+
var nPoints3 = db.TestGeometries.Where(g => g.Id == 3).Select(g => g.Geometry.STNPoints()).Single();
240+
Assert.AreEqual(0, nPoints3);
241+
242+
var nPoints4 = db.TestGeometries.Where(g => g.Id == 4).Select(g => g.Geometry.STNPoints()).Single();
243+
Assert.IsNull(nPoints4);
244+
}
245+
}
246+
126247
[Test]
127248
public void TestSTNumGeometries()
128249
{
@@ -132,12 +253,21 @@ public void TestSTNumGeometries()
132253
db.TestGeometries.Value(g => g.Id, 1).Value(p => p.Geometry, () => GeometryInput.STGeomFromText(wkt1)).Insert();
133254
const string wkt2 = "GEOMETRYCOLLECTION(MULTIPOINT(-2 3 , -2 2), LINESTRING(5 5, 10 10), POLYGON((-7 4.2, -7.1 5, -7.1 4.3, -7 4.2)))";
134255
db.TestGeometries.Value(g => g.Id, 2).Value(p => p.Geometry, () => GeometryInput.STGeomFromText(wkt2)).Insert();
256+
const string wkt3 = "POINT EMPTY";
257+
db.TestGeometries.Value(g => g.Id, 3).Value(p => p.Geometry, () => GeometryInput.STGeomFromText(wkt3)).Insert();
258+
db.TestGeometries.Value(g => g.Id, 4).Value(p => p.Geometry, () => null).Insert();
135259

136260
var numGeometries1 = db.TestGeometries.Where(g => g.Id == 1).Select(g => g.Geometry.STNumGeometries()).Single();
137261
Assert.AreEqual(1, numGeometries1);
138262

139263
var numGeometries2 = db.TestGeometries.Where(g => g.Id == 2).Select(g => g.Geometry.STNumGeometries()).Single();
140264
Assert.AreEqual(3, numGeometries2);
265+
266+
var numGeometries3 = db.TestGeometries.Where(g => g.Id == 3).Select(g => g.Geometry.STNumGeometries()).Single();
267+
Assert.AreEqual(0, numGeometries3);
268+
269+
var numGeometries4 = db.TestGeometries.Where(g => g.Id == 4).Select(g => g.Geometry.STNumGeometries()).Single();
270+
Assert.IsNull(numGeometries4);
141271
}
142272
}
143273

@@ -146,12 +276,34 @@ public void TestSTNumPoints()
146276
{
147277
using (var db = new PostGisTestDataConnection(TestDatabaseConnectionString))
148278
{
149-
const string wkt = "LINESTRING(77.29 29.07,77.42 29.26,77.27 29.31,77.29 29.07)";
150-
db.TestGeometries.Value(g => g.Id, 1).Value(p => p.Geometry, () => GeometryInput.STGeomFromText(wkt)).Insert();
279+
const string wkt1 = "LINESTRING(77.29 29.07,77.42 29.26,77.27 29.31,77.29 29.07)";
280+
db.TestGeometries.Value(g => g.Id, 1).Value(p => p.Geometry, () => GeometryInput.STGeomFromText(wkt1)).Insert();
281+
const string wkt2 = "POINT(77.29 29.07)";
282+
db.TestGeometries.Value(g => g.Id, 2).Value(p => p.Geometry, () => GeometryInput.STGeomFromText(wkt2)).Insert();
283+
284+
var numPoints1 = db.TestGeometries.Where(g => g.Id == 1).Select(g => g.Geometry.STNumPoints()).Single();
285+
Assert.AreEqual(4, numPoints1);
286+
287+
var numPoints2 = db.TestGeometries.Where(g => g.Id == 2).Select(g => g.Geometry.STNumPoints()).Single();
288+
Assert.IsNull(numPoints2);
289+
}
290+
}
151291

152-
var numPoints = db.TestGeometries.Select(g => g.Geometry.STNumPoints()).Single();
292+
[Test]
293+
public void TestSTStartPoint()
294+
{
295+
using (var db = new PostGisTestDataConnection(TestDatabaseConnectionString))
296+
{
297+
const string wkt1 = "LINESTRING(0 1, 0 2)";
298+
db.TestGeometries.Value(g => g.Id, 1).Value(p => p.Geometry, () => GeometryInput.STGeomFromText(wkt1)).Insert();
299+
const string wkt2 = "POINT(0 1)";
300+
db.TestGeometries.Value(g => g.Id, 2).Value(p => p.Geometry, () => GeometryInput.STGeomFromText(wkt2)).Insert();
301+
302+
var startPoint1 = db.TestGeometries.Where(g => g.Id == 1).Select(g => g.Geometry.STStartPoint().STAsText()).Single();
303+
Assert.AreEqual("POINT(0 1)", startPoint1);
153304

154-
Assert.AreEqual(4, numPoints);
305+
var startPoint2 = db.TestGeometries.Where(g => g.Id == 2).Select(g => g.Geometry.STStartPoint()).Single();
306+
Assert.IsNull(startPoint2);
155307
}
156308
}
157309

@@ -164,6 +316,8 @@ public void TestSTXYZM()
164316
db.TestGeometries.Value(g => g.Id, 1).Value(p => p.Geometry, () => GeometryInput.STGeomFromText(wkt1)).Insert();
165317
const string wkt2 = "POINT(1 2)";
166318
db.TestGeometries.Value(g => g.Id, 2).Value(p => p.Geometry, () => GeometryInput.STGeomFromText(wkt2)).Insert();
319+
const string wkt3 = "POINT EMPTY";
320+
db.TestGeometries.Value(g => g.Id, 3).Value(p => p.Geometry, () => GeometryInput.STGeomFromText(wkt3)).Insert();
167321

168322
var query1 = db.TestGeometries.Where(g => g.Id == 1);
169323
Assert.AreEqual(1, query1.Select(g => g.Geometry.STX()).Single());
@@ -176,6 +330,12 @@ public void TestSTXYZM()
176330
Assert.AreEqual(2, query2.Select(g => g.Geometry.STY()).Single());
177331
Assert.IsNull(query2.Select(g => g.Geometry.STZ()).Single());
178332
Assert.IsNull(query2.Select(g => g.Geometry.STM()).Single());
333+
334+
var query3 = db.TestGeometries.Where(g => g.Id == 3);
335+
Assert.IsNull(query3.Select(g => g.Geometry.STX()).Single());
336+
Assert.IsNull(query3.Select(g => g.Geometry.STY()).Single());
337+
Assert.IsNull(query2.Select(g => g.Geometry.STZ()).Single());
338+
Assert.IsNull(query2.Select(g => g.Geometry.STM()).Single());
179339
}
180340
}
181341
}

LinqToDBPostGisNetTopologySuite.Tests/SpatialRelationshipsTests.cs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ public void Setup()
1919
}
2020

2121
[Test]
22-
public void TestSTCovers()
22+
public void TestSTCoversSTExteriorRing()
2323
{
2424
using (var db = new PostGisTestDataConnection(TestDatabaseConnectionString))
2525
{
@@ -29,6 +29,7 @@ public void TestSTCovers()
2929
const string wkt2 = "POINT(1 2)";
3030
db.TestGeometries.Value(g => g.Id, 2).Value(p => p.Geometry, () => GeometryInput.STGeomFromText(wkt2).STBuffer(20)).Insert();
3131
var bigc = db.TestGeometries.Single(g => g.Id == 2).Geometry;
32+
db.TestGeometries.Value(g => g.Id, 3).Value(p => p.Geometry, () => GeometryInput.STGeomFromText(wkt1)).Insert();
3233

3334
Assert.IsTrue(db.TestGeometries.Where(g => g.Id == 1).Select(g => g.Geometry.STCovers(smallc)).Single());
3435
Assert.IsFalse(db.TestGeometries.Where(g => g.Id == 1).Select(g => g.Geometry.STCovers(bigc)).Single());
@@ -39,6 +40,8 @@ public void TestSTCovers()
3940
Assert.IsTrue(db.TestGeometries.Where(g => g.Id == 1).Select(g => g.Geometry.STCoveredBy(bigc)).Single());
4041
Assert.IsTrue(db.TestGeometries.Where(g => g.Id == 2).Select(g => g.Geometry.STExteriorRing().STCoveredBy(bigc)).Single());
4142
Assert.IsFalse(db.TestGeometries.Where(g => g.Id == 2).Select(g => g.Geometry.STExteriorRing().STWithin(bigc)).Single());
43+
44+
Assert.IsNull(db.TestGeometries.Where(g => g.Id == 3).Select(g => g.Geometry.STExteriorRing()).Single());
4245
}
4346
}
4447

0 commit comments

Comments
 (0)