blob: 9f823b7f1d836a2d0e8fcfa13577e6754ce1f2ed [file] [log] [blame]
// -*- swift -*-
// RUN: %target-run-simple-swiftgyb
// REQUIRES: executable_test
// FIXME: the test is too slow when the standard library is not optimized.
// rdar://problem/46878013
// REQUIRES: optimized_stdlib
import SwiftPrivate
import StdlibUnittest
import StdlibCollectionUnittest
var tests = TestSuite("FlattenCollection")
%{
variations = [('', 'Sequence'), ('', 'Collection'), ('Bidirectional', 'Collection')]
}%
// Test collections using value types as elements.
% for (traversal, kind) in variations:
tests.add${traversal}${kind}Tests(
make${kind}: { (elements: [OpaqueValue<Int>]) -> Flatten${kind}<Minimal${traversal}${kind}<Minimal${traversal}${kind}<OpaqueValue<Int>>>> in
Minimal${traversal}${kind}(elements: elements.map { Minimal${traversal}${kind}(elements: [$0]) }).joined()
},
wrapValue: identity,
extractValue: identity,
make${kind}OfEquatable: { (elements: [MinimalEquatableValue]) -> Flatten${kind}<Minimal${traversal}${kind}<Minimal${traversal}${kind}<MinimalEquatableValue>>> in
Minimal${traversal}${kind}(elements: elements.map { Minimal${traversal}${kind}(elements: [$0]) }).joined()
},
wrapValueIntoEquatable: identityEq,
extractValueFromEquatable: identityEq
)
% end
// Test collections using reference types as elements.
% for (traversal, kind) in variations:
tests.add${traversal}${kind}Tests(
make${kind}: { (elements: [LifetimeTracked]) -> Flatten${kind}<Minimal${traversal}${kind}<Minimal${traversal}${kind}<LifetimeTracked>>> in
Minimal${traversal}${kind}(elements: elements.map { Minimal${traversal}${kind}(elements: [$0]) }).joined()
},
wrapValue: { (element: OpaqueValue<Int>) in
LifetimeTracked(element.value, identity: element.identity)
},
extractValue: { (element: LifetimeTracked) in
OpaqueValue(element.value, identity: element.identity)
},
make${kind}OfEquatable: { (elements: [LifetimeTracked]) -> Flatten${kind}<Minimal${traversal}${kind}<Minimal${traversal}${kind}<LifetimeTracked>>> in
Minimal${traversal}${kind}(elements: elements.map { Minimal${traversal}${kind}(elements: [$0]) }).joined()
},
wrapValueIntoEquatable: { (element: MinimalEquatableValue) in
LifetimeTracked(element.value, identity: element.identity)
},
extractValueFromEquatable: { (element: LifetimeTracked) in
MinimalEquatableValue(element.value, identity: element.identity)
}
)
% end
var rdar45956357: Bool
// Test collection instances and iterators.
% for (traversal, kind) in variations:
if #available(macOS 10.14, iOS 12.0, watchOS 5.0, tvOS 12.0, *) {
tests.test("FlattenCollection instances (${traversal}${kind})") {
do {
let expected : [String] = []
let base: [[String]] = [[], [], []]
check${traversal}${kind}(
expected,
Minimal${traversal}${kind}(elements: base).joined(),
sameValue: { $0 == $1 })
}
do {
let expected = ["apple", "orange", "banana", "grapefruit", "lychee"]
let base = [["apple", "orange"], ["banana", "grapefruit"], ["lychee"]]
let flattened = Minimal${traversal}${kind}(elements: base).joined()
check${traversal}${kind}(
expected,
Minimal${traversal}${kind}(elements: base).joined(),
sameValue: { $0 == $1 })
checkSequence(
expected,
flattened.makeIterator(),
sameValue: { $0 == $1 })
}
}
}
% end
runAllTests()