slrpg-app/test/wendler_calculator_test.dart

96 lines
2.9 KiB
Dart

import 'package:flutter_test/flutter_test.dart';
import 'package:slrpg_app/src/shared/domain/logic/wendler_calculator.dart';
void main() {
group('WendlerCalculator', () {
const double bodyweight = 80.0;
test('Week 1 (5/5/5+) generates correct percentages and reps', () {
// Setup: Squat TM 100kg
final sets = WendlerCalculator.generateSets(
week: 1,
trainingMax: 100.0,
exerciseType: ExerciseType.squat,
currentBodyweight: bodyweight,
);
expect(sets.length, 3);
// Set 1: 65% = 65kg
expect(sets[0].targetPercentage, 65);
expect(sets[0].targetWeightTotal, 65.0);
expect(sets[0].repsTarget, 5);
expect(sets[0].isAmrap, false);
// Set 2: 75% = 75kg
expect(sets[1].targetPercentage, 75);
expect(sets[1].targetWeightTotal, 75.0);
expect(sets[1].repsTarget, 5);
// Set 3: 85% = 85kg (AMRAP)
expect(sets[2].targetPercentage, 85);
expect(sets[2].targetWeightTotal, 85.0);
expect(sets[2].repsTarget, 5);
expect(sets[2].isAmrap, true);
});
test('Squat rounding works (2.5kg steps)', () {
// 65% of 105kg = 68.25kg -> Should round down to 67.5kg
final sets = WendlerCalculator.generateSets(
week: 1,
trainingMax: 105.0,
exerciseType: ExerciseType.squat,
currentBodyweight: bodyweight,
);
expect(sets[0].targetWeightTotal, 67.5);
});
test('Pullup calculation considers bodyweight', () {
// TM 100kg, BW 80kg -> Target 65kg (65%)
// Since Target (65) < BW (80), plate weight should be 0 (assistance/bodyweight logic handles negative)
// But WendlerCalculator returns total system weight in targetWeightTotal
final sets = WendlerCalculator.generateSets(
week: 1,
trainingMax: 100.0,
exerciseType: ExerciseType.pullup,
currentBodyweight: bodyweight,
);
expect(sets[0].targetWeightTotal, 65.0); // System weight
expect(sets[0].plateWeight, 0.0); // No added weight
});
test('Pullup calculation with added weight', () {
// TM 150kg -> 65% = 97.5kg
// BW 80kg -> Added weight = 17.5kg
final sets = WendlerCalculator.generateSets(
week: 1,
trainingMax: 150.0,
exerciseType: ExerciseType.pullup,
currentBodyweight: bodyweight,
);
expect(sets[0].targetWeightTotal, 97.5);
expect(sets[0].plateWeight, 17.5);
});
test('FSL generates 5x5 at 65%', () {
final fslSets = WendlerCalculator.generateFSLSets(
trainingMax: 100.0,
exerciseType: ExerciseType.squat,
currentBodyweight: bodyweight,
);
expect(fslSets.length, 5);
for (var set in fslSets) {
expect(set.targetPercentage, 65);
expect(set.targetWeightTotal, 65.0);
expect(set.repsTarget, 5);
expect(set.isAmrap, false);
}
});
});
}