Skip to content

Commit 85250c7

Browse files
committed
[test] withContiguousStorage methods on raw buffer types
1 parent eb56bf3 commit 85250c7

File tree

1 file changed

+47
-0
lines changed

1 file changed

+47
-0
lines changed

validation-test/stdlib/UnsafeBufferPointer.swift.gyb

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -361,6 +361,31 @@ UnsafeMutableBufferPointerTestSuite.test("withContiguous(Mutable)StorageIfAvaila
361361
expectEqual(result1, result2)
362362
}
363363

364+
UnsafeMutableRawBufferPointerTestSuite.test("withContiguous(Mutable)StorageIfAvailable") {
365+
for c in [0, 1, 4] {
366+
let pointer = UnsafeMutableRawPointer.allocate(byteCount: c, alignment: c)
367+
defer { pointer.deallocate() }
368+
369+
let mutableBuffer = UnsafeMutableRawBufferPointer(start: pointer, count: c)
370+
mutableBuffer.copyBytes(from: 0..<UInt8(c))
371+
372+
let r: ()? = mutableBuffer.withContiguousMutableStorageIfAvailable {
373+
for i in $0.indices { $0[i] = 2*($0[i]+1) }
374+
}
375+
expectNotNil(r)
376+
let s = mutableBuffer.withContiguousStorageIfAvailable {
377+
$0.reduce(0, +)
378+
}
379+
expectEqual(s.map(Int.init), c*(c+1))
380+
381+
let immutableBuffer = UnsafeRawBufferPointer(mutableBuffer)
382+
let t = immutableBuffer.withContiguousStorageIfAvailable {
383+
$0.reduce(0, +)
384+
}
385+
expectEqual(s, t)
386+
}
387+
}
388+
364389
UnsafeMutableBufferPointerTestSuite.test("initialize(from: Slice)") {
365390
let o = 91
366391
let c = 1_000
@@ -403,6 +428,28 @@ UnsafeMutableBufferPointerTestSuite.test("Slice.withContiguousStorageIfAvailable
403428
}
404429
}
405430

431+
UnsafeMutableRawBufferPointerTestSuite.test("Slice.withContiguousStorageIfAvailable") {
432+
for test in subscriptRangeTests {
433+
let c = test.collection.map({ UInt8($0.value/1000) })
434+
let buffer = UnsafeMutableRawBufferPointer.allocate(
435+
byteCount: test.collection.count, alignment: 8
436+
)
437+
defer { buffer.deallocate() }
438+
buffer.copyBytes(from: c)
439+
440+
let expected = test.expected.map({ UInt8($0.value/1000) })
441+
let r1: ()? = buffer[test.bounds].withContiguousStorageIfAvailable {
442+
expectTrue(expected.elementsEqual($0))
443+
}
444+
expectNotNil(r1)
445+
let r2: ()? = buffer[test.bounds].withContiguousMutableStorageIfAvailable {
446+
for i in $0.indices { $0[i] += 1 }
447+
}
448+
expectNotNil(r2)
449+
expectTrue(buffer[test.bounds].elementsEqual(expected.map({ $0+1 })))
450+
}
451+
}
452+
406453
UnsafeMutableBufferPointerTestSuite.test("sort") {
407454
var values = (0..<1000).map({ _ in Int.random(in: 0..<100) })
408455
let sortedValues = values.sorted()

0 commit comments

Comments
 (0)