@@ -12,6 +12,9 @@ import StdlibUnittest
1212public class Klass { }
1313
1414var tests = TestSuite ( " move_function_uniqueness " )
15+ defer {
16+ runAllTests ( )
17+ }
1518
1619public enum Enum {
1720 case foo
@@ -43,48 +46,71 @@ public class Class {
4346
4447extension Class {
4548 @inline ( never)
46- func readClassTest ( _ userHandle: Int ) {
47- assert ( _isUnique ( & self . k2) )
49+ func readClassSwitchLetTest ( _ userHandle: Int ) {
50+ expectTrue ( _isUnique ( & self . k2) )
4851
4952 let x : K2
5053 do {
5154 x = self . k2
5255 }
5356 switch _move ( x) [ userHandle] {
5457 case . foo:
55- assert ( _isUnique ( & self . k2) )
58+ expectTrue ( _isUnique ( & self . k2) )
5659 }
5760 }
5861}
5962
60- tests. test ( " classUniquenessTest " ) {
63+ tests. test ( " readClassSwitchLetTest " ) {
6164 let c = Class ( )
6265 for f in 0 ..< 10_000 {
63- c. readClassTest ( f)
66+ c. readClassSwitchLetTest ( f)
6467 }
6568}
6669
6770extension Class {
6871 @inline ( never)
69- func readArrayTest ( _ userHandle: Int ) {
70- assert ( self . array. _buffer. isUniquelyReferenced ( ) )
72+ func readArraySwitchLetTest ( _ userHandle: Int ) {
73+ expectTrue ( self . array. _buffer. isUniquelyReferenced ( ) )
7174
7275 let x : [ Enum ]
7376 do {
7477 x = self . array
7578 }
7679 switch _move ( x) [ userHandle] {
7780 case . foo:
78- assert ( self . array. _buffer. isUniquelyReferenced ( ) )
81+ expectTrue ( self . array. _buffer. isUniquelyReferenced ( ) )
7982 }
8083 }
8184}
8285
83- tests. test ( " arrayUniquenessTest " ) {
86+ tests. test ( " readArraySwitchLetTest " ) {
8487 let c = Class ( )
8588 for f in 0 ..< 10_000 {
86- c. readArrayTest ( f)
89+ c. readArraySwitchLetTest ( f)
8790 }
8891}
8992
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