common: add tests for jdnTzolkin

This commit is contained in:
Quantum 2025-06-19 01:09:37 -04:00
parent d0d2ebcac5
commit 36484c19ab

View file

@ -1,4 +1,4 @@
import {TzolkinName, tzolkinName, formatTzolkin} from './mayan'; import {formatTzolkin, jdnTzolkin, TzolkinName, tzolkinName} from './mayan';
describe('tzolkinName', () => { describe('tzolkinName', () => {
it('should return correct name for IMIX', () => { it('should return correct name for IMIX', () => {
@ -27,3 +27,56 @@ describe('formatTzolkin', () => {
expect(formatTzolkin({number: 7, name: TzolkinName.KABAN})).toBe('7 Kabʼan'); expect(formatTzolkin({number: 7, name: TzolkinName.KABAN})).toBe('7 Kabʼan');
}); });
}); });
describe('jdnTzolkin', () => {
it('converts sample consecutive dates in June 2025 correctly', () => {
expect(jdnTzolkin(2460828)).toEqual({number: 12, name: TzolkinName.CHIKCHAN});
expect(jdnTzolkin(2460829)).toEqual({number: 13, name: TzolkinName.KIMI});
expect(jdnTzolkin(2460830)).toEqual({number: 1, name: TzolkinName.MANIK});
expect(jdnTzolkin(2460831)).toEqual({number: 2, name: TzolkinName.LAMAT});
expect(jdnTzolkin(2460832)).toEqual({number: 3, name: TzolkinName.MULUK});
expect(jdnTzolkin(2460833)).toEqual({number: 4, name: TzolkinName.OK});
expect(jdnTzolkin(2460834)).toEqual({number: 5, name: TzolkinName.CHUWEN});
expect(jdnTzolkin(2460835)).toEqual({number: 6, name: TzolkinName.EB});
expect(jdnTzolkin(2460836)).toEqual({number: 7, name: TzolkinName.BEN});
expect(jdnTzolkin(2460837)).toEqual({number: 8, name: TzolkinName.IX});
expect(jdnTzolkin(2460838)).toEqual({number: 9, name: TzolkinName.MEN});
expect(jdnTzolkin(2460839)).toEqual({number: 10, name: TzolkinName.KIB});
expect(jdnTzolkin(2460840)).toEqual({number: 11, name: TzolkinName.KABAN});
expect(jdnTzolkin(2460841)).toEqual({number: 12, name: TzolkinName.ETZNAB});
expect(jdnTzolkin(2460842)).toEqual({number: 13, name: TzolkinName.KAWAK});
expect(jdnTzolkin(2460843)).toEqual({number: 1, name: TzolkinName.AJAW});
expect(jdnTzolkin(2460844)).toEqual({number: 2, name: TzolkinName.IMIX});
expect(jdnTzolkin(2460845)).toEqual({number: 3, name: TzolkinName.IK});
expect(jdnTzolkin(2460846)).toEqual({number: 4, name: TzolkinName.AKBAL});
expect(jdnTzolkin(2460847)).toEqual({number: 5, name: TzolkinName.KAN});
expect(jdnTzolkin(2460848)).toEqual({number: 6, name: TzolkinName.CHIKCHAN});
expect(jdnTzolkin(2460849)).toEqual({number: 7, name: TzolkinName.KIMI});
expect(jdnTzolkin(2460850)).toEqual({number: 8, name: TzolkinName.MANIK});
expect(jdnTzolkin(2460851)).toEqual({number: 9, name: TzolkinName.LAMAT});
expect(jdnTzolkin(2460852)).toEqual({number: 10, name: TzolkinName.MULUK});
expect(jdnTzolkin(2460853)).toEqual({number: 11, name: TzolkinName.OK});
expect(jdnTzolkin(2460854)).toEqual({number: 12, name: TzolkinName.CHUWEN});
expect(jdnTzolkin(2460855)).toEqual({number: 13, name: TzolkinName.EB});
expect(jdnTzolkin(2460856)).toEqual({number: 1, name: TzolkinName.BEN});
expect(jdnTzolkin(2460857)).toEqual({number: 2, name: TzolkinName.IX});
});
it('handles negative JDN correctly', () => {
expect(jdnTzolkin(-1)).toEqual({number: 5, name: TzolkinName.KIB});
expect(jdnTzolkin(-10)).toEqual({number: 9, name: TzolkinName.MANIK});
expect(jdnTzolkin(-100)).toEqual({number: 10, name: TzolkinName.KABAN});
expect(jdnTzolkin(-1000)).toEqual({number: 7, name: TzolkinName.KABAN});
});
it('completes a full Tzolkin cycle across JD0', () => {
const results = new Set();
for (let i = -130; i < 130; i++) {
results.add(formatTzolkin(jdnTzolkin(i)));
}
// Should have 260 unique combinations
expect(results.size).toBe(260);
});
});