mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
138 lines
4.2 KiB
Swift
138 lines
4.2 KiB
Swift
// RUN: %target-run-simple-swiftgyb > %t.stdout 2>&1
|
|
// RUN: %FileCheck %s < %t.stdout
|
|
// 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("checkEquatable/Good") {
|
|
do {
|
|
let xs: [MinimalEquatableValue] = []
|
|
checkEquatable(xs, oracle: { _, _ in fatalError(); () })
|
|
}
|
|
|
|
do {
|
|
let xs: [MinimalEquatableValue] = (0..<1).map(MinimalEquatableValue.init)
|
|
checkEquatable(xs, oracle: { _, _ in true })
|
|
}
|
|
|
|
for count in [1, 2, 3, 4, 20] {
|
|
let xs = (0..<count).map(MinimalEquatableValue.init)
|
|
MinimalEquatableValue.equalImpl.value = { $0 == $1 }
|
|
checkEquatable(
|
|
xs, oracle: { MinimalEquatableValue($0) == MinimalEquatableValue($1) })
|
|
}
|
|
}
|
|
|
|
AssertionsTestSuite.test("checkEquatable/BrokenReflexivity/1") {
|
|
let xs: [MinimalEquatableValue] = (0..<2).map(MinimalEquatableValue.init)
|
|
MinimalEquatableValue.equalImpl.value = {
|
|
i, j in
|
|
return i == 0 && j == 0
|
|
}
|
|
expectFailure {
|
|
checkEquatable(
|
|
xs, oracle: { MinimalEquatableValue($0) == MinimalEquatableValue($1) })
|
|
}
|
|
}
|
|
// CHECK: stdout>>> bad oracle: broken reflexivity at index 1
|
|
// CHECK: [ OK ] Assertions.checkEquatable/BrokenReflexivity/1
|
|
|
|
AssertionsTestSuite.test("checkEquatable/BrokenSymmetry/1") {
|
|
let xs: [MinimalEquatableValue] = (0..<2).map(MinimalEquatableValue.init)
|
|
MinimalEquatableValue.equalImpl.value = {
|
|
i, j in
|
|
return i == j || (i == 0 && j == 1)
|
|
}
|
|
expectFailure {
|
|
checkEquatable(
|
|
xs, oracle: { MinimalEquatableValue($0) == MinimalEquatableValue($1) })
|
|
}
|
|
}
|
|
// CHECK: stdout>>> bad oracle: broken symmetry between indices 0, 1
|
|
// CHECK: stdout>>> bad oracle: broken symmetry between indices 1, 0
|
|
// CHECK: [ OK ] Assertions.checkEquatable/BrokenSymmetry/1
|
|
|
|
AssertionsTestSuite.test("checkEquatable/BrokenTransitivity/1") {
|
|
let xs: [MinimalEquatableValue] = (0..<3).map(MinimalEquatableValue.init)
|
|
MinimalEquatableValue.equalImpl.value = {
|
|
i, j in
|
|
switch (min(i, j), max(i, j)) {
|
|
case (0, 0), (1, 1), (2, 2), (0, 1), (1, 2):
|
|
return true
|
|
default:
|
|
return false
|
|
}
|
|
}
|
|
expectFailure {
|
|
checkEquatable(
|
|
xs, oracle: { MinimalEquatableValue($0) == MinimalEquatableValue($1) })
|
|
}
|
|
checkEquatable(
|
|
xs,
|
|
oracle: { MinimalEquatableValue($0) == MinimalEquatableValue($1) },
|
|
allowBrokenTransitivity: true)
|
|
}
|
|
// CHECK: stdout>>> bad oracle: broken transitivity at indices 1, 2, 0
|
|
// CHECK: [ OK ] Assertions.checkEquatable/BrokenTransitivity/1
|
|
|
|
AssertionsTestSuite.test("checkEquatable/BrokenTransitivity/2") {
|
|
let xs: [MinimalEquatableValue] = (0..<10).map(MinimalEquatableValue.init)
|
|
MinimalEquatableValue.equalImpl.value = {
|
|
i, j in
|
|
switch (min(i, j), max(i, j)) {
|
|
case (1, 4), (4, 7):
|
|
return true
|
|
case (let i, let j) where i == j:
|
|
return true
|
|
default:
|
|
return false
|
|
}
|
|
}
|
|
expectFailure {
|
|
checkEquatable(
|
|
xs, oracle: { MinimalEquatableValue($0) == MinimalEquatableValue($1) })
|
|
}
|
|
checkEquatable(
|
|
xs,
|
|
oracle: { MinimalEquatableValue($0) == MinimalEquatableValue($1) },
|
|
allowBrokenTransitivity: true)
|
|
}
|
|
// CHECK: stdout>>> bad oracle: broken transitivity at indices 4, 7, 1
|
|
// CHECK: [ OK ] Assertions.checkEquatable/BrokenTransitivity/2
|
|
|
|
AssertionsTestSuite.test("checkEquatable/BrokenTransitivity/3") {
|
|
let xs: [MinimalEquatableValue] = (0..<10).map(MinimalEquatableValue.init)
|
|
MinimalEquatableValue.equalImpl.value = {
|
|
i, j in
|
|
switch (min(i, j), max(i, j)) {
|
|
case (1, 7):
|
|
return false
|
|
default:
|
|
return true
|
|
}
|
|
}
|
|
expectFailure {
|
|
checkEquatable(
|
|
xs, oracle: { MinimalEquatableValue($0) == MinimalEquatableValue($1) })
|
|
}
|
|
checkEquatable(
|
|
xs,
|
|
oracle: { MinimalEquatableValue($0) == MinimalEquatableValue($1) },
|
|
allowBrokenTransitivity: true)
|
|
}
|
|
// CHECK: stdout>>> bad oracle: broken transitivity at indices 0, 7, 1
|
|
// CHECK: [ OK ] Assertions.checkEquatable/BrokenTransitivity/3
|
|
|
|
runAllTests()
|
|
|