%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]) -> ${Wrapper}<${Base}>> { 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.. ${Wrapper}<${Base}> { 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.. ${Wrapper}<${Base}> { 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..> = 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 ) }