@interstellar-tools/equations 0.49.0 → 0.51.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (230) hide show
  1. package/dist/categories/angle/compute-angle.d.ts +1 -1
  2. package/dist/categories/angle/compute-angle.js +4 -4
  3. package/dist/categories/angle/compute-angle.js.map +1 -1
  4. package/dist/categories/anomalies/mean-to-eccentric-anomaly.d.ts +1 -1
  5. package/dist/categories/anomalies/mean-to-eccentric-anomaly.js +4 -4
  6. package/dist/categories/anomalies/mean-to-eccentric-anomaly.js.map +1 -1
  7. package/dist/categories/anomalies/true-to-mean-anomaly.d.ts +1 -1
  8. package/dist/categories/anomalies/true-to-mean-anomaly.js +2 -2
  9. package/dist/categories/anomalies/true-to-mean-anomaly.js.map +1 -1
  10. package/dist/categories/cartography/body-fixed-from-inertial-dcm-iau.js +3 -3
  11. package/dist/categories/cartography/body-fixed-from-inertial-dcm-iau.js.map +1 -1
  12. package/dist/categories/gravity/acceleration-on1-by2.js +1 -1
  13. package/dist/categories/gravity/acceleration-on1-by2.js.map +1 -1
  14. package/dist/categories/gravity/force-on1-by2.js +1 -1
  15. package/dist/categories/gravity/force-on1-by2.js.map +1 -1
  16. package/dist/categories/kepler/solve-kepler-high-eccentricity.d.ts +1 -1
  17. package/dist/categories/kepler/solve-kepler-high-eccentricity.js +2 -2
  18. package/dist/categories/kepler/solve-kepler-high-eccentricity.js.map +1 -1
  19. package/dist/categories/kepler/solve-kepler.d.ts +1 -1
  20. package/dist/categories/kepler/solve-kepler.js +5 -5
  21. package/dist/categories/kepler/solve-kepler.js.map +1 -1
  22. package/dist/index.d.ts +49 -49
  23. package/dist/index.d.ts.map +1 -1
  24. package/dist/index.js +49 -49
  25. package/dist/index.js.map +1 -1
  26. package/package.json +4 -4
  27. package/dist/__tests__/helpers/index.d.ts +0 -9
  28. package/dist/__tests__/helpers/index.d.ts.map +0 -1
  29. package/dist/__tests__/helpers/index.js +0 -45
  30. package/dist/__tests__/helpers/index.js.map +0 -1
  31. package/dist/categories/angle/__tests__/compute-angle.int.spec.d.ts +0 -2
  32. package/dist/categories/angle/__tests__/compute-angle.int.spec.d.ts.map +0 -1
  33. package/dist/categories/angle/__tests__/compute-angle.int.spec.js +0 -62
  34. package/dist/categories/angle/__tests__/compute-angle.int.spec.js.map +0 -1
  35. package/dist/categories/angle/__tests__/wrap-angle.spec.d.ts +0 -2
  36. package/dist/categories/angle/__tests__/wrap-angle.spec.d.ts.map +0 -1
  37. package/dist/categories/angle/__tests__/wrap-angle.spec.js +0 -60
  38. package/dist/categories/angle/__tests__/wrap-angle.spec.js.map +0 -1
  39. package/dist/categories/anomalies/__tests__/eccentric-to-true-anomaly.spec.d.ts +0 -2
  40. package/dist/categories/anomalies/__tests__/eccentric-to-true-anomaly.spec.d.ts.map +0 -1
  41. package/dist/categories/anomalies/__tests__/eccentric-to-true-anomaly.spec.js +0 -33
  42. package/dist/categories/anomalies/__tests__/eccentric-to-true-anomaly.spec.js.map +0 -1
  43. package/dist/categories/anomalies/__tests__/mean-to-eccentric-anomaly.spec.d.ts +0 -2
  44. package/dist/categories/anomalies/__tests__/mean-to-eccentric-anomaly.spec.d.ts.map +0 -1
  45. package/dist/categories/anomalies/__tests__/mean-to-eccentric-anomaly.spec.js +0 -197
  46. package/dist/categories/anomalies/__tests__/mean-to-eccentric-anomaly.spec.js.map +0 -1
  47. package/dist/categories/anomalies/__tests__/true-to-mean-anomaly.spec.d.ts +0 -2
  48. package/dist/categories/anomalies/__tests__/true-to-mean-anomaly.spec.d.ts.map +0 -1
  49. package/dist/categories/anomalies/__tests__/true-to-mean-anomaly.spec.js +0 -46
  50. package/dist/categories/anomalies/__tests__/true-to-mean-anomaly.spec.js.map +0 -1
  51. package/dist/categories/cartography/__tests__/body-fixed-from-inertial-dcm-iau.int.spec.d.ts +0 -2
  52. package/dist/categories/cartography/__tests__/body-fixed-from-inertial-dcm-iau.int.spec.d.ts.map +0 -1
  53. package/dist/categories/cartography/__tests__/body-fixed-from-inertial-dcm-iau.int.spec.js +0 -56
  54. package/dist/categories/cartography/__tests__/body-fixed-from-inertial-dcm-iau.int.spec.js.map +0 -1
  55. package/dist/categories/cartography/__tests__/eccentricity-squared-oblate-spheroid.spec.d.ts +0 -2
  56. package/dist/categories/cartography/__tests__/eccentricity-squared-oblate-spheroid.spec.d.ts.map +0 -1
  57. package/dist/categories/cartography/__tests__/eccentricity-squared-oblate-spheroid.spec.js +0 -60
  58. package/dist/categories/cartography/__tests__/eccentricity-squared-oblate-spheroid.spec.js.map +0 -1
  59. package/dist/categories/cartography/__tests__/flattening-oblate-spheroid.spec.d.ts +0 -2
  60. package/dist/categories/cartography/__tests__/flattening-oblate-spheroid.spec.d.ts.map +0 -1
  61. package/dist/categories/cartography/__tests__/flattening-oblate-spheroid.spec.js +0 -60
  62. package/dist/categories/cartography/__tests__/flattening-oblate-spheroid.spec.js.map +0 -1
  63. package/dist/categories/cartography/__tests__/is-on-triaxial-ellipsoid-surface.spec.d.ts +0 -2
  64. package/dist/categories/cartography/__tests__/is-on-triaxial-ellipsoid-surface.spec.d.ts.map +0 -1
  65. package/dist/categories/cartography/__tests__/is-on-triaxial-ellipsoid-surface.spec.js +0 -73
  66. package/dist/categories/cartography/__tests__/is-on-triaxial-ellipsoid-surface.spec.js.map +0 -1
  67. package/dist/categories/cartography/__tests__/planetocentric-latitude.spec.d.ts +0 -2
  68. package/dist/categories/cartography/__tests__/planetocentric-latitude.spec.d.ts.map +0 -1
  69. package/dist/categories/cartography/__tests__/planetocentric-latitude.spec.js +0 -69
  70. package/dist/categories/cartography/__tests__/planetocentric-latitude.spec.js.map +0 -1
  71. package/dist/categories/cartography/__tests__/planetographic-latitude-oblate.spec.d.ts +0 -2
  72. package/dist/categories/cartography/__tests__/planetographic-latitude-oblate.spec.d.ts.map +0 -1
  73. package/dist/categories/cartography/__tests__/planetographic-latitude-oblate.spec.js +0 -103
  74. package/dist/categories/cartography/__tests__/planetographic-latitude-oblate.spec.js.map +0 -1
  75. package/dist/categories/gravity/__tests__/gravitational-acceleration-on1-by2.int.spec.d.ts +0 -2
  76. package/dist/categories/gravity/__tests__/gravitational-acceleration-on1-by2.int.spec.d.ts.map +0 -1
  77. package/dist/categories/gravity/__tests__/gravitational-acceleration-on1-by2.int.spec.js +0 -87
  78. package/dist/categories/gravity/__tests__/gravitational-acceleration-on1-by2.int.spec.js.map +0 -1
  79. package/dist/categories/gravity/__tests__/gravitational-force-on1-by2.int.spec.d.ts +0 -2
  80. package/dist/categories/gravity/__tests__/gravitational-force-on1-by2.int.spec.d.ts.map +0 -1
  81. package/dist/categories/gravity/__tests__/gravitational-force-on1-by2.int.spec.js +0 -107
  82. package/dist/categories/gravity/__tests__/gravitational-force-on1-by2.int.spec.js.map +0 -1
  83. package/dist/categories/gravity/__tests__/gravitational-force.spec.d.ts +0 -2
  84. package/dist/categories/gravity/__tests__/gravitational-force.spec.d.ts.map +0 -1
  85. package/dist/categories/gravity/__tests__/gravitational-force.spec.js +0 -106
  86. package/dist/categories/gravity/__tests__/gravitational-force.spec.js.map +0 -1
  87. package/dist/categories/gravity/__tests__/gravitational-parameters.spec.d.ts +0 -2
  88. package/dist/categories/gravity/__tests__/gravitational-parameters.spec.d.ts.map +0 -1
  89. package/dist/categories/gravity/__tests__/gravitational-parameters.spec.js +0 -75
  90. package/dist/categories/gravity/__tests__/gravitational-parameters.spec.js.map +0 -1
  91. package/dist/categories/helpers/__tests__/apply-matrix-3.spec.d.ts +0 -2
  92. package/dist/categories/helpers/__tests__/apply-matrix-3.spec.d.ts.map +0 -1
  93. package/dist/categories/helpers/__tests__/apply-matrix-3.spec.js +0 -79
  94. package/dist/categories/helpers/__tests__/apply-matrix-3.spec.js.map +0 -1
  95. package/dist/categories/helpers/__tests__/det-3.spec.d.ts +0 -2
  96. package/dist/categories/helpers/__tests__/det-3.spec.d.ts.map +0 -1
  97. package/dist/categories/helpers/__tests__/det-3.spec.js +0 -73
  98. package/dist/categories/helpers/__tests__/det-3.spec.js.map +0 -1
  99. package/dist/categories/helpers/__tests__/mat-mul3.spec.d.ts +0 -2
  100. package/dist/categories/helpers/__tests__/mat-mul3.spec.d.ts.map +0 -1
  101. package/dist/categories/helpers/__tests__/mat-mul3.spec.js +0 -86
  102. package/dist/categories/helpers/__tests__/mat-mul3.spec.js.map +0 -1
  103. package/dist/categories/helpers/__tests__/misc.spec.d.ts +0 -2
  104. package/dist/categories/helpers/__tests__/misc.spec.d.ts.map +0 -1
  105. package/dist/categories/helpers/__tests__/misc.spec.js +0 -101
  106. package/dist/categories/helpers/__tests__/misc.spec.js.map +0 -1
  107. package/dist/categories/helpers/__tests__/radians.spec.d.ts +0 -2
  108. package/dist/categories/helpers/__tests__/radians.spec.d.ts.map +0 -1
  109. package/dist/categories/helpers/__tests__/radians.spec.js +0 -37
  110. package/dist/categories/helpers/__tests__/radians.spec.js.map +0 -1
  111. package/dist/categories/helpers/__tests__/rot-1.spec.d.ts +0 -2
  112. package/dist/categories/helpers/__tests__/rot-1.spec.d.ts.map +0 -1
  113. package/dist/categories/helpers/__tests__/rot-1.spec.js +0 -59
  114. package/dist/categories/helpers/__tests__/rot-1.spec.js.map +0 -1
  115. package/dist/categories/helpers/__tests__/rot-3.spec.d.ts +0 -2
  116. package/dist/categories/helpers/__tests__/rot-3.spec.d.ts.map +0 -1
  117. package/dist/categories/helpers/__tests__/rot-3.spec.js +0 -65
  118. package/dist/categories/helpers/__tests__/rot-3.spec.js.map +0 -1
  119. package/dist/categories/kepler/__tests__/solve-kepler-bisection.spec.d.ts +0 -2
  120. package/dist/categories/kepler/__tests__/solve-kepler-bisection.spec.d.ts.map +0 -1
  121. package/dist/categories/kepler/__tests__/solve-kepler-bisection.spec.js +0 -86
  122. package/dist/categories/kepler/__tests__/solve-kepler-bisection.spec.js.map +0 -1
  123. package/dist/categories/kepler/__tests__/solve-kepler-high-eccentricity.spec.d.ts +0 -2
  124. package/dist/categories/kepler/__tests__/solve-kepler-high-eccentricity.spec.d.ts.map +0 -1
  125. package/dist/categories/kepler/__tests__/solve-kepler-high-eccentricity.spec.js +0 -81
  126. package/dist/categories/kepler/__tests__/solve-kepler-high-eccentricity.spec.js.map +0 -1
  127. package/dist/categories/kepler/__tests__/solve-kepler-newton-raphson.spec.d.ts +0 -2
  128. package/dist/categories/kepler/__tests__/solve-kepler-newton-raphson.spec.d.ts.map +0 -1
  129. package/dist/categories/kepler/__tests__/solve-kepler-newton-raphson.spec.js +0 -50
  130. package/dist/categories/kepler/__tests__/solve-kepler-newton-raphson.spec.js.map +0 -1
  131. package/dist/categories/kepler/__tests__/solve-kepler.int.spec.d.ts +0 -2
  132. package/dist/categories/kepler/__tests__/solve-kepler.int.spec.d.ts.map +0 -1
  133. package/dist/categories/kepler/__tests__/solve-kepler.int.spec.js +0 -76
  134. package/dist/categories/kepler/__tests__/solve-kepler.int.spec.js.map +0 -1
  135. package/dist/categories/manoeuvres/__tests__/combine-burns-delta-v.spec.d.ts +0 -2
  136. package/dist/categories/manoeuvres/__tests__/combine-burns-delta-v.spec.d.ts.map +0 -1
  137. package/dist/categories/manoeuvres/__tests__/combine-burns-delta-v.spec.js +0 -103
  138. package/dist/categories/manoeuvres/__tests__/combine-burns-delta-v.spec.js.map +0 -1
  139. package/dist/categories/manoeuvres/__tests__/gravity-assist-turning-angle.spec.d.ts +0 -2
  140. package/dist/categories/manoeuvres/__tests__/gravity-assist-turning-angle.spec.d.ts.map +0 -1
  141. package/dist/categories/manoeuvres/__tests__/gravity-assist-turning-angle.spec.js +0 -89
  142. package/dist/categories/manoeuvres/__tests__/gravity-assist-turning-angle.spec.js.map +0 -1
  143. package/dist/categories/manoeuvres/__tests__/hohmann-transfer.spec.d.ts +0 -2
  144. package/dist/categories/manoeuvres/__tests__/hohmann-transfer.spec.d.ts.map +0 -1
  145. package/dist/categories/manoeuvres/__tests__/hohmann-transfer.spec.js +0 -101
  146. package/dist/categories/manoeuvres/__tests__/hohmann-transfer.spec.js.map +0 -1
  147. package/dist/categories/manoeuvres/__tests__/oberth-energy-gain.spec.d.ts +0 -2
  148. package/dist/categories/manoeuvres/__tests__/oberth-energy-gain.spec.d.ts.map +0 -1
  149. package/dist/categories/manoeuvres/__tests__/oberth-energy-gain.spec.js +0 -71
  150. package/dist/categories/manoeuvres/__tests__/oberth-energy-gain.spec.js.map +0 -1
  151. package/dist/categories/manoeuvres/__tests__/plane-change-delta-v.spec.d.ts +0 -2
  152. package/dist/categories/manoeuvres/__tests__/plane-change-delta-v.spec.d.ts.map +0 -1
  153. package/dist/categories/manoeuvres/__tests__/plane-change-delta-v.spec.js +0 -90
  154. package/dist/categories/manoeuvres/__tests__/plane-change-delta-v.spec.js.map +0 -1
  155. package/dist/categories/manoeuvres/__tests__/rocket-delta-v-from-isp.spec.d.ts +0 -2
  156. package/dist/categories/manoeuvres/__tests__/rocket-delta-v-from-isp.spec.d.ts.map +0 -1
  157. package/dist/categories/manoeuvres/__tests__/rocket-delta-v-from-isp.spec.js +0 -84
  158. package/dist/categories/manoeuvres/__tests__/rocket-delta-v-from-isp.spec.js.map +0 -1
  159. package/dist/categories/manoeuvres/__tests__/rocket-delta-v-from-ve.spec.d.ts +0 -2
  160. package/dist/categories/manoeuvres/__tests__/rocket-delta-v-from-ve.spec.d.ts.map +0 -1
  161. package/dist/categories/manoeuvres/__tests__/rocket-delta-v-from-ve.spec.js +0 -65
  162. package/dist/categories/manoeuvres/__tests__/rocket-delta-v-from-ve.spec.js.map +0 -1
  163. package/dist/categories/orbits/__tests__/atmospheric-drag-acceleration.spec.d.ts +0 -2
  164. package/dist/categories/orbits/__tests__/atmospheric-drag-acceleration.spec.d.ts.map +0 -1
  165. package/dist/categories/orbits/__tests__/atmospheric-drag-acceleration.spec.js +0 -71
  166. package/dist/categories/orbits/__tests__/atmospheric-drag-acceleration.spec.js.map +0 -1
  167. package/dist/categories/orbits/__tests__/characteristic-energy-c3.spec.d.ts +0 -2
  168. package/dist/categories/orbits/__tests__/characteristic-energy-c3.spec.d.ts.map +0 -1
  169. package/dist/categories/orbits/__tests__/characteristic-energy-c3.spec.js +0 -36
  170. package/dist/categories/orbits/__tests__/characteristic-energy-c3.spec.js.map +0 -1
  171. package/dist/categories/orbits/__tests__/circular-speed.spec.d.ts +0 -2
  172. package/dist/categories/orbits/__tests__/circular-speed.spec.d.ts.map +0 -1
  173. package/dist/categories/orbits/__tests__/circular-speed.spec.js +0 -69
  174. package/dist/categories/orbits/__tests__/circular-speed.spec.js.map +0 -1
  175. package/dist/categories/orbits/__tests__/cw-hill-derivatives.spec.d.ts +0 -2
  176. package/dist/categories/orbits/__tests__/cw-hill-derivatives.spec.d.ts.map +0 -1
  177. package/dist/categories/orbits/__tests__/cw-hill-derivatives.spec.js +0 -64
  178. package/dist/categories/orbits/__tests__/cw-hill-derivatives.spec.js.map +0 -1
  179. package/dist/categories/orbits/__tests__/escape-speed.spec.d.ts +0 -2
  180. package/dist/categories/orbits/__tests__/escape-speed.spec.d.ts.map +0 -1
  181. package/dist/categories/orbits/__tests__/escape-speed.spec.js +0 -79
  182. package/dist/categories/orbits/__tests__/escape-speed.spec.js.map +0 -1
  183. package/dist/categories/orbits/__tests__/flight-path-angle-from-true-anomaly.spec.d.ts +0 -2
  184. package/dist/categories/orbits/__tests__/flight-path-angle-from-true-anomaly.spec.d.ts.map +0 -1
  185. package/dist/categories/orbits/__tests__/flight-path-angle-from-true-anomaly.spec.js +0 -92
  186. package/dist/categories/orbits/__tests__/flight-path-angle-from-true-anomaly.spec.js.map +0 -1
  187. package/dist/categories/orbits/__tests__/hyperbolic-periapsis-speed.spec.d.ts +0 -2
  188. package/dist/categories/orbits/__tests__/hyperbolic-periapsis-speed.spec.d.ts.map +0 -1
  189. package/dist/categories/orbits/__tests__/hyperbolic-periapsis-speed.spec.js +0 -64
  190. package/dist/categories/orbits/__tests__/hyperbolic-periapsis-speed.spec.js.map +0 -1
  191. package/dist/categories/orbits/__tests__/j2-argument-of-perigee-rate.spec.d.ts +0 -2
  192. package/dist/categories/orbits/__tests__/j2-argument-of-perigee-rate.spec.d.ts.map +0 -1
  193. package/dist/categories/orbits/__tests__/j2-argument-of-perigee-rate.spec.js +0 -104
  194. package/dist/categories/orbits/__tests__/j2-argument-of-perigee-rate.spec.js.map +0 -1
  195. package/dist/categories/orbits/__tests__/j2-nodal-precession-rate.spec.d.ts +0 -2
  196. package/dist/categories/orbits/__tests__/j2-nodal-precession-rate.spec.d.ts.map +0 -1
  197. package/dist/categories/orbits/__tests__/j2-nodal-precession-rate.spec.js +0 -99
  198. package/dist/categories/orbits/__tests__/j2-nodal-precession-rate.spec.js.map +0 -1
  199. package/dist/categories/orbits/__tests__/kepler-period.spec.d.ts +0 -2
  200. package/dist/categories/orbits/__tests__/kepler-period.spec.d.ts.map +0 -1
  201. package/dist/categories/orbits/__tests__/kepler-period.spec.js +0 -72
  202. package/dist/categories/orbits/__tests__/kepler-period.spec.js.map +0 -1
  203. package/dist/categories/orbits/__tests__/mean-motion.spec.d.ts +0 -2
  204. package/dist/categories/orbits/__tests__/mean-motion.spec.d.ts.map +0 -1
  205. package/dist/categories/orbits/__tests__/mean-motion.spec.js +0 -48
  206. package/dist/categories/orbits/__tests__/mean-motion.spec.js.map +0 -1
  207. package/dist/categories/orbits/__tests__/peri-apoapsis-radii.spec.d.ts +0 -2
  208. package/dist/categories/orbits/__tests__/peri-apoapsis-radii.spec.d.ts.map +0 -1
  209. package/dist/categories/orbits/__tests__/peri-apoapsis-radii.spec.js +0 -74
  210. package/dist/categories/orbits/__tests__/peri-apoapsis-radii.spec.js.map +0 -1
  211. package/dist/categories/orbits/__tests__/specific-angular-momentum-from-elements.spec.d.ts +0 -2
  212. package/dist/categories/orbits/__tests__/specific-angular-momentum-from-elements.spec.d.ts.map +0 -1
  213. package/dist/categories/orbits/__tests__/specific-angular-momentum-from-elements.spec.js +0 -86
  214. package/dist/categories/orbits/__tests__/specific-angular-momentum-from-elements.spec.js.map +0 -1
  215. package/dist/categories/orbits/__tests__/specific-angular-momentum.spec.d.ts +0 -2
  216. package/dist/categories/orbits/__tests__/specific-angular-momentum.spec.d.ts.map +0 -1
  217. package/dist/categories/orbits/__tests__/specific-angular-momentum.spec.js +0 -85
  218. package/dist/categories/orbits/__tests__/specific-angular-momentum.spec.js.map +0 -1
  219. package/dist/categories/orbits/__tests__/specific-mechanical-energy.spec.d.ts +0 -2
  220. package/dist/categories/orbits/__tests__/specific-mechanical-energy.spec.d.ts.map +0 -1
  221. package/dist/categories/orbits/__tests__/specific-mechanical-energy.spec.js +0 -81
  222. package/dist/categories/orbits/__tests__/specific-mechanical-energy.spec.js.map +0 -1
  223. package/dist/categories/orbits/__tests__/sphere-of-influence-radius.spec.d.ts +0 -2
  224. package/dist/categories/orbits/__tests__/sphere-of-influence-radius.spec.d.ts.map +0 -1
  225. package/dist/categories/orbits/__tests__/sphere-of-influence-radius.spec.js +0 -62
  226. package/dist/categories/orbits/__tests__/sphere-of-influence-radius.spec.js.map +0 -1
  227. package/dist/categories/orbits/__tests__/vis-viva-speed.spec.d.ts +0 -2
  228. package/dist/categories/orbits/__tests__/vis-viva-speed.spec.d.ts.map +0 -1
  229. package/dist/categories/orbits/__tests__/vis-viva-speed.spec.js +0 -80
  230. package/dist/categories/orbits/__tests__/vis-viva-speed.spec.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"eccentricity-squared-oblate-spheroid.spec.js","sourceRoot":"","sources":["../../../../src/categories/cartography/__tests__/eccentricity-squared-oblate-spheroid.spec.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=flattening-oblate-spheroid.spec.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"flattening-oblate-spheroid.spec.d.ts","sourceRoot":"","sources":["../../../../src/categories/cartography/__tests__/flattening-oblate-spheroid.spec.ts"],"names":[],"mappings":""}
@@ -1,60 +0,0 @@
1
- import assert from 'node:assert/strict';
2
- import test, { describe } from 'node:test';
3
- import { flatteningOblateSpheroid } from '../flattening-oblate-spheroid';
4
- import { relClose } from 'packages/equations/src/__tests__/helpers';
5
- describe('flatteningOblateSpheroid', () => {
6
- test('computes f = (a - c) / a for typical Earth-like radii (WGS84-ish)', () => {
7
- const a = 6378137.0; // m (equatorial)
8
- const c = 6356752.314245; // m (polar)
9
- const f = flatteningOblateSpheroid(a, c);
10
- const expected = (a - c) / a;
11
- relClose(f, expected);
12
- // sanity: Earth flattening is ~1/298.257... ≈ 0.0033528 (ballpark)
13
- assert.ok(f > 0 && f < 0.01, `unexpected flattening magnitude: ${f}`);
14
- });
15
- test('returns 0 for a perfect sphere (a === c)', () => {
16
- const a = 10;
17
- const c = 10;
18
- const f = flatteningOblateSpheroid(a, c);
19
- // exactly 0 with identical numbers; tolerant check is fine
20
- relClose(f, 0);
21
- });
22
- test('increases as c decreases for fixed a (more flattened => larger f)', () => {
23
- const a = 10;
24
- const fLessFlat = flatteningOblateSpheroid(a, 9.9);
25
- const fMoreFlat = flatteningOblateSpheroid(a, 9.0);
26
- assert.ok(fMoreFlat > fLessFlat, `expected f to increase with flattening: ${fLessFlat} -> ${fMoreFlat}`);
27
- });
28
- test('is dimensionless and within [0, 1) for physically valid oblate spheroids (a >= c > 0)', () => {
29
- const a = 10;
30
- const c = 7;
31
- const f = flatteningOblateSpheroid(a, c);
32
- assert.ok(f >= 0, `expected f >= 0, got ${f}`);
33
- assert.ok(f < 1, `expected f < 1, got ${f}`);
34
- });
35
- test('throws TypeError when a is not finite (NaN)', () => {
36
- assert.throws(() => flatteningOblateSpheroid(Number.NaN, 1), (err) => err instanceof TypeError &&
37
- err.message === 'a must be finite. Received: NaN');
38
- });
39
- test('throws TypeError when c is not finite (Infinity)', () => {
40
- assert.throws(() => flatteningOblateSpheroid(1, Number.POSITIVE_INFINITY), (err) => err instanceof TypeError &&
41
- err.message === 'c must be finite. Received: Infinity');
42
- });
43
- test('throws RangeError when a <= 0', () => {
44
- assert.throws(() => flatteningOblateSpheroid(0, 1), (err) => err instanceof RangeError &&
45
- err.message === 'a must be > 0. Received: 0');
46
- });
47
- test('throws RangeError when c <= 0', () => {
48
- assert.throws(() => flatteningOblateSpheroid(1, 0), (err) => err instanceof RangeError &&
49
- err.message === 'c must be > 0. Received: 0');
50
- });
51
- test('for prolate inputs (c > a), flattening becomes negative (still computed)', () => {
52
- // The function intentionally doesn't enforce a >= c; it only enforces positivity.
53
- // This test documents that behavior.
54
- const a = 10;
55
- const c = 11;
56
- const f = flatteningOblateSpheroid(a, c);
57
- assert.ok(f < 0, `expected f < 0 for c > a, got ${f}`);
58
- });
59
- });
60
- //# sourceMappingURL=flattening-oblate-spheroid.spec.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"flattening-oblate-spheroid.spec.js","sourceRoot":"","sources":["../../../../src/categories/cartography/__tests__/flattening-oblate-spheroid.spec.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=is-on-triaxial-ellipsoid-surface.spec.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"is-on-triaxial-ellipsoid-surface.spec.d.ts","sourceRoot":"","sources":["../../../../src/categories/cartography/__tests__/is-on-triaxial-ellipsoid-surface.spec.ts"],"names":[],"mappings":""}
@@ -1,73 +0,0 @@
1
- import assert from 'node:assert/strict';
2
- import test, { describe } from 'node:test';
3
- import { isOnTriaxialEllipsoidSurface } from '../is-on-triaxial-ellipsoid-surface';
4
- describe('isOnTriaxialEllipsoidSurface', () => {
5
- test('returns true for axis points on the surface: (a,0,0), (0,b,0), (0,0,c)', () => {
6
- const a = 3;
7
- const b = 2;
8
- const c = 1;
9
- assert.equal(isOnTriaxialEllipsoidSurface(a, 0, 0, a, b, c), true);
10
- assert.equal(isOnTriaxialEllipsoidSurface(0, b, 0, a, b, c), true);
11
- assert.equal(isOnTriaxialEllipsoidSurface(0, 0, c, a, b, c), true);
12
- });
13
- test('returns true for a known on-surface point (scaled direction vector)', () => {
14
- // Pick a direction (u,v,w), then scale so that x²/a² + y²/b² + z²/c² = 1.
15
- const a = 3;
16
- const b = 2;
17
- const c = 1;
18
- const u = 0.3;
19
- const v = -0.4;
20
- const w = 0.5;
21
- // Scale factor s such that:
22
- // (s*u)²/a² + (s*v)²/b² + (s*w)²/c² = 1 => s = 1 / sqrt( u²/a² + v²/b² + w²/c² )
23
- const denom = (u * u) / (a * a) + (v * v) / (b * b) + (w * w) / (c * c);
24
- const s = 1 / Math.sqrt(denom);
25
- const x = s * u;
26
- const y = s * v;
27
- const z = s * w;
28
- assert.equal(isOnTriaxialEllipsoidSurface(x, y, z, a, b, c), true);
29
- });
30
- test('returns false for an interior point (0,0,0)', () => {
31
- assert.equal(isOnTriaxialEllipsoidSurface(0, 0, 0, 3, 2, 1), false);
32
- });
33
- test('returns false for an exterior point (2a,0,0)', () => {
34
- const a = 3;
35
- assert.equal(isOnTriaxialEllipsoidSurface(2 * a, 0, 0, a, 2, 1), false);
36
- });
37
- test('eps controls tolerance (near-surface point passes only with looser eps)', () => {
38
- const a = 3;
39
- const b = 2;
40
- const c = 1;
41
- // Slightly off the +X axis surface point
42
- const x = a * 1.0000001;
43
- // With default eps=1e-12, should be false
44
- assert.equal(isOnTriaxialEllipsoidSurface(x, 0, 0, a, b, c), false);
45
- // With looser eps, should be true
46
- assert.equal(isOnTriaxialEllipsoidSurface(x, 0, 0, a, b, c, 1e-6), true);
47
- });
48
- test('throws TypeError when any input is not finite', () => {
49
- assert.throws(() => isOnTriaxialEllipsoidSurface(Number.NaN, 0, 0, 3, 2, 1), (err) => err instanceof TypeError &&
50
- err.message === 'x must be finite. Received: NaN');
51
- assert.throws(() => isOnTriaxialEllipsoidSurface(0, Number.POSITIVE_INFINITY, 0, 3, 2, 1), (err) => err instanceof TypeError &&
52
- err.message === 'y must be finite. Received: Infinity');
53
- assert.throws(() => isOnTriaxialEllipsoidSurface(0, 0, 0, 3, 2, 1, Number.NEGATIVE_INFINITY), (err) => err instanceof TypeError &&
54
- err.message === 'eps must be finite. Received: -Infinity');
55
- });
56
- test('throws RangeError when a <= 0', () => {
57
- assert.throws(() => isOnTriaxialEllipsoidSurface(0, 0, 0, 0, 2, 1), (err) => err instanceof RangeError &&
58
- err.message === 'a must be > 0. Received: 0');
59
- });
60
- test('throws RangeError when b <= 0', () => {
61
- assert.throws(() => isOnTriaxialEllipsoidSurface(0, 0, 0, 3, 0, 1), (err) => err instanceof RangeError &&
62
- err.message === 'b must be > 0. Received: 0');
63
- });
64
- test('throws RangeError when c <= 0', () => {
65
- assert.throws(() => isOnTriaxialEllipsoidSurface(0, 0, 0, 3, 2, 0), (err) => err instanceof RangeError &&
66
- err.message === 'c must be > 0. Received: 0');
67
- });
68
- test('throws RangeError when eps < 0', () => {
69
- assert.throws(() => isOnTriaxialEllipsoidSurface(0, 0, 0, 3, 2, 1, -1e-12), (err) => err instanceof RangeError &&
70
- err.message === 'eps must be >= 0. Received: -1e-12');
71
- });
72
- });
73
- //# sourceMappingURL=is-on-triaxial-ellipsoid-surface.spec.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"is-on-triaxial-ellipsoid-surface.spec.js","sourceRoot":"","sources":["../../../../src/categories/cartography/__tests__/is-on-triaxial-ellipsoid-surface.spec.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=planetocentric-latitude.spec.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"planetocentric-latitude.spec.d.ts","sourceRoot":"","sources":["../../../../src/categories/cartography/__tests__/planetocentric-latitude.spec.ts"],"names":[],"mappings":""}
@@ -1,69 +0,0 @@
1
- import assert from 'node:assert/strict';
2
- import test, { describe } from 'node:test';
3
- import { planetocentricLatitude } from '../planetocentric-latitude';
4
- import { absClose, relClose } from 'packages/equations/src/__tests__/helpers';
5
- describe('planetocentricLatitude', () => {
6
- test('returns 0 on the equatorial plane (z=0, x/y not both 0)', () => {
7
- const phi1 = planetocentricLatitude(1, 0, 0);
8
- const phi2 = planetocentricLatitude(0, 2, 0);
9
- const phi3 = planetocentricLatitude(3, 4, 0);
10
- absClose(phi1, 0, 1e-12);
11
- absClose(phi2, 0, 1e-12);
12
- absClose(phi3, 0, 1e-12);
13
- });
14
- test('returns +π/2 on +Z axis and -π/2 on -Z axis', () => {
15
- absClose(planetocentricLatitude(0, 0, 1), Math.PI / 2, 1e-12);
16
- absClose(planetocentricLatitude(0, 0, 10), Math.PI / 2, 1e-12);
17
- absClose(planetocentricLatitude(0, 0, -1), -Math.PI / 2, 1e-12);
18
- absClose(planetocentricLatitude(0, 0, -10), -Math.PI / 2, 1e-12);
19
- });
20
- test('matches atan2(z, hypot(x,y)) identity for a generic point', () => {
21
- const x = 3;
22
- const y = -4;
23
- const z = 5;
24
- const phi = planetocentricLatitude(x, y, z);
25
- const expected = Math.atan2(z, Math.hypot(x, y));
26
- relClose(phi, expected);
27
- });
28
- test('is invariant under scaling of (x,y,z) by a positive factor', () => {
29
- const x = 1.2;
30
- const y = -3.4;
31
- const z = 5.6;
32
- const phi = planetocentricLatitude(x, y, z);
33
- const phiScaled = planetocentricLatitude(10 * x, 10 * y, 10 * z);
34
- relClose(phiScaled, phi);
35
- });
36
- test('returns within [-π/2, +π/2] for finite inputs', () => {
37
- const samples = [
38
- [1, 0, 0],
39
- [0, 1, 0],
40
- [1, 1, 1],
41
- [1, 1, -1],
42
- [3, -4, 5],
43
- [3, -4, -5]
44
- ];
45
- for (const [x, y, z] of samples) {
46
- const phi = planetocentricLatitude(x, y, z);
47
- assert.ok(phi >= -Math.PI / 2 - 1e-15, `phi < -π/2: ${phi}`);
48
- assert.ok(phi <= Math.PI / 2 + 1e-15, `phi > +π/2: ${phi}`);
49
- }
50
- });
51
- test('handles origin: atan2(0,0) returns 0 in JS', () => {
52
- // This documents JS behavior; mathematically latitude at origin is undefined,
53
- // but this function will return 0 due to atan2(0,0) === 0.
54
- absClose(planetocentricLatitude(0, 0, 0), 0, 0);
55
- });
56
- test('throws TypeError when x is not finite', () => {
57
- assert.throws(() => planetocentricLatitude(Number.NaN, 0, 0), (err) => err instanceof TypeError &&
58
- err.message === 'x must be finite. Received: NaN');
59
- });
60
- test('throws TypeError when y is not finite', () => {
61
- assert.throws(() => planetocentricLatitude(0, Number.POSITIVE_INFINITY, 0), (err) => err instanceof TypeError &&
62
- err.message === 'y must be finite. Received: Infinity');
63
- });
64
- test('throws TypeError when z is not finite', () => {
65
- assert.throws(() => planetocentricLatitude(0, 0, Number.NEGATIVE_INFINITY), (err) => err instanceof TypeError &&
66
- err.message === 'z must be finite. Received: -Infinity');
67
- });
68
- });
69
- //# sourceMappingURL=planetocentric-latitude.spec.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"planetocentric-latitude.spec.js","sourceRoot":"","sources":["../../../../src/categories/cartography/__tests__/planetocentric-latitude.spec.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=planetographic-latitude-oblate.spec.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"planetographic-latitude-oblate.spec.d.ts","sourceRoot":"","sources":["../../../../src/categories/cartography/__tests__/planetographic-latitude-oblate.spec.ts"],"names":[],"mappings":""}
@@ -1,103 +0,0 @@
1
- import assert from 'node:assert/strict';
2
- import test, { describe } from 'node:test';
3
- import { planetographicLatitudeOblate } from '../planetographic-latitude-oblate';
4
- import { absClose, relClose } from 'packages/equations/src/__tests__/helpers';
5
- describe('planetographicLatitudeOblate', () => {
6
- test('reduces to planetocentric latitude when a === c (sphere)', () => {
7
- const a = 10;
8
- const c = 10;
9
- const x = 3;
10
- const y = 4;
11
- const z = 5;
12
- const phiG = planetographicLatitudeOblate(x, y, z, a, c);
13
- const expected = Math.atan2(z, Math.hypot(x, y)); // oneMinusE2 = 1
14
- relClose(phiG, expected);
15
- });
16
- test('returns 0 on the equatorial plane (z=0, x/y not both 0)', () => {
17
- const a = 6378137.0;
18
- const c = 6356752.314245;
19
- absClose(planetographicLatitudeOblate(1, 0, 0, a, c), 0, 1e-12);
20
- absClose(planetographicLatitudeOblate(0, 2, 0, a, c), 0, 1e-12);
21
- absClose(planetographicLatitudeOblate(3, 4, 0, a, c), 0, 1e-12);
22
- });
23
- test('returns +π/2 on +Z axis and -π/2 on -Z axis (for valid ellipsoid)', () => {
24
- const a = 10;
25
- const c = 9;
26
- absClose(planetographicLatitudeOblate(0, 0, 1, a, c), Math.PI / 2, 1e-12);
27
- absClose(planetographicLatitudeOblate(0, 0, -1, a, c), -Math.PI / 2, 1e-12);
28
- });
29
- test('matches the explicit formula atan2(z/(c^2/a^2), hypot(x,y))', () => {
30
- const a = 10;
31
- const c = 9;
32
- const x = 1.2;
33
- const y = -3.4;
34
- const z = 5.6;
35
- const phi = planetographicLatitudeOblate(x, y, z, a, c);
36
- const oneMinusE2 = (c * c) / (a * a); // c²/a²
37
- const expected = Math.atan2(z / oneMinusE2, Math.hypot(x, y));
38
- relClose(phi, expected);
39
- });
40
- test('is invariant under scaling of (x,y,z) by a positive factor', () => {
41
- const a = 10;
42
- const c = 9;
43
- const x = 1.2;
44
- const y = -3.4;
45
- const z = 5.6;
46
- const phi1 = planetographicLatitudeOblate(x, y, z, a, c);
47
- const phi2 = planetographicLatitudeOblate(10 * x, 10 * y, 10 * z, a, c);
48
- relClose(phi2, phi1);
49
- });
50
- test('for an oblate spheroid (a > c), |φg| > |φc| when z ≠ 0 (same Cartesian point)', () => {
51
- const a = 10;
52
- const c = 9;
53
- const x = 3;
54
- const y = 4;
55
- const z = 1;
56
- const phiC = Math.atan2(z, Math.hypot(x, y)); // planetocentric latitude
57
- const phiG = planetographicLatitudeOblate(x, y, z, a, c);
58
- assert.ok(Math.abs(phiG) > Math.abs(phiC), `expected |phiG| > |phiC| for a>c; got phiC=${phiC}, phiG=${phiG}`);
59
- });
60
- test('returns within [-π/2, +π/2] for finite inputs', () => {
61
- const a = 10;
62
- const c = 9;
63
- const samples = [
64
- [1, 0, 0],
65
- [0, 1, 0],
66
- [1, 1, 1],
67
- [1, 1, -1],
68
- [3, -4, 5],
69
- [3, -4, -5]
70
- ];
71
- for (const [x, y, z] of samples) {
72
- const phi = planetographicLatitudeOblate(x, y, z, a, c);
73
- assert.ok(phi >= -Math.PI / 2 - 1e-15, `phi < -π/2: ${phi}`);
74
- assert.ok(phi <= Math.PI / 2 + 1e-15, `phi > +π/2: ${phi}`);
75
- }
76
- });
77
- test('handles origin: atan2(0,0) returns 0 in JS (documents behavior)', () => {
78
- const a = 10;
79
- const c = 9;
80
- absClose(planetographicLatitudeOblate(0, 0, 0, a, c), 0, 0);
81
- });
82
- test('throws TypeError when any input is not finite', () => {
83
- const a = 10;
84
- const c = 9;
85
- assert.throws(() => planetographicLatitudeOblate(Number.NaN, 0, 0, a, c), (err) => err instanceof TypeError &&
86
- err.message === 'x must be finite. Received: NaN');
87
- assert.throws(() => planetographicLatitudeOblate(0, Number.POSITIVE_INFINITY, 0, a, c), (err) => err instanceof TypeError &&
88
- err.message === 'y must be finite. Received: Infinity');
89
- assert.throws(() => planetographicLatitudeOblate(0, 0, Number.NEGATIVE_INFINITY, a, c), (err) => err instanceof TypeError &&
90
- err.message === 'z must be finite. Received: -Infinity');
91
- assert.throws(() => planetographicLatitudeOblate(0, 0, 0, Number.NaN, c), (err) => err instanceof TypeError &&
92
- err.message === 'a must be finite. Received: NaN');
93
- assert.throws(() => planetographicLatitudeOblate(0, 0, 0, a, Number.POSITIVE_INFINITY), (err) => err instanceof TypeError &&
94
- err.message === 'c must be finite. Received: Infinity');
95
- });
96
- test('throws RangeError when a <= 0 or c <= 0', () => {
97
- assert.throws(() => planetographicLatitudeOblate(0, 0, 0, 0, 1), (err) => err instanceof RangeError &&
98
- err.message === 'a must be > 0. Received: 0');
99
- assert.throws(() => planetographicLatitudeOblate(0, 0, 0, 1, 0), (err) => err instanceof RangeError &&
100
- err.message === 'c must be > 0. Received: 0');
101
- });
102
- });
103
- //# sourceMappingURL=planetographic-latitude-oblate.spec.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"planetographic-latitude-oblate.spec.js","sourceRoot":"","sources":["../../../../src/categories/cartography/__tests__/planetographic-latitude-oblate.spec.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=gravitational-acceleration-on1-by2.int.spec.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"gravitational-acceleration-on1-by2.int.spec.d.ts","sourceRoot":"","sources":["../../../../src/categories/gravity/__tests__/gravitational-acceleration-on1-by2.int.spec.ts"],"names":[],"mappings":""}
@@ -1,87 +0,0 @@
1
- import assert from 'node:assert/strict';
2
- import test, { describe } from 'node:test';
3
- import { accelerationOn1By2 } from '../acceleration-on1-by2';
4
- import { relClose, vecRelClose } from 'packages/equations/src/__tests__/helpers';
5
- import { G_SI } from '@interstellar-tools/constants';
6
- import { norm, scale, sub } from '../../helpers/misc';
7
- describe('accelerationOn1By2', () => {
8
- test('1D sanity (+x): ||a|| = G*m2/r² and points +x', () => {
9
- const G = 1;
10
- const m2 = 3;
11
- const r1 = [0, 0, 0];
12
- const r2 = [10, 0, 0];
13
- const a = accelerationOn1By2(m2, r1, r2, G);
14
- // Expected magnitude: 1*3/10² = 0.03, direction +x
15
- relClose(norm(a), 0.03, 1e-14);
16
- vecRelClose(a, [0.03, 0, 0], 1e-14);
17
- });
18
- test('1D sanity (-x): points toward body 2 at negative x', () => {
19
- const G = 1;
20
- const m2 = 3;
21
- const r1 = [0, 0, 0];
22
- const r2 = [-10, 0, 0];
23
- const a = accelerationOn1By2(m2, r1, r2, G);
24
- relClose(norm(a), 0.03, 1e-14);
25
- vecRelClose(a, [-0.03, 0, 0], 1e-14);
26
- });
27
- test('direction equals r-hat for arbitrary 3D positions', () => {
28
- const G = 2.5;
29
- const m2 = 11;
30
- const r1 = [0.2, -3, 5.5];
31
- const r2 = [4.2, 1, -1];
32
- const a = accelerationOn1By2(m2, r1, r2, G);
33
- const dr = sub(r2, r1);
34
- const r = Math.hypot(...dr);
35
- const rhat = [dr[0] / r, dr[1] / r, dr[2] / r];
36
- const ahat = scale(a, 1 / norm(a));
37
- vecRelClose(ahat, rhat, 1e-12);
38
- });
39
- test('inverse-square scaling: doubling r → quarter acceleration', () => {
40
- const G = 10;
41
- const m2 = 5;
42
- const r1 = [0, 0, 0];
43
- const r2a = [2, 0, 0]; // r = 2
44
- const r2b = [4, 0, 0]; // r = 4 (double → quarter a)
45
- const aA = accelerationOn1By2(m2, r1, r2a, G);
46
- const aB = accelerationOn1By2(m2, r1, r2b, G);
47
- relClose(norm(aB), norm(aA) / 4, 1e-14);
48
- });
49
- test('linearity: scaling m2 or G scales a accordingly', () => {
50
- const G = 3;
51
- const m2 = 5;
52
- const r1 = [1, 2, 3];
53
- const r2 = [4, -1, 0];
54
- const a = accelerationOn1By2(m2, r1, r2, G);
55
- const a_m2x2 = accelerationOn1By2(2 * m2, r1, r2, G);
56
- const a_Gx2 = accelerationOn1By2(m2, r1, r2, 2 * G);
57
- vecRelClose(a_m2x2, scale(a, 2));
58
- vecRelClose(a_Gx2, scale(a, 2));
59
- });
60
- test('real-world sanity: Earth due to Sun at 1 AU (~5.93e-3 m/s²)', () => {
61
- const mSun = 1.9885e30; // kg
62
- const rEarth = [0, 0, 0];
63
- const rSun = [1.495978707e11, 0, 0]; // m
64
- const a = accelerationOn1By2(mSun, rEarth, rSun, G_SI);
65
- // Closed-form expectation GM_sun / r²
66
- const dr = sub(rSun, rEarth);
67
- const r = Math.hypot(...dr);
68
- const expected = (G_SI * mSun) / (r * r);
69
- relClose(norm(a), expected, 1e-12);
70
- // Also within ~0.5% of commonly cited value
71
- const ref = 5.93e-3;
72
- assert.ok(Math.abs(norm(a) - ref) / ref < 5e-3, `|a| ${norm(a)} differs from ~${ref}`);
73
- });
74
- test('error propagation: invalid inputs cause throws', () => {
75
- const r1 = [0, 0, 0];
76
- const r2 = [1, 0, 0];
77
- // negative / non-finite m2
78
- assert.throws(() => accelerationOn1By2(-1, r1, r2, 1), /non-negative|finite/);
79
- assert.throws(() => accelerationOn1By2(Number.NaN, r1, r2, 1), /finite/);
80
- // coincident positions
81
- assert.throws(() => accelerationOn1By2(1, r1, r1, 1), /singular \(r = 0\)/);
82
- // invalid G
83
- assert.throws(() => accelerationOn1By2(1, r1, r2, 0), /positive/);
84
- assert.throws(() => accelerationOn1By2(1, r1, r2, Number.NaN), /finite/);
85
- });
86
- });
87
- //# sourceMappingURL=gravitational-acceleration-on1-by2.int.spec.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"gravitational-acceleration-on1-by2.int.spec.js","sourceRoot":"","sources":["../../../../src/categories/gravity/__tests__/gravitational-acceleration-on1-by2.int.spec.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=gravitational-force-on1-by2.int.spec.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"gravitational-force-on1-by2.int.spec.d.ts","sourceRoot":"","sources":["../../../../src/categories/gravity/__tests__/gravitational-force-on1-by2.int.spec.ts"],"names":[],"mappings":""}
@@ -1,107 +0,0 @@
1
- import assert from 'node:assert/strict';
2
- import test, { describe } from 'node:test';
3
- import { relClose, vecRelClose } from 'packages/equations/src/__tests__/helpers';
4
- import { G_SI } from '@interstellar-tools/constants';
5
- import { forceOn1By2 } from '../force-on1-by2';
6
- import { norm, scale, sub } from '../../helpers/misc';
7
- describe('forceOn1By2', () => {
8
- test('1D sanity (+x): |F| = G*m1*m2/r² and points +x', () => {
9
- const G = 1;
10
- const m1 = 2;
11
- const m2 = 3;
12
- const r1 = [0, 0, 0];
13
- const r2 = [10, 0, 0];
14
- const F = forceOn1By2(m1, m2, r1, r2, G);
15
- // Expected magnitude and direction
16
- const expectedMag = (G * m1 * m2) / 10 ** 2; // 0.06
17
- relClose(norm(F), expectedMag, 1e-14);
18
- vecRelClose(F, [expectedMag, 0, 0], 1e-14);
19
- });
20
- test('1D sanity (-x): points toward body 2 (at -x)', () => {
21
- const G = 1;
22
- const m1 = 2;
23
- const m2 = 3;
24
- const r1 = [0, 0, 0];
25
- const r2 = [-10, 0, 0];
26
- const F = forceOn1By2(m1, m2, r1, r2, G);
27
- relClose(norm(F), 0.06, 1e-14);
28
- vecRelClose(F, [-0.06, 0, 0], 1e-14);
29
- });
30
- test('direction equals r-hat for arbitrary 3D positions', () => {
31
- const G = 2.5;
32
- const m1 = 7;
33
- const m2 = 11;
34
- const r1 = [0.2, -3, 5.5];
35
- const r2 = [4.2, 1, -1];
36
- const F = forceOn1By2(m1, m2, r1, r2, G);
37
- const dr = sub(r2, r1);
38
- const r = Math.hypot(...dr);
39
- const rhat = [dr[0] / r, dr[1] / r, dr[2] / r];
40
- // Normalize F and compare to rhat
41
- const Fhat = scale(F, 1 / norm(F));
42
- vecRelClose(Fhat, rhat, 1e-12);
43
- });
44
- test('Newton’s 3rd law: F_1<-2 = - F_2<-1', () => {
45
- const G = 9.87;
46
- const m1 = 7;
47
- const m2 = 11;
48
- const r1 = [0, -2, 5];
49
- const r2 = [3, 1, -1];
50
- const F12 = forceOn1By2(m1, m2, r1, r2, G);
51
- const F21 = forceOn1By2(m2, m1, r2, r1, G);
52
- vecRelClose(F12, [-F21[0], -F21[1], -F21[2]]);
53
- });
54
- test('inverse-square scaling: doubling r → quarter force', () => {
55
- const G = 10;
56
- const m1 = 2;
57
- const m2 = 5;
58
- const r1 = [0, 0, 0];
59
- const r2a = [2, 0, 0]; // r = 2
60
- const r2b = [4, 0, 0]; // r = 4 (double → quarter force)
61
- const Fa = forceOn1By2(m1, m2, r1, r2a, G);
62
- const Fb = forceOn1By2(m1, m2, r1, r2b, G);
63
- relClose(norm(Fb), norm(Fa) / 4, 1e-14);
64
- });
65
- test('linearity: scaling m1, m2, or G scales F accordingly', () => {
66
- const G = 3;
67
- const m1 = 2;
68
- const m2 = 5;
69
- const r1 = [1, 2, 3];
70
- const r2 = [4, -1, 0];
71
- const F = forceOn1By2(m1, m2, r1, r2, G);
72
- const F_m1x2 = forceOn1By2(2 * m1, m2, r1, r2, G);
73
- const F_m2x2 = forceOn1By2(m1, 2 * m2, r1, r2, G);
74
- const F_Gx2 = forceOn1By2(m1, m2, r1, r2, 2 * G);
75
- // Doubling any of m1, m2, or G doubles the force vector
76
- vecRelClose(F_m1x2, scale(F, 2));
77
- vecRelClose(F_m2x2, scale(F, 2));
78
- vecRelClose(F_Gx2, scale(F, 2));
79
- });
80
- test('real-world sanity: Earth–Sun at ~1 AU (~3.54e22 N)', () => {
81
- const mEarth = 5.972e24; // kg
82
- const mSun = 1.9885e30; // kg
83
- const rEarth = [0, 0, 0];
84
- const rSun = [1.495978707e11, 0, 0]; // m
85
- const F = forceOn1By2(mEarth, mSun, rEarth, rSun, G_SI);
86
- const r = Math.hypot(rSun[0] - rEarth[0], rSun[1] - rEarth[1], rSun[2] - rEarth[2]);
87
- const expectedMag = (G_SI * mEarth * mSun) / (r * r);
88
- relClose(norm(F), expectedMag, 1e-12);
89
- // also within ~0.5% of the commonly quoted magnitude
90
- const ref = 3.542e22;
91
- assert.ok(Math.abs(norm(F) - ref) / ref < 5e-3, `|F| ${norm(F)} differs from ~${ref}`);
92
- });
93
- test('error propagation: invalid inputs cause throws', () => {
94
- const r1 = [0, 0, 0];
95
- const r2 = [1, 0, 0];
96
- // negative / non-finite masses
97
- assert.throws(() => forceOn1By2(-1, 1, r1, r2, 1), /non-negative|finite/);
98
- assert.throws(() => forceOn1By2(1, -1, r1, r2, 1), /non-negative|finite/);
99
- assert.throws(() => forceOn1By2(Number.NaN, 1, r1, r2, 1), /finite/);
100
- // coincident positions
101
- assert.throws(() => forceOn1By2(1, 1, r1, r1, 1), /singular \(r = 0\)/);
102
- // invalid G
103
- assert.throws(() => forceOn1By2(1, 1, r1, r2, 0), /positive/);
104
- assert.throws(() => forceOn1By2(1, 1, r1, r2, Number.NaN), /finite/);
105
- });
106
- });
107
- //# sourceMappingURL=gravitational-force-on1-by2.int.spec.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"gravitational-force-on1-by2.int.spec.js","sourceRoot":"","sources":["../../../../src/categories/gravity/__tests__/gravitational-force-on1-by2.int.spec.ts"],"names":[],"mappings":"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"}