refactor(accrual): 接线SimpleInterest/CompoundInterest内部 + 分段修复 + 去重
CalcDailySimpleInterest/CalcDailyCompoundInterest内部逐日循环→分段纯函数(签名不变): - AccrueSimplePeriod: AccruedToday改未缩放累计(TdInterestAmount口径) - AccrueCompoundPeriod: 新增out finalBasis供flowEvent.InterestPrincipal精确赋值 - 修复5处分段边界bug(includeStart/includeEnd/resetCarryInterest interestPeriod=1场景) - 提取BuildSegmentRates消除SimpleInterest/CompoundInterest取率重复 - 影子测试补AccruedToday断言关闭测试盲区 SwapModule零回归(7基线/510通过)
This commit is contained in:
@@ -93,11 +93,16 @@ namespace UnitTestProject.Modules.SwapModule.Accrual
|
||||
endDate: EndDate,
|
||||
boundary: AccrualBoundary.StartOnly,
|
||||
annualDays: AnnualDays,
|
||||
isAnnualized: true);
|
||||
isAnnualized: true,
|
||||
resetCarryInterest: 0m,
|
||||
realizedInterest: 0m,
|
||||
unwindFraction: 1m,
|
||||
finalBasis: out _);
|
||||
|
||||
Console.WriteLine($"旧: I={oldI} Td={oldTd}");
|
||||
Console.WriteLine($"新: Accrued={result.Accrued} AccruedToday={result.AccruedToday}");
|
||||
Assert.AreEqual((double)oldI, (double)result.Accrued, 0.01, "InterestAmount 一致");
|
||||
Assert.AreEqual((double)oldTd, (double)result.AccruedToday, 0.01, "TdInterestAmount 一致");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -138,11 +143,13 @@ namespace UnitTestProject.Modules.SwapModule.Accrual
|
||||
isAnnualized: true,
|
||||
resetCarryInterest: carry,
|
||||
realizedInterest: consumed,
|
||||
unwindFraction: closePct);
|
||||
unwindFraction: closePct,
|
||||
finalBasis: out _);
|
||||
|
||||
Console.WriteLine($"旧: I={oldI} Td={oldTd}");
|
||||
Console.WriteLine($"新: Accrued={result.Accrued} AccruedToday={result.AccruedToday}");
|
||||
Assert.AreEqual((double)oldI, (double)result.Accrued, 0.01, "InterestAmount 一致");
|
||||
Assert.AreEqual((double)oldTd, (double)result.AccruedToday, 0.01, "TdInterestAmount 一致");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -177,11 +184,16 @@ namespace UnitTestProject.Modules.SwapModule.Accrual
|
||||
endDate: EndDate,
|
||||
boundary: AccrualBoundary.Both,
|
||||
annualDays: AnnualDays,
|
||||
isAnnualized: true);
|
||||
isAnnualized: true,
|
||||
resetCarryInterest: 0m,
|
||||
realizedInterest: 0m,
|
||||
unwindFraction: 1m,
|
||||
finalBasis: out _);
|
||||
|
||||
Console.WriteLine($"旧: I={oldI} Td={oldTd}");
|
||||
Console.WriteLine($"新: Accrued={result.Accrued} AccruedToday={result.AccruedToday}");
|
||||
Assert.AreEqual((double)oldI, (double)result.Accrued, 0.01, "InterestAmount 一致");
|
||||
Assert.AreEqual((double)oldTd, (double)result.AccruedToday, 0.01, "TdInterestAmount 一致");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user