46
46
]
47
47
48
48
let suite = [ ("progression.evaluate", progression_tests) ]
49
+
Added:
50
+
Added:
let band_tests =
51
+
Added:
let target_reps =
52
+
Added:
Units.Rep_range.make
53
+
Added:
~min:(ok (Units.Reps.of_int 6))
54
+
Added:
~max:(ok (Units.Reps.of_int 8))
55
+
Added:
|> ok
56
+
Added:
in
57
+
Added:
[
58
+
Added:
( "below the band is Below_range",
59
+
Added:
`Quick,
60
+
Added:
fun () ->
61
+
Added:
Alcotest.(check bool)
62
+
Added:
"below" true
63
+
Added:
(Progression.classify ~target_reps (sample 80.0 4)
64
+
Added:
= Progression.Below_range) );
65
+
Added:
( "within the band is In_range",
66
+
Added:
`Quick,
67
+
Added:
fun () ->
68
+
Added:
Alcotest.(check bool)
69
+
Added:
"in range" true
70
+
Added:
(Progression.classify ~target_reps (sample 80.0 7)
71
+
Added:
= Progression.In_range) );
72
+
Added:
( "above the band is Above_range",
73
+
Added:
`Quick,
74
+
Added:
fun () ->
75
+
Added:
Alcotest.(check bool)
76
+
Added:
"above" true
77
+
Added:
(Progression.classify ~target_reps (sample 80.0 9)
78
+
Added:
= Progression.Above_range) );
79
+
Added:
]
80
+
Added:
81
+
Added:
let guide_tests =
82
+
Added:
let target_reps =
83
+
Added:
Units.Rep_range.make
84
+
Added:
~min:(ok (Units.Reps.of_int 6))
85
+
Added:
~max:(ok (Units.Reps.of_int 8))
86
+
Added:
|> ok
87
+
Added:
in
88
+
Added:
[
89
+
Added:
( "under the band top: next target adds a rep at the same load",
90
+
Added:
`Quick,
91
+
Added:
fun () ->
92
+
Added:
let g = Progression.guide ~target_reps (sample 80.0 6) in
93
+
Added:
match g.next with
94
+
Added:
| Progression.Add_reps { load; min_reps } ->
95
+
Added:
Alcotest.(check (float 0.0001))
96
+
Added:
"same load" 80.0 (Units.Weight.to_kg load);
97
+
Added:
Alcotest.(check int) "one more rep" 7 (Units.Reps.to_int min_reps)
98
+
Added:
| Add_load _ -> Alcotest.fail "expected Add_reps" );
99
+
Added:
( "at the band top: next target adds load and resets to the bottom",
100
+
Added:
`Quick,
101
+
Added:
fun () ->
102
+
Added:
let g = Progression.guide ~target_reps (sample 80.0 8) in
103
+
Added:
match g.next with
104
+
Added:
| Progression.Add_load { min_load; reps } ->
105
+
Added:
Alcotest.(check bool)
106
+
Added:
"load increased" true
107
+
Added:
(Units.Weight.to_kg min_load > 80.0);
108
+
Added:
Alcotest.(check int)
109
+
Added:
"resets to band bottom" 6 (Units.Reps.to_int reps)
110
+
Added:
| Add_reps _ -> Alcotest.fail "expected Add_load" );
111
+
Added:
( "past the band: next target adds load too",
112
+
Added:
`Quick,
113
+
Added:
fun () ->
114
+
Added:
let g = Progression.guide ~target_reps (sample 80.0 9) in
115
+
Added:
match g.next with
116
+
Added:
| Progression.Add_load _ -> ()
117
+
Added:
| Add_reps _ -> Alcotest.fail "expected Add_load" );
118
+
Added:
]
119
+
Added:
120
+
Added:
let prescribe_tests =
121
+
Added:
let target_reps =
122
+
Added:
Units.Rep_range.make
123
+
Added:
~min:(ok (Units.Reps.of_int 6))
124
+
Added:
~max:(ok (Units.Reps.of_int 8))
125
+
Added:
|> ok
126
+
Added:
in
127
+
Added:
[
128
+
Added:
( "prescribe carries the evidence it was derived from",
129
+
Added:
`Quick,
130
+
Added:
fun () ->
131
+
Added:
let evidence = [ sample 80.0 6; sample 82.5 6 ] in
132
+
Added:
let p = Progression.prescribe ~target_reps ~evidence in
133
+
Added:
Alcotest.(check int)
134
+
Added:
"evidence retained" 2
135
+
Added:
(List.length p.Progression.evidence) );
136
+
Added:
( "prescribe's status matches evaluate",
137
+
Added:
`Quick,
138
+
Added:
fun () ->
139
+
Added:
let evidence = [ sample 80.0 6; sample 82.5 6 ] in
140
+
Added:
let p = Progression.prescribe ~target_reps ~evidence in
141
+
Added:
Alcotest.(check bool)
142
+
Added:
"progressing" true
143
+
Added:
(p.Progression.status = Progression.Progressing) );
144
+
Added:
]
145
+
Added:
146
+
Added:
let volume_tests =
147
+
Added:
[
148
+
Added:
( "volume sums load times reps",
149
+
Added:
`Quick,
150
+
Added:
fun () ->
151
+
Added:
let v = Progression.volume [ sample 80.0 6; sample 20.0 12 ] in
152
+
Added:
Alcotest.(check (float 0.0001)) "volume" 720.0 v );
153
+
Added:
( "empty history has zero volume",
154
+
Added:
`Quick,
155
+
Added:
fun () ->
156
+
Added:
Alcotest.(check (float 0.0001)) "zero" 0.0 (Progression.volume []) );
157
+
Added:
]
158
+
Added:
159
+
Added:
let suite =
160
+
Added:
suite
161
+
Added:
@ [
162
+
Added:
("progression.band", band_tests);
163
+
Added:
("progression.guide", guide_tests);
164
+
Added:
("progression.prescribe", prescribe_tests);
165
+
Added:
("progression.volume", volume_tests);
166
+
Added:
]