CR2RE Pipeline Reference Manual 1.6.2
hdrl_parameter-test.c
1/* $Id: hdrl_parameter-test.c,v 1.1 2013-10-01 13:26:32 jtaylor Exp $
2 *
3 * This file is part of the HDRL
4 * Copyright (C) 2013 European Southern Observatory
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
19 */
20
21/*
22 * $Author: jtaylor $
23 * $Date: 2013-10-01 13:26:32 $
24 * $Revision: 1.1 $
25 * $Name: not supported by cvs2svn $
26 */
27
28#ifdef HAVE_CONFIG_H
29#include <config.h>
30#endif
31
32/*-----------------------------------------------------------------------------
33 Includes
34 -----------------------------------------------------------------------------*/
35
36#include "hdrl_parameter.h"
37
38#include <cpl.h>
39
40/*----------------------------------------------------------------------------*/
44/*----------------------------------------------------------------------------*/
45
46
47/* define sigma clipping parameter object */
48typedef struct {
49 HDRL_PARAMETER_HEAD;
50 double kappa_low;
51 double kappa_high;
52 int niter;
53} hdrl_parameter_sigclip;
54
55/* define type metadata */
56static hdrl_parameter_typeobj hdrl_parameter_sigclip_type = {
57 HDRL_PARAMETER_COLLAPSE_SIGCLIP,/* type */
58 (hdrl_alloc *)&cpl_malloc, /* fp_alloc */
59 (hdrl_free *)&cpl_free, /* fp_free */
60 NULL, /* fp_destroy */
61 sizeof(hdrl_parameter_sigclip), /* obj_size */
62};
63
64/* define initializing constructor */
65static hdrl_parameter * hdrl_parameter_sigclip_create(double kappa, int niter)
66{
67 hdrl_parameter_sigclip * p = (hdrl_parameter_sigclip *)
68 hdrl_parameter_new(&hdrl_parameter_sigclip_type);
69 p->kappa_low = kappa;
70 p->kappa_high = kappa;
71 p->niter = niter;
72 return (hdrl_parameter *)p;
73}
74
75static int hdrl_parameter_is_sigclip(hdrl_parameter *self)
76{
77 return hdrl_parameter_check_type(self, &hdrl_parameter_sigclip_type);
78}
79
80/* public */
81static double hdrl_parameter_sigclip_get_kappa(hdrl_parameter *p)
82{
83 cpl_test(hdrl_parameter_is_sigclip(p));
84
85 hdrl_parameter_sigclip * sp = (hdrl_parameter_sigclip *)p;
86 return sp->kappa_low;
87}
88
89
90
91typedef struct {
92 HDRL_PARAMETER_HEAD;
93 int hbox_size;
94 hdrl_parameter * collapse;
95} hdrl_parameter_overscan;
96
97static void hdrl_parameter_overscan_destroy(hdrl_parameter *);
98
99static hdrl_parameter_typeobj hdrl_parameter_overscan_type = {
100 HDRL_PARAMETER_OVERSCAN, /* type */
101 (hdrl_alloc *)&cpl_malloc, /* fp_alloc */
102 (hdrl_free *)&cpl_free, /* fp_free */
103 (hdrl_free *)&hdrl_parameter_overscan_destroy, /* fp_destroy */
104 sizeof(hdrl_parameter_overscan), /* obj_size */
105};
106
107static hdrl_parameter *
108hdrl_parameter_overscan_create(int hbox_size, hdrl_parameter *collapse)
109{
110 hdrl_parameter_overscan * p =
111 (hdrl_parameter_overscan *)hdrl_parameter_new(&hdrl_parameter_overscan_type);
112 p->hbox_size = hbox_size;
113 p->collapse = collapse;
114 return (hdrl_parameter *)p;
115}
116
117static int hdrl_parameter_is_overscan(hdrl_parameter *p)
118{
119 return hdrl_parameter_check_type(p, &hdrl_parameter_overscan_type);
120}
121
122static void hdrl_parameter_overscan_destroy(hdrl_parameter *p)
123{
124 cpl_test(hdrl_parameter_is_overscan(p));
125 hdrl_parameter_destroy(((hdrl_parameter_overscan*)p)->collapse);
126 hdrl_parameter_get_type(p)->fp_free(p);
127}
128
129static double hdrl_parameter_overscan_get_hbox_size(hdrl_parameter *p)
130{
131 cpl_test(hdrl_parameter_is_overscan(p));
132
133 hdrl_parameter_overscan * sp = (hdrl_parameter_overscan *)p;
134 return sp->hbox_size;
135}
136
137static hdrl_parameter * hdrl_parameter_overscan_get_collapse(hdrl_parameter *p)
138{
139 cpl_test(hdrl_parameter_is_overscan(p));
140
141 hdrl_parameter_overscan * sp = (hdrl_parameter_overscan *)p;
142 return sp->collapse;
143}
144
145static void test_parameters(hdrl_parameter *p)
146{
147 hdrl_parameter * collapse = hdrl_parameter_overscan_get_collapse(p);
148 cpl_test_error(CPL_ERROR_NONE);
149 cpl_test_nonnull(collapse);
150
151 cpl_test(hdrl_parameter_is_sigclip(collapse));
152 cpl_test(!hdrl_parameter_is_overscan(collapse));
153
154 cpl_test(!hdrl_parameter_is_sigclip(p));
155 cpl_test(hdrl_parameter_is_overscan(p));
156
157 cpl_test_eq(0, hdrl_parameter_overscan_get_hbox_size(p));
158
159 cpl_test_eq(2, hdrl_parameter_sigclip_get_kappa(collapse));
160 cpl_test_eq(2, ((hdrl_parameter_sigclip*)collapse)->kappa_low);
161}
162
163
164/*----------------------------------------------------------------------------*/
168/*----------------------------------------------------------------------------*/
169int main(void)
170{
171 cpl_test_init(PACKAGE_BUGREPORT, CPL_MSG_WARNING);
172
173 /* Test null */
176 cpl_test_error(CPL_ERROR_NONE);
177
178 /* Test sigclip_create */
179 hdrl_parameter *collapse = hdrl_parameter_sigclip_create(2, 3);
180 cpl_test_error(CPL_ERROR_NONE);
181 cpl_test_nonnull(collapse);
182
183 /* Test get kappa */
184 double kappa = hdrl_parameter_sigclip_get_kappa(collapse);
185 cpl_test_error(CPL_ERROR_NONE);
186 cpl_test_eq(kappa, 2);
187
188 /* Test create overscan */
189 hdrl_parameter *osp = hdrl_parameter_overscan_create(0, collapse);
190 cpl_test_error(CPL_ERROR_NONE);
191 cpl_test_nonnull(osp);
192
193 /* More tests over the parameters */
194 test_parameters(osp);
195 cpl_test_error(CPL_ERROR_NONE);
196
197 /* Test get size */
198 double size = hdrl_parameter_overscan_get_hbox_size(osp);
199 cpl_test_error(CPL_ERROR_NONE);
200 cpl_test_eq(size, 0);
201
202 /* Test get collapse */
203 hdrl_parameter *test = hdrl_parameter_overscan_get_collapse(osp);
204 cpl_test_error(CPL_ERROR_NONE);
205 cpl_test_nonnull(test);
206
207 /* Test destroy existing parameter */
209 cpl_test_error(CPL_ERROR_NONE);
210
211 /* Test delete parameter */
212 collapse = hdrl_parameter_sigclip_create(2, 3);
213 osp = hdrl_parameter_overscan_create(0, collapse);
215 hdrl_parameter_delete(collapse);
216 cpl_test_error(CPL_ERROR_NONE);
217
218
219 return cpl_test_end(0);
220}
221
void hdrl_parameter_destroy(hdrl_parameter *obj)
deep delete of a parameter
void hdrl_parameter_delete(hdrl_parameter *obj)
shallow delete of a parameter