28 #include <visir_inputs.h>
30 #include "visir_inputs.c"
43 #define LINE_SIZE BOX_SIZE
46 #define TEST_LIST(list, value) \
48 for (int i = 0; i < cpl_imagelist_get_size((list)); i++) { \
50 const cpl_image * image = cpl_imagelist_get_const((list), i); \
51 cpl_test_eq((value), cpl_image_get(image, 1, 1, &b)); \
63 static void visir_img_check_box_test(
void);
64 static void visir_img_check_align_test(
void);
65 static void visir_img_check_line_test(
void);
66 static void visir_check_get_type(
void);
67 static void visir_img_check_burst_find_delta_chop(
void);
68 static void visir_img_check_load_burst(
void);
69 static void visir_img_check_get_to_off_plane(
void);
70 static void visir_img_check_load_cube2(
void);
72 static cpl_propertylist * create_property_list(
const char *,
77 static cpl_imagelist * create_cube2_imagelist(
int);
78 static cpl_imagelist * create_input_imagelist(
const int *,
int);
96 cpl_test_init(PACKAGE_BUGREPORT, CPL_MSG_WARNING);
98 visir_img_check_line_test();
99 visir_img_check_align_test();
100 visir_img_check_box_test();
101 visir_check_get_type();
102 visir_img_check_burst_find_delta_chop();
103 visir_img_check_load_burst();
104 visir_img_check_get_to_off_plane();
105 visir_img_check_load_cube2();
107 return cpl_test_end(0);
113 static void visir_img_check_box_test(
void)
117 const double sigma = 1.0;
118 cpl_apertures * appos;
119 cpl_apertures * apneg;
121 cpl_boolean swapp, swapn;
123 cpl_error_code error = CPL_ERROR_NONE;
126 stream = cpl_msg_get_level() > CPL_MSG_INFO
127 ? fopen(
"/dev/null",
"a") : stdout;
129 cpl_test_nonnull( stream );
131 image = cpl_image_new(3 * BOX_SIZE, 3 * BOX_SIZE, CPL_TYPE_INT);
134 for (j = -1; j <= 1; j++) {
135 for (i = -1; i <= 1; i++) {
136 error |= cpl_image_set(image, BOX_SIZE + i, BOX_SIZE + j, -1.0);
137 error |= cpl_image_set(image, 2*BOX_SIZE + i, 2*BOX_SIZE + j, -1.0);
138 error |= cpl_image_set(image, BOX_SIZE + i, 2*BOX_SIZE + j, 1.0);
139 error |= cpl_image_set(image, 2*BOX_SIZE + i, BOX_SIZE + j, 1.0);
140 cpl_test_eq_error(error, CPL_ERROR_NONE);
144 appos = cpl_apertures_extract_sigma(image, sigma);
145 cpl_test_error(CPL_ERROR_NONE);
146 cpl_test_nonnull(appos);
147 cpl_test_eq(cpl_apertures_get_size(appos), 2);
149 cpl_apertures_dump(appos, stream);
151 error = cpl_image_multiply_scalar(image, -1.0);
152 cpl_test_eq_error(error, CPL_ERROR_NONE);
154 apneg = cpl_apertures_extract_sigma(image, sigma);
155 cpl_test_error(CPL_ERROR_NONE);
156 cpl_test_nonnull(apneg);
157 cpl_test_eq(cpl_apertures_get_size(apneg), 2);
159 cpl_apertures_dump(apneg, stream);
162 ecc = visir_img_check_box(NULL, 1, 2, apneg, 1, 2, BOX_SIZE, 0.,
164 cpl_test_error(CPL_ERROR_NULL_INPUT);
166 ecc = visir_img_check_box(appos, 1, 2, NULL, 1, 2, BOX_SIZE, 0.,
168 cpl_test_error(CPL_ERROR_NULL_INPUT);
170 ecc = visir_img_check_box(appos, 1, 2, apneg, 1, 2, BOX_SIZE, 0.,
172 cpl_test_error(CPL_ERROR_UNSPECIFIED);
174 ecc = visir_img_check_box(appos, 1, 2, apneg, 1, 2, BOX_SIZE, 0.,
176 cpl_test_error(CPL_ERROR_UNSPECIFIED);
178 ecc = visir_img_check_box(appos, 1, 2, appos, 1, 2, BOX_SIZE, 0.,
180 cpl_test_error(CPL_ERROR_UNSPECIFIED);
182 ecc = visir_img_check_box(appos, 0, 2, apneg, 1, 2, BOX_SIZE, 0.,
184 cpl_test_error(CPL_ERROR_ILLEGAL_INPUT);
186 ecc = visir_img_check_box(appos, 1, 2, apneg, 1, 0, BOX_SIZE, 0.,
188 cpl_test_error(CPL_ERROR_ILLEGAL_INPUT);
190 ecc = visir_img_check_box(appos, 1, 2, apneg, 1, 3, BOX_SIZE, 0.,
192 cpl_test_error(CPL_ERROR_ACCESS_OUT_OF_RANGE);
194 ecc = visir_img_check_box(appos, 3, 2, apneg, 1, 2, BOX_SIZE, 0.,
196 cpl_test_error(CPL_ERROR_ACCESS_OUT_OF_RANGE);
198 ecc = visir_img_check_box(appos, 1, 2, apneg, 1, 2, 0.0, 0., &swapp, &swapn);
199 cpl_test_error(CPL_ERROR_UNSPECIFIED);
202 ecc = visir_img_check_box(appos, 1, 2, apneg, 1, 2, BOX_SIZE, 0.,
204 cpl_test_error(CPL_ERROR_NONE);
206 cpl_test_abs(ecc, 0.0, FLT_EPSILON);
208 cpl_test_zero(swapn);
211 ecc = visir_img_check_box(appos, 2, 1, apneg, 2, 1, BOX_SIZE, 0.,
213 cpl_test_error(CPL_ERROR_NONE);
215 cpl_test_abs(ecc, 0.0, FLT_EPSILON);
216 cpl_test_zero(swapp);
220 ecc = visir_img_check_box(apneg, 1, 2, appos, 1, 2, BOX_SIZE, 0.,
222 cpl_test_error(CPL_ERROR_NONE);
224 cpl_test_abs(ecc, 2.0 * CPL_MATH_SQRT2, FLT_EPSILON);
225 cpl_test_zero(swapp);
229 ecc = visir_img_check_box(apneg, 2, 1, appos, 2, 1, BOX_SIZE, 0.,
231 cpl_test_error(CPL_ERROR_NONE);
233 cpl_test_abs(ecc, 2.0 * CPL_MATH_SQRT2, FLT_EPSILON);
235 cpl_test_zero(swapn);
237 cpl_image_delete(image);
238 cpl_apertures_delete(appos);
239 cpl_apertures_delete(apneg);
242 image = cpl_image_new(600, 600, CPL_TYPE_INT);
246 for (j = -1; j <= 1; j++) {
247 for (i = -1; i <= 1; i++) {
248 cpl_image_set(image, 350 + i, 80 + j, 1.0);
249 cpl_image_set(image, 350 + i, 400 + j, 1.0);
250 cpl_image_set(image, 190 + i, 240 + j, -1.0);
251 cpl_image_set(image, 510 + i, 240 + j, -1.0);
255 appos = cpl_apertures_extract_sigma(image, sigma);
256 cpl_image_multiply_scalar(image, -1.0);
257 apneg = cpl_apertures_extract_sigma(image, sigma);
259 ecc = visir_img_check_box(appos, 1, 2, apneg, 1, 2,
throw,
260 45. * CPL_MATH_RAD_DEG,
262 cpl_test_error(CPL_ERROR_NONE);
264 cpl_test_rel(ecc, 0.057, 0.1);
266 cpl_test_zero(swapn);
268 cpl_image_delete(image);
269 cpl_apertures_delete(appos);
270 cpl_apertures_delete(apneg);
273 image = cpl_image_new(600, 600, CPL_TYPE_INT);
275 for (j = -1; j <= 1; j++) {
276 for (i = -1; i <= 1; i++) {
277 cpl_image_set(image, 453 + i, 172 + j, 1.0);
278 cpl_image_set(image, 373 + i, 470 + j, 1.0);
279 cpl_image_set(image, 260 + i, 280 + j, -1.0);
280 cpl_image_set(image, 570 + i, 360 + j, -1.0);
284 appos = cpl_apertures_extract_sigma(image, sigma);
285 cpl_image_multiply_scalar(image, -1.0);
286 apneg = cpl_apertures_extract_sigma(image, sigma);
288 ecc = visir_img_check_box(appos, 1, 2, apneg, 1, 2,
throw,
289 30. * CPL_MATH_RAD_DEG,
291 cpl_test_error(CPL_ERROR_NONE);
293 cpl_test_rel(ecc, 0.049, 0.1);
295 cpl_test_zero(swapn);
297 cpl_image_delete(image);
298 cpl_apertures_delete(appos);
299 cpl_apertures_delete(apneg);
302 image = cpl_image_new(600, 600, CPL_TYPE_INT);
304 for (j = -1; j <= 1; j++) {
305 for (i = -1; i <= 1; i++) {
306 cpl_image_set(image, 363 + i, 396 + j, 1.0);
307 cpl_image_set(image, 156 + i, 159 + j, 1.0);
308 cpl_image_set(image, 138 + i, 382 + j, -1.0);
309 cpl_image_set(image, 381 + i, 175 + j, -1.0);
313 appos = cpl_apertures_extract_sigma(image, sigma);
314 cpl_image_multiply_scalar(image, -1.0);
315 apneg = cpl_apertures_extract_sigma(image, sigma);
317 ecc = visir_img_check_box(appos, 1, 2, apneg, 1, 2,
throw,
318 85. * CPL_MATH_RAD_DEG,
320 cpl_test_error(CPL_ERROR_NONE);
322 cpl_test_rel(ecc, 0.049, 0.1);
327 cpl_image_delete(image);
328 cpl_apertures_delete(appos);
329 cpl_apertures_delete(apneg);
331 if (stream != stdout) cpl_test_zero( fclose(stream) );
335 static void visir_img_check_align_test(
void)
339 cpl_error_code error = CPL_ERROR_NONE;
341 cpl_boolean is_hor = CPL_FALSE;
343 stream = cpl_msg_get_level() > CPL_MSG_INFO
344 ? fopen(
"/dev/null",
"a") : stdout;
346 cpl_test_nonnull( stream );
348 for (idir = 0; idir < 2; idir++, is_hor = CPL_TRUE) {
349 cpl_image * image = cpl_image_new(4 * LINE_SIZE, 4 * LINE_SIZE,
351 const double sigma = 1.0;
352 cpl_apertures * appos;
353 cpl_apertures * apneg;
355 cpl_boolean swapn, swapn2;
357 double dhor = 90 * CPL_MATH_RAD_DEG;
361 for (j = -1; j <= 1; j++) {
362 for (i = -1; i <= 1; i++) {
363 error |= cpl_image_set(image, 2*LINE_SIZE + i,
364 2*LINE_SIZE + j, 1.0);
367 error |= cpl_image_set(image, LINE_SIZE + i,
368 2*LINE_SIZE + j, -1.0);
369 error |= cpl_image_set(image, 3*LINE_SIZE + i,
370 2*LINE_SIZE + j, -1.0);
372 error |= cpl_image_set(image, 2*LINE_SIZE + i,
373 LINE_SIZE + j, -1.0);
374 error |= cpl_image_set(image, 2*LINE_SIZE + i,
375 3*LINE_SIZE + j, -1.0);
377 cpl_test_eq_error(error, CPL_ERROR_NONE);
381 appos = cpl_apertures_extract_sigma(image, sigma);
382 cpl_test_error(CPL_ERROR_NONE);
383 cpl_test_nonnull(appos);
384 cpl_test_eq(cpl_apertures_get_size(appos), 1);
386 cpl_apertures_dump(appos, stream);
388 error = cpl_image_multiply_scalar(image, -1.0);
389 cpl_test_eq_error(error, CPL_ERROR_NONE);
391 apneg = cpl_apertures_extract_sigma(image, sigma);
392 cpl_test_error(CPL_ERROR_NONE);
393 cpl_test_nonnull(apneg);
394 cpl_test_eq(cpl_apertures_get_size(apneg), 2);
396 cpl_apertures_dump(apneg, stream);
399 ecc = visir_img_check_align(NULL, 1, apneg, 1, 2, LINE_SIZE, 0.,
401 cpl_test_error(CPL_ERROR_NULL_INPUT);
403 ecc = visir_img_check_align(appos, 1, NULL, 1, 2, LINE_SIZE, 0.,
405 cpl_test_error(CPL_ERROR_NULL_INPUT);
407 ecc = visir_img_check_align(appos, 1, apneg, 1, 2, LINE_SIZE, 0.,
409 cpl_test_error(CPL_ERROR_UNSPECIFIED);
411 ecc = visir_img_check_align(appos, 0, apneg, 1, 2, LINE_SIZE, 0.,
413 cpl_test_error(CPL_ERROR_ILLEGAL_INPUT);
415 ecc = visir_img_check_align(appos, 1, apneg, 1, 0, LINE_SIZE, 0.,
417 cpl_test_error(CPL_ERROR_ILLEGAL_INPUT);
419 ecc = visir_img_check_align(appos, 1, apneg, 0, 1, LINE_SIZE, 0.,
421 cpl_test_error(CPL_ERROR_ILLEGAL_INPUT);
423 ecc = visir_img_check_align(appos, 1, apneg, 1, 3, LINE_SIZE, 0.,
425 cpl_test_error(CPL_ERROR_ACCESS_OUT_OF_RANGE);
427 ecc = visir_img_check_align(appos, 3, apneg, 1, 2, LINE_SIZE, 0.,
429 cpl_test_error(CPL_ERROR_ACCESS_OUT_OF_RANGE);
431 ecc = visir_img_check_align(appos, 1, apneg, 1, 2, 0.0, 0., &swapn);
432 cpl_test_error(CPL_ERROR_UNSPECIFIED);
435 ecc = visir_img_check_align(appos, 1, apneg, 1, 2, LINE_SIZE,
436 is_hor ? dhor : 0., &swapn);
437 cpl_test_error(CPL_ERROR_NONE);
439 cpl_test_abs(ecc, 0.0, FLT_EPSILON);
440 cpl_test_zero(swapn);
443 ecc = visir_img_check_align(appos, 1, apneg, 2, 1, LINE_SIZE,
444 is_hor ? dhor : 0., &swapn);
445 cpl_test_error(CPL_ERROR_NONE);
447 cpl_test_abs(ecc, 0.0, FLT_EPSILON);
451 ecc = visir_img_check_align(appos, 1, apneg, 1, 2, LINE_SIZE,
452 !is_hor ? dhor : 0., &swapn);
453 cpl_test_error(CPL_ERROR_NONE);
455 cpl_test_abs(ecc, 2.0, FLT_EPSILON);
458 ecc = visir_img_check_align(appos, 1, apneg, 2, 1, LINE_SIZE,
459 !is_hor ? dhor : 0. ,&swapn2);
460 cpl_test_error(CPL_ERROR_NONE);
462 cpl_test_abs(ecc, 2.0, FLT_EPSILON);
466 cpl_image_delete(image);
467 cpl_apertures_delete(appos);
468 cpl_apertures_delete(apneg);
471 if (stream != stdout) cpl_test_zero( fclose(stream) );
475 static void visir_img_check_line_test(
void)
479 cpl_error_code error = CPL_ERROR_NONE;
481 cpl_boolean is_hor = CPL_FALSE;
483 stream = cpl_msg_get_level() > CPL_MSG_INFO
484 ? fopen(
"/dev/null",
"a") : stdout;
486 cpl_test_nonnull( stream );
488 for (idir = 0; idir < 2; idir++, is_hor = CPL_TRUE) {
489 cpl_image * image = cpl_image_new(4 * LINE_SIZE, 4 * LINE_SIZE,
491 const double sigma = 1.0;
492 cpl_apertures * appos;
493 cpl_apertures * apneg;
496 double dhor = 90 * CPL_MATH_RAD_DEG;
500 for (j = -1; j <= 1; j++) {
501 for (i = -1; i <= 1; i++) {
502 error |= cpl_image_set(image, 2*LINE_SIZE + i,
503 2*LINE_SIZE + j, 1.0);
506 error |= cpl_image_set(image, LINE_SIZE + i,
507 2*LINE_SIZE + j, -1.0);
508 error |= cpl_image_set(image, 3*LINE_SIZE + i,
509 2*LINE_SIZE + j, -1.0);
511 error |= cpl_image_set(image, 2*LINE_SIZE + i,
512 LINE_SIZE + j, -1.0);
513 error |= cpl_image_set(image, 2*LINE_SIZE + i,
514 3*LINE_SIZE + j, -1.0);
516 cpl_test_eq_error(error, CPL_ERROR_NONE);
520 appos = cpl_apertures_extract_sigma(image, sigma);
521 cpl_test_error(CPL_ERROR_NONE);
522 cpl_test_nonnull(appos);
523 cpl_test_eq(cpl_apertures_get_size(appos), 1);
525 cpl_apertures_dump(appos, stream);
527 error = cpl_image_multiply_scalar(image, -1.0);
528 cpl_test_eq_error(error, CPL_ERROR_NONE);
530 apneg = cpl_apertures_extract_sigma(image, sigma);
531 cpl_test_error(CPL_ERROR_NONE);
532 cpl_test_nonnull(apneg);
533 cpl_test_eq(cpl_apertures_get_size(apneg), 2);
535 cpl_apertures_dump(apneg, stream);
538 ecc = visir_img_check_line(NULL, 1, apneg, 1, LINE_SIZE, 0.);
539 cpl_test_error(CPL_ERROR_NULL_INPUT);
541 ecc = visir_img_check_line(appos, 1, NULL, 1, LINE_SIZE, 0.);
542 cpl_test_error(CPL_ERROR_NULL_INPUT);
544 ecc = visir_img_check_line(appos, 0, apneg, 1, LINE_SIZE, 0.);
545 cpl_test_error(CPL_ERROR_ILLEGAL_INPUT);
547 ecc = visir_img_check_line(appos, 1, apneg, 0, LINE_SIZE, 0.);
548 cpl_test_error(CPL_ERROR_ILLEGAL_INPUT);
550 ecc = visir_img_check_line(appos, 1, apneg, 0, LINE_SIZE, 0.);
551 cpl_test_error(CPL_ERROR_ILLEGAL_INPUT);
553 ecc = visir_img_check_line(appos, 1, apneg, 3, LINE_SIZE, 0.);
554 cpl_test_error(CPL_ERROR_ACCESS_OUT_OF_RANGE);
556 ecc = visir_img_check_line(appos, 3, apneg, 1, LINE_SIZE, 0.);
557 cpl_test_error(CPL_ERROR_ACCESS_OUT_OF_RANGE);
559 ecc = visir_img_check_line(appos, 1, apneg, 1, 0.0, 0.);
560 cpl_test_error(CPL_ERROR_UNSPECIFIED);
563 ecc = visir_img_check_line(apneg, 1, appos, 1, LINE_SIZE,
565 cpl_test_error(CPL_ERROR_NONE);
567 cpl_test_abs(ecc, 0.0, FLT_EPSILON);
570 ecc = visir_img_check_line(appos, 1, apneg, 1, LINE_SIZE,
572 cpl_test_error(CPL_ERROR_NONE);
574 cpl_test_abs(ecc, 2.0, FLT_EPSILON);
577 ecc = visir_img_check_line(appos, 1, apneg, 1, LINE_SIZE,
578 !is_hor ? dhor : 0.);
579 cpl_test_error(CPL_ERROR_NONE);
581 cpl_test_abs(ecc, CPL_MATH_SQRT2, FLT_EPSILON);
584 ecc = visir_img_check_line(apneg, 1, appos, 1, LINE_SIZE,
585 !is_hor ? dhor : 0.);
586 cpl_test_error(CPL_ERROR_NONE);
588 cpl_test_abs(ecc, CPL_MATH_SQRT2, FLT_EPSILON);
592 cpl_image_delete(image);
593 cpl_apertures_delete(appos);
594 cpl_apertures_delete(apneg);
597 if (stream != stdout) cpl_test_zero( fclose(stream) );
601 static void load_frame(
const char * fn, cpl_frame ** frm,
602 cpl_propertylist ** plist,
const int iext)
604 *frm = cpl_frame_new();
605 cpl_frame_set_filename(*frm, fn);
606 *plist = cpl_propertylist_load(fn, iext);
610 static void visir_check_get_type(
void)
614 const char * fn =
"get_type_check.fits";
616 stream = cpl_msg_get_level() > CPL_MSG_INFO
617 ? fopen(
"/dev/null",
"a") : stdout;
619 cpl_propertylist * plist;
622 cpl_propertylist * lplist;
624 visir_data_type type;
628 l = cpl_imagelist_new();
629 plist = cpl_propertylist_new();
630 cpl_propertylist_append_string(plist, VISIR_PFITS_STRING_FRAME_TYPE,
632 cpl_propertylist_append_int(plist, VISIR_PFITS_INT_CHOP_NCYCLES, 2);
633 cpl_propertylist_append_int(plist, VISIR_PFITS_INT_NDIT, 10);
634 for (
int i = 0; i < 4; i++)
635 cpl_imagelist_set(l, cpl_image_new(4, 4, CPL_TYPE_INT), i);
636 cpl_imagelist_save(l, fn, CPL_TYPE_INT, plist, CPL_IO_CREATE);
637 load_frame(fn, &frm, &lplist, 0);
639 visir_get_data_type(frm, lplist, &type, &next);
640 cpl_test_error(CPL_ERROR_NONE);
641 cpl_test_eq(VISIR_DATA_CUBE1, type);
642 cpl_test_eq(0, next);
644 cpl_frame_delete(frm);
645 cpl_propertylist_delete(lplist);
646 cpl_imagelist_delete(l);
647 cpl_propertylist_delete(plist);
652 l = cpl_imagelist_new();
653 plist = cpl_propertylist_new();
654 cpl_propertylist_append_string(plist, VISIR_PFITS_STRING_FRAME_TYPE,
656 cpl_propertylist_append_int(plist, VISIR_PFITS_INT_CHOP_NCYCLES, 5);
657 cpl_propertylist_append_int(plist, VISIR_PFITS_INT_NDIT, 10);
658 for (
int i = 0; i < 5 * 2 + 1; i++)
659 cpl_imagelist_set(l, cpl_image_new(4, 4, CPL_TYPE_INT), i);
660 cpl_imagelist_save(l, fn, CPL_TYPE_INT, plist, CPL_IO_CREATE);
661 load_frame(fn, &frm, &lplist, 0);
663 visir_get_data_type(frm, lplist, &type, &next);
664 cpl_test_error(CPL_ERROR_NONE);
665 cpl_test_eq(VISIR_DATA_CUBE2, type);
666 cpl_test_eq(0, next);
668 cpl_frame_delete(frm);
669 cpl_propertylist_delete(lplist);
670 cpl_imagelist_delete(l);
671 cpl_propertylist_delete(plist);
676 l = cpl_imagelist_new();
677 plist = cpl_propertylist_new();
678 cpl_propertylist_append_string(plist, VISIR_PFITS_STRING_FRAME_TYPE,
680 cpl_propertylist_append_int(plist, VISIR_PFITS_INT_CHOP_NCYCLES, 5);
681 cpl_propertylist_append_int(plist, VISIR_PFITS_INT_NDIT, 10);
682 for (
int i = 0; i < 5 * 2 * 10; i++)
683 cpl_imagelist_set(l, cpl_image_new(4, 4, CPL_TYPE_INT), i);
684 cpl_imagelist_save(l, fn, CPL_TYPE_INT, plist, CPL_IO_CREATE);
685 load_frame(fn, &frm, &lplist, 0);
687 visir_get_data_type(frm, lplist, &type, &next);
688 cpl_test_error(CPL_ERROR_NONE);
689 cpl_test_eq(VISIR_DATA_BURST, type);
690 cpl_test_eq(0, next);
692 cpl_frame_delete(frm);
693 cpl_propertylist_delete(lplist);
694 cpl_imagelist_delete(l);
695 cpl_propertylist_delete(plist);
700 l = cpl_imagelist_new();
701 plist = cpl_propertylist_new();
702 cpl_propertylist_append_string(plist, VISIR_PFITS_STRING_FRAME_TYPE,
704 cpl_propertylist_append_int(plist, VISIR_PFITS_INT_CHOP_NCYCLES, 5);
705 cpl_propertylist_append_int(plist, VISIR_PFITS_INT_NDIT, 10);
706 for (
int i = 0; i < 5 * 2 * 10 - 10; i++)
707 cpl_imagelist_set(l, cpl_image_new(4, 4, CPL_TYPE_INT), i);
708 cpl_imagelist_save(l, fn, CPL_TYPE_INT, plist, CPL_IO_CREATE);
709 load_frame(fn, &frm, &lplist, 0);
711 visir_get_data_type(frm, lplist, &type, &next);
712 cpl_test_error(CPL_ERROR_NONE);
713 cpl_test_eq(VISIR_DATA_BURST, type);
714 cpl_test_eq(0, next);
716 cpl_frame_delete(frm);
717 cpl_propertylist_delete(lplist);
718 cpl_imagelist_delete(l);
719 cpl_propertylist_delete(plist);
724 cpl_image * img = cpl_image_new(4, 4, CPL_TYPE_INT);
725 plist = cpl_propertylist_new();
726 cpl_propertylist_append_int(plist, VISIR_PFITS_INT_NAVRG, 1);
727 cpl_propertylist_append_int(plist, VISIR_PFITS_INT_CHOP_NCYCLES, 5);
728 cpl_propertylist_append_int(plist, VISIR_PFITS_INT_NDIT, 10);
729 cpl_propertylist_save(plist, fn, CPL_IO_CREATE);
730 for (
int i = 0; i < 5 * 2 + 1; i++)
731 cpl_image_save(img, fn, CPL_TYPE_INT, NULL, CPL_IO_EXTEND);
732 load_frame(fn, &frm, &lplist, 0);
734 visir_get_data_type(frm, lplist, &type, &next);
735 cpl_test_error(CPL_ERROR_NONE);
736 cpl_test_eq(VISIR_DATA_AQU_HCYCLE, type);
737 cpl_test_eq(11, next);
739 cpl_frame_delete(frm);
740 cpl_propertylist_delete(lplist);
741 cpl_image_delete(img);
742 cpl_propertylist_delete(plist);
747 plist = cpl_propertylist_new();
748 l = cpl_imagelist_new();
749 cpl_propertylist_append_int(plist, VISIR_PFITS_INT_NAVRG, 1);
750 cpl_propertylist_append_int(plist, VISIR_PFITS_INT_CHOP_NCYCLES, 5);
751 cpl_propertylist_append_int(plist, VISIR_PFITS_INT_NDIT, 10);
752 for (
int i = 0; i < 5 * 2 * 10; i++)
753 cpl_imagelist_set(l, cpl_image_new(4, 4, CPL_TYPE_INT), i);
754 cpl_imagelist_save(l, fn, CPL_TYPE_INT, plist, CPL_IO_CREATE);
755 load_frame(fn, &frm, &lplist, 0);
757 visir_get_data_type(frm, lplist, &type, &next);
758 cpl_test_error(CPL_ERROR_NONE);
759 cpl_test_eq(VISIR_DATA_AQU_BURST, type);
760 cpl_test_eq(0, next);
762 cpl_frame_delete(frm);
763 cpl_propertylist_delete(lplist);
764 cpl_imagelist_delete(l);
765 cpl_propertylist_delete(plist);
770 plist = cpl_propertylist_new();
771 l = cpl_imagelist_new();
772 cpl_propertylist_append_int(plist, VISIR_PFITS_INT_NAVRG, 1);
773 cpl_propertylist_append_int(plist, VISIR_PFITS_INT_CHOP_NCYCLES, 5);
774 cpl_propertylist_append_int(plist, VISIR_PFITS_INT_NDIT, 10);
775 cpl_propertylist_save(plist, fn, CPL_IO_CREATE);
776 for (
int i = 0; i < 5 * 2 * 10; i++)
777 cpl_imagelist_set(l, cpl_image_new(4, 4, CPL_TYPE_INT), i);
778 cpl_imagelist_save(l, fn, CPL_TYPE_INT, NULL, CPL_IO_EXTEND);
779 load_frame(fn, &frm, &lplist, 0);
781 visir_get_data_type(frm, lplist, &type, &next);
782 cpl_test_error(CPL_ERROR_NONE);
783 cpl_test_eq(VISIR_DATA_AQU_BURST_EXT, type);
784 cpl_test_eq(1, next);
786 cpl_frame_delete(frm);
787 cpl_propertylist_delete(lplist);
788 cpl_imagelist_delete(l);
789 cpl_propertylist_delete(plist);
793 if (stream != stdout) cpl_test_zero( fclose(stream) );
796 static cpl_propertylist * create_property_list(
const char * obs_start,
797 const char * chop_start,
798 const double chop_freq,
800 const double nditskip)
802 cpl_propertylist * prop = cpl_propertylist_new();
803 cpl_propertylist_append_string(prop, VISIR_PFITS_STRING_OBS_START,
805 cpl_propertylist_append_string(prop, VISIR_PFITS_STRING_CHOP_START,
807 cpl_propertylist_append_double(prop, VISIR_PFITS_DOUBLE_CHOP_FREQ,
809 cpl_propertylist_append_double(prop, VISIR_PFITS_DOUBLE_DIT, dit);
810 cpl_propertylist_append_int(prop, VISIR_PFITS_INT_NDITSKIP, nditskip);
814 static void visir_img_check_burst_find_delta_chop(
void)
819 stream = cpl_msg_get_level() > CPL_MSG_INFO
820 ? fopen(
"/dev/null",
"a") : stdout;
822 cpl_test_nonnull( stream );
825 int ifirst = 0, ihalfcycle = 0;
826 cpl_propertylist * prop =
827 create_property_list(
"2011-08-13T23:13:38.0612",
828 "2011-08-13T23:10:16",
830 visir_img_burst_find_delta_chop(prop, &ifirst, &ihalfcycle);
831 cpl_test_eq(94, ifirst);
832 cpl_test_eq(100, ihalfcycle);
833 cpl_propertylist_delete(prop);
837 int ifirst = 0, ihalfcycle = 0;
838 cpl_propertylist * prop =
839 create_property_list(
"2011-08-13T23:10:16.0612",
840 "2011-08-13T23:13:38",
842 visir_img_burst_find_delta_chop(prop, &ifirst, &ihalfcycle);
843 cpl_test_eq(94, ifirst);
844 cpl_test_eq(100, ihalfcycle);
845 cpl_propertylist_delete(prop);
849 int ifirst = 0, ihalfcycle = 0;
850 cpl_propertylist * prop =
851 create_property_list(
"2011-08-13T23:13:35.9999",
852 "2011-08-13T23:10:16",
854 visir_img_burst_find_delta_chop(prop, &ifirst, &ihalfcycle);
855 cpl_test_eq(0, ifirst);
856 cpl_test_eq(100, ihalfcycle);
857 cpl_propertylist_delete(prop);
861 if (stream != stdout) cpl_test_zero( fclose(stream) );
865 static cpl_imagelist * create_input_imagelist(
const int * values,
int naxis3)
867 cpl_imagelist * list = cpl_imagelist_new();
868 for (
int i = 0; i < naxis3; i++) {
869 cpl_image * image = cpl_image_new(3 * BOX_SIZE, 3 * BOX_SIZE,
871 cpl_image_set(image, 1, 1, values[i]);
872 cpl_imagelist_set(list, image, cpl_imagelist_get_size(list));
877 static void visir_img_check_load_burst(
void)
881 stream = cpl_msg_get_level() > CPL_MSG_INFO
882 ? fopen(
"/dev/null",
"a") : stdout;
884 cpl_test_nonnull( stream );
888 cpl_imagelist * list = cpl_imagelist_new();
889 cpl_imagelist * blist = cpl_imagelist_new();
890 cpl_imagelist * alist = cpl_imagelist_new();
891 cpl_propertylist * prop;
893 int ichopchange = 0, ihalfcycle = 0;
895 prop = create_property_list(
"2011-08-13T23:11:04.0000",
896 "2011-08-13T23:10:00", 0.1, 1, 0);
898 visir_img_burst_find_delta_chop(prop, &ichopchange, &ihalfcycle);
899 cpl_test_eq(6, ichopchange);
900 cpl_test_eq(5, ihalfcycle);
902 for (
int i = 0; i < naxis3; i++) {
903 cpl_image * image = cpl_image_new(3 * BOX_SIZE, 3 * BOX_SIZE,
905 cpl_image_set(image, 1, 1, 0xA);
907 cpl_imagelist_set(list, image, cpl_imagelist_get_size(list));
910 for (
int i = 0; i< 20; i++) {
912 cpl_imagelist_get(list,
913 i * ihalfcycle + (ichopchange % ihalfcycle));
914 cpl_image_set(img, 1, 1, 0xBADBEEF);
917 visir_load_burst_(alist, blist, list, ichopchange, ihalfcycle, 0, 0);
918 cpl_test_eq(40, cpl_imagelist_get_size(alist));
919 cpl_test_eq(40, cpl_imagelist_get_size(blist));
921 TEST_LIST(alist, 0xA);
922 TEST_LIST(blist, 0xA);
924 cpl_imagelist_delete(alist);
925 cpl_imagelist_delete(blist);
926 cpl_imagelist_delete(list);
927 cpl_propertylist_delete(prop);
933 cpl_imagelist * alist = cpl_imagelist_new();
934 cpl_imagelist * blist = cpl_imagelist_new();
935 cpl_propertylist * prop;
936 const int values[] = {0xB, 0xBADBEEF, 0xA, 0xA, 0xA, 0xA, 0xBADBEEF,
937 0xB, 0xB, 0xB, 0xB, 0xBADBEEF};
938 int naxis3 =
sizeof(values)/
sizeof(values[0]);
939 int ichopchange = 0, ihalfcycle = 0;
940 cpl_imagelist * list = create_input_imagelist(values, naxis3);
943 prop = create_property_list(
"2011-08-13T23:11:04.0000",
944 "2011-08-13T23:10:00", 0.1, 1, 0);
945 visir_img_burst_find_delta_chop(prop, &ichopchange, &ihalfcycle);
946 cpl_test_eq(6, ichopchange);
947 cpl_test_eq(5, ihalfcycle);
949 visir_load_burst_(alist, blist, list, ichopchange, ihalfcycle, 0, 0);
950 cpl_test_eq(4, cpl_imagelist_get_size(alist));
951 cpl_test_eq(5, cpl_imagelist_get_size(blist));
953 TEST_LIST(alist, 0xA);
954 TEST_LIST(blist, 0xB);
956 cpl_imagelist_delete(list);
960 list = create_input_imagelist(values, naxis3);
961 cpl_imagelist_empty(alist);
962 cpl_imagelist_empty(blist);
964 visir_load_burst_(alist, blist, list, ichopchange, ihalfcycle, 1, 1);
965 cpl_test_eq(2, cpl_imagelist_get_size(alist));
966 cpl_test_eq(2, cpl_imagelist_get_size(blist));
968 TEST_LIST(alist, 0xA);
969 TEST_LIST(blist, 0xB);
971 cpl_imagelist_delete(list);
975 list = create_input_imagelist(values, naxis3);
976 cpl_imagelist_empty(alist);
977 cpl_imagelist_empty(blist);
979 visir_load_burst_(alist, blist, list, ichopchange, ihalfcycle, 2, 1);
980 cpl_test_eq(1, cpl_imagelist_get_size(alist));
981 cpl_test_eq(1, cpl_imagelist_get_size(blist));
983 TEST_LIST(alist, 0xA);
984 TEST_LIST(blist, 0xB);
986 cpl_imagelist_delete(list);
990 for (
int i = 0; i < ihalfcycle * 2; i++) {
991 for (
int h = 0; h < ihalfcycle / 2; h++) {
992 for (
int l = 0; l < ihalfcycle / 2; l++) {
993 list = create_input_imagelist(values, naxis3);
994 cpl_imagelist_empty(alist);
995 cpl_imagelist_empty(blist);
997 visir_load_burst_(alist, blist, list, i, ihalfcycle, l, h);
999 while (cpl_imagelist_get_size(alist) < cpl_imagelist_get_size(blist))
1000 cpl_image_delete(cpl_imagelist_unset(blist, cpl_imagelist_get_size(blist) - 1));
1001 while (cpl_imagelist_get_size(alist) > cpl_imagelist_get_size(blist))
1002 cpl_image_delete(cpl_imagelist_unset(alist, cpl_imagelist_get_size(alist) - 1));
1003 cpl_test_eq(4 - (h + l), cpl_imagelist_get_size(alist));
1004 cpl_test_eq(4 - (h + l), cpl_imagelist_get_size(blist));
1006 cpl_imagelist_delete(list);
1011 cpl_imagelist_delete(alist);
1012 cpl_imagelist_delete(blist);
1013 cpl_propertylist_delete(prop);
1018 cpl_imagelist * blist = cpl_imagelist_new();
1019 cpl_imagelist * alist = cpl_imagelist_new();
1020 const int values[] = {0, 1, 1, 0, 0, 0xBAD, 0, 1, 1, 0, 0, 0xBAD, 0, 1};
1021 int naxis3 =
sizeof(values)/
sizeof(values[0]);
1022 int ichopchange = 5, ihalfcycle = 6;
1023 cpl_imagelist * list = create_input_imagelist(values, naxis3);
1025 visir_load_burst_(alist, blist, list, ichopchange, ihalfcycle, 2, 1);
1026 cpl_test_eq(3, cpl_imagelist_get_size(alist));
1027 cpl_test_eq(2, cpl_imagelist_get_size(blist));
1029 TEST_LIST(alist, 1);
1030 TEST_LIST(blist, 1);
1032 cpl_imagelist_delete(list);
1033 cpl_imagelist_delete(alist);
1034 cpl_imagelist_delete(blist);
1039 cpl_imagelist * blist = cpl_imagelist_new();
1040 cpl_imagelist * alist = cpl_imagelist_new();
1041 cpl_propertylist * prop;
1042 const int values[] = {0xA, 0xBADBEEF, 0xB, 0xB, 0xB, 0xB, 0xBADBEEF,
1043 0xA, 0xA, 0xA, 0xA, 0xBADBEEF};
1044 int naxis3 =
sizeof(values)/
sizeof(values[0]);
1045 int ichopchange = 0, ihalfcycle = 0;
1046 cpl_imagelist * list = create_input_imagelist(values, naxis3);
1049 prop = create_property_list(
"2011-08-13T23:11:09.0000",
1050 "2011-08-13T23:10:00", 0.1, 1, 0);
1051 visir_img_burst_find_delta_chop(prop, &ichopchange, &ihalfcycle);
1052 cpl_test_eq(1, ichopchange);
1053 cpl_test_eq(5, ihalfcycle);
1055 visir_load_burst_(alist, blist, list, ichopchange, ihalfcycle, 0, 0);
1056 cpl_test_eq(5, cpl_imagelist_get_size(alist));
1057 cpl_test_eq(4, cpl_imagelist_get_size(blist));
1059 TEST_LIST(alist, 0xA);
1060 TEST_LIST(blist, 0xB);
1062 cpl_imagelist_delete(list);
1063 cpl_imagelist_delete(alist);
1064 cpl_imagelist_delete(blist);
1065 cpl_propertylist_delete(prop);
1069 cpl_imagelist * blist = cpl_imagelist_new();
1070 cpl_imagelist * alist = cpl_imagelist_new();
1071 cpl_propertylist * prop;
1072 const int values[] = {0xBADBEEF, 0xB, 0xB, 0xB, 0xB, 0xBADBEEF,
1073 0xA, 0xA, 0xA, 0xA, 0xBADBEEF, 0xB};
1074 int naxis3 =
sizeof(values)/
sizeof(values[0]);
1075 int ichopchange = 0, ihalfcycle = 0;
1076 cpl_imagelist * list = create_input_imagelist(values, naxis3);
1079 prop = create_property_list(
"2011-08-13T23:10:00.0000",
1080 "2011-08-13T23:10:00", 0.1, 1, 0);
1081 visir_img_burst_find_delta_chop(prop, &ichopchange, &ihalfcycle);
1082 cpl_test_eq(0, ichopchange);
1083 cpl_test_eq(5, ihalfcycle);
1085 visir_load_burst_(alist, blist, list, ichopchange, ihalfcycle, 0, 0);
1086 cpl_test_eq(4, cpl_imagelist_get_size(alist));
1087 cpl_test_eq(5, cpl_imagelist_get_size(blist));
1089 TEST_LIST(alist, 0xA);
1090 TEST_LIST(blist, 0xB);
1092 cpl_imagelist_delete(list);
1093 cpl_imagelist_delete(alist);
1094 cpl_imagelist_delete(blist);
1095 cpl_propertylist_delete(prop);
1099 const char * fn =
"load_burst.fits";
1100 cpl_imagelist * blist = cpl_imagelist_new();
1101 cpl_imagelist * alist = cpl_imagelist_new();
1102 cpl_propertylist * prop = cpl_propertylist_new();
1103 cpl_frame * frame = cpl_frame_new();
1104 const int values[] = {0xA, 0xA, 0xA, 0xA, 0xA, 0xA, 0xA, 0xA, 0xA};
1105 int naxis3 =
sizeof(values)/
sizeof(values[0]);
1106 cpl_imagelist * list = create_input_imagelist(values, naxis3);
1108 cpl_propertylist_append_bool(prop, VISIR_PFITS_BOOL_CHOP_STATUS, CPL_FALSE);
1109 cpl_imagelist_save(list, fn, CPL_TYPE_UNSPECIFIED,
1110 prop, CPL_IO_CREATE);
1111 cpl_propertylist_delete(prop);
1112 prop = cpl_propertylist_load(fn, 0);
1113 cpl_frame_set_filename(frame, fn);
1115 visir_load_burst(alist, blist, frame, prop, 0, naxis3, 0, naxis3, 0, 0);
1116 cpl_test_eq(naxis3, cpl_imagelist_get_size(alist));
1117 cpl_test_eq(0, cpl_imagelist_get_size(blist));
1119 TEST_LIST(alist, 0xA);
1121 cpl_imagelist_delete(list);
1122 cpl_imagelist_delete(alist);
1123 cpl_imagelist_delete(blist);
1124 cpl_propertylist_delete(prop);
1125 cpl_frame_delete(frame);
1129 if (stream != stdout) cpl_test_zero( fclose(stream) );
1134 static void visir_img_check_get_to_off_plane(
void)
1139 stream = cpl_msg_get_level() > CPL_MSG_INFO
1140 ? fopen(
"/dev/null",
"a") : stdout;
1142 cpl_test_nonnull( stream );
1149 cpl_test_eq(27, get_to_off_plane(icc, istart, ihc));
1152 cpl_test_eq(17, get_to_off_plane(icc, istart, ihc));
1155 cpl_test_eq(0, get_to_off_plane(icc, istart, ihc));
1158 cpl_test_eq(177, get_to_off_plane(icc, istart, ihc));
1161 cpl_test_eq(127, get_to_off_plane(icc, istart, ihc));
1164 cpl_test_eq(100, get_to_off_plane(icc, istart, ihc));
1167 cpl_test_eq(77, get_to_off_plane(icc, istart, ihc));
1170 cpl_test_eq(27, get_to_off_plane(icc, istart, ihc));
1172 istart = ihc * 2 + 10;
1173 cpl_test_eq(17, get_to_off_plane(icc, istart, ihc));
1175 istart = ihc * 2 + 50;
1176 cpl_test_eq(177, get_to_off_plane(icc, istart, ihc));
1180 cpl_test_eq(139, get_to_off_plane(29, istart, ihc));
1186 cpl_test_eq(317 - istart, get_to_off_plane(icc, istart, ihc));
1189 cpl_test_eq(317 - istart, get_to_off_plane(icc, istart, ihc));
1192 cpl_test_eq(317 - istart, get_to_off_plane(icc, istart, ihc));
1195 cpl_test_eq(157 - istart, get_to_off_plane(icc, istart, ihc));
1198 cpl_test_eq(477 - istart, get_to_off_plane(icc, istart, ihc));
1201 cpl_test_eq(317 - istart, get_to_off_plane(icc, istart, ihc));
1207 cpl_test_eq(80, get_to_off_plane(icc, istart, ihc));
1210 cpl_test_eq(0, get_to_off_plane(icc, istart, ihc));
1213 cpl_test_eq(80, get_to_off_plane(icc, istart, ihc));
1216 cpl_test_eq(0, get_to_off_plane(icc, istart, ihc));
1219 cpl_test_eq(50, get_to_off_plane(icc, istart, ihc));
1222 cpl_test_eq(110, get_to_off_plane(icc, istart, ihc));
1225 if (stream != stdout) cpl_test_zero( fclose(stream) );
1229 static cpl_imagelist * create_cube2_imagelist(
int ncycles)
1231 cpl_imagelist * list = cpl_imagelist_new();
1232 cpl_image * image = cpl_image_new(3, 3, CPL_TYPE_FLOAT);
1233 float prev_val = 0.0;
1235 for (
int i = 0; i < ncycles; i++) {
1236 const float val = (prev_val * i + A_VAL - B_VAL) / (i + 1);
1237 cpl_image_set(image, 1, 1, A_VAL - VISIR_HCYCLE_OFFSET);
1238 cpl_imagelist_set(list, image, cpl_imagelist_get_size(list));
1239 image = cpl_image_new(3, 3, CPL_TYPE_FLOAT);
1241 cpl_image_set(image, 1, 1, val);
1242 cpl_imagelist_set(list, image, cpl_imagelist_get_size(list));
1243 image = cpl_image_new(3, 3, CPL_TYPE_FLOAT);
1247 cpl_image_set(image, 1, 1, prev_val);
1248 cpl_imagelist_set(list, image, cpl_imagelist_get_size(list));
1252 static void visir_img_check_load_cube2(
void)
1257 stream = cpl_msg_get_level() > CPL_MSG_INFO
1258 ? fopen(
"/dev/null",
"a") : stdout;
1260 cpl_test_nonnull( stream );
1263 const int ncycles = 20;
1264 cpl_imagelist * list = create_cube2_imagelist(ncycles);
1265 cpl_imagelist * alist = cpl_imagelist_new();
1266 cpl_imagelist * blist = cpl_imagelist_new();
1267 cpl_test_eq(2 * ncycles + 1, cpl_imagelist_get_size(list));
1270 cpl_image_delete(cpl_imagelist_unset(list, cpl_imagelist_get_size(list) - 1));
1272 visir_load_cube2_split_(alist, blist, list, NULL);
1273 cpl_test_eq(ncycles, cpl_imagelist_get_size(alist));
1274 cpl_test_eq(ncycles, cpl_imagelist_get_size(blist));
1275 TEST_LIST(alist, A_VAL);
1276 TEST_LIST(blist, B_VAL);
1278 cpl_imagelist_delete(list);
1279 cpl_imagelist_delete(alist);
1280 cpl_imagelist_delete(blist);
1285 const int ncycles = 40;
1287 cpl_imagelist * list = create_cube2_imagelist(ncycles);
1288 cpl_imagelist * alist = cpl_imagelist_new();
1289 cpl_imagelist * blist = cpl_imagelist_new();
1290 cpl_imagelist * chunk2 = cpl_imagelist_new();
1292 cpl_test_eq(2 * ncycles + 1, cpl_imagelist_get_size(list));
1295 cpl_image_delete(cpl_imagelist_unset(list,
1296 cpl_imagelist_get_size(list) - 1));
1298 for (
int i = ncycles; i > 0; i--) {
1300 cpl_imagelist_unset(list, cpl_imagelist_get_size(list) - i);
1301 cpl_imagelist_set(chunk2, tmp, cpl_imagelist_get_size(chunk2));
1304 cpl_image_duplicate(cpl_imagelist_get(list,
1305 cpl_imagelist_get_size(list) - 1));
1307 visir_load_cube2_split_(alist, blist, list, NULL);
1308 cpl_test_eq(ncycles / 2, cpl_imagelist_get_size(alist));
1309 cpl_test_eq(ncycles / 2, cpl_imagelist_get_size(blist));
1310 TEST_LIST(alist, A_VAL);
1311 TEST_LIST(blist, B_VAL);
1313 cpl_imagelist_empty(alist);
1314 cpl_imagelist_empty(blist);
1316 visir_load_cube2_split_(alist, blist, chunk2, prevd);
1317 cpl_test_eq(ncycles / 2, cpl_imagelist_get_size(alist));
1318 cpl_test_eq(ncycles / 2, cpl_imagelist_get_size(blist));
1319 TEST_LIST(alist, A_VAL);
1320 TEST_LIST(blist, B_VAL);
1322 cpl_imagelist_delete(list);
1323 cpl_imagelist_delete(chunk2);
1324 cpl_imagelist_delete(alist);
1325 cpl_imagelist_delete(blist);
1326 cpl_image_delete(prevd);
1329 if (stream != stdout) cpl_test_zero( fclose(stream) );
int main(void)
Find a plugin and submit it to some tests.