mirror of
https://github.com/quantum5/qcal.git
synced 2025-04-24 09:41: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 {
|
||||
const dayFrac = dayMs / 86_400_000;
|
||||
const hour = Math.floor(dayFrac * 10);
|
||||
const minute = Math.floor(dayFrac * 10 % 1 * 100);
|
||||
const second = Math.floor(dayFrac * 1000 % 1 * 100);
|
||||
const second = Math.floor(dayMs / 864 % 100);
|
||||
const minute = Math.floor(dayMs / 86_400 % 100);
|
||||
const hour = Math.floor(dayMs / 8_640_000);
|
||||
return {hour, minute, second};
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue