Skip to content

Commit 94bd69e

Browse files
committed
common: implement longCountJDN function
1 parent c411f5a commit 94bd69e

2 files changed

Lines changed: 66 additions & 2 deletions

File tree

common/src/longCount.test.ts

Lines changed: 58 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import {jdnLongCount} from './longCount';
1+
import {jdnLongCount, longCountJDN} from './longCount';
22

33
describe('jdnLongCount', () => {
44
it('works for normal dates', () => {
@@ -59,4 +59,60 @@ describe('jdnLongCount', () => {
5959
expect(jdnLongCount(0)).toBeNull();
6060
expect(jdnLongCount(584282)).toBeNull();
6161
});
62-
})
62+
});
63+
64+
describe('longCountJDN', () => {
65+
it('works for normal dates', () => {
66+
expect(longCountJDN([12, 19, 19, 17, 19])).toEqual(2456282);
67+
expect(longCountJDN([13, 0, 8, 12, 10])).toEqual(2459413);
68+
expect(longCountJDN([7, 16, 3, 2, 13])).toEqual(1708616);
69+
expect(longCountJDN([8, 7, 3, 2, 13])).toEqual(1787816);
70+
expect(longCountJDN([7, 16, 6, 16, 18])).toEqual(1709981);
71+
expect(longCountJDN([7, 18, 9, 7, 12])).toEqual(1725275);
72+
expect(longCountJDN([7, 18, 14, 8, 12])).toEqual(1727095);
73+
expect(longCountJDN([7, 19, 7, 8, 12])).toEqual(1731775);
74+
expect(longCountJDN([7, 19, 15, 7, 12])).toEqual(1734635);
75+
expect(longCountJDN([8, 2, 2, 10, 15])).toEqual(1751618);
76+
expect(longCountJDN([8, 3, 2, 10, 15])).toEqual(1758818);
77+
expect(longCountJDN([8, 4, 5, 17, 11])).toEqual(1767234);
78+
expect(longCountJDN([8, 5, 3, 3, 5])).toEqual(1773428);
79+
expect(longCountJDN([8, 5, 16, 9, 7])).toEqual(1778230);
80+
expect(longCountJDN([8, 6, 2, 4, 17])).toEqual(1780300);
81+
expect(longCountJDN([11, 16, 0, 0, 0])).toEqual(2283483);
82+
expect(longCountJDN([0, 0, 0, 0, 0])).toEqual(584283);
83+
expect(longCountJDN([1, 0, 0, 0, 0])).toEqual(728283);
84+
expect(longCountJDN([2, 0, 0, 0, 0])).toEqual(872283);
85+
expect(longCountJDN([3, 0, 0, 0, 0])).toEqual(1016283);
86+
expect(longCountJDN([4, 0, 0, 0, 0])).toEqual(1160283);
87+
expect(longCountJDN([5, 0, 0, 0, 0])).toEqual(1304283);
88+
expect(longCountJDN([6, 0, 0, 0, 0])).toEqual(1448283);
89+
expect(longCountJDN([7, 0, 0, 0, 0])).toEqual(1592283);
90+
expect(longCountJDN([8, 0, 0, 0, 0])).toEqual(1736283);
91+
expect(longCountJDN([9, 0, 0, 0, 0])).toEqual(1880283);
92+
expect(longCountJDN([10, 0, 0, 0, 0])).toEqual(2024283);
93+
expect(longCountJDN([11, 0, 0, 0, 0])).toEqual(2168283);
94+
expect(longCountJDN([12, 0, 0, 0, 0])).toEqual(2312283);
95+
expect(longCountJDN([13, 0, 0, 0, 0])).toEqual(2456283);
96+
expect(longCountJDN([14, 0, 0, 0, 0])).toEqual(2600283);
97+
expect(longCountJDN([15, 0, 0, 0, 0])).toEqual(2744283);
98+
expect(longCountJDN([16, 0, 0, 0, 0])).toEqual(2888283);
99+
expect(longCountJDN([17, 0, 0, 0, 0])).toEqual(3032283);
100+
expect(longCountJDN([18, 0, 0, 0, 0])).toEqual(3176283);
101+
expect(longCountJDN([19, 0, 0, 0, 0])).toEqual(3320283);
102+
expect(longCountJDN([1, 0, 0, 0, 0, 0])).toEqual(3464283);
103+
expect(longCountJDN([9, 8, 9, 13, 0])).toEqual(1941383);
104+
});
105+
106+
it('works for insane dates in the future', () => {
107+
expect(longCountJDN([1, 5, 13, 5, 5, 4, 0, 11, 13, 13])).toEqual(591279564516);
108+
expect(longCountJDN([1, 4, 15, 12, 19, 13, 13, 3, 8, 15])).toEqual(570988471138);
109+
expect(longCountJDN([7, 4, 9, 1, 6, 3, 13, 14, 18])).toEqual(166410754861);
110+
expect(longCountJDN([7, 13, 6, 10, 7, 1, 19, 4, 16])).toEqual(176632006419);
111+
expect(longCountJDN([1, 8, 6, 9, 2, 3, 17, 16, 10, 2])).toEqual(652557304645);
112+
expect(longCountJDN([6, 1, 15, 16, 19, 2, 7, 1, 19])).toEqual(140305417242);
113+
expect(longCountJDN([1, 14, 19, 11, 2, 0, 8, 0, 8, 15])).toEqual(805888002058);
114+
expect(longCountJDN([7, 13, 3, 1, 11, 5, 16, 7, 19])).toEqual(176433890202);
115+
expect(longCountJDN([14, 8, 1, 18, 17, 10, 5, 13, 18])).toEqual(331888546361);
116+
expect(longCountJDN([1, 8, 10, 12, 11, 2, 1, 14, 0, 13])).toEqual(657363764536);
117+
});
118+
});

common/src/longCount.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,3 +18,11 @@ export function jdnLongCount(jdn: number): LongCount | null {
1818

1919
return parts.reverse();
2020
}
21+
22+
export function longCountJDN(longCount: LongCount): number {
23+
const state = [...longCount];
24+
const last = (state.pop() ?? 0) + (state.pop() ?? 0) * 20;
25+
let sum = 0;
26+
state.forEach((value) => sum = sum * 20 + value);
27+
return sum * 360 + last + 584283;
28+
}

0 commit comments

Comments
 (0)