@@ -175,3 +175,85 @@ fn cursor_mut_insert() {
175
175
// &[200, 201, 202, 203, 1, 100, 101]
176
176
// );
177
177
}
178
+
179
+ #[ test]
180
+ fn cursor_mut_split_after ( ) {
181
+ let _trace = trace_init ( ) ;
182
+ let entries = [ entry ( 1 ) , entry ( 2 ) , entry ( 3 ) , entry ( 4 ) , entry ( 5 ) ] ;
183
+ let vals = [ 1 , 2 , 3 , 4 , 5 ] ;
184
+
185
+ // test all splits
186
+ for i in 0 ..vals. len ( ) + 1 {
187
+ let _span = tracing:: info_span!( "split_after" , i) . entered ( ) ;
188
+
189
+ let mut list = list_from_iter ( & entries) ;
190
+ let mut cursor = list. cursor_front_mut ( ) ;
191
+
192
+ for _ in 0 ..i {
193
+ cursor. move_next ( ) ;
194
+ }
195
+
196
+ tracing:: info!( ?cursor) ;
197
+
198
+ // split off at this index
199
+ let split = cursor. split_after ( ) ;
200
+ tracing:: info!( ?split, ?list) ;
201
+
202
+ assert_valid ! ( list) ;
203
+ assert_valid ! ( split) ;
204
+
205
+ let split_entries = split. iter ( ) . map ( |entry| entry. val ) . collect :: < Vec < _ > > ( ) ;
206
+ let list_entries = list. iter ( ) . map ( |entry| entry. val ) . collect :: < Vec < _ > > ( ) ;
207
+ tracing:: info!( ?list_entries, ?split_entries) ;
208
+
209
+ if i < vals. len ( ) {
210
+ assert_eq ! ( list_entries, vals[ ..i + 1 ] , "list after split" ) ;
211
+ assert_eq ! ( split_entries, vals[ i + 1 ..] , "split" ) ;
212
+ } else {
213
+ // if we were at the end of the list, the split should contain
214
+ // everything.
215
+ assert_eq ! ( list_entries, & [ ] , "list after split" ) ;
216
+ assert_eq ! ( split_entries, vals[ ..] , "split" ) ;
217
+ }
218
+ }
219
+ }
220
+
221
+ #[ test]
222
+ fn cursor_mut_split_before ( ) {
223
+ let _trace = trace_init ( ) ;
224
+ let entries = [ entry ( 1 ) , entry ( 2 ) , entry ( 3 ) , entry ( 4 ) , entry ( 5 ) ] ;
225
+ let vals = [ 1 , 2 , 3 , 4 , 5 ] ;
226
+
227
+ // test all splits
228
+ for i in 0 ..vals. len ( ) + 1 {
229
+ let _span = tracing:: info_span!( "split_before" , i) . entered ( ) ;
230
+ let mut list = list_from_iter ( & entries) ;
231
+ let mut cursor = list. cursor_front_mut ( ) ;
232
+ for _ in 0 ..i {
233
+ cursor. move_next ( ) ;
234
+ }
235
+
236
+ tracing:: info!( ?cursor) ;
237
+
238
+ // split off at this index
239
+ let split = cursor. split_before ( ) ;
240
+ tracing:: info!( ?split, ?list) ;
241
+
242
+ assert_valid ! ( list) ;
243
+ assert_valid ! ( split) ;
244
+
245
+ let split_entries = split. iter ( ) . map ( |entry| entry. val ) . collect :: < Vec < _ > > ( ) ;
246
+ let list_entries = list. iter ( ) . map ( |entry| entry. val ) . collect :: < Vec < _ > > ( ) ;
247
+ tracing:: info!( ?list_entries, ?split_entries) ;
248
+
249
+ if i > 0 {
250
+ assert_eq ! ( list_entries, vals[ i..] , "list after split" ) ;
251
+ assert_eq ! ( split_entries, vals[ ..i] , "split" ) ;
252
+ } else {
253
+ // if we were at the beginning of the list, the split should contain
254
+ // everything.
255
+ assert_eq ! ( list_entries, vals[ ..] , "list after split" ) ;
256
+ assert_eq ! ( split_entries, & [ ] , "split" ) ;
257
+ }
258
+ }
259
+ }
0 commit comments