@@ -3750,3 +3750,61 @@ mod tests {
3750
3750
Some ( 0.0 ) ) ;
3751
3751
}
3752
3752
}
3753
+
3754
+ #[ cfg( ldk_bench) ]
3755
+ pub mod benches {
3756
+ use super :: * ;
3757
+ use criterion:: Criterion ;
3758
+ use crate :: routing:: router:: { bench_utils, RouteHop } ;
3759
+ use crate :: util:: test_utils:: TestLogger ;
3760
+ use crate :: ln:: features:: { ChannelFeatures , NodeFeatures } ;
3761
+
3762
+ pub fn decay_100k_channel_bounds ( bench : & mut Criterion ) {
3763
+ let logger = TestLogger :: new ( ) ;
3764
+ let network_graph = bench_utils:: read_network_graph ( & logger) . unwrap ( ) ;
3765
+ let mut scorer = ProbabilisticScorer :: new ( Default :: default ( ) , & network_graph, & logger) ;
3766
+ // Score a number of random channels
3767
+ let mut seed: u64 = 0xdeadbeef ;
3768
+ for _ in 0 ..100_000 {
3769
+ seed = seed. overflowing_mul ( 6364136223846793005 ) . 0 . overflowing_add ( 1 ) . 0 ;
3770
+ let ( victim, victim_dst, amt) = {
3771
+ let rong = network_graph. read_only ( ) ;
3772
+ let channels = rong. channels ( ) ;
3773
+ let chan = channels. unordered_iter ( )
3774
+ . skip ( ( seed as usize ) % channels. len ( ) )
3775
+ . next ( ) . unwrap ( ) ;
3776
+ seed = seed. overflowing_mul ( 6364136223846793005 ) . 0 . overflowing_add ( 1 ) . 0 ;
3777
+ let amt = seed % chan. 1 . capacity_sats . map ( |c| c * 1000 )
3778
+ . or ( chan. 1 . one_to_two . as_ref ( ) . map ( |info| info. htlc_maximum_msat ) )
3779
+ . or ( chan. 1 . two_to_one . as_ref ( ) . map ( |info| info. htlc_maximum_msat ) )
3780
+ . unwrap_or ( 1_000_000_000 ) . saturating_add ( 1 ) ;
3781
+ ( * chan. 0 , chan. 1 . node_two , amt)
3782
+ } ;
3783
+ let path = Path {
3784
+ hops : vec ! [ RouteHop {
3785
+ pubkey: victim_dst. as_pubkey( ) . unwrap( ) ,
3786
+ node_features: NodeFeatures :: empty( ) ,
3787
+ short_channel_id: victim,
3788
+ channel_features: ChannelFeatures :: empty( ) ,
3789
+ fee_msat: amt,
3790
+ cltv_expiry_delta: 42 ,
3791
+ maybe_announced_channel: true ,
3792
+ } ] ,
3793
+ blinded_tail : None
3794
+ } ;
3795
+ seed = seed. overflowing_mul ( 6364136223846793005 ) . 0 . overflowing_add ( 1 ) . 0 ;
3796
+ if seed % 1 == 0 {
3797
+ scorer. probe_failed ( & path, victim, Duration :: ZERO ) ;
3798
+ } else {
3799
+ scorer. probe_successful ( & path, Duration :: ZERO ) ;
3800
+ }
3801
+ }
3802
+ let mut cur_time = Duration :: ZERO ;
3803
+ cur_time += Duration :: from_millis ( 1 ) ;
3804
+ scorer. decay_liquidity_certainty ( cur_time) ;
3805
+ bench. bench_function ( "decay_100k_channel_bounds" , |b| b. iter ( || {
3806
+ cur_time += Duration :: from_millis ( 1 ) ;
3807
+ scorer. decay_liquidity_certainty ( cur_time) ;
3808
+ } ) ) ;
3809
+ }
3810
+ }
0 commit comments