Files
KSP-MissionControl/packages/orbital-math/tests/kepler.test.ts
T

37 lines
1.0 KiB
TypeScript

import { describe, it, expect } from 'vitest';
import { solveKepler } from '../src/kepler.js';
describe('solveKepler', () => {
it('returns 0 for M=0, e=0', () => {
expect(solveKepler(0, 0)).toBeCloseTo(0, 10);
});
it('returns M for e=0 (circular orbit)', () => {
const M = 1.234;
expect(solveKepler(M, 0)).toBeCloseTo(M, 10);
});
it('solves low-eccentricity orbits', () => {
// E ≈ M + e·sin(M) is the first-order correction
const e = 0.1;
const M = 0.5;
const E = solveKepler(M, e);
const residual = E - e * Math.sin(E) - M;
expect(residual).toBeCloseTo(0, 10);
});
it('solves high-eccentricity orbits (e=0.9)', () => {
const e = 0.9;
const M = 1.0;
const E = solveKepler(M, e);
const residual = E - e * Math.sin(E) - M;
expect(residual).toBeCloseTo(0, 10);
});
it('normalizes M to [-π, π]', () => {
// 3π and π are equivalent; should give the same E.
const e = 0.3;
expect(solveKepler(3 * Math.PI, e)).toBeCloseTo(solveKepler(Math.PI, e), 10);
});
});