@@ -346,6 +346,171 @@ mod calculate_fee_for_taker_and_maker {
346
346
assert_eq ! ( referee_discount, 5000 ) ;
347
347
}
348
348
349
+ #[ test]
350
+ fn fee_adjustment_free ( ) {
351
+ let quote_asset_amount = 100 * QUOTE_PRECISION_U64 ;
352
+ let taker_stats = UserStats :: default ( ) ;
353
+ let mut maker_stats = UserStats :: default ( ) ;
354
+
355
+ let FillFees {
356
+ user_fee : taker_fee,
357
+ maker_rebate,
358
+ fee_to_market,
359
+ filler_reward,
360
+ referee_discount,
361
+ referrer_reward,
362
+ ..
363
+ } = calculate_fee_for_fulfillment_with_match (
364
+ & taker_stats,
365
+ & Some ( & mut maker_stats) ,
366
+ quote_asset_amount,
367
+ & FeeStructure :: test_default ( ) ,
368
+ 0 ,
369
+ 0 ,
370
+ 0 ,
371
+ false ,
372
+ & None ,
373
+ & MarketType :: Perp ,
374
+ -100 ,
375
+ false ,
376
+ )
377
+ . unwrap ( ) ;
378
+
379
+ assert_eq ! ( taker_fee, 0 ) ;
380
+ assert_eq ! ( maker_rebate, 0 ) ;
381
+ assert_eq ! ( fee_to_market, 0 ) ;
382
+ assert_eq ! ( filler_reward, 0 ) ;
383
+ assert_eq ! ( referrer_reward, 0 ) ;
384
+ assert_eq ! ( referee_discount, 0 ) ;
385
+
386
+ let FillFees {
387
+ user_fee : taker_fee,
388
+ maker_rebate,
389
+ fee_to_market,
390
+ filler_reward,
391
+ referee_discount,
392
+ referrer_reward,
393
+ ..
394
+ } = calculate_fee_for_fulfillment_with_match (
395
+ & taker_stats,
396
+ & Some ( & mut maker_stats) ,
397
+ quote_asset_amount,
398
+ & FeeStructure :: test_default ( ) ,
399
+ 0 ,
400
+ 0 ,
401
+ 0 ,
402
+ false ,
403
+ & None ,
404
+ & MarketType :: Perp ,
405
+ -100 ,
406
+ false ,
407
+ )
408
+ . unwrap ( ) ;
409
+
410
+ assert_eq ! ( taker_fee, 0 ) ;
411
+ assert_eq ! ( maker_rebate, 0 ) ;
412
+ assert_eq ! ( fee_to_market, 0 ) ;
413
+ assert_eq ! ( filler_reward, 0 ) ;
414
+ assert_eq ! ( referrer_reward, 0 ) ;
415
+ assert_eq ! ( referee_discount, 0 ) ;
416
+
417
+ // test HLM
418
+ let FillFees {
419
+ user_fee : taker_fee,
420
+ maker_rebate,
421
+ fee_to_market,
422
+ filler_reward,
423
+ referee_discount,
424
+ referrer_reward,
425
+ ..
426
+ } = calculate_fee_for_fulfillment_with_match (
427
+ & taker_stats,
428
+ & Some ( & mut maker_stats) ,
429
+ quote_asset_amount,
430
+ & FeeStructure :: test_default ( ) ,
431
+ 0 ,
432
+ 0 ,
433
+ 0 ,
434
+ false ,
435
+ & None ,
436
+ & MarketType :: Perp ,
437
+ -100 ,
438
+ true ,
439
+ )
440
+ . unwrap ( ) ;
441
+
442
+ assert_eq ! ( taker_fee, 0 ) ;
443
+ assert_eq ! ( maker_rebate, 0 ) ;
444
+ assert_eq ! ( fee_to_market, 0 ) ;
445
+ assert_eq ! ( filler_reward, 0 ) ;
446
+ assert_eq ! ( referrer_reward, 0 ) ;
447
+ assert_eq ! ( referee_discount, 0 ) ;
448
+
449
+ // reward referrer
450
+ let FillFees {
451
+ user_fee : taker_fee,
452
+ maker_rebate,
453
+ fee_to_market,
454
+ filler_reward,
455
+ referee_discount,
456
+ referrer_reward,
457
+ ..
458
+ } = calculate_fee_for_fulfillment_with_match (
459
+ & taker_stats,
460
+ & Some ( & mut maker_stats) ,
461
+ quote_asset_amount,
462
+ & FeeStructure :: test_default ( ) ,
463
+ 0 ,
464
+ 0 ,
465
+ 0 ,
466
+ true ,
467
+ & None ,
468
+ & MarketType :: Perp ,
469
+ -100 ,
470
+ false ,
471
+ )
472
+ . unwrap ( ) ;
473
+
474
+ assert_eq ! ( taker_fee, 0 ) ;
475
+ assert_eq ! ( maker_rebate, 0 ) ;
476
+ assert_eq ! ( fee_to_market, 0 ) ;
477
+ assert_eq ! ( filler_reward, 0 ) ;
478
+ assert_eq ! ( referrer_reward, 0 ) ;
479
+ assert_eq ! ( referee_discount, 0 ) ;
480
+
481
+ // reward referrer + filler
482
+ let FillFees {
483
+ user_fee : taker_fee,
484
+ maker_rebate,
485
+ fee_to_market,
486
+ filler_reward,
487
+ referee_discount,
488
+ referrer_reward,
489
+ ..
490
+ } = calculate_fee_for_fulfillment_with_match (
491
+ & taker_stats,
492
+ & Some ( & mut maker_stats) ,
493
+ quote_asset_amount,
494
+ & FeeStructure :: test_default ( ) ,
495
+ 0 ,
496
+ 0 ,
497
+ 1 ,
498
+ true ,
499
+ & None ,
500
+ & MarketType :: Perp ,
501
+ -100 ,
502
+ false ,
503
+ )
504
+ . unwrap ( ) ;
505
+
506
+ assert_eq ! ( taker_fee, 0 ) ;
507
+ assert_eq ! ( maker_rebate, 0 ) ;
508
+ assert_eq ! ( fee_to_market, 0 ) ;
509
+ assert_eq ! ( filler_reward, 0 ) ;
510
+ assert_eq ! ( referrer_reward, 0 ) ;
511
+ assert_eq ! ( referee_discount, 0 ) ;
512
+ }
513
+
349
514
#[ test]
350
515
fn high_leverage_mode ( ) {
351
516
let quote_asset_amount = 100 * QUOTE_PRECISION_U64 ;
0 commit comments