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); }); });