95 lines
2.8 KiB
TypeScript
95 lines
2.8 KiB
TypeScript
// 请使用 bun 运行
|
|
|
|
import { fight, score, win_rate } from "./md5-api";
|
|
|
|
const test_profiles = {
|
|
fight: [
|
|
{
|
|
test: `vy5we
|
|
w\n ryyb\nb\nrv\nv\netet4y 54 w\ne rg\nwe by\nrw \nte\nw \nnbyrb\n ew\nyn re\nryb\ney w\nneb r\nbwe\nn yrbq34nb\net\nab\nqbetq\n45ywy54\ny45\n45\nwv54\nyw\nvy\n5y\nvyev\nyeevy\nvey\ne\nrye\nyn\n43n\n63\nub63 u\nb6r\nun\n3br\nue\nrnbt\n4n\n5b\nwu\n4bw\n4nw\n4u \nn6w\nr`, winner: "rye"
|
|
},
|
|
{
|
|
test: 'm@fAIgFUL\n1 1 @Ehlt s',
|
|
winner: "m@fAIgFUL"
|
|
},
|
|
],
|
|
win_chance: [
|
|
{
|
|
test: `
|
|
!test!
|
|
|
|
http://shenjack.top:81/md5/branch/latest/
|
|
|
|
http://shenjack.top:81/md5`,
|
|
round_10: 0.513,
|
|
round_100: 0.5106,
|
|
},
|
|
],
|
|
score: [
|
|
{
|
|
test: `
|
|
!test!
|
|
|
|
http://shenjack.top:81/md5/branch/latest/`,
|
|
round_10: 1480,
|
|
round_100: 1903, // todo
|
|
},
|
|
],
|
|
};
|
|
|
|
async function test() {
|
|
for (const profile of test_profiles.fight) {
|
|
const result = await fight(profile.test);
|
|
if (result.source_plr === profile.winner) {
|
|
console.log("pass");
|
|
} else {
|
|
throw new Error(`fail${result.source_plr} ${profile.winner} ${profile.test}`);
|
|
}
|
|
}
|
|
for (const profile of test_profiles.win_chance) {
|
|
console.log(profile.test);
|
|
const result = await win_rate(profile.test, 100 * 100);
|
|
// 分别校验 10 * 100 和 100 * 100 轮的胜率
|
|
for (const data of result.raw_data) {
|
|
if (data.round === 10 * 100) {
|
|
const rate = data.win_count / data.round;
|
|
if (rate === profile.round_10) {
|
|
console.log("pass");
|
|
} else {
|
|
throw new Error(`fail${rate} ${profile.round_10}`);
|
|
}
|
|
} else if (data.round === 100 * 100) {
|
|
const rate = data.win_count / data.round;
|
|
if (rate === profile.round_100) {
|
|
console.log("pass");
|
|
} else {
|
|
throw new Error(`fail${rate} ${profile.round_100}`);
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|
|
for (const profile of test_profiles.score) {
|
|
console.log(profile.test);
|
|
const result = await score(profile.test, 100 * 100);
|
|
for (const data of result.raw_data) {
|
|
if (data.round === 10 * 100) {
|
|
if (data.score * 10 === profile.round_10) {
|
|
console.log("pass");
|
|
} else {
|
|
throw new Error(`fail${data.score} ${profile.round_10}`);
|
|
}
|
|
} else if (data.round === 100 * 100) {
|
|
if (data.score === profile.round_100) {
|
|
console.log("pass");
|
|
} else {
|
|
throw new Error(`fail${data.score} ${profile.round_100}`);
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
test();
|