96 lines
2.9 KiB
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);
|
|
}
|
|
});
|
|
});
|
|
}
|