@@ -118,4 +118,108 @@ public function testGetLastAfterRemove()
118118 $ instance ->remove ('b ' );
119119 $ this ->assertEquals ('a ' , $ instance ->get (0 ));
120120 }
121+
122+ public function getAfterRemoveProvider ()
123+ {
124+ // values, value to remove, get index, expected result
125+ return [
126+ [['a ' , 'b ' , 'c ' ], 'a ' , 0 , 'b ' ],
127+ [['a ' , 'b ' , 'c ' ], 'a ' , 1 , 'c ' ],
128+
129+ [['a ' , 'b ' , 'c ' ], 'b ' , 0 , 'a ' ],
130+ [['a ' , 'b ' , 'c ' ], 'b ' , 1 , 'c ' ],
131+
132+ [['a ' , 'b ' , 'c ' ], 'c ' , 0 , 'a ' ],
133+ [['a ' , 'b ' , 'c ' ], 'c ' , 1 , 'b ' ],
134+ ];
135+ }
136+
137+ /**
138+ * @dataProvider getAfterRemoveProvider
139+ */
140+ public function testGetAfterRemove (array $ values , $ remove , $ index , $ expected )
141+ {
142+ $ instance = $ this ->getInstance ($ values );
143+ $ instance ->remove ($ remove );
144+
145+ $ this ->assertEquals ($ expected , $ instance ->get ($ index ));
146+ }
147+
148+ public function testGetAfterRemoveAtTheStart ()
149+ {
150+ $ instance = $ this ->getInstance (['a ' , 'b ' , 'c ' , 'd ' , 'e ' ]);
151+
152+ $ instance ->remove ('a ' );
153+ $ this ->assertEquals ('b ' , $ instance ->get (0 ));
154+ $ this ->assertEquals ('c ' , $ instance ->get (1 ));
155+ $ this ->assertEquals ('d ' , $ instance ->get (2 ));
156+ $ this ->assertEquals ('e ' , $ instance ->get (3 ));
157+
158+ $ instance ->remove ('b ' );
159+ $ this ->assertEquals ('c ' , $ instance ->get (0 ));
160+ $ this ->assertEquals ('d ' , $ instance ->get (1 ));
161+ $ this ->assertEquals ('e ' , $ instance ->get (2 ));
162+
163+ $ instance ->remove ('c ' );
164+ $ this ->assertEquals ('d ' , $ instance ->get (0 ));
165+ $ this ->assertEquals ('e ' , $ instance ->get (1 ));
166+
167+ $ instance ->remove ('d ' );
168+ $ this ->assertEquals ('e ' , $ instance ->get (0 ));
169+
170+ $ instance ->remove ('e ' );
171+ $ this ->assertTrue ($ instance ->isEmpty ());
172+ }
173+
174+ public function testGetAfterRemoveAtTheEnd ()
175+ {
176+ $ instance = $ this ->getInstance (['a ' , 'b ' , 'c ' , 'd ' , 'e ' ]);
177+
178+ $ instance ->remove ('e ' );
179+ $ this ->assertEquals ('a ' , $ instance ->get (0 ));
180+ $ this ->assertEquals ('b ' , $ instance ->get (1 ));
181+ $ this ->assertEquals ('c ' , $ instance ->get (2 ));
182+ $ this ->assertEquals ('d ' , $ instance ->get (3 ));
183+
184+ $ instance ->remove ('d ' );
185+ $ this ->assertEquals ('a ' , $ instance ->get (0 ));
186+ $ this ->assertEquals ('b ' , $ instance ->get (1 ));
187+ $ this ->assertEquals ('c ' , $ instance ->get (2 ));
188+
189+ $ instance ->remove ('c ' );
190+ $ this ->assertEquals ('a ' , $ instance ->get (0 ));
191+ $ this ->assertEquals ('b ' , $ instance ->get (1 ));
192+
193+ $ instance ->remove ('b ' );
194+ $ this ->assertEquals ('a ' , $ instance ->get (0 ));
195+
196+ $ instance ->remove ('a ' );
197+ $ this ->assertTrue ($ instance ->isEmpty ());
198+ }
199+
200+ public function testGetAfterMultipleRemoveAtEitherEnd ()
201+ {
202+ $ instance = $ this ->getInstance (['a ' , 'b ' , 'c ' , 'd ' , 'e ' ]);
203+
204+ $ instance ->remove ('a ' );
205+ $ this ->assertEquals ('b ' , $ instance ->get (0 ));
206+ $ this ->assertEquals ('c ' , $ instance ->get (1 ));
207+ $ this ->assertEquals ('d ' , $ instance ->get (2 ));
208+ $ this ->assertEquals ('e ' , $ instance ->get (3 ));
209+
210+ $ instance ->remove ('e ' );
211+ $ this ->assertEquals ('b ' , $ instance ->get (0 ));
212+ $ this ->assertEquals ('c ' , $ instance ->get (1 ));
213+ $ this ->assertEquals ('d ' , $ instance ->get (2 ));
214+
215+ $ instance ->remove ('b ' );
216+ $ this ->assertEquals ('c ' , $ instance ->get (0 ));
217+ $ this ->assertEquals ('d ' , $ instance ->get (1 ));
218+
219+ $ instance ->remove ('d ' );
220+ $ this ->assertEquals ('c ' , $ instance ->get (0 ));
221+
222+ $ instance ->remove ('c ' );
223+ $ this ->assertTrue ($ instance ->isEmpty ());
224+ }
121225}
0 commit comments