sofars 0.6.0

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

#[cfg(test)]
mod tests {
    use super::common::{viv, vvd};
    use sofars::eph;

    #[test]
    fn test_epv00() {
        match eph::epv00(2400000.5, 53411.52501161) {
            Some((pvh, pvb)) => {
                vvd(pvh[0][0], -0.7757238809297706813, 1e-14, "epv00", "ph(x)");
                vvd(pvh[0][1], 0.5598052241363340596, 1e-14, "epv00", "ph(y)");
                vvd(pvh[0][2], 0.2426998466481686993, 1e-14, "epv00", "ph(z)");

                vvd(pvh[1][0], -0.01091891824147313846, 1e-15, "epv00", "vh(x)");
                vvd(pvh[1][1], -0.01247187268440845008, 1e-15, "epv00", "vh(y)");
                vvd(pvh[1][2], -0.005407569418065039061, 1e-15, "epv00", "vh(z)");

                vvd(pvb[0][0], -0.7714104440491111971, 1e-14, "epv00", "pb(x)");
                vvd(pvb[0][1], 0.5598412061824171323, 1e-14, "epv00", "pb(y)");
                vvd(pvb[0][2], 0.2425996277722452400, 1e-14, "epv00", "pb(z)");

                vvd(pvb[1][0], -0.01091874268116823295, 1e-15, "epv00", "vb(x)");
                vvd(pvb[1][1], -0.01246525461732861538, 1e-15, "epv00", "vb(y)");
                vvd(pvb[1][2], -0.005404773180966231279, 1e-15, "epv00", "vb(z)");
            }
            None => {
                panic!("Error: {:?}", "epv00() returned None");
            }
        }
    }

    #[test]
    fn test_moon98() {
        let pv = eph::moon98(2400000.5, 43999.9);

        vvd(pv[0][0], -0.2601295959971044180e-2, 1e-11, "moon98", "x 4");
        vvd(pv[0][1], 0.6139750944302742189e-3, 1e-11, "moon98", "y 4");
        vvd(pv[0][2], 0.2640794528229828909e-3, 1e-11, "moon98", "z 4");

        vvd(pv[1][0], -0.1244321506649895021e-3, 1e-11, "moon98", "xd 4");
        vvd(pv[1][1], -0.5219076942678119398e-3, 1e-11, "moon98", "yd 4");
        vvd(pv[1][2], -0.1716132214378462047e-3, 1e-11, "moon98", "zd 4");
    }

    #[test]
    fn test_plan94() {
        let j = eph::plan94(2400000.5, 1e6, 0).unwrap_err();
        viv(j, -1, "plan94", "j 1");

        let j = eph::plan94(2400000.5, 1e6, 10).unwrap_err();
        viv(j, -1, "plan94", "j 2");

        let (pv, j) = eph::plan94(2400000.5, -320000.0, 3).unwrap();
        vvd(pv[0][0], 0.9308038666832975759, 1e-11, "plan94", "x 3");
        vvd(pv[0][1], 0.3258319040261346000, 1e-11, "plan94", "y 3");
        vvd(pv[0][2], 0.1422794544481140560, 1e-11, "plan94", "z 3");
        vvd(pv[1][0], -0.6429458958255170006e-2, 1e-11, "plan94", "xd 3");
        vvd(pv[1][1], 0.1468570657704237764e-1, 1e-11, "plan94", "yd 3");
        vvd(pv[1][2], 0.6406996426270981189e-2, 1e-11, "plan94", "zd 3");
        viv(j, 1, "plan94", "j 3");

        let (pv, j) = eph::plan94(2400000.5, 43999.9, 1).unwrap();
        vvd(pv[0][0], 0.2945293959257430832, 1e-11, "plan94", "x 4");
        vvd(pv[0][1], -0.2452204176601049596, 1e-11, "plan94", "y 4");
        vvd(pv[0][2], -0.1615427700571978153, 1e-11, "plan94", "z 4");
        vvd(pv[1][0], 0.1413867871404614441e-1, 1e-11, "plan94", "xd 4");
        vvd(pv[1][1], 0.1946548301104706582e-1, 1e-11, "plan94", "yd 4");
        vvd(pv[1][2], 0.8929809783898904786e-2, 1e-11, "plan94", "zd 4");
        viv(j, 0, "plan94", "j 4");
    }
}