Check the Horizons vectors against the bodies.json the app ships, and every rate Standish's rows give
The frozen Horizons tests ran on a hand copy of seventeen records, so an ETL that lost Standish's a, e and i rates, or Io's and Europa's backward periapses, wrote a bodies.json that passed both its own validators and the whole unit suite: the data-refresh job's "Unit tests against the new data" read none of it. record() now takes kind, orbit, rates, laplacePole, parentBodyId and massRatio from src/assets/data/bodies.json, read with node:fs as texture-catalog.spec.ts reads its JPEG, and the copy is gone. Today's data passes as the copy did (all seventeen were identical). The parser test checked only the mean motion and the periapsis rate on Earth's row. It now checks the node, a, e and i rates too, against Standish's Table 2a (-0.24123856, -0.00000003, -0.00003661, -0.01337178 a century). Dropped, those rates move Saturn 0.66 degrees at AD 1 (node) and 0.36 at AD 3000 (a, e, i), where no date from 1950 to 2100 shows more than 0.036. Guarded mutants, each run on the full suite: - bodies.json without the a, e and i rates, as that ETL writes it: 'puts saturn within 0.1 degrees of Horizons on JD 2816787.5' and Earth's fail (and the new orbit-line test, on the same data). - bodies.json with Io's and Europa's periapsis rates turned positive: Io's and Europa's 1950 tests fail. - the parser without its a, e and i rates, and with a node rate of 0: 'gives the rates per day' fails, and only it. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -96,6 +96,13 @@ describe('parsePlanetMeanElements', () => {
|
||||
// 35 999.373 degrees a century is the sidereal year.
|
||||
expect(360 / rates.meanMotionDegPerDay).toBeCloseTo(365.2564, 4);
|
||||
expect(rates.argumentOfPeriapsisDegPerDay * 36525).toBeCloseTo(0.3179526 + 0.24123856, 8);
|
||||
// And every other rate the row gives, a century's worth: dropped, Saturn moved 0.66 degrees by
|
||||
// AD 1 without its node's and 0.36 by AD 3000 without its a, e and i, where no date from 1950 to
|
||||
// 2100 shows more than 0.036.
|
||||
expect(rates.longitudeOfAscendingNodeDegPerDay * 36525).toBeCloseTo(-0.24123856, 8);
|
||||
expect(rates.semiMajorAxisAuPerDay! * 36525).toBeCloseTo(-0.00000003, 8);
|
||||
expect(rates.eccentricityPerDay! * 36525).toBeCloseTo(-0.00003661, 8);
|
||||
expect(rates.inclinationDegPerDay! * 36525).toBeCloseTo(-0.01337178, 8);
|
||||
});
|
||||
|
||||
it('carries Table 2b’s terms for Jupiter and beyond, and none for the inner planets', () => {
|
||||
|
||||
Reference in New Issue
Block a user