@@ -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