Skip to content

Commit 2da8a34

Browse files
authored
Fix Xcode 26.4 compiler issue (#89)
* Fix Xcode 26.4 compiler issue * Update CI workflow * Fix Copilot nitpick
1 parent d09d98b commit 2da8a34

3 files changed

Lines changed: 19 additions & 5 deletions

File tree

.github/workflows/build.yml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,19 +9,19 @@ jobs:
99
runs-on: macOS-latest
1010
steps:
1111
- name: Checkout
12-
uses: actions/checkout@v3
12+
uses: actions/checkout@v4
1313
- name: Select Xcode
14-
run: sudo xcode-select -s /Applications/Xcode_15.0.app
14+
run: sudo xcode-select -s /Applications/Xcode_26.3.app
1515
- name: Build and Test SPM
1616
run: swift test -v
1717
- name: Build and Test CocoaPods
1818
run: pod lib lint --allow-warnings --fail-fast
1919
linux:
2020
runs-on: ubuntu-latest
2121
container:
22-
image: swift:5.8.1
22+
image: swift:6.0
2323
steps:
2424
- name: Checkout
25-
uses: actions/checkout@v3
25+
uses: actions/checkout@v4
2626
- name: Build and Test
2727
run: swift test -v

Sources/BigNumber/Swift-Big-Number-Core.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2999,7 +2999,7 @@ public struct BDouble:
29992999
return true;
30003000
} else if diff <= epsilon {
30013001
return true // shortcut
3002-
} else if (lhs == 0 || rhs == 0 || diff < Double.leastNormalMagnitude) {
3002+
} else if (lhs.isZero() || rhs.isZero() || diff < Double.leastNormalMagnitude) {
30033003
// lhs or rhs is zero or both are extremely close to it
30043004
// relative error is less meaningful here
30053005
return diff < (epsilon * Double.leastNormalMagnitude);

Tests/BigNumberTests/BDoubleTests.swift

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -493,6 +493,20 @@ class BDoubleTests : XCTestCase {
493493
XCTAssert(BDouble.nearlyEqual(BDouble(0.000000001), BDMin));
494494
XCTAssert(BDouble.nearlyEqual(BDMin, BDouble(0.000000001)));
495495
XCTAssert(BDouble.nearlyEqual(-BDMin, BDouble(0.000000001)));
496+
497+
// Negative-signed zero constructed via raw initializer (canonicalized by minimize())
498+
let rawNegZero = BDouble(sign: true, numerator: [0], denominator: [2])
499+
XCTAssert(rawNegZero.isZero())
500+
XCTAssert(BDouble.nearlyEqual(rawNegZero, BDouble(0.0)))
501+
XCTAssert(BDouble.nearlyEqual(BDouble(0.0), rawNegZero))
502+
XCTAssert(BDouble.nearlyEqual(rawNegZero, rawNegZero))
503+
XCTAssert(BDouble.nearlyEqual(rawNegZero, BDouble(0.00000001)))
504+
505+
// Integer-literal zero (the pattern that triggered the Xcode 26.4 ambiguity)
506+
let intZero: BDouble = 0
507+
XCTAssert(intZero.isZero())
508+
XCTAssert(BDouble.nearlyEqual(intZero, BDouble(0.0)))
509+
XCTAssert(BDouble.nearlyEqual(intZero, rawNegZero))
496510
}
497511

498512
func testRadix() {

0 commit comments

Comments
 (0)