%{ # This is a template of validation-test/stdlib/Slice/*.swift # # cd validation-test/stdlib/Slice # ../../../utils/gyb --line-directive="" Inputs/Template.swift.gyb | ../../../utils/split_file.py from gyb_stdlib_support import ( TRAVERSALS, collectionForTraversal, collectionTypeName ) import itertools class TestParameters(object): name = '' prefix = [] suffix = [] base = '' traversal = '' mutable = False range_replaceable = False base_kind = '' def all_tests(): for traversal, base_kind, mutable, range_replaceable in itertools.product( TRAVERSALS, ['Defaulted', 'Minimal'], [False, True], [False, True]): test = TestParameters() test.traversal = traversal test.base_kind = base_kind test.mutable = mutable test.range_replaceable = range_replaceable test.base = base_kind + collectionTypeName( traversal=traversal, mutable=mutable, rangeReplaceable=range_replaceable) for name, prefix, suffix in [ ('FullWidth', '[]', '[]'), ('WithPrefix', '[-9999, -9998, -9997]', '[]'), ('WithSuffix', '[]', '[ -9999, -9998, -9997]'), ('WithPrefixAndSuffix', '[-9999, -9998, -9997, -9996, -9995]', '[-9994, -9993, -9992]') ]: test.name = 'Slice_Of_' + test.base + '_' + name + '.swift' test.prefix = prefix test.suffix yield test def test_methods(test): traversal = test.traversal mutable = test.mutable range_replaceable = test.range_replaceable name = collectionForTraversal(traversal) result = [] if range_replaceable: result.append('RangeReplaceable' + name.replace('Collection', 'Slice')) if mutable: result.append('Mutable' + name) if not range_replaceable and not mutable: result.append(name) return result }% % for test in all_tests(): // BEGIN ${test.name} // -*- swift -*- //===----------------------------------------------------------------------===// // Automatically Generated From validation-test/stdlib/Slice/Inputs/Template.swift.gyb // Do Not Edit Directly! //===----------------------------------------------------------------------===// // RUN: %target-run-simple-swift // REQUIRES: executable_test // FIXME: the test is too slow when the standard library is not optimized. // REQUIRES: optimized_stdlib import StdlibUnittest import StdlibCollectionUnittest var SliceTests = TestSuite("Collection") let prefix: [Int] = ${test.prefix} let suffix: [Int] = ${test.suffix} func makeCollection(elements: [OpaqueValue]) -> Slice<${test.base}>> { var baseElements = prefix.map(OpaqueValue.init) baseElements.append(contentsOf: elements) baseElements.append(contentsOf: suffix.map(OpaqueValue.init)) let base = ${test.base}(elements: baseElements) let startIndex = base.index( base.startIndex, offsetBy: prefix.count) let endIndex = base.index( base.startIndex, offsetBy: prefix.count + elements.count) return Slice(base: base, bounds: startIndex.. Slice<${test.base}> { var baseElements = prefix.map(MinimalEquatableValue.init) baseElements.append(contentsOf: elements) baseElements.append(contentsOf: suffix.map(MinimalEquatableValue.init)) let base = ${test.base}(elements: baseElements) let startIndex = base.index( base.startIndex, offsetBy: prefix.count) let endIndex = base.index( base.startIndex, offsetBy: prefix.count + elements.count) return Slice(base: base, bounds: startIndex.. Slice<${test.base}> { var baseElements = prefix.map(MinimalComparableValue.init) baseElements.append(contentsOf: elements) baseElements.append(contentsOf: suffix.map(MinimalComparableValue.init)) let base = ${test.base}(elements: baseElements) let startIndex = base.index( base.startIndex, offsetBy: prefix.count) let endIndex = base.index( base.startIndex, offsetBy: prefix.count + elements.count) return Slice(base: base, bounds: startIndex..