import { describe, it, expect } from 'vitest'; import { gainedIn, timeToGain, gaugeAfter } from '@domain/services/GaugeCalculator'; describe('Regression: Gauge tier calculations', () => { it('gaugeAfter is inverse of gainedIn', () => { // For a given level and time, gaugeAfter should equal level - gainedIn const level = 80000; const sec = 100; // 10 ticks const gained = gainedIn(level, sec); const after = gaugeAfter(level, sec); expect(after).toBe(level - gained); }); it('timeToGain matches gainedIn for exact amounts', () => { // If gainedIn(50000, 100) = X, then timeToGain(50000, X) should be <= 100 const level = 50000; const sec = 100; const gained = gainedIn(level, sec); if (gained > 0) { const time = timeToGain(level, gained); expect(time).toBeLessThanOrEqual(sec); } }); it('boundary: level exactly at tier threshold', () => { // Level 40000 = tier 1 (<=40000), rate 10 expect(gaugeAfter(40000, 10)).toBe(39990); // 1 tick at rate 10 // Level 40001 = tier 2 (>40000), but only 1 pt above threshold // 1 pt in tier 2 zone: floor(1/20)=0 ticks consumed there, falls through to tier 1 expect(gaugeAfter(40001, 10)).toBe(39991); // 1 tick at rate 10 in tier 1 zone }); it('does not produce negative values', () => { expect(gaugeAfter(10, 100000)).toBe(0); expect(gainedIn(10, 100000)).toBe(10); }); });