feat: complete dotnet formula and platform cutover gates
Validators (Pushes and Pull Requests) / validate-ui-and-storage (push) Failing after 16s
Validators (Pushes and Pull Requests) / validate-core (push) Failing after 54s

This commit is contained in:
2026-07-12 12:08:03 +09:00
parent eb48b7eb07
commit a9b8f46187
5 changed files with 199 additions and 2 deletions
@@ -0,0 +1,39 @@
using QuantEngine.Core.Domain;
using Xunit;
namespace QuantEngine.Core.Tests;
public sealed class FormulaCanonicalCoverageTests
{
[Fact]
public void ActiveFormulaImplementationsReturnTheirCanonicalIds()
{
var input = new Dictionary<string, object?>
{
["velocity_1d"] = 0.01d, ["velocity_threshold"] = 0.02d,
["cash_shortfall_krw"] = 100d, ["recovered_krw"] = 100d,
["proposal_gate"] = "PASS", ["cycle_detected"] = false,
["intraday_restriction_gate"] = "PASS", ["portfolio_health_label"] = "HEALTHY",
["rs_v2_score"] = 1d, ["technical_score"] = 1d,
["current_price"] = 90d, ["stop_loss_price"] = 100d, ["gap_threshold"] = 0.05d,
["price"] = 10_000d,
};
var results = new[]
{
FormulaCanonicalCoverage.AntiChaseV1(input),
FormulaCanonicalCoverage.CashRecoveryV1(input),
FormulaCanonicalCoverage.ComprehensiveProposalV1(input),
FormulaCanonicalCoverage.DfgV1(input),
FormulaCanonicalCoverage.IntradayV1(input),
FormulaCanonicalCoverage.PortfolioHealthV1(input),
FormulaCanonicalCoverage.RsV2Fusion(input),
FormulaCanonicalCoverage.StopBreachV1(input),
FormulaCanonicalCoverage.TickNormV1(input),
};
Assert.Equal(9, results.Length);
Assert.All(results, result => Assert.NotEqual("DATA_MISSING — 하네스 업데이트 필요", result["gate"]));
Assert.Equal(9, results.Select(result => result["formula_id"]).Distinct().Count());
}
}