@@ -2203,7 +2203,54 @@ mod bucketed_history {
22032203 Some ( ( cumulative_success_prob * ( 1024.0 * 1024.0 * 1024.0 ) ) as u64 )
22042204 }
22052205 }
2206+
2207+ #[ cfg( test) ]
2208+ mod tests {
2209+ use crate :: routing:: scoring:: ProbabilisticScoringFeeParameters ;
2210+
2211+ use super :: { HistoricalBucketRangeTracker , HistoricalLiquidityTracker } ;
2212+ #[ test]
2213+ fn historical_liquidity_bucket_merge ( ) {
2214+ let mut bucket1 = HistoricalBucketRangeTracker :: new ( ) ;
2215+ bucket1. track_datapoint ( 100 , 1000 ) ;
2216+ assert_eq ! ( bucket1. buckets, [ 0u16 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 32 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ] ) ;
2217+
2218+ let mut bucket2 = HistoricalBucketRangeTracker :: new ( ) ;
2219+ bucket2. track_datapoint ( 0 , 1000 ) ;
2220+ assert_eq ! ( bucket2. buckets, [ 32u16 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ] ) ;
2221+
2222+ bucket1. merge ( & bucket2) ;
2223+ assert_eq ! ( bucket1. buckets, [ 16u16 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 16 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ] ) ;
2224+ }
2225+
2226+ #[ test]
2227+ fn historical_liquidity_tracker_merge ( ) {
2228+ let params = ProbabilisticScoringFeeParameters :: default ( ) ;
2229+
2230+ let probability1: Option < u64 > ;
2231+ let mut tracker1 = HistoricalLiquidityTracker :: new ( ) ;
2232+ {
2233+ let mut directed_tracker1 = tracker1. as_directed_mut ( true ) ;
2234+ directed_tracker1. track_datapoint ( 100 , 200 , 1000 ) ;
2235+ probability1 = directed_tracker1. calculate_success_probability_times_billion ( & params, 500 , 1000 ) ;
2236+ }
2237+
2238+ let mut tracker2 = HistoricalLiquidityTracker :: new ( ) ;
2239+ {
2240+ let mut directed_tracker2 = tracker2. as_directed_mut ( true ) ;
2241+ directed_tracker2. track_datapoint ( 200 , 300 , 1000 ) ;
2242+ }
2243+
2244+ tracker1. merge ( & tracker2) ;
2245+
2246+ let directed_tracker1 = tracker1. as_directed ( true ) ;
2247+ let probability = directed_tracker1. calculate_success_probability_times_billion ( & params, 500 , 1000 ) ;
2248+
2249+ assert_ne ! ( probability1, probability) ;
2250+ }
2251+ }
22062252}
2253+
22072254use bucketed_history:: { LegacyHistoricalBucketRangeTracker , HistoricalBucketRangeTracker , DirectedHistoricalLiquidityTracker , HistoricalLiquidityTracker } ;
22082255
22092256impl < G : Deref < Target = NetworkGraph < L > > , L : Deref > Writeable for ProbabilisticScorer < G , L > where L :: Target : Logger {
@@ -2300,7 +2347,7 @@ impl Readable for ChannelLiquidity {
23002347
23012348#[ cfg( test) ]
23022349mod tests {
2303- use super :: { ChannelLiquidity , HistoricalLiquidityTracker , ProbabilisticScoringFeeParameters , ProbabilisticScoringDecayParameters , ProbabilisticScorer } ;
2350+ use super :: { ChannelLiquidity , HistoricalLiquidityTracker , ProbabilisticScorer , ProbabilisticScoringDecayParameters , ProbabilisticScoringFeeParameters } ;
23042351 use crate :: blinded_path:: BlindedHop ;
23052352 use crate :: util:: config:: UserConfig ;
23062353
@@ -3835,8 +3882,7 @@ use std::rc::Rc;
38353882 short_channel_id : 42 ,
38363883 } ) ;
38373884 let penalty = combined_scorer. channel_penalty_msat ( & candidate, usage, & params) ;
3838- assert_eq ! ( penalty, 100000021275 ) ;
3839-
3885+
38403886 let mut external_liquidity = ChannelLiquidity :: new ( Duration :: ZERO ) ;
38413887 let logger_rc = Rc :: new ( & logger) ; // Why necessary and not above for the network graph?
38423888 external_liquidity. as_directed_mut ( & source_node_id ( ) , & target_node_id ( ) , 1_000 ) .
@@ -3847,8 +3893,10 @@ use std::rc::Rc;
38473893 external_scores. insert ( 42 , external_liquidity) ;
38483894 combined_scorer. merge ( external_scores) ;
38493895
3850- let penalty = combined_scorer. channel_penalty_msat ( & candidate, usage, & params) ;
3851- assert_eq ! ( penalty, 100000021275 ) ;
3896+ let penalty_after_merge = combined_scorer. channel_penalty_msat ( & candidate, usage, & params) ;
3897+
3898+ // Since the external source observed a successful payment, the penalty should be lower after the merge.
3899+ assert ! ( penalty_after_merge < penalty) ;
38523900 }
38533901}
38543902
0 commit comments