Add fully tested ktLampRatingAlg

This commit is contained in:
zkldi
2021-12-01 12:07:52 +00:00
parent d930651cc6
commit e1b41f186e
3 changed files with 126 additions and 11 deletions
@@ -15,7 +15,7 @@ import {
CalculateBPI,
CalculateCHUNITHMRating,
CalculateGITADORASkill,
CalculateKTLampRating,
CalculateKTLampRatingIIDX,
CalculateKTRating,
CalculateMFCP,
CalculateVF6,
@@ -136,7 +136,7 @@ async function CalculateDataIIDXSP(
BPIData.kavg,
BPIData.wr,
dryScore.scoreData.score,
(chart as ChartDocument<"iidx:DP" | "iidx:SP">).data.notecount * 2,
(chart as ChartDocument<"iidx:SP">).data.notecount * 2,
BPIData.coef
);
@@ -147,8 +147,8 @@ async function CalculateDataIIDXSP(
return {
BPI: bpi,
ktRating: await CalculateKTRating(dryScore, "iidx", "SP", chart, logger),
ktLampRating: await CalculateKTLampRating(dryScore, "iidx", "SP", chart),
ktRating: CalculateKTRating(dryScore, "iidx", "SP", chart, logger),
ktLampRating: CalculateKTLampRatingIIDX(dryScore, "SP", chart as ChartDocument<"iidx:SP">),
};
}
@@ -168,7 +168,7 @@ async function CalculateDataIIDXDP(
BPIData.kavg,
BPIData.wr,
dryScore.scoreData.score,
(chart as ChartDocument<"iidx:DP" | "iidx:SP">).data.notecount * 2,
(chart as ChartDocument<"iidx:DP">).data.notecount * 2,
BPIData.coef
);
@@ -179,8 +179,8 @@ async function CalculateDataIIDXDP(
return {
BPI: bpi,
ktRating: await CalculateKTRating(dryScore, "iidx", "DP", chart, logger),
ktLampRating: await CalculateKTLampRating(dryScore, "iidx", "DP", chart),
ktRating: CalculateKTRating(dryScore, "iidx", "DP", chart, logger),
ktLampRating: CalculateKTLampRatingIIDX(dryScore, "DP", chart as ChartDocument<"iidx:DP">),
};
}
@@ -9,6 +9,7 @@ import {
CalculateBPI,
CalculateCHUNITHMRating,
CalculateGITADORASkill,
CalculateKTLampRatingIIDX,
CalculateKTRating,
CalculateMFCP,
CalculateVF6,
@@ -110,6 +111,98 @@ t.test("#CalculateBPI", (t) => {
t.end();
});
t.test("#CalculateKTLampRatingIIDx", (t) => {
function c(
nc: number | null,
hc: number | null,
exhc: number | null
): ChartDocument<"iidx:SP"> {
return Object.assign({}, Testing511SPA, {
tierlistInfo: {
"kt-EXHC": {
value: exhc,
},
"kt-HC": {
value: hc,
},
"kt-NC": {
value: nc,
},
},
});
}
function s(lamp: Lamps["iidx:SP" | "iidx:DP"]): DryScore<"iidx:SP" | "iidx:DP"> {
return Object.assign({}, TestingIIDXSPDryScore, {
scoreData: {
lamp,
},
});
}
t.equal(
CalculateKTLampRatingIIDX(s("CLEAR"), "SP", c(10.5, 10.6, 10.7)),
10.5,
"Should return NC if the score was NC."
);
t.equal(
CalculateKTLampRatingIIDX(s("HARD CLEAR"), "SP", c(10.5, 10.6, 10.7)),
10.6,
"Should return HC if the score was HC."
);
t.equal(
CalculateKTLampRatingIIDX(s("EX HARD CLEAR"), "SP", c(10.5, 10.6, 10.7)),
10.7,
"Should return EXHC if the score was EXHC."
);
t.equal(
CalculateKTLampRatingIIDX(s("CLEAR"), "SP", c(null, 10.6, 10.7)),
0,
"Should return 0 if the score was NC but no NC was available."
);
t.equal(
CalculateKTLampRatingIIDX(s("HARD CLEAR"), "SP", c(null, null, 10.7)),
0,
"Should return 0 if the score was HC but no HC or NC was available."
);
tequal(
CalculateKTLampRatingIIDX(s("HARD CLEAR"), "SP", c(10.5, null, 10.7)),
10.5,
"Should return NC if the score was HC but no HC was available."
);
t.equal(
CalculateKTLampRatingIIDX(s("HARD CLEAR"), "SP", c(10.9, 10.5, 10.7)),
10.9,
"Should return NC if the score was HC but NC was worth more."
);
t.equal(
CalculateKTLampRatingIIDX(s("EX HARD CLEAR"), "SP", c(10.9, 10.5, 10.7)),
10.9,
"Should return NC if the score was EXHC but NC was worth more."
);
t.equal(
CalculateKTLampRatingIIDX(s("EX HARD CLEAR"), "SP", c(10.4, 10.9, 10.7)),
10.9,
"Should return HC if the score was EXHC but HC was worth more."
);
t.equal(
CalculateKTLampRatingIIDX(s("CLEAR"), "SP", c(null, null, null)),
10,
"Should return chart level if the chart has no tierlist data."
);
t.end();
});
t.test("#CalculateGITADORARating", (t) => {
function TestGitadoraRating(percent: number, levelNum: number) {
return CalculateGITADORASkill(
@@ -4,6 +4,7 @@ import {
Game,
GetGamePTConfig,
Grades,
IIDX_LAMPS,
integer,
Lamps,
Playtypes,
@@ -317,13 +318,34 @@ export function CalculateKTRating(
return KTRatingCalcV1(dryScore.scoreData.percent, levelNum, parameters, logger);
}
export function CalculateKTLampRating(
export function CalculateKTLampRatingIIDX(
dryScore: DryScore,
game: Game,
playtype: Playtypes[Game],
chart: ChartDocument
chart: ChartDocument<"iidx:SP" | "iidx:DP">
) {
return LampRatingNoTierlistInfo(dryScore, game, playtype, chart);
const ncValue = chart.tierlistInfo["kt-NC"]?.value ?? 0;
const hcValue = Math.max(chart.tierlistInfo["kt-HC"]?.value ?? 0, ncValue);
const exhcValue = Math.max(chart.tierlistInfo["kt-EXHC"]?.value ?? 0, hcValue);
if (!exhcValue && !hcValue && !ncValue) {
return LampRatingNoTierlistInfo(dryScore, "iidx", playtype, chart);
}
const lamp = dryScore.scoreData.lamp;
const gptConfig = GetGamePTConfig("iidx", playtype);
const lampIndex = gptConfig.lamps.indexOf(lamp);
if (exhcValue && lampIndex >= IIDX_LAMPS.EX_HARD_CLEAR) {
return exhcValue;
} else if (hcValue && lampIndex >= IIDX_LAMPS.HARD_CLEAR) {
return hcValue;
} else if (ncValue && lampIndex >= IIDX_LAMPS.CLEAR) {
return ncValue;
}
return 0;
}
function LampRatingNoTierlistInfo(