@@ -23,7 +23,7 @@ class RingBufferTests: XCTestCase {
23
23
// Given
24
24
var ringBuffer = RingBuffer < Element > ( capacity: 0 )
25
25
// When
26
- ringBuffer. push ( " ezra " )
26
+ try ringBuffer. push ( " ezra " )
27
27
// Then
28
28
XCTAssertEqual ( Array ( ringBuffer) , [ ] )
29
29
}
@@ -32,17 +32,17 @@ class RingBufferTests: XCTestCase {
32
32
// Given
33
33
var ringBuffer = RingBuffer < Element > ( capacity: 3 ) // [nil, nil, nil]
34
34
// When
35
- let overwrittenElement = ringBuffer. push ( " vader " ) // ["vader", nil, nil]
35
+ let overwrittenElement = try ringBuffer. push ( " vader " ) // ["vader", nil, nil]
36
36
// Then
37
37
XCTAssertNil ( overwrittenElement)
38
38
}
39
39
40
40
func testPush_WhenAtFullCapacity_OverwritesAndReturnsTailElement( ) throws {
41
41
// Given
42
42
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.
44
44
// When
45
- let overwrittenElement = ringBuffer. push ( " vader " )
45
+ let overwrittenElement = try ringBuffer. push ( " vader " )
46
46
// Then
47
47
XCTAssertEqual ( overwrittenElement, " luke " )
48
48
XCTAssertEqual ( Array ( ringBuffer) , [ " vader " ] )
@@ -52,10 +52,10 @@ class RingBufferTests: XCTestCase {
52
52
// Given
53
53
var ringBuffer = RingBuffer < Element > ( capacity: 3 ) // [nil, nil, nil]
54
54
// 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"]
59
59
// Then
60
60
XCTAssertEqual ( Array ( ringBuffer) , [ " lando " , " vader " , " jabba " ] )
61
61
}
@@ -64,9 +64,9 @@ class RingBufferTests: XCTestCase {
64
64
// Given
65
65
var ringBuffer = RingBuffer < Element > ( capacity: 10 )
66
66
// 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 " )
70
70
// Then
71
71
XCTAssertEqual ( Array ( ringBuffer) , [ " han solo " , " boba " , " jabba " ] )
72
72
}
@@ -76,12 +76,34 @@ class RingBufferTests: XCTestCase {
76
76
var ringBuffer = RingBuffer < Int > ( capacity: 10 )
77
77
// When
78
78
for index in 1 ... 1000 {
79
- ringBuffer. push ( index)
79
+ try ringBuffer. push ( index)
80
80
}
81
81
// Then
82
82
XCTAssertEqual ( Array ( ringBuffer) , Array ( 991 ... 1000 ) )
83
83
}
84
84
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
+
85
107
func testPop_WhenCapacityIsZero_DoesNothingAndReturnsNil( ) throws {
86
108
// Given
87
109
var ringBuffer = RingBuffer < String > ( capacity: 0 )
@@ -95,9 +117,9 @@ class RingBufferTests: XCTestCase {
95
117
func testPopRemovesAndReturnsLastElement( ) throws {
96
118
// Given
97
119
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 " )
101
123
// When
102
124
XCTAssertEqual ( ringBuffer. pop ( ) , " three " )
103
125
XCTAssertEqual ( ringBuffer. pop ( ) , " two " )
@@ -110,7 +132,7 @@ class RingBufferTests: XCTestCase {
110
132
// Given
111
133
var ringBuffer = RingBuffer < Int > ( capacity: 10 )
112
134
for number in Array ( 1 ... 15 ) {
113
- ringBuffer. push ( number)
135
+ try ringBuffer. push ( number)
114
136
}
115
137
116
138
// ringBuffer: [11, 12, 13, 14, 15, 6, 7, 8, 9, 10]
0 commit comments