29#include "hdrl_multiiter.h"
30#include "hdrl_frameiter.h"
42cpl_frameset * create_frames(
void){
46 cpl_frameset * frames = cpl_frameset_new();
47 for (
size_t i = 0; i < nframes; i++) {
48 char * fn = cpl_sprintf(
"hdrl_multiiter-test_%zu_%zd.fits", i, (intptr_t)getpid());
49 cpl_propertylist * plist = cpl_propertylist_new();
50 cpl_propertylist_update_string(plist,
"TAG", fn);
51 cpl_propertylist_save(plist, fn, CPL_IO_CREATE);
52 cpl_propertylist_delete(plist);
53 for (
size_t j = 1; j < next + 1; j++) {
54 cpl_image * img = cpl_image_new(50, 70, CPL_TYPE_INT);
55 cpl_image_add_scalar(img, i * next + j);
56 cpl_image_save(img, fn, CPL_TYPE_INT, NULL, CPL_IO_EXTEND);
57 cpl_image_delete(img);
59 cpl_frame * frm = cpl_frame_new();
60 cpl_frame_set_filename(frm, fn);
61 cpl_frame_set_tag(frm,
"RAW");
62 cpl_frameset_insert(frames, frm);
69void test_invalid(cpl_frameset *frames){
71 hdrl_iter *subiters[] = {
74 (intptr_t[]){HDRL_FRAMEITER_AXIS_FRAME, HDRL_FRAMEITER_AXIS_EXT},
80 (intptr_t[]){HDRL_FRAMEITER_AXIS_FRAME, HDRL_FRAMEITER_AXIS_EXT},
85 cpl_test_error(CPL_ERROR_NONE);
91 cpl_test_error(CPL_ERROR_ILLEGAL_INPUT);
95 cpl_test_error(CPL_ERROR_NULL_INPUT);
103 cpl_test_error(CPL_ERROR_NONE);
104 cpl_test_nonnull(it);
106 cpl_size size = hdrl_iter_length(it);
107 cpl_test_error(CPL_ERROR_NONE);
108 cpl_test_eq(size, 10);
111 hdrl_iter_delete(it);
114void test_basic(cpl_frameset *frames)
116 hdrl_iter *subiters[] = {
119 (intptr_t[]){HDRL_FRAMEITER_AXIS_FRAME, HDRL_FRAMEITER_AXIS_EXT},
125 (intptr_t[]){HDRL_FRAMEITER_AXIS_FRAME, HDRL_FRAMEITER_AXIS_EXT},
131 cpl_test_error(CPL_ERROR_NONE);
137 (intptr_t[]){HDRL_FRAMEITER_AXIS_FRAME, HDRL_FRAMEITER_AXIS_EXT},
140 (intptr_t[]){1, hdrl_iter_length(subiters[0])}
142 cpl_test_error(CPL_ERROR_NONE);
145 cpl_test_nonnull(it);
148 for (hdrl_frameiter_data ** h = hdrl_iter_next(it); h != NULL;
149 h = hdrl_iter_next(it)) {
150 for (
size_t i = 0; i < 3; i++) {
152 cpl_test_eq(cpl_image_get_size_x(h[i]->image), 50);
154 cpl_test_eq(cpl_image_get(h[i]->image, 1, 1, &d), cnt + 1);
158 cpl_test_eq(cpl_image_get(h[i]->image, 1, 1, &d), 1);
160 cpl_image_delete(h[i]->image);
161 cpl_propertylist_delete(h[i]->plist);
165 hdrl_iter_delete(it);
169void test_empty(cpl_frameset *frames)
171 hdrl_iter *subiters[] = {
173 frames, HDRL_ITER_OWNS_DATA, 2,
174 (intptr_t[]){HDRL_FRAMEITER_AXIS_FRAME, HDRL_FRAMEITER_AXIS_EXT},
179 frames, HDRL_ITER_OWNS_DATA, 1,
180 (intptr_t[]){HDRL_FRAMEITER_AXIS_EXT},
185 cpl_test_error(CPL_ERROR_NONE);
188 cpl_test_nonnull(it);
191 for (hdrl_frameiter_data ** h = hdrl_iter_next(it); h != NULL;
192 h = hdrl_iter_next(it)) {
194 cpl_test_eq(cpl_image_get_size_x(h[0]->image), 50);
195 cpl_test_eq(cpl_image_get(h[0]->image, 1, 1, &d), cnt + 1);
196 if (cnt < hdrl_iter_length(subiters[1])) {
197 cpl_test_eq(cpl_image_get(h[1]->image, 1, 1, &d), cnt + 1);
199 cpl_image_delete(h[1]->image);
208 cpl_test_eq(hdrl_iter_length(subiters[0]), cnt);
210 hdrl_iter_delete(it);
220 cpl_test_init(PACKAGE_BUGREPORT, CPL_MSG_WARNING);
222 cpl_frameset *frames = create_frames();
224 test_invalid(frames);
225 cpl_test_error(CPL_ERROR_NONE);
228 cpl_test_error(CPL_ERROR_NONE);
231 cpl_test_error(CPL_ERROR_NONE);
233 cpl_frameset_delete(frames);
234 cpl_test_zero(system(
"rm -f hdrl_multiiter-test_*fits"));
236 cpl_test_error(CPL_ERROR_NONE);
238 return cpl_test_end(0);
hdrl_iter * hdrl_frameiter_new(const cpl_frameset *frames, hdrl_iter_flags flags, intptr_t naxes, intptr_t *axes, intptr_t *offsets, intptr_t *strides, intptr_t *dims)
create iterator over cpl_frameset
hdrl_iter * hdrl_multiiter_new(intptr_t niters, hdrl_iter *iters[], hdrl_iter_flags flags)
iterate over multiple iterators