@@ -705,3 +705,81 @@ mod tests {
705
705
assert ! ( decode( s) . is_ok( ) ) ;
706
706
}
707
707
}
708
+ #[ cfg( bench) ]
709
+ mod benches {
710
+ use test:: { black_box, Bencher } ;
711
+
712
+ use crate :: { Bech32 , Bech32m } ;
713
+
714
+ #[ bench]
715
+ fn bech32_parse_address ( bh : & mut Bencher ) {
716
+ let addr = black_box ( "bc1qar0srrr7xfkvy5l643lydnw9re59gtzzwf5mdq" ) ;
717
+
718
+ bh. iter ( || {
719
+ let tuple = crate :: decode ( & addr) . expect ( "address is well formed" ) ;
720
+ black_box ( & tuple) ;
721
+ } )
722
+ }
723
+
724
+ #[ bench]
725
+ fn bech32m_parse_address ( bh : & mut Bencher ) {
726
+ let addr = black_box ( "bc1p5d7rjq7g6rdk2yhzks9smlaqtedr4dekq08ge8ztwac72sfr9rusxg3297" ) ;
727
+
728
+ bh. iter ( || {
729
+ let tuple = crate :: decode ( & addr) . expect ( "address is well formed" ) ;
730
+ black_box ( & tuple) ;
731
+ } )
732
+ }
733
+
734
+ // Encode with allocation.
735
+ #[ bench]
736
+ fn encode_bech32_address ( bh : & mut Bencher ) {
737
+ let addr = "bc1qar0srrr7xfkvy5l643lydnw9re59gtzzwf5mdq" ;
738
+ let ( hrp, data) = crate :: decode ( & addr) . expect ( "address is well formed" ) ;
739
+
740
+ bh. iter ( || {
741
+ let s = crate :: encode :: < Bech32 > ( hrp, & data) . expect ( "failed to encode" ) ;
742
+ black_box ( & s) ;
743
+ } ) ;
744
+ }
745
+
746
+ // Encode without allocation.
747
+ #[ bench]
748
+ fn encode_to_fmt_bech32_address ( bh : & mut Bencher ) {
749
+ let addr = "bc1qar0srrr7xfkvy5l643lydnw9re59gtzzwf5mdq" ;
750
+ let ( hrp, data) = crate :: decode ( & addr) . expect ( "address is well formed" ) ;
751
+ let mut buf = String :: with_capacity ( 64 ) ;
752
+
753
+ bh. iter ( || {
754
+ let res =
755
+ crate :: encode_to_fmt :: < Bech32 , _ > ( & mut buf, hrp, & data) . expect ( "failed to encode" ) ;
756
+ black_box ( & res) ;
757
+ } ) ;
758
+ }
759
+
760
+ // Encode with allocation.
761
+ #[ bench]
762
+ fn encode_bech32m_address ( bh : & mut Bencher ) {
763
+ let addr = "bc1p5d7rjq7g6rdk2yhzks9smlaqtedr4dekq08ge8ztwac72sfr9rusxg3297" ;
764
+ let ( hrp, data) = crate :: decode ( & addr) . expect ( "address is well formed" ) ;
765
+
766
+ bh. iter ( || {
767
+ let s = crate :: encode :: < Bech32m > ( hrp, & data) . expect ( "failed to encode" ) ;
768
+ black_box ( & s) ;
769
+ } ) ;
770
+ }
771
+
772
+ // Encode without allocation.
773
+ #[ bench]
774
+ fn encode_to_fmt_bech32m_address ( bh : & mut Bencher ) {
775
+ let addr = "bc1p5d7rjq7g6rdk2yhzks9smlaqtedr4dekq08ge8ztwac72sfr9rusxg3297" ;
776
+ let ( hrp, data) = crate :: decode ( & addr) . expect ( "address is well formed" ) ;
777
+ let mut buf = String :: with_capacity ( 64 ) ;
778
+
779
+ bh. iter ( || {
780
+ let res =
781
+ crate :: encode_to_fmt :: < Bech32 , _ > ( & mut buf, hrp, & data) . expect ( "failed to encode" ) ;
782
+ black_box ( & res) ;
783
+ } ) ;
784
+ }
785
+ }
0 commit comments