/* $Id: cpl_frame-test.c,v 1.13 2007/09/26 08:26:00 llundin Exp $ * * This file is part of the ESO Common Pipeline Library * Copyright (C) 2001-2005 European Southern Observatory * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ /* * $Author: llundin $ * $Date: 2007/09/26 08:26:00 $ * $Revision: 1.13 $ * $Name: $ */ #undef CX_DISABLE_ASSERT #undef CX_LOG_DOMAIN #ifdef HAVE_CONFIG_H # include #endif #include #include #ifdef HAVE_UNISTD_H # include #endif #include #include #include #include "cpl_init.h" #include "cpl_frame.h" #include "cpl_frame_impl.h" #include "cpl_error.h" static void cpl_test_frame_dump(cpl_frame *frame) { const cxchar *name = cpl_frame_get_filename(frame); const cxchar *tag = cpl_frame_get_tag(frame); cpl_frame_type type = cpl_frame_get_type(frame); cpl_frame_group group = cpl_frame_get_group(frame); cpl_frame_level level = cpl_frame_get_level(frame); fprintf(stderr, "Frame at address %p\n", frame); fprintf(stderr, "\tfile : %p '%s'\n", name, name); fprintf(stderr, "\ttag : %p '%s'\n", tag, tag); fprintf(stderr, "\ttype : %#09x\n", type); fprintf(stderr, "\tgroup : "); switch (group) { case CPL_FRAME_GROUP_RAW: fprintf(stderr, "raw"); break; case CPL_FRAME_GROUP_CALIB: fprintf(stderr, "calibration"); break; case CPL_FRAME_GROUP_PRODUCT: fprintf(stderr, "product"); break; default: fprintf(stderr, "unknown"); break; } fprintf(stderr, "\n"); fprintf(stderr, "\tlevel : "); switch (level) { case CPL_FRAME_LEVEL_TEMPORARY: fprintf(stderr, "temporary"); break; case CPL_FRAME_LEVEL_INTERMEDIATE: fprintf(stderr, "intermediate"); break; case CPL_FRAME_LEVEL_FINAL: fprintf(stderr, "final"); break; default: fprintf(stderr, "unknown"); break; } fprintf(stderr, "\n"); return; } int main(void) { int i = 0; cxint next; cxint np = 0; cxint status = 0; const cxchar *filename = "cplframetest1.fits"; const cxchar *filename1 = "cplframeplane.fits"; cxlong naxes[2] = {256,256}; cxlong nplanes[3] = {128,256,64}; cpl_frame *frame, *_frame; fitsfile *file = NULL; cpl_init(CPL_INIT_DEFAULT); /* * Test 1: Create a frame, check its validity and destroy it * again. */ frame = cpl_frame_new(); cx_assert(frame != NULL); cx_assert(cpl_frame_get_filename(frame) == NULL); cx_assert(cpl_frame_get_tag(frame) == NULL); cx_assert(cpl_frame_get_type(frame) == CPL_FRAME_TYPE_NONE); cx_assert(cpl_frame_get_group(frame) == CPL_FRAME_GROUP_NONE); cx_assert(cpl_frame_get_level(frame) == CPL_FRAME_LEVEL_NONE); cpl_frame_delete(frame); /* * Test 2: Create a frame, set its fields and verify the settings. */ frame = cpl_frame_new(); cpl_frame_set_filename(frame, "path_to_file"); cx_assert(!strcmp(cpl_frame_get_filename(frame), "path_to_file")); cpl_frame_set_tag(frame, "This is a tag"); cx_assert(!strcmp(cpl_frame_get_tag(frame), "This is a tag")); cpl_frame_set_type(frame, CPL_FRAME_TYPE_MATRIX); cx_assert(cpl_frame_get_type(frame) == CPL_FRAME_TYPE_MATRIX); cpl_frame_set_group(frame, CPL_FRAME_GROUP_PRODUCT); cx_assert(cpl_frame_get_group(frame) == CPL_FRAME_GROUP_PRODUCT); cpl_frame_set_level(frame, CPL_FRAME_LEVEL_TEMPORARY); cx_assert(cpl_frame_get_level(frame) == CPL_FRAME_LEVEL_TEMPORARY); /* * Test 3: Create a copy of the frame and verify that original * and copy are identical but do not share any resources. */ _frame = cpl_frame_duplicate(frame); cx_assert(_frame != NULL); cx_assert(_frame != frame); cx_assert(cpl_frame_get_filename(frame) != cpl_frame_get_filename(_frame)); cx_assert(cpl_frame_get_tag(frame) != cpl_frame_get_tag(_frame)); cx_assert(!strcmp(cpl_frame_get_filename(frame), cpl_frame_get_filename(_frame))); cx_assert(!strcmp(cpl_frame_get_tag(frame), cpl_frame_get_tag(_frame))); cx_assert(cpl_frame_get_type(frame) == cpl_frame_get_type(_frame)); cx_assert(cpl_frame_get_group(frame) == cpl_frame_get_group(_frame)); cx_assert(cpl_frame_get_level(frame) == cpl_frame_get_level(_frame)); cpl_frame_delete(_frame); cpl_frame_delete(frame); remove(filename); status = 0; fits_create_diskfile(&file, filename, &status); cx_assert(status == 0); /* * Create first HDU */ fits_create_img(file, 8, 0, naxes, &status); cx_assert(status == 0); /* * Create 3 extensions */ for(i = 0; i < 3; i++) { fits_insert_img(file, 16, 2, naxes, &status); cx_assert(status == 0); } frame = cpl_frame_new(); cpl_frame_set_filename(frame, filename); cx_assert(!strcmp(cpl_frame_get_filename(frame), filename)); next = cpl_frame_get_nextensions(frame); cx_assert(next == 3); cpl_frame_delete(frame); fits_close_file(file, &status); // remove(filename); /* * * Test 3: Query the number of planes */ remove(filename1); status = 0; fits_create_diskfile(&file, filename1, &status); cx_assert(status == 0); /* * Create first HDU */ fits_create_img(file, 8, 0, nplanes, &status); cx_assert(status == 0); fits_insert_img(file, 8, 3, nplanes, &status); cx_assert(status == 0); frame = cpl_frame_new(); cpl_frame_set_filename(frame, filename1); cx_assert(!strcmp(cpl_frame_get_filename(frame), filename1)); np = cpl_frame_get_nplanes(frame, 1); cx_assert(np == 64); // remove(filename); cpl_frame_delete(frame); fits_close_file(file, &status); /* * All tests succeeded */ cpl_end(); return 0; }