@@ -191,7 +191,7 @@ impl<'a> SortedStoragesIter<'a> {
191
191
}
192
192
193
193
#[ cfg( test) ]
194
- pub mod tests {
194
+ mod tests {
195
195
use {
196
196
super :: * ,
197
197
crate :: {
@@ -201,6 +201,7 @@ pub mod tests {
201
201
} ,
202
202
std:: sync:: Arc ,
203
203
} ;
204
+
204
205
impl < ' a > SortedStorages < ' a > {
205
206
pub fn new_debug (
206
207
source : & [ ( & ' a Arc < AccountStorageEntry > , Slot ) ] ,
@@ -327,6 +328,81 @@ pub mod tests {
327
328
) ;
328
329
}
329
330
331
+ #[ test]
332
+ fn test_sorted_storages_new_with_slots ( ) {
333
+ let store = create_sample_store ( 1 ) ;
334
+ let start = 33 ;
335
+ let end = 44 ;
336
+
337
+ // ┌───────────────────────────────────────┐
338
+ // │ ■ storages ■ │
339
+ // └──────┃──────────────────────────┃─────┘
340
+ // min┣ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─┃max
341
+ // ■ ■
342
+ {
343
+ let min = start + 1 ;
344
+ let max = end - 1 ;
345
+ let storages = SortedStorages :: new_with_slots (
346
+ [ ( & store, end) , ( & store, start) ] . iter ( ) . cloned ( ) ,
347
+ Some ( min) ,
348
+ Some ( max) ,
349
+ ) ;
350
+ assert_eq ! ( storages. storages. len( ) , 2 ) ;
351
+ assert_eq ! ( storages. range, start..end + 1 ) ;
352
+ }
353
+
354
+ // ┌───────────────────────────────────────┐
355
+ // │ storages ■ │ ■
356
+ // └──────────────────────────────┃────────┘ ┃
357
+ // min┣ ─ ─ ─ ─ ─ ─ ┫max
358
+ // ■ ■
359
+ {
360
+ let min = start + 1 ;
361
+ let max = end + 1 ;
362
+ let storages = SortedStorages :: new_with_slots (
363
+ [ ( & store, end) , ( & store, start) ] . iter ( ) . cloned ( ) ,
364
+ Some ( min) ,
365
+ Some ( max) ,
366
+ ) ;
367
+ assert_eq ! ( storages. storages. len( ) , 2 ) ;
368
+ assert_eq ! ( storages. range, start..max + 1 ) ;
369
+ }
370
+
371
+ // ┌───────────────────────────────────────┐
372
+ // ■ │ ■ storages │
373
+ // ┃ └─────┃─────────────────────────────────┘
374
+ // min┣ ─ ─ ─ ─ ┫max
375
+ // ■ ■
376
+ {
377
+ let min = start - 1 ;
378
+ let max = end - 1 ;
379
+ let storages = SortedStorages :: new_with_slots (
380
+ [ ( & store, end) , ( & store, start) ] . iter ( ) . cloned ( ) ,
381
+ Some ( min) ,
382
+ Some ( max) ,
383
+ ) ;
384
+ assert_eq ! ( storages. storages. len( ) , 2 ) ;
385
+ assert_eq ! ( storages. range, min..end + 1 ) ;
386
+ }
387
+
388
+ // ┌───────────────────────────────────────┐
389
+ // ■ │ storages │ ■
390
+ // ┃ └───────────────────────────────────────┘ ┃
391
+ // min┣ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ┫max
392
+ // ■ ■
393
+ {
394
+ let min = start - 1 ;
395
+ let max = end + 1 ;
396
+ let storages = SortedStorages :: new_with_slots (
397
+ [ ( & store, end) , ( & store, start) ] . iter ( ) . cloned ( ) ,
398
+ Some ( min) ,
399
+ Some ( max) ,
400
+ ) ;
401
+ assert_eq ! ( storages. storages. len( ) , 2 ) ;
402
+ assert_eq ! ( storages. range, min..max + 1 ) ;
403
+ }
404
+ }
405
+
330
406
#[ test]
331
407
#[ should_panic( expected = "slots are not unique" ) ]
332
408
fn test_sorted_storages_duplicate_slots ( ) {
0 commit comments