@@ -61,10 +61,14 @@ static int check_equal_pos(const double *posa, const double *posb, double tol) {
61
61
tol = fabs (tol );
62
62
if (tol < 1e-30 ) tol = 1e-30 ;
63
63
64
- for (i = 0 ; i < 3 ; i ++ ) if (fabs (posa [i ] - posb [i ]) > tol ) {
64
+ for (i = 0 ; i < 3 ; i ++ ) {
65
+ if (fabs (posa [i ] - posb [i ]) <= tol ) continue ;
66
+ if (isnan (posa [i ]) && isnan (posb [i ])) continue ;
67
+
65
68
fprintf (stderr , " A[%d] = %.9g vs B[%d] = %.9g\n" , i , posa [i ], i , posb [i ]);
66
69
return i + 1 ;
67
70
}
71
+
68
72
return 0 ;
69
73
}
70
74
@@ -841,16 +845,10 @@ static int test_geom_posvel() {
841
845
if (!is_ok ("geom_posvel" , novas_geom_posvel (& source , & frame , NOVAS_ICRS , pos0 , vel0 ))) return 1 ;
842
846
843
847
if (!is_ok ("geom_posvel:pos:null" , novas_geom_posvel (& source , & frame , NOVAS_ICRS , NULL , vel ))) return 1 ;
844
- if (check_equal_pos (vel , vel0 , 1e-5 )) {
845
- printf ("geom_posvel:pos:null\n" );
846
- return 1 ;
847
- }
848
+ if (!is_ok ("geom_posvel:pos:null:check" , check_equal_pos (vel , vel0 , 1e-5 ))) return 1 ;
848
849
849
850
if (!is_ok ("geom_posvel:vel:null" , novas_geom_posvel (& source , & frame , NOVAS_ICRS , pos , NULL ))) return 1 ;
850
- if (check_equal_pos (pos , pos0 , 1e-7 )) {
851
- printf ("geom_posvel:vel:null\n" );
852
- return 1 ;
853
- }
851
+ if (!is_ok ("geom_posvel:vel:null:check" , check_equal_pos (pos , pos0 , 1e-7 ))) return 1 ;
854
852
855
853
return 0 ;
856
854
}
@@ -1546,7 +1544,43 @@ static int test_change_observer() {
1546
1544
return 0 ;
1547
1545
}
1548
1546
1547
+ static int test_transform () {
1548
+ novas_timespec ts = {};
1549
+ novas_frame frame = {};
1550
+ observer obs = {};
1551
+ novas_transform T = {}, I = {};
1552
+
1553
+ double pos0 [3 ] = {1.0 , 2.0 , 3.0 }, pos1 [3 ] = {1.0 , 2.0 , 3.0 };
1554
+ sky_pos p0 = {}, p1 = {};
1549
1555
1556
+ p0 .r_hat [1 ] = 1.0 ;
1557
+ p1 .r_hat [1 ] = 1.0 ;
1558
+ vector2radec (p0 .r_hat , & p0 .ra , & p0 .dec );
1559
+
1560
+ novas_set_time (NOVAS_TT , NOVAS_JD_J2000 + 10000.0 , 32 , 0.0 , & ts );
1561
+ make_observer_at_geocenter (& obs );
1562
+
1563
+ if (!is_ok ("transform:make_frame" , novas_make_frame (NOVAS_REDUCED_ACCURACY , & obs , & ts , 1.0 , 2.0 , & frame ))) return 1 ;
1564
+ if (!is_ok ("transform:make" , novas_make_transform (& frame , NOVAS_ICRS , NOVAS_TOD , & T ))) return 1 ;
1565
+ if (!is_ok ("transform:invert" , novas_invert_transform (& T , & I ))) return 1 ;
1566
+
1567
+ novas_transform_vector (pos0 , & T , pos1 );
1568
+ if (!is_ok ("transform:vec" , !check_equal_pos (pos0 , pos1 , 1e-9 ))) return 1 ;
1569
+
1570
+ novas_transform_vector (pos1 , & I , pos1 );
1571
+ if (!is_ok ("transform:inv:vec" , check_equal_pos (pos0 , pos1 , 1e-9 ))) return 1 ;
1572
+
1573
+ novas_transform_sky_pos (& p0 , & T , & p1 );
1574
+ if (!is_ok ("transform:sky" , !check_equal_pos (p0 .r_hat , p1 .r_hat , 1e-9 ))) return 1 ;
1575
+
1576
+ novas_transform_sky_pos (& p1 , & I , & p1 );
1577
+ if (!is_ok ("transform:inv:sky" , check_equal_pos (p0 .r_hat , p1 .r_hat , 1e-9 ))) return 1 ;
1578
+
1579
+ if (!is_equal ("transform:inv:sky:ra" , p0 .ra , p1 .ra , 1e-9 )) return 1 ;
1580
+ if (!is_equal ("transform:inv:sky:dec" , p0 .dec , p1 .dec , 1e-9 )) return 1 ;
1581
+
1582
+ return 0 ;
1583
+ }
1550
1584
1551
1585
1552
1586
int main () {
@@ -1590,6 +1624,7 @@ int main() {
1590
1624
if (test_radio_refraction ()) n ++ ;
1591
1625
if (test_make_frame ()) n ++ ;
1592
1626
if (test_change_observer ()) n ++ ;
1627
+ if (test_transform ()) n ++ ;
1593
1628
1594
1629
n += test_dates ();
1595
1630
0 commit comments