LazMapViewer: Add unit test for distance calculation

git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@8793 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
wp_xxyyzz
2023-04-18 17:48:01 +00:00
parent fd7b0d8af9
commit 649286bb6b
2 changed files with 67 additions and 31 deletions

View File

@@ -10,6 +10,7 @@ uses
type
TMiscTests_Engine= class(TTestCase)
published
procedure Test_Distance;
procedure Test_LatToStr_DMS;
procedure Test_LatToStr_Deg;
procedure Test_LonToStr_DMS;
@@ -23,6 +24,29 @@ implementation
uses
Math, mvEngine;
type
TDistanceRec = record
Name1: String;
Lat1, Lon1: Double;
Name2: String;
Lat2, Lon2: Double;
Distance_km: Double;
end;
const
Distance_TestData: array[0..2] of TDistanceRec = (
// Calculated on https://keisan.casio.com/exec/system/1224587128 for R=6378km
(Name1: 'Sydney'; Lat1:-33.865143; Lon1:151.209900;
Name2: 'San Francisco'; Lat2:37.828724; Lon2:-122.355537;
Distance_km: 11968),
(Name1: 'London'; Lat1: 51.503368; Lon1: -0.127721;
Name2: 'Istanbul'; Lat2: 41.276901; Lon2: 28.729324;
Distance_km: 2468.6),
(Name1: 'Tokyo'; Lat1:35.652832; Lon1:139.839478;
Name2: 'Singapore'; Lat2:1.290270; Lon2:103.851959;
Distance_km: 5331.97)
);
type
TLatLonRec = record
Name: String;
@@ -38,9 +62,6 @@ type
Lon_S: Double;
end;
var
PointFormatsettings: TFormatSettings;
const
LatLon_TestData: array[0..7] of TLatLonRec = (
(Name:'Sydney'; // https://www.latlong.net/place/sydney-nsw-australia-700.html
@@ -70,6 +91,25 @@ const
);
var
PointFormatsettings: TFormatSettings;
procedure TMiscTests_Engine.Test_Distance;
const
TOLERANCE = 2;
RADIUS = 6378; // Earth radius in km, as used by the references
var
i: Integer;
begin
for i := 0 to High(Distance_TestData) do
with Distance_TestData[i] do
AssertEquals(
'Distance mismatch between ' + Name1 + ' and ' + Name2,
Distance_km,
HaverSineDist(Lat1, Lon1, Lat2, Lon2, RADIUS), TOLERANCE
);
end;
procedure TMiscTests_Engine.Test_LatToStr_Deg;
const
NO_DMS = false;