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
|
//===----------------------------------------------------------------------===//
//
// This source file is part of the Swift Collections open source project
//
// Copyright (c) 2022 - 2024 Apple Inc. and the Swift project authors
// Licensed under Apache License v2.0 with Runtime Library Exception
//
// See https://swift.org/LICENSE.txt for license information
//
//===----------------------------------------------------------------------===//
/// A test protocol for validating that set-like types implement users'
/// baseline expectations.
///
/// To ensure maximum utility, this protocol refines neither `Collection` nor
/// `SetAlgebra` although it does share some of the same requirements.
public protocol SetAPIChecker {
associatedtype Element
associatedtype Index
var isEmpty: Bool { get }
var count: Int { get }
init()
mutating func remove(at index: Index) -> Element
func filter(_ isIncluded: (Element) throws -> Bool) rethrows -> Self
func isSubset<S: Sequence>(of other: S) -> Bool
where S.Element == Element
func isSuperset<S: Sequence>(of other: S) -> Bool
where S.Element == Element
func isStrictSubset<S: Sequence>(of other: S) -> Bool
where S.Element == Element
func isStrictSuperset<S: Sequence>(of other: S) -> Bool
where S.Element == Element
func isDisjoint<S: Sequence>(with other: S) -> Bool
where S.Element == Element
func intersection<S: Sequence>(_ other: S) -> Self
where S.Element == Element
func union<S: Sequence>(_ other: __owned S) -> Self
where S.Element == Element
__consuming func subtracting<S: Sequence>(_ other: S) -> Self
where S.Element == Element
func symmetricDifference<S: Sequence>(_ other: __owned S) -> Self
where S.Element == Element
mutating func formIntersection<S: Sequence>(_ other: S)
where S.Element == Element
mutating func formUnion<S: Sequence>(_ other: __owned S)
where S.Element == Element
mutating func subtract<S: Sequence>(_ other: S)
where S.Element == Element
mutating func formSymmetricDifference<S: Sequence>(_ other: __owned S)
where S.Element == Element
}
extension Set: SetAPIChecker {}
public protocol SetAPIExtras: SetAPIChecker {
// Non-standard extensions
mutating func update(_ member: Element, at index: Index) -> Element
func isEqualSet(to other: Self) -> Bool
func isEqualSet<S: Sequence>(to other: S) -> Bool
where S.Element == Element
}
|