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 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158
|
// 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 StdVector module.
// RUN: %empty-directory(%t2)
// RUN: cp %S/Inputs/std-vector.h %t2/std-vector-bridging-header.h
// RUN: %target-run-simple-swift(-D BRIDGING_HEADER -import-objc-header %t2/std-vector-bridging-header.h -Xfrontend -enable-experimental-cxx-interop)
// RUN: %target-run-simple-swift(-D BRIDGING_HEADER -import-objc-header %t2/std-vector-bridging-header.h -cxx-interoperability-mode=swift-6)
// RUN: %target-run-simple-swift(-D BRIDGING_HEADER -import-objc-header %t2/std-vector-bridging-header.h -cxx-interoperability-mode=upcoming-swift)
// FIXME: also run in C++20 mode when conformance works properly on UBI platform (rdar://109366764):
// %target-run-simple-swift(-I %S/Inputs -Xfrontend -enable-experimental-cxx-interop -Xcc -std=gnu++20)
//
// REQUIRES: executable_test
import StdlibUnittest
#if !BRIDGING_HEADER
import StdVector
#endif
import CxxStdlib
var StdVectorTestSuite = TestSuite("StdVector")
StdVectorTestSuite.test("VectorOfInt.init") {
let v = Vector()
expectEqual(v.size(), 0)
expectTrue(v.empty())
}
StdVectorTestSuite.test("VectorOfInt.init(sequence)") {
let v = Vector([])
expectEqual(v.size(), 0)
expectTrue(v.empty())
let v2 = Vector([1, 2, 3])
expectEqual(v2.size(), 3)
expectFalse(v2.empty())
expectEqual(v2[0], 1)
expectEqual(v2[1], 2)
expectEqual(v2[2], 3)
}
StdVectorTestSuite.test("VectorOfString.init(sequence)") {
let v = VectorOfString([])
expectEqual(v.size(), 0)
expectTrue(v.empty())
let v2 = VectorOfString(["", "ab", "abc"])
expectEqual(v2.size(), 3)
expectFalse(v2.empty())
expectEqual(v2[0], "")
expectEqual(v2[1], "ab")
expectEqual(v2[2], "abc")
let first = takesVectorOfString(["abc", "qwe"])
expectEqual(first, "abc")
}
StdVectorTestSuite.test("VectorOfInt as ExpressibleByArrayLiteral") {
let v: Vector = []
expectEqual(v.size(), 0)
expectTrue(v.empty())
let v2: Vector = [1, 2, 3]
expectEqual(v2.size(), 3)
expectFalse(v2.empty())
expectEqual(v2[0], 1)
expectEqual(v2[1], 2)
expectEqual(v2[2], 3)
}
StdVectorTestSuite.test("VectorOfInt.push_back") {
var v = Vector()
let _42: CInt = 42
v.push_back(_42)
expectEqual(v.size(), 1)
expectFalse(v.empty())
expectEqual(v[0], 42)
}
func fill(vector v: inout Vector) {
v.push_back(1)
v.push_back(2)
v.push_back(CInt(3))
}
StdVectorTestSuite.test("VectorOfInt for loop") {
var v = Vector()
fill(vector: &v)
var count: CInt = 1
for e in v {
expectEqual(e, count)
count += 1
}
expectEqual(count, 4)
}
StdVectorTestSuite.test("VectorOfString for loop") {
var v = VectorOfString()
var count = 0
for _ in v {
count += 1
}
expectEqual(count, 0)
v.push_back(std.string("abc"))
v.push_back(std.string("ab"))
for it in v {
count += it.length()
}
expectEqual(count, 5)
}
StdVectorTestSuite.test("VectorOfInt.map") {
var v = Vector()
fill(vector: &v)
let a = v.map { $0 + 5 }
expectEqual(a, [6, 7, 8])
}
StdVectorTestSuite.test("VectorOfString.map") {
var v = VectorOfString()
v.push_back(std.string("abc"))
v.push_back(std.string("a"))
v.push_back(std.string("ab"))
let a = v.map { $0.length() }
expectEqual(a, [3, 1, 2])
}
StdVectorTestSuite.test("VectorOfInt subclass for loop") {
var v = VectorSubclass()
v.push_back(1)
var count: CInt = 1
for e in v {
expectEqual(e, count)
count += 1
}
expectEqual(count, 2)
}
StdVectorTestSuite.test("VectorOfString subclass for loop") {
var v = VectorOfStringSubclass()
v.push_back(std.string("abc"))
var count: CInt = 0
for e in v {
expectEqual(std.string("abc"), e)
count += 1
}
expectEqual(count, 1)
}
runAllTests()
|