From a5e481af96a30e45ec6d8bb4b962ce093eff4aea Mon Sep 17 00:00:00 2001 From: Hide_D Date: Sun, 21 Aug 2022 18:53:55 +0900 Subject: [PATCH] =?UTF-8?q?fix:=20utilGame=20format=EC=97=90=EC=84=9C=20?= =?UTF-8?q?=ED=95=9C=EB=8B=A8=EA=B3=84=20=EB=8B=A4=EB=A5=B4=EA=B2=8C=20?= =?UTF-8?q?=EC=B0=A8=EC=9D=B4=EB=82=98=EB=8A=94=20=EB=B2=84=EA=B7=B8=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hwe/test-ts/formatScore.test.ts | 163 ++++++++++++++++++++++++++ hwe/ts/utilGame/formatConnectScore.ts | 33 +++--- hwe/ts/utilGame/formatDefenceTrain.ts | 3 +- hwe/ts/utilGame/formatDexLevel.ts | 3 +- hwe/ts/utilGame/formatHonor.ts | 3 +- 5 files changed, 182 insertions(+), 23 deletions(-) create mode 100644 hwe/test-ts/formatScore.test.ts diff --git a/hwe/test-ts/formatScore.test.ts b/hwe/test-ts/formatScore.test.ts new file mode 100644 index 00000000..714e65de --- /dev/null +++ b/hwe/test-ts/formatScore.test.ts @@ -0,0 +1,163 @@ +import chai, { assert } from "chai"; +import _ from "lodash"; +import { formatConnectScore } from "../ts/utilGame/formatConnectScore"; +import { formatDexLevel } from "../ts/utilGame/formatDexLevel"; +import { formatDefenceTrain } from "../ts/utilGame/formatDefenceTrain"; +import { formatHonor } from "../ts/utilGame/formatHonor"; + +describe("formatConnectScore", () => { + it("connectScoreEqual", () => { + assert.equal(formatConnectScore(0), "안함"); + assert.equal(formatConnectScore(50), "무관심"); + assert.equal(formatConnectScore(100), "보통"); + assert.equal(formatConnectScore(200), "가끔"); + assert.equal(formatConnectScore(400), "자주"); + assert.equal(formatConnectScore(800), "열심"); + assert.equal(formatConnectScore(1600), "중독"); + assert.equal(formatConnectScore(3200), "폐인"); + assert.equal(formatConnectScore(6400), "경고"); + assert.equal(formatConnectScore(12800), "헐..."); + }); + + it("connectScore+1", () => { + assert.equal(formatConnectScore(1), "안함"); + assert.equal(formatConnectScore(51), "무관심"); + assert.equal(formatConnectScore(101), "보통"); + assert.equal(formatConnectScore(201), "가끔"); + assert.equal(formatConnectScore(401), "자주"); + assert.equal(formatConnectScore(801), "열심"); + assert.equal(formatConnectScore(1601), "중독"); + assert.equal(formatConnectScore(3201), "폐인"); + assert.equal(formatConnectScore(6401), "경고"); + assert.equal(formatConnectScore(12801), "헐..."); + }); + + it("connectScoreF-1", () => { + assert.equal(formatConnectScore(49), "안함"); + assert.equal(formatConnectScore(99), "무관심"); + assert.equal(formatConnectScore(199), "보통"); + assert.equal(formatConnectScore(399), "가끔"); + assert.equal(formatConnectScore(799), "자주"); + assert.equal(formatConnectScore(1599), "열심"); + assert.equal(formatConnectScore(3199), "중독"); + assert.equal(formatConnectScore(6399), "폐인"); + assert.equal(formatConnectScore(11799), "경고"); + assert.equal(formatConnectScore(20000), "헐..."); + }); +}); + +describe("formatDexLevel", () => { + it ("dexLevelEqual", () => { + assert.deepEqual(formatDexLevel(0 ), {level:0, 'color':'navy', name:'F-'}); + assert.deepEqual(formatDexLevel(350 ), {level:1, 'color':'navy', name:'F'}); + assert.deepEqual(formatDexLevel(1375 ), {level:2, 'color':'navy', name:'F+'}); + assert.deepEqual(formatDexLevel(3500 ), {level:3, 'color':'skyblue', name:'E-'}); + assert.deepEqual(formatDexLevel(7125 ), {level:4, 'color':'skyblue', name:'E'}); + assert.deepEqual(formatDexLevel(12650 ), {level:5, 'color':'skyblue', name:'E+'}); + assert.deepEqual(formatDexLevel(20475 ), {level:6, 'color':'seagreen', name:'D-'}); + assert.deepEqual(formatDexLevel(31000 ), {level:7, 'color':'seagreen', name:'D'}); + assert.deepEqual(formatDexLevel(44625 ), {level:8, 'color':'seagreen', name:'D+'}); + assert.deepEqual(formatDexLevel(61750 ), {level:9, 'color':'teal', name:'C-'}); + assert.deepEqual(formatDexLevel(82775 ), {level:10, 'color':'teal', name:'C'}); + assert.deepEqual(formatDexLevel(108100 ), {level:11, 'color':'teal', name:'C+'}); + assert.deepEqual(formatDexLevel(138125 ), {level:12, 'color':'limegreen', name:'B-'}); + assert.deepEqual(formatDexLevel(173250 ), {level:13, 'color':'limegreen', name:'B'}); + assert.deepEqual(formatDexLevel(213875 ), {level:14, 'color':'limegreen', name:'B+'}); + assert.deepEqual(formatDexLevel(260400 ), {level:15, 'color':'darkorange', name:'A-'}); + assert.deepEqual(formatDexLevel(313225 ), {level:16, 'color':'darkorange', name:'A'}); + assert.deepEqual(formatDexLevel(372750 ), {level:17, 'color':'darkorange', name:'A+'}); + assert.deepEqual(formatDexLevel(439375 ), {level:18, 'color':'tomato', name:'S-'}); + assert.deepEqual(formatDexLevel(513500 ), {level:19, 'color':'tomato', name:'S'}); + assert.deepEqual(formatDexLevel(595525 ), {level:20, 'color':'tomato', name:'S+'}); + assert.deepEqual(formatDexLevel(685850 ), {level:21, 'color':'darkviolet', name:'Z-'}); + assert.deepEqual(formatDexLevel(784875 ), {level:22, 'color':'darkviolet', name:'Z'}); + assert.deepEqual(formatDexLevel(893000 ), {level:23, 'color':'darkviolet', name:'Z+'}); + assert.deepEqual(formatDexLevel(1010625), {level:24, 'color': 'gold', name:'EX-'}); + assert.deepEqual(formatDexLevel(1138150), {level:25, 'color': 'gold', name:'EX'}); + assert.deepEqual(formatDexLevel(1275975), {level:26, 'color': 'white', name:'EX+'}); + }); + + it ("dexLevel+1", () => { + assert.deepEqual(formatDexLevel(1 ), {level:0, 'color':'navy', name:'F-'}); + assert.deepEqual(formatDexLevel(351 ), {level:1, 'color':'navy', name:'F'}); + assert.deepEqual(formatDexLevel(1376 ), {level:2, 'color':'navy', name:'F+'}); + assert.deepEqual(formatDexLevel(3501 ), {level:3, 'color':'skyblue', name:'E-'}); + assert.deepEqual(formatDexLevel(7126 ), {level:4, 'color':'skyblue', name:'E'}); + assert.deepEqual(formatDexLevel(12651 ), {level:5, 'color':'skyblue', name:'E+'}); + assert.deepEqual(formatDexLevel(20476 ), {level:6, 'color':'seagreen', name:'D-'}); + assert.deepEqual(formatDexLevel(31001 ), {level:7, 'color':'seagreen', name:'D'}); + assert.deepEqual(formatDexLevel(44626 ), {level:8, 'color':'seagreen', name:'D+'}); + assert.deepEqual(formatDexLevel(61751 ), {level:9, 'color':'teal', name:'C-'}); + assert.deepEqual(formatDexLevel(82776 ), {level:10, 'color':'teal', name:'C'}); + assert.deepEqual(formatDexLevel(108101 ), {level:11, 'color':'teal', name:'C+'}); + assert.deepEqual(formatDexLevel(138126 ), {level:12, 'color':'limegreen', name:'B-'}); + assert.deepEqual(formatDexLevel(173251 ), {level:13, 'color':'limegreen', name:'B'}); + assert.deepEqual(formatDexLevel(213876 ), {level:14, 'color':'limegreen', name:'B+'}); + assert.deepEqual(formatDexLevel(260401 ), {level:15, 'color':'darkorange', name:'A-'}); + assert.deepEqual(formatDexLevel(313226 ), {level:16, 'color':'darkorange', name:'A'}); + assert.deepEqual(formatDexLevel(372751 ), {level:17, 'color':'darkorange', name:'A+'}); + assert.deepEqual(formatDexLevel(439376 ), {level:18, 'color':'tomato', name:'S-'}); + assert.deepEqual(formatDexLevel(513501 ), {level:19, 'color':'tomato', name:'S'}); + assert.deepEqual(formatDexLevel(595526 ), {level:20, 'color':'tomato', name:'S+'}); + assert.deepEqual(formatDexLevel(685851 ), {level:21, 'color':'darkviolet', name:'Z-'}); + assert.deepEqual(formatDexLevel(784876 ), {level:22, 'color':'darkviolet', name:'Z'}); + assert.deepEqual(formatDexLevel(893001 ), {level:23, 'color':'darkviolet', name:'Z+'}); + assert.deepEqual(formatDexLevel(1010626), {level:24, 'color': 'gold', name:'EX-'}); + assert.deepEqual(formatDexLevel(1138151), {level:25, 'color': 'gold', name:'EX'}); + assert.deepEqual(formatDexLevel(1275976), {level:26, 'color': 'white', name:'EX+'}); + }); +}); + +describe('formatDefenceTrain', ()=>{ + it('defenceTrainEqual', ()=>{ + assert.equal(formatDefenceTrain(0 ), "△"); + assert.equal(formatDefenceTrain(60 ), "○"); + assert.equal(formatDefenceTrain(80 ), "◎"); + assert.equal(formatDefenceTrain(90 ), "☆"); + assert.equal(formatDefenceTrain(999), "×"); + }); + + it('defenceTrain+1', ()=>{ + assert.equal(formatDefenceTrain(1 ), "△"); + assert.equal(formatDefenceTrain(61 ), "○"); + assert.equal(formatDefenceTrain(81 ), "◎"); + assert.equal(formatDefenceTrain(91 ), "☆"); + assert.equal(formatDefenceTrain(1000), "×"); + }); +}); + +describe('formatHonor', ()=>{ + it('honorEqual', ()=>{ + assert.equal(formatHonor(0 ), '전무'); + assert.equal(formatHonor(640 ), '무명'); + assert.equal(formatHonor(2560 ), '신동'); + assert.equal(formatHonor(5760 ), '약간'); + assert.equal(formatHonor(10240), '평범'); + assert.equal(formatHonor(16000), '지역적'); + assert.equal(formatHonor(23040), '전국적'); + assert.equal(formatHonor(31360), '세계적'); + assert.equal(formatHonor(40960), '유명'); + assert.equal(formatHonor(45000), '명사'); + assert.equal(formatHonor(51840), '호걸'); + assert.equal(formatHonor(55000), '효웅'); + assert.equal(formatHonor(64000), '영웅'); + assert.equal(formatHonor(77440), '구세주'); + }); + + it('honor+1', ()=>{ + assert.equal(formatHonor(1 ), '전무'); + assert.equal(formatHonor(641 ), '무명'); + assert.equal(formatHonor(2561 ), '신동'); + assert.equal(formatHonor(5761 ), '약간'); + assert.equal(formatHonor(10241), '평범'); + assert.equal(formatHonor(16001), '지역적'); + assert.equal(formatHonor(23041), '전국적'); + assert.equal(formatHonor(31361), '세계적'); + assert.equal(formatHonor(40961), '유명'); + assert.equal(formatHonor(45001), '명사'); + assert.equal(formatHonor(51841), '호걸'); + assert.equal(formatHonor(55001), '효웅'); + assert.equal(formatHonor(64001), '영웅'); + assert.equal(formatHonor(77441), '구세주'); + }); +}); \ No newline at end of file diff --git a/hwe/ts/utilGame/formatConnectScore.ts b/hwe/ts/utilGame/formatConnectScore.ts index 2088099b..73e869a0 100644 --- a/hwe/ts/utilGame/formatConnectScore.ts +++ b/hwe/ts/utilGame/formatConnectScore.ts @@ -1,24 +1,23 @@ -import bs from 'binary-search'; -import { clamp } from 'lodash-es'; +import bs from "binary-search"; const connectMap: [number, string][] = [ - [0, '안함'], - [50, '무관심'], - [100, '보통'], - [400, '가끔'], - [200, '자주'], - [800, '열심'], - [1600, '중독'], - [3200, '폐인'], - [6400, '경고'], - [12800, '헐...'], -] + [0, "안함"], + [50, "무관심"], + [100, "보통"], + [200, "가끔"], + [400, "자주"], + [800, "열심"], + [1600, "중독"], + [3200, "폐인"], + [6400, "경고"], + [12800, "헐..."], +]; export function formatConnectScore(connect: number) { const idx = bs(connectMap, connect, ([key], needle) => key - needle); if (idx >= 0) { - return connectMap[idx][1] ?? '?'; + return connectMap[idx][1] ?? "?"; } - const uidx = clamp(-idx - 1, 0, connectMap.length - 1); - return connectMap[uidx][1] ?? '?'; -} \ No newline at end of file + const uidx = (~idx) - 1; + return connectMap[uidx][1]; +} diff --git a/hwe/ts/utilGame/formatDefenceTrain.ts b/hwe/ts/utilGame/formatDefenceTrain.ts index e1e8cd48..6b0b6ab5 100644 --- a/hwe/ts/utilGame/formatDefenceTrain.ts +++ b/hwe/ts/utilGame/formatDefenceTrain.ts @@ -1,5 +1,4 @@ import bs from 'binary-search'; -import { clamp } from 'lodash-es'; const defenceMap: [number,string][] = [ [0, "△"], @@ -14,6 +13,6 @@ export function formatDefenceTrain(defenceTrain: number): string { if(idx >= 0){ return defenceMap[idx][1]??'?'; } - const uidx = clamp(-idx - 1, 0, defenceMap.length - 1); + const uidx = (~idx) - 1; return defenceMap[uidx][1]??'?'; } \ No newline at end of file diff --git a/hwe/ts/utilGame/formatDexLevel.ts b/hwe/ts/utilGame/formatDexLevel.ts index 440b88b1..d364c42c 100644 --- a/hwe/ts/utilGame/formatDexLevel.ts +++ b/hwe/ts/utilGame/formatDexLevel.ts @@ -1,5 +1,4 @@ import bs from 'binary-search'; -import { clamp } from 'lodash-es'; export const DexLevelMap: [number, string, string][] = [ [0, 'navy', 'F-'], @@ -39,7 +38,7 @@ export type DexInfo = { export function formatDexLevel(dex: number): DexInfo { const rawIdx = bs(DexLevelMap, dex, ([dexKey], needle) => dexKey - needle); - const level = rawIdx >= 0 ? rawIdx : clamp(-(rawIdx + 1), 0, DexLevelMap.length - 1); + const level = rawIdx >= 0 ? rawIdx : (~rawIdx) - 1; const [, color, name] = DexLevelMap[level]; diff --git a/hwe/ts/utilGame/formatHonor.ts b/hwe/ts/utilGame/formatHonor.ts index 6b4da4b3..1759c0e5 100644 --- a/hwe/ts/utilGame/formatHonor.ts +++ b/hwe/ts/utilGame/formatHonor.ts @@ -1,5 +1,4 @@ import bs from 'binary-search'; -import { clamp } from 'lodash-es'; const hornorMap: [number, string][] = [ [0, '전무'], @@ -23,6 +22,6 @@ export function formatHonor(experience: number): string { if (idx >= 0) { return hornorMap[idx][1] ?? '?'; } - const uidx = clamp(-idx - 1, 0, hornorMap.length - 1); + const uidx = (~idx) - 1; return hornorMap[uidx][1] ?? '?'; } \ No newline at end of file