From 1bfd5a22feed5a782a3c7e72162e36f20cca00a2 Mon Sep 17 00:00:00 2001 From: kitadmin Date: Thu, 30 Apr 2026 00:17:33 +0000 Subject: [PATCH] test(morse): add missing coverage for DEFAULT_WPM, DEFAULT_TIMING, and derived timing fields Co-Authored-By: Claude Sonnet 4.6 --- client/src/lib/morse.test.ts | 21 +++++++++++++++++++++ client/src/lib/morse.ts | 2 +- 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/client/src/lib/morse.test.ts b/client/src/lib/morse.test.ts index 40b5bc9..dcdc58b 100644 --- a/client/src/lib/morse.test.ts +++ b/client/src/lib/morse.test.ts @@ -4,6 +4,8 @@ import { NOVICE_LETTERS, OPERATOR_WORDS, wpmToTiming, + DEFAULT_WPM, + DEFAULT_TIMING, validatePhrase, pickChallenge, } from './morse' @@ -37,6 +39,13 @@ describe('OPERATOR_WORDS', () => { }) }) +describe('DEFAULT_WPM and DEFAULT_TIMING', () => { + it('DEFAULT_WPM is 10', () => expect(DEFAULT_WPM).toBe(10)) + it('DEFAULT_TIMING equals wpmToTiming(10)', () => { + expect(DEFAULT_TIMING).toEqual(wpmToTiming(10)) + }) +}) + describe('wpmToTiming', () => { it('10 WPM gives dot=120ms', () => { expect(wpmToTiming(10).dot).toBe(120) @@ -48,6 +57,18 @@ describe('wpmToTiming', () => { it('20 WPM gives dot=60ms', () => { expect(wpmToTiming(20).dot).toBe(60) }) + it('elementGap equals dot', () => { + const t = wpmToTiming(10) + expect(t.elementGap).toBe(t.dot) + }) + it('charGap is 3x dot', () => { + const t = wpmToTiming(10) + expect(t.charGap).toBe(t.dot * 3) + }) + it('wordGap is 7x dot', () => { + const t = wpmToTiming(10) + expect(t.wordGap).toBe(t.dot * 7) + }) }) describe('validatePhrase', () => { diff --git a/client/src/lib/morse.ts b/client/src/lib/morse.ts index 8f32b92..0f98100 100644 --- a/client/src/lib/morse.ts +++ b/client/src/lib/morse.ts @@ -85,7 +85,7 @@ export function pickChallenge( const weights = available.map(item => { const s = stats[item] - if (!s || s.attempts === 0) return 2 + if (!s || s.attempts === 0) return 2 // unseen: prioritise over even 0%-accuracy items const accuracy = s.correct / s.attempts return Math.max(0.1, 1 - accuracy) + 0.1 })