Max range display is the guaranteed (worst-case headwind) full-tank range (ISS-099, v0.51.0)
CI / build + unit + e2e (pull_request) Successful in 12m47s
CI / build + unit + e2e (pull_request) Successful in 12m47s
This commit is contained in:
@@ -5,6 +5,8 @@ import {
|
||||
burnRateConstant,
|
||||
FUEL_DENSITY_KG_PER_L,
|
||||
fuelAtWeighted,
|
||||
guaranteedRangeKm,
|
||||
MAX_WIND_BURN_FACTOR,
|
||||
maxRangeKm,
|
||||
positionAt,
|
||||
progressAt,
|
||||
@@ -234,3 +236,22 @@ describe('maxRangeKm (v0.28.0)', () => {
|
||||
expect(() => maxRangeKm(BURN, 0, TANK)).toThrow();
|
||||
});
|
||||
});
|
||||
|
||||
describe('guaranteedRangeKm (v0.51.0, ISS-099)', () => {
|
||||
it("MAX_WIND_BURN_FACTOR is windBurnFactor's actual maximum over the weather domain", () => {
|
||||
// Full headwind at max wind: exactly +20% — the constant must track the factor function, not a copy.
|
||||
expect(MAX_WIND_BURN_FACTOR).toBe(windBurnFactor(30, 90, 90));
|
||||
});
|
||||
|
||||
it('is maxRangeKm under worst-case headwind burn (ATR ≈ 3696 km ±5%)', () => {
|
||||
const r = guaranteedRangeKm(BURN, WE, TANK);
|
||||
expect(r).toBeCloseTo(maxRangeKm(BURN * MAX_WIND_BURN_FACTOR, WE, TANK), 12);
|
||||
expect(r).toBeGreaterThan(3696 * 0.95);
|
||||
expect(r).toBeLessThan(3696 * 1.05);
|
||||
});
|
||||
|
||||
it('zero fuel → zero range; rejects a non-positive empty weight', () => {
|
||||
expect(guaranteedRangeKm(BURN, WE, 0)).toBe(0);
|
||||
expect(() => guaranteedRangeKm(BURN, 0, TANK)).toThrow();
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user