UNPKG

powerhouse-rp-toolkit

Version:

Renaissance Periodization Training Toolkit for PowerHouseATX

80 lines (70 loc) 2.13 kB
import trainingState from "../core/trainingState.js"; import { isHighFatigue, calculateOptimalFrequency, } from "../algorithms/fatigue.js"; describe("isHighFatigue", () => { test("detects low stimulus to fatigue ratio", () => { const state = { repStrengthDrop: () => false }; const feedback = { soreness: 2, jointAche: 2, perfChange: 0, pump: 1, disruption: 0, }; expect(isHighFatigue("Chest", feedback, state)).toBe(true); }); test("detects strength drop despite high SFR", () => { const state = { repStrengthDrop: () => true }; const feedback = { soreness: 0, jointAche: 0, perfChange: 0, pump: 3, disruption: 3, lastLoad: 90, }; expect(isHighFatigue("Chest", feedback, state)).toBe(true); }); test("returns false when stimulus outweighs fatigue", () => { const state = { repStrengthDrop: () => false }; const feedback = { soreness: 0, jointAche: 0, perfChange: 1, pump: 3, disruption: 3, }; expect(isHighFatigue("Chest", feedback, state)).toBe(false); }); }); describe("calculateOptimalFrequency", () => { let originalSets; beforeAll(() => { originalSets = { ...trainingState.currentWeekSets }; }); afterEach(() => { trainingState.currentWeekSets = { ...originalSets }; }); test("computes frequency from current volume", () => { trainingState.currentWeekSets.Chest = 12; const result = calculateOptimalFrequency("Chest", { availableDays: 5 }); expect(result.recommendedFrequency).toBe(2); expect(result.setsPerSession).toBe(6); }); test("handles high volume and recovery capacity", () => { trainingState.currentWeekSets.Chest = 20; const result = calculateOptimalFrequency("Chest", { availableDays: 6, recoveryCapacity: "high", }); expect(result.recommendedFrequency).toBe(4); expect(result.setsPerSession).toBe(5); }); test("throws for missing landmarks", () => { expect(() => calculateOptimalFrequency("Unknown")).toThrow( "Missing volume landmarks", ); }); });