1 #include <gtest/gtest.h>
2 #include <gmock/gmock.h>
18 using ::testing::StrEq;
21 TEST(AngleTest, CreateAngle)
26 EXPECT_EQ(a.
Hours(), 4);
27 EXPECT_EQ(a.
radians(), 60. * M_PI / 180.);
33 EXPECT_EQ(a.
Hours(), 2.0);
36 EXPECT_EQ(
Angle(180).Degrees(), 180);
37 EXPECT_EQ(
Angle(-180).Degrees(), 180);
38 EXPECT_EQ(
Angle(180).Hours(), 12);
39 EXPECT_EQ(
Angle(-180).HoursHa(), 12);
40 EXPECT_EQ(
Angle(360).Degrees360(), 0);
41 EXPECT_EQ(
Angle(-360).Degrees360(), 0);
42 EXPECT_EQ(
Angle(720).Hours(), 0);
43 EXPECT_EQ(
Angle(360).HoursHa(), 0);
44 EXPECT_EQ(
Angle(-345).Hours(), 1);
45 EXPECT_EQ(
Angle(-345).HoursHa(), 1);
46 EXPECT_EQ(
Angle(345).Hours(), 23);
47 EXPECT_EQ(
Angle(345).HoursHa(), -1);
55 EXPECT_TRUE(a ==
Angle(-60));
56 EXPECT_FALSE(a ==
Angle(60));
57 EXPECT_TRUE(a !=
Angle(-61));
58 EXPECT_FALSE(a !=
Angle(-60));
59 EXPECT_TRUE(a <
Angle(119));
60 EXPECT_TRUE(a >
Angle(121));
65 TEST(AngleTest, Arithmetic)
69 EXPECT_EQ((a + b).Degrees(), 0);
70 EXPECT_EQ((a - b).Degrees(), -120);
71 EXPECT_EQ((b - a).Degrees(), 120);
78 EXPECT_EQ((b * 0.5).Degrees(), 30);
85 TEST(VectorTest, Constructors)
93 EXPECT_EQ(v.
l(), 2. / 7);
94 EXPECT_EQ(v.
m(), 3. / 7);
95 EXPECT_EQ(v.
n(), 6. / 7);
98 EXPECT_NEAR(v.
l(), 0, 0.00001);
99 EXPECT_NEAR(v.
m(), 0.707107, 0.00001);
100 EXPECT_NEAR(v.
n(), 0.707107, 0.00001);
115 EXPECT_DOUBLE_EQ(v.
length(), 1);
117 EXPECT_DOUBLE_EQ(v.
length(), 1);
118 EXPECT_DOUBLE_EQ(v.
l(), 1. / 9.);
119 EXPECT_DOUBLE_EQ(v.
m(), 4. / 9.);
120 EXPECT_DOUBLE_EQ(v.
n(), 8. / 9.);
176 EXPECT_EQ(alignment.latitude.Degrees(), 51.6);
177 EXPECT_EQ(alignment.longitude.Degrees(), -0.73);
179 EXPECT_EQ(alignment.mountType, Alignment::MOUNT_TYPE::EQ_FORK);
184 EXPECT_EQ(alignment.ih(), 0);
185 EXPECT_EQ(alignment.id(), 0);
186 EXPECT_EQ(alignment.np(), 0);
187 EXPECT_EQ(alignment.ch(), 0);
188 EXPECT_EQ(alignment.ma(), 0);
189 EXPECT_EQ(alignment.me(), 0);
190 alignment.setCorrections(1, 2, 3, 4, 5, 6);
191 EXPECT_EQ(alignment.ih(), 1);
192 EXPECT_EQ(alignment.id(), 2);
193 EXPECT_EQ(alignment.np(), 4);
194 EXPECT_EQ(alignment.ch(), 3);
195 EXPECT_EQ(alignment.ma(), 5);
196 EXPECT_EQ(alignment.me(), 6);
203 alignment.setCorrections(0, 0, 0, 0, 0, 1);
206 alignment.instrumentToObserved(
Angle(0),
Angle(0), &oHa, &oDec);
211 alignment.instrumentToObserved(
Angle(90),
Angle(0), &oHa, &oDec);
213 EXPECT_NEAR(oDec.
Degrees(), 0, 1e10);
216 alignment.instrumentToObserved(
Angle(0),
Angle(80), &oHa, &oDec);
218 EXPECT_FLOAT_EQ(oDec.
Degrees(), 81);
221 alignment.instrumentToObserved(
Angle(0),
Angle(90), &oHa, &oDec);
222 EXPECT_FLOAT_EQ(oHa.
HoursHa(), 12);
223 EXPECT_FLOAT_EQ(oDec.
Degrees(), 89);
226 alignment.instrumentToObserved(
Angle(0),
Angle(89), &oHa, &oDec);
228 EXPECT_FLOAT_EQ(oDec.
Degrees(), 90);
231 alignment.instrumentToObserved(
Angle(90),
Angle(89), &oHa, &oDec);
232 EXPECT_NEAR(oHa.
HoursHa(), 8.9997, 0.0001);
233 EXPECT_FLOAT_EQ(oDec.
Degrees(), 88.5858);
240 alignment.setCorrections(0, 0, 0, 0, 0, 1);
243 alignment.observedToInstrument(
Angle(0),
Angle(0), &oHa, &oDec);
248 alignment.instrumentToObserved(
Angle(-90),
Angle(0), &oHa, &oDec);
250 EXPECT_NEAR(oDec.
Degrees(), 0, 1e10);
253 alignment.observedToInstrument(
Angle(0),
Angle(80), &oHa, &oDec);
255 EXPECT_FLOAT_EQ(oDec.
Degrees(), 79);
258 alignment.observedToInstrument(
Angle(90),
Angle(90), &oHa, &oDec);
259 EXPECT_NEAR(oHa.
HoursHa(), 0, 0.0001);
260 EXPECT_FLOAT_EQ(oDec.
Degrees(), 89);
263 alignment.observedToInstrument(
Angle(180),
Angle(89), &oHa, &oDec);
265 EXPECT_FLOAT_EQ(oDec.
Degrees(), 90);
268 alignment.observedToInstrument(
Angle(-90),
Angle(89), &oHa, &oDec);
269 EXPECT_NEAR(oHa.
HoursHa(), -3.0003, 0.00001);
270 EXPECT_FLOAT_EQ(oDec.
Degrees(), 88.5858);
278 alignment.setCorrections(0, 0, 0, 0, 0, -1);
281 alignment.observedToInstrument(
Angle(0),
Angle(0), &oHa, &oDec);
286 alignment.instrumentToObserved(
Angle(-90),
Angle(0), &oHa, &oDec);
288 EXPECT_NEAR(oDec.
Degrees(), 0, 1e10);
291 alignment.observedToInstrument(
Angle(0),
Angle(80), &oHa, &oDec);
293 EXPECT_FLOAT_EQ(oDec.
Degrees(), 81);
296 alignment.observedToInstrument(
Angle(90),
Angle(90), &oHa, &oDec);
297 EXPECT_NEAR(oHa.
HoursHa(), 12, 0.0001);
298 EXPECT_FLOAT_EQ(oDec.
Degrees(), 89);
301 alignment.observedToInstrument(
Angle(0),
Angle(89), &oHa, &oDec);
303 EXPECT_FLOAT_EQ(oDec.
Degrees(), 90);
306 alignment.observedToInstrument(
Angle(-90),
Angle(89), &oHa, &oDec);
307 EXPECT_NEAR(oHa.
HoursHa(), -8.9997, 0.00001);
308 EXPECT_FLOAT_EQ(oDec.
Degrees(), 88.5858);
315 alignment.setCorrections(0, 0, 0, 0, 1, 0);
318 alignment.instrumentToObserved(
Angle(0),
Angle(0), &oHa, &oDec);
323 alignment.instrumentToObserved(
Angle(-90),
Angle(0), &oHa, &oDec);
328 alignment.instrumentToObserved(
Angle(90),
Angle(80), &oHa, &oDec);
330 EXPECT_FLOAT_EQ(oDec.
Degrees(), 79);
333 alignment.instrumentToObserved(
Angle(0),
Angle(90), &oHa, &oDec);
334 EXPECT_FLOAT_EQ(oHa.
HoursHa(), 6);
335 EXPECT_FLOAT_EQ(oDec.
Degrees(), 89);
338 alignment.instrumentToObserved(
Angle(-90),
Angle(89), &oHa, &oDec);
340 EXPECT_FLOAT_EQ(oDec.
Degrees(), 90);
343 alignment.instrumentToObserved(
Angle(180),
Angle(89), &oHa, &oDec);
344 EXPECT_NEAR(oHa.
HoursHa(), 9.0003, 0.0001);
345 EXPECT_FLOAT_EQ(oDec.
Degrees(), 88.5858);
353 alignment.setCorrections(0, 0, 0, 0, -1, 0);
356 alignment.instrumentToObserved(
Angle(0),
Angle(0), &oHa, &oDec);
361 alignment.instrumentToObserved(
Angle(-90),
Angle(0), &oHa, &oDec);
366 alignment.instrumentToObserved(
Angle(90),
Angle(80), &oHa, &oDec);
368 EXPECT_FLOAT_EQ(oDec.
Degrees(), 81);
371 alignment.instrumentToObserved(
Angle(0),
Angle(90), &oHa, &oDec);
372 EXPECT_FLOAT_EQ(oHa.
HoursHa(), -6);
373 EXPECT_FLOAT_EQ(oDec.
Degrees(), 89);
376 alignment.instrumentToObserved(
Angle(90),
Angle(89), &oHa, &oDec);
378 EXPECT_FLOAT_EQ(oDec.
Degrees(), 90);
381 alignment.instrumentToObserved(
Angle(0),
Angle(89), &oHa, &oDec);
382 EXPECT_NEAR(oHa.
HoursHa(), -2.9997, 0.0001);
383 EXPECT_FLOAT_EQ(oDec.
Degrees(), 88.5858);
390 alignment.setCorrections(0, 0, 0, 0, 1, 0);
393 alignment.observedToInstrument(
Angle(0),
Angle(0), &iHa, &iDec);
398 alignment.observedToInstrument(
Angle(90),
Angle(0), &iHa, &iDec);
403 alignment.observedToInstrument(
Angle(-90),
Angle(80), &iHa, &iDec);
405 EXPECT_FLOAT_EQ(iDec.
Degrees(), 79);
408 alignment.observedToInstrument(
Angle(90),
Angle(90), &iHa, &iDec);
409 EXPECT_NEAR(iHa.
HoursHa(), -6, 0.0001);
410 EXPECT_FLOAT_EQ(iDec.
Degrees(), 89);
413 alignment.observedToInstrument(
Angle(0),
Angle(89), &iHa, &iDec);
414 EXPECT_NEAR(iHa.
HoursHa(), -2.9997, 0.00001);
415 EXPECT_FLOAT_EQ(iDec.
Degrees(), 88.5858);
423 alignment.setCorrections(0, 0, 1, 0, 0, 0);
426 alignment.instrumentToObserved(
Angle(0),
Angle(0), &oHa, &oDec);
431 alignment.instrumentToObserved(
Angle(-90),
Angle(0), &oHa, &oDec);
436 alignment.instrumentToObserved(
Angle(90),
Angle(60), &oHa, &oDec);
438 EXPECT_FLOAT_EQ(oDec.
Degrees(), 60);
441 alignment.instrumentToObserved(
Angle(0),
Angle(90), &oHa, &oDec);
443 EXPECT_FLOAT_EQ(oDec.
Degrees(), 90);
446 alignment.instrumentToObserved(
Angle(-90),
Angle(89), &oHa, &oDec);
447 EXPECT_NEAR(oHa.
HoursHa(), -2.180087, 0.0001);
448 EXPECT_FLOAT_EQ(oDec.
Degrees(), 89);
451 alignment.instrumentToObserved(
Angle(180),
Angle(89), &oHa, &oDec);
452 EXPECT_NEAR(oHa.
HoursHa(), -8.180087, 0.0001);
453 EXPECT_FLOAT_EQ(oDec.
Degrees(), 89);
460 alignment.setCorrections(0, 0, 1, 0, 0, 0);
463 alignment.observedToInstrument(
Angle(0),
Angle(0), &iHa, &iDec);
468 alignment.observedToInstrument(
Angle(90),
Angle(0), &iHa, &iDec);
473 alignment.observedToInstrument(
Angle(-90),
Angle(60), &iHa, &iDec);
475 EXPECT_FLOAT_EQ(iDec.
Degrees(), 60);
478 alignment.observedToInstrument(
Angle(90),
Angle(90), &iHa, &iDec);
480 EXPECT_FLOAT_EQ(iDec.
Degrees(), 90);
483 alignment.observedToInstrument(
Angle(0),
Angle(89), &iHa, &iDec);
484 EXPECT_NEAR(iHa.
HoursHa(), -3.81991, 0.00001);
485 EXPECT_FLOAT_EQ(iDec.
Degrees(), 89);
493 alignment.setCorrections(0, 0, 0, 0, 1, 1);
496 alignment.instrumentToObserved(
Angle(0),
Angle(0), &oHa, &oDec);
497 alignment.observedToInstrument(oHa, oDec, &iHa, &iDec);
498 EXPECT_NEAR(iHa.
Degrees(), 0, 0.00001);
499 EXPECT_NEAR(iDec.
Degrees(), 0, 0.00001);
502 alignment.instrumentToObserved(
Angle(90),
Angle(0), &oHa, &oDec);
503 alignment.observedToInstrument(oHa, oDec, &iHa, &iDec);
504 EXPECT_NEAR(iHa.
Degrees(), 90, 0.00001);
505 EXPECT_NEAR(iDec.
Degrees(), 0, 0.00001);
508 alignment.instrumentToObserved(
Angle(0),
Angle(80), &oHa, &oDec);
509 alignment.observedToInstrument(oHa, oDec, &iHa, &iDec);
510 EXPECT_NEAR(iHa.
Degrees(), 0, 0.00001);
511 EXPECT_NEAR(iDec.
Degrees(), 80, 0.00001);
514 alignment.instrumentToObserved(
Angle(-90),
Angle(80), &oHa, &oDec);
515 alignment.observedToInstrument(oHa, oDec, &iHa, &iDec);
516 EXPECT_NEAR(iHa.
Degrees(), -90, 0.00001);
517 EXPECT_NEAR(iDec.
Degrees(), 80, 0.00001);
520 alignment.instrumentToObserved(
Angle(0),
Angle(90), &oHa, &oDec);
521 alignment.observedToInstrument(oHa, oDec, &iHa, &iDec);
523 EXPECT_NEAR(iDec.
Degrees(), 90, 0.00001);
526 alignment.instrumentToObserved(
Angle(0),
Angle(89), &oHa, &oDec);
527 alignment.observedToInstrument(oHa, oDec, &iHa, &iDec);
528 EXPECT_NEAR(iHa.
Degrees(), 0, 0.00001);
529 EXPECT_NEAR(iDec.
Degrees(), 89, 0.00001);
532 alignment.instrumentToObserved(
Angle(90),
Angle(89), &oHa, &oDec);
533 alignment.observedToInstrument(oHa, oDec, &iHa, &iDec);
534 EXPECT_NEAR(iHa.
Degrees(), 90, 0.00001);
535 EXPECT_NEAR(iDec.
Degrees(), 89, 0.00001);
538 alignment.instrumentToObserved(
Angle(0),
Angle(89), &oHa, &oDec);
539 alignment.observedToInstrument(oHa, oDec, &iHa, &iDec);
540 EXPECT_NEAR(iHa.
Degrees(), 0, 0.00001);
541 EXPECT_NEAR(iDec.
Degrees(), 89, 0.00001);
617 int main(
int argc,
char **argv)
622 ::testing::InitGoogleTest(&argc, argv);
623 ::testing::InitGoogleMock(&argc, argv);
624 return RUN_ALL_TESTS();
The Alignment class This converts between the mount axis angles and the sky hour angle and declinatio...
The Angle class This class implements an angle type. This holds an angle that is always in the range ...
The Vector class This implements the Directional Cosine used by Taki in his Matrix method....
Vector rotateY(Angle angle)
rotateY rotates this vector through angle about the Y axis
Vector rotateX(Angle angle)
rotateX rotates this vector through angle about the X axis
Vector rotateZ(Angle angle)
rotateZ rotates this vector through angle about the Z axis
Angle secondary()
secondary returns the secondary angle (dec, altitude) from this vector
Angle primary()
primary returns the primary angle (Ra, Ha, Azimuth) from this vector
Interface to the reference INDI C API device implementation on the Device Driver side.
DummyMathPlugin * Create()
static const loggerConf file_off
void configure(const std::string &outputFile, const loggerConf configuration, const int fileVerbosityLevel, const int screenVerbosityLevel)
Method to configure the logger. Called by the DEBUG_CONF() macro. To make implementation easier,...
static Logger & getInstance()
Method to get a reference to the object (i.e., Singleton) It is a static method.
int main(int argc, char **argv)
TEST(AngleTest, CreateAngle)
TEST_F(AlignmentTest, Create)