1 //==============================================================================
2 //
3 //  This file is part of GPSTk, the GPS Toolkit.
4 //
5 //  The GPSTk is free software; you can redistribute it and/or modify
6 //  it under the terms of the GNU Lesser General Public License as published
7 //  by the Free Software Foundation; either version 3.0 of the License, or
8 //  any later version.
9 //
10 //  The GPSTk is distributed in the hope that it will be useful,
11 //  but WITHOUT ANY WARRANTY; without even the implied warranty of
12 //  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13 //  GNU Lesser General Public License for more details.
14 //
15 //  You should have received a copy of the GNU Lesser General Public
16 //  License along with GPSTk; if not, write to the Free Software Foundation,
17 //  Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
18 //
19 //  This software was developed by Applied Research Laboratories at the
20 //  University of Texas at Austin.
21 //  Copyright 2004-2020, The Board of Regents of The University of Texas System
22 //
23 //==============================================================================
24 
25 //==============================================================================
26 //
27 //  This software was developed by Applied Research Laboratories at the
28 //  University of Texas at Austin, under contract to an agency or agencies
29 //  within the U.S. Department of Defense. The U.S. Government retains all
30 //  rights to use, duplicate, distribute, disclose, or release this software.
31 //
32 //  Pursuant to DoD Directive 523024
33 //
34 //  DISTRIBUTION STATEMENT A: This software has been approved for public
35 //                            release, distribution is unlimited.
36 //
37 //==============================================================================
38 
39 
40 #include "ReferenceFrame.hpp"
41 #include "TestUtil.hpp"
42 
43 using namespace std;
44 using namespace gpstk;
45 
46 class ReferenceFrame_T
47 {
48 public:
asStringTest()49    unsigned asStringTest()
50    {
51       TUDEF("ReferenceFrame", "asString");
52 
53       string pz("PZ90");
54       string wgs("WGS84");
55       string unk("Unknown");
56 
57       ReferenceFrame rf1(ReferenceFrame::PZ90);
58       TUASSERTE(std::string, pz, gpstk::StringUtils::asString(rf1));
59 
60       ReferenceFrame rf2(ReferenceFrame::WGS84);
61       TUASSERTE(std::string, wgs, gpstk::StringUtils::asString(rf2));
62 
63       ReferenceFrame rf3(ReferenceFrame::Unknown);
64       TUASSERTE(std::string, unk, gpstk::StringUtils::asString(rf3));
65 
66       TURETURN();
67    }
68 
69 
equalityTest()70    unsigned equalityTest()
71    {
72       TUDEF("ReferenceFrame", "operator==");
73 
74       ReferenceFrame rf1(ReferenceFrame::PZ90);
75       ReferenceFrame rf2(ReferenceFrame::WGS84);
76       ReferenceFrame rf3(ReferenceFrame::Unknown);
77       ReferenceFrame rf4 = gpstk::StringUtils::asReferenceFrame("PZ90");
78       ReferenceFrame rf5 = gpstk::StringUtils::asReferenceFrame("WGS84");
79       ReferenceFrame rf6 = gpstk::StringUtils::asReferenceFrame("Junk");
80 
81          //PZ90 Enum with...
82       TUASSERT( rf1 == rf1);
83       TUASSERT(!(rf1 == rf2) );
84       TUASSERT(!(rf1 == rf3) );
85       TUASSERT( rf1 == rf4);
86       TUASSERT(!(rf1 == rf5) );
87       TUASSERT(!(rf1 == rf6) );
88 
89          //WGS84 Enum with...
90       TUASSERT(!(rf2 == rf1) );
91       TUASSERT( rf2 == rf2);
92       TUASSERT(!(rf2 == rf3) );
93       TUASSERT(!(rf2 == rf4) );
94       TUASSERT( rf2 == rf5);
95       TUASSERT(!(rf2 == rf6));
96 
97          //Unknown Enum with... (Should fail every one)
98       TUASSERT(!(rf3 == rf1) );
99       TUASSERT(!(rf3 == rf2) );
100       TUASSERT( (rf3 == rf3) );
101       TUASSERT(!(rf3 == rf4) );
102       TUASSERT(!(rf3 == rf5) );
103       TUASSERT( (rf3 == rf6) );
104 
105       TURETURN();
106    }
107 
108 
inequalityTest()109    unsigned inequalityTest()
110    {
111       TUDEF("ReferenceFrame", "operator!=");
112 
113       ReferenceFrame rf1(ReferenceFrame::PZ90);
114       ReferenceFrame rf2(ReferenceFrame::WGS84);
115       ReferenceFrame rf3(ReferenceFrame::Unknown);
116       ReferenceFrame rf4 = gpstk::StringUtils::asReferenceFrame("PZ90");
117       ReferenceFrame rf5 = gpstk::StringUtils::asReferenceFrame("WGS84");
118       ReferenceFrame rf6 = gpstk::StringUtils::asReferenceFrame("Junk");
119 
120          //PZ90 Enum with...
121       TUASSERT( !(rf1 != rf1) );
122       TUASSERT( (rf1 != rf2) );
123       TUASSERT( (rf1 != rf3) );
124       TUASSERT( !(rf1 != rf4) );
125       TUASSERT( (rf1 != rf5) );
126       TUASSERT( (rf1 != rf6) );
127 
128          //WGS84 Enum with...
129       TUASSERT( (rf2 != rf1) );
130       TUASSERT( !(rf2 != rf2) );
131       TUASSERT( (rf2 != rf3) );
132       TUASSERT( (rf2 != rf4) );
133       TUASSERT( !(rf2 != rf5) );
134       TUASSERT( (rf2 != rf6) );
135 
136          //Unknown Enum with...
137       TUASSERT( (rf3 != rf1) );
138       TUASSERT( (rf3 != rf2) );
139       TUASSERT( !(rf3 != rf3) );
140       TUASSERT( (rf3 != rf4) );
141       TUASSERT( (rf3 != rf5) );
142       TUASSERT( !(rf3 != rf6) );
143 
144       TURETURN();
145    }
146 
147 
greaterThanTest()148    unsigned greaterThanTest()
149    {
150       TUDEF("ReferenceFrame", "operator>");
151 
152       ReferenceFrame rf1(ReferenceFrame::Unknown);
153       ReferenceFrame rf2(ReferenceFrame::WGS84);
154       ReferenceFrame rf3(ReferenceFrame::PZ90);
155       ReferenceFrame rf4 = gpstk::StringUtils::asReferenceFrame("Junk");
156       ReferenceFrame rf5 = gpstk::StringUtils::asReferenceFrame("WGS84");
157       ReferenceFrame rf6 = gpstk::StringUtils::asReferenceFrame("PZ90");
158 
159       TUASSERT( !(rf1 > rf1) );
160       TUASSERT( !(rf1 > rf2) );
161       TUASSERT( !(rf1 > rf3) );
162       TUASSERT( !(rf1 > rf4) );
163       TUASSERT( !(rf1 > rf5) );
164       TUASSERT( !(rf1 > rf6) );
165 
166       TUASSERT( (rf2 > rf1) );
167       TUASSERT( !(rf2 > rf2) );
168       TUASSERT( !(rf2 > rf3) );
169       TUASSERT( (rf2 > rf4) );
170       TUASSERT( !(rf2 > rf5) );
171       TUASSERT( !(rf2 > rf6) );
172 
173       TUASSERT( (rf3 > rf1) );
174       TUASSERT( (rf3 > rf2) );
175       TUASSERT( !(rf3 > rf3) );
176       TUASSERT( (rf3 > rf4) );
177       TUASSERT( (rf3 > rf5) );
178       TUASSERT( !(rf3 > rf6) );
179 
180       TURETURN();
181    }
182 
183 
lessThanTest()184    unsigned lessThanTest()
185    {
186       TUDEF("ReferenceFrame", "operator<");
187 
188       ReferenceFrame rf1(ReferenceFrame::Unknown);
189       ReferenceFrame rf2(ReferenceFrame::WGS84);
190       ReferenceFrame rf3(ReferenceFrame::PZ90);
191       ReferenceFrame rf6 = gpstk::StringUtils::asReferenceFrame("PZ90");
192       ReferenceFrame rf5 = gpstk::StringUtils::asReferenceFrame("WGS84");
193       ReferenceFrame rf4 = gpstk::StringUtils::asReferenceFrame("Junk");
194 
195       TUASSERT( !(rf1 < rf1) );
196       TUASSERT( rf1 < rf2 );
197       TUASSERT( rf1 < rf3 );
198       TUASSERT( !(rf1 < rf4) );
199       TUASSERT( rf1 < rf5 );
200       TUASSERT( rf1 < rf6 );
201 
202       TUASSERT( !(rf2 < rf1) );
203       TUASSERT( !(rf2 < rf2) );
204       TUASSERT( (rf2 < rf3) );
205       TUASSERT( !(rf2 < rf4) );
206       TUASSERT( !(rf2 < rf5) );
207       TUASSERT( (rf2 < rf6) );
208 
209       TUASSERT( !(rf3 < rf1) );
210       TUASSERT( !(rf3 < rf2) );
211       TUASSERT( !(rf3 < rf3) );
212       TUASSERT( !(rf3 < rf4) );
213       TUASSERT( !(rf3 < rf5) );
214       TUASSERT( !(rf3 < rf6) );
215 
216       TURETURN();
217    }
218 
219 
greaterThanOrEqualToTest()220    unsigned greaterThanOrEqualToTest()
221    {
222       TUDEF("ReferenceFrame", "operator>=");
223 
224       ReferenceFrame rf1(ReferenceFrame::Unknown);
225       ReferenceFrame rf2(ReferenceFrame::WGS84);
226       ReferenceFrame rf3(ReferenceFrame::PZ90);
227       ReferenceFrame rf6 = gpstk::StringUtils::asReferenceFrame("PZ90");
228       ReferenceFrame rf5 = gpstk::StringUtils::asReferenceFrame("WGS84");
229       ReferenceFrame rf4 = gpstk::StringUtils::asReferenceFrame("Junk");
230 
231          //Unknown with...
232       TUASSERT( rf1 >= rf1 );
233       TUASSERT( !(rf1 >= rf2) );
234       TUASSERT( !(rf1 >= rf3) );
235       TUASSERT( rf1 >= rf4 );
236       TUASSERT( !(rf1 >= rf5) );
237       TUASSERT( !(rf1 >= rf6) );
238 
239       TUASSERT( rf2 >= rf1 );
240       TUASSERT( rf2 >= rf2 );
241       TUASSERT( !(rf2 >= rf3) );
242       TUASSERT( rf2 >= rf4 );
243       TUASSERT( rf2 >= rf5 );
244       TUASSERT( !(rf2 >= rf6) );
245 
246       TUASSERT( rf3 >= rf1 );
247       TUASSERT( rf3 >= rf2 );
248       TUASSERT( rf3 >= rf3 );
249       TUASSERT( rf3 >= rf4 );
250       TUASSERT( rf3 >= rf5 );
251       TUASSERT( rf3 >= rf6 );
252 
253       TURETURN();
254    }
255 
256 
lesserThanOrEqualToTest()257    unsigned lesserThanOrEqualToTest()
258    {
259       TUDEF("ReferenceFrame", "operator<=");
260 
261       ReferenceFrame rf1(ReferenceFrame::Unknown);
262       ReferenceFrame rf2(ReferenceFrame::WGS84);
263       ReferenceFrame rf3(ReferenceFrame::PZ90);
264       ReferenceFrame rf6 = gpstk::StringUtils::asReferenceFrame("PZ90");
265       ReferenceFrame rf5 = gpstk::StringUtils::asReferenceFrame("WGS84");
266       ReferenceFrame rf4 = gpstk::StringUtils::asReferenceFrame("Junk");
267 
268       TUASSERT( rf1 <= rf1 );
269       TUASSERT( rf1 <= rf2 );
270       TUASSERT( rf1 <= rf3 );
271       TUASSERT( rf1 <= rf4 );
272       TUASSERT( rf1 <= rf5 );
273       TUASSERT( rf1 <= rf6 );
274 
275       TUASSERT( !(rf2 <= rf1) );
276       TUASSERT( rf2 <= rf2 );
277       TUASSERT( rf2 <= rf3 );
278       TUASSERT( !(rf2 <= rf4) );
279       TUASSERT( rf2 <= rf5 );
280       TUASSERT( rf2 <= rf6 );
281 
282       TUASSERT( !(rf3 <= rf1) );
283       TUASSERT( !(rf3 <= rf2) );
284       TUASSERT( rf3 <= rf3 );
285       TUASSERT( !(rf3 <= rf4) );
286       TUASSERT( !(rf3 <= rf5) );
287       TUASSERT( rf3 <= rf6 );
288 
289       TURETURN();
290    }
291 
292 
setReferenceFrameTest()293    unsigned setReferenceFrameTest()
294    {
295       TUDEF("ReferenceFrame", "ReferenceFrame");
296 
297       ReferenceFrame rf1(ReferenceFrame::Unknown);
298       ReferenceFrame rf2(ReferenceFrame::WGS84);
299       ReferenceFrame rf3(ReferenceFrame::PZ90);
300 
301       ReferenceFrame frame(ReferenceFrame::Unknown);
302       TUASSERT(frame == rf1);
303       TUASSERT(frame != rf2);
304       TUASSERT(frame != rf3);
305 
306       frame = ReferenceFrame((ReferenceFrame)0);
307       TUASSERT(frame == rf1);
308       TUASSERT(frame != rf2);
309       TUASSERT(frame != rf3);
310 
311       frame = gpstk::StringUtils::asReferenceFrame("Unknown");
312       TUASSERT(frame == rf1);
313       TUASSERT(frame != rf2);
314       TUASSERT(frame != rf3);
315 
316       frame = gpstk::StringUtils::asReferenceFrame("Junk");
317       TUASSERT(frame == rf1);
318       TUASSERT(frame != rf2);
319       TUASSERT(frame != rf3);
320 
321       frame = ReferenceFrame((ReferenceFrame)-1);
322       TUASSERT(frame != rf1);
323       TUASSERT(frame != rf2);
324       TUASSERT(frame != rf3);
325 
326       frame = ReferenceFrame(ReferenceFrame::WGS84);
327       TUASSERT(frame != rf1);
328       TUASSERT(frame == rf2);
329       TUASSERT(frame != rf3);
330 
331       frame = gpstk::StringUtils::asReferenceFrame("WGS84");
332       TUASSERT(frame != rf1);
333       TUASSERT(frame == rf2);
334       TUASSERT(frame != rf3);
335 
336       frame = ReferenceFrame((ReferenceFrame)1);
337       TUASSERT(frame != rf1);
338       TUASSERT(frame == rf2);
339       TUASSERT(frame != rf3);
340 
341       frame = ReferenceFrame(ReferenceFrame::PZ90);
342       TUASSERT(frame != rf1);
343       TUASSERT(frame != rf2);
344       TUASSERT(frame == rf3);
345 
346       frame = gpstk::StringUtils::asReferenceFrame("PZ90");
347       TUASSERT(frame != rf1);
348       TUASSERT(frame != rf2);
349       TUASSERT(frame == rf3);
350 
351       frame = ReferenceFrame((ReferenceFrame)6);
352       TUASSERT(frame != rf1);
353       TUASSERT(frame != rf2);
354       TUASSERT(frame == rf3);
355 
356       TURETURN();
357    }
358 };
359 
360 
main()361 int main()
362 {
363    ReferenceFrame_T testClass;
364    unsigned errorTotal = 0;
365 
366    errorTotal += testClass.asStringTest();
367    errorTotal += testClass.equalityTest();
368    errorTotal += testClass.inequalityTest();
369    errorTotal += testClass.greaterThanTest();
370    errorTotal += testClass.lessThanTest();
371    errorTotal += testClass.greaterThanOrEqualToTest();
372    errorTotal += testClass.lesserThanOrEqualToTest();
373    errorTotal += testClass.setReferenceFrameTest();
374    std::cout << "Total Failures for " << __FILE__ << ": " << errorTotal
375              << std::endl;
376 
377    return errorTotal;
378 }
379 
380