summaryrefslogtreecommitdiff
path: root/platform/darwin/test/MGLGeometryTests.mm
diff options
context:
space:
mode:
Diffstat (limited to 'platform/darwin/test/MGLGeometryTests.mm')
-rw-r--r--platform/darwin/test/MGLGeometryTests.mm68
1 files changed, 68 insertions, 0 deletions
diff --git a/platform/darwin/test/MGLGeometryTests.mm b/platform/darwin/test/MGLGeometryTests.mm
index e3b1836e8d..b7e0398400 100644
--- a/platform/darwin/test/MGLGeometryTests.mm
+++ b/platform/darwin/test/MGLGeometryTests.mm
@@ -2,6 +2,7 @@
#import <XCTest/XCTest.h>
#import "../../darwin/src/MGLGeometry_Private.h"
+#import "../../darwin/src/MGLCircle_Private.h"
@interface MGLGeometryTests : XCTestCase
@end
@@ -208,4 +209,71 @@
}
}
+- (void)testCircles {
+ {
+ MGLCircle *circle = [MGLCircle circleWithCenterCoordinate:CLLocationCoordinate2DMake(0, 0) radius:0];
+ XCTAssertEqual(circle.coordinate.latitude, 0);
+ XCTAssertEqual(circle.coordinate.longitude, 0);
+ XCTAssertEqual(circle.radius, 0);
+ XCTAssertEqual(circle.numberOfVertices, 0ul);
+ XCTAssertEqual([circle linearRingWithNumberOfVertices:0].size(), 0ul);
+ }
+ {
+ MGLCircle *positiveCircle = [MGLCircle circleWithCenterCoordinate:CLLocationCoordinate2DMake(0, 0) radius:10];
+ XCTAssertEqual(positiveCircle.radius, 10);
+ MGLCircle *negativeCircle = [MGLCircle circleWithCenterCoordinate:CLLocationCoordinate2DMake(0, 0) radius:-10];
+ XCTAssertEqual(negativeCircle.radius, -10);
+ XCTAssertEqual(positiveCircle.numberOfVertices, negativeCircle.numberOfVertices);
+ }
+ {
+ MGLCircle *bigCircle = [MGLCircle circleWithCenterCoordinate:CLLocationCoordinate2DMake(0, 0) radius:1000];
+ XCTAssertEqual(bigCircle.radius, 1000);
+ XCTAssertEqual(bigCircle.numberOfVertices, 5261ul);
+ MGLCircle *biggerCircle = [MGLCircle circleWithCenterCoordinate:CLLocationCoordinate2DMake(0, 0) radius:10000];
+ XCTAssertEqual(biggerCircle.radius, 10000);
+ XCTAssertEqual(biggerCircle.numberOfVertices, 21600ul);
+ }
+ {
+ MGLCoordinateBounds bounds = MGLCoordinateBoundsMake(CLLocationCoordinate2DMake(0, 0), CLLocationCoordinate2DMake(0, 0));
+ MGLCircle *circle = [MGLCircle circleWithCoordinateBounds:bounds];
+ XCTAssertEqual(circle.coordinate.latitude, 0);
+ XCTAssertEqual(circle.coordinate.longitude, 0);
+ XCTAssertEqual(circle.radius, 0);
+ }
+ {
+ MGLCoordinateBounds bounds = MGLCoordinateBoundsMake(CLLocationCoordinate2DMake(0, 0), CLLocationCoordinate2DMake(1, 0));
+ MGLCircle *circle = [MGLCircle circleWithCoordinateBounds:bounds];
+ XCTAssertEqual(circle.coordinate.latitude, 0.5);
+ XCTAssertEqual(circle.coordinate.longitude, 0);
+ XCTAssertGreaterThan(circle.radius, 0);
+ MGLCoordinateSpan span = MGLCoordinateBoundsGetCoordinateSpan(circle.coordinateBounds);
+ XCTAssertGreaterThan(span.latitudeDelta, 0);
+ XCTAssertGreaterThan(span.longitudeDelta, 0);
+ }
+ const CLLocationDistance earthRadius = 6378137.0;
+ {
+ MGLCircle *circle = [MGLCircle circleWithCenterCoordinate:CLLocationCoordinate2DMake(0, 0) radius:M_PI_2 * earthRadius];
+ XCTAssertEqual(circle.coordinate.latitude, 0);
+ XCTAssertEqual(circle.coordinate.longitude, 0);
+ XCTAssertEqual(circle.radius, M_PI_2 * earthRadius);
+ XCTAssertEqual([circle linearRingWithNumberOfVertices:128].size(), 128ul);
+ }
+ {
+ MGLCircle *circle = [MGLCircle circleWithCenterCoordinate:CLLocationCoordinate2DMake(23.5, 0) radius:M_PI_2 * earthRadius];
+ XCTAssertEqual(circle.coordinate.latitude, 23.5);
+ XCTAssertEqual(circle.coordinate.longitude, 0);
+ XCTAssertEqual(circle.radius, M_PI_2 * earthRadius);
+ XCTAssertEqual([circle linearRingWithNumberOfVertices:128].size(), 128ul + 3,
+ @"Polar cap should have extra vertices to cover North Pole.");
+ }
+ {
+ MGLCircle *circle = [MGLCircle circleWithCenterCoordinate:CLLocationCoordinate2DMake(-23.5, 20) radius:M_PI_2 * earthRadius];
+ XCTAssertEqual(circle.coordinate.latitude, -23.5);
+ XCTAssertEqual(circle.coordinate.longitude, 20);
+ XCTAssertEqual(circle.radius, M_PI_2 * earthRadius);
+ XCTAssertEqual([circle linearRingWithNumberOfVertices:128].size(), 128ul + 3,
+ @"Polar cap should have extra vertices to cover South Pole.");
+ }
+}
+
@end