sofars 0.6.0

Pure Rust implementation of the IAU SOFA library
Documentation
mod common;

#[cfg(test)]
mod tests {
    use super::common::vvd;
    use sofars::star;

    #[test]
    fn test_fk425() {
        let r1950 = 0.07626899753879587532;
        let d1950 = -1.137405378399605780;
        let dr1950 = 0.1973749217849087460e-4;
        let dd1950 = 0.5659714913272723189e-5;
        let p1950 = 0.134;
        let v1950 = 8.7;

        let (r2000, d2000, dr2000, dd2000, p2000, v2000) =
            star::fk425(r1950, d1950, dr1950, dd1950, p1950, v1950);

        vvd(r2000, 0.08757989933556446040, 1e-14, "fk425", "r2000");
        vvd(d2000, -1.132279113042091895, 1e-12, "fk425", "d2000");
        vvd(dr2000, 0.1953670614474396139e-4, 1e-17, "fk425", "dr2000");
        vvd(dd2000, 0.5637686678659640164e-5, 1e-18, "fk425", "dd2000");
        vvd(p2000, 0.1339919950582767871, 1e-13, "fk425", "p2000");
        vvd(v2000, 8.736999669183529069, 1e-12, "fk425", "v2000");
    }

    #[test]
    fn test_fk45z() {
        let r1950 = 0.01602284975382960982;
        let d1950 = -0.1164347929099906024;
        let bepoch = 1954.677617625256806;

        let (r2000, d2000) = star::fk45z(r1950, d1950, bepoch);

        vvd(r2000, 0.02719295911606862303, 1e-15, "fk45z", "r2000");
        vvd(d2000, -0.1115766001565926892, 1e-13, "fk45z", "d2000");
    }

    #[test]
    fn test_fk524() {
        let r2000 = 0.8723503576487275595;
        let d2000 = -0.7517076365138887672;
        let dr2000 = 0.2019447755430472323e-4;
        let dd2000 = 0.3541563940505160433e-5;
        let p2000 = 0.1559;
        let v2000 = 86.87;

        let (r1950, d1950, dr1950, dd1950, p1950, v1950) =
            star::fk524(r2000, d2000, dr2000, dd2000, p2000, v2000);

        vvd(r1950, 0.8636359659799603487, 1e-13, "fk524", "r1950");
        vvd(d1950, -0.7550281733160843059, 1e-13, "fk524", "d1950");
        vvd(dr1950, 0.2023628192747172486e-4, 1e-17, "fk524", "dr1950");
        vvd(dd1950, 0.3624459754935334718e-5, 1e-18, "fk524", "dd1950");
        vvd(p1950, 0.1560079963299390241, 1e-13, "fk524", "p1950");
        vvd(v1950, 86.79606353469163751, 1e-11, "fk524", "v1950");
    }

    #[test]
    fn test_fk52h() {
        let r5 = 1.76779433;
        let d5 = -0.2917517103;
        let dr5 = -1.91851572e-7;
        let dd5 = -5.8468475e-6;
        let px5 = 0.379210;
        let rv5 = -7.6;

        let (rh, dh, drh, ddh, pxh, rvh) = star::fk52h(r5, d5, dr5, dd5, px5, rv5);

        vvd(rh, 1.767794226299947632, 1e-14, "fk52h", "ra");
        vvd(dh, -0.2917516070530391757, 1e-14, "fk52h", "dec");
        vvd(drh, -0.1961874125605721270e-6, 1e-19, "fk52h", "drh");
        vvd(ddh, -0.58459905176693911e-5, 1e-19, "fk52h", "ddh");
        vvd(pxh, 0.37921, 1e-14, "fk52h", "px");
        vvd(rvh, -7.6000000940000254, 1e-11, "fk52h", "rv");
    }

    #[test]
    fn test_fk54z() {
        let r2000 = 0.02719026625066316119;
        let d2000 = -0.1115815170738754813;
        let bepoch = 1954.677308160316374;

        let (r1950, d1950, dr1950, dd1950) = star::fk54z(r2000, d2000, bepoch);

        vvd(r1950, 0.01602015588390065476, 1e-14, "fk54z", "r1950");
        vvd(d1950, -0.1164397101110765346, 1e-13, "fk54z", "d1950");
        vvd(dr1950, -0.1175712648471090704e-7, 1e-20, "fk54z", "dr1950");
        vvd(dd1950, 0.2108109051316431056e-7, 1e-20, "fk54z", "dd1950");
    }

    #[test]
    fn test_fk5hip() {
        let (r5h, s5h) = star::fk5hip();

        vvd(r5h[0][0], 0.9999999999999928638, 1e-14, "fk5hip", "11");
        vvd(r5h[0][1], 0.1110223351022919694e-6, 1e-17, "fk5hip", "12");
        vvd(r5h[0][2], 0.4411803962536558154e-7, 1e-17, "fk5hip", "13");
        vvd(r5h[1][0], -0.1110223308458746430e-6, 1e-17, "fk5hip", "21");
        vvd(r5h[1][1], 0.9999999999999891830, 1e-14, "fk5hip", "22");
        vvd(r5h[1][2], -0.9647792498984142358e-7, 1e-17, "fk5hip", "23");
        vvd(r5h[2][0], -0.4411805033656962252e-7, 1e-17, "fk5hip", "31");
        vvd(r5h[2][1], 0.9647792009175314354e-7, 1e-17, "fk5hip", "32");
        vvd(r5h[2][2], 0.9999999999999943728, 1e-14, "fk5hip", "33");
        vvd(s5h[0], -0.1454441043328607981e-8, 1e-17, "fk5hip", "s1");
        vvd(s5h[1], 0.2908882086657215962e-8, 1e-17, "fk5hip", "s2");
        vvd(s5h[2], 0.3393695767766751955e-8, 1e-17, "fk5hip", "s3");
    }

    #[test]
    fn test_fk5hz() {
        let r5 = 1.76779433;
        let d5 = -0.2917517103;

        let (rh, dh) = star::fk5hz(r5, d5, 2400000.5, 54479.0);

        vvd(rh, 1.767794191464423978, 1e-12, "fk5hz", "ra");
        vvd(dh, -0.2917516001679884419, 1e-12, "fk5hz", "dec");
    }

    #[test]
    fn test_h2fk5() {
        let rh = 1.767794352;
        let dh = -0.2917512594;
        let drh = -2.76413026e-6;
        let ddh = -5.92994449e-6;
        let pxh = 0.379210;
        let rvh = -7.6;

        let (r5, d5, dr5, dd5, px5, rv5) = star::h2fk5(rh, dh, drh, ddh, pxh, rvh);

        vvd(r5, 1.767794455700065506, 1e-13, "h2fk5", "ra");
        vvd(d5, -0.2917513626469638890, 1e-13, "h2fk5", "dec");
        vvd(dr5, -0.27597945024511204e-5, 1e-18, "h2fk5", "drh");
        vvd(dd5, -0.59308014093262838e-5, 1e-18, "h2fk5", "ddh");
        vvd(px5, 0.37921, 1e-13, "h2fk5", "px");
        vvd(rv5, -7.6000001309071126, 1e-11, "h2fk5", "rv");
    }

    #[test]
    fn test_hfk5z() {
        let rh = 1.767794352;
        let dh = -0.2917512594;

        let (r5, d5, dr5, dd5) = star::hfk5z(rh, dh, 2400000.5, 54479.0);

        vvd(r5, 1.767794490535581026, 1e-13, "hfk5z", "ra");
        vvd(d5, -0.2917513695320114258, 1e-14, "hfk5z", "dec");
        vvd(dr5, 0.4335890983539243029e-8, 1e-22, "hfk5z", "dr5");
        vvd(dd5, -0.8569648841237745902e-9, 1e-23, "hfk5z", "dd5");
    }
}