Skip to content

Commit 02edca7

Browse files
committed
Fixed floating point rounding issues in most tests
1 parent fc2ac65 commit 02edca7

File tree

5 files changed

+183
-70
lines changed

5 files changed

+183
-70
lines changed

LinqToDBPostGisNetTopologySuite.Tests/GeometryConstructorsTests.cs

Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -357,16 +357,16 @@ public void TestSTTileEnvelope()
357357

358358
var result1 = db.TestGeometries.Where(g => g.Id == 1);
359359
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);
360+
Assert.AreEqual(-10018754.1713945, poly1.Coordinates[0].X, 1.0E-6);
361+
Assert.AreEqual(0, poly1.Coordinates[0].Y, 1.0E-6);
362+
Assert.AreEqual(-10018754.1713945, poly1.Coordinates[1].X, 1.0E-6);
363+
Assert.AreEqual(10018754.1713945, poly1.Coordinates[1].Y, 1.0E-6);
364+
Assert.AreEqual(0, poly1.Coordinates[2].X, 1.0E-6);
365+
Assert.AreEqual(10018754.1713945, poly1.Coordinates[2].Y, 1.0E-6);
366+
Assert.AreEqual(0, poly1.Coordinates[3].X, 1.0E-6);
367+
Assert.AreEqual(0, poly1.Coordinates[3].Y, 1.0E-6);
368+
Assert.AreEqual(-10018754.1713945, poly1.Coordinates[4].X, 1.0E-6);
369+
Assert.AreEqual(0, poly1.Coordinates[4].Y, 1.0E-6);
370370
Assert.AreEqual(SRID3857, poly1.SRID);
371371

372372
var result2 = db.TestGeometries.Where(g => g.Id == 2);
@@ -377,16 +377,16 @@ public void TestSTTileEnvelope()
377377

378378
var result3 = db.TestGeometries.Where(g => g.Id == 3);
379379
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);
380+
Assert.AreEqual(-10018754.1713945, poly3.Coordinates[0].X, 1.0E-6);
381+
Assert.AreEqual(0, poly3.Coordinates[0].Y, 1.0E-6);
382+
Assert.AreEqual(-10018754.1713945, poly3.Coordinates[1].X, 1.0E-6);
383+
Assert.AreEqual(10018754.1713945, poly3.Coordinates[1].Y, 1.0E-6);
384+
Assert.AreEqual(0, poly3.Coordinates[2].X, 1.0E-6);
385+
Assert.AreEqual(10018754.1713945, poly3.Coordinates[2].Y, 1.0E-6);
386+
Assert.AreEqual(0, poly3.Coordinates[3].X, 1.0E-6);
387+
Assert.AreEqual(0, poly3.Coordinates[3].Y, 1.0E-6);
388+
Assert.AreEqual(-10018754.1713945, poly3.Coordinates[4].X, 1.0E-6);
389+
Assert.AreEqual(0, poly3.Coordinates[4].Y, 1.0E-6);
390390
Assert.AreEqual(SRID3857, poly3.SRID);
391391
}
392392
}

LinqToDBPostGisNetTopologySuite.Tests/GeometryInputTests.cs

Lines changed: 56 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -169,14 +169,62 @@ public void TestSTGeomFromGeoHash()
169169
{
170170
const string GeoHash = "9qqj7nmxncgyy4d0dbxqz0";
171171

172-
var wkt1 = db.Select(() => GeometryInput.STGeomFromGeoHash(GeoHash).STAsText());
173-
Assert.AreEqual("POLYGON((-115.172816 36.114646,-115.172816 36.114646,-115.172816 36.114646,-115.172816 36.114646,-115.172816 36.114646))", wkt1);
174-
175-
var wkt2 = db.Select(() => GeometryInput.STGeomFromGeoHash(GeoHash, 4).STAsText());
176-
Assert.AreEqual("POLYGON((-115.3125 36.03515625,-115.3125 36.2109375,-114.9609375 36.2109375,-114.9609375 36.03515625,-115.3125 36.03515625))", wkt2);
177-
178-
var wkt3 = db.Select(() => GeometryInput.STGeomFromGeoHash(GeoHash, 10).STAsText());
179-
Assert.AreEqual("POLYGON((-115.17282128334 36.1146408319473,-115.17282128334 36.1146461963654,-115.172810554504 36.1146461963654,-115.172810554504 36.1146408319473,-115.17282128334 36.1146408319473))", wkt3);
172+
{
173+
var result1 = db.Select(() => GeometryInput.STGeomFromGeoHash(GeoHash)) as NTSGS.Polygon;
174+
var expected1 = new double[][]
175+
{
176+
new[]{ -115.172816, 36.114646 },
177+
new[]{ -115.172816, 36.114646 },
178+
new[]{ -115.172816, 36.114646 },
179+
new[]{ -115.172816, 36.114646 },
180+
new[]{ -115.172816, 36.114646 },
181+
};
182+
183+
Assert.AreEqual(expected1.Length, result1.Coordinates.Length);
184+
for (var i = 0; i < expected1.Length; i++)
185+
{
186+
Assert.AreEqual(expected1[i][0], result1.Coordinates[i].X, 1.0E-6);
187+
Assert.AreEqual(expected1[i][1], result1.Coordinates[i].Y, 1.0E-6);
188+
}
189+
}
190+
191+
{
192+
var result2 = db.Select(() => GeometryInput.STGeomFromGeoHash(GeoHash, 4)) as NTSGS.Polygon;
193+
var expected2 = new double[][]
194+
{
195+
new[]{ -115.3125, 36.03515625 },
196+
new[]{ -115.3125, 36.2109375 },
197+
new[]{ -114.9609375, 36.2109375 },
198+
new[]{ -114.9609375, 36.03515625 },
199+
new[]{ -115.3125, 36.03515625 },
200+
};
201+
202+
Assert.AreEqual(expected2.Length, result2.Coordinates.Length);
203+
for (var i = 0; i < expected2.Length; i++)
204+
{
205+
Assert.AreEqual(expected2[i][0], result2.Coordinates[i].X, 1.0E-6);
206+
Assert.AreEqual(expected2[i][1], result2.Coordinates[i].Y, 1.0E-6);
207+
}
208+
}
209+
210+
{
211+
var result3 = db.Select(() => GeometryInput.STGeomFromGeoHash(GeoHash, 10)) as NTSGS.Polygon;
212+
var expected3 = new double[][]
213+
{
214+
new[]{ -115.17282128334, 36.1146408319473 },
215+
new[]{ -115.17282128334, 36.1146461963654 },
216+
new[]{ -115.172810554504, 36.1146461963654 },
217+
new[]{ -115.172810554504, 36.1146408319473 },
218+
new[]{ -115.17282128334, 36.1146408319473 },
219+
};
220+
221+
Assert.AreEqual(expected3.Length, result3.Coordinates.Length);
222+
for (var i = 0; i < expected3.Length; i++)
223+
{
224+
Assert.AreEqual(expected3[i][0], result3.Coordinates[i].X, 1.0E-6);
225+
Assert.AreEqual(expected3[i][1], result3.Coordinates[i].Y, 1.0E-6);
226+
}
227+
}
180228

181229
Assert.IsNull(db.Select(() => GeometryInput.STGeomFromGeoHash(null)));
182230
}

LinqToDBPostGisNetTopologySuite.Tests/GeometryProcessingTests.cs

Lines changed: 45 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -461,29 +461,32 @@ public void TestSTShiftLongitude()
461461
{
462462
using (var db = new PostGisTestDataConnection(TestDatabaseConnectionString))
463463
{
464-
const string ewkt1 = "SRID=4326;POINT(-118.58 38.38 10)";
465-
const string ewkt2 = "SRID=4326;POINT(241.42 38.38 10)";
464+
const string Ewkt1 = "SRID=4326;POINT(-118.58 38.38 10)";
465+
const string Ewkt2 = "SRID=4326;POINT(241.42 38.38 10)";
466466
db.TestGeometries
467467
.Value(g => g.Id, 1)
468-
.Value(p => p.Geometry, () => GeometryInput.STGeomFromEWKT(ewkt1))
468+
.Value(p => p.Geometry, () => GeometryInput.STGeomFromEWKT(Ewkt1))
469469
.Insert();
470470
db.TestGeometries
471471
.Value(g => g.Id, 2)
472-
.Value(p => p.Geometry, () => GeometryInput.STGeomFromEWKT(ewkt2))
472+
.Value(p => p.Geometry, () => GeometryInput.STGeomFromEWKT(Ewkt2))
473473
.Insert();
474474

475475
var result1 = db.TestGeometries
476476
.Where(g => g.Id == 1)
477-
.Select(g => g.Geometry.STShiftLongitude().STAsEWKT())
478-
.Single();
477+
.Select(g => g.Geometry.STShiftLongitude())
478+
.Single() as NTSGS.Point;
479479

480480
var result2 = db.TestGeometries
481481
.Where(g => g.Id == 2)
482-
.Select(g => g.Geometry.STShiftLongitude().STAsEWKT())
483-
.Single();
482+
.Select(g => g.Geometry.STShiftLongitude())
483+
.Single() as NTSGS.Point;
484484

485-
Assert.AreEqual("SRID=4326;POINT(241.42 38.38 10)", result1);
486-
Assert.AreEqual("SRID=4326;POINT(-118.58 38.38 10)", result2);
485+
Assert.AreEqual(241.42, result1.X, 1.0E-2);
486+
Assert.AreEqual(38.38, result1.Y, 1.0E-2);
487+
488+
Assert.AreEqual(-118.58, result2.X, 1.0E-2);
489+
Assert.AreEqual(38.38, result2.Y, 1.0E-2);
487490
}
488491
}
489492

@@ -649,17 +652,23 @@ public void TestSTSetEffectiveArea()
649652

650653
var result1 = db.TestGeometries
651654
.Where(g => g.Id == 1)
652-
.Select(g => g.Geometry.STSetEffectiveArea().STAsText())
653-
.Single();
655+
.Select(g => g.Geometry.STSetEffectiveArea())
656+
.Single() as NTSGS.LineString;
654657

655-
Assert.AreEqual("LINESTRING M (5 2 3.40282e+038,3 8 29,6 20 1.5,7 25 49.5,10 10 3.40282e+038)", result1);
658+
Assert.AreEqual(3.40282e+038, result1.Coordinates[0].M, 0.00001E38);
659+
Assert.AreEqual(29, result1.Coordinates[1].M, 1.0E-3);
660+
Assert.AreEqual(1.5, result1.Coordinates[2].M, 1.0E-3);
661+
Assert.AreEqual(49.5, result1.Coordinates[3].M, 1.0E-3);
662+
Assert.AreEqual(3.40282e+038, result1.Coordinates[4].M, 0.00001E38);
656663

657664
var result2 = db.TestGeometries
658665
.Where(g => g.Id == 1)
659-
.Select(g => g.Geometry.STSetEffectiveArea(30).STAsText())
660-
.Single();
666+
.Select(g => g.Geometry.STSetEffectiveArea(30))
667+
.Single() as NTSGS.LineString;
661668

662-
Assert.AreEqual("LINESTRING M (5 2 3.40282e+038,7 25 49.5,10 10 3.40282e+038)", result2);
669+
Assert.AreEqual(3.40282e+038, result2.Coordinates[0].M, 0.00001E38);
670+
Assert.AreEqual(49.5, result2.Coordinates[1].M, 1.0E-3);
671+
Assert.AreEqual(3.40282e+038, result2.Coordinates[2].M, 0.00001E38);
663672
}
664673
}
665674

@@ -734,18 +743,32 @@ public void TestSTVoronoiLines()
734743
{
735744
using (var db = new PostGisTestDataConnection(TestDatabaseConnectionString))
736745
{
737-
const string wkt = "MULTIPOINT (50 30, 60 30, 100 100,10 150, 110 120)";
746+
const string Wkt = "MULTIPOINT (50 30, 60 30, 100 100,10 150, 110 120)";
738747
db.TestGeometries
739748
.Value(g => g.Id, 1)
740-
.Value(p => p.Geometry, () => GeometryInput.STGeometryFromText(wkt))
749+
.Value(p => p.Geometry, () => GeometryInput.STGeometryFromText(Wkt))
741750
.Insert();
742751

743752
var result = db.TestGeometries
744-
.Where(g => g.Id == 1)
745-
.Select(g => g.Geometry.STVoronoiLines(30.0).STAsText())
746-
.Single();
753+
.Select(g => g.Geometry.STVoronoiLines(30.0))
754+
.Single() as NTSGS.MultiLineString;
755+
756+
Assert.AreEqual(3, result.Geometries.Length);
757+
758+
Assert.AreEqual(135.555555555556, result.Geometries[0].Coordinates[0].X, 1.0E-12);
759+
Assert.AreEqual(270, result.Geometries[0].Coordinates[0].Y, 1.0E-12);
760+
Assert.AreEqual(36.8181818181818, result.Geometries[0].Coordinates[1].X, 1.0E-12);
761+
Assert.AreEqual(92.2727272727273, result.Geometries[0].Coordinates[1].Y, 1.0E-12);
762+
763+
Assert.AreEqual(36.8181818181818, result.Geometries[1].Coordinates[0].X, 1.0E-12);
764+
Assert.AreEqual(92.2727272727273, result.Geometries[1].Coordinates[0].Y, 1.0E-12);
765+
Assert.AreEqual(-110, result.Geometries[1].Coordinates[1].X, 1.0E-12);
766+
Assert.AreEqual(43.3333333333333, result.Geometries[1].Coordinates[1].Y, 1.0E-12);
747767

748-
Assert.AreEqual("MULTILINESTRING((135.555555555556 270,36.8181818181818 92.2727272727273),(36.8181818181818 92.2727272727273,-110 43.3333333333333),(230 -45.7142857142858,36.8181818181818 92.2727272727273))", result);
768+
Assert.AreEqual(230, result.Geometries[2].Coordinates[0].X, 1.0E-12);
769+
Assert.AreEqual(-45.7142857142858, result.Geometries[2].Coordinates[0].Y, 1.0E-12);
770+
Assert.AreEqual(36.8181818181818, result.Geometries[2].Coordinates[1].X, 1.0E-12);
771+
Assert.AreEqual(92.2727272727273, result.Geometries[2].Coordinates[1].Y, 1.0E-12);
749772
}
750773
}
751774

LinqToDBPostGisNetTopologySuite.Tests/MeasurementFunctionsTests.cs

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -101,14 +101,18 @@ public void TestST3DClosestPoint()
101101
{
102102
using (var db = new PostGisTestDataConnection(TestDatabaseConnectionString))
103103
{
104-
var pt = db.Select(() => GeometryInput.STPointFromText("POINT(100 100 30)"));
104+
var point = db.Select(() => GeometryInput.STPointFromText("POINT(100 100 30)"));
105105
var line = db.Select(() => GeometryInput.STLineFromText("LINESTRING (20 80 20, 98 190 1, 110 180 3, 50 75 1000)"));
106106

107-
var p1 = db.Select(() => MeasurementFunctions.ST3DClosestPoint(line, pt).STAsEWKT());
108-
var p2 = db.Select(() => MeasurementFunctions.STClosestPoint(line, pt).STAsEWKT());
107+
var point1 = db.Select(() => MeasurementFunctions.ST3DClosestPoint(line, point)) as NTSGS.Point;
108+
var point2 = db.Select(() => MeasurementFunctions.STClosestPoint(line, point)) as NTSGS.Point;
109+
110+
Assert.AreEqual(54.6993798867619, point1.X, 1.0E-9);
111+
Assert.AreEqual(128.935022917228, point1.Y, 1.0E-9);
112+
Assert.AreEqual(11.5475869506606, point1.Z, 1.0E-9);
109113

110-
Assert.AreEqual("POINT(54.6993798867619 128.935022917228 11.5475869506606)", p1);
111-
Assert.AreEqual("POINT(73.0769230769231 115.384615384615)", p2);
114+
Assert.AreEqual(73.0769230769231, point2.X, 1.0E-9);
115+
Assert.AreEqual(115.384615384615, point2.Y, 1.0E-9);
112116
}
113117
}
114118

@@ -426,11 +430,16 @@ public void TestST3DShortestLine()
426430
{
427431
using (var db = new PostGisTestDataConnection(TestDatabaseConnectionString))
428432
{
429-
var pt = db.Select(() => GeometryInput.STPointFromText("POINT(100 100 30)"));
433+
var point = db.Select(() => GeometryInput.STPointFromText("POINT(100 100 30)"));
430434
var line = db.Select(() => GeometryInput.STLineFromText("LINESTRING (20 80 20, 98 190 1, 110 180 3, 50 75 1000)"));
431435

432-
var sline1 = db.Select(() => MeasurementFunctions.ST3DShortestLine(line, pt).STAsEWKT());
433-
Assert.AreEqual("LINESTRING(54.6993798867619 128.935022917228 11.5475869506606,100 100 30)", sline1);
436+
var sline1 = db.Select(() => MeasurementFunctions.ST3DShortestLine(line, point)) as NTSGS.LineString;
437+
Assert.AreEqual(54.6993798867619, sline1.Coordinates[0].X, 1.0E-6);
438+
Assert.AreEqual(128.935022917228, sline1.Coordinates[0].Y, 1.0E-6);
439+
Assert.AreEqual(11.5475869506606, sline1.Coordinates[0].Z, 1.0E-9);
440+
Assert.AreEqual(100, sline1.Coordinates[1].X, 1.0E-6);
441+
Assert.AreEqual(100, sline1.Coordinates[1].Y, 1.0E-6);
442+
Assert.AreEqual(30, sline1.Coordinates[1].Z, 1.0E-9);
434443

435444
Assert.IsNull(db.Select(() => MeasurementFunctions.ST3DShortestLine(null, null)));
436445
}

0 commit comments

Comments
 (0)