Skip to content

Commit 8e9c94b

Browse files
committed
Update
1 parent 25a89df commit 8e9c94b

File tree

3 files changed

+46
-3
lines changed

3 files changed

+46
-3
lines changed

Sources/StructTransactionMacros/COWTrackingPropertyMacro.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ extension COWTrackingPropertyMacro: AccessorMacro {
111111
$0.write(identifier: .init(name: "\(raw: propertyName)"))
112112
}
113113
if !isKnownUniquelyReferenced(&\(raw: backingName)) {
114-
\(raw: backingName) = .init(\(raw: backingName).value)
114+
\(raw: backingName) = .init(newValue)
115115
} else {
116116
\(raw: backingName).value = newValue
117117
}

Tests/StructTransactionTests/MyState.swift

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,10 @@ import StructTransaction
22

33
@Tracking
44
struct MyState {
5+
6+
init() {
7+
self.name = ""
8+
}
59

610
var height: Int = 0
711

Lines changed: 41 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,45 @@
1+
import StructTransaction
12
import Testing
23

34
@Suite("Tests")
4-
enum Tests {
5-
5+
struct Tests {
6+
7+
@Test
8+
func tracking_stored_property() {
9+
10+
var original = MyState.init()
11+
12+
let result = withTracking {
13+
original.height = 100
14+
}
15+
16+
#expect(result.writeIdentifiers.contains(.init(name: "height")))
17+
18+
}
19+
20+
@Test
21+
func tracking_computed_property() {
22+
23+
let original = MyState.init()
24+
25+
let result = withTracking {
26+
let _ = original.computedName
27+
}
28+
29+
#expect(result.readIdentifiers.contains(.init(name: "name")))
30+
31+
}
32+
33+
@Test
34+
func cow() {
35+
36+
let original = MyState.init()
37+
38+
var copy = original
39+
40+
copy.height = 100
41+
42+
#expect(copy.height == 100)
43+
#expect(original.height == 0)
44+
}
645
}

0 commit comments

Comments
 (0)