@@ -346,6 +346,171 @@ mod calculate_fee_for_taker_and_maker {
346346 assert_eq ! ( referee_discount, 5000 ) ;
347347 }
348348
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+
349514 #[ test]
350515 fn high_leverage_mode ( ) {
351516 let quote_asset_amount = 100 * QUOTE_PRECISION_U64 ;
0 commit comments