Files
swift-mirror/test/Interop/Cxx/stdlib/use-std-optional.swift
Egor Zhdan 1be7230876 [cxx-interop] Use C++17 standard by default
Clang is using C++17 standard version by default since Clang 16.

Swift’s ClangImporter should do the same, to make sure that clients who run clang and then swiftc without explicit std version see consistent behavior.

rdar://125777068
2024-04-02 16:23:32 +01:00

55 lines
1.5 KiB
Swift

// RUN: %target-run-simple-swift(-I %S/Inputs -Xfrontend -cxx-interoperability-mode=swift-6)
// RUN: %target-run-simple-swift(-I %S/Inputs -Xfrontend -cxx-interoperability-mode=upcoming-swift)
// RUN: %target-run-simple-swift(-I %S/Inputs -Xfrontend -cxx-interoperability-mode=upcoming-swift -Xcc -std=c++20)
//
// REQUIRES: executable_test
import StdlibUnittest
import StdOptional
import CxxStdlib
var StdOptionalTestSuite = TestSuite("StdOptional")
StdOptionalTestSuite.test("pointee") {
let nonNilOpt = getNonNilOptional()
let pointee = nonNilOpt.pointee
expectEqual(123, pointee)
#if !os(Linux) // crashes on Ubuntu 18.04 (rdar://113414160)
var modifiedOpt = getNilOptional()
modifiedOpt.pointee = 777
expectEqual(777, modifiedOpt.pointee)
#endif
}
StdOptionalTestSuite.test("std::optional => Swift.Optional") {
let nonNilOpt = getNonNilOptional()
let swiftOptional = Optional(fromCxx: nonNilOpt)
expectNotNil(swiftOptional)
expectEqual(123, swiftOptional!)
let nilOpt = getNilOptional()
let swiftNil = Optional(fromCxx: nilOpt)
expectNil(swiftNil)
}
StdOptionalTestSuite.test("std::optional hasValue/value") {
let nonNilOpt = getNonNilOptional()
expectTrue(nonNilOpt.hasValue)
expectEqual(123, nonNilOpt.value!)
let nilOpt = getNilOptional()
expectFalse(nilOpt.hasValue)
expectNil(nilOpt.value)
}
StdOptionalTestSuite.test("std::optional as ExpressibleByNilLiteral") {
let res1 = takesOptionalInt(nil)
expectFalse(res1)
let res2 = takesOptionalString(nil)
expectFalse(res2)
}
runAllTests()