Skip to content

Commit 95905cf

Browse files
authored
Merge pull request #1524 from zayass/fix/indexset-contains-another
Fix IndexSet.contains(integersIn indexSet:)
2 parents 57305f9 + 713087f commit 95905cf

File tree

2 files changed

+39
-1
lines changed

2 files changed

+39
-1
lines changed

Foundation/NSIndexSet.swift

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -349,7 +349,8 @@ open class NSIndexSet : NSObject, NSCopying, NSMutableCopying, NSSecureCoding {
349349
}
350350
open func contains(_ indexSet: IndexSet) -> Bool {
351351
var result = true
352-
enumerateRanges(options: []) { range, stop in
352+
let nsIndexSet = indexSet._bridgeToObjectiveC()
353+
nsIndexSet.enumerateRanges(options: []) { range, stop in
353354
if !self.contains(in: range) {
354355
result = false
355356
stop.pointee = true

TestFoundation/TestIndexSet.swift

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ class TestIndexSet : XCTestCase {
4040
("testIndexRange", testIndexRange),
4141
("testMutation", testMutation),
4242
("testContainsAndIntersects", testContainsAndIntersects),
43+
("testContainsIndexSet", testContainsIndexSet),
4344
("testIteration", testIteration),
4445
("testRangeIteration", testRangeIteration),
4546
("testSubrangeIteration", testSubrangeIteration),
@@ -407,6 +408,42 @@ class TestIndexSet : XCTestCase {
407408
XCTAssertFalse(someIndexes.intersects(integersIn: 10...12))
408409
XCTAssertFalse(someIndexes.intersects(integersIn: 10..<12))
409410
}
411+
412+
func testContainsIndexSet() {
413+
var someIndexes = IndexSet()
414+
someIndexes.insert(integersIn: 1..<2)
415+
someIndexes.insert(integersIn: 100..<200)
416+
someIndexes.insert(integersIn: 1000..<2000)
417+
418+
let contained1 = someIndexes
419+
let contained2 = IndexSet(integersIn: 120..<150)
420+
421+
var contained3 = IndexSet()
422+
contained3.insert(integersIn: 100..<200)
423+
contained3.insert(integersIn: 1500..<1600)
424+
425+
let notContained1 = IndexSet(integer: 9)
426+
let notContained2 = IndexSet(integersIn: 150..<300)
427+
var notContained3 = IndexSet()
428+
notContained3.insert(integersIn: 1..<2)
429+
notContained3.insert(integersIn: 100..<200)
430+
notContained3.insert(integersIn: 1000..<2000)
431+
notContained3.insert(integersIn: 3000..<5000)
432+
433+
XCTAssertTrue(someIndexes.contains(integersIn: contained1))
434+
XCTAssertTrue(someIndexes.contains(integersIn: contained2))
435+
XCTAssertTrue(someIndexes.contains(integersIn: contained3))
436+
437+
XCTAssertFalse(someIndexes.contains(integersIn: notContained1))
438+
XCTAssertFalse(someIndexes.contains(integersIn: notContained2))
439+
XCTAssertFalse(someIndexes.contains(integersIn: notContained3))
440+
441+
let emptySet = IndexSet()
442+
443+
XCTAssertTrue(emptySet.contains(integersIn: emptySet))
444+
XCTAssertTrue(someIndexes.contains(integersIn: emptySet))
445+
XCTAssertFalse(emptySet.contains(integersIn: someIndexes))
446+
}
410447

411448
func testIteration() {
412449
var someIndexes = IndexSet(integersIn: 1..<5)

0 commit comments

Comments
 (0)