Skip to content

Commit 944987e

Browse files
authored
Merge pull request #3066 from xwu/decimal-distance
[SR-6785] Fix `Decimal` conformance to `Strideable`
2 parents b9451fd + 7accc7d commit 944987e

File tree

4 files changed

+25
-6
lines changed

4 files changed

+25
-6
lines changed

Darwin/Foundation-swiftoverlay-Tests/TestDecimal.swift

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -289,8 +289,6 @@ class TestDecimal : XCTestCase {
289289
XCTAssertEqual(Decimal(-9), Decimal(1) - Decimal(10))
290290
XCTAssertEqual(Decimal(3), Decimal(2).nextUp)
291291
XCTAssertEqual(Decimal(2), Decimal(3).nextDown)
292-
XCTAssertEqual(Decimal(-476), Decimal(1024).distance(to: Decimal(1500)))
293-
XCTAssertEqual(Decimal(68040), Decimal(386).advanced(by: Decimal(67654)))
294292
XCTAssertEqual(Decimal(1.234), abs(Decimal(1.234)))
295293
XCTAssertEqual(Decimal(1.234), abs(Decimal(-1.234)))
296294
if #available(macOS 10.15, iOS 13, tvOS 13, watchOS 6, *) {
@@ -597,6 +595,17 @@ class TestDecimal : XCTestCase {
597595
}
598596
}
599597
}
598+
599+
func test_Strideable() {
600+
XCTAssertEqual(Decimal(476), Decimal(1024).distance(to: Decimal(1500)))
601+
XCTAssertEqual(Decimal(68040), Decimal(386).advanced(by: Decimal(67654)))
602+
603+
let x = 42 as Decimal
604+
XCTAssertEqual(x.distance(to: 43), 1)
605+
XCTAssertEqual(x.advanced(by: 1), 43)
606+
XCTAssertEqual(x.distance(to: 41), -1)
607+
XCTAssertEqual(x.advanced(by: -1), 41)
608+
}
600609

601610
func test_ULP() {
602611
let x = 0.1 as Decimal

Darwin/Foundation-swiftoverlay/Decimal.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -316,7 +316,7 @@ extension Decimal {
316316

317317
extension Decimal : Strideable {
318318
public func distance(to other: Decimal) -> Decimal {
319-
return self - other
319+
return other - self
320320
}
321321

322322
public func advanced(by n: Decimal) -> Decimal {

Sources/Foundation/Decimal.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -485,7 +485,7 @@ extension Decimal {
485485

486486
extension Decimal : Strideable {
487487
public func distance(to other: Decimal) -> Decimal {
488-
return self - other
488+
return other - self
489489
}
490490
public func advanced(by n: Decimal) -> Decimal {
491491
return self + n

Tests/Foundation/Tests/TestDecimal.swift

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -376,8 +376,6 @@ class TestDecimal: XCTestCase {
376376
XCTAssertEqual(Decimal(-9), Decimal(1) - Decimal(10))
377377
XCTAssertEqual(Decimal(3), Decimal(2).nextUp)
378378
XCTAssertEqual(Decimal(2), Decimal(3).nextDown)
379-
XCTAssertEqual(Decimal(-476), Decimal(1024).distance(to: Decimal(1500)))
380-
XCTAssertEqual(Decimal(68040), Decimal(386).advanced(by: Decimal(67654)))
381379
XCTAssertEqual(Decimal(1.234), abs(Decimal(1.234)))
382380
XCTAssertEqual(Decimal(1.234), abs(Decimal(-1.234)))
383381
XCTAssertEqual((0 as Decimal).magnitude, 0 as Decimal)
@@ -849,6 +847,17 @@ class TestDecimal: XCTestCase {
849847

850848
XCTAssertEqual(100,number.objCType.pointee, "ObjC type for NSDecimalNumber is 'd'")
851849
}
850+
851+
func test_Strideable() {
852+
XCTAssertEqual(Decimal(476), Decimal(1024).distance(to: Decimal(1500)))
853+
XCTAssertEqual(Decimal(68040), Decimal(386).advanced(by: Decimal(67654)))
854+
855+
let x = 42 as Decimal
856+
XCTAssertEqual(x.distance(to: 43), 1)
857+
XCTAssertEqual(x.advanced(by: 1), 43)
858+
XCTAssertEqual(x.distance(to: 41), -1)
859+
XCTAssertEqual(x.advanced(by: -1), 41)
860+
}
852861

853862
func test_ULP() {
854863
let x = 0.1 as Decimal
@@ -1460,6 +1469,7 @@ class TestDecimal: XCTestCase {
14601469
("test_ScanDecimal", test_ScanDecimal),
14611470
("test_SimpleMultiplication", test_SimpleMultiplication),
14621471
("test_SmallerNumbers", test_SmallerNumbers),
1472+
("test_Strideable", test_Strideable),
14631473
("test_ULP", test_ULP),
14641474
("test_ZeroPower", test_ZeroPower),
14651475
("test_parseDouble", test_parseDouble),

0 commit comments

Comments
 (0)