@@ -52,11 +52,13 @@ use commonware_storage::{
5252 translator:: TwoCap ,
5353} ;
5454use commonware_utils:: {
55+ non_empty_range,
56+ range:: NonEmptyRange ,
5557 sync:: { AsyncRwLock , Mutex } ,
5658 test_rng, NZUsize , NZU64 ,
5759} ;
5860use rand:: Rng ;
59- use std:: { collections:: BTreeMap , ops :: Range , sync:: Arc , time:: Duration } ;
61+ use std:: { collections:: BTreeMap , sync:: Arc , time:: Duration } ;
6062
6163/// The QMDB database type used by the multi-db e2e tests.
6264type Qmdb < E > = fixed:: Db < E , sha256:: Digest , sha256:: Digest , Sha256 , TwoCap > ;
@@ -76,9 +78,9 @@ pub(crate) struct Block {
7678 parent : sha256:: Digest ,
7779 height : Height ,
7880 root_a : sha256:: Digest ,
79- range_a : Range < Location > ,
81+ range_a : NonEmptyRange < Location > ,
8082 root_b : sha256:: Digest ,
81- range_b : Range < Location > ,
83+ range_b : NonEmptyRange < Location > ,
8284}
8385
8486impl Write for Block {
@@ -114,9 +116,9 @@ impl Read for Block {
114116 parent : sha256:: Digest :: read ( buf) ?,
115117 height : Height :: read ( buf) ?,
116118 root_a : sha256:: Digest :: read ( buf) ?,
117- range_a : Range :: read ( buf) ?,
119+ range_a : NonEmptyRange :: read ( buf) ?,
118120 root_b : sha256:: Digest :: read ( buf) ?,
119- range_b : Range :: read ( buf) ?,
121+ range_b : NonEmptyRange :: read ( buf) ?,
120122 } )
121123 }
122124}
@@ -160,9 +162,9 @@ impl Block {
160162 parent : sha256:: Digest :: EMPTY ,
161163 height : Height :: zero ( ) ,
162164 root_a : sha256:: Digest :: EMPTY ,
163- range_a : Location :: new ( 0 ) .. Location :: new ( 1 ) ,
165+ range_a : non_empty_range ! ( Location :: new( 0 ) , Location :: new( 1 ) ) ,
164166 root_b : sha256:: Digest :: EMPTY ,
165- range_b : Location :: new ( 0 ) .. Location :: new ( 1 ) ,
167+ range_b : non_empty_range ! ( Location :: new( 0 ) , Location :: new( 1 ) ) ,
166168 }
167169 }
168170}
@@ -243,9 +245,9 @@ impl<E: Rng + Spawner + Metrics + Clock + Storage> Application<E> for App {
243245 parent : parent. digest ( ) ,
244246 height,
245247 root_a : merkleized_a. root ( ) ,
246- range_a : merkleized_a. inactivity_floor ( ) .. merkleized_a. size ( ) ,
248+ range_a : non_empty_range ! ( merkleized_a. inactivity_floor( ) , merkleized_a. size( ) ) ,
247249 root_b : merkleized_b. root ( ) ,
248- range_b : merkleized_b. inactivity_floor ( ) .. merkleized_b. size ( ) ,
250+ range_b : non_empty_range ! ( merkleized_b. inactivity_floor( ) , merkleized_b. size( ) ) ,
249251 } ;
250252 Some ( Proposed {
251253 block,
@@ -262,9 +264,11 @@ impl<E: Rng + Spawner + Metrics + Clock + Storage> Application<E> for App {
262264 let tip = ancestry. peek ( ) ?;
263265 let ( merkleized_a, merkleized_b) = Self :: execute ( tip. height ( ) , batches) . await ;
264266 let matches_a = merkleized_a. root ( ) == tip. root_a
265- && ( merkleized_a. inactivity_floor ( ) ..merkleized_a. size ( ) ) == tip. range_a ;
267+ && non_empty_range ! ( merkleized_a. inactivity_floor( ) , merkleized_a. size( ) )
268+ == tip. range_a ;
266269 let matches_b = merkleized_b. root ( ) == tip. root_b
267- && ( merkleized_b. inactivity_floor ( ) ..merkleized_b. size ( ) ) == tip. range_b ;
270+ && non_empty_range ! ( merkleized_b. inactivity_floor( ) , merkleized_b. size( ) )
271+ == tip. range_b ;
268272 if !matches_a || !matches_b {
269273 return None ;
270274 }
0 commit comments