mirror of
https://github.com/quantum5/qcal.git
synced 2025-04-24 17:51:57 -04:00
Improve dayMsToDecimal precision and add tests
This commit is contained in:
parent
fe94f995c0
commit
46b24e7993
54
src/TimeOfDay.test.ts
Normal file
54
src/TimeOfDay.test.ts
Normal file
|
@ -0,0 +1,54 @@
|
||||||
|
import {dayMsToDecimal, decimalToDayMs} from './TimeOfDay';
|
||||||
|
|
||||||
|
describe('dayMsToDecimal', () => {
|
||||||
|
it('works', () => {
|
||||||
|
const expected = {hour: 0, minute: 0, second: 0};
|
||||||
|
let ms = 0;
|
||||||
|
|
||||||
|
function hour() {
|
||||||
|
for (let i = 0; i < 10000; ++i) {
|
||||||
|
expect(dayMsToDecimal(ms++)).toStrictEqual(expected);
|
||||||
|
expect(dayMsToDecimal(ms)).toStrictEqual(expected);
|
||||||
|
ms += 862;
|
||||||
|
expect(dayMsToDecimal(ms++)).toStrictEqual(expected);
|
||||||
|
|
||||||
|
if (++expected.second >= 100) {
|
||||||
|
expected.second = 0;
|
||||||
|
if (++expected.minute >= 100) {
|
||||||
|
expected.minute = 0;
|
||||||
|
++expected.hour;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
hour();
|
||||||
|
hour();
|
||||||
|
expected.hour += 7;
|
||||||
|
ms += 864 * 10_000 * 7;
|
||||||
|
hour();
|
||||||
|
|
||||||
|
expect(ms).toStrictEqual(86_400_000);
|
||||||
|
expect(expected).toStrictEqual({hour: 10, minute: 0, second: 0});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('decimalToDayMs', () => {
|
||||||
|
it('works', () => {
|
||||||
|
function hour(hour: number) {
|
||||||
|
let expected = hour * 8_640_000;
|
||||||
|
|
||||||
|
for (let minute = 0; minute < 100; ++minute) {
|
||||||
|
for (let second = 0; second < 100; ++second) {
|
||||||
|
expect(decimalToDayMs({hour, minute, second})).toStrictEqual(expected);
|
||||||
|
expected += 864;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
expect(expected).toEqual((hour + 1) * 8_640_000);
|
||||||
|
}
|
||||||
|
|
||||||
|
hour(0);
|
||||||
|
hour(9);
|
||||||
|
});
|
||||||
|
})
|
|
@ -17,10 +17,9 @@ function currentDayMs(): number {
|
||||||
}
|
}
|
||||||
|
|
||||||
export function dayMsToDecimal(dayMs: number): DecimalTimeStamp {
|
export function dayMsToDecimal(dayMs: number): DecimalTimeStamp {
|
||||||
const dayFrac = dayMs / 86_400_000;
|
const second = Math.floor(dayMs / 864 % 100);
|
||||||
const hour = Math.floor(dayFrac * 10);
|
const minute = Math.floor(dayMs / 86_400 % 100);
|
||||||
const minute = Math.floor(dayFrac * 10 % 1 * 100);
|
const hour = Math.floor(dayMs / 8_640_000);
|
||||||
const second = Math.floor(dayFrac * 1000 % 1 * 100);
|
|
||||||
return {hour, minute, second};
|
return {hour, minute, second};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue