From 7d49c4e539b132b4b2f53c78dbe1ed9862e9d2f3 Mon Sep 17 00:00:00 2001 From: Michael Griebling Date: Fri, 14 Jul 2023 08:24:14 -0400 Subject: [PATCH] Updated BigInt version and made related changes. --- Package.swift | 4 ++++ Sources/BigDecimal/BigDecimal.swift | 16 ++++++++-------- Sources/BigDecimal/Rounding.swift | 4 ++-- Tests/BigDecimalTests/TestDecimal.swift | 4 ++-- .../BigDecimalTests/TestDecimal128Encoding.swift | 6 +++--- 5 files changed, 19 insertions(+), 15 deletions(-) diff --git a/Package.swift b/Package.swift index 6bac340..5fb7670 100644 --- a/Package.swift +++ b/Package.swift @@ -34,3 +34,7 @@ let package = Package( dependencies: ["BigDecimal"]), ] ) + +//package.dependencies.append( +// .package(url: "https://github.com/SwiftPackageIndex/SPIManifest.git", from: "0.12.0") +//) diff --git a/Sources/BigDecimal/BigDecimal.swift b/Sources/BigDecimal/BigDecimal.swift index 3be2571..47c630b 100644 --- a/Sources/BigDecimal/BigDecimal.swift +++ b/Sources/BigDecimal/BigDecimal.swift @@ -156,9 +156,9 @@ public struct BigDecimal : Comparable, Equatable, Hashable, Codable { } let s = BInt(d.sign == .minus ? -significand : significand) if exponent < 0 { - self.init(BInt.five ** (-exponent) * s, exponent) + self.init(BInt.FIVE ** (-exponent) * s, exponent) } else if exponent > 0 { - self.init(BInt.two ** exponent * s, 0) + self.init(BInt.TWO ** exponent * s, 0) } else { self.init(s, 0) } @@ -584,7 +584,7 @@ extension BigDecimal { var q = self.digits var n = 0 while true { - let (q1, r) = q.quotientAndRemainder(dividingBy: BInt.ten) + let (q1, r) = q.quotientAndRemainder(dividingBy: BInt.TEN) if !r.isZero { break } @@ -596,7 +596,7 @@ extension BigDecimal { /// Unit in last place = Self(1, self.exponent) public var ulp: Self { - self.isFinite ? Self(BInt.one, self.exponent) : Self.flagNaN() + self.isFinite ? Self(BInt.ONE, self.exponent) : Self.flagNaN() } @@ -749,7 +749,7 @@ extension BigDecimal { } var exp = self.exponent var sig = self.digits.abs - while sig.limbs.count > 2 { + while sig.words.count > 2 { sig /= 10 exp += 1 } @@ -764,7 +764,7 @@ extension BigDecimal { if sig == 0 { return Decimal(0) } - assert(sig.limbs.count < 3) + assert(sig.words.count < 3) assert(minExp <= exp && exp <= maxExp) func decode() -> UInt16 { @@ -887,7 +887,7 @@ extension BigDecimal { d1 >>= count2 var count5 = 0 while true { - let (q, r) = d1.quotientAndRemainder(dividingBy: BInt.five) + let (q, r) = d1.quotientAndRemainder(dividingBy: BInt.FIVE) if !r.isZero { break } @@ -912,7 +912,7 @@ extension BigDecimal { let z = Rounding.pow10(ctx.precision) var r = BInt.zero while q.abs >= z { - (q, r) = q.quotientAndRemainder(dividingBy: BInt.ten) + (q, r) = q.quotientAndRemainder(dividingBy: BInt.TEN) m -= 1 } switch ctx.mode { diff --git a/Sources/BigDecimal/Rounding.swift b/Sources/BigDecimal/Rounding.swift index 3d71ec5..547e520 100644 --- a/Sources/BigDecimal/Rounding.swift +++ b/Sources/BigDecimal/Rounding.swift @@ -89,7 +89,7 @@ public struct Rounding: Equatable { let pr = q.abs.asString().count if pr > self.precision { // 999.9 => 1000 - return BigDecimal(q / BInt.ten, x.exponent + d + 1) + return BigDecimal(q / BInt.TEN, x.exponent + d + 1) } else { return BigDecimal(q, x.exponent + d) } @@ -160,7 +160,7 @@ public struct Rounding: Equatable { static func pow10(_ n: Int) -> BInt { assert(n >= 0) - return n < pow10table.count ? pow10table[n] : BInt.ten ** n + return n < pow10table.count ? pow10table[n] : BInt.TEN ** n } } diff --git a/Tests/BigDecimalTests/TestDecimal.swift b/Tests/BigDecimalTests/TestDecimal.swift index 84d8dd3..fb500c7 100644 --- a/Tests/BigDecimalTests/TestDecimal.swift +++ b/Tests/BigDecimalTests/TestDecimal.swift @@ -50,10 +50,10 @@ final class TestDecimal: XCTestCase { XCTAssertTrue(min > 0.0) let x = BigDecimal(min) XCTAssertEqual(x.exponent, -128) - XCTAssertEqual(x.digits, BInt.one) + XCTAssertEqual(x.digits, BInt.ONE) XCTAssertEqual(min, x.asDecimal()) - let d = BigDecimal(BInt.one, -129).asDecimal() + let d = BigDecimal(BInt.ONE, -129).asDecimal() XCTAssertEqual(d, 0.0) XCTAssertFalse(BigDecimal.nanFlag) } diff --git a/Tests/BigDecimalTests/TestDecimal128Encoding.swift b/Tests/BigDecimalTests/TestDecimal128Encoding.swift index c90758b..0062f69 100644 --- a/Tests/BigDecimalTests/TestDecimal128Encoding.swift +++ b/Tests/BigDecimalTests/TestDecimal128Encoding.swift @@ -26,9 +26,9 @@ class TestDecimal128Encoding: XCTestCase { func string2UInt128(_ s: String) -> UInt128 { let b = BInt(s, radix: 16)! - let lo = b.limbs[0] - let hi = b.limbs.count == 1 ? 0 : b.limbs[1] - return UInt128(high: hi, low: lo) + let lo = b.words[0] + let hi = b.words.count == 1 ? 0 : b.words[1] + return UInt128(high: UInt128.High(hi), low: UInt128.Low(lo)) } struct test {