// RUN: %empty-directory(%t) // RUN: %target-run-stdlib-swift %S/Inputs/ // REQUIRES: executable_test // REQUIRES: objc_interop // REQUIRES: optimized_stdlib import Swift import StdlibUnittest import StdlibUnicodeUnittest var suite = TestSuite("CharacterRecognizer") defer { runAllTests() } if #available(SwiftStdlib 5.8, *) { suite.test("Unicode test data/hasBreak") { for test in graphemeBreakTests { var recognizer = Unicode._CharacterRecognizer() var pieces: [[Unicode.Scalar]] = [] var piece: [Unicode.Scalar] = [] for scalar in test.string.unicodeScalars { if recognizer.hasBreak(before: scalar) { if !piece.isEmpty { pieces.append(piece) } piece = [scalar] } else { piece.append(scalar) } } if !piece.isEmpty { pieces.append(piece) } expectEqual(pieces, test.pieces, "string: \(String(reflecting: test.string))") } } } func scalars(in buffer: some Sequence) -> [Unicode.Scalar] { var result: [Unicode.Scalar] = [] var it = buffer.makeIterator() var utf8Decoder = UTF8() while true { switch utf8Decoder.decode(&it) { case .scalarValue(let v): result.append(v) case .emptyInput: return result case .error: expectTrue(false, "Invalid scalar") } } } if #available(SwiftStdlib 5.8, *) { suite.test("Unicode test data/_firstBreak") { for test in graphemeBreakTests { var recognizer = Unicode._CharacterRecognizer() var pieces: [[Unicode.Scalar]] = [] var str = test.string str.withUTF8 { buffer in var i = buffer.startIndex var last = i while i < buffer.endIndex { guard let scalar = recognizer._firstBreak( inUncheckedUnsafeUTF8Buffer: buffer, startingAt: i) else { break } if scalar.lowerBound > last { pieces.append(scalars(in: buffer[last..