Skip to content

Commit 28c68f3

Browse files
committed
Use a RangeInclusive for BlockRange::all_block_ranges_in
Since all callers will now ask for an inclusive range instead of an exclusive one like before. This allow the TransactionImporter to be called with a block number that's the strict end of a block range (ie: 44 for block range 30..45) without the need to do a `+ 1` when calling `BlockRange::all_block_ranges_in`.
1 parent 1c84c95 commit 28c68f3

File tree

3 files changed

+41
-40
lines changed

3 files changed

+41
-40
lines changed

mithril-aggregator/src/services/cardano_transactions_importer.rs

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -135,9 +135,8 @@ impl CardanoTransactionsImporter {
135135
.get_block_interval_without_block_range_root()
136136
.await?
137137
// .map(|range| BlockRange::all_block_ranges_in(BlockRange::start(range.start)..range.end))
138-
.map(|range| {
139-
BlockRange::all_block_ranges_in(BlockRange::start(range.start)..(until + 1))
140-
}) {
138+
.map(|range| BlockRange::all_block_ranges_in(BlockRange::start(range.start)..=(until)))
139+
{
141140
// Everything is already computed
142141
None => return Ok(()),
143142
// Not enough block to form at least one block range
@@ -657,7 +656,7 @@ mod tests {
657656
// Upper bound should be the block number of the highest transaction in a db that can be
658657
// included in a block range
659658
.withf(|range| {
660-
BlockRangesSequence::new(BlockRange::LENGTH..(BlockRange::LENGTH * 5))
659+
BlockRangesSequence::new(BlockRange::LENGTH..=(BlockRange::LENGTH * 5))
661660
.contains(range)
662661
})
663662
.returning(transactions_for_block);

mithril-common/benches/block_range.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ fn all_block_ranges_in(c: &mut Criterion) {
1414
BenchmarkId::from_parameter(format!("0..{end_bound}")),
1515
&end_bound,
1616
|b, &end_bound| {
17-
b.iter(|| BlockRange::all_block_ranges_in(0..end_bound));
17+
b.iter(|| BlockRange::all_block_ranges_in(0..=end_bound));
1818
},
1919
);
2020
}

mithril-common/src/entities/block_range.rs

Lines changed: 37 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
1-
use anyhow::anyhow;
2-
use serde::{Deserialize, Serialize};
31
use std::{
42
cmp::Ordering,
53
fmt::{Display, Formatter, Result},
6-
ops::{Deref, Range},
4+
ops::{Deref, Range, RangeInclusive},
75
};
86

7+
use anyhow::anyhow;
8+
use serde::{Deserialize, Serialize};
9+
910
use crate::{
1011
crypto_helper::{MKMapKey, MKTreeNode},
1112
entities::BlockNumber,
@@ -59,7 +60,7 @@ impl BlockRange {
5960
}
6061

6162
/// Get all [BlockRange] strictly contained in the given interval
62-
pub fn all_block_ranges_in(interval: Range<BlockNumber>) -> BlockRangesSequence {
63+
pub fn all_block_ranges_in(interval: RangeInclusive<BlockNumber>) -> BlockRangesSequence {
6364
BlockRangesSequence::new(interval)
6465
}
6566

@@ -158,13 +159,14 @@ impl BlockRangesSequence {
158159
/// Build the [BlockRangesSequence] strictly contained in the given interval.
159160
///
160161
/// The interval bounds will be corrected to be multiples of [BlockRange::LENGTH].
161-
pub fn new(interval: Range<BlockNumber>) -> Self {
162-
let start = if (interval.start % BlockRange::LENGTH) == 0 {
163-
interval.start
162+
pub fn new(interval: RangeInclusive<BlockNumber>) -> Self {
163+
let start = if (interval.start() % BlockRange::LENGTH) == 0 {
164+
*interval.start()
164165
} else {
165-
BlockRange::start(interval.start) + BlockRange::LENGTH
166+
BlockRange::start(*interval.start()) + BlockRange::LENGTH
166167
};
167-
let end = BlockRange::start(interval.end);
168+
// End is inclusive, so we need to add 1
169+
let end = BlockRange::start(*interval.end() + 1);
168170

169171
Self { start, end }
170172
}
@@ -284,28 +286,28 @@ mod tests {
284286

285287
#[test]
286288
fn test_block_range_all_block_ranges_in() {
287-
assert_eq!(BlockRange::all_block_ranges_in(0..0).into_vec(), vec![]);
288-
assert_eq!(BlockRange::all_block_ranges_in(0..1).into_vec(), vec![]);
289-
assert_eq!(BlockRange::all_block_ranges_in(0..14).into_vec(), vec![]);
290-
assert_eq!(BlockRange::all_block_ranges_in(1..15).into_vec(), vec![]);
289+
assert_eq!(BlockRange::all_block_ranges_in(0..=0).into_vec(), vec![]);
290+
assert_eq!(BlockRange::all_block_ranges_in(0..=1).into_vec(), vec![]);
291+
assert_eq!(BlockRange::all_block_ranges_in(0..=13).into_vec(), vec![]);
292+
assert_eq!(BlockRange::all_block_ranges_in(1..=14).into_vec(), vec![]);
291293
assert_eq!(
292-
BlockRange::all_block_ranges_in(0..15).into_vec(),
294+
BlockRange::all_block_ranges_in(0..=14).into_vec(),
293295
vec![BlockRange::new(0, 15)]
294296
);
295297
assert_eq!(
296-
BlockRange::all_block_ranges_in(0..16).into_vec(),
298+
BlockRange::all_block_ranges_in(0..=15).into_vec(),
297299
vec![BlockRange::new(0, 15)]
298300
);
299301
assert_eq!(
300-
BlockRange::all_block_ranges_in(14..30).into_vec(),
302+
BlockRange::all_block_ranges_in(14..=29).into_vec(),
301303
vec![BlockRange::new(15, 30)]
302304
);
303305
assert_eq!(
304-
BlockRange::all_block_ranges_in(14..31).into_vec(),
306+
BlockRange::all_block_ranges_in(14..=30).into_vec(),
305307
vec![BlockRange::new(15, 30)]
306308
);
307309
assert_eq!(
308-
BlockRange::all_block_ranges_in(14..61).into_vec(),
310+
BlockRange::all_block_ranges_in(14..=60).into_vec(),
309311
vec![
310312
BlockRange::new(15, 30),
311313
BlockRange::new(30, 45),
@@ -316,45 +318,45 @@ mod tests {
316318

317319
#[test]
318320
fn test_block_ranges_sequence_is_empty() {
319-
assert!(BlockRange::all_block_ranges_in(0..0).is_empty());
320-
assert!(BlockRange::all_block_ranges_in(0..1).is_empty());
321-
assert!(BlockRange::all_block_ranges_in(0..14).is_empty());
322-
assert!(BlockRange::all_block_ranges_in(1..15).is_empty());
323-
assert!(BlockRange::all_block_ranges_in(0..15).is_empty().not());
324-
assert!(BlockRange::all_block_ranges_in(0..16).is_empty().not());
325-
assert!(BlockRange::all_block_ranges_in(14..30).is_empty().not());
326-
assert!(BlockRange::all_block_ranges_in(14..31).is_empty().not());
327-
assert!(BlockRange::all_block_ranges_in(14..61).is_empty().not());
321+
assert!(BlockRange::all_block_ranges_in(0..=0).is_empty());
322+
assert!(BlockRange::all_block_ranges_in(0..=1).is_empty());
323+
assert!(BlockRange::all_block_ranges_in(0..=13).is_empty());
324+
assert!(BlockRange::all_block_ranges_in(1..=14).is_empty());
325+
assert!(BlockRange::all_block_ranges_in(0..=14).is_empty().not());
326+
assert!(BlockRange::all_block_ranges_in(0..=15).is_empty().not());
327+
assert!(BlockRange::all_block_ranges_in(14..=29).is_empty().not());
328+
assert!(BlockRange::all_block_ranges_in(14..=30).is_empty().not());
329+
assert!(BlockRange::all_block_ranges_in(14..=60).is_empty().not());
328330
}
329331

330332
#[test]
331333
fn test_block_ranges_sequence_len() {
332334
assert_eq!(
333-
BlockRange::all_block_ranges_in(0..(BlockRange::LENGTH - 1)).len(),
335+
BlockRange::all_block_ranges_in(0..=(BlockRange::LENGTH - 2)).len(),
334336
0
335337
);
336338
assert_eq!(
337-
BlockRange::all_block_ranges_in(0..(BlockRange::LENGTH)).len(),
339+
BlockRange::all_block_ranges_in(0..=(BlockRange::LENGTH - 1)).len(),
338340
1
339341
);
340342
assert_eq!(
341-
BlockRange::all_block_ranges_in(0..(BlockRange::LENGTH * 15)).len(),
343+
BlockRange::all_block_ranges_in(0..=(BlockRange::LENGTH * 15)).len(),
342344
15
343345
);
344346
}
345347

346348
#[test]
347349
fn test_block_ranges_sequence_contains() {
348350
let block_range = BlockRange::new(15, 30);
349-
assert!(BlockRange::all_block_ranges_in(0..15)
351+
assert!(BlockRange::all_block_ranges_in(0..=14)
350352
.contains(&block_range)
351353
.not());
352-
assert!(BlockRange::all_block_ranges_in(30..60)
354+
assert!(BlockRange::all_block_ranges_in(30..=59)
353355
.contains(&block_range)
354356
.not());
355-
assert!(BlockRange::all_block_ranges_in(0..30).contains(&block_range));
356-
assert!(BlockRange::all_block_ranges_in(15..30).contains(&block_range));
357-
assert!(BlockRange::all_block_ranges_in(15..45).contains(&block_range));
357+
assert!(BlockRange::all_block_ranges_in(0..=29).contains(&block_range));
358+
assert!(BlockRange::all_block_ranges_in(15..=29).contains(&block_range));
359+
assert!(BlockRange::all_block_ranges_in(15..=44).contains(&block_range));
358360
}
359361

360362
#[test]

0 commit comments

Comments
 (0)