@@ -671,3 +671,92 @@ fn bench_map_fast(b: &mut Bencher) {
671
671
let data = black_box ( [ ( 0 , 0 ) ; LEN ] ) ;
672
672
b. iter ( || map_fast ( & data) ) ;
673
673
}
674
+
675
+ fn random_sorted_fill ( mut seed : u32 , buf : & mut [ u32 ] ) {
676
+ let mask = if buf. len ( ) < 8192 {
677
+ 0xFF
678
+ } else if buf. len ( ) < 200_000 {
679
+ 0xFFFF
680
+ } else {
681
+ 0xFFFF_FFFF
682
+ } ;
683
+
684
+ for item in buf. iter_mut ( ) {
685
+ seed ^= seed << 13 ;
686
+ seed ^= seed >> 17 ;
687
+ seed ^= seed << 5 ;
688
+
689
+ * item = seed & mask;
690
+ }
691
+
692
+ buf. sort ( ) ;
693
+ }
694
+
695
+ fn bench_vec_dedup_old ( b : & mut Bencher , sz : usize ) {
696
+ let mut template = vec ! [ 0u32 ; sz] ;
697
+ b. bytes = std:: mem:: size_of_val ( template. as_slice ( ) ) as u64 ;
698
+ random_sorted_fill ( 0x43 , & mut template) ;
699
+
700
+ let mut vec = template. clone ( ) ;
701
+ b. iter ( || {
702
+ let len = {
703
+ let ( dedup, _) = vec. partition_dedup ( ) ;
704
+ dedup. len ( )
705
+ } ;
706
+ vec. truncate ( len) ;
707
+
708
+ black_box ( vec. first ( ) ) ;
709
+ vec. clear ( ) ;
710
+ vec. extend_from_slice ( & template) ;
711
+ } ) ;
712
+ }
713
+
714
+ fn bench_vec_dedup_new ( b : & mut Bencher , sz : usize ) {
715
+ let mut template = vec ! [ 0u32 ; sz] ;
716
+ b. bytes = std:: mem:: size_of_val ( template. as_slice ( ) ) as u64 ;
717
+ random_sorted_fill ( 0x43 , & mut template) ;
718
+
719
+ let mut vec = template. clone ( ) ;
720
+ b. iter ( || {
721
+ vec. dedup ( ) ;
722
+ black_box ( vec. first ( ) ) ;
723
+ vec. clear ( ) ;
724
+ vec. extend_from_slice ( & template) ;
725
+ } ) ;
726
+ }
727
+
728
+ #[ bench]
729
+ fn bench_dedup_old_100 ( b : & mut Bencher ) {
730
+ bench_vec_dedup_old ( b, 100 ) ;
731
+ }
732
+ #[ bench]
733
+ fn bench_dedup_new_100 ( b : & mut Bencher ) {
734
+ bench_vec_dedup_new ( b, 100 ) ;
735
+ }
736
+
737
+ #[ bench]
738
+ fn bench_dedup_old_1000 ( b : & mut Bencher ) {
739
+ bench_vec_dedup_old ( b, 1000 ) ;
740
+ }
741
+ #[ bench]
742
+ fn bench_dedup_new_1000 ( b : & mut Bencher ) {
743
+ bench_vec_dedup_new ( b, 1000 ) ;
744
+ }
745
+
746
+ #[ bench]
747
+ fn bench_dedup_old_10000 ( b : & mut Bencher ) {
748
+ bench_vec_dedup_old ( b, 10000 ) ;
749
+ }
750
+ #[ bench]
751
+ fn bench_dedup_new_10000 ( b : & mut Bencher ) {
752
+ bench_vec_dedup_new ( b, 10000 ) ;
753
+ }
754
+
755
+ #[ bench]
756
+ fn bench_dedup_old_100000 ( b : & mut Bencher ) {
757
+ bench_vec_dedup_old ( b, 100000 ) ;
758
+ }
759
+ #[ bench]
760
+ fn bench_dedup_new_100000 ( b : & mut Bencher ) {
761
+ bench_vec_dedup_new ( b, 100000 ) ;
762
+ }
0 commit comments