@@ -4963,6 +4963,8 @@ pub(crate) mod test_utils {
49634963#[ cfg( all( test, feature = "unstable" , not( feature = "no-std" ) ) ) ]
49644964mod benches {
49654965 use super :: * ;
4966+ use bitcoin:: secp256k1:: PublicKey ;
4967+ use ln:: features:: InvoiceFeatures ;
49664968 use routing:: scoring:: Scorer ;
49674969 use util:: logger:: { Logger , Record } ;
49684970
@@ -4973,47 +4975,29 @@ mod benches {
49734975 fn log ( & self , _record : & Record ) { }
49744976 }
49754977
4976- #[ bench]
4977- fn generate_routes ( bench : & mut Bencher ) {
4978+ fn read_network_graph ( ) -> NetworkGraph {
49784979 let mut d = test_utils:: get_route_file ( ) . unwrap ( ) ;
4979- let graph = NetworkGraph :: read ( & mut d) . unwrap ( ) ;
4980- let nodes = graph. read_only ( ) . nodes ( ) . clone ( ) ;
4981- let scorer = Scorer :: with_fixed_penalty ( 0 ) ;
4982-
4983- // First, get 100 (source, destination) pairs for which route-getting actually succeeds...
4984- let mut path_endpoints = Vec :: new ( ) ;
4985- let mut seed: usize = 0xdeadbeef ;
4986- ' load_endpoints: for _ in 0 ..100 {
4987- loop {
4988- seed *= 0xdeadbeef ;
4989- let src = PublicKey :: from_slice ( nodes. keys ( ) . skip ( seed % nodes. len ( ) ) . next ( ) . unwrap ( ) . as_slice ( ) ) . unwrap ( ) ;
4990- seed *= 0xdeadbeef ;
4991- let dst = PublicKey :: from_slice ( nodes. keys ( ) . skip ( seed % nodes. len ( ) ) . next ( ) . unwrap ( ) . as_slice ( ) ) . unwrap ( ) ;
4992- let payment_params = PaymentParameters :: from_node_id ( dst) ;
4993- let amt = seed as u64 % 1_000_000 ;
4994- if get_route ( & src, & payment_params, & graph, None , amt, 42 , & DummyLogger { } , & scorer) . is_ok ( ) {
4995- path_endpoints. push ( ( src, dst, amt) ) ;
4996- continue ' load_endpoints;
4997- }
4998- }
4999- }
4980+ NetworkGraph :: read ( & mut d) . unwrap ( )
4981+ }
50004982
5001- // ...then benchmark finding paths between the nodes we learned.
5002- let mut idx = 0 ;
5003- bench. iter ( || {
5004- let ( src, dst, amt) = path_endpoints[ idx % path_endpoints. len ( ) ] ;
5005- let payment_params = PaymentParameters :: from_node_id ( dst) ;
5006- assert ! ( get_route( & src, & payment_params, & graph, None , amt, 42 , & DummyLogger { } , & scorer) . is_ok( ) ) ;
5007- idx += 1 ;
5008- } ) ;
4983+ #[ bench]
4984+ fn generate_routes_with_default_scorer ( bench : & mut Bencher ) {
4985+ let network_graph = read_network_graph ( ) ;
4986+ let scorer = Scorer :: default ( ) ;
4987+ generate_routes ( bench, & network_graph, scorer, InvoiceFeatures :: empty ( ) ) ;
50094988 }
50104989
50114990 #[ bench]
5012- fn generate_mpp_routes ( bench : & mut Bencher ) {
5013- let mut d = test_utils:: get_route_file ( ) . unwrap ( ) ;
5014- let graph = NetworkGraph :: read ( & mut d) . unwrap ( ) ;
4991+ fn generate_mpp_routes_with_default_scorer ( bench : & mut Bencher ) {
4992+ let network_graph = read_network_graph ( ) ;
4993+ let scorer = Scorer :: default ( ) ;
4994+ generate_routes ( bench, & network_graph, scorer, InvoiceFeatures :: known ( ) ) ;
4995+ }
4996+
4997+ fn generate_routes < S : Score > (
4998+ bench : & mut Bencher , graph : & NetworkGraph , scorer : S , features : InvoiceFeatures
4999+ ) {
50155000 let nodes = graph. read_only ( ) . nodes ( ) . clone ( ) ;
5016- let scorer = Scorer :: with_fixed_penalty ( 0 ) ;
50175001
50185002 // First, get 100 (source, destination) pairs for which route-getting actually succeeds...
50195003 let mut path_endpoints = Vec :: new ( ) ;
@@ -5024,9 +5008,9 @@ mod benches {
50245008 let src = PublicKey :: from_slice ( nodes. keys ( ) . skip ( seed % nodes. len ( ) ) . next ( ) . unwrap ( ) . as_slice ( ) ) . unwrap ( ) ;
50255009 seed *= 0xdeadbeef ;
50265010 let dst = PublicKey :: from_slice ( nodes. keys ( ) . skip ( seed % nodes. len ( ) ) . next ( ) . unwrap ( ) . as_slice ( ) ) . unwrap ( ) ;
5027- let payment_params = PaymentParameters :: from_node_id ( dst) . with_features ( InvoiceFeatures :: known ( ) ) ;
5011+ let params = PaymentParameters :: from_node_id ( dst) . with_features ( features . clone ( ) ) ;
50285012 let amt = seed as u64 % 1_000_000 ;
5029- if get_route ( & src, & payment_params , & graph, None , amt, 42 , & DummyLogger { } , & scorer) . is_ok ( ) {
5013+ if get_route ( & src, & params , & graph, None , amt, 42 , & DummyLogger { } , & scorer) . is_ok ( ) {
50305014 path_endpoints. push ( ( src, dst, amt) ) ;
50315015 continue ' load_endpoints;
50325016 }
@@ -5037,8 +5021,8 @@ mod benches {
50375021 let mut idx = 0 ;
50385022 bench. iter ( || {
50395023 let ( src, dst, amt) = path_endpoints[ idx % path_endpoints. len ( ) ] ;
5040- let payment_params = PaymentParameters :: from_node_id ( dst) . with_features ( InvoiceFeatures :: known ( ) ) ;
5041- assert ! ( get_route( & src, & payment_params , & graph, None , amt, 42 , & DummyLogger { } , & scorer) . is_ok( ) ) ;
5024+ let params = PaymentParameters :: from_node_id ( dst) . with_features ( features . clone ( ) ) ;
5025+ assert ! ( get_route( & src, & params , & graph, None , amt, 42 , & DummyLogger { } , & scorer) . is_ok( ) ) ;
50425026 idx += 1 ;
50435027 } ) ;
50445028 }
0 commit comments