Skip to content

Commit f8b4dd0

Browse files
authored
Merge pull request #273 from Leothosine/feat/issue-172-fee-generator
feat(devkit): add synthetic fee sequence generator
2 parents dcffe0f + 414caa9 commit f8b4dd0

2 files changed

Lines changed: 53 additions & 2 deletions

File tree

packages/devkit/src/lib.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
1-
pub mod analysis;
1+
pub mod analysis;
22
pub mod cli;
33
pub mod error;
44
pub mod harness;
55
pub mod simulation;
6-
pub mod types;
6+
pub mod test_helpers;
7+
pub mod types;
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
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

Comments
 (0)