Skip to content

Commit efa56d7

Browse files
devin-ai-integration[bot]Jayant Krishnamurthy
andcommitted
test(fortuna): add unit tests for eth_gas_oracle functions
Co-Authored-By: Jayant Krishnamurthy <[email protected]>
1 parent b29522f commit efa56d7

File tree

1 file changed

+165
-0
lines changed

1 file changed

+165
-0
lines changed

apps/fortuna/src/eth_utils/eth_gas_oracle.rs

Lines changed: 165 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -168,3 +168,168 @@ fn base_fee_surged(base_fee_per_gas: U256) -> U256 {
168168
base_fee_per_gas * 12 / 10
169169
}
170170
}
171+
172+
#[cfg(test)]
173+
mod tests {
174+
use super::*;
175+
176+
#[test]
177+
fn test_estimate_priority_fee_empty_rewards() {
178+
let rewards: Vec<Vec<U256>> = vec![];
179+
let result = estimate_priority_fee(rewards);
180+
assert_eq!(result, U256::zero());
181+
}
182+
183+
#[test]
184+
fn test_estimate_priority_fee_single_reward() {
185+
let reward = U256::from(100);
186+
let rewards = vec![vec![reward]];
187+
let result = estimate_priority_fee(rewards);
188+
assert_eq!(result, reward);
189+
}
190+
191+
#[test]
192+
fn test_estimate_priority_fee_multiple_rewards() {
193+
let rewards = vec![
194+
vec![U256::from(100)],
195+
vec![U256::from(120)],
196+
vec![U256::from(130)],
197+
vec![U256::from(110)],
198+
vec![U256::from(150)],
199+
];
200+
let result = estimate_priority_fee(rewards);
201+
assert_eq!(result, U256::from(120));
202+
}
203+
204+
#[test]
205+
fn test_estimate_priority_fee_with_zero_rewards() {
206+
let rewards = vec![
207+
vec![U256::from(0)],
208+
vec![U256::from(120)],
209+
vec![U256::from(130)],
210+
];
211+
let result = estimate_priority_fee(rewards);
212+
assert_eq!(result, U256::from(130));
213+
}
214+
215+
#[test]
216+
fn test_estimate_priority_fee_with_large_percentage_change() {
217+
// Test with rewards that have a large percentage change
218+
let rewards = vec![
219+
vec![U256::from(100)],
220+
vec![U256::from(120)],
221+
vec![U256::from(350)], // Large increase (191.67% change from 120)
222+
vec![U256::from(400)],
223+
];
224+
225+
let result = estimate_priority_fee(rewards);
226+
assert_eq!(result, U256::from(350));
227+
}
228+
229+
#[test]
230+
fn test_base_fee_surged_lowest_tier() {
231+
let base_fee = U256::from(SURGE_THRESHOLD_1 - 1);
232+
let result = base_fee_surged(base_fee);
233+
assert_eq!(result, base_fee * 2);
234+
}
235+
236+
#[test]
237+
fn test_base_fee_surged_medium_tier() {
238+
let base_fee = U256::from((SURGE_THRESHOLD_1 + SURGE_THRESHOLD_2) / 2);
239+
let result = base_fee_surged(base_fee);
240+
assert_eq!(result, base_fee * 16 / 10);
241+
}
242+
243+
#[test]
244+
fn test_base_fee_surged_high_tier() {
245+
let base_fee = U256::from((SURGE_THRESHOLD_2 + SURGE_THRESHOLD_3) / 2);
246+
let result = base_fee_surged(base_fee);
247+
assert_eq!(result, base_fee * 14 / 10);
248+
}
249+
250+
#[test]
251+
fn test_base_fee_surged_highest_tier() {
252+
let base_fee = U256::from(SURGE_THRESHOLD_3 + 1);
253+
let result = base_fee_surged(base_fee);
254+
assert_eq!(result, base_fee * 12 / 10);
255+
}
256+
257+
#[test]
258+
fn test_eip1559_default_estimator_below_threshold() {
259+
let base_fee = U256::from(EIP1559_FEE_ESTIMATION_PRIORITY_FEE_TRIGGER - 1);
260+
let rewards = vec![
261+
vec![U256::from(100)],
262+
vec![U256::from(120)],
263+
vec![U256::from(130)],
264+
];
265+
266+
let (max_fee, max_priority_fee) = eip1559_default_estimator(base_fee, rewards);
267+
268+
assert_eq!(
269+
max_priority_fee,
270+
U256::from(EIP1559_FEE_ESTIMATION_DEFAULT_PRIORITY_FEE)
271+
);
272+
273+
let surged_base_fee = base_fee * 16 / 10;
274+
assert_eq!(max_fee, surged_base_fee);
275+
}
276+
277+
#[test]
278+
fn test_eip1559_default_estimator_above_threshold() {
279+
let base_fee = U256::from(EIP1559_FEE_ESTIMATION_PRIORITY_FEE_TRIGGER + 1);
280+
let rewards = vec![
281+
vec![U256::from(100)],
282+
vec![U256::from(120)],
283+
vec![U256::from(130)],
284+
];
285+
286+
let (max_fee, max_priority_fee) = eip1559_default_estimator(base_fee, rewards);
287+
288+
assert_eq!(
289+
max_priority_fee,
290+
U256::from(EIP1559_FEE_ESTIMATION_DEFAULT_PRIORITY_FEE)
291+
);
292+
293+
let surged_base_fee = base_fee * 14 / 10;
294+
295+
assert_eq!(max_fee, surged_base_fee);
296+
}
297+
298+
#[test]
299+
fn test_eip1559_default_estimator_estimated_priority_fee_lower_than_default() {
300+
let base_fee = U256::from(EIP1559_FEE_ESTIMATION_PRIORITY_FEE_TRIGGER + 1);
301+
let rewards = vec![
302+
vec![U256::from(1)], // Very low rewards
303+
];
304+
305+
let (max_fee, max_priority_fee) = eip1559_default_estimator(base_fee, rewards);
306+
307+
assert_eq!(
308+
max_priority_fee,
309+
U256::from(EIP1559_FEE_ESTIMATION_DEFAULT_PRIORITY_FEE)
310+
);
311+
312+
let surged_base_fee = base_fee * 14 / 10;
313+
314+
assert_eq!(max_fee, surged_base_fee);
315+
}
316+
317+
#[test]
318+
fn test_eip1559_default_estimator_priority_fee_greater_than_surged_fee() {
319+
let base_fee = U256::from(10); // Very low base fee
320+
let rewards = vec![
321+
vec![U256::from(1000000)], // Very high reward
322+
];
323+
324+
let (max_fee, max_priority_fee) = eip1559_default_estimator(base_fee, rewards);
325+
326+
assert_eq!(
327+
max_priority_fee,
328+
U256::from(EIP1559_FEE_ESTIMATION_DEFAULT_PRIORITY_FEE)
329+
);
330+
331+
let surged_base_fee = base_fee * 2;
332+
333+
assert_eq!(max_fee, max_priority_fee + surged_base_fee);
334+
}
335+
}

0 commit comments

Comments
 (0)