@@ -593,6 +593,226 @@ fn iter_default() {
593
593
assert_default :: < IntoValues < K , V > > ( ) ;
594
594
}
595
595
596
+ #[ test]
597
+ fn get_index_mut2 ( ) {
598
+ let mut map: IndexMap < i32 , i32 > = IndexMap :: new ( ) ;
599
+ map. insert ( 1 , 2 ) ;
600
+ map. insert ( 3 , 4 ) ;
601
+ map. insert ( 5 , 6 ) ;
602
+
603
+ {
604
+ let ( key, value) = map. get_index_mut2 ( 0 ) . unwrap ( ) ;
605
+ assert_eq ! ( * key, 1 ) ;
606
+ assert_eq ! ( * value, 2 ) ;
607
+
608
+ * value = 7 ;
609
+ }
610
+ assert_eq ! ( map[ 0 ] , 7 ) ;
611
+
612
+ {
613
+ let ( key, _) = map. get_index_mut2 ( 0 ) . unwrap ( ) ;
614
+ * key = 8 ;
615
+ }
616
+ assert_eq ! ( map. get_index( 0 ) . unwrap( ) . 0 , & 8 ) ;
617
+ }
618
+
619
+ #[ test]
620
+ fn shift_shift_remove_index ( ) {
621
+ let mut map: IndexMap < i32 , i32 > = IndexMap :: new ( ) ;
622
+ map. insert ( 1 , 2 ) ;
623
+ map. insert ( 3 , 4 ) ;
624
+ map. insert ( 5 , 6 ) ;
625
+ map. insert ( 7 , 8 ) ;
626
+ map. insert ( 9 , 10 ) ;
627
+
628
+ let result = map. shift_remove_index ( 1 ) ;
629
+ assert_eq ! ( result, Some ( ( 3 , 4 ) ) ) ;
630
+ assert_eq ! ( map. len( ) , 4 ) ;
631
+ assert_eq ! ( map. as_slice( ) , & [ ( 1 , 2 ) , ( 5 , 6 ) , ( 7 , 8 ) , ( 9 , 10 ) ] ) ;
632
+
633
+ let result = map. shift_remove_index ( 1 ) ;
634
+ assert_eq ! ( result, Some ( ( 5 , 6 ) ) ) ;
635
+ assert_eq ! ( map. len( ) , 3 ) ;
636
+ assert_eq ! ( map. as_slice( ) , & [ ( 1 , 2 ) , ( 7 , 8 ) , ( 9 , 10 ) ] ) ;
637
+
638
+ let result = map. shift_remove_index ( 2 ) ;
639
+ assert_eq ! ( result, Some ( ( 9 , 10 ) ) ) ;
640
+ assert_eq ! ( map. len( ) , 2 ) ;
641
+ assert_eq ! ( map. as_slice( ) , & [ ( 1 , 2 ) , ( 7 , 8 ) ] ) ;
642
+
643
+ let result = map. shift_remove_index ( 2 ) ;
644
+ assert_eq ! ( result, None ) ;
645
+ assert_eq ! ( map. len( ) , 2 ) ;
646
+ assert_eq ! ( map. as_slice( ) , & [ ( 1 , 2 ) , ( 7 , 8 ) ] ) ;
647
+ }
648
+
649
+ #[ test]
650
+ fn shift_remove_entry ( ) {
651
+ let mut map: IndexMap < i32 , i32 > = IndexMap :: new ( ) ;
652
+ map. insert ( 1 , 2 ) ;
653
+ map. insert ( 3 , 4 ) ;
654
+ map. insert ( 5 , 6 ) ;
655
+ map. insert ( 7 , 8 ) ;
656
+ map. insert ( 9 , 10 ) ;
657
+
658
+ let result = map. shift_remove_entry ( & 3 ) ;
659
+ assert_eq ! ( result, Some ( ( 3 , 4 ) ) ) ;
660
+ assert_eq ! ( map. len( ) , 4 ) ;
661
+ assert_eq ! ( map. as_slice( ) , & [ ( 1 , 2 ) , ( 5 , 6 ) , ( 7 , 8 ) , ( 9 , 10 ) ] ) ;
662
+
663
+ let result = map. shift_remove_entry ( & 9 ) ;
664
+ assert_eq ! ( result, Some ( ( 9 , 10 ) ) ) ;
665
+ assert_eq ! ( map. len( ) , 3 ) ;
666
+ assert_eq ! ( map. as_slice( ) , & [ ( 1 , 2 ) , ( 5 , 6 ) , ( 7 , 8 ) ] ) ;
667
+
668
+ let result = map. shift_remove_entry ( & 9 ) ;
669
+ assert_eq ! ( result, None ) ;
670
+ assert_eq ! ( map. len( ) , 3 ) ;
671
+ assert_eq ! ( map. as_slice( ) , & [ ( 1 , 2 ) , ( 5 , 6 ) , ( 7 , 8 ) ] ) ;
672
+ }
673
+
674
+ #[ test]
675
+ fn shift_remove_full ( ) {
676
+ let mut map: IndexMap < i32 , i32 > = IndexMap :: new ( ) ;
677
+ map. insert ( 1 , 2 ) ;
678
+ map. insert ( 3 , 4 ) ;
679
+ map. insert ( 5 , 6 ) ;
680
+ map. insert ( 7 , 8 ) ;
681
+ map. insert ( 9 , 10 ) ;
682
+
683
+ let result = map. shift_remove_full ( & 3 ) ;
684
+ assert_eq ! ( result, Some ( ( 1 , 3 , 4 ) ) ) ;
685
+ assert_eq ! ( map. len( ) , 4 ) ;
686
+ assert_eq ! ( map. as_slice( ) , & [ ( 1 , 2 ) , ( 5 , 6 ) , ( 7 , 8 ) , ( 9 , 10 ) ] ) ;
687
+
688
+ let result = map. shift_remove_full ( & 9 ) ;
689
+ assert_eq ! ( result, Some ( ( 3 , 9 , 10 ) ) ) ;
690
+ assert_eq ! ( map. len( ) , 3 ) ;
691
+ assert_eq ! ( map. as_slice( ) , & [ ( 1 , 2 ) , ( 5 , 6 ) , ( 7 , 8 ) ] ) ;
692
+
693
+ let result = map. shift_remove_full ( & 9 ) ;
694
+ assert_eq ! ( result, None ) ;
695
+ assert_eq ! ( map. len( ) , 3 ) ;
696
+ assert_eq ! ( map. as_slice( ) , & [ ( 1 , 2 ) , ( 5 , 6 ) , ( 7 , 8 ) ] ) ;
697
+ }
698
+
699
+ #[ test]
700
+ fn sorted_unstable_by ( ) {
701
+ let mut map: IndexMap < i32 , i32 > = IndexMap :: new ( ) ;
702
+ map. extend ( vec ! [ ( 1 , 10 ) , ( 2 , 20 ) , ( 3 , 30 ) , ( 4 , 40 ) , ( 5 , 50 ) ] ) ;
703
+ let sorted = map. sorted_unstable_by ( |_a, b, _c, d| d. cmp ( & b) ) ;
704
+
705
+ assert_eq ! (
706
+ sorted. as_slice( ) ,
707
+ & [ ( 5 , 50 ) , ( 4 , 40 ) , ( 3 , 30 ) , ( 2 , 20 ) , ( 1 , 10 ) ]
708
+ ) ;
709
+ }
710
+
711
+ #[ test]
712
+ fn into_boxed_slice ( ) {
713
+ let mut map: IndexMap < i32 , i32 > = IndexMap :: new ( ) ;
714
+ for i in 0 ..5 {
715
+ map. insert ( i, i * 10 ) ;
716
+ }
717
+ let boxed_slice: Box < Slice < i32 , i32 > > = map. into_boxed_slice ( ) ;
718
+ assert_eq ! ( boxed_slice. len( ) , 5 ) ;
719
+ assert_eq ! (
720
+ boxed_slice. as_ref( ) ,
721
+ & [ ( 0 , 0 ) , ( 1 , 10 ) , ( 2 , 20 ) , ( 3 , 30 ) , ( 4 , 40 ) ]
722
+ ) ;
723
+ }
724
+
725
+ #[ test]
726
+ fn last_mut ( ) {
727
+ let mut map: IndexMap < & str , i32 > = IndexMap :: new ( ) ;
728
+
729
+ let last_entry = map. last_mut ( ) ;
730
+ assert_eq ! ( last_entry, None ) ;
731
+
732
+ map. insert ( "key1" , 1 ) ;
733
+ map. insert ( "key2" , 2 ) ;
734
+ map. insert ( "key3" , 3 ) ;
735
+ let last_entry = map. last_mut ( ) ;
736
+ assert_eq ! ( last_entry, Some ( ( & "key3" , & mut 3 ) ) ) ;
737
+
738
+ * last_entry. unwrap ( ) . 1 = 4 ;
739
+ assert_eq ! ( map. get( "key3" ) , Some ( & 4 ) ) ;
740
+ }
741
+
742
+ #[ test]
743
+ #[ should_panic = "index out of bounds" ]
744
+ fn insert_before_oob ( ) {
745
+ let mut map: IndexMap < char , ( ) > = IndexMap :: new ( ) ;
746
+ let _ = map. insert_before ( 0 , 'a' , ( ) ) ;
747
+ let _ = map. insert_before ( 1 , 'b' , ( ) ) ;
748
+ map. insert_before ( 3 , 'd' , ( ) ) ;
749
+ }
750
+
751
+ #[ test]
752
+ fn clear ( ) {
753
+ let mut map: IndexMap < i32 , i32 > = IndexMap :: new ( ) ;
754
+ map. extend ( vec ! [ ( 1 , 10 ) , ( 2 , 20 ) , ( 3 , 30 ) , ( 4 , 40 ) , ( 5 , 50 ) ] ) ;
755
+ map. clear ( ) ;
756
+ assert_eq ! ( map. len( ) , 0 ) ;
757
+ }
758
+
759
+ #[ test]
760
+ fn get_range ( ) {
761
+ let mut index_map: IndexMap < i32 , i32 > = IndexMap :: new ( ) ;
762
+ index_map. insert ( 1 , 10 ) ;
763
+ index_map. insert ( 2 , 20 ) ;
764
+ index_map. insert ( 3 , 30 ) ;
765
+ index_map. insert ( 4 , 40 ) ;
766
+ index_map. insert ( 5 , 50 ) ;
767
+
768
+ let result = index_map. get_range ( 2 ..2 ) ;
769
+ assert ! ( result. unwrap( ) . is_empty( ) ) ;
770
+
771
+ let result = index_map. get_range ( 4 ..2 ) ;
772
+ assert ! ( result. is_none( ) ) ;
773
+
774
+ let result = index_map. get_range ( 2 ..4 ) ;
775
+ let slice: & Slice < i32 , i32 > = result. unwrap ( ) ;
776
+ assert_eq ! ( slice. len( ) , 2 ) ;
777
+ assert_eq ! ( slice, & [ ( 3 , 30 ) , ( 4 , 40 ) ] ) ;
778
+ }
779
+
780
+ #[ test]
781
+ fn get_range_mut ( ) {
782
+ let mut index_map: IndexMap < i32 , i32 > = IndexMap :: new ( ) ;
783
+ index_map. insert ( 1 , 10 ) ;
784
+ index_map. insert ( 2 , 20 ) ;
785
+ index_map. insert ( 3 , 30 ) ;
786
+ index_map. insert ( 4 , 40 ) ;
787
+ index_map. insert ( 5 , 50 ) ;
788
+
789
+ let result = index_map. get_range_mut ( 2 ..2 ) ;
790
+ assert ! ( result. unwrap( ) . is_empty( ) ) ;
791
+
792
+ let result = index_map. get_range_mut ( 4 ..2 ) ;
793
+ assert ! ( result. is_none( ) ) ;
794
+
795
+ let result = index_map. get_range_mut ( 2 ..4 ) ;
796
+ let slice: & mut Slice < i32 , i32 > = result. unwrap ( ) ;
797
+ assert_eq ! ( slice. len( ) , 2 ) ;
798
+ assert_eq ! ( slice, & mut [ ( 3 , 30 ) , ( 4 , 40 ) ] ) ;
799
+
800
+ for i in 0 ..slice. len ( ) {
801
+ slice[ i] += 1 ;
802
+ }
803
+ assert_eq ! ( slice, & mut [ ( 3 , 31 ) , ( 4 , 41 ) ] ) ;
804
+ }
805
+
806
+ #[ test]
807
+ #[ should_panic = "index out of bounds" ]
808
+ fn shift_insert_oob ( ) {
809
+ let mut map: IndexMap < u32 , u32 > = IndexMap :: new ( ) ;
810
+ map. shift_insert ( 0 , 1 , 10 ) ;
811
+ map. shift_insert ( 1 , 2 , 20 ) ;
812
+ map. shift_insert ( 2 , 3 , 30 ) ;
813
+ map. shift_insert ( 5 , 4 , 40 ) ;
814
+ }
815
+
596
816
#[ test]
597
817
fn test_binary_search_by ( ) {
598
818
// adapted from std's test for binary_search
0 commit comments