File tree Expand file tree Collapse file tree 3 files changed +28
-0
lines changed Expand file tree Collapse file tree 3 files changed +28
-0
lines changed Original file line number Diff line number Diff line change 1
1
public protocol Operable {
2
2
/// Changes the cardinality of this value to the next one.
3
3
mutating func succeed( )
4
+
5
+ /// Changes the cardinality of this value to the previous one.
6
+ mutating func precede( )
4
7
}
5
8
6
9
extension Operable {
@@ -9,4 +12,10 @@ extension Operable {
9
12
clone. succeed ( )
10
13
return clone
11
14
}
15
+
16
+ public var predecessor : Self {
17
+ var clone = self
18
+ clone. precede ( )
19
+ return clone
20
+ }
12
21
}
Original file line number Diff line number Diff line change @@ -36,6 +36,12 @@ extension Quantity: Operable {
36
36
let newElement = self . embodiment. first ?? Quantity . standardEmbodyingElement
37
37
self . embodiment. append ( newElement)
38
38
}
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
+ }
39
45
}
40
46
41
47
extension String {
Original file line number Diff line number Diff line change @@ -71,3 +71,16 @@ func successorOfQuantity(_ givenCount: Int) async throws {
71
71
let succeededQuantity = operativeQuantity. successor
72
72
#expect( succeededCount. represents ( succeededQuantity) )
73
73
}
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
+ }
You can’t perform that action at this time.
0 commit comments