22//
33// This source file is part of the Swift.org open source project
44//
5- // Copyright (c) 2014 - 2017 Apple Inc. and the Swift project authors
5+ // Copyright (c) 2014 - 2021 Apple Inc. and the Swift project authors
66// Licensed under Apache License v2.0 with Runtime Library Exception
77//
88// See https://swift.org/LICENSE.txt for license information
@@ -471,6 +471,8 @@ tests.test("testMutableArray") {
471471}
472472
473473tests.test("rdar://problem/27905230") {
474+ // Casting an NSArray to Array<Any> would trap because of an erroneous
475+ // precondition.
474476 let dict = RDar27905230.mutableDictionaryOfMutableLists()!
475477 let arr = dict["list"]!
476478 expectEqual(arr[0] as! NSNull, NSNull())
@@ -482,4 +484,69 @@ tests.test("rdar://problem/27905230") {
482484 expectEqual(arr[5] as! Date, Date(timeIntervalSince1970: 0))
483485}
484486
487+ tests.test("verbatimBridged/Base/withUnsafeBufferPointer") {
488+ let a = NSArray(array: [Base(0), Base(1), Base(2), Base(3)])
489+ let b = a as! [Base]
490+ let success: Bool = b.withUnsafeBufferPointer { buffer in
491+ expectEqual(buffer.count, 4)
492+ guard buffer.count == 4 else { return false }
493+ expectEqual(buffer[0].value, 0)
494+ expectEqual(buffer[1].value, 1)
495+ expectEqual(buffer[2].value, 2)
496+ expectEqual(buffer[3].value, 3)
497+ return true
498+ }
499+ expectTrue(success)
500+ }
501+
502+ // https://bugs.swift.org/browse/SR-14663
503+ tests.test("verbatimBridged/AnyObject/withUnsafeBufferPointer") {
504+ let a = NSArray(array: [Base(0), Base(1), Base(2), Base(3)])
505+ let b = a as [AnyObject]
506+ let success: Bool = b.withUnsafeBufferPointer { buffer in
507+ expectEqual(buffer.count, 4)
508+ guard buffer.count == 4 else { return false }
509+ expectEqual((buffer[0] as? Base)?.value, 0)
510+ expectEqual((buffer[1] as? Base)?.value, 1)
511+ expectEqual((buffer[2] as? Base)?.value, 2)
512+ expectEqual((buffer[3] as? Base)?.value, 3)
513+ return true
514+ }
515+ expectTrue(success)
516+ }
517+
518+ tests.test("verbatimBridged/Base/withUnsafeMutableBufferPointer") {
519+ let a = NSArray(array: [Base(0), Base(1), Base(2), Base(3)])
520+ var b = a as! [Base]
521+ let success: Bool = b.withUnsafeMutableBufferPointer { buffer in
522+ expectEqual(buffer.count, 4)
523+ guard buffer.count == 4 else { return false }
524+ expectEqual(buffer[0].value, 0)
525+ expectEqual(buffer[1].value, 1)
526+ expectEqual(buffer[2].value, 2)
527+ expectEqual(buffer[3].value, 3)
528+ buffer[0] = Base(4)
529+ return true
530+ }
531+ expectTrue(success)
532+ expectEqual(b[0].value, 4)
533+ }
534+
535+ tests.test("verbatimBridged/AnyObject/withUnsafeMutableBufferPointer") {
536+ let a = NSArray(array: [Base(0), Base(1), Base(2), Base(3)])
537+ var b = a as [AnyObject]
538+ let success: Bool = b.withUnsafeMutableBufferPointer { buffer in
539+ expectEqual(buffer.count, 4)
540+ guard buffer.count == 4 else { return false }
541+ expectEqual((buffer[0] as? Base)?.value, 0)
542+ expectEqual((buffer[1] as? Base)?.value, 1)
543+ expectEqual((buffer[2] as? Base)?.value, 2)
544+ expectEqual((buffer[3] as? Base)?.value, 3)
545+ buffer[0] = Base(4)
546+ return true
547+ }
548+ expectTrue(success)
549+ expectEqual((b[0] as? Base)?.value, 4)
550+ }
551+
485552runAllTests()
0 commit comments