mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
instead of insertContents(of:at:) and appendContents(of:), originally insertContentsOf(_:at:) and appendContentsOf(_:) per internal discussion.
83 lines
3.1 KiB
Plaintext
83 lines
3.1 KiB
Plaintext
%import inspect
|
|
%import os.path
|
|
%import sys
|
|
%sys.path = [os.path.split(inspect.getframeinfo(inspect.currentframe()).filename)[0] or '.'] + sys.path
|
|
|
|
% Base = "%s%s%sCollection" % (base_kind, traversal, 'Mutable' if mutable else '')
|
|
|
|
do {
|
|
let prefix: [Int] = ${prefix}
|
|
let suffix: [Int] = ${suffix}
|
|
|
|
func makeCollection(elements: [OpaqueValue<Int>])
|
|
-> ${Wrapper}<${Base}<OpaqueValue<Int>>> {
|
|
var baseElements = prefix.map(OpaqueValue.init)
|
|
baseElements.append(contentsOf: elements)
|
|
baseElements.append(contentsOf: suffix.map(OpaqueValue.init))
|
|
let base = ${Base}(elements: baseElements)
|
|
let startIndex = base.startIndex.advanced(by: numericCast(prefix.count))
|
|
let endIndex = base.startIndex.advanced(
|
|
by: numericCast(prefix.count + elements.count))
|
|
return ${Wrapper}(
|
|
_base: base,
|
|
bounds: startIndex..<endIndex)
|
|
}
|
|
|
|
func makeCollectionOfEquatable(elements: [MinimalEquatableValue])
|
|
-> ${Wrapper}<${Base}<MinimalEquatableValue>> {
|
|
var baseElements = prefix.map(MinimalEquatableValue.init)
|
|
baseElements.append(contentsOf: elements)
|
|
baseElements.append(contentsOf: suffix.map(MinimalEquatableValue.init))
|
|
let base = ${Base}(elements: baseElements)
|
|
let startIndex = base.startIndex.advanced(by: numericCast(prefix.count))
|
|
let endIndex = base.startIndex.advanced(
|
|
by: numericCast(prefix.count + elements.count))
|
|
return ${Wrapper}(
|
|
_base: base,
|
|
bounds: startIndex..<endIndex)
|
|
}
|
|
|
|
func makeCollectionOfComparable(elements: [MinimalComparableValue])
|
|
-> ${Wrapper}<${Base}<MinimalComparableValue>> {
|
|
var baseElements = prefix.map(MinimalComparableValue.init)
|
|
baseElements.append(contentsOf: elements)
|
|
baseElements.append(contentsOf: suffix.map(MinimalComparableValue.init))
|
|
let base = ${Base}(elements: baseElements)
|
|
let startIndex = base.startIndex.advanced(by: numericCast(prefix.count))
|
|
let endIndex = base.startIndex.advanced(
|
|
by: numericCast(prefix.count + elements.count))
|
|
return ${Wrapper}(
|
|
_base: base,
|
|
bounds: startIndex..<endIndex)
|
|
}
|
|
|
|
var checksAdded: Box<Set<String>> = Box([])
|
|
var resiliencyChecks = CollectionMisuseResiliencyChecks.all
|
|
resiliencyChecks.creatingOutOfBoundsIndicesBehavior = .expectationFailure
|
|
resiliencyChecks.subscriptOnOutOfBoundsIndicesBehavior = .trap
|
|
resiliencyChecks.subscriptRangeOnOutOfBoundsRangesBehavior = .trap
|
|
|
|
SliceTests.add${traversal}${'Mutable' if Wrapper == 'MutableSlice' else ''}CollectionTests(
|
|
"${name}.",
|
|
makeCollection: makeCollection,
|
|
wrapValue: identity,
|
|
extractValue: identity,
|
|
makeCollectionOfEquatable: makeCollectionOfEquatable,
|
|
wrapValueIntoEquatable: identityEq,
|
|
extractValueFromEquatable: identityEq,
|
|
% if Wrapper == 'MutableSlice':
|
|
makeCollectionOfComparable: makeCollectionOfComparable,
|
|
wrapValueIntoComparable: identityComp,
|
|
extractValueFromComparable: identityComp,
|
|
% end
|
|
checksAdded: checksAdded,
|
|
resiliencyChecks: resiliencyChecks,
|
|
outOfBoundsIndexOffset: 6
|
|
% if Wrapper == 'MutableSlice':
|
|
, withUnsafeMutableBufferPointerIsSupported: false,
|
|
isFixedLengthCollection: true
|
|
% end
|
|
)
|
|
}
|
|
|