Loading [MathJax]/extensions/TeX/AMSsymbols.js
LAL 7.7.0.1-5e288d3
All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Modules Pages
TranslateAnglesTest.c
Go to the documentation of this file.
1//
2// Copyright (C) 2015 Reinhard Prix
3//
4// This program is free software; you can redistribute it and/or modify
5// it under the terms of the GNU General Public License as published by
6// the Free Software Foundation; either version 2 of the License, or
7// (at your option) any later version.
8//
9// This program is distributed in the hope that it will be useful,
10// but WITHOUT ANY WARRANTY; without even the implied warranty of
11// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12// GNU General Public License for more details.
13//
14// You should have received a copy of the GNU General Public License
15// along with with program; see the file COPYING. If not, write to the
16// Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
17// MA 02110-1301 USA
18//
19
20// Tests of the unit conversion functions in the UserInputParser.[ch] module
21
22#include <stdio.h>
23#include <math.h>
24#include <string.h>
25
26#include <lal/XLALError.h>
27#include <lal/LALMalloc.h>
28#include <lal/LALConstants.h>
29#include <lal/TranslateAngles.h>
30
31// ---------- local prototypes ----------
32int test_HMS_RAD ( void );
33int test_DMS_RAD ( void );
34
35// ==================== function definitions ====================
36int main(void)
37{
38
39 // ---------- test angle conversions ----------
42
43 // check for memory leaks
45
46 return EXIT_SUCCESS;
47
48} // main()
49
50///
51/// test angle conversions between HMS and RAD: XLALTranslateHMStoRAD() and XLALTranslateRADtoHMS()
52///
53int
55{
56 REAL8 diff, tol = 3e-15;
57 REAL8 rads, radsRef;
58 const char *hmsRef;
59 char *hms;
60
61 hmsRef = "06:52:16.8750000";
62 radsRef = 1.79891631418447; // octave> hms_to_rad ( "6:52:16.875" )
64 XLAL_CHECK ( (diff=fabs(rads - radsRef)) < tol, XLAL_ETOL, "Result XLALTranslateHMStoRAD(%s)=%.16g differs from reference '%.16g' by %g > tolerance %g\n", hmsRef, rads, radsRef, diff, tol );
65
66 XLAL_CHECK ( (hms = XLALTranslateRADtoHMS ( rads )) != NULL, XLAL_EFUNC );
67 XLAL_CHECK ( strcmp ( hms, hmsRef ) == 0, XLAL_ETOL, "Returned hms string '%s' differs from input '%s'\n", hms, hmsRef );
68 XLALPrintInfo ("Translated HMS '%s' into %.16g rad, and back into '%s'\n", hmsRef, rads, hms );
69 XLALFree ( hms );
70
71 /* test with form HH:MM */
72 hmsRef = "06:52";
73 radsRef = 1.797689129554159; // pulsarpputils.ra_to_rad ( "06:52" )
75 XLAL_CHECK ( (diff=fabs(rads - radsRef)) < tol, XLAL_ETOL, "Result XLALTranslateHMStoRAD(%s)=%.16g differs from reference '%.16g' by %g > tolerance %g\n", hmsRef, rads, radsRef, diff, tol );
76
77 XLAL_CHECK ( (hms = XLALTranslateRADtoHMS ( rads )) != NULL, XLAL_EFUNC );
78 XLAL_CHECK ( strcmp ( hms, "06:52:00.0000000" ) == 0, XLAL_ETOL, "Returned hms string '%s' differs from input '%s'\n", hms, hmsRef );
79 XLALPrintInfo ("Translated HMS '%s' into %.16g rad, and back into '%s'\n", hmsRef, rads, hms );
80 XLALFree ( hms );
81
82 /* test with form HH */
83 hmsRef = "06";
84 radsRef = 1.570796326794897; // pulsarpputils.ra_to_rad ( "06" )
86 XLAL_CHECK ( (diff=fabs(rads - radsRef)) < tol, XLAL_ETOL, "Result XLALTranslateHMStoRAD(%s)=%.16g differs from reference '%.16g' by %g > tolerance %g\n", hmsRef, rads, radsRef, diff, tol );
87
88 XLAL_CHECK ( (hms = XLALTranslateRADtoHMS ( rads )) != NULL, XLAL_EFUNC );
89 XLAL_CHECK ( strcmp ( hms, "06:00:00.0000000" ) == 0, XLAL_ETOL, "Returned hms string '%s' differs from input '%s'\n", hms, hmsRef );
90 XLALPrintInfo ("Translated HMS '%s' into %.16g rad, and back into '%s'\n", hmsRef, rads, hms );
91 XLALFree ( hms );
92
93 hmsRef = "00:52:16.8753234";
94 radsRef = 0.228120010907883; // octave> hms_to_rad ( "00:52:16.8753234" )
96 XLAL_CHECK ( (diff=fabs(rads - radsRef)) < tol, XLAL_ETOL, "Result XLALTranslateHMStoRAD(%s)=%.16g differs from reference '%.16g' by %g > tolerance %g\n", hmsRef, rads, radsRef, diff, tol );
97
98 XLAL_CHECK ( (hms = XLALTranslateRADtoHMS ( rads )) != NULL, XLAL_EFUNC );
99 XLAL_CHECK ( strcmp ( hms, hmsRef ) == 0, XLAL_ETOL, "Returned hms string '%s' differs from input '%s'\n", hms, hmsRef );
100 XLALPrintInfo ("Translated HMS '%s' into %.16g rad, and back into '%s'\n", hmsRef, rads, hms );
101 XLALFree ( hms );
102
103 /* test with form HH:MM */
104 hmsRef = "00:52";
105 radsRef = 0.226892802759263; // pulsarpputils.ra_to_rad ( "00:52" )
107 XLAL_CHECK ( (diff=fabs(rads - radsRef)) < tol, XLAL_ETOL, "Result XLALTranslateHMStoRAD(%s)=%.16g differs from reference '%.16g' by %g > tolerance %g\n", hmsRef, rads, radsRef, diff, tol );
108
109 XLAL_CHECK ( (hms = XLALTranslateRADtoHMS ( rads )) != NULL, XLAL_EFUNC );
110 XLAL_CHECK ( strcmp ( hms, "00:52:00.0000000" ) == 0, XLAL_ETOL, "Returned hms string '%s' differs from input '%s'\n", hms, hmsRef );
111 XLALPrintInfo ("Translated HMS '%s' into %.16g rad, and back into '%s'\n", hmsRef, rads, hms );
112 XLALFree ( hms );
113
114 /* test with form HH */
115 hmsRef = "00";
116 radsRef = 0.0; // pulsarpputils.ra_to_rad ( "00" )
118 XLAL_CHECK ( (diff=fabs(rads - radsRef)) < tol, XLAL_ETOL, "Result XLALTranslateHMStoRAD(%s)=%.16g differs from reference '%.16g' by %g > tolerance %g\n", hmsRef, rads, radsRef, diff, tol );
119
120 XLAL_CHECK ( (hms = XLALTranslateRADtoHMS ( rads )) != NULL, XLAL_EFUNC );
121 XLAL_CHECK ( strcmp ( hms, "00:00:00.0000000" ) == 0, XLAL_ETOL, "Returned hms string '%s' differs from input '%s'\n", hms, hmsRef );
122 XLALPrintInfo ("Translated HMS '%s' into %.16g rad, and back into '%s'\n", hmsRef, rads, hms );
123 XLALFree ( hms );
124
125 return XLAL_SUCCESS;
126} // test_HMS_RAD()
127
128///
129/// test angle conversions between DMS and RAD: XLALTranslateDMStoRAD() and XLALTranslateRADtoDMS()
130///
131int
133{
134 REAL8 diff, tol = 3e-15;
135 REAL8 rads, radsRef;
136 const char *dmsRef;
137 char *dms;
138
139 dmsRef = "-06:52:16.87500";
140 radsRef = -0.119927754278965; // octave> dms_to_rad ( "-06:52:16.875" )
142 XLAL_CHECK ( (diff=fabs(rads - radsRef)) < tol, XLAL_ETOL, "Result XLALTranslateDMStoRAD(%s)=%.16g differs from reference '%.16g' by %g > tolerance %g\n", dmsRef, rads, radsRef, diff, tol );
143
144 XLAL_CHECK ( (dms = XLALTranslateRADtoDMS ( rads )) != NULL, XLAL_EFUNC );
145 XLAL_CHECK ( strcmp ( dms, dmsRef ) == 0, XLAL_ETOL, "Returned dms string '%s' differs from input '%s'\n", dms, dmsRef );
146 XLALPrintInfo ("Translated DMS '%s' into %.16g rad, and back into '%s'\n", dmsRef, rads, dms );
147 XLALFree ( dms );
148
149 /* test with form DD:MM */
150 dmsRef = "-06:52";
151 radsRef = -0.119845941970277; // pulsarpputils.ra_to_rad ( "-06:52" )
153 XLAL_CHECK ( (diff=fabs(rads - radsRef)) < tol, XLAL_ETOL, "Result XLALTranslateDMStoRAD(%s)=%.16g differs from reference '%.16g' by %g > tolerance %g\n", dmsRef, rads, radsRef, diff, tol );
154
155 XLAL_CHECK ( (dms = XLALTranslateRADtoDMS ( rads )) != NULL, XLAL_EFUNC );
156 XLAL_CHECK ( strcmp ( dms, "-06:52:00.00000" ) == 0, XLAL_ETOL, "Returned dms string '%s' differs from input '%s'\n", dms, dmsRef );
157 XLALPrintInfo ("Translated DMS '%s' into %.16g rad, and back into '%s'\n", dmsRef, rads, dms );
158 XLALFree ( dms );
159
160 /* test with form DD */
161 dmsRef = "-06";
162 radsRef = -0.104719755119660; // pulsarpputils.ra_to_rad ( "-06" )
164 XLAL_CHECK ( (diff=fabs(rads - radsRef)) < tol, XLAL_ETOL, "Result XLALTranslateDMStoRAD(%s)=%.16g differs from reference '%.16g' by %g > tolerance %g\n", dmsRef, rads, radsRef, diff, tol );
165
166 XLAL_CHECK ( (dms = XLALTranslateRADtoDMS ( rads )) != NULL, XLAL_EFUNC );
167 XLAL_CHECK ( strcmp ( dms, "-06:00:00.00000" ) == 0, XLAL_ETOL, "Returned dms string '%s' differs from input '%s'\n", dms, dmsRef );
168 XLALPrintInfo ("Translated DMS '%s' into %.16g rad, and back into '%s'\n", dmsRef, rads, dms );
169 XLALFree ( dms );
170
171 dmsRef = "+00:52:16.87532";
172 radsRef = 0.0152080007107085; // octave> dms_to_rad ( "00:52:16.87532");
174 XLAL_CHECK ( (diff=fabs(rads - radsRef)) < tol, XLAL_ETOL, "Result XLALTranslateDMStoRAD(%s)=%.16g differs from reference '%.16g' by %g > tolerance %g\n", dmsRef, rads, radsRef, diff, tol );
175
176 XLAL_CHECK ( (dms = XLALTranslateRADtoDMS ( rads )) != NULL, XLAL_EFUNC );
177 XLAL_CHECK ( strcmp ( dms, dmsRef ) == 0, XLAL_ETOL, "Returned dms string '%s' differs from input '%s'\n", dms, dmsRef );
178 XLALPrintInfo ("Translated DMS '%s' into %.16g rad, and back into '%s'\n", dmsRef, rads, dms );
179 XLALFree ( dms );
180
181 /* test with form DD:MM */
182 dmsRef = "+00:52";
183 radsRef = 0.015126186850618; // pulsarpputils.ra_to_rad ( "+00:52" )
185 XLAL_CHECK ( (diff=fabs(rads - radsRef)) < tol, XLAL_ETOL, "Result XLALTranslateDMStoRAD(%s)=%.16g differs from reference '%.16g' by %g > tolerance %g\n", dmsRef, rads, radsRef, diff, tol );
186
187 XLAL_CHECK ( (dms = XLALTranslateRADtoDMS ( rads )) != NULL, XLAL_EFUNC );
188 XLAL_CHECK ( strcmp ( dms, "+00:52:00.00000" ) == 0, XLAL_ETOL, "Returned dms string '%s' differs from input '%s'\n", dms, dmsRef );
189 XLALPrintInfo ("Translated DMS '%s' into %.16g rad, and back into '%s'\n", dmsRef, rads, dms );
190 XLALFree ( dms );
191
192 /* test with form DD:MM */
193 dmsRef = "+00";
194 radsRef = 0.0; // pulsarpputils.ra_to_rad ( "+00" )
196 XLAL_CHECK ( (diff=fabs(rads - radsRef)) < tol, XLAL_ETOL, "Result XLALTranslateDMStoRAD(%s)=%.16g differs from reference '%.16g' by %g > tolerance %g\n", dmsRef, rads, radsRef, diff, tol );
197
198 XLAL_CHECK ( (dms = XLALTranslateRADtoDMS ( rads )) != NULL, XLAL_EFUNC );
199 XLAL_CHECK ( strcmp ( dms, "+00:00:00.00000" ) == 0, XLAL_ETOL, "Returned dms string '%s' differs from input '%s'\n", dms, dmsRef );
200 XLALPrintInfo ("Translated DMS '%s' into %.16g rad, and back into '%s'\n", dmsRef, rads, dms );
201 XLALFree ( dms );
202
203 return XLAL_SUCCESS;
204} // test_DMS_RAD()
void LALCheckMemoryLeaks(void)
Definition: LALMalloc.c:784
int test_HMS_RAD(void)
test angle conversions between HMS and RAD: XLALTranslateHMStoRAD() and XLALTranslateRADtoHMS()
int main(void)
int test_DMS_RAD(void)
test angle conversions between DMS and RAD: XLALTranslateDMStoRAD() and XLALTranslateRADtoDMS()
int XLALPrintInfo(const char *fmt,...)
Definition: XLALError.c:90
double REAL8
Double precision real floating-point number (8 bytes).
#define XLALFree(p)
Definition: LALMalloc.h:47
int XLALTranslateHMStoRAD(REAL8 *radians, const CHAR *hms)
Translate a string representing an angle in the form "hours:minutes:seconds" into radians.
CHAR * XLALTranslateRADtoHMS(REAL8 radians)
Translate (longitude, right-ascencsion, RA) radians into hours:minutes:seconds (HMS) format,...
int XLALTranslateDMStoRAD(REAL8 *radians, const CHAR *dms)
Translate a string representing an angle in the form "degrees:minutes:seconds" into radians.
CHAR * XLALTranslateRADtoDMS(REAL8 radians)
Translate (latitude, declination, DEC) radians into "sign*degrees:minutes:seconds" (DMS) format,...
#define XLAL_CHECK(assertion,...)
Macro to test an assertion and invoke a failure if it is not true in a function that returns an integ...
Definition: XLALError.h:810
#define XLAL_CHECK_MAIN(assertion,...)
Macro to test an assertion and invoke a failure if it is not true in a C main() routine.
Definition: XLALError.h:885
@ XLAL_SUCCESS
Success return value (not an error number)
Definition: XLALError.h:401
@ XLAL_EFUNC
Internal function call failed bit: "or" this with existing error number.
Definition: XLALError.h:462
@ XLAL_ETOL
Failed to reach specified tolerance.
Definition: XLALError.h:458