79SCENARIO(
"Calculating Blocks",
"[userGainCtrl]" )
81 GIVEN(
"No Zernikes" )
84 std::vector<uint16_t> blocks;
85 std::vector<std::string> names;
89 rv =
blockModes( blocks, names, 24, 0,
false );
92 REQUIRE( blocks.size() == 1 );
93 REQUIRE( blocks[0] == 24 );
95 rv =
blockModes( blocks, names, 80, 0,
false );
98 REQUIRE( blocks.size() == 2 );
99 REQUIRE( blocks[0] == 24 );
100 REQUIRE( blocks[1] == 56 );
102 rv =
blockModes( blocks, names, 168, 0,
false );
105 REQUIRE( blocks.size() == 3 );
106 REQUIRE( blocks[0] == 24 );
107 REQUIRE( blocks[1] == 56 );
108 REQUIRE( blocks[2] == 88 );
112 WHEN(
"Partial blocks" )
114 rv =
blockModes( blocks, names, 25, 0,
false );
117 REQUIRE( blocks.size() == 2 );
118 REQUIRE( blocks[0] == 24 );
119 REQUIRE( blocks[1] == 1 );
121 rv =
blockModes( blocks, names, 85, 0,
false );
124 REQUIRE( blocks.size() == 3 );
125 REQUIRE( blocks[0] == 24 );
126 REQUIRE( blocks[1] == 56 );
127 REQUIRE( blocks[2] == 5 );
129 rv =
blockModes( blocks, names, 287, 0,
false );
132 REQUIRE( blocks.size() == 4 );
133 REQUIRE( blocks[0] == 24 );
134 REQUIRE( blocks[1] == 56 );
135 REQUIRE( blocks[2] == 88 );
136 REQUIRE( blocks[3] == 119 );
140 WHEN(
"Full blocks, Zernikes in 1 block, no split" )
142 rv =
blockModes( blocks, names, 24, 10,
false );
144 REQUIRE( blocks.size() == 4 );
145 REQUIRE( blocks[0] == 2 );
146 REQUIRE( blocks[1] == 1 );
147 REQUIRE( blocks[2] == 7 );
148 REQUIRE( blocks[3] == 14 );
150 rv =
blockModes( blocks, names, 80, 5,
false );
153 REQUIRE( blocks.size() == 5 );
154 REQUIRE( blocks[0] == 2 );
155 REQUIRE( blocks[1] == 1 );
156 REQUIRE( blocks[2] == 2 );
157 REQUIRE( blocks[3] == 19 );
158 REQUIRE( blocks[4] == 56 );
160 rv =
blockModes( blocks, names, 168, 23,
false );
163 REQUIRE( blocks.size() == 6 );
164 REQUIRE( blocks[0] == 2 );
165 REQUIRE( blocks[1] == 1 );
166 REQUIRE( blocks[2] == 20 );
167 REQUIRE( blocks[3] == 1 );
168 REQUIRE( blocks[4] == 56 );
169 REQUIRE( blocks[5] == 88 );
172 WHEN(
"Full blocks, Zernikes in 2 blocks, no split" )
174 rv =
blockModes( blocks, names, 24, 25,
false );
177 REQUIRE( blocks.size() == 3 );
178 REQUIRE( blocks[0] == 2 );
179 REQUIRE( blocks[1] == 1 );
180 REQUIRE( blocks[2] == 22 );
182 rv =
blockModes( blocks, names, 80, 25,
false );
185 REQUIRE( blocks.size() == 4 );
186 REQUIRE( blocks[0] == 2 );
187 REQUIRE( blocks[1] == 1 );
188 REQUIRE( blocks[2] == 22 );
189 REQUIRE( blocks[3] == 55 );
191 rv =
blockModes( blocks, names, 168, 79,
false );
193 REQUIRE( blocks.size() == 5 );
194 REQUIRE( blocks[0] == 2 );
195 REQUIRE( blocks[1] == 1 );
196 REQUIRE( blocks[2] == 76 );
197 REQUIRE( blocks[3] == 1 );
198 REQUIRE( blocks[4] == 88 );
201 WHEN(
"Partial blocks, Zernikes in 1 block, no split" )
203 rv =
blockModes( blocks, names, 25, 10,
false );
206 REQUIRE( blocks.size() == 5 );
207 REQUIRE( blocks[0] == 2 );
208 REQUIRE( blocks[1] == 1 );
209 REQUIRE( blocks[2] == 7 );
210 REQUIRE( blocks[3] == 14 );
211 REQUIRE( blocks[4] == 1 );
213 rv =
blockModes( blocks, names, 85, 5,
false );
216 REQUIRE( blocks.size() == 6 );
217 REQUIRE( blocks[0] == 2 );
218 REQUIRE( blocks[1] == 1 );
219 REQUIRE( blocks[2] == 2 );
220 REQUIRE( blocks[3] == 19 );
221 REQUIRE( blocks[4] == 56 );
222 REQUIRE( blocks[5] == 5 );
224 rv =
blockModes( blocks, names, 287, 23,
false );
227 REQUIRE( blocks.size() == 7 );
228 REQUIRE( blocks[0] == 2 );
229 REQUIRE( blocks[1] == 1 );
230 REQUIRE( blocks[2] == 20 );
231 REQUIRE( blocks[3] == 1 );
232 REQUIRE( blocks[4] == 56 );
233 REQUIRE( blocks[5] == 88 );
234 REQUIRE( blocks[6] == 119 );
237 WHEN(
"Partial blocks, Zernikes in 2 blocks, no split" )
239 rv =
blockModes( blocks, names, 26, 25,
false );
242 REQUIRE( blocks.size() == 4 );
243 REQUIRE( blocks[0] == 2 );
244 REQUIRE( blocks[1] == 1 );
245 REQUIRE( blocks[2] == 22 );
246 REQUIRE( blocks[3] == 1 );
248 rv =
blockModes( blocks, names, 85, 25,
false );
251 REQUIRE( blocks.size() == 5 );
252 REQUIRE( blocks[0] == 2 );
253 REQUIRE( blocks[1] == 1 );
254 REQUIRE( blocks[2] == 22 );
255 REQUIRE( blocks[3] == 55 );
256 REQUIRE( blocks[4] == 5 );
258 rv =
blockModes( blocks, names, 287, 79,
false );
261 REQUIRE( blocks.size() == 6 );
262 REQUIRE( blocks[0] == 2 );
263 REQUIRE( blocks[1] == 1 );
264 REQUIRE( blocks[2] == 76 );
265 REQUIRE( blocks[3] == 1 );
266 REQUIRE( blocks[4] == 88 );
267 REQUIRE( blocks[5] == 119 );
270 WHEN(
"Full blocks, Zernikes in 1 block, with split" )
272 rv =
blockModes( blocks, names, 24, 10,
true );
274 REQUIRE( blocks.size() == 5 );
275 REQUIRE( blocks[0] == 1 );
276 REQUIRE( blocks[1] == 1 );
277 REQUIRE( blocks[2] == 1 );
278 REQUIRE( blocks[3] == 7 );
279 REQUIRE( blocks[4] == 14 );
281 rv =
blockModes( blocks, names, 80, 5,
true );
284 REQUIRE( blocks.size() == 6 );
285 REQUIRE( blocks[0] == 1 );
286 REQUIRE( blocks[1] == 1 );
287 REQUIRE( blocks[2] == 1 );
288 REQUIRE( blocks[3] == 2 );
289 REQUIRE( blocks[4] == 19 );
290 REQUIRE( blocks[5] == 56 );
292 rv =
blockModes( blocks, names, 168, 23,
true );
295 REQUIRE( blocks.size() == 7 );
296 REQUIRE( blocks[0] == 1 );
297 REQUIRE( blocks[1] == 1 );
298 REQUIRE( blocks[2] == 1 );
299 REQUIRE( blocks[3] == 20 );
300 REQUIRE( blocks[4] == 1 );
301 REQUIRE( blocks[5] == 56 );
302 REQUIRE( blocks[6] == 88 );
305 WHEN(
"Full blocks, Zernikes in 2 blocks, with split" )
307 rv =
blockModes( blocks, names, 24, 25,
true );
310 REQUIRE( blocks.size() == 4 );
311 REQUIRE( blocks[0] == 1 );
312 REQUIRE( blocks[1] == 1 );
313 REQUIRE( blocks[2] == 1 );
314 REQUIRE( blocks[3] == 22 );
316 rv =
blockModes( blocks, names, 80, 25,
true );
319 REQUIRE( blocks.size() == 5 );
320 REQUIRE( blocks[0] == 1 );
321 REQUIRE( blocks[1] == 1 );
322 REQUIRE( blocks[2] == 1 );
323 REQUIRE( blocks[3] == 22 );
324 REQUIRE( blocks[4] == 55 );
326 rv =
blockModes( blocks, names, 168, 79,
true );
328 REQUIRE( blocks.size() == 6 );
329 REQUIRE( blocks[0] == 1 );
330 REQUIRE( blocks[1] == 1 );
331 REQUIRE( blocks[2] == 1 );
332 REQUIRE( blocks[3] == 76 );
333 REQUIRE( blocks[4] == 1 );
334 REQUIRE( blocks[5] == 88 );
337 WHEN(
"Partial blocks, Zernikes in 1 block, with split" )
339 rv =
blockModes( blocks, names, 25, 10,
true );
342 REQUIRE( blocks.size() == 6 );
343 REQUIRE( blocks[0] == 1 );
344 REQUIRE( blocks[1] == 1 );
345 REQUIRE( blocks[2] == 1 );
346 REQUIRE( blocks[3] == 7 );
347 REQUIRE( blocks[4] == 14 );
348 REQUIRE( blocks[5] == 1 );
350 rv =
blockModes( blocks, names, 85, 5,
true );
353 REQUIRE( blocks.size() == 7 );
354 REQUIRE( blocks[0] == 1 );
355 REQUIRE( blocks[1] == 1 );
356 REQUIRE( blocks[2] == 1 );
357 REQUIRE( blocks[3] == 2 );
358 REQUIRE( blocks[4] == 19 );
359 REQUIRE( blocks[5] == 56 );
360 REQUIRE( blocks[6] == 5 );
362 rv =
blockModes( blocks, names, 287, 23,
true );
365 REQUIRE( blocks.size() == 8 );
366 REQUIRE( blocks[0] == 1 );
367 REQUIRE( blocks[1] == 1 );
368 REQUIRE( blocks[2] == 1 );
369 REQUIRE( blocks[3] == 20 );
370 REQUIRE( blocks[4] == 1 );
371 REQUIRE( blocks[5] == 56 );
372 REQUIRE( blocks[6] == 88 );
373 REQUIRE( blocks[7] == 119 );
376 WHEN(
"Partial blocks, Zernikes in 2 blocks, with split" )
378 rv =
blockModes( blocks, names, 26, 25,
true );
381 REQUIRE( blocks.size() == 5 );
382 REQUIRE( blocks[0] == 1 );
383 REQUIRE( blocks[1] == 1 );
384 REQUIRE( blocks[2] == 1 );
385 REQUIRE( blocks[3] == 22 );
386 REQUIRE( blocks[4] == 1 );
388 rv =
blockModes( blocks, names, 85, 25,
true );
391 REQUIRE( blocks.size() == 6 );
392 REQUIRE( blocks[0] == 1 );
393 REQUIRE( blocks[1] == 1 );
394 REQUIRE( blocks[2] == 1 );
395 REQUIRE( blocks[3] == 22 );
396 REQUIRE( blocks[4] == 55 );
397 REQUIRE( blocks[5] == 5 );
399 rv =
blockModes( blocks, names, 287, 79,
true );
402 REQUIRE( blocks.size() == 7 );
403 REQUIRE( blocks[0] == 1 );
404 REQUIRE( blocks[1] == 1 );
405 REQUIRE( blocks[2] == 1 );
406 REQUIRE( blocks[3] == 76 );
407 REQUIRE( blocks[4] == 1 );
408 REQUIRE( blocks[5] == 88 );
409 REQUIRE( blocks[6] == 119 );
413 WHEN(
"Partial blocks, Zernikes in 3 blocks, with split" )
415 rv =
blockModes( blocks, names, 26, 81,
true );
418 REQUIRE( blocks.size() == 4 );
419 REQUIRE( blocks[0] == 1 );
420 REQUIRE( blocks[1] == 1 );
421 REQUIRE( blocks[2] == 1 );
422 REQUIRE( blocks[3] == 78 );
424 rv =
blockModes( blocks, names, 85, 81,
true );
427 REQUIRE( blocks.size() == 5 );
428 REQUIRE( blocks[0] == 1 );
429 REQUIRE( blocks[1] == 1 );
430 REQUIRE( blocks[2] == 1 );
431 REQUIRE( blocks[3] == 78 );
432 REQUIRE( blocks[4] == 4 );
434 rv =
blockModes( blocks, names, 287, 100,
true );
437 REQUIRE( blocks.size() == 6 );
438 REQUIRE( blocks[0] == 1 );
439 REQUIRE( blocks[1] == 1 );
440 REQUIRE( blocks[2] == 1 );
441 REQUIRE( blocks[3] == 97 );
442 REQUIRE( blocks[4] == 68 );
443 REQUIRE( blocks[5] == 119 );
446 WHEN(
"The Full MagAO-X" )
448 rv =
blockModes( blocks, names, 2400, 10,
true );
451 REQUIRE( blocks.size() == 16 );
452 REQUIRE( blocks[0] == 1 );
453 REQUIRE( blocks[1] == 1 );
454 REQUIRE( blocks[2] == 1 );
455 REQUIRE( blocks[3] == 7 );
456 REQUIRE( blocks[4] == 14 );
457 REQUIRE( blocks[5] == 56 );
458 REQUIRE( blocks[6] == 88 );
459 REQUIRE( blocks[7] == 120 );
460 REQUIRE( blocks[8] == 152 );
461 REQUIRE( blocks[9] == 184 );
462 REQUIRE( blocks[10] == 216 );
463 REQUIRE( blocks[11] == 248 );
464 REQUIRE( blocks[12] == 280 );
465 REQUIRE( blocks[13] == 312 );
466 REQUIRE( blocks[14] == 344 );
467 REQUIRE( blocks[15] == 376 );