parsec_access 3.1.0

Access the PARSEC database for stellar evolutionary trajectories.
Documentation
use astro_units::mass::solar_mass;
use parsec_access::getters::{
    get_ages_in_years, get_closest_age_index, get_closest_mass_index,
    get_closest_metallicity_index_from_mass_fraction, get_masses_in_solar,
    get_metallicities_in_mass_fractions, is_data_ready,
};
use uom::si::{
    f64::{Mass, Time},
    time::year,
};

#[test]
fn metallicites_are_mapped_to_themselves() {
    assert!(is_data_ready());
    for (expected_index, expected_value) in get_metallicities_in_mass_fractions().iter().enumerate()
    {
        let index = get_closest_metallicity_index_from_mass_fraction(*expected_value);
        assert_eq!(expected_index, index);
    }
}

#[test]
fn masses_are_mapped_to_themselves() {
    assert!(is_data_ready());
    let metallicity_index = 3;
    for (expected_index, expected_value) in
        get_masses_in_solar(metallicity_index).iter().enumerate()
    {
        let mass = Mass::new::<solar_mass>(*expected_value);
        let index = get_closest_mass_index(metallicity_index, mass);
        assert_eq!(expected_index, index);
    }
}

#[test]
fn ages_are_mapped_to_themselves() {
    assert!(is_data_ready());
    let metallicity_index = 3;
    let mass_index = 30;
    for (expected_index, expected_value) in get_ages_in_years(metallicity_index, mass_index)
        .iter()
        .enumerate()
    {
        let age = Time::new::<year>(*expected_value);
        let index = get_closest_age_index(metallicity_index, mass_index, age);
        assert_eq!(expected_index, index);
    }
}