blob: e66b9e46f6ff9c687c79593bbeddfff4c147e635 [file] [log] [blame]
// RUN: %target-run-simple-swiftgyb
// REQUIRES: executable_test
import StdlibUnittest
// Also import modules which are used by StdlibUnittest internally. This
// workaround is needed to link all required libraries in case we compile
// StdlibUnittest with -sil-serialize-all.
import SwiftPrivate
#if _runtime(_ObjC)
import ObjectiveC
#endif
var AssertionsTestSuite = TestSuite("Assertions")
AssertionsTestSuite.test("expectTrapping(_: Bound, in: RangeProtocol)") {
_setTrappingExpectationFailedCallback() {}
defer {
// Reset the callback.
expectCrashLater()
fatalError()
}
% for (Element, Range, ClosedRange) in [
% ('MinimalComparableValue', 'Range', 'ClosedRange'),
% ('MinimalStrideableValue', 'CountableRange', 'CountableClosedRange'),
% ]:
do {
let _0 = ${Element}(0)
let _1 = ${Element}(1)
let _9 = ${Element}(9)
let _10 = ${Element}(10)
expectTrapping(_0, in: _0..<_10 as ${Range})
expectTrapping(_9, in: _0..<_10 as ${Range})
expectFailure {
expectTrapping(_0, in: _1..<_10 as ${Range})
}
expectFailure {
expectTrapping(_10, in: _1..<_10 as ${Range})
}
expectTrapping(_0, in: _0..._9 as ${ClosedRange})
expectTrapping(_9, in: _0..._9 as ${ClosedRange})
expectFailure {
expectTrapping(_0, in: _1..._9 as ${ClosedRange})
}
expectFailure {
expectTrapping(_10, in: _1..._9 as ${ClosedRange})
}
}
% end
}
AssertionsTestSuite.test("expectTrapping(_: RangeProtocol, in: RangeProtocol)") {
_setTrappingExpectationFailedCallback() {}
defer {
// Reset the callback.
expectCrashLater()
fatalError()
}
% for (Element, Range, ClosedRange) in [
% ('MinimalComparableValue', 'Range', 'ClosedRange'),
% ('MinimalStrideableValue', 'CountableRange', 'CountableClosedRange'),
% ]:
do {
let _0 = ${Element}(0)
let _1 = ${Element}(1)
let _9 = ${Element}(9)
let _10 = ${Element}(10)
let _11 = ${Element}(11)
expectTrapping(_0..<_10 as Range, in: _0..<_10 as Range)
expectTrapping(_0..<_9 as Range, in: _0..<_10 as Range)
expectTrapping(_1..<_10 as Range, in: _0..<_10 as Range)
expectFailure {
expectTrapping(_0..<_10 as Range, in: _1..<_10 as Range)
}
expectFailure {
expectTrapping(_0..<_10 as Range, in: _0..<_9 as Range)
}
expectFailure {
expectTrapping(_0..<_10 as Range, in: _1..<_9 as Range)
}
expectTrapping(_0..._10 as ClosedRange, in: _0..<_11 as Range)
expectTrapping(_0..._10 as ClosedRange, in: _0..._10 as ClosedRange)
expectTrapping(_0..._9 as ClosedRange, in: _0..<_10 as Range)
expectTrapping(_0..._9 as ClosedRange, in: _0..._10 as ClosedRange)
expectTrapping(_1..._10 as ClosedRange, in: _0..<_11 as Range)
expectTrapping(_1..._10 as ClosedRange, in: _0..._10 as ClosedRange)
expectFailure {
expectTrapping(_0..._10 as ClosedRange, in: _1..._10 as ClosedRange)
}
expectFailure {
expectTrapping(_0..._10 as ClosedRange, in: _1..<_11 as Range)
}
expectFailure {
expectTrapping(_0..._10 as ClosedRange, in: _0..._9 as ClosedRange)
}
expectFailure {
expectTrapping(_0..._10 as ClosedRange, in: _0..<_10 as Range)
}
expectFailure {
expectTrapping(_0..._10 as ClosedRange, in: _1..._9 as ClosedRange)
}
expectFailure {
expectTrapping(_0..._10 as ClosedRange, in: _1..<_10 as Range)
}
}
% end
}
AssertionsTestSuite.test("expectEqualsUnordered(Range<T>, [T])") {
% for Range in ['Range', 'CountableRange']:
expectEqualsUnordered(0..<0 as ${Range}, [])
expectFailure {
expectEqualsUnordered(0..<0 as ${Range}, [ 0 ])
}
expectEqualsUnordered(0..<1 as ${Range}, [ 0 ])
expectFailure {
expectEqualsUnordered(0..<1 as ${Range}, [])
expectEqualsUnordered(0..<1 as ${Range}, [ 1 ])
}
expectEqualsUnordered(0..<2 as ${Range}, [ 0, 1 ])
expectEqualsUnordered(0..<2 as ${Range}, [ 1, 0 ])
expectFailure {
expectEqualsUnordered(0..<2 as ${Range}, [])
expectEqualsUnordered(0..<2 as ${Range}, [ 0 ])
expectEqualsUnordered(0..<2 as ${Range}, [ 1 ])
expectEqualsUnordered(0..<2 as ${Range}, [ 0, 2 ])
expectEqualsUnordered(0..<2 as ${Range}, [ 2, 0 ])
}
expectEqualsUnordered(0..<3 as ${Range}, [ 0, 1, 2 ])
expectEqualsUnordered(0..<3 as ${Range}, [ 0, 2, 1 ])
expectEqualsUnordered(0..<3 as ${Range}, [ 1, 0, 2 ])
expectEqualsUnordered(0..<3 as ${Range}, [ 1, 2, 0 ])
expectEqualsUnordered(0..<3 as ${Range}, [ 2, 0, 1 ])
expectEqualsUnordered(0..<3 as ${Range}, [ 2, 1, 0 ])
expectFailure {
expectEqualsUnordered(0..<3 as ${Range}, [])
expectEqualsUnordered(0..<3 as ${Range}, [ 0 ])
expectEqualsUnordered(0..<3 as ${Range}, [ 1 ])
expectEqualsUnordered(0..<3 as ${Range}, [ 0, 1 ])
expectEqualsUnordered(0..<3 as ${Range}, [ 1, 0 ])
expectEqualsUnordered(0..<3 as ${Range}, [ 3, 0, 1 ])
expectEqualsUnordered(0..<3 as ${Range}, [ 0, 3, 1 ])
expectEqualsUnordered(0..<3 as ${Range}, [ 0, 1, 3 ])
}
% end
}
AssertionsTestSuite.test("expectEqual<T : Equatable>") {
let _0 = MinimalEquatableValue(0)
let _1 = MinimalEquatableValue(1)
expectEqual(_0, _0)
expectEqual(_1, _1)
expectFailure {
expectEqual(_0, _1)
expectEqual(_1, _0)
}
}
AssertionsTestSuite.test("expectEqual<T : Equatable, U : Equatable>") {
let _0 = MinimalEquatableValue(0)
let _1 = MinimalEquatableValue(1)
for a in [_0, _1] {
for b in [_0, _1] {
for c in [_0, _1] {
for d in [_0, _1] {
let lhs = (a, b)
let rhs = (c, d)
if lhs == rhs {
expectEqual(lhs, rhs)
} else {
expectFailure {
expectEqual(lhs, rhs)
}
}
}
}
}
}
}
AssertionsTestSuite.test("expectEqual<T : Equatable, U : Equatable, V : Equatable>") {
let _0 = MinimalEquatableValue(0)
let _1 = MinimalEquatableValue(1)
for a in [_0, _1] {
for b in [_0, _1] {
for c in [_0, _1] {
for d in [_0, _1] {
for e in [_0, _1] {
for f in [_0, _1] {
let lhs = (a, b, c)
let rhs = (d, e, f)
if lhs == rhs {
expectEqual(lhs, rhs)
} else {
expectFailure {
expectEqual(lhs, rhs)
}
}
}
}
}
}
}
}
}
runAllTests()