mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
[test] adjust String span tests
This commit is contained in:
@@ -10,11 +10,10 @@
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
// RUN: %target-run-stdlib-swift -enable-experimental-feature LifetimeDependence
|
||||
// RUN: %target-run-stdlib-swift
|
||||
|
||||
// REQUIRES: executable_test
|
||||
// REQUIRES: objc_interop
|
||||
// REQUIRES: swift_feature_LifetimeDependence
|
||||
|
||||
import StdlibUnittest
|
||||
|
||||
@@ -25,6 +24,7 @@ defer { runAllTests() }
|
||||
|
||||
let strings = [
|
||||
"Hello, World!",
|
||||
"123456789",
|
||||
"A long ASCII string exceeding 16 code units.",
|
||||
"🇯🇵",
|
||||
"🏂☃❅❆❄︎⛄️❄️",
|
||||
@@ -37,13 +37,12 @@ strings.forEach { expected in
|
||||
.require(.stdlib_6_2).code {
|
||||
guard #available(SwiftStdlib 6.2, *) else { return }
|
||||
|
||||
let string = NSString(utf8String: expected)
|
||||
guard let string else { expectNotNil(string); return }
|
||||
guard let nss = expectNotNil(NSString(utf8String: expected)) else { return }
|
||||
|
||||
let bridged = String(string).utf8
|
||||
let bridged = String(nss).utf8
|
||||
var p: ObjectIdentifier? = nil
|
||||
for (i, j) in zip(0..<3, bridged.indices) {
|
||||
let span = bridged.span
|
||||
guard let span = expectNotNil(bridged._span) else { continue }
|
||||
let c = span.withUnsafeBufferPointer {
|
||||
let o = unsafeBitCast($0.baseAddress, to: ObjectIdentifier.self)
|
||||
if p == nil {
|
||||
@@ -63,12 +62,11 @@ strings.forEach { expected in
|
||||
.require(.stdlib_6_2).code {
|
||||
guard #available(SwiftStdlib 6.2, *) else { return }
|
||||
|
||||
let string = NSString(utf8String: expected)
|
||||
guard let string else { expectNotNil(string); return }
|
||||
guard let nss = expectNotNil(NSString(utf8String: expected)) else { return }
|
||||
|
||||
let bridged = String(string)
|
||||
let bridged = String(nss)
|
||||
let utf8 = bridged.utf8
|
||||
let span = utf8.span
|
||||
guard let span = expectNotNil(utf8._span) else { return }
|
||||
expectEqual(span.count, expected.utf8.count)
|
||||
for (i,j) in zip(span.indices, expected.utf8.indices) {
|
||||
expectEqual(span[i], expected.utf8[j])
|
||||
@@ -76,21 +74,53 @@ strings.forEach { expected in
|
||||
}
|
||||
}
|
||||
|
||||
strings.forEach { expected in
|
||||
suite.test("UTF8Span from Bridged String: \(expected)")
|
||||
.require(.stdlib_6_2).code {
|
||||
guard #available(SwiftStdlib 6.2, *) else { return }
|
||||
|
||||
guard let nss = expectNotNil(NSString(utf8String: expected)) else { return }
|
||||
|
||||
let bridged = String(nss)
|
||||
guard let utf8 = expectNotNil(bridged._utf8Span) else { return }
|
||||
expectEqual(utf8.count, expected.utf8.count)
|
||||
for (i,j) in zip(utf8.span.indices, expected.utf8.indices) {
|
||||
expectEqual(utf8.span[i], expected.utf8[j])
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
strings.forEach { expected in
|
||||
suite.test("Span from Bridged String Substring: \(expected)")
|
||||
.require(.stdlib_6_2).code {
|
||||
guard #available(SwiftStdlib 6.2, *) else { return }
|
||||
|
||||
let string = NSString(utf8String: expected)
|
||||
guard let string else { expectNotNil(string); return }
|
||||
guard let nss = expectNotNil(NSString(utf8String: expected)) else { return }
|
||||
|
||||
let bridged = String(string).dropFirst()
|
||||
let bridged = String(nss).dropFirst()
|
||||
let utf8 = bridged.utf8
|
||||
let span = utf8.span
|
||||
guard let span = expectNotNil(utf8._span) else { return }
|
||||
let expected = expected.dropFirst()
|
||||
expectEqual(span.count, expected.utf8.count)
|
||||
for (i,j) in zip(span.indices, expected.utf8.indices) {
|
||||
expectEqual(span[i], expected.utf8[j])
|
||||
}
|
||||
}
|
||||
|
||||
strings.forEach { expected in
|
||||
suite.test("UTF8Span from Bridged String Substring: \(expected)")
|
||||
.require(.stdlib_6_2).code {
|
||||
guard #available(SwiftStdlib 6.2, *) else { return }
|
||||
|
||||
guard let nss = expectNotNil(NSString(utf8String: expected)) else { return }
|
||||
|
||||
let bridged = String(nss).dropFirst()
|
||||
guard let utf8 = expectNotNil(bridged._utf8Span) else { return }
|
||||
let expected = expected.dropFirst()
|
||||
expectEqual(utf8.count, expected.utf8.count)
|
||||
for (i,j) in zip(utf8.span.indices, expected.utf8.indices) {
|
||||
expectEqual(utf8.span[i], expected.utf8[j])
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -10,11 +10,9 @@
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
// RUN: %target-run-stdlib-swift(-enable-experimental-feature LifetimeDependence -enable-experimental-feature AddressableTypes)
|
||||
// RUN: %target-run-stdlib-swift
|
||||
|
||||
// REQUIRES: executable_test
|
||||
// REQUIRES: swift_feature_LifetimeDependence
|
||||
// REQUIRES: swift_feature_AddressableTypes
|
||||
|
||||
import StdlibUnittest
|
||||
|
||||
@@ -25,9 +23,15 @@ suite.test("Span from Small String")
|
||||
.require(.stdlib_6_2).code {
|
||||
guard #available(SwiftStdlib 6.2, *) else { return }
|
||||
|
||||
let s = "A small string.".utf8
|
||||
var s = "123456789".utf8
|
||||
let u = Array(s)
|
||||
let span = s.span
|
||||
#if os(watchOS) && _pointerBitWidth(_32)
|
||||
expectNil(s._span)
|
||||
#endif
|
||||
var string = String(s)
|
||||
string.reserveCapacity(12)
|
||||
s = (consume string).utf8
|
||||
guard let span = expectNotNil(s._span) else { return }
|
||||
|
||||
let count = span.count
|
||||
expectEqual(count, s.count)
|
||||
@@ -43,7 +47,7 @@ suite.test("Span from Large Native String")
|
||||
|
||||
let s = "A long string that is altogether not smol.".utf8
|
||||
let u = Array(s)
|
||||
let span = s.span
|
||||
guard let span = expectNotNil(s._span) else { return }
|
||||
|
||||
let count = span.count
|
||||
expectEqual(count, s.count)
|
||||
@@ -59,7 +63,7 @@ suite.test("Span from Small String's Substring")
|
||||
|
||||
let s = "A small string.".dropFirst(8).utf8
|
||||
let u = Array("string.".utf8)
|
||||
let span = s.span
|
||||
guard let span = expectNotNil(s._span) else { return }
|
||||
|
||||
let count = span.count
|
||||
expectEqual(count, s.count)
|
||||
@@ -76,7 +80,7 @@ suite.test("Span from Large Native String's Substring")
|
||||
let t = "A long string that is altogether not smol."
|
||||
let s = t.dropFirst(22).prefix(10).utf8
|
||||
let u = Array("altogether".utf8)
|
||||
let span = s.span
|
||||
guard let span = expectNotNil(s._span) else { return }
|
||||
|
||||
let count = span.count
|
||||
expectEqual(count, s.count)
|
||||
@@ -91,10 +95,10 @@ suite.test("Span from String.utf8Span")
|
||||
guard #available(SwiftStdlib 6.2, *) else { return }
|
||||
|
||||
let s = String(200)
|
||||
let utf8span = s.utf8Span
|
||||
guard let utf8span = expectNotNil(s._utf8Span) else { return }
|
||||
let span1 = utf8span.span
|
||||
let utf8view = s.utf8
|
||||
let span2 = utf8view.span
|
||||
guard let span2 = expectNotNil(utf8view._span) else { return }
|
||||
expectEqual(span1.count, span2.count)
|
||||
for (i,j) in zip(span1.indices, span2.indices) {
|
||||
expectEqual(span1[i], span2[j])
|
||||
@@ -106,7 +110,7 @@ suite.test("UTF8Span from Span")
|
||||
guard #available(SwiftStdlib 6.2, *) else { return }
|
||||
|
||||
let s = String(200).utf8
|
||||
let span1 = s.span
|
||||
guard let span1 = expectNotNil(s._span) else { return }
|
||||
guard let utf8 = expectNotNil(try? UTF8Span(validating: span1)) else { return }
|
||||
|
||||
let span2 = utf8.span
|
||||
@@ -118,10 +122,10 @@ suite.test("Span from Substring.utf8Span")
|
||||
guard #available(SwiftStdlib 6.2, *) else { return }
|
||||
|
||||
let s = String(22000).dropFirst().dropLast()
|
||||
let utf8span = s.utf8Span
|
||||
guard let utf8span = expectNotNil(s._utf8Span) else { return }
|
||||
let span1 = utf8span.span
|
||||
let utf8view = s.utf8
|
||||
let span2 = utf8view.span
|
||||
guard let span2 = expectNotNil(utf8view._span) else { return }
|
||||
expectEqual(span1.count, span2.count)
|
||||
for (i,j) in zip(span1.indices, span2.indices) {
|
||||
expectEqual(span1[i], span2[j])
|
||||
|
||||
Reference in New Issue
Block a user