Normalize countdown keyboard adjustments and roll seconds across minutes
Co-authored-by: Shelley <shelley@exe.dev>
This commit is contained in:
parent
9c993beda8
commit
ebfd6e4ce1
3 changed files with 48 additions and 4 deletions
|
|
@ -1,6 +1,38 @@
|
|||
import { test } from 'node:test';
|
||||
import assert from 'node:assert/strict';
|
||||
import { Countdown, integer, splitSeconds } from './timer.mjs';
|
||||
import { Countdown, integer, splitSeconds, adjustTime } from './timer.mjs';
|
||||
|
||||
for (const [minutes, seconds, delta, expectedMinutes, expectedSeconds] of [
|
||||
['1', '59', 1n, '2', '00'],
|
||||
['2', '00', -1n, '1', '59'],
|
||||
['2', '05', -10n, '1', '55'],
|
||||
['1', '58', 10n, '2', '08'],
|
||||
['2', '00', -10n, '1', '50'],
|
||||
['0', '90', 1n, '1', '31'],
|
||||
['0', '90', -10n, '1', '20'],
|
||||
['0', '00', -1n, '0', '00'],
|
||||
['0', '05', -10n, '0', '00'],
|
||||
]) {
|
||||
test(`seconds adjustment ${minutes}:${seconds} ${delta} normalizes and rolls`, () => {
|
||||
assert.deepEqual(adjustTime(minutes, seconds, 'seconds', delta), {
|
||||
minutes: expectedMinutes,
|
||||
seconds: expectedSeconds,
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
test('minute adjustments normalize first and keep minutes nonnegative', () => {
|
||||
assert.deepEqual(adjustTime('0', '90', 'minutes', 1n), { minutes: '2', seconds: '30' });
|
||||
assert.deepEqual(adjustTime('0', '90', 'minutes', -1n), { minutes: '0', seconds: '30' });
|
||||
assert.deepEqual(adjustTime('1', '90', 'minutes', 10n), { minutes: '12', seconds: '30' });
|
||||
assert.deepEqual(adjustTime('1', '90', 'minutes', -10n), { minutes: '0', seconds: '30' });
|
||||
});
|
||||
|
||||
test('keyboard adjustments preserve large integer precision', () => {
|
||||
assert.deepEqual(adjustTime('12345678901234567890', '59', 'seconds', 1n), {
|
||||
minutes: '12345678901234567891', seconds: '00',
|
||||
});
|
||||
});
|
||||
|
||||
function fixture() {
|
||||
let now = 1000;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue