@@ -177,6 +177,81 @@ contract ProgressiveFeeTest is BaseFeeTest {
177177 "Progressive fee mismatch "
178178 );
179179 }
180+
181+ function test_ProgressiveFee_IncreasingPercentageBeforePeak () public {
182+ // Test that fee percentage increases as amount increases toward halfAmount
183+ ProgressiveFee localProgressiveFee = new ProgressiveFee (
184+ address (token),
185+ 1000 ,
186+ 10000 ,
187+ OWNER
188+ );
189+
190+ uint256 amount1 = 2000 ;
191+ uint256 amount2 = 5000 ;
192+ uint256 amount3 = 10000 ;
193+
194+ uint256 fee1 = localProgressiveFee
195+ .quoteTransferRemote (destination, recipient, amount1)[0 ].amount;
196+ uint256 fee2 = localProgressiveFee
197+ .quoteTransferRemote (destination, recipient, amount2)[0 ].amount;
198+ uint256 fee3 = localProgressiveFee
199+ .quoteTransferRemote (destination, recipient, amount3)[0 ].amount;
200+
201+ // Calculate percentages (scaled by 1e18 for precision)
202+ uint256 percentage1 = (fee1 * 1e18 ) / amount1;
203+ uint256 percentage2 = (fee2 * 1e18 ) / amount2;
204+ uint256 percentage3 = (fee3 * 1e18 ) / amount3;
205+
206+ // Verify percentages increase before peak
207+ assertLt (percentage1, percentage2, "Percentage should increase " );
208+ assertLt (percentage2, percentage3, "Percentage should increase " );
209+ }
210+
211+ function test_ProgressiveFee_DecreasingPercentageAfterPeak () public {
212+ // Test that fee percentage decreases as amount increases beyond halfAmount
213+ ProgressiveFee localProgressiveFee = new ProgressiveFee (
214+ address (token),
215+ 1000 ,
216+ 10000 ,
217+ OWNER
218+ );
219+
220+ uint256 amount1 = 10000 ;
221+ uint256 amount2 = 20000 ;
222+ uint256 amount3 = 50000 ;
223+
224+ uint256 fee1 = localProgressiveFee
225+ .quoteTransferRemote (destination, recipient, amount1)[0 ].amount;
226+ uint256 fee2 = localProgressiveFee
227+ .quoteTransferRemote (destination, recipient, amount2)[0 ].amount;
228+ uint256 fee3 = localProgressiveFee
229+ .quoteTransferRemote (destination, recipient, amount3)[0 ].amount;
230+
231+ // Calculate percentages (scaled by 1e18 for precision)
232+ uint256 percentage1 = (fee1 * 1e18 ) / amount1;
233+ uint256 percentage2 = (fee2 * 1e18 ) / amount2;
234+ uint256 percentage3 = (fee3 * 1e18 ) / amount3;
235+
236+ // Verify percentages decrease after peak
237+ assertGt (percentage1, percentage2, "Percentage should decrease " );
238+ assertGt (percentage2, percentage3, "Percentage should decrease " );
239+ }
240+
241+ function test_ProgressiveFee_ZeroAmount () public {
242+ // Test that fee is zero when amount is zero
243+ ProgressiveFee localProgressiveFee = new ProgressiveFee (
244+ address (token),
245+ 1000 ,
246+ 10000 ,
247+ OWNER
248+ );
249+
250+ uint256 fee = localProgressiveFee
251+ .quoteTransferRemote (destination, recipient, 0 )[0 ].amount;
252+
253+ assertEq (fee, 0 , "Fee should be zero for zero amount " );
254+ }
180255}
181256
182257// --- RegressiveFee Tests ---
@@ -225,6 +300,36 @@ contract RegressiveFeeTest is BaseFeeTest {
225300 "Regressive fee mismatch "
226301 );
227302 }
303+
304+ function test_RegressiveFee_ContinuouslyDecreasingPercentage () public {
305+ // Test that fee percentage continuously decreases as amount increases
306+ RegressiveFee localRegressiveFee = new RegressiveFee (
307+ address (token),
308+ 1000 ,
309+ 5000 ,
310+ OWNER
311+ );
312+
313+ uint256 amount1 = 1000 ;
314+ uint256 amount2 = 5000 ;
315+ uint256 amount3 = 20000 ;
316+
317+ uint256 fee1 = localRegressiveFee
318+ .quoteTransferRemote (destination, recipient, amount1)[0 ].amount;
319+ uint256 fee2 = localRegressiveFee
320+ .quoteTransferRemote (destination, recipient, amount2)[0 ].amount;
321+ uint256 fee3 = localRegressiveFee
322+ .quoteTransferRemote (destination, recipient, amount3)[0 ].amount;
323+
324+ // Calculate percentages (scaled by 1e18 for precision)
325+ uint256 percentage1 = (fee1 * 1e18 ) / amount1;
326+ uint256 percentage2 = (fee2 * 1e18 ) / amount2;
327+ uint256 percentage3 = (fee3 * 1e18 ) / amount3;
328+
329+ // Verify percentages continuously decrease
330+ assertGt (percentage1, percentage2, "Percentage should decrease " );
331+ assertGt (percentage2, percentage3, "Percentage should decrease " );
332+ }
228333}
229334
230335// --- RoutingFee Tests ---
0 commit comments