1+ //! Test helpers: deterministic fee sequence generator and SQLite fixture builder.
2+
3+ use rand:: { Rng , SeedableRng } ;
4+ use rand:: rngs:: SmallRng ;
5+
6+ /// Generates a deterministic fee sequence from a seed for repeatable tests.
7+ pub struct FeeGenerator {
8+ rng : SmallRng ,
9+ }
10+
11+ impl FeeGenerator {
12+ /// Create a generator with the given seed.
13+ pub fn new ( seed : u64 ) -> Self {
14+ Self { rng : SmallRng :: seed_from_u64 ( seed) }
15+ }
16+
17+ /// Generate `n` fee values in the range [min_fee, max_fee].
18+ pub fn generate ( & mut self , n : usize , min_fee : u64 , max_fee : u64 ) -> Vec < u64 > {
19+ ( 0 ..n) . map ( |_| self . rng . gen_range ( min_fee..=max_fee) ) . collect ( )
20+ }
21+
22+ /// Generate a flat sequence of `n` identical fees (useful for baseline tests).
23+ pub fn flat ( fee : u64 , n : usize ) -> Vec < u64 > {
24+ vec ! [ fee; n]
25+ }
26+ }
27+
28+ #[ cfg( test) ]
29+ mod tests {
30+ use super :: * ;
31+
32+ #[ test]
33+ fn same_seed_produces_same_sequence ( ) {
34+ let a = FeeGenerator :: new ( 42 ) . generate ( 10 , 100 , 1000 ) ;
35+ let b = FeeGenerator :: new ( 42 ) . generate ( 10 , 100 , 1000 ) ;
36+ assert_eq ! ( a, b) ;
37+ }
38+
39+ #[ test]
40+ fn different_seeds_produce_different_sequences ( ) {
41+ let a = FeeGenerator :: new ( 1 ) . generate ( 10 , 100 , 1000 ) ;
42+ let b = FeeGenerator :: new ( 2 ) . generate ( 10 , 100 , 1000 ) ;
43+ assert_ne ! ( a, b) ;
44+ }
45+
46+ #[ test]
47+ fn flat_returns_uniform_sequence ( ) {
48+ assert_eq ! ( FeeGenerator :: flat( 500 , 5 ) , vec![ 500u64 ; 5 ] ) ;
49+ }
50+ }
0 commit comments