refactor(funding-leg): 清理CalcNotional死参数posiLong/posiShort+修正过时InterestMode注释
- 删除 IFundingLegStrategy.CalcNotional 的 posiLong/posiShort 死参数(多空存续腿界面已禁用,三个实现均不读取),同步三个实现签名、SwapDealService 唯一调用点、FundingLegStrategyTest 7 处调用 - 修正 SwapPosition/SwapFlowEvent/EodSwapPosition 的 InterestMode 字段注释(去掉已删的 3/4,补全 5/6/9) - 重写 SwapUnwindFloatingLegDiagnosticTdd 过时类注释 零行为变化;编译 0 错误;FundingLegStrategyTest 11/11 通过。
This commit is contained in:
@@ -6,16 +6,14 @@ using YLErp.Modules.SwapModule.FundingLegs;
|
||||
namespace UnitTestProject.Modules.SwapModule.FundingLegs
|
||||
{
|
||||
/// <summary>
|
||||
/// 融资腿策略单测。验证每个策略的 CalcNotional 与现有 CalcNotionalByMode switch 完全一致。
|
||||
/// 这组测试是后续"迁移调用点"的安全网——迁移前后行为必须不变。
|
||||
/// 融资腿策略单测。验证每个 IFundingLegStrategy 实现的 CalcNotional 计息基数公式正确。
|
||||
/// 原 CalcNotionalByMode switch 已重构为策略类(见 FundingLegStrategyFactory)。
|
||||
/// </summary>
|
||||
[TestClass]
|
||||
public class FundingLegStrategyTest
|
||||
{
|
||||
private const decimal Fix = 2_000_000m;
|
||||
private const decimal Notional = 100_000_000m;
|
||||
private const decimal LongNotional = 60_000_000m;
|
||||
private const decimal ShortNotional = 40_000_000m;
|
||||
|
||||
#region 固定值(mode 1)
|
||||
|
||||
@@ -23,7 +21,7 @@ namespace UnitTestProject.Modules.SwapModule.FundingLegs
|
||||
public void 固定值_部分平仓_计息基数恒等于Fix()
|
||||
{
|
||||
var leg = new FixedAmountLeg();
|
||||
var r = leg.CalcNotional(Fix, Notional, LongNotional, ShortNotional, 0.5m);
|
||||
var r = leg.CalcNotional(Fix, Notional, 0.5m);
|
||||
|
||||
Assert.AreEqual(Fix, r.ClosePrincipal, "平仓本金恒=Fix");
|
||||
Assert.AreEqual(Fix, r.PosiPrincipal, "持仓本金恒=Fix");
|
||||
@@ -34,7 +32,7 @@ namespace UnitTestProject.Modules.SwapModule.FundingLegs
|
||||
public void 固定值_全平_计息基数仍等于Fix()
|
||||
{
|
||||
var leg = new FixedAmountLeg();
|
||||
var r = leg.CalcNotional(Fix, Notional, LongNotional, ShortNotional, 1m);
|
||||
var r = leg.CalcNotional(Fix, Notional, 1m);
|
||||
Assert.AreEqual(Fix, r.ClosePrincipal);
|
||||
}
|
||||
|
||||
@@ -46,7 +44,7 @@ namespace UnitTestProject.Modules.SwapModule.FundingLegs
|
||||
public void 合约名义本金_部分平仓_本金按比例缩放()
|
||||
{
|
||||
var leg = new ContractNotionalLeg();
|
||||
var r = leg.CalcNotional(Fix, Notional, LongNotional, ShortNotional, 0.5m);
|
||||
var r = leg.CalcNotional(Fix, Notional, 0.5m);
|
||||
|
||||
Assert.AreEqual(50_000_000m, r.ClosePrincipal);
|
||||
Assert.AreEqual(Notional, r.PosiPrincipal);
|
||||
@@ -57,7 +55,7 @@ namespace UnitTestProject.Modules.SwapModule.FundingLegs
|
||||
public void 合约名义本金_全平_本金等于全额()
|
||||
{
|
||||
var leg = new ContractNotionalLeg();
|
||||
var r = leg.CalcNotional(Fix, Notional, LongNotional, ShortNotional, 1m);
|
||||
var r = leg.CalcNotional(Fix, Notional, 1m);
|
||||
Assert.AreEqual(Notional, r.ClosePrincipal);
|
||||
}
|
||||
|
||||
@@ -65,7 +63,7 @@ namespace UnitTestProject.Modules.SwapModule.FundingLegs
|
||||
public void 合约名义本金_零平仓_本金为零()
|
||||
{
|
||||
var leg = new ContractNotionalLeg();
|
||||
var r = leg.CalcNotional(Fix, Notional, LongNotional, ShortNotional, 0m);
|
||||
var r = leg.CalcNotional(Fix, Notional, 0m);
|
||||
|
||||
Assert.AreEqual(0m, r.ClosePrincipal);
|
||||
Assert.AreEqual(Notional, r.PosiPrincipal);
|
||||
@@ -79,7 +77,7 @@ namespace UnitTestProject.Modules.SwapModule.FundingLegs
|
||||
public void 标的期初全价_部分平仓_主路径公式同mode2()
|
||||
{
|
||||
var leg = new UnderlyingEntryFullPriceLeg();
|
||||
var r = leg.CalcNotional(Fix, Notional, LongNotional, ShortNotional, 0.5m);
|
||||
var r = leg.CalcNotional(Fix, Notional, 0.5m);
|
||||
|
||||
Assert.AreEqual(50_000_000m, r.ClosePrincipal);
|
||||
Assert.AreEqual(Notional, r.PosiPrincipal);
|
||||
@@ -90,7 +88,7 @@ namespace UnitTestProject.Modules.SwapModule.FundingLegs
|
||||
public void 标的期初全价_全平_本金等于全额()
|
||||
{
|
||||
var leg = new UnderlyingEntryFullPriceLeg();
|
||||
var r = leg.CalcNotional(Fix, Notional, LongNotional, ShortNotional, 1m);
|
||||
var r = leg.CalcNotional(Fix, Notional, 1m);
|
||||
Assert.AreEqual(Notional, r.ClosePrincipal);
|
||||
}
|
||||
|
||||
|
||||
@@ -5,12 +5,12 @@ using YLErp.DBModels.Enums;
|
||||
namespace YLErp.Modules.SwapModule
|
||||
{
|
||||
/// <summary>
|
||||
/// 诊断测试:验证「浮动腿 fpositions 仍用 origPositions(orig 100M)」对本 deal 的
|
||||
/// 预付金/返回预付金结果是否产生影响。结论预期:本 deal 利息腿只有 mode 9(标的期初全价)
|
||||
/// 与 mode 5(初始预付金),CalcNotionalByMode 中 posiLong/posiShort 仅在「多头/空头存续名义本金」
|
||||
/// 分支被消费(L709-716),故本 deal 即便 fpositions 用 orig 100M,预付金腿结果也不受其影响。
|
||||
/// 本测试仅做诊断/验证,不改动任何生产代码;用反射调用 private CalcNotionalByMode 以直接证明
|
||||
/// “mode 9 / mode 5 的 closePrincipal 不依赖 posiLong/posiShort”。
|
||||
/// 诊断测试骨架:针对 GLMS 双轨持仓(orig/real)构造预付金腿(mode 5)与标的期初全价腿(mode 9),
|
||||
/// 用于验证“浮动腿 fpositions 用 origPositions 对预付金/标的端计息基数的影响”。
|
||||
/// 计息基数现由 FundingLegStrategyFactory + 各 IFundingLegStrategy 策略类计算
|
||||
/// (原 private CalcNotionalByMode 已重构移除);多空存续腿的 posiLong/posiShort 因界面禁用
|
||||
/// 已从策略接口删除,故预付金/标的端计息基数不依赖多空头寸。
|
||||
/// 注:当前仅含数据构造,反射诊断方法尚未实现(无 [TestMethod])。
|
||||
/// </summary>
|
||||
[TestClass]
|
||||
public class SwapUnwindFloatingLegDiagnosticTdd
|
||||
|
||||
Reference in New Issue
Block a user