Skip to content

Commit 4a29867

Browse files
committed
[NFC] Update end to end tests
1 parent 4b7297a commit 4a29867

File tree

1 file changed

+27
-6
lines changed

1 file changed

+27
-6
lines changed

test/SIL/borrow_accessor_e2e.swift

Lines changed: 27 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,24 @@
11
// RUN: %empty-directory(%t)
2-
// RUN: %target-build-swift %s -emit-executable -enable-experimental-feature BorrowAndMutateAccessors -o %t/a.out
2+
// RUN: %target-build-swift %s -emit-executable -enable-experimental-feature BorrowAndMutateAccessors -Xfrontend -disable-experimental-parser-round-trip -o %t/a.out
33
// RUN: %target-codesign %t/a.out
44
// RUN: %target-run %t/a.out
55

66
// REQUIRES: swift_feature_BorrowAndMutateAccessors
77
// REQUIRES: executable_test
88

99
public struct Container<Element: ~Copyable >: ~Copyable {
10-
var _storage: UnsafeBufferPointer<Element>
10+
var _storage: UnsafeMutableBufferPointer<Element>
1111
var _count: Int
1212

1313
var first: Element {
1414
@_unsafeSelfDependentResult
1515
borrow {
1616
return _storage.baseAddress.unsafelyUnwrapped.pointee
1717
}
18+
@_unsafeSelfDependentResult
19+
mutate {
20+
return &_storage.baseAddress.unsafelyUnwrapped.pointee
21+
}
1822
}
1923

2024
public subscript(index: Int) -> Element {
@@ -23,24 +27,41 @@ public struct Container<Element: ~Copyable >: ~Copyable {
2327
precondition(index >= 0 && index < _count, "Index out of bounds")
2428
return _storage.baseAddress.unsafelyUnwrapped.advanced(by: index).pointee
2529
}
30+
@_unsafeSelfDependentResult
31+
mutate {
32+
precondition(index >= 0 && index < _count, "Index out of bounds")
33+
return &_storage.baseAddress.unsafelyUnwrapped.advanced(by: index).pointee
34+
}
2635
}
2736
}
2837

2938
extension Container: Copyable where Element: Copyable {}
3039

3140
func test() {
3241
let n = 10_000
33-
let arr = Array(0...n)
34-
let sum = arr.withUnsafeBufferPointer { ubpointer in
35-
let container = Container(_storage: ubpointer, _count: arr.count)
42+
var arr = Array(0...n)
43+
let count = arr.count
44+
let sum = arr.withUnsafeMutableBufferPointer { ubpointer in
45+
let container = Container(_storage: ubpointer, _count: count)
3646
var sum = 0
3747
for i in 0..<container._count {
3848
sum &+= container[i]
3949
}
4050
return sum
4151
}
4252
let expectedSum = n * (n + 1) / 2
43-
assert(sum == expectedSum)
53+
assert(sum == expectedSum)
54+
let mutated_sum = arr.withUnsafeMutableBufferPointer { ubpointer in
55+
var container = Container(_storage: ubpointer, _count: count)
56+
var sum = 0
57+
for i in 0..<container._count {
58+
container[i] &+= 1
59+
sum += container[i]
60+
}
61+
return sum
62+
}
63+
let mutatedExpectedSum = (n + 1) * (n + 2) / 2
64+
assert(mutated_sum == mutatedExpectedSum)
4465
}
4566

4667
test()

0 commit comments

Comments
 (0)