@@ -2349,127 +2349,166 @@ fn test_cursor() {
2349
2349
let map = BTreeMap :: from ( [ ( 1 , 'a' ) , ( 2 , 'b' ) , ( 3 , 'c' ) ] ) ;
2350
2350
2351
2351
let mut cur = map. lower_bound ( Bound :: Unbounded ) ;
2352
- assert_eq ! ( cur. key( ) , Some ( & 1 ) ) ;
2353
- cur. move_next ( ) ;
2354
- assert_eq ! ( cur. key( ) , Some ( & 2 ) ) ;
2355
- assert_eq ! ( cur. peek_next( ) , Some ( ( & 3 , & 'c' ) ) ) ;
2356
- cur. move_prev ( ) ;
2357
- assert_eq ! ( cur. key( ) , Some ( & 1 ) ) ;
2352
+ assert_eq ! ( cur. peek_next( ) , Some ( ( & 1 , & 'a' ) ) ) ;
2358
2353
assert_eq ! ( cur. peek_prev( ) , None ) ;
2354
+ assert_eq ! ( cur. prev( ) , None ) ;
2355
+ assert_eq ! ( cur. next( ) , Some ( ( & 1 , & 'a' ) ) ) ;
2356
+
2357
+ assert_eq ! ( cur. next( ) , Some ( ( & 2 , & 'b' ) ) ) ;
2358
+
2359
+ assert_eq ! ( cur. peek_next( ) , Some ( ( & 3 , & 'c' ) ) ) ;
2360
+ assert_eq ! ( cur. prev( ) , Some ( ( & 2 , & 'b' ) ) ) ;
2361
+ assert_eq ! ( cur. peek_prev( ) , Some ( ( & 1 , & 'a' ) ) ) ;
2359
2362
2360
2363
let mut cur = map. upper_bound ( Bound :: Excluded ( & 1 ) ) ;
2361
- assert_eq ! ( cur. key( ) , None ) ;
2362
- cur. move_next ( ) ;
2363
- assert_eq ! ( cur. key( ) , Some ( & 1 ) ) ;
2364
- cur. move_prev ( ) ;
2365
- assert_eq ! ( cur. key( ) , None ) ;
2366
- assert_eq ! ( cur. peek_prev( ) , Some ( ( & 3 , & 'c' ) ) ) ;
2364
+ assert_eq ! ( cur. peek_prev( ) , None ) ;
2365
+ assert_eq ! ( cur. next( ) , Some ( ( & 1 , & 'a' ) ) ) ;
2366
+ assert_eq ! ( cur. prev( ) , Some ( ( & 1 , & 'a' ) ) ) ;
2367
2367
}
2368
2368
2369
2369
#[ test]
2370
2370
fn test_cursor_mut ( ) {
2371
2371
let mut map = BTreeMap :: from ( [ ( 1 , 'a' ) , ( 3 , 'c' ) , ( 5 , 'e' ) ] ) ;
2372
2372
let mut cur = map. lower_bound_mut ( Bound :: Excluded ( & 3 ) ) ;
2373
- assert_eq ! ( cur. key( ) , Some ( & 5 ) ) ;
2374
- cur. insert_before ( 4 , 'd' ) ;
2375
- assert_eq ! ( cur. key( ) , Some ( & 5 ) ) ;
2373
+ assert_eq ! ( cur. peek_next( ) , Some ( ( & 5 , & mut 'e' ) ) ) ;
2374
+ assert_eq ! ( cur. peek_prev( ) , Some ( ( & 3 , & mut 'c' ) ) ) ;
2375
+
2376
+ cur. insert_before ( 4 , 'd' ) . unwrap ( ) ;
2377
+ assert_eq ! ( cur. peek_next( ) , Some ( ( & 5 , & mut 'e' ) ) ) ;
2376
2378
assert_eq ! ( cur. peek_prev( ) , Some ( ( & 4 , & mut 'd' ) ) ) ;
2377
- cur. move_next ( ) ;
2378
- assert_eq ! ( cur. key( ) , None ) ;
2379
- cur. insert_before ( 6 , 'f' ) ;
2380
- assert_eq ! ( cur. key( ) , None ) ;
2381
- assert_eq ! ( cur. remove_current( ) , None ) ;
2382
- assert_eq ! ( cur. key( ) , None ) ;
2383
- cur. insert_after ( 0 , '?' ) ;
2384
- assert_eq ! ( cur. key( ) , None ) ;
2385
- assert_eq ! ( map, BTreeMap :: from( [ ( 0 , '?' ) , ( 1 , 'a' ) , ( 3 , 'c' ) , ( 4 , 'd' ) , ( 5 , 'e' ) , ( 6 , 'f' ) ] ) ) ;
2379
+
2380
+ assert_eq ! ( cur. next( ) , Some ( ( & 5 , & mut 'e' ) ) ) ;
2381
+ assert_eq ! ( cur. peek_next( ) , None ) ;
2382
+ assert_eq ! ( cur. peek_prev( ) , Some ( ( & 5 , & mut 'e' ) ) ) ;
2383
+ cur. insert_before ( 6 , 'f' ) . unwrap ( ) ;
2384
+ assert_eq ! ( cur. peek_next( ) , None ) ;
2385
+ assert_eq ! ( cur. peek_prev( ) , Some ( ( & 6 , & mut 'f' ) ) ) ;
2386
+ assert_eq ! ( cur. remove_prev( ) , Some ( ( 6 , 'f' ) ) ) ;
2387
+ assert_eq ! ( cur. remove_prev( ) , Some ( ( 5 , 'e' ) ) ) ;
2388
+ assert_eq ! ( cur. remove_next( ) , None ) ;
2389
+ assert_eq ! ( map, BTreeMap :: from( [ ( 1 , 'a' ) , ( 3 , 'c' ) , ( 4 , 'd' ) ] ) ) ;
2386
2390
2387
2391
let mut cur = map. upper_bound_mut ( Bound :: Included ( & 5 ) ) ;
2388
- assert_eq ! ( cur. key( ) , Some ( & 5 ) ) ;
2389
- assert_eq ! ( cur. remove_current( ) , Some ( ( 5 , 'e' ) ) ) ;
2390
- assert_eq ! ( cur. key( ) , Some ( & 6 ) ) ;
2391
- assert_eq ! ( cur. remove_current_and_move_back( ) , Some ( ( 6 , 'f' ) ) ) ;
2392
- assert_eq ! ( cur. key( ) , Some ( & 4 ) ) ;
2393
- assert_eq ! ( map, BTreeMap :: from( [ ( 0 , '?' ) , ( 1 , 'a' ) , ( 3 , 'c' ) , ( 4 , 'd' ) ] ) ) ;
2392
+ assert_eq ! ( cur. peek_next( ) , None ) ;
2393
+ assert_eq ! ( cur. prev( ) , Some ( ( & 4 , & mut 'd' ) ) ) ;
2394
+ assert_eq ! ( cur. peek_next( ) , Some ( ( & 4 , & mut 'd' ) ) ) ;
2395
+ assert_eq ! ( cur. peek_prev( ) , Some ( ( & 3 , & mut 'c' ) ) ) ;
2396
+ assert_eq ! ( cur. remove_next( ) , Some ( ( 4 , 'd' ) ) ) ;
2397
+ assert_eq ! ( map, BTreeMap :: from( [ ( 1 , 'a' ) , ( 3 , 'c' ) ] ) ) ;
2398
+ }
2399
+
2400
+ #[ test]
2401
+ fn test_cursor_mut_key ( ) {
2402
+ let mut map = BTreeMap :: from ( [ ( 1 , 'a' ) , ( 3 , 'c' ) , ( 5 , 'e' ) ] ) ;
2403
+ let mut cur = unsafe { map. lower_bound_mut ( Bound :: Excluded ( & 3 ) ) . with_mutable_key ( ) } ;
2404
+ assert_eq ! ( cur. peek_next( ) , Some ( ( & mut 5 , & mut 'e' ) ) ) ;
2405
+ assert_eq ! ( cur. peek_prev( ) , Some ( ( & mut 3 , & mut 'c' ) ) ) ;
2406
+
2407
+ cur. insert_before ( 4 , 'd' ) . unwrap ( ) ;
2408
+ assert_eq ! ( cur. peek_next( ) , Some ( ( & mut 5 , & mut 'e' ) ) ) ;
2409
+ assert_eq ! ( cur. peek_prev( ) , Some ( ( & mut 4 , & mut 'd' ) ) ) ;
2410
+
2411
+ assert_eq ! ( cur. next( ) , Some ( ( & mut 5 , & mut 'e' ) ) ) ;
2412
+ assert_eq ! ( cur. peek_next( ) , None ) ;
2413
+ assert_eq ! ( cur. peek_prev( ) , Some ( ( & mut 5 , & mut 'e' ) ) ) ;
2414
+ cur. insert_before ( 6 , 'f' ) . unwrap ( ) ;
2415
+ assert_eq ! ( cur. peek_next( ) , None ) ;
2416
+ assert_eq ! ( cur. peek_prev( ) , Some ( ( & mut 6 , & mut 'f' ) ) ) ;
2417
+ assert_eq ! ( cur. remove_prev( ) , Some ( ( 6 , 'f' ) ) ) ;
2418
+ assert_eq ! ( cur. remove_prev( ) , Some ( ( 5 , 'e' ) ) ) ;
2419
+ assert_eq ! ( cur. remove_next( ) , None ) ;
2420
+ assert_eq ! ( map, BTreeMap :: from( [ ( 1 , 'a' ) , ( 3 , 'c' ) , ( 4 , 'd' ) ] ) ) ;
2421
+
2422
+ let mut cur = unsafe { map. upper_bound_mut ( Bound :: Included ( & 5 ) ) . with_mutable_key ( ) } ;
2423
+ assert_eq ! ( cur. peek_next( ) , None ) ;
2424
+ assert_eq ! ( cur. prev( ) , Some ( ( & mut 4 , & mut 'd' ) ) ) ;
2425
+ assert_eq ! ( cur. peek_next( ) , Some ( ( & mut 4 , & mut 'd' ) ) ) ;
2426
+ assert_eq ! ( cur. peek_prev( ) , Some ( ( & mut 3 , & mut 'c' ) ) ) ;
2427
+ assert_eq ! ( cur. remove_next( ) , Some ( ( 4 , 'd' ) ) ) ;
2428
+ assert_eq ! ( map, BTreeMap :: from( [ ( 1 , 'a' ) , ( 3 , 'c' ) ] ) ) ;
2429
+ }
2430
+
2431
+ #[ test]
2432
+ fn test_cursor_empty ( ) {
2433
+ let mut map = BTreeMap :: new ( ) ;
2434
+ let mut cur = map. lower_bound_mut ( Bound :: Excluded ( & 3 ) ) ;
2435
+ assert_eq ! ( cur. peek_next( ) , None ) ;
2436
+ assert_eq ! ( cur. peek_prev( ) , None ) ;
2437
+ cur. insert_after ( 0 , 0 ) . unwrap ( ) ;
2438
+ assert_eq ! ( cur. peek_next( ) , Some ( ( & 0 , & mut 0 ) ) ) ;
2439
+ assert_eq ! ( cur. peek_prev( ) , None ) ;
2440
+ assert_eq ! ( map, BTreeMap :: from( [ ( 0 , 0 ) ] ) ) ;
2394
2441
}
2395
2442
2396
- #[ should_panic( expected = "key must be ordered above the previous element" ) ]
2397
2443
#[ test]
2398
2444
fn test_cursor_mut_insert_before_1 ( ) {
2399
2445
let mut map = BTreeMap :: from ( [ ( 1 , 'a' ) , ( 2 , 'b' ) , ( 3 , 'c' ) ] ) ;
2400
2446
let mut cur = map. upper_bound_mut ( Bound :: Included ( & 2 ) ) ;
2401
- cur. insert_before ( 0 , 'd' ) ;
2447
+ cur. insert_before ( 0 , 'd' ) . unwrap_err ( ) ;
2402
2448
}
2403
2449
2404
- #[ should_panic( expected = "key must be ordered above the previous element" ) ]
2405
2450
#[ test]
2406
2451
fn test_cursor_mut_insert_before_2 ( ) {
2407
2452
let mut map = BTreeMap :: from ( [ ( 1 , 'a' ) , ( 2 , 'b' ) , ( 3 , 'c' ) ] ) ;
2408
2453
let mut cur = map. upper_bound_mut ( Bound :: Included ( & 2 ) ) ;
2409
- cur. insert_before ( 1 , 'd' ) ;
2454
+ cur. insert_before ( 1 , 'd' ) . unwrap_err ( ) ;
2410
2455
}
2411
2456
2412
- #[ should_panic( expected = "key must be ordered below the current element" ) ]
2413
2457
#[ test]
2414
2458
fn test_cursor_mut_insert_before_3 ( ) {
2415
2459
let mut map = BTreeMap :: from ( [ ( 1 , 'a' ) , ( 2 , 'b' ) , ( 3 , 'c' ) ] ) ;
2416
2460
let mut cur = map. upper_bound_mut ( Bound :: Included ( & 2 ) ) ;
2417
- cur. insert_before ( 2 , 'd' ) ;
2461
+ cur. insert_before ( 2 , 'd' ) . unwrap_err ( ) ;
2418
2462
}
2419
2463
2420
- #[ should_panic( expected = "key must be ordered below the current element" ) ]
2421
2464
#[ test]
2422
2465
fn test_cursor_mut_insert_before_4 ( ) {
2423
2466
let mut map = BTreeMap :: from ( [ ( 1 , 'a' ) , ( 2 , 'b' ) , ( 3 , 'c' ) ] ) ;
2424
2467
let mut cur = map. upper_bound_mut ( Bound :: Included ( & 2 ) ) ;
2425
- cur. insert_before ( 3 , 'd' ) ;
2468
+ cur. insert_before ( 3 , 'd' ) . unwrap_err ( ) ;
2426
2469
}
2427
2470
2428
- #[ should_panic( expected = "key must be ordered above the current element" ) ]
2429
2471
#[ test]
2430
2472
fn test_cursor_mut_insert_after_1 ( ) {
2431
2473
let mut map = BTreeMap :: from ( [ ( 1 , 'a' ) , ( 2 , 'b' ) , ( 3 , 'c' ) ] ) ;
2432
2474
let mut cur = map. upper_bound_mut ( Bound :: Included ( & 2 ) ) ;
2433
- cur. insert_after ( 1 , 'd' ) ;
2475
+ cur. insert_after ( 1 , 'd' ) . unwrap_err ( ) ;
2434
2476
}
2435
2477
2436
- #[ should_panic( expected = "key must be ordered above the current element" ) ]
2437
2478
#[ test]
2438
2479
fn test_cursor_mut_insert_after_2 ( ) {
2439
2480
let mut map = BTreeMap :: from ( [ ( 1 , 'a' ) , ( 2 , 'b' ) , ( 3 , 'c' ) ] ) ;
2440
2481
let mut cur = map. upper_bound_mut ( Bound :: Included ( & 2 ) ) ;
2441
- cur. insert_after ( 2 , 'd' ) ;
2482
+ cur. insert_after ( 2 , 'd' ) . unwrap_err ( ) ;
2442
2483
}
2443
2484
2444
- #[ should_panic( expected = "key must be ordered below the next element" ) ]
2445
2485
#[ test]
2446
2486
fn test_cursor_mut_insert_after_3 ( ) {
2447
2487
let mut map = BTreeMap :: from ( [ ( 1 , 'a' ) , ( 2 , 'b' ) , ( 3 , 'c' ) ] ) ;
2448
2488
let mut cur = map. upper_bound_mut ( Bound :: Included ( & 2 ) ) ;
2449
- cur. insert_after ( 3 , 'd' ) ;
2489
+ cur. insert_after ( 3 , 'd' ) . unwrap_err ( ) ;
2450
2490
}
2451
2491
2452
- #[ should_panic( expected = "key must be ordered below the next element" ) ]
2453
2492
#[ test]
2454
2493
fn test_cursor_mut_insert_after_4 ( ) {
2455
2494
let mut map = BTreeMap :: from ( [ ( 1 , 'a' ) , ( 2 , 'b' ) , ( 3 , 'c' ) ] ) ;
2456
2495
let mut cur = map. upper_bound_mut ( Bound :: Included ( & 2 ) ) ;
2457
- cur. insert_after ( 4 , 'd' ) ;
2496
+ cur. insert_after ( 4 , 'd' ) . unwrap_err ( ) ;
2458
2497
}
2459
2498
2460
2499
#[ test]
2461
2500
fn cursor_peek_prev_agrees_with_cursor_mut ( ) {
2462
2501
let mut map = BTreeMap :: from ( [ ( 1 , 1 ) , ( 2 , 2 ) , ( 3 , 3 ) ] ) ;
2463
2502
2464
2503
let cursor = map. lower_bound ( Bound :: Excluded ( & 3 ) ) ;
2465
- assert ! ( cursor. key ( ) . is_none( ) ) ;
2504
+ assert ! ( cursor. peek_next ( ) . is_none( ) ) ;
2466
2505
2467
2506
let prev = cursor. peek_prev ( ) ;
2468
2507
assert_matches ! ( prev, Some ( ( & 3 , _) ) ) ;
2469
2508
2470
2509
// Shadow names so the two parts of this test match.
2471
2510
let mut cursor = map. lower_bound_mut ( Bound :: Excluded ( & 3 ) ) ;
2472
- assert ! ( cursor. key ( ) . is_none( ) ) ;
2511
+ assert ! ( cursor. peek_next ( ) . is_none( ) ) ;
2473
2512
2474
2513
let prev = cursor. peek_prev ( ) ;
2475
2514
assert_matches ! ( prev, Some ( ( & 3 , _) ) ) ;
0 commit comments