Skip to content

Commit fc2ac65

Browse files
committed
Fixed floating point rounding issues in several tests
1 parent dc5b0cf commit fc2ac65

11 files changed

+225
-125
lines changed

LinqToDBPostGisNetTopologySuite.DemoApp/Program.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
using System.Configuration;
33
using System.Linq;
44

5-
using NTSG = NetTopologySuite.Geometries;
5+
using NTSGS = NetTopologySuite.Geometries;
66
using Npgsql;
77
using LinqToDB;
88

@@ -31,7 +31,7 @@ static void ReadCities()
3131
{
3232
using (var db = new Tests.PostGisTestDataConnection(ConnectionString))
3333
{
34-
var point = new NTSG.Point(new NTSG.Coordinate(0, 7200000)) { SRID = 3857 };
34+
var point = new NTSGS.Point(new NTSGS.Coordinate(0, 7200000)) { SRID = 3857 };
3535

3636
var nearestCity = db.OwmCities
3737
.OrderBy(c => c.Geometry.STDistance(point))

LinqToDBPostGisNetTopologySuite.Tests/AffineTransformationsTests.cs

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
using LinqToDB;
55
using NUnit.Framework;
66

7-
using NTSG = NetTopologySuite.Geometries;
7+
using NTSGS = NetTopologySuite.Geometries;
88

99
namespace LinqToDBPostGisNetTopologySuite.Tests
1010
{
@@ -39,7 +39,7 @@ public void TestSTAffine3D()
3939
g.Geometry.STAffine(Math.Cos(Math.PI),
4040
-1 * Math.Sin(Math.PI), 0, Math.Sin(Math.PI), Math.Cos(Math.PI), 0, 0, 0, 1, 0, 0, 0)
4141
)
42-
.Single() as NTSG.LineString;
42+
.Single() as NTSGS.LineString;
4343

4444
CheckLineEquals(expected, result, 1.0E-8);
4545
}
@@ -63,7 +63,7 @@ public void TestSTAffine2D()
6363
.Select(g =>
6464
g.Geometry.STAffine(0, 0, 0, 0, 0, 0)
6565
)
66-
.Single() as NTSG.LineString;
66+
.Single() as NTSGS.LineString;
6767

6868
CheckLineEquals(expected, result, 1.0E-8);
6969
}
@@ -86,7 +86,7 @@ public void TestSTRotate()
8686
var result = db.TestGeometries
8787
.Where(g => g.Id == 1)
8888
.Select(g => g.Geometry.STRotate(Math.PI))
89-
.Single() as NTSG.LineString;
89+
.Single() as NTSGS.LineString;
9090

9191
CheckLineEquals(expected, result, 1.0E-8);
9292
}
@@ -109,7 +109,7 @@ public void TestSTRotateOrigin()
109109
var result = db.TestGeometries
110110
.Where(g => g.Id == 1)
111111
.Select(g => g.Geometry.STRotate(Math.PI / 6.0, 50, 160))
112-
.Single() as NTSG.LineString;
112+
.Single() as NTSGS.LineString;
113113

114114
CheckLineEquals(expected, result, 1.0E-8);
115115
}
@@ -132,7 +132,7 @@ public void TestSTRotateOriginGeom()
132132
var result = db.TestGeometries
133133
.Where(g => g.Id == 1)
134134
.Select(g => g.Geometry.STRotate(-1.0 * Math.PI / 3.0, g.Geometry.STCentroid()))
135-
.Single() as NTSG.LineString;
135+
.Single() as NTSGS.LineString;
136136

137137
CheckLineEquals(expected, result, 1.0E-8);
138138
}
@@ -154,7 +154,7 @@ public void TestSTRotateX()
154154
var result = db.TestGeometries
155155
.Where(g => g.Id == 1)
156156
.Select(g => g.Geometry.STRotateX(Math.PI / 2.0))
157-
.Single() as NTSG.LineString;
157+
.Single() as NTSGS.LineString;
158158

159159
CheckLineEquals(expected, result, 1.0E-8);
160160
}
@@ -176,7 +176,7 @@ public void TestSTRotateY()
176176
var result = db.TestGeometries
177177
.Where(g => g.Id == 1)
178178
.Select(g => g.Geometry.STRotateY(Math.PI / 2.0))
179-
.Single() as NTSG.LineString;
179+
.Single() as NTSGS.LineString;
180180

181181
CheckLineEquals(expected, result, 1.0E-8);
182182
}
@@ -198,7 +198,7 @@ public void TestSTRotateZ()
198198
var result = db.TestGeometries
199199
.Where(g => g.Id == 1)
200200
.Select(g => g.Geometry.STRotateZ(Math.PI / 2.0))
201-
.Single() as NTSG.LineString;
201+
.Single() as NTSGS.LineString;
202202

203203
CheckLineEquals(expected, result, 1.0E-8);
204204
}
@@ -220,7 +220,7 @@ public void TestSTScaleXYZ()
220220
var result = db.TestGeometries
221221
.Where(g => g.Id == 1)
222222
.Select(g => g.Geometry.STScale(0.5, 0.75, 0.8))
223-
.Single() as NTSG.LineString;
223+
.Single() as NTSGS.LineString;
224224

225225
CheckLineEquals(expected, result, 1.0E-8);
226226
}
@@ -242,7 +242,7 @@ public void TestSTScaleXY()
242242
var result = db.TestGeometries
243243
.Where(g => g.Id == 1)
244244
.Select(g => g.Geometry.STScale(0.5, 0.75))
245-
.Single() as NTSG.LineString;
245+
.Single() as NTSGS.LineString;
246246

247247
CheckLineEquals(expected, result, 1.0E-8);
248248
}
@@ -264,7 +264,7 @@ public void TestSTScaleXYZM()
264264
var result = db.TestGeometries
265265
.Where(g => g.Id == 1)
266266
.Select(g => g.Geometry.STScale(GeometryConstructors.STMakePoint(0.5, 0.75, 2, -1)))
267-
.Single() as NTSG.LineString;
267+
.Single() as NTSGS.LineString;
268268

269269
CheckLineEquals(expected, result, 1.0E-8);
270270
}
@@ -286,7 +286,7 @@ public void TestSTScaleFalseOrigin()
286286
var result = db.TestGeometries
287287
.Where(g => g.Id == 1)
288288
.Select(g => g.Geometry.STScale(GeometryInput.STGeomFromEWKT("POINT(2 2)"), GeometryInput.STGeomFromEWKT("POINT(1 1)")))
289-
.Single() as NTSG.LineString;
289+
.Single() as NTSGS.LineString;
290290

291291
CheckLineEquals(expected, result, 1.0E-8);
292292
}
@@ -342,13 +342,13 @@ public void TestSTTransScale()
342342
var result = db.TestGeometries
343343
.Where(g => g.Id == 1)
344344
.Select(g => g.Geometry.STTransScale(0.5, 1, 1, 2))
345-
.Single() as NTSG.LineString;
345+
.Single() as NTSGS.LineString;
346346

347347
CheckLineEquals(expected, result, 1.0E-8);
348348
}
349349
}
350350

351-
private static void CheckLineEquals(double[][] expected, NTSG.LineString actual, double tolerance)
351+
private static void CheckLineEquals(double[][] expected, NTSGS.LineString actual, double tolerance)
352352
{
353353
var pointsCount = expected.Length;
354354
var dimensionCount = expected[0].Length; // Depends on 2D / 3D geometry dimensions

LinqToDBPostGisNetTopologySuite.Tests/GeometryAccessorsTests.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
using LinqToDB;
44
using NUnit.Framework;
55

6-
using NTS = NetTopologySuite.Geometries;
6+
using NTSGS = NetTopologySuite.Geometries;
77
using NTSG = NetTopologySuite.Geometries.Geometry;
88

99
namespace LinqToDBPostGisNetTopologySuite.Tests
@@ -400,17 +400,17 @@ public void TestSTInteriorRingN()
400400
var result = db.TestGeometries
401401
.Where(g => g.Id == 1)
402402
.Select(g => g.Geometry.STInteriorRingN(1))
403-
.Single() as NTS.LineString;
403+
.Single() as NTSGS.LineString;
404404

405405
var result2 = db.TestGeometries
406406
.Where(g => g.Id == 1)
407407
.Select(g => GeometryAccessors.STInteriorRingN(g.Geometry.STAsText(), 1))
408-
.Single() as NTS.LineString;
408+
.Single() as NTSGS.LineString;
409409

410410
var emptyResult = db.TestGeometries
411411
.Where(g => g.Id == 1)
412412
.Select(g => g.Geometry.STInteriorRingN(2))
413-
.Single() as NTS.LineString;
413+
.Single() as NTSGS.LineString;
414414

415415
Assert.IsNotNull(result);
416416
Assert.IsNull(emptyResult);

LinqToDBPostGisNetTopologySuite.Tests/GeometryConstructorsTests.cs

Lines changed: 25 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
using LinqToDB;
44
using NUnit.Framework;
55

6+
using NTSGS = NetTopologySuite.Geometries;
67
using NTSG = NetTopologySuite.Geometries.Geometry;
78

89
namespace LinqToDBPostGisNetTopologySuite.Tests
@@ -355,10 +356,18 @@ public void TestSTTileEnvelope()
355356
.Insert();
356357

357358
var result1 = db.TestGeometries.Where(g => g.Id == 1);
358-
Assert.AreEqual("POLYGON((-10018754.1713945 0,-10018754.1713945 10018754.1713945,0 10018754.1713945,0 0,-10018754.1713945 0))",
359-
result1.Select(g => g.Geometry.STAsText()).Single());
360-
Assert.AreEqual(SRID3857,
361-
result1.Select(g => g.Geometry.STSrId()).Single());
359+
var poly1 = result1.Select(g => g.Geometry).Single() as NTSGS.Polygon;
360+
Assert.AreEqual(-10018754.1713945, poly1.Coordinates[0].X, 1.0E-9);
361+
Assert.AreEqual(0, poly1.Coordinates[0].Y, 1.0E-9);
362+
Assert.AreEqual(-10018754.1713945, poly1.Coordinates[1].X, 1.0E-9);
363+
Assert.AreEqual(10018754.1713945, poly1.Coordinates[1].Y, 1.0E-9);
364+
Assert.AreEqual(0, poly1.Coordinates[2].X, 1.0E-9);
365+
Assert.AreEqual(10018754.1713945, poly1.Coordinates[2].Y, 1.0E-9);
366+
Assert.AreEqual(0, poly1.Coordinates[3].X, 1.0E-9);
367+
Assert.AreEqual(0, poly1.Coordinates[3].Y, 1.0E-9);
368+
Assert.AreEqual(-10018754.1713945, poly1.Coordinates[4].X, 1.0E-9);
369+
Assert.AreEqual(0, poly1.Coordinates[4].Y, 1.0E-9);
370+
Assert.AreEqual(SRID3857, poly1.SRID);
362371

363372
var result2 = db.TestGeometries.Where(g => g.Id == 2);
364373
Assert.AreEqual("POLYGON((-135 45,-135 67.5,-90 67.5,-90 45,-135 45))",
@@ -367,10 +376,18 @@ public void TestSTTileEnvelope()
367376
result2.Select(g => g.Geometry.STSrId()).Single());
368377

369378
var result3 = db.TestGeometries.Where(g => g.Id == 3);
370-
Assert.AreEqual("POLYGON((-10018754.1713945 0,-10018754.1713945 10018754.1713945,0 10018754.1713945,0 0,-10018754.1713945 0))",
371-
result3.Select(g => g.Geometry.STAsText()).Single());
372-
Assert.AreEqual(SRID3857,
373-
result3.Select(g => g.Geometry.STSrId()).Single());
379+
var poly3 = result3.Select(g => g.Geometry).Single() as NTSGS.Polygon;
380+
Assert.AreEqual(-10018754.1713945, poly3.Coordinates[0].X, 1.0E-9);
381+
Assert.AreEqual(0, poly3.Coordinates[0].Y, 1.0E-9);
382+
Assert.AreEqual(-10018754.1713945, poly3.Coordinates[1].X, 1.0E-9);
383+
Assert.AreEqual(10018754.1713945, poly3.Coordinates[1].Y, 1.0E-9);
384+
Assert.AreEqual(0, poly3.Coordinates[2].X, 1.0E-9);
385+
Assert.AreEqual(10018754.1713945, poly3.Coordinates[2].Y, 1.0E-9);
386+
Assert.AreEqual(0, poly3.Coordinates[3].X, 1.0E-9);
387+
Assert.AreEqual(0, poly3.Coordinates[3].Y, 1.0E-9);
388+
Assert.AreEqual(-10018754.1713945, poly3.Coordinates[4].X, 1.0E-9);
389+
Assert.AreEqual(0, poly3.Coordinates[4].Y, 1.0E-9);
390+
Assert.AreEqual(SRID3857, poly3.SRID);
374391
}
375392
}
376393
}

0 commit comments

Comments
 (0)