Skip to content

SR-11283: Amend OptionSet.remove method #28378

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 22 commits into from
Dec 11, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
bc50c03
Merge pull request #1 from apple/master
JacobMao Nov 12, 2017
53287af
Merge pull request #2 from apple/master
JacobMao Nov 26, 2017
4fe24e3
Merge pull request #3 from apple/master
JacobMao Dec 1, 2017
7fc998c
Merge pull request #4 from apple/master
JacobMao Dec 12, 2017
7fb16b8
Merge pull request #5 from apple/master
JacobMao Jan 26, 2018
0089ad4
Merge pull request #6 from apple/master
JacobMao Feb 2, 2018
d5b2ef5
Merge pull request #7 from apple/master
JacobMao Feb 27, 2018
16addd9
Merge pull request #8 from apple/master
JacobMao Mar 10, 2018
9274bd1
Merge pull request #9 from apple/master
JacobMao Mar 19, 2018
90b06be
Merge pull request #10 from apple/master
JacobMao Apr 3, 2018
a3fbb5f
Merge pull request #11 from apple/master
JacobMao May 25, 2018
a72b451
Merge pull request #12 from apple/master
JacobMao Jun 12, 2018
dfe4d5f
Merge pull request #13 from apple/master
JacobMao Aug 7, 2018
4e65573
Merge pull request #14 from apple/master
JacobMao Oct 4, 2018
b495847
Merge pull request #15 from apple/master
JacobMao Jul 10, 2019
1f0a78e
Merge pull request #16 from apple/master
JacobMao Sep 12, 2019
c6c0a6d
Merge pull request #17 from apple/master
JacobMao Nov 14, 2019
2570edd
Merge pull request #18 from apple/master
JacobMao Nov 18, 2019
ac3a528
Merge branch 'master' of https://github.com/JacobMao/swift
JacobMao Nov 21, 2019
a8fd973
fixed OptionSet's remove method
JacobMao Nov 20, 2019
f5ef37a
added test case for OptionSet's set algebra methods
JacobMao Nov 20, 2019
d5e2533
improved OptionSet.remove's code style
JacobMao Nov 21, 2019
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 6 additions & 2 deletions stdlib/public/core/OptionSet.swift
Original file line number Diff line number Diff line change
Expand Up @@ -286,9 +286,13 @@ extension OptionSet where Element == Self {
@inlinable // generic-performance
@discardableResult
public mutating func remove(_ member: Element) -> Element? {
let r = isSuperset(of: member) ? Optional(member) : nil
let intersectionElements = intersection(member)
guard !intersectionElements.isEmpty else {
return nil
}

self.subtract(member)
return r
return intersectionElements
}

/// Inserts the given element into the set.
Expand Down
37 changes: 35 additions & 2 deletions test/stdlib/OptionSetTest.swift
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,40 @@ tests.test("basics") {
expectEqual([.Satchel, .Box], p)
}

// FIXME: add tests for all of SetAlgebra, in particular
// insert/remove/replace.
tests.test("set algebra") {
typealias P = PackagingOptions

// remove
var p = P.BoxOrBag
expectNil(p.remove(P.Carton))

p = P.BoxOrBag
p.remove(P.BoxOrCartonOrBag)
expectEqual(P(), p)

p = P.BoxOrBag
expectEqual(P.Bag, p.remove(P.SatchelOrBag))
expectEqual(P.Box, p)

// insert
p = P.Box
var insertionResult = p.insert(.Bag)
expectTrue(insertionResult.inserted)
expectEqual(P.Bag, insertionResult.memberAfterInsert)
expectEqual(P.BoxOrBag, p)

insertionResult = p.insert(.Bag)
expectFalse(insertionResult.inserted)
expectEqual(P.Bag, insertionResult.memberAfterInsert)

// update
p = P.Box
expectNil(p.update(with: .Bag))
expectEqual(P.BoxOrBag, p)

p = P.Box
expectEqual(P.Box, p.update(with: .BoxOrBag))
expectEqual(P.BoxOrBag, p)
}

runAllTests()