@@ -23,7 +23,7 @@ class RingBufferTests: XCTestCase {
2323 // Given
2424 var ringBuffer = RingBuffer < Element > ( capacity: 0 )
2525 // When
26- ringBuffer. push ( " ezra " )
26+ try ringBuffer. push ( " ezra " )
2727 // Then
2828 XCTAssertEqual ( Array ( ringBuffer) , [ ] )
2929 }
@@ -32,17 +32,17 @@ class RingBufferTests: XCTestCase {
3232 // Given
3333 var ringBuffer = RingBuffer < Element > ( capacity: 3 ) // [nil, nil, nil]
3434 // When
35- let overwrittenElement = ringBuffer. push ( " vader " ) // ["vader", nil, nil]
35+ let overwrittenElement = try ringBuffer. push ( " vader " ) // ["vader", nil, nil]
3636 // Then
3737 XCTAssertNil ( overwrittenElement)
3838 }
3939
4040 func testPush_WhenAtFullCapacity_OverwritesAndReturnsTailElement( ) throws {
4141 // Given
4242 var ringBuffer = RingBuffer < Element > ( capacity: 1 ) // [nil]
43- ringBuffer. push ( " luke " ) // ["luke"] where "luke" is the tail element.
43+ try ringBuffer. push ( " luke " ) // ["luke"] where "luke" is the tail element.
4444 // When
45- let overwrittenElement = ringBuffer. push ( " vader " )
45+ let overwrittenElement = try ringBuffer. push ( " vader " )
4646 // Then
4747 XCTAssertEqual ( overwrittenElement, " luke " )
4848 XCTAssertEqual ( Array ( ringBuffer) , [ " vader " ] )
@@ -52,10 +52,10 @@ class RingBufferTests: XCTestCase {
5252 // Given
5353 var ringBuffer = RingBuffer < Element > ( capacity: 3 ) // [nil, nil, nil]
5454 // When
55- ringBuffer. push ( " chewy " ) // ["chewy", nil, nil]
56- ringBuffer. push ( " vader " ) // ["chewy", "vader", nil]
57- ringBuffer. push ( " jabba " ) // ["chewy", "vader", "jabba"]
58- ringBuffer. push ( " lando " ) // ["lando", "vader", "jabba"]
55+ try ringBuffer. push ( " chewy " ) // ["chewy", nil, nil]
56+ try ringBuffer. push ( " vader " ) // ["chewy", "vader", nil]
57+ try ringBuffer. push ( " jabba " ) // ["chewy", "vader", "jabba"]
58+ try ringBuffer. push ( " lando " ) // ["lando", "vader", "jabba"]
5959 // Then
6060 XCTAssertEqual ( Array ( ringBuffer) , [ " lando " , " vader " , " jabba " ] )
6161 }
@@ -64,9 +64,9 @@ class RingBufferTests: XCTestCase {
6464 // Given
6565 var ringBuffer = RingBuffer < Element > ( capacity: 10 )
6666 // When
67- ringBuffer. push ( " han solo " )
68- ringBuffer. push ( " boba " )
69- ringBuffer. push ( " jabba " )
67+ try ringBuffer. push ( " han solo " )
68+ try ringBuffer. push ( " boba " )
69+ try ringBuffer. push ( " jabba " )
7070 // Then
7171 XCTAssertEqual ( Array ( ringBuffer) , [ " han solo " , " boba " , " jabba " ] )
7272 }
@@ -76,12 +76,34 @@ class RingBufferTests: XCTestCase {
7676 var ringBuffer = RingBuffer < Int > ( capacity: 10 )
7777 // When
7878 for index in 1 ... 1000 {
79- ringBuffer. push ( index)
79+ try ringBuffer. push ( index)
8080 }
8181 // Then
8282 XCTAssertEqual ( Array ( ringBuffer) , Array ( 991 ... 1000 ) )
8383 }
8484
85+ func testPopBeforePushing( ) throws {
86+ // Given
87+ var ringBuffer = RingBuffer < Element > ( capacity: 2 ) // [`tailIndex` -> nil, nil]
88+ // When
89+ ringBuffer. pop ( ) // [nil, `tailIndex` -> nil]
90+ try ringBuffer. push ( " yoda " ) // [nil, "yoda"]
91+ try ringBuffer. push ( " mando " ) // ["mando", "yoda"]
92+ // Then
93+ XCTAssertEqual ( Array ( ringBuffer) , [ " mando " , " yoda " ] )
94+ }
95+
96+ func testPopStressTest( ) throws {
97+ // Given
98+ var ringBuffer = RingBuffer < Int > ( capacity: 10 )
99+ // When
100+ for _ in 1 ... 1000 {
101+ XCTAssertNil ( ringBuffer. pop ( ) )
102+ }
103+ // Then
104+ XCTAssertEqual ( Array ( ringBuffer) , [ ] )
105+ }
106+
85107 func testPop_WhenCapacityIsZero_DoesNothingAndReturnsNil( ) throws {
86108 // Given
87109 var ringBuffer = RingBuffer < String > ( capacity: 0 )
@@ -95,9 +117,9 @@ class RingBufferTests: XCTestCase {
95117 func testPopRemovesAndReturnsLastElement( ) throws {
96118 // Given
97119 var ringBuffer = RingBuffer < Element > ( capacity: 3 )
98- ringBuffer. push ( " one " )
99- ringBuffer. push ( " two " )
100- ringBuffer. push ( " three " )
120+ try ringBuffer. push ( " one " )
121+ try ringBuffer. push ( " two " )
122+ try ringBuffer. push ( " three " )
101123 // When
102124 XCTAssertEqual ( ringBuffer. pop ( ) , " three " )
103125 XCTAssertEqual ( ringBuffer. pop ( ) , " two " )
@@ -110,7 +132,7 @@ class RingBufferTests: XCTestCase {
110132 // Given
111133 var ringBuffer = RingBuffer < Int > ( capacity: 10 )
112134 for number in Array ( 1 ... 15 ) {
113- ringBuffer. push ( number)
135+ try ringBuffer. push ( number)
114136 }
115137
116138 // ringBuffer: [11, 12, 13, 14, 15, 6, 7, 8, 9, 10]
0 commit comments