| // RUN: %target-run-simple-swift |
| // REQUIRES: executable_test |
| |
| // XFAIL: interpret |
| |
| import StdlibUnittest |
| |
| var OptionSetTests = TestSuite("OptionSetTests") |
| |
| struct Days: OptionSet { |
| let rawValue: Int |
| |
| static let sunday = Days(rawValue: 1 << 0) |
| static let monday = Days(rawValue: 1 << 1) |
| static let tuesday = Days(rawValue: 1 << 2) |
| static let wednesday = Days(rawValue: 1 << 3) |
| static let thursday = Days(rawValue: 1 << 4) |
| static let friday = Days(rawValue: 1 << 5) |
| static let saturday = Days(rawValue: 1 << 6) |
| } |
| |
| // Test rawValue |
| |
| OptionSetTests.test("RawValue.SingleOption") { |
| let s = Days.friday |
| |
| expectEqual(32, s.rawValue) |
| } |
| |
| OptionSetTests.test("RawValue.MultipleOptions") { |
| let s: Days = [.monday, .tuesday, .wednesday, .thursday, .friday] |
| |
| expectEqual(62, s.rawValue) |
| } |
| |
| OptionSetTests.test("RawValue.EmptySet") { |
| var s: Days = [] |
| |
| expectEqual(0, s.rawValue) |
| |
| s.insert(.monday) |
| |
| expectEqual(2, s.rawValue) |
| } |
| |
| // Test isEmpty |
| |
| OptionSetTests.test("IsEmpty.SingleOption") { |
| let s = Days.friday |
| |
| expectFalse(s.isEmpty) |
| } |
| |
| OptionSetTests.test("IsEmpty.MultipleOptions") { |
| let s: Days = [.monday, .tuesday, .wednesday, .thursday, .friday] |
| |
| expectFalse(s.isEmpty) |
| } |
| |
| OptionSetTests.test("IsEmpty.EmptySet") { |
| var s: Days = [] |
| |
| expectTrue(s.isEmpty) |
| |
| s.insert(.monday) |
| |
| expectFalse(s.isEmpty) |
| } |
| |
| // Test equality operator |
| |
| OptionSetTests.test("==.SingleOption") { |
| let s1 = Days.monday |
| let s2 = Days.monday |
| let s3: Days = [.monday, .tuesday, .wednesday] |
| |
| expectEqual(s1, s2) |
| expectNotEqual(s1, s3) |
| } |
| |
| OptionSetTests.test("==.MultipleOptions") { |
| let s1: Days = [.monday, .tuesday, .wednesday] |
| let s2: Days = [.monday, .tuesday, .wednesday] |
| let s3: Days = [.wednesday, .thursday, .friday] |
| |
| expectEqual(s1, s2) |
| expectNotEqual(s1, s3) |
| } |
| |
| OptionSetTests.test("==.EmptySet") { |
| let s1: Days = [] |
| let s2: Days = [] |
| let s3: Days = [.monday, .tuesday, .wednesday] |
| |
| expectEqual(s1, s2) |
| expectNotEqual(s1, s3) |
| } |
| |
| // Test contains() |
| |
| OptionSetTests.test("Contains.SingleOption") { |
| let s = Days.friday |
| |
| expectFalse(s.contains(.sunday)) |
| expectFalse(s.contains(.monday)) |
| expectFalse(s.contains(.tuesday)) |
| expectFalse(s.contains(.wednesday)) |
| expectFalse(s.contains(.thursday)) |
| expectFalse(s.contains(.saturday)) |
| expectTrue(s.contains(.friday)) |
| } |
| |
| OptionSetTests.test("Contains.MultipleOptions") { |
| let s: Days = [.monday, .tuesday, .wednesday, .thursday, .friday] |
| |
| expectFalse(s.contains(.sunday)) |
| expectTrue(s.contains(.monday)) |
| expectTrue(s.contains(.tuesday)) |
| expectTrue(s.contains(.wednesday)) |
| expectTrue(s.contains(.thursday)) |
| expectTrue(s.contains(.friday)) |
| expectFalse(s.contains(.saturday)) |
| } |
| |
| OptionSetTests.test("Contains.EmptySet") { |
| let s: Days = [] |
| |
| expectFalse(s.contains(.sunday)) |
| expectFalse(s.contains(.monday)) |
| expectFalse(s.contains(.tuesday)) |
| expectFalse(s.contains(.wednesday)) |
| expectFalse(s.contains(.thursday)) |
| expectFalse(s.contains(.friday)) |
| expectFalse(s.contains(.saturday)) |
| } |
| |
| // Test formItersection() |
| |
| OptionSetTests.test("FormIntersection.SingleOption") { |
| do { |
| var s1 = Days.monday |
| let s2: Days = [.monday, .tuesday, .wednesday] |
| |
| s1.formIntersection(s2) |
| |
| expectTrue(s1.contains(.monday)) |
| expectFalse(s1.contains(.tuesday)) |
| expectFalse(s1.contains(.sunday)) |
| } |
| do { |
| var s1 = Days.monday |
| let s2: Days = [.tuesday, .wednesday, .friday] |
| |
| s1.formIntersection(s2) |
| |
| expectFalse(s1.contains(.monday)) |
| expectFalse(s1.contains(.tuesday)) |
| expectFalse(s1.contains(.sunday)) |
| } |
| } |
| |
| OptionSetTests.test("FormIntersection.MultipleOptions") { |
| do { |
| var s1: Days = [.monday, .tuesday, .wednesday] |
| let s2: Days = [.wednesday, .thursday, .friday] |
| |
| s1.formIntersection(s2) |
| |
| expectTrue(s1.contains(.wednesday)) |
| expectFalse(s1.contains(.tuesday)) |
| expectFalse(s1.contains(.sunday)) |
| } |
| do { |
| var s1: Days = [.monday, .tuesday, .wednesday] |
| let s2: Days = [.thursday, .friday, .saturday] |
| |
| s1.formIntersection(s2) |
| |
| expectFalse(s1.contains(.wednesday)) |
| expectFalse(s1.contains(.thursday)) |
| expectFalse(s1.contains(.sunday)) |
| } |
| } |
| |
| OptionSetTests.test("FormIntersection.EmptySet") { |
| var s1: Days = [] |
| let s2: Days = [.monday, .tuesday, .wednesday] |
| |
| s1.formIntersection(s2) |
| |
| expectFalse(s1.contains(.wednesday)) |
| expectFalse(s1.contains(.thursday)) |
| } |
| |
| // Test formSymmetricDifference() |
| |
| OptionSetTests.test("FormSymmetricDifference.SingleOption") { |
| do { |
| var s1 = Days.monday |
| let s2: Days = [.monday, .tuesday, .wednesday] |
| |
| s1.formSymmetricDifference(s2) |
| |
| expectTrue(s1.contains(.tuesday)) |
| expectFalse(s1.contains(.monday)) |
| expectFalse(s1.contains(.sunday)) |
| } |
| do { |
| var s1 = Days.monday |
| let s2: Days = [.tuesday, .wednesday, .friday] |
| |
| s1.formSymmetricDifference(s2) |
| |
| expectTrue(s1.contains(.monday)) |
| expectTrue(s1.contains(.tuesday)) |
| expectFalse(s1.contains(.sunday)) |
| } |
| } |
| |
| OptionSetTests.test("FormSymmetricDifference.MultipleOptions") { |
| do { |
| var s1: Days = [.monday, .tuesday, .wednesday] |
| let s2: Days = [.wednesday, .thursday, .friday] |
| |
| s1.formSymmetricDifference(s2) |
| |
| expectTrue(s1.contains(.tuesday)) |
| expectFalse(s1.contains(.wednesday)) |
| expectFalse(s1.contains(.sunday)) |
| } |
| do { |
| var s1: Days = [.monday, .tuesday, .wednesday] |
| let s2: Days = [.thursday, .friday, .saturday] |
| |
| s1.formSymmetricDifference(s2) |
| expectTrue(s1.contains(.wednesday)) |
| expectTrue(s1.contains(.thursday)) |
| expectFalse(s1.contains(.sunday)) |
| } |
| } |
| |
| OptionSetTests.test("FormSymmetricDifference.EmptySet") { |
| var s1: Days = [] |
| let s2: Days = [.monday, .tuesday, .wednesday] |
| |
| s1.formSymmetricDifference(s2) |
| expectTrue(s1.contains(.wednesday)) |
| expectFalse(s1.contains(.thursday)) |
| } |
| |
| // Test formUnion() |
| |
| OptionSetTests.test("FormUnion.SingleOption") { |
| do { |
| var s1 = Days.monday |
| let s2: Days = [.monday, .tuesday, .wednesday] |
| |
| s1.formUnion(s2) |
| expectTrue(s1.contains(.monday)) |
| expectTrue(s1.contains(.tuesday)) |
| expectFalse(s1.contains(.sunday)) |
| } |
| do { |
| var s1 = Days.monday |
| let s2: Days = [.tuesday, .wednesday, .friday] |
| |
| s1.formUnion(s2) |
| expectTrue(s1.contains(.monday)) |
| expectTrue(s1.contains(.tuesday)) |
| expectFalse(s1.contains(.sunday)) |
| } |
| } |
| |
| OptionSetTests.test("FormUnion.MultipleOptions") { |
| do { |
| var s1: Days = [.monday, .tuesday, .wednesday] |
| let s2: Days = [.wednesday, .thursday, .friday] |
| |
| s1.formUnion(s2) |
| expectTrue(s1.contains(.wednesday)) |
| expectTrue(s1.contains(.tuesday)) |
| expectFalse(s1.contains(.sunday)) |
| } |
| do { |
| var s1: Days = [.monday, .tuesday, .wednesday] |
| let s2: Days = [.thursday, .friday, .saturday] |
| |
| s1.formUnion(s2) |
| expectTrue(s1.contains(.wednesday)) |
| expectTrue(s1.contains(.thursday)) |
| expectFalse(s1.contains(.sunday)) |
| } |
| } |
| |
| OptionSetTests.test("FormUnion.EmptySet") { |
| var s1: Days = [] |
| let s2: Days = [.monday, .tuesday, .wednesday] |
| |
| s1.formUnion(s2) |
| expectTrue(s1.contains(.wednesday)) |
| expectFalse(s1.contains(.thursday)) |
| } |
| |
| // Test insert() |
| |
| OptionSetTests.test("Insert.SingleOption") { |
| var s = Days.monday |
| |
| expectFalse(s.contains(.tuesday)) |
| |
| let (inserted1, member1) = s.insert(.tuesday) |
| |
| expectTrue(s.contains(.monday)) |
| expectTrue(s.contains(.tuesday)) |
| expectFalse(s.contains(.sunday)) |
| expectTrue(inserted1) |
| expectEqual(.tuesday, member1) |
| |
| let (inserted2, member2) = s.insert(.tuesday) |
| expectFalse(inserted2) |
| expectEqual(.tuesday, member2) |
| } |
| |
| OptionSetTests.test("Insert.MultipleOptions") { |
| var s: Days = [.monday, .tuesday, .wednesday] |
| |
| expectFalse(s.contains(.friday)) |
| |
| let (inserted1, member1) = s.insert(.friday) |
| |
| expectTrue(s.contains(.monday)) |
| expectTrue(s.contains(.friday)) |
| expectFalse(s.contains(.sunday)) |
| expectTrue(inserted1) |
| expectEqual(.friday, member1) |
| |
| let (inserted2, member2) = s.insert(.friday) |
| expectFalse(inserted2) |
| expectEqual(.friday, member2) |
| } |
| |
| OptionSetTests.test("Insert.EmptySet") { |
| var s: Days = [] |
| |
| expectFalse(s.contains(.monday)) |
| |
| let (inserted1, member1) = s.insert(.monday) |
| |
| expectTrue(s.contains(.monday)) |
| expectTrue(inserted1) |
| expectEqual(.monday, member1) |
| |
| let (inserted2, member2) = s.insert(.monday) |
| expectFalse(inserted2) |
| expectEqual(.monday, member2) |
| } |
| |
| // Test intersection() |
| |
| OptionSetTests.test("Intersection.SingleOption") { |
| do { |
| let s1 = Days.monday |
| let s2: Days = [.monday, .tuesday, .wednesday] |
| |
| let intersection = s1.intersection(s2) |
| expectTrue(intersection.contains(.monday)) |
| expectFalse(intersection.contains(.tuesday)) |
| expectFalse(intersection.contains(.sunday)) |
| } |
| do { |
| let s1 = Days.monday |
| let s2: Days = [.tuesday, .wednesday, .friday] |
| |
| let intersection = s1.intersection(s2) |
| expectFalse(intersection.contains(.monday)) |
| expectFalse(intersection.contains(.tuesday)) |
| expectFalse(intersection.contains(.sunday)) |
| } |
| } |
| |
| OptionSetTests.test("Intersection.MultipleOptions") { |
| do { |
| let s1: Days = [.monday, .tuesday, .wednesday] |
| let s2: Days = [.wednesday, .thursday, .friday] |
| |
| let intersection = s1.intersection(s2) |
| expectTrue(intersection.contains(.wednesday)) |
| expectFalse(intersection.contains(.tuesday)) |
| expectFalse(intersection.contains(.sunday)) |
| } |
| do { |
| let s1: Days = [.monday, .tuesday, .wednesday] |
| let s2: Days = [.thursday, .friday, .saturday] |
| |
| let intersection = s1.intersection(s2) |
| expectFalse(intersection.contains(.wednesday)) |
| expectFalse(intersection.contains(.thursday)) |
| expectFalse(intersection.contains(.sunday)) |
| } |
| } |
| |
| OptionSetTests.test("Intersection.EmptySet") { |
| let s1: Days = [] |
| let s2: Days = [.monday, .tuesday, .wednesday] |
| |
| let intersection = s1.intersection(s2) |
| expectFalse(intersection.contains(.wednesday)) |
| expectFalse(intersection.contains(.thursday)) |
| } |
| |
| // Test isDisjointUnion(with:) |
| |
| OptionSetTests.test("IsDisjointWith.SingleOption") { |
| let s1 = Days.monday |
| let s2: Days = [.monday, .tuesday, .wednesday] |
| let s3: Days = [.tuesday, .wednesday] |
| |
| expectFalse(s1.isDisjoint(with: s2)) |
| expectTrue(s1.isDisjoint(with: s3)) |
| } |
| |
| OptionSetTests.test("IsDisjointWith.MultipleOptions") { |
| let s1: Days = [.monday, .tuesday, .wednesday] |
| let s2: Days = [.tuesday, .wednesday] |
| let s3: Days = [.thursday, .friday, .saturday] |
| |
| expectFalse(s1.isDisjoint(with: s2)) |
| expectTrue(s1.isDisjoint(with: s3)) |
| } |
| |
| OptionSetTests.test("IsDisjointWith.EmptySet") { |
| let s1: Days = [] |
| let s2: Days = [.tuesday, .wednesday] |
| |
| expectTrue(s1.isDisjoint(with: s2)) |
| } |
| |
| // Test isSubset(of:) |
| |
| OptionSetTests.test("IsSubsetOf.SingleOption") { |
| let s1 = Days.monday |
| let s2: Days = [.monday, .tuesday, .wednesday] |
| let s3: Days = [.tuesday, .wednesday] |
| |
| expectTrue(s1.isSubset(of: s2)) |
| expectFalse(s1.isSubset(of: s3)) |
| } |
| |
| OptionSetTests.test("IsSubsetOf.MultipleOptions") { |
| let s1: Days = [.monday, .tuesday] |
| let s2: Days = [.monday, .tuesday, .wednesday] |
| let s3: Days = [.thursday, .friday, .saturday] |
| |
| expectTrue(s1.isSubset(of: s2)) |
| expectFalse(s1.isSubset(of: s3)) |
| } |
| |
| OptionSetTests.test("IsSubsetOf.EmptySet") { |
| let s1: Days = [] |
| let s2: Days = [.tuesday, .wednesday] |
| |
| expectTrue(s1.isSubset(of: s2)) |
| } |
| |
| // Test isSuperset(of:) |
| |
| OptionSetTests.test("IsSupersetOf.SingleOption") { |
| let s1 = Days.monday |
| let s2: Days = [.monday] |
| let s3: Days = [.tuesday, .wednesday] |
| let s4: Days = [] |
| |
| expectTrue(s1.isSuperset(of: s2)) |
| expectFalse(s1.isSuperset(of: s3)) |
| expectTrue(s1.isSuperset(of: s4)) |
| } |
| |
| OptionSetTests.test("IsSupersetOf.MultipleOptions") { |
| let s1: Days = [.monday, .tuesday] |
| let s2: Days = [.monday, .tuesday] |
| let s3: Days = [.monday] |
| let s4: Days = [.thursday, .friday, .saturday] |
| |
| expectTrue(s1.isSuperset(of: s2)) |
| expectTrue(s1.isSuperset(of: s3)) |
| expectFalse(s1.isSuperset(of: s4)) |
| } |
| |
| OptionSetTests.test("IsSupersetOf.EmptySet") { |
| let s1: Days = [] |
| let s2: Days = [.tuesday, .wednesday] |
| let s3: Days = [] |
| |
| expectFalse(s1.isSuperset(of: s2)) |
| expectTrue(s1.isSuperset(of: s3)) |
| } |
| |
| // Test remove() |
| |
| OptionSetTests.test("Remove.SingleOption") { |
| var s = Days.monday |
| |
| expectTrue(s.contains(.monday)) |
| |
| let removed = s.remove(.monday) |
| |
| expectFalse(s.contains(.monday)) |
| expectFalse(s.contains(.sunday)) |
| expectEqual(.monday, removed) |
| } |
| |
| OptionSetTests.test("Remove.MultipleOptions") { |
| var s: Days = [.monday, .tuesday, .wednesday] |
| |
| expectTrue(s.contains(.tuesday)) |
| |
| let removed = s.remove(.tuesday) |
| |
| expectTrue(s.contains(.monday)) |
| expectFalse(s.contains(.tuesday)) |
| expectFalse(s.contains(.sunday)) |
| expectEqual(.tuesday, removed) |
| } |
| |
| OptionSetTests.test("Remove.EmptySet") { |
| var s: Days = [] |
| |
| expectFalse(s.contains(.monday)) |
| |
| let removed = s.remove(.monday) |
| |
| expectFalse(s.contains(.monday)) |
| expectNil(removed) |
| } |
| |
| // Test subtract() |
| |
| OptionSetTests.test("Subtract.SingleOption") { |
| do { |
| var s = Days.monday |
| |
| s.subtract([.monday]) |
| |
| expectFalse(s.contains(.monday)) |
| } |
| do { |
| var s = Days.monday |
| |
| s.subtract([.tuesday]) |
| |
| expectTrue(s.contains(.monday)) |
| } |
| } |
| |
| OptionSetTests.test("Subtract.MultipleOptions") { |
| do { |
| var s: Days = [.monday, .tuesday, .wednesday] |
| |
| s.subtract([.monday]) |
| |
| expectFalse(s.contains(.monday)) |
| expectTrue(s.contains(.tuesday)) |
| } |
| do { |
| var s: Days = [.monday, .tuesday, .wednesday] |
| |
| s.subtract([.friday]) |
| |
| expectTrue(s.contains(.monday)) |
| expectFalse(s.contains(.friday)) |
| } |
| } |
| |
| OptionSetTests.test("Subtract.EmptySet") { |
| var s: Days = [] |
| |
| s.subtract([.monday]) |
| |
| expectFalse(s.contains(.monday)) |
| expectFalse(s.contains(.tuesday)) |
| } |
| |
| // Test subtracting() |
| |
| OptionSetTests.test("Subtracting.SingleOption") { |
| do { |
| let s = Days.monday |
| |
| let difference = s.subtracting([.monday]) |
| |
| expectFalse(difference.contains(.monday)) |
| } |
| do { |
| let s = Days.monday |
| |
| let difference = s.subtracting([.tuesday]) |
| |
| expectTrue(difference.contains(.monday)) |
| } |
| } |
| |
| OptionSetTests.test("Subtracting.MultipleOptions") { |
| do { |
| let s: Days = [.monday, .tuesday, .wednesday] |
| |
| let difference = s.subtracting([.monday]) |
| |
| expectFalse(difference.contains(.monday)) |
| expectTrue(difference.contains(.tuesday)) |
| } |
| do { |
| let s: Days = [.monday, .tuesday, .wednesday] |
| |
| let difference = s.subtracting([.friday]) |
| |
| expectTrue(difference.contains(.monday)) |
| expectFalse(difference.contains(.friday)) |
| } |
| } |
| |
| OptionSetTests.test("Subtracting.EmptySet") { |
| let s: Days = [] |
| |
| let difference = s.subtracting([.monday]) |
| |
| expectFalse(difference.contains(.monday)) |
| expectFalse(difference.contains(.tuesday)) |
| } |
| |
| // Test symmetricDifference() |
| |
| OptionSetTests.test("SymmetricDifference.SingleOption") { |
| do { |
| let s1 = Days.monday |
| let s2: Days = [.monday, .tuesday, .wednesday] |
| |
| let difference = s1.symmetricDifference(s2) |
| expectFalse(difference.contains(.monday)) |
| expectTrue(difference.contains(.tuesday)) |
| expectFalse(difference.contains(.sunday)) |
| } |
| do { |
| let s1 = Days.monday |
| let s2: Days = [.tuesday, .wednesday, .friday] |
| |
| let difference = s1.symmetricDifference(s2) |
| expectTrue(difference.contains(.monday)) |
| expectTrue(difference.contains(.tuesday)) |
| expectFalse(difference.contains(.sunday)) |
| } |
| } |
| |
| OptionSetTests.test("SymmetricDifference.MultipleOptions") { |
| do { |
| let s1: Days = [.monday, .tuesday, .wednesday] |
| let s2: Days = [.wednesday, .thursday, .friday] |
| |
| let difference = s1.symmetricDifference(s2) |
| expectFalse(difference.contains(.wednesday)) |
| expectTrue(difference.contains(.tuesday)) |
| expectFalse(difference.contains(.sunday)) |
| } |
| do { |
| let s1: Days = [.monday, .tuesday, .wednesday] |
| let s2: Days = [.thursday, .friday, .saturday] |
| |
| let difference = s1.symmetricDifference(s2) |
| expectTrue(difference.contains(.wednesday)) |
| expectTrue(difference.contains(.thursday)) |
| expectFalse(difference.contains(.sunday)) |
| } |
| } |
| |
| OptionSetTests.test("SymmetricDifference.EmptySet") { |
| let s1: Days = [] |
| let s2: Days = [.monday, .tuesday, .wednesday] |
| |
| let difference = s1.symmetricDifference(s2) |
| expectTrue(difference.contains(.wednesday)) |
| expectFalse(difference.contains(.thursday)) |
| } |
| |
| // Test union() |
| |
| OptionSetTests.test("Union.SingleOption") { |
| do { |
| let s1 = Days.monday |
| let s2: Days = [.monday, .tuesday, .wednesday] |
| |
| let union = s1.union(s2) |
| expectTrue(union.contains(.monday)) |
| expectTrue(union.contains(.tuesday)) |
| expectFalse(union.contains(.sunday)) |
| } |
| do { |
| let s1 = Days.monday |
| let s2: Days = [.tuesday, .wednesday, .friday] |
| |
| let union = s1.union(s2) |
| expectTrue(union.contains(.monday)) |
| expectTrue(union.contains(.tuesday)) |
| expectFalse(union.contains(.sunday)) |
| } |
| } |
| |
| OptionSetTests.test("Union.MultipleOptions") { |
| do { |
| let s1: Days = [.monday, .tuesday, .wednesday] |
| let s2: Days = [.wednesday, .thursday, .friday] |
| |
| let union = s1.union(s2) |
| expectTrue(union.contains(.wednesday)) |
| expectTrue(union.contains(.tuesday)) |
| expectFalse(union.contains(.sunday)) |
| } |
| do { |
| let s1: Days = [.monday, .tuesday, .wednesday] |
| let s2: Days = [.thursday, .friday, .saturday] |
| |
| let union = s1.union(s2) |
| expectTrue(union.contains(.wednesday)) |
| expectTrue(union.contains(.thursday)) |
| expectFalse(union.contains(.sunday)) |
| } |
| } |
| |
| OptionSetTests.test("Union.EmptySet") { |
| let s1: Days = [] |
| let s2: Days = [.monday, .tuesday, .wednesday] |
| |
| let union = s1.union(s2) |
| expectTrue(union.contains(.wednesday)) |
| expectFalse(union.contains(.thursday)) |
| } |
| |
| // Test update(with:) |
| |
| OptionSetTests.test("UpdateWith.SingleOption") { |
| var s = Days.monday |
| |
| expectFalse(s.contains(.tuesday)) |
| |
| let member1 = s.update(with: .tuesday) |
| |
| expectTrue(s.contains(.monday)) |
| expectTrue(s.contains(.tuesday)) |
| expectFalse(s.contains(.sunday)) |
| expectNil(member1) |
| |
| let member2 = s.update(with: .tuesday) |
| expectOptionalEqual(.tuesday, member2) |
| } |
| |
| OptionSetTests.test("UpdateWith.MultipleOptions") { |
| var s: Days = [.monday, .tuesday, .wednesday] |
| |
| expectFalse(s.contains(.friday)) |
| |
| let member1 = s.update(with: .friday) |
| |
| expectTrue(s.contains(.monday)) |
| expectTrue(s.contains(.friday)) |
| expectFalse(s.contains(.sunday)) |
| expectNil(member1) |
| |
| let member2 = s.update(with: .friday) |
| expectOptionalEqual(.friday, member2) |
| } |
| |
| OptionSetTests.test("UpdateWith.EmptySet") { |
| var s: Days = [] |
| |
| expectFalse(s.contains(.monday)) |
| |
| let member1 = s.update(with: .monday) |
| |
| expectTrue(s.contains(.monday)) |
| expectNil(member1) |
| |
| let member2 = s.update(with: .monday) |
| expectOptionalEqual(.monday, member2) |
| } |
| |
| runAllTests() |