@interstellar-tools/equations 0.48.0 → 0.50.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,103 +0,0 @@
1
- import assert from 'node:assert/strict';
2
- import test, { describe } from 'node:test';
3
- import { combineBurnsDeltaV } from '../combine-burns-delta-v';
4
- import { absClose } from 'packages/equations/src/__tests__/helpers';
5
- import { toRad } from '../../helpers/radians';
6
- const PI = Math.PI;
7
- const relClose = (a, b, rel = 1e-12, abs = 1e-12, msg) => {
8
- const denom = Math.max(1, Math.abs(a), Math.abs(b));
9
- assert.ok(Math.abs(a - b) <= Math.max(abs, rel * denom), msg);
10
- };
11
- describe('combineBurnsDeltaV', () => {
12
- test('collinear same direction (Δθ=0): Δv = |v1 - v2|', () => {
13
- const v1 = 3000;
14
- const v2 = 800;
15
- const dv = combineBurnsDeltaV(v1, v2, 0);
16
- absClose(dv, Math.abs(v1 - v2));
17
- });
18
- test('collinear opposite (Δθ=π): Δv = v1 + v2', () => {
19
- const v1 = 2500;
20
- const v2 = 900;
21
- const dv = combineBurnsDeltaV(v1, v2, PI);
22
- absClose(dv, v1 + v2);
23
- });
24
- test('quadrature (Δθ=90°): Δv = sqrt(v1² + v2²)', () => {
25
- const v1 = 2100;
26
- const v2 = 1400;
27
- const dv = combineBurnsDeltaV(v1, v2, toRad(90));
28
- absClose(dv, Math.hypot(v1, v2));
29
- });
30
- test('general case matches law of cosines', () => {
31
- const cases = [
32
- { v1: 1000, v2: 500, deg: 35 },
33
- { v1: 2800, v2: 1200, deg: 60 },
34
- { v1: 750, v2: 750, deg: 123 }
35
- ];
36
- for (const { v1, v2, deg } of cases) {
37
- const th = toRad(deg);
38
- const expected = Math.sqrt(v1 * v1 + v2 * v2 - 2 * v1 * v2 * Math.cos(th));
39
- const dv = combineBurnsDeltaV(v1, v2, th);
40
- relClose(dv, expected, 1e-12, 1e-12, `mismatch for v1=${v1}, v2=${v2}, Δθ=${deg}°`);
41
- }
42
- });
43
- test('symmetry: swapping v1 and v2 gives same Δv', () => {
44
- const v1 = 1900;
45
- const v2 = 1300;
46
- const th = toRad(47);
47
- const a = combineBurnsDeltaV(v1, v2, th);
48
- const b = combineBurnsDeltaV(v2, v1, th);
49
- absClose(a, b);
50
- });
51
- test('zero burn in either vector returns the other magnitude (Δθ arbitrary)', () => {
52
- const v = 1234;
53
- const angles = [0, 0.4, 1.2, Math.PI];
54
- for (const th of angles) {
55
- absClose(combineBurnsDeltaV(0, v, th), v);
56
- absClose(combineBurnsDeltaV(v, 0, th), v);
57
- }
58
- });
59
- // ---------------- monotonic / bounds ----------------
60
- test('for fixed v1 = v2 = v, Δv increases monotonically with Δθ on [0, π]', () => {
61
- const v = 1500;
62
- const seq = [0, 15, 30, 60, 90, 135, 180].map(toRad);
63
- let last = -1;
64
- for (const th of seq) {
65
- const dv = combineBurnsDeltaV(v, v, th);
66
- assert.ok(dv >= last - 1e-12, `not monotone at Δθ=${(th * 180) / PI}°`);
67
- last = dv;
68
- }
69
- });
70
- test('bounds: result in [|v1-v2|, v1+v2]', () => {
71
- const v1 = 2600, v2 = 900;
72
- for (const deg of [0, 20, 45, 100, 150, 180]) {
73
- const dv = combineBurnsDeltaV(v1, v2, toRad(deg));
74
- assert.ok(dv >= Math.abs(v1 - v2) - 1e-12, 'below lower bound');
75
- assert.ok(dv <= v1 + v2 + 1e-12, 'above upper bound');
76
- }
77
- });
78
- // ---------------- numerical guard ----------------
79
- test('FP guard: tiny negative radicand clamps to 0 near Δθ=0 with equal burns', () => {
80
- const v = 2000;
81
- // angle so small that theoretical Δv ≈ 0; numerical should return ~0 (not throw)
82
- const th = 1e-12;
83
- const dv = combineBurnsDeltaV(v, v, th);
84
- assert.ok(dv >= 0, 'Δv should be non-negative');
85
- assert.ok(dv < 1e-6, `Δv should be ~0, got ${dv}`);
86
- });
87
- // ---------------- validation ----------------
88
- test('TypeError on non-number inputs', () => {
89
- assert.throws(() => combineBurnsDeltaV('1000', 200, 0), TypeError);
90
- assert.throws(() => combineBurnsDeltaV(1000, '200', 0), TypeError);
91
- assert.throws(() => combineBurnsDeltaV(1000, 200, '0'), TypeError);
92
- });
93
- test('RangeError on non-finite or out-of-domain values', () => {
94
- assert.throws(() => combineBurnsDeltaV(NaN, 200, 0), RangeError);
95
- assert.throws(() => combineBurnsDeltaV(1000, Infinity, 0), RangeError);
96
- assert.throws(() => combineBurnsDeltaV(-1, 200, 0), RangeError);
97
- assert.throws(() => combineBurnsDeltaV(1000, -1, 0), RangeError);
98
- assert.throws(() => combineBurnsDeltaV(1000, 200, NaN), RangeError);
99
- assert.throws(() => combineBurnsDeltaV(1000, 200, -1e-6), RangeError);
100
- assert.throws(() => combineBurnsDeltaV(1000, 200, (PI + 1e-6)), RangeError);
101
- });
102
- });
103
- //# sourceMappingURL=combine-burns-delta-v.spec.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"combine-burns-delta-v.spec.js","sourceRoot":"","sources":["../../../../src/categories/manoeuvres/__tests__/combine-burns-delta-v.spec.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=gravity-assist-turning-angle.spec.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"gravity-assist-turning-angle.spec.d.ts","sourceRoot":"","sources":["../../../../src/categories/manoeuvres/__tests__/gravity-assist-turning-angle.spec.ts"],"names":[],"mappings":""}
@@ -1,89 +0,0 @@
1
- import assert from 'node:assert/strict';
2
- import test, { describe } from 'node:test';
3
- import { relClose } from 'packages/equations/src/__tests__/helpers';
4
- import { gravityAssistTurningAngle } from '../gravity-assist-turning-angle';
5
- describe('gravityAssistTurningAngle', () => {
6
- /**
7
- * Local helper for the expected value using the same math definition.
8
- * Keeps the test readable and mirrors the equation.
9
- */
10
- const expectedTurningAngle = (rp, vInf, mu) => {
11
- const denom = 1 + (rp * vInf * vInf) / mu;
12
- const x = 1 / denom;
13
- const clamped = Math.min(1, Math.max(0, x));
14
- return (2 * Math.asin(clamped));
15
- };
16
- test('returns expected turning angle for typical inputs (Earth, km-based)', () => {
17
- const rp = 7000; // km
18
- const vInf = 8; // km/s
19
- const mu = 398600.4418; // km³/s²
20
- const delta = gravityAssistTurningAngle(rp, vInf, mu);
21
- const expected = expectedTurningAngle(rp, vInf, mu);
22
- relClose(delta, expected);
23
- assert.ok(delta >= 0 && delta <= Math.PI, `delta out of range: ${delta}`);
24
- });
25
- test('when vInfinity is 0, turning angle approaches π (degenerate limit)', () => {
26
- // With vInf = 0 => x = 1/(1+0) = 1 => delta = 2*asin(1) = π
27
- const rp = 7000;
28
- const vInf = 0;
29
- const mu = 398600.4418;
30
- const delta = gravityAssistTurningAngle(rp, vInf, mu);
31
- relClose(delta, Math.PI, 1e-12);
32
- });
33
- test('turning angle decreases as periapsis radius increases (all else equal)', () => {
34
- const vInf = 8;
35
- const mu = 398600.4418;
36
- const deltaLowRp = gravityAssistTurningAngle(7000, vInf, mu);
37
- const deltaHighRp = gravityAssistTurningAngle(70000, vInf, mu);
38
- assert.ok(deltaHighRp < deltaLowRp, `expected delta to decrease with rp, got ${deltaLowRp} -> ${deltaHighRp}`);
39
- });
40
- test('turning angle decreases as vInfinity increases (all else equal)', () => {
41
- const rp = 7000;
42
- const mu = 398600.4418;
43
- const deltaLowV = gravityAssistTurningAngle(rp, 4, mu);
44
- const deltaHighV = gravityAssistTurningAngle(rp, 8, mu);
45
- assert.ok(deltaHighV < deltaLowV, `expected delta to decrease with vInfinity, got ${deltaLowV} -> ${deltaHighV}`);
46
- });
47
- test('throws TypeError when rp is not finite (NaN)', () => {
48
- assert.throws(() => gravityAssistTurningAngle(Number.NaN, 1, 1), (err) => err instanceof TypeError &&
49
- err.message === 'rp must be a finite number. Received: NaN');
50
- });
51
- test('throws TypeError when vInfinity is not finite (Infinity)', () => {
52
- assert.throws(() => gravityAssistTurningAngle(1, Number.POSITIVE_INFINITY, 1), (err) => err instanceof TypeError &&
53
- err.message === 'vInfinity must be a finite number. Received: Infinity');
54
- });
55
- test('throws TypeError when mu is not finite (-Infinity)', () => {
56
- assert.throws(() => gravityAssistTurningAngle(1, 1, Number.NEGATIVE_INFINITY), (err) => err instanceof TypeError &&
57
- err.message === 'mu must be a finite number. Received: -Infinity');
58
- });
59
- test('throws RangeError when rp <= 0', () => {
60
- assert.throws(() => gravityAssistTurningAngle(0, 1, 1), (err) => err instanceof RangeError &&
61
- err.message === 'rp must be > 0. Received: 0');
62
- });
63
- test('throws RangeError when vInfinity < 0', () => {
64
- assert.throws(() => gravityAssistTurningAngle(1, -1e-9, 1), (err) => err instanceof RangeError &&
65
- err.message === 'vInfinity must be >= 0. Received: -1e-9');
66
- });
67
- test('throws RangeError when mu <= 0', () => {
68
- assert.throws(() => gravityAssistTurningAngle(1, 1, 0), (err) => err instanceof RangeError &&
69
- err.message === 'mu must be > 0. Received: 0');
70
- });
71
- test('returns ~0 for extremely large rp (very weak deflection)', () => {
72
- const rp = 1e17;
73
- const vInf = 8;
74
- const mu = 398600.4418;
75
- const delta = gravityAssistTurningAngle(rp, vInf, mu);
76
- // For huge rp, delta is extremely small
77
- relClose(delta, 0, 1e-12);
78
- });
79
- test('for large rp, turning angle matches small-angle approximation', () => {
80
- const rp = 1e8; // or 1e12, etc.
81
- const vInf = 8;
82
- const mu = 398600.4418;
83
- const delta = gravityAssistTurningAngle(rp, vInf, mu);
84
- const approx = (2 * mu) / (rp * vInf * vInf);
85
- // This is an approximation, so use a looser tolerance
86
- relClose(delta, approx, 1e-6);
87
- });
88
- });
89
- //# sourceMappingURL=gravity-assist-turning-angle.spec.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"gravity-assist-turning-angle.spec.js","sourceRoot":"","sources":["../../../../src/categories/manoeuvres/__tests__/gravity-assist-turning-angle.spec.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=hohmann-transfer.spec.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"hohmann-transfer.spec.d.ts","sourceRoot":"","sources":["../../../../src/categories/manoeuvres/__tests__/hohmann-transfer.spec.ts"],"names":[],"mappings":""}
@@ -1,101 +0,0 @@
1
- import assert from 'node:assert/strict';
2
- import test, { describe } from 'node:test';
3
- import { hohmannSemiMajorAxis, hohmannTransfer, hohmannTransferTime } from '../hohmann-transfer';
4
- import { absClose, relClose } from 'packages/equations/src/__tests__/helpers';
5
- describe('hohmannTransfer', () => {
6
- test('semi-major axis: at = (r1 + r2) / 2', () => {
7
- const r1 = 7000e3;
8
- const r2 = 42164e3;
9
- const at = hohmannSemiMajorAxis(r1, r2);
10
- absClose(at, 0.5 * (r1 + r2));
11
- });
12
- test('transfer time: t = π sqrt(at^3 / μ)', () => {
13
- const mu = 3.986004418e14; // Earth μ (m³/s²)
14
- const r1 = 7000e3;
15
- const r2 = 42164e3;
16
- const at = 0.5 * (r1 + r2);
17
- const expected = Math.PI * Math.sqrt((at * at * at) / mu);
18
- const t = hohmannTransferTime(r1, r2, mu);
19
- relClose(t, expected, 1e-12);
20
- });
21
- test('raise orbit (r2 > r1): dv1,dv2 magnitudes & directions (prograde, prograde)', () => {
22
- const mu = 3.986004418e14; // Earth μ
23
- const r1 = 7000e3;
24
- const r2 = 12000e3;
25
- const res = hohmannTransfer(r1, r2, mu);
26
- // Expected magnitudes from textbook formulas
27
- const at = 0.5 * (r1 + r2);
28
- const dv1Exp = Math.sqrt(mu / r1) * (Math.sqrt((2 * r2) / (r1 + r2)) - 1);
29
- const dv2Exp = Math.sqrt(mu / r2) * (1 - Math.sqrt((2 * r1) / (r1 + r2)));
30
- assert.ok(res.dv1 >= 0 && res.dv2 >= 0, 'Δv magnitudes must be non-negative');
31
- relClose(res.at, at);
32
- relClose(res.dv1, dv1Exp, 1e-12);
33
- relClose(res.dv2, dv2Exp, 1e-12);
34
- relClose(res.dvTotal, res.dv1 + res.dv2, 1e-12);
35
- assert.equal(res.dir1, 'prograde');
36
- assert.equal(res.dir2, 'prograde');
37
- // Transfer time check
38
- const tExp = Math.PI * Math.sqrt((at * at * at) / mu);
39
- relClose(res.tTransfer, tExp, 1e-12);
40
- });
41
- test('lower orbit (r2 < r1): dv1,dv2 magnitudes & directions (retrograde, retrograde)', () => {
42
- const mu = 3.986004418e14;
43
- const r1 = 12000e3;
44
- const r2 = 7000e3;
45
- const res = hohmannTransfer(r1, r2, mu);
46
- const at = 0.5 * (r1 + r2);
47
- const dv1Exp = Math.sqrt(mu / r1) * (Math.sqrt((2 * r2) / (r1 + r2)) - 1);
48
- const dv2Exp = Math.sqrt(mu / r2) * (1 - Math.sqrt((2 * r1) / (r1 + r2)));
49
- // Magnitudes compare against absolute values of textbook (which are negative here)
50
- relClose(res.at, at);
51
- relClose(res.dv1, Math.abs(dv1Exp), 1e-12);
52
- relClose(res.dv2, Math.abs(dv2Exp), 1e-12);
53
- relClose(res.dvTotal, res.dv1 + res.dv2, 1e-12);
54
- assert.equal(res.dir1, 'retrograde');
55
- assert.equal(res.dir2, 'retrograde');
56
- const tExp = Math.PI * Math.sqrt((at * at * at) / mu);
57
- relClose(res.tTransfer, tExp, 1e-12);
58
- });
59
- test('symmetry: total Δv is same for r1→r2 and r2→r1', () => {
60
- const mu = 3.986004418e14;
61
- const r1 = 9000e3;
62
- const r2 = 14000e3;
63
- const up = hohmannTransfer(r1, r2, mu);
64
- const down = hohmannTransfer(r2, r1, mu);
65
- relClose(up.dvTotal, down.dvTotal, 1e-12);
66
- });
67
- test('degenerate: r1 == r2 → dv1=dv2=0, t = half circular period', () => {
68
- const mu = 3.986004418e14;
69
- const r = 7000e3;
70
- const res = hohmannTransfer(r, r, mu);
71
- absClose(res.dv1, 0, 1e-12);
72
- absClose(res.dv2, 0, 1e-12);
73
- absClose(res.dvTotal, 0, 1e-12);
74
- assert.equal(res.dir1, 'none');
75
- assert.equal(res.dir2, 'none');
76
- const T_circ = 2 * Math.PI * Math.sqrt((r * r * r) / mu);
77
- const half = 0.5 * T_circ;
78
- relClose(res.tTransfer, half, 1e-12);
79
- });
80
- test('input validation: type and range errors', () => {
81
- const mu = 3.986004418e14;
82
- // TypeError: non-number inputs
83
- assert.throws(() => hohmannTransfer('x', 7000e3, mu), TypeError);
84
- assert.throws(() => hohmannTransfer(7000e3, 'y', mu), TypeError);
85
- assert.throws(() => hohmannTransfer(7000e3, 8000e3, 'z'), TypeError);
86
- // RangeError: non-finite / non-positive
87
- assert.throws(() => hohmannTransfer(NaN, 8000e3, mu), RangeError);
88
- assert.throws(() => hohmannTransfer(7000e3, Infinity, mu), RangeError);
89
- assert.throws(() => hohmannTransfer(7000e3, 8000e3, 0), RangeError);
90
- assert.throws(() => hohmannTransfer(-1, 8000e3, mu), RangeError);
91
- assert.throws(() => hohmannTransfer(7000e3, -1, mu), RangeError);
92
- // Semi-major axis helper
93
- assert.throws(() => hohmannSemiMajorAxis('a', 1), TypeError);
94
- assert.throws(() => hohmannSemiMajorAxis(1, NaN), RangeError);
95
- assert.throws(() => hohmannSemiMajorAxis(0, 1), RangeError);
96
- // Transfer time helper
97
- assert.throws(() => hohmannTransferTime(1, 1, 0), RangeError);
98
- assert.throws(() => hohmannTransferTime(1, 1, 'mu'), TypeError);
99
- });
100
- });
101
- //# sourceMappingURL=hohmann-transfer.spec.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"hohmann-transfer.spec.js","sourceRoot":"","sources":["../../../../src/categories/manoeuvres/__tests__/hohmann-transfer.spec.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=oberth-energy-gain.spec.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"oberth-energy-gain.spec.d.ts","sourceRoot":"","sources":["../../../../src/categories/manoeuvres/__tests__/oberth-energy-gain.spec.ts"],"names":[],"mappings":""}
@@ -1,71 +0,0 @@
1
- import assert from 'node:assert/strict';
2
- import test, { describe } from 'node:test';
3
- import { oberthEnergyGain } from '../oberth-energy-gain';
4
- import { absClose } from 'packages/equations/src/__tests__/helpers';
5
- const relClose = (a, b, rel = 1e-12, abs = 1e-12, msg) => {
6
- const denom = Math.max(1, Math.abs(a), Math.abs(b));
7
- assert.ok(Math.abs(a - b) <= Math.max(abs, rel * denom), msg);
8
- };
9
- describe('oberthEnergyGain', () => {
10
- test('basic: Δε ≈ v·Δv', () => {
11
- const v = 7800; // m/s (LEO-ish)
12
- const dv = 100; // m/s
13
- const dE = oberthEnergyGain(v, dv);
14
- absClose(dE, v * dv);
15
- });
16
- test('zeros: dv=0 → 0; v=0 → 0', () => {
17
- absClose(oberthEnergyGain(7500, 0), 0);
18
- absClose(oberthEnergyGain(0, 25), 0);
19
- });
20
- test('scaling: scale v and dv by k ⇒ Δε scales by k²', () => {
21
- const v = 5000, dv = 20;
22
- const k = 3.5;
23
- const base = oberthEnergyGain(v, dv);
24
- const scaled = oberthEnergyGain(k * v, k * dv);
25
- relClose(scaled, k * k * base, 1e-12, 1e-12);
26
- });
27
- test('monotonicity: Δε increases with v for fixed dv', () => {
28
- const dv = 15;
29
- const values = [2000, 4000, 8000, 12000].map((v) => oberthEnergyGain(v, dv));
30
- for (let i = 1; i < values.length; i++) {
31
- assert.ok(values[i] > values[i - 1]);
32
- }
33
- });
34
- test('monotonicity: Δε increases with dv for fixed v', () => {
35
- const v = 9000;
36
- const values = [1, 5, 25, 50, 100].map((dv) => oberthEnergyGain(v, dv));
37
- for (let i = 1; i < values.length; i++) {
38
- assert.ok(values[i] > values[i - 1]);
39
- }
40
- });
41
- // ---------------- approximation sanity vs. exact small-impulse energy change ----------------
42
- test('approximation check vs. exact Δε = v·Δv + 0.5·Δv² (prograde)', () => {
43
- const v = 9000; // m/s
44
- const dv = 10; // small impulse
45
- const approx = oberthEnergyGain(v, dv);
46
- const exact = v * dv + 0.5 * dv * dv; // neglecting gravity/curvature during the burn
47
- // The approximation should be lower than exact by ~0.5*dv²
48
- absClose(exact - approx, 0.5 * dv * dv);
49
- });
50
- // ---------------- validation ----------------
51
- test('TypeError on non-number inputs', () => {
52
- assert.throws(() => oberthEnergyGain('7800', 50), TypeError);
53
- assert.throws(() => oberthEnergyGain(7800, '50'), TypeError);
54
- });
55
- test('RangeError on non-finite/negative v or dv', () => {
56
- assert.throws(() => oberthEnergyGain(NaN, 10), RangeError);
57
- assert.throws(() => oberthEnergyGain(7500, NaN), RangeError);
58
- assert.throws(() => oberthEnergyGain(Infinity, 10), RangeError);
59
- assert.throws(() => oberthEnergyGain(7500, Infinity), RangeError);
60
- assert.throws(() => oberthEnergyGain(-1, 10), RangeError);
61
- assert.throws(() => oberthEnergyGain(7500, -0.1), RangeError);
62
- });
63
- // ---------------- large but finite values ----------------
64
- test('handles large finite numbers without overflow', () => {
65
- const v = 1e6; // m/s (synthetic test)
66
- const dv = 1e3; // m/s
67
- const dE = oberthEnergyGain(v, dv);
68
- absClose(dE, v * dv);
69
- });
70
- });
71
- //# sourceMappingURL=oberth-energy-gain.spec.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"oberth-energy-gain.spec.js","sourceRoot":"","sources":["../../../../src/categories/manoeuvres/__tests__/oberth-energy-gain.spec.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=plane-change-delta-v.spec.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"plane-change-delta-v.spec.d.ts","sourceRoot":"","sources":["../../../../src/categories/manoeuvres/__tests__/plane-change-delta-v.spec.ts"],"names":[],"mappings":""}
@@ -1,90 +0,0 @@
1
- import assert from 'node:assert/strict';
2
- import test, { describe } from 'node:test';
3
- import { planeChangeDeltaV } from '../plane-change-delta-v';
4
- import { absClose, relClose } from 'packages/equations/src/__tests__/helpers';
5
- import { toRad } from '../../helpers/radians';
6
- const PI = Math.PI;
7
- describe('planeChangeDeltaV', () => {
8
- test('Δi = 0 → Δv = 0', () => {
9
- const v = 7600; // m/s
10
- const dv = planeChangeDeltaV(v, 0);
11
- absClose(dv, 0);
12
- });
13
- test('Δi = π (180°) → Δv = 2v', () => {
14
- const v = 7600;
15
- const dv = planeChangeDeltaV(v, PI);
16
- absClose(dv, 2 * v);
17
- });
18
- test('Δi = 90° → Δv = 2 v sin(45°) = √2 v', () => {
19
- const v = 7600;
20
- const dv = planeChangeDeltaV(v, toRad(90));
21
- relClose(dv, Math.SQRT2 * v, 1e-12);
22
- });
23
- test('correctness for several angles (equality with formula)', () => {
24
- const v = 7500;
25
- const angles = [
26
- toRad(5),
27
- toRad(10),
28
- toRad(30),
29
- toRad(60),
30
- toRad(120)
31
- ];
32
- for (const di of angles) {
33
- const expected = 2 * v * Math.sin(di / 2);
34
- const dv = planeChangeDeltaV(v, di);
35
- absClose(dv, expected, 1e-12, `mismatch for Δi=${di}`);
36
- }
37
- });
38
- test('monotonicity: Δv increases with Δi on [0, π]', () => {
39
- const v = 8000;
40
- const seq = [
41
- toRad(0),
42
- toRad(10),
43
- toRad(30),
44
- toRad(60),
45
- toRad(120),
46
- toRad(180)
47
- ];
48
- let last = -1;
49
- for (const di of seq) {
50
- const dv = planeChangeDeltaV(v, di);
51
- assert.ok(dv >= last - 1e-12, `not monotone at Δi=${di}: ${dv} < ${last}`);
52
- last = dv;
53
- }
54
- });
55
- test('scales linearly with speed v', () => {
56
- const di = toRad(25);
57
- const v1 = 6000;
58
- const v2 = 9000;
59
- const dv1 = planeChangeDeltaV(v1, di);
60
- const dv2 = planeChangeDeltaV(v2, di);
61
- absClose(dv2 / dv1, v2 / v1, 1e-12);
62
- });
63
- test('input validation: TypeError for non-number v', () => {
64
- assert.throws(() => planeChangeDeltaV('7600', toRad(10)), TypeError);
65
- });
66
- test('input validation: RangeError for v non-finite or negative', () => {
67
- assert.throws(() => planeChangeDeltaV(NaN, toRad(10)), RangeError);
68
- assert.throws(() => planeChangeDeltaV(Infinity, toRad(10)), RangeError);
69
- assert.throws(() => planeChangeDeltaV(-1, toRad(10)), RangeError);
70
- });
71
- test('input validation: TypeError for non-number deltaI', () => {
72
- assert.throws(() => planeChangeDeltaV(7600, '0.1'), TypeError);
73
- });
74
- test('input validation: RangeError for deltaI non-finite', () => {
75
- assert.throws(() => planeChangeDeltaV(7600, NaN), RangeError);
76
- assert.throws(() => planeChangeDeltaV(7600, Infinity), RangeError);
77
- });
78
- test('input validation: RangeError for deltaI out of [0, π]', () => {
79
- assert.throws(() => planeChangeDeltaV(7600, -1e-6), RangeError);
80
- assert.throws(() => planeChangeDeltaV(7600, (PI + 1e-6)), RangeError);
81
- });
82
- test('edge tolerances: very small Δi returns ≈ 2 v * (Δi/2) = v*Δi', () => {
83
- const v = 7800;
84
- const di = 1e-9;
85
- const dv = planeChangeDeltaV(v, di);
86
- const smallAngleApprox = v * di;
87
- absClose(dv, smallAngleApprox, 1e-12);
88
- });
89
- });
90
- //# sourceMappingURL=plane-change-delta-v.spec.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"plane-change-delta-v.spec.js","sourceRoot":"","sources":["../../../../src/categories/manoeuvres/__tests__/plane-change-delta-v.spec.ts"],"names":[],"mappings":"AACA,OAAO,MAAM,MAAM,oBAAoB,CAAC;AACxC,OAAO,IAAI,EAAE,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,0CAA0C,CAAC;AAC9E,OAAO,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAE9C,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;AAEnB,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;IACjC,IAAI,CAAC,iBAAiB,EAAE,GAAG,EAAE;QAC3B,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,MAAM;QACtB,MAAM,EAAE,GAAG,iBAAiB,CAAC,CAAC,EAAE,CAAY,CAAC,CAAC;QAC9C,QAAQ,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,yBAAyB,EAAE,GAAG,EAAE;QACnC,MAAM,CAAC,GAAG,IAAI,CAAC;QACf,MAAM,EAAE,GAAG,iBAAiB,CAAC,CAAC,EAAE,EAAa,CAAC,CAAC;QAC/C,QAAQ,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACtB,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,qCAAqC,EAAE,GAAG,EAAE;QAC/C,MAAM,CAAC,GAAG,IAAI,CAAC;QACf,MAAM,EAAE,GAAG,iBAAiB,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;QAC3C,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC,KAAK,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,wDAAwD,EAAE,GAAG,EAAE;QAClE,MAAM,CAAC,GAAG,IAAI,CAAC;QACf,MAAM,MAAM,GAAc;YACxB,KAAK,CAAC,CAAC,CAAC;YACR,KAAK,CAAC,EAAE,CAAC;YACT,KAAK,CAAC,EAAE,CAAC;YACT,KAAK,CAAC,EAAE,CAAC;YACT,KAAK,CAAC,GAAG,CAAC;SACX,CAAC;QACF,KAAK,MAAM,EAAE,IAAI,MAAM,EAAE,CAAC;YACxB,MAAM,QAAQ,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAE,EAAa,GAAG,CAAC,CAAC,CAAC;YACtD,MAAM,EAAE,GAAG,iBAAiB,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACpC,QAAQ,CAAC,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,mBAAmB,EAAE,EAAE,CAAC,CAAC;QACzD,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,8CAA8C,EAAE,GAAG,EAAE;QACxD,MAAM,CAAC,GAAG,IAAI,CAAC;QACf,MAAM,GAAG,GAAc;YACrB,KAAK,CAAC,CAAC,CAAC;YACR,KAAK,CAAC,EAAE,CAAC;YACT,KAAK,CAAC,EAAE,CAAC;YACT,KAAK,CAAC,EAAE,CAAC;YACT,KAAK,CAAC,GAAG,CAAC;YACV,KAAK,CAAC,GAAG,CAAC;SACX,CAAC;QACF,IAAI,IAAI,GAAG,CAAC,CAAC,CAAC;QACd,KAAK,MAAM,EAAE,IAAI,GAAG,EAAE,CAAC;YACrB,MAAM,EAAE,GAAG,iBAAiB,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACpC,MAAM,CAAC,EAAE,CACP,EAAE,IAAI,IAAI,GAAG,KAAK,EAClB,sBAAsB,EAAE,KAAK,EAAE,MAAM,IAAI,EAAE,CAC5C,CAAC;YACF,IAAI,GAAG,EAAE,CAAC;QACZ,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,8BAA8B,EAAE,GAAG,EAAE;QACxC,MAAM,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC;QACrB,MAAM,EAAE,GAAG,IAAI,CAAC;QAChB,MAAM,EAAE,GAAG,IAAI,CAAC;QAChB,MAAM,GAAG,GAAG,iBAAiB,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;QACtC,MAAM,GAAG,GAAG,iBAAiB,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;QACtC,QAAQ,CAAC,GAAG,GAAG,GAAG,EAAE,EAAE,GAAG,EAAE,EAAE,KAAK,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,8CAA8C,EAAE,GAAG,EAAE;QACxD,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,iBAAiB,CAAC,MAAa,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;IAC9E,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,2DAA2D,EAAE,GAAG,EAAE;QACrE,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,iBAAiB,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;QACnE,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,iBAAiB,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;QACxE,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;IACpE,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,mDAAmD,EAAE,GAAG,EAAE;QAC7D,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,iBAAiB,CAAC,IAAI,EAAE,KAAY,CAAC,EAAE,SAAS,CAAC,CAAC;IACxE,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,oDAAoD,EAAE,GAAG,EAAE;QAC9D,MAAM,CAAC,MAAM,CACX,GAAG,EAAE,CAAC,iBAAiB,CAAC,IAAI,EAAE,GAAyB,CAAC,EACxD,UAAU,CACX,CAAC;QACF,MAAM,CAAC,MAAM,CACX,GAAG,EAAE,CAAC,iBAAiB,CAAC,IAAI,EAAE,QAA8B,CAAC,EAC7D,UAAU,CACX,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,uDAAuD,EAAE,GAAG,EAAE;QACjE,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,iBAAiB,CAAC,IAAI,EAAE,CAAC,IAAe,CAAC,EAAE,UAAU,CAAC,CAAC;QAC3E,MAAM,CAAC,MAAM,CACX,GAAG,EAAE,CAAC,iBAAiB,CAAC,IAAI,EAAE,CAAC,EAAE,GAAG,IAAI,CAAY,CAAC,EACrD,UAAU,CACX,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,8DAA8D,EAAE,GAAG,EAAE;QACxE,MAAM,CAAC,GAAG,IAAI,CAAC;QACf,MAAM,EAAE,GAAG,IAAe,CAAC;QAC3B,MAAM,EAAE,GAAG,iBAAiB,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACpC,MAAM,gBAAgB,GAAG,CAAC,GAAI,EAAa,CAAC;QAC5C,QAAQ,CAAC,EAAE,EAAE,gBAAgB,EAAE,KAAK,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=rocket-delta-v-from-isp.spec.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"rocket-delta-v-from-isp.spec.d.ts","sourceRoot":"","sources":["../../../../src/categories/manoeuvres/__tests__/rocket-delta-v-from-isp.spec.ts"],"names":[],"mappings":""}