Skip to content

Commit dd4b646

Browse files
committed
[test] test SE-0334 additions
1 parent d80a50b commit dd4b646

File tree

2 files changed

+60
-0
lines changed

2 files changed

+60
-0
lines changed

test/stdlib/UnsafePointer.swift.gyb

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -512,6 +512,27 @@ ${SelfName}TestSuite.test("withMemoryReboundSE0333.capacity1") {
512512
}
513513
}
514514

515+
${SelfName}TestSuite.test("pointer(to:)") {
516+
struct Example {
517+
var a = false
518+
var b = 0
519+
var c: String { "\(a),\(b)" }
520+
}
521+
let allocated = UnsafeMutablePointer<Example>.allocate(capacity: 1)
522+
allocated.pointee = Example()
523+
defer { allocated.deallocate() }
524+
let p = ${SelfName}(allocated)
525+
expectEqual(p.pointer(to: \.a)!.pointee, false)
526+
expectEqual(p.pointer(to: \.b)!.pointee, 0)
527+
expectNil(p.pointer(to: \.c))
528+
% if SelfName == 'UnsafeMutablePointer':
529+
p.pointer(to: \.a)!.pointee = true
530+
p.pointer(to: \.b)!.pointee += 1
531+
expectEqual(p.pointer(to: \.a as KeyPath)!.pointee, true)
532+
expectEqual(p.pointer(to: \.b as KeyPath)!.pointee, 1)
533+
% end
534+
}
535+
515536
% end
516537

517538
runAllTests()

test/stdlib/UnsafeRawPointer.swift

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -252,4 +252,43 @@ UnsafeMutableRawPointerExtraTestSuite.test("withMemoryRebound") {
252252
}
253253
}
254254

255+
UnsafeMutableRawPointerExtraTestSuite.test("realignment-functions") {
256+
var m = UnsafeMutableRawPointer(bitPattern: 1)!
257+
expectEqual(m.alignedUp(for: Int64.self), .init(bitPattern: 8)!)
258+
expectEqual(m.alignedUp(for: Int32.self), .init(bitPattern: 4)!)
259+
expectEqual(m.alignedUp(toMultipleOf: 8), .init(bitPattern: 8)!)
260+
expectEqual(m.alignedUp(toMultipleOf: 16), .init(bitPattern: 16)!)
261+
262+
m = .init(bitPattern: 13)!
263+
expectEqual(m.alignedDown(for: Int64.self), .init(bitPattern: 8)!)
264+
expectEqual(m.alignedDown(for: Int32.self), .init(bitPattern: 12)!)
265+
expectEqual(m.alignedDown(toMultipleOf: 8), .init(bitPattern: 8)!)
266+
expectEqual(m.alignedDown(toMultipleOf: 4), .init(bitPattern: 12)!)
267+
268+
var p = UnsafeRawPointer(bitPattern: 1)!
269+
expectEqual(p.alignedUp(for: Int64.self), .init(bitPattern: 8)!)
270+
expectEqual(p.alignedUp(for: Int32.self), .init(bitPattern: 4)!)
271+
expectEqual(p.alignedUp(toMultipleOf: 8), .init(bitPattern: 8)!)
272+
expectEqual(p.alignedUp(toMultipleOf: 16), .init(bitPattern: 16)!)
273+
274+
p = .init(bitPattern: 13)!
275+
expectEqual(p.alignedDown(for: Int64.self), .init(bitPattern: 8)!)
276+
expectEqual(p.alignedDown(for: Int32.self), .init(bitPattern: 12)!)
277+
expectEqual(p.alignedDown(toMultipleOf: 8), .init(bitPattern: 8)!)
278+
expectEqual(p.alignedDown(toMultipleOf: 4), .init(bitPattern: 12)!)
279+
}
280+
281+
UnsafeMutableRawPointerExtraTestSuite.test("pointer-comparisons") {
282+
let a = UnsafeMutableRawPointer(bitPattern: 0x8000)!
283+
let b = UnsafeRawPointer(bitPattern: 0x9000)!
284+
285+
expectTrue(a.assumingMemoryBound(to: Int.self) == UnsafeRawPointer(a))
286+
expectTrue(b.assumingMemoryBound(to: UInt.self) >= b)
287+
expectTrue(a <= a.assumingMemoryBound(to: Double.self))
288+
289+
expectTrue(a.assumingMemoryBound(to: Int.self) != b)
290+
expectTrue(b.assumingMemoryBound(to: UInt.self) > UnsafeMutableRawPointer(a))
291+
expectTrue(a < b.assumingMemoryBound(to: Double.self))
292+
}
293+
255294
runAllTests()

0 commit comments

Comments
 (0)