@@ -12,6 +12,9 @@ import StdlibUnittest
12
12
public class Klass { }
13
13
14
14
var tests = TestSuite ( " move_function_uniqueness " )
15
+ defer {
16
+ runAllTests ( )
17
+ }
15
18
16
19
public enum Enum {
17
20
case foo
@@ -43,48 +46,71 @@ public class Class {
43
46
44
47
extension Class {
45
48
@inline ( never)
46
- func readClassTest ( _ userHandle: Int ) {
47
- assert ( _isUnique ( & self . k2) )
49
+ func readClassSwitchLetTest ( _ userHandle: Int ) {
50
+ expectTrue ( _isUnique ( & self . k2) )
48
51
49
52
let x : K2
50
53
do {
51
54
x = self . k2
52
55
}
53
56
switch _move ( x) [ userHandle] {
54
57
case . foo:
55
- assert ( _isUnique ( & self . k2) )
58
+ expectTrue ( _isUnique ( & self . k2) )
56
59
}
57
60
}
58
61
}
59
62
60
- tests. test ( " classUniquenessTest " ) {
63
+ tests. test ( " readClassSwitchLetTest " ) {
61
64
let c = Class ( )
62
65
for f in 0 ..< 10_000 {
63
- c. readClassTest ( f)
66
+ c. readClassSwitchLetTest ( f)
64
67
}
65
68
}
66
69
67
70
extension Class {
68
71
@inline ( never)
69
- func readArrayTest ( _ userHandle: Int ) {
70
- assert ( self . array. _buffer. isUniquelyReferenced ( ) )
72
+ func readArraySwitchLetTest ( _ userHandle: Int ) {
73
+ expectTrue ( self . array. _buffer. isUniquelyReferenced ( ) )
71
74
72
75
let x : [ Enum ]
73
76
do {
74
77
x = self . array
75
78
}
76
79
switch _move ( x) [ userHandle] {
77
80
case . foo:
78
- assert ( self . array. _buffer. isUniquelyReferenced ( ) )
81
+ expectTrue ( self . array. _buffer. isUniquelyReferenced ( ) )
79
82
}
80
83
}
81
84
}
82
85
83
- tests. test ( " arrayUniquenessTest " ) {
86
+ tests. test ( " readArraySwitchLetTest " ) {
84
87
let c = Class ( )
85
88
for f in 0 ..< 10_000 {
86
- c. readArrayTest ( f)
89
+ c. readArraySwitchLetTest ( f)
87
90
}
88
91
}
89
92
90
- runAllTests ( )
93
+ tests. test ( " simpleArrayVarTest " ) {
94
+ var x : [ Enum ] = Array ( repeating: . foo, count: 10_000 )
95
+ expectTrue ( x. _buffer. isUniquelyReferenced ( ) )
96
+
97
+ var y = x
98
+ expectFalse ( x. _buffer. isUniquelyReferenced ( ) )
99
+ let _ = _move ( y)
100
+ expectTrue ( x. _buffer. isUniquelyReferenced ( ) )
101
+ y = [ ]
102
+ expectTrue ( x. _buffer. isUniquelyReferenced ( ) )
103
+ }
104
+
105
+ tests. test ( " simpleArrayInoutVarTest " ) {
106
+ func inOutTest( _ x: inout [ Enum ] ) {
107
+ var y = x
108
+ expectFalse ( x. _buffer. isUniquelyReferenced ( ) )
109
+ let _ = _move ( y)
110
+ expectTrue ( x. _buffer. isUniquelyReferenced ( ) )
111
+ y = [ ]
112
+ expectTrue ( x. _buffer. isUniquelyReferenced ( ) )
113
+ }
114
+ var outerX : [ Enum ] = Array ( repeating: . foo, count: 10_000 )
115
+ inOutTest ( & outerX)
116
+ }
0 commit comments