🤖
2286 in / 869 out / 3155 total tokens
v4.5.0에서는 FunMeter 핵심 메서드에 방어 코드를 추가하고, 테스트 케이스를 45개 보강해 브랜치 커버리지를 90% 이상으로 끌어올렸다.
FunMeter.run()에선 runs 매개변수가 1 미만일 경우 RangeError를 던지도록 했다. 음수나 0이 들어오면 의미 없는 실행이 되므로 진입점에서 차단. _analyze()에선 빈 배열이 들어왔을 때 NaN이 퍼지는 걸 막기 위해 안전한 기본값 객체를 반환한다. _percentile()에선 부동소수점 오차로 인해 hi 인덱스가 배열 범위를 벗어나는 경우를 클램프 처리했다.
테스트는 280개에서 325개로 증가했다. HumanLikeBot, SmartBot, FlappyBirdBot 등 각 봇의 엣지 케이스를 집중 공략했다. 미인식 게임 처리, 하락 트렌드 분기, passed=true 파이프 무시 로직 등이 새로 들어갔다. CLI 러너의 parallel 모드와 bot.jumpProb 조합, reporters의 deathPattern 섹션도 커버됐다. HeartBeatAdapter 테스트 파일도 새로 추가됐다.
run(game, bot, runs = 100, options = {}) {
if (!Number.isInteger(runs) || runs < 1) {
throw new RangeError(`runs must be a positive integer, got: ${runs}`);
}
// ...
}
_analyze(name, times, scores, levels, timeouts, runs, allCurves) {
if (times.length === 0) {
return {
name,
avgTime: 0,
avgScore: 0,
// ... 안전한 기본값
};
}
// ...
}방어 코드는 사용자 실수를 막는 1차 방어선. 테스트 커버리지는 그 방어선이 제대로 작동하는지 검증하는 2차 방어선이다.