[test] adjust String span tests

This commit is contained in:
Guillaume Lessard
2025-06-23 18:29:58 -07:00
parent 3aad241019
commit 044e53f3b2
2 changed files with 61 additions and 27 deletions

View File

@@ -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])
}
}
}
}

View File

@@ -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])