Skip to content

Commit a78858b

Browse files
committed
Fixed several NSMutableArray's methods, implemented unit tests.
1 parent 1333852 commit a78858b

File tree

2 files changed

+40
-3
lines changed

2 files changed

+40
-3
lines changed

Foundation/NSArray.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -618,7 +618,7 @@ public class NSMutableArray : NSArray {
618618

619619
public func replaceObjectAtIndex(index: Int, withObject anObject: AnyObject) {
620620
if self.dynamicType === NSMutableArray.self {
621-
_storage.replaceRange(Range<Int>(start: index, end: index), with: [anObject])
621+
_storage.replaceRange(Range<Int>(start: index, end: index + 1), with: [anObject])
622622
} else {
623623
NSRequiresConcreteImplementation()
624624
}
@@ -713,7 +713,7 @@ public class NSMutableArray : NSArray {
713713
}
714714

715715
public func removeObjectsInArray(otherArray: [AnyObject]) {
716-
let set = NSSet(array : _swiftObject)
716+
let set = NSSet(array : otherArray)
717717
for idx in (0..<count).reverse() {
718718
if set.containsObject(objectAtIndex(idx)) {
719719
removeObjectAtIndex(idx)

TestFoundation/TestNSArray.swift

Lines changed: 38 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,8 @@ class TestNSArray : XCTestCase {
3232
("test_binarySearchFringeCases", test_binarySearchFringeCases),
3333
("test_replaceObjectsInRange_withObjectsFromArray", test_replaceObjectsInRange_withObjectsFromArray),
3434
("test_replaceObjectsInRange_withObjectsFromArray_range", test_replaceObjectsInRange_withObjectsFromArray_range),
35+
("test_replaceObjectAtIndex", test_replaceObjectAtIndex),
36+
("test_removeObjectsInArray", test_removeObjectsInArray),
3537
("test_sortedArrayUsingComparator", test_sortedArrayUsingComparator),
3638
("test_sortedArrayWithOptionsUsingComparator", test_sortedArrayWithOptionsUsingComparator),
3739
("test_arrayReplacement", test_arrayReplacement),
@@ -176,7 +178,42 @@ class TestNSArray : XCTestCase {
176178
XCTAssertTrue((array[1] as! NSNumber).integerValue == 10)
177179
XCTAssertTrue((array[2] as! NSNumber).integerValue == 2)
178180
}
179-
181+
182+
func test_replaceObjectAtIndex() {
183+
let array = NSMutableArray(array: [
184+
NSNumber(int: 0), NSNumber(int: 1), NSNumber(int: 2), NSNumber(int: 3),
185+
NSNumber(int: 4), NSNumber(int: 5), NSNumber(int: 7)])
186+
187+
// 1. Check replacement in the middle of the array
188+
array.replaceObjectAtIndex(3, withObject: NSNumber(int: 8))
189+
XCTAssertEqual(array.count, 7)
190+
XCTAssertEqual((array[3] as! NSNumber).integerValue, 8)
191+
192+
// 2. Check replacement of the first element
193+
array.replaceObjectAtIndex(0, withObject: NSNumber(int: 7))
194+
XCTAssertEqual(array.count, 7)
195+
XCTAssertEqual((array[0] as! NSNumber).integerValue, 7)
196+
197+
// 3. Check replacement of the last element
198+
array.replaceObjectAtIndex(6, withObject: NSNumber(int: 6))
199+
XCTAssertEqual(array.count, 7)
200+
XCTAssertEqual((array[6] as! NSNumber).integerValue, 6)
201+
}
202+
203+
func test_removeObjectsInArray() {
204+
let array = NSMutableArray(array: [
205+
NSNumber(int: 0), NSNumber(int: 1), NSNumber(int: 2), NSNumber(int: 3),
206+
NSNumber(int: 4), NSNumber(int: 5), NSNumber(int: 7)])
207+
let objectsToRemove: Array<AnyObject> = [
208+
NSNumber(int: 1), NSNumber(int: 22), NSNumber(int: 7), NSNumber(int: 5)]
209+
array.removeObjectsInArray(objectsToRemove)
210+
XCTAssertEqual(array.count, 4)
211+
XCTAssertEqual((array[0] as! NSNumber).integerValue, 0)
212+
XCTAssertEqual((array[1] as! NSNumber).integerValue, 2)
213+
XCTAssertEqual((array[2] as! NSNumber).integerValue, 3)
214+
XCTAssertEqual((array[3] as! NSNumber).integerValue, 4)
215+
}
216+
180217
func test_binarySearchFringeCases() {
181218
let array = NSArray(array: [
182219
NSNumber(int: 0), NSNumber(int: 1), NSNumber(int: 2), NSNumber(int: 2), NSNumber(int: 3),

0 commit comments

Comments
 (0)