// RUN: %target-run-simple-swift | %FileCheck %s // REQUIRES: executable_test // REQUIRES: objc_interop // UNSUPPORTED: OS=watchos && CPU=arm64_32 import CoreFoundation // Can't import StdlibUnittest; that brings in Foundation. extension CFString { static func from(_ contents: String) -> CFString { return CFStringCreateWithCString(nil, contents, /*ascii*/0) } static func mutablyFrom(_ contents: String) -> CFMutableString { return CFStringCreateMutableCopy(nil, /*maxLength*/0, CFString.from(contents)) } } do { print("Testing Array") // CHECK-LABEL: Testing Array var s = [CFString]() // Use long strings to avoid the tagged pointer optimization. s.append(.from("abcxxxxxxxxxxx")) s.append(.from("defxxxxxxxxxxx")) print(s.contains(.from("abcxxxxxxxxxxx"))) // CHECK-NEXT: true print(s.contains(.from("efxxxxxxxxxxx"))) // CHECK-NEXT: false } do { print("Testing Array") // CHECK-LABEL: Testing Array var s = [CFMutableString]() // Use long strings to avoid the tagged pointer optimization. s.append(.mutablyFrom("abcxxxxxxxxxxx")) s.append(.mutablyFrom("defxxxxxxxxxxx")) print(s.contains(.mutablyFrom("abcxxxxxxxxxxx"))) // CHECK-NEXT: true print(s.contains(.mutablyFrom("efxxxxxxxxxxx"))) // CHECK-NEXT: false let upcast = s as [CFString] print(upcast.contains(CFString.mutablyFrom("abcxxxxxxxxxxx"))) // CHECK-NEXT: true print(upcast.contains(CFString.from("abcxxxxxxxxxxx"))) // CHECK-NEXT: true } do { print("Testing Set") // CHECK-LABEL: Testing Set var s = Set() // Use long strings to avoid the tagged pointer optimization. s.insert(.from("abcxxxxxxxxxxx")) s.insert(.from("defxxxxxxxxxxx")) print(s.contains(.from("abcxxxxxxxxxxx"))) // CHECK-NEXT: true print(s.contains(.from("efxxxxxxxxxxx"))) // CHECK-NEXT: false } do { print("Testing Set") // CHECK-LABEL: Testing Set // This is a horrible thing to do but we're just checking that the conformance works. var s = Set() s.insert(.mutablyFrom("abcxxxxxxxxxxx")) s.insert(.mutablyFrom("defxxxxxxxxxxx")) print(s.contains(.mutablyFrom("abcxxxxxxxxxxx"))) // CHECK-NEXT: true print(s.contains(.mutablyFrom("efxxxxxxxxxxx"))) // CHECK-NEXT: false }