diff --git a/platform/darwin/src/MGLClockDirectionFormatter.m b/platform/darwin/src/MGLClockDirectionFormatter.m index c8c07487b..fd67968e6 100644 --- a/platform/darwin/src/MGLClockDirectionFormatter.m +++ b/platform/darwin/src/MGLClockDirectionFormatter.m @@ -19,7 +19,10 @@ } - (NSString *)stringFromDirection:(CLLocationDirection)direction { - NSInteger hour = round(-wrap(-direction, -360, 0) / 360 * 12); + NSInteger hour = round(wrap(direction, 0, 360) / 360 * 12); + if (hour == 0) { + hour = 12; + } NSString *format; switch (self.unitStyle) { case NSFormattingUnitStyleShort: diff --git a/platform/darwin/src/MGLCompassDirectionFormatter.m b/platform/darwin/src/MGLCompassDirectionFormatter.m index 8a4118ba5..c46fe9e4d 100644 --- a/platform/darwin/src/MGLCompassDirectionFormatter.m +++ b/platform/darwin/src/MGLCompassDirectionFormatter.m @@ -98,7 +98,7 @@ NSAssert(shortStrings.count == longStrings.count, @"Long and short compass direction string arrays must have the same size."); }); - NSInteger cardinalPoint = round(wrap(direction, 0, 360) / 360 * shortStrings.count); + NSInteger cardinalPoint = wrap(round(wrap(direction, 0, 360) / 360 * shortStrings.count), 0, shortStrings.count); switch (self.unitStyle) { case NSFormattingUnitStyleShort: return shortStrings[cardinalPoint]; diff --git a/platform/darwin/test/MGLClockDirectionFormatterTests.m b/platform/darwin/test/MGLClockDirectionFormatterTests.m index 2b98de086..a020ed88b 100644 --- a/platform/darwin/test/MGLClockDirectionFormatterTests.m +++ b/platform/darwin/test/MGLClockDirectionFormatterTests.m @@ -49,6 +49,26 @@ static NSString * const MGLTestLocaleIdentifier = @"en-US"; XCTAssertEqualObjects(@"9:00", [shortFormatter stringFromDirection:direction]); XCTAssertEqualObjects(@"9 o’clock", [mediumFormatter stringFromDirection:direction]); XCTAssertEqualObjects(@"9 o’clock", [longFormatter stringFromDirection:direction]); + + direction = 359.34951805867024; + XCTAssertEqualObjects(@"12:00", [shortFormatter stringFromDirection:direction]); + XCTAssertEqualObjects(@"12 o’clock", [mediumFormatter stringFromDirection:direction]); + XCTAssertEqualObjects(@"12 o’clock", [longFormatter stringFromDirection:direction]); + + direction = 360; + XCTAssertEqualObjects(@"12:00", [shortFormatter stringFromDirection:direction]); + XCTAssertEqualObjects(@"12 o’clock", [mediumFormatter stringFromDirection:direction]); + XCTAssertEqualObjects(@"12 o’clock", [longFormatter stringFromDirection:direction]); + + direction = 360.1; + XCTAssertEqualObjects(@"12:00", [shortFormatter stringFromDirection:direction]); + XCTAssertEqualObjects(@"12 o’clock", [mediumFormatter stringFromDirection:direction]); + XCTAssertEqualObjects(@"12 o’clock", [longFormatter stringFromDirection:direction]); + + direction = 720; + XCTAssertEqualObjects(@"12:00", [shortFormatter stringFromDirection:direction]); + XCTAssertEqualObjects(@"12 o’clock", [mediumFormatter stringFromDirection:direction]); + XCTAssertEqualObjects(@"12 o’clock", [longFormatter stringFromDirection:direction]); } @end diff --git a/platform/darwin/test/MGLCompassDirectionFormatterTests.m b/platform/darwin/test/MGLCompassDirectionFormatterTests.m index 08b0b92f0..bba0317eb 100644 --- a/platform/darwin/test/MGLCompassDirectionFormatterTests.m +++ b/platform/darwin/test/MGLCompassDirectionFormatterTests.m @@ -64,11 +64,21 @@ XCTAssertEqualObjects(@"west", [mediumFormatter stringFromDirection:direction]); XCTAssertEqualObjects(@"west", [longFormatter stringFromDirection:direction]); + direction = 359.34951805867024; + XCTAssertEqualObjects(@"N", [shortFormatter stringFromDirection:direction]); + XCTAssertEqualObjects(@"north", [mediumFormatter stringFromDirection:direction]); + XCTAssertEqualObjects(@"north", [longFormatter stringFromDirection:direction]); + direction = 360; XCTAssertEqualObjects(@"N", [shortFormatter stringFromDirection:direction]); XCTAssertEqualObjects(@"north", [mediumFormatter stringFromDirection:direction]); XCTAssertEqualObjects(@"north", [longFormatter stringFromDirection:direction]); + direction = 360.1; + XCTAssertEqualObjects(@"N", [shortFormatter stringFromDirection:direction]); + XCTAssertEqualObjects(@"north", [mediumFormatter stringFromDirection:direction]); + XCTAssertEqualObjects(@"north", [longFormatter stringFromDirection:direction]); + direction = 720; XCTAssertEqualObjects(@"N", [shortFormatter stringFromDirection:direction]); XCTAssertEqualObjects(@"north", [mediumFormatter stringFromDirection:direction]);