1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119
|
// RUN: %target-run-simple-swift(-I %S/Inputs -Xfrontend -enable-experimental-cxx-interop)
// RUN: %target-run-simple-swift(-I %S/Inputs -cxx-interoperability-mode=swift-6)
// RUN: %target-run-simple-swift(-I %S/Inputs -cxx-interoperability-mode=upcoming-swift)
// Also test this with a bridging header instead of the StdSet module.
// RUN: %empty-directory(%t2)
// RUN: cp %S/Inputs/std-set.h %t2/std-set-bridging-header.h
// RUN: %target-run-simple-swift(-D BRIDGING_HEADER -import-objc-header %t2/std-set-bridging-header.h -Xfrontend -enable-experimental-cxx-interop)
// RUN: %target-run-simple-swift(-D BRIDGING_HEADER -import-objc-header %t2/std-set-bridging-header.h -cxx-interoperability-mode=swift-6)
// RUN: %target-run-simple-swift(-D BRIDGING_HEADER -import-objc-header %t2/std-set-bridging-header.h -cxx-interoperability-mode=upcoming-swift)
// REQUIRES: executable_test
//
// Enable this everywhere once we have a solution for modularizing other C++ stdlibs: rdar://87654514
// REQUIRES: OS=macosx || OS=linux-gnu
import StdlibUnittest
#if !BRIDGING_HEADER
import StdSet
#endif
import CxxStdlib
import Cxx
var StdSetTestSuite = TestSuite("StdSet")
StdSetTestSuite.test("iterate over Swift.Array") {
let s = Array(initSetOfCInt())
var result = [CInt]()
for x in s {
result.append(x)
}
expectEqual(result[0], 1)
expectEqual(result[1], 3)
expectEqual(result[2], 5)
}
StdSetTestSuite.test("SetOfCInt.contains") {
// This relies on the `std::set` conformance to `CxxSet` protocol.
let s = initSetOfCInt()
expectTrue(s.contains(1))
expectFalse(s.contains(2))
expectTrue(s.contains(3))
}
StdSetTestSuite.test("UnorderedSetOfCInt.contains") {
// This relies on the `std::unordered_set` conformance to `CxxSet` protocol.
let s = initUnorderedSetOfCInt()
expectFalse(s.contains(1))
expectTrue(s.contains(2))
expectFalse(s.contains(3))
}
StdSetTestSuite.test("MultisetOfCInt.contains") {
// This relies on the `std::multiset` conformance to `CxxSet` protocol.
let s = initMultisetOfCInt()
expectFalse(s.contains(1))
expectTrue(s.contains(2))
expectFalse(s.contains(3))
}
StdSetTestSuite.test("SetOfCInt.init()") {
let s = SetOfCInt([1, 3, 5])
expectTrue(s.contains(1))
expectFalse(s.contains(2))
expectTrue(s.contains(3))
}
StdSetTestSuite.test("UnorderedSetOfCInt.init()") {
let s = UnorderedSetOfCInt([1, 3, 5])
expectTrue(s.contains(1))
expectFalse(s.contains(2))
expectTrue(s.contains(3))
}
StdSetTestSuite.test("SetOfCInt.insert") {
var s = SetOfCInt()
expectFalse(s.contains(123))
let res1 = s.insert(123)
expectTrue(res1.inserted)
expectTrue(s.contains(123))
let res2 = s.insert(123)
expectFalse(res2.inserted)
expectTrue(s.contains(123))
}
StdSetTestSuite.test("UnorderedSetOfCInt.insert") {
var s = UnorderedSetOfCInt()
expectFalse(s.contains(123))
let res1 = s.insert(123)
expectTrue(res1.inserted)
expectTrue(s.contains(123))
let res2 = s.insert(123)
expectFalse(res2.inserted)
expectTrue(s.contains(123))
}
StdSetTestSuite.test("SetOfCInt.erase") {
var s = initSetOfCInt()
expectTrue(s.contains(1))
s.erase(1)
expectFalse(s.contains(1))
s.erase(1)
expectFalse(s.contains(1))
}
StdSetTestSuite.test("UnorderedSetOfCInt.erase") {
var s = initUnorderedSetOfCInt()
expectTrue(s.contains(2))
s.erase(2)
expectFalse(s.contains(2))
s.erase(2)
expectFalse(s.contains(2))
}
runAllTests()
|