Skip to content

Commit 28e0c73

Browse files
committed
feature: adds support for Quantity predecession
1 parent b7f9fe1 commit 28e0c73

File tree

3 files changed

+28
-0
lines changed

3 files changed

+28
-0
lines changed

NumberSystems/Sources/NumberSystems/Operable.swift

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
public protocol Operable {
22
/// Changes the cardinality of this value to the next one.
33
mutating func succeed()
4+
5+
/// Changes the cardinality of this value to the previous one.
6+
mutating func precede()
47
}
58

69
extension Operable {
@@ -9,4 +12,10 @@ extension Operable {
912
clone.succeed()
1013
return clone
1114
}
15+
16+
public var predecessor: Self {
17+
var clone = self
18+
clone.precede()
19+
return clone
20+
}
1221
}

NumberSystems/Sources/NumberSystems/Quantity.swift

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,12 @@ extension Quantity: Operable {
3636
let newElement = self.embodiment.first ?? Quantity.standardEmbodyingElement
3737
self.embodiment.append(newElement)
3838
}
39+
40+
public mutating func precede() {
41+
guard (self != Quantity.none) else { fatalError("There is no precedent for a lack of quantity") }
42+
43+
self.embodiment.removeLast()
44+
}
3945
}
4046

4147
extension String {

NumberSystems/Tests/NumberSystemsTests/QuantityTests.swift

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,3 +71,16 @@ func successorOfQuantity(_ givenCount: Int) async throws {
7171
let succeededQuantity = operativeQuantity.successor
7272
#expect(succeededCount.represents(succeededQuantity))
7373
}
74+
75+
@Test("Predecessor of quantities", arguments: [
76+
1,
77+
10,
78+
100,
79+
1000
80+
])
81+
func predecessorOfQuantity(_ givenCount: Int) async throws {
82+
let operativeQuantity = givenCount.asQuantity
83+
let precededCount = givenCount - 1
84+
let precededQuantity = operativeQuantity.predecessor
85+
#expect(precededCount.represents(precededQuantity))
86+
}

0 commit comments

Comments
 (0)