Skip to content

Commit 5aa34f4

Browse files
committed
[move-function] Add tests around var uniqueness properties of move.
1 parent e6cbf54 commit 5aa34f4

File tree

1 file changed

+37
-11
lines changed

1 file changed

+37
-11
lines changed

test/stdlib/move_function.swift

Lines changed: 37 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,9 @@ import StdlibUnittest
1212
public class Klass {}
1313

1414
var tests = TestSuite("move_function_uniqueness")
15+
defer {
16+
runAllTests()
17+
}
1518

1619
public enum Enum {
1720
case foo
@@ -43,48 +46,71 @@ public class Class {
4346

4447
extension 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

6770
extension 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

Comments
 (0)