@@ -1634,24 +1634,29 @@ mod bucketed_history {
16341634 pub ( super ) struct HistoricalLiquidityTracker {
16351635 min_liquidity_offset_history : HistoricalBucketRangeTracker ,
16361636 max_liquidity_offset_history : HistoricalBucketRangeTracker ,
1637+ total_valid_points_tracked : u64 ,
16371638 }
16381639
16391640 impl HistoricalLiquidityTracker {
16401641 pub ( super ) fn new ( ) -> HistoricalLiquidityTracker {
16411642 HistoricalLiquidityTracker {
16421643 min_liquidity_offset_history : HistoricalBucketRangeTracker :: new ( ) ,
16431644 max_liquidity_offset_history : HistoricalBucketRangeTracker :: new ( ) ,
1645+ total_valid_points_tracked : 0 ,
16441646 }
16451647 }
16461648
16471649 pub ( super ) fn from_min_max (
16481650 min_liquidity_offset_history : HistoricalBucketRangeTracker ,
16491651 max_liquidity_offset_history : HistoricalBucketRangeTracker ,
16501652 ) -> HistoricalLiquidityTracker {
1651- HistoricalLiquidityTracker {
1653+ let mut res = HistoricalLiquidityTracker {
16521654 min_liquidity_offset_history,
16531655 max_liquidity_offset_history,
1654- }
1656+ total_valid_points_tracked : 0 ,
1657+ } ;
1658+ res. recalculate_valid_point_count ( ) ;
1659+ res
16551660 }
16561661
16571662 pub ( super ) fn has_datapoints ( & self ) -> bool {
@@ -1667,6 +1672,16 @@ mod bucketed_history {
16671672 for bucket in self . max_liquidity_offset_history . buckets . iter_mut ( ) {
16681673 * bucket = ( ( * bucket as u64 ) * 1024 / divisor) as u16 ;
16691674 }
1675+ self . recalculate_valid_point_count ( ) ;
1676+ }
1677+
1678+ fn recalculate_valid_point_count ( & mut self ) {
1679+ self . total_valid_points_tracked = 0 ;
1680+ for ( min_idx, min_bucket) in self . min_liquidity_offset_history . buckets . iter ( ) . enumerate ( ) {
1681+ for max_bucket in self . max_liquidity_offset_history . buckets . iter ( ) . take ( 32 - min_idx) {
1682+ self . total_valid_points_tracked += ( * min_bucket as u64 ) * ( * max_bucket as u64 ) ;
1683+ }
1684+ }
16701685 }
16711686
16721687 pub ( super ) fn writeable_min_offset_history ( & self ) -> & HistoricalBucketRangeTracker {
@@ -1706,6 +1721,7 @@ mod bucketed_history {
17061721 self . tracker . max_liquidity_offset_history . track_datapoint ( min_offset_msat, capacity_msat) ;
17071722 self . tracker . min_liquidity_offset_history . track_datapoint ( max_offset_msat, capacity_msat) ;
17081723 }
1724+ self . tracker . recalculate_valid_point_count ( ) ;
17091725 }
17101726 }
17111727
@@ -1746,11 +1762,15 @@ mod bucketed_history {
17461762 let max_liquidity_offset_history_buckets =
17471763 self . max_liquidity_offset_history_buckets ( ) ;
17481764
1749- let mut total_valid_points_tracked = 0 ;
1750- for ( min_idx, min_bucket) in min_liquidity_offset_history_buckets. iter ( ) . enumerate ( ) {
1751- for max_bucket in max_liquidity_offset_history_buckets. iter ( ) . take ( 32 - min_idx) {
1752- total_valid_points_tracked += ( * min_bucket as u64 ) * ( * max_bucket as u64 ) ;
1765+ let total_valid_points_tracked = self . tracker . total_valid_points_tracked ;
1766+ #[ cfg( debug_assertions) ] {
1767+ let mut actual_valid_points_tracked = 0 ;
1768+ for ( min_idx, min_bucket) in min_liquidity_offset_history_buckets. iter ( ) . enumerate ( ) {
1769+ for max_bucket in max_liquidity_offset_history_buckets. iter ( ) . take ( 32 - min_idx) {
1770+ actual_valid_points_tracked += ( * min_bucket as u64 ) * ( * max_bucket as u64 ) ;
1771+ }
17531772 }
1773+ assert_eq ! ( total_valid_points_tracked, actual_valid_points_tracked) ;
17541774 }
17551775
17561776 // If the total valid points is smaller than 1.0 (i.e. 32 in our fixed-point scheme),
0 commit comments