Files
swift-mirror/test/stdlib/StringReallocation.swift
Michael Ilseman 3be2faf5d3 [String] Initial implementation of 64-bit StringGuts.
Include the initial implementation of _StringGuts, a 2-word
replacement for _LegacyStringCore. 64-bit Darwin supported, 32-bit and
Linux support in subsequent commits.
2018-01-21 12:32:26 -08:00

47 lines
1.2 KiB
Swift

// RUN: %target-run-simple-swift | %FileCheck %s
// REQUIRES: executable_test
import StdlibUnittest
extension String {
var bufferID: UInt {
guard let object = _guts._underlyingCocoaString else { return 0 }
return unsafeBitCast(object, to: UInt.self)
}
}
// CHECK-NOT: Reallocations exceeded 30
func testReallocation() {
var x = "The quick brown fox jumped over the lazy dog\n"._split(separator: " ")
var story = "Let me tell you a story:"
var laps = 1000
var reallocations = 0
for i in 0..<laps {
for s in x {
var lastBase = story.bufferID
story += " "
story += s
if lastBase != story.bufferID {
reallocations += 1
// To avoid dumping a vast string here, just write the first
// part of the story out each time there's a reallocation.
var intro = story._split(separator: ":")[0]
print("reallocation \(reallocations), with intro \(intro)")
if reallocations >= 30 {
print("Reallocations exceeded 30")
return
}
}
}
story += "."
}
print("total reallocations = \(reallocations)")
}
testReallocation()
print("done!")