File tree Expand file tree Collapse file tree
Sources/ComputeCxx/Vector
Tests/ComputeTests/Shared/Subgraph Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -31,7 +31,11 @@ class vector {
3131 using size_type = _size_type;
3232
3333 private:
34- T _inline_buffer[_inline_capacity];
34+ // Elements are constructed and destroyed explicitly. After relocation to
35+ // the heap, the inline storage must not destroy the old element copies.
36+ union {
37+ T _inline_buffer[_inline_capacity];
38+ };
3539 T *_Nullable _buffer = nullptr ;
3640 size_type _size = 0 ;
3741 size_type _capacity = _inline_capacity;
Original file line number Diff line number Diff line change @@ -2,6 +2,49 @@ import Testing
22
33@ Suite
44struct SubgraphUpdateTests {
5+ @ Test
6+ func updatePreservesChildrenBeyondInlineCapacity ( ) async {
7+ await #expect ( processExitsWith : . success ) {
8+ struct CountingRule : StatefulRule {
9+ typealias Value = Int
10+ var count = 0
11+
12+ mutating func updateValue ( ) {
13+ count += 1
14+ value = count
15+ }
16+ }
17+
18+ withGraph {
19+ let parent = Subgraph . current !
20+ let flags = Subgraph . Flags ( rawValue : 1 )
21+ let children = ( 0 ..< 64 ) . map { _ in Subgraph ( graph : parent . graph ) }
22+ let attributes = children . map { child in
23+ parent . addChild ( child )
24+ return child . apply {
25+ let attribute = Attribute ( CountingRule ( ) )
26+ attribute . flags = flags
27+ return attribute
28+ }
29+ }
30+
31+ for expectedValue in 1 ... 3 {
32+ for attribute in attributes {
33+ attribute . invalidateValue ( )
34+ }
35+ parent . update ( flags : flags )
36+ for child in children {
37+ precondition ( child . isValid )
38+ }
39+ for attribute in attributes {
40+ precondition ( attribute . value == expectedValue )
41+ }
42+ }
43+ withExtendedLifetime ( children ) { }
44+ }
45+ }
46+ }
47+
548 @ Test
649 func updateIterativelyEvaluatesDirtiedAttributesDuringTheSamePass ( ) {
750 class Counter {
You can’t perform that action at this time.
0 commit comments