fix: stabilize localization comparison semantics
This commit is contained in:
@@ -410,7 +410,28 @@ test("복수 음원 대응 result map 계약과 shape 관계를 검증한다", a
|
||||
id: "tone-1k",
|
||||
color: "#65f2bf",
|
||||
rawMap: { rows: 50, columns: 50, scale: "power", values: Array(2500).fill(0) },
|
||||
peaks: [{ sourceId: "source-1", position: [0.08, 0.04, 2], value: 1, localizationErrorM: 0 }],
|
||||
peaks: [{
|
||||
sourceId: "source-1",
|
||||
position: [0.08, 0.04, 2],
|
||||
value: 1,
|
||||
localizationErrorM: 0,
|
||||
beamSpread: {
|
||||
calibrated: false,
|
||||
method: "connected-half-power-power-weighted-covariance",
|
||||
halfPowerRatio: 0.5,
|
||||
thresholdValue: 0.5,
|
||||
pixelCount: 1,
|
||||
centroid: [0.08, 0.04, 2],
|
||||
covarianceM2: { xx: 0, xy: 0, yy: 0 },
|
||||
ellipse: {
|
||||
axisScale: "rms",
|
||||
angleReference: "counterclockwise-from-positive-x",
|
||||
majorRmsRadiusM: 0,
|
||||
minorRmsRadiusM: 0,
|
||||
angleDeg: 0,
|
||||
},
|
||||
},
|
||||
}],
|
||||
metrics: { energyInsideTruthRatio: 1, precision: 1, recall: 1 },
|
||||
}],
|
||||
};
|
||||
@@ -419,17 +440,39 @@ test("복수 음원 대응 result map 계약과 shape 관계를 검증한다", a
|
||||
experiment.beamforming.algorithm = "das-phat";
|
||||
result.algorithm = "das-phat";
|
||||
result.bands[0].rawMap.scale = "score";
|
||||
result.bands[0].peaks[0].beamSpread.method =
|
||||
"connected-half-maximum-score-weighted-covariance";
|
||||
assertEqual(
|
||||
(await validateResult(result, { experiment, scene })).length,
|
||||
0,
|
||||
"phase-weighted score result issues",
|
||||
);
|
||||
|
||||
result.algorithm = "das";
|
||||
result.bands[0].rawMap.scale = "power";
|
||||
let issues = await validateResult(result, { experiment, scene });
|
||||
assert(
|
||||
issues.some(({ path }) => path.endsWith("rawMap.scale")),
|
||||
"algorithm and raw map scale must agree",
|
||||
);
|
||||
result.bands[0].rawMap.scale = "score";
|
||||
result.bands[0].peaks[0].beamSpread.method =
|
||||
"connected-half-power-power-weighted-covariance";
|
||||
issues = await validateResult(result, { experiment, scene });
|
||||
assert(
|
||||
issues.some(({ path }) => path.endsWith("beamSpread.method")),
|
||||
"score map and beam spread method must agree",
|
||||
);
|
||||
result.bands[0].peaks[0].beamSpread.method =
|
||||
"connected-half-maximum-score-weighted-covariance";
|
||||
|
||||
result.algorithm = "das";
|
||||
issues = await validateResult(result, { experiment, scene });
|
||||
assert(issues.some(({ path }) => path === "$.algorithm"), "result algorithm must match its experiment");
|
||||
|
||||
experiment.beamforming.algorithm = "das";
|
||||
result.bands[0].rawMap.scale = "power";
|
||||
result.bands[0].peaks[0].beamSpread.method =
|
||||
"connected-half-power-power-weighted-covariance";
|
||||
result.bands[0].rawMap.values.pop();
|
||||
result.bands[0].rawMap.scale = "normalized";
|
||||
result.bands[0].peaks[0].sourceId = "missing-source";
|
||||
|
||||
Reference in New Issue
Block a user