Skip to content

Commit ce6f374

Browse files
Added some more methods to the queue.
1 parent a20b474 commit ce6f374

File tree

3 files changed

+65
-15
lines changed

3 files changed

+65
-15
lines changed

OptimizelySDKCore/OptimizelySDKCore/OPTLYQueue.h

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,12 +53,27 @@ extern const NSInteger OPTLYQueueDefaultMaxSize;
5353
- (id)dequeue;
5454

5555
/**
56-
* Returns a reference to the oldest item in the queue (the queue is not mutated).
56+
* Returns and removes the oldest N item in the queue (the queue is mutated).
5757
*
58-
* @return A reference to the oldest item in the queue.
58+
* @param numberOfItems The number of itmes to remove.
59+
* @return The oldest N items from the queue.
60+
*/
61+
- (NSArray *)dequeueNItems:(NSInteger)numberOfItems;
62+
63+
/**
64+
* Returns a copy of the oldest item in the queue (the queue is not mutated).
65+
*
66+
* @return A copy of the oldest item in the queue.
5967
*/
6068
- (id)front;
6169

70+
/**
71+
* Returns a copy of the oldest N items in the queue (the queue is not mutated).
72+
*
73+
* @return An array with a copy of the oldest N items in the queue.
74+
*/
75+
- (NSArray *)firstNItems:(NSInteger)numberOfItems;
76+
6277
/**
6378
* Gets the size of the queue.
6479
*

OptimizelySDKCore/OptimizelySDKCore/OPTLYQueue.m

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,16 @@ - (id)front {
5858
return item;
5959
}
6060

61+
- (NSArray *)firstNItems:(NSInteger)numberOfItems {
62+
NSArray *items;
63+
if (!self.isEmpty) {
64+
NSInteger endOfRange = numberOfItems > [self size] ? [self size] : numberOfItems;
65+
NSRange range = NSMakeRange(0, endOfRange);
66+
items = [self.mutableQueue subarrayWithRange:range];
67+
}
68+
return items;
69+
}
70+
6171
- (id)dequeue {
6272
id item = nil;
6373
if (!self.isEmpty) {
@@ -67,6 +77,17 @@ - (id)dequeue {
6777
return item;
6878
}
6979

80+
- (NSArray *)dequeueNItems:(NSInteger)numberOfItems {
81+
NSArray *items;
82+
if (!self.isEmpty) {
83+
NSInteger endOfRange = numberOfItems > [self size] ? [self size] : numberOfItems;
84+
NSRange range = NSMakeRange(0, endOfRange);
85+
items = [self.mutableQueue subarrayWithRange:range];
86+
[self.mutableQueue removeObjectsInRange:range];
87+
}
88+
return items;
89+
}
90+
7091
- (NSInteger)size {
7192
return [self.queue count];
7293
}

OptimizelySDKCore/OptimizelySDKCoreTests/OPTLYQueueTest.m

Lines changed: 27 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -45,23 +45,13 @@ - (void)setUp {
4545

4646
- (void)tearDown {
4747
self.queue = nil;
48-
self.testData1 = nil;
49-
self.testData2 = nil;
50-
self.testData3 = nil;
51-
self.testData4 = nil;
5248
[super tearDown];
5349
}
5450

55-
- (void)testQueueInit
56-
{
57-
OPTLYQueue *queue = [OPTLYQueue new];
58-
XCTAssert(queue.maxQueueSize == OPTLYQueueDefaultMaxSize, @"Invalid max queue size for default queue initialization.");
59-
}
60-
6151
- (void)testQueueInitWithQueueSize {
6252
XCTAssertNotNil(self.queue);
6353
NSInteger queueCapacity = [self.queue maxQueueSize];
64-
XCTAssert(queueCapacity == kMaxQueueSize, @"Incorrect max queue size");
54+
XCTAssert(queueCapacity == kMaxQueueSize, @"incorrect max queue size");
6555
}
6656

6757
// queue insertion should cap off at max size
@@ -72,7 +62,7 @@ - (void)testEnqueueAndSize
7262
}
7363

7464
// dequeue'd value should be the oldest
75-
// queue size should decrease
65+
// queue size shoudl decrease
7666
- (void)testDequeue
7767
{
7868
NSString *dequeuedData = [self.queue dequeue];
@@ -81,13 +71,37 @@ - (void)testDequeue
8171
XCTAssert(size == kMaxQueueSize-1, @"Invalid queue size after dequeue.");
8272
}
8373

74+
- (void)testDequeueNItems
75+
{
76+
NSInteger numberOfItems = 3;
77+
NSArray *firstNItems = [self.queue dequeueNItems:numberOfItems];
78+
XCTAssert([firstNItems count] == numberOfItems, @"Invalid number of items retrieved.");
79+
XCTAssert([firstNItems[0] isEqualToString:self.testData1], @"Invalid data dequeued.");
80+
XCTAssert([firstNItems[1] isEqualToString:self.testData2], @"Invalid data dequeued.");
81+
XCTAssert([firstNItems[2] isEqualToString:self.testData3], @"Invalid data dequeued.");
82+
NSInteger size = [self.queue size];
83+
XCTAssert(size == 0, @"Invalid queue size.");
84+
}
85+
8486
// the front value should be the oldest
8587
- (void)testFront
8688
{
8789
NSString *front = [self.queue front];
8890
XCTAssert([front isEqualToString:self.testData1], @"Invalid data dequeued.");
8991
NSInteger size = [self.queue size];
90-
XCTAssert(size == kMaxQueueSize, @"Invalid queue size after dequeue.");
92+
XCTAssert(size == kMaxQueueSize, @"Invalid queue size.");
93+
}
94+
95+
- (void)testFirstNItems
96+
{
97+
NSInteger numberOfItems = 3;
98+
NSArray *firstNItems = [self.queue firstNItems:numberOfItems];
99+
XCTAssert([firstNItems count] == numberOfItems, @"Invalid number of items retrieved.");
100+
XCTAssert([firstNItems[0] isEqualToString:self.testData1], @"Invalid data dequeued.");
101+
XCTAssert([firstNItems[1] isEqualToString:self.testData2], @"Invalid data dequeued.");
102+
XCTAssert([firstNItems[2] isEqualToString:self.testData3], @"Invalid data dequeued.");
103+
NSInteger size = [self.queue size];
104+
XCTAssert(size == kMaxQueueSize, @"Invalid queue size.");
91105
}
92106

93107
- (void)testIsFull

0 commit comments

Comments
 (0)