Skip to main content

use_astronomy/
lib.rs

1#![forbid(unsafe_code)]
2#![doc = include_str!("../README.md")]
3
4pub use use_astronomical_coordinate as astronomical_coordinate;
5pub use use_astronomical_observation as astronomical_observation;
6pub use use_astronomical_orbit as orbit;
7pub use use_catalog_object as catalog_object;
8pub use use_celestial_body as celestial_body;
9pub use use_constellation as constellation;
10pub use use_epoch as epoch;
11pub use use_magnitude as magnitude;
12pub use use_moon as moon;
13pub use use_orbital_element as orbital_element;
14pub use use_planet as planet;
15pub use use_star as star;
16
17#[cfg(test)]
18mod tests {
19    use super::{
20        astronomical_coordinate, astronomical_observation, catalog_object, celestial_body,
21        constellation, epoch, magnitude, moon, orbit, orbital_element, planet, star,
22    };
23
24    #[test]
25    fn facade_composes_astronomy_primitives_without_simulation() {
26        let body_kind = celestial_body::CelestialBodyKind::Star;
27        let spectral_class = star::SpectralClass::G;
28        let planet_kind = planet::PlanetKind::Terrestrial;
29        let moon_kind = moon::MoonKind::Regular;
30        let orbit_kind = orbit::OrbitKind::Heliocentric;
31        let eccentricity = orbital_element::OrbitalElement::new(
32            orbital_element::OrbitalElementKind::Eccentricity,
33            orbital_element::OrbitalElementValue::new(0.0167).unwrap(),
34        )
35        .unwrap();
36        let coordinate = astronomical_coordinate::AstronomicalCoordinate::new(
37            astronomical_coordinate::RightAscension::from_degrees(279.234_734_79).unwrap(),
38            astronomical_coordinate::Declination::new(38.783_688_96).unwrap(),
39            astronomical_coordinate::CoordinateFrame::Equatorial,
40            astronomical_coordinate::CoordinateSystem::ICRS,
41        );
42        let visual_magnitude = magnitude::Magnitude::new(-26.74).unwrap();
43        let astronomical_epoch = epoch::AstronomicalEpoch::j2000();
44        let constellation_abbreviation =
45            constellation::ConstellationAbbreviation::new("Lyr").unwrap();
46        let observation_band = astronomical_observation::ObservationBand::Visible;
47        let designation = catalog_object::CatalogDesignation::new("Messier 31").unwrap();
48
49        assert_eq!(body_kind.to_string(), "star");
50        assert_eq!(spectral_class.to_string(), "g");
51        assert_eq!(planet_kind.to_string(), "terrestrial");
52        assert_eq!(moon_kind.to_string(), "regular");
53        assert_eq!(orbit_kind.to_string(), "heliocentric");
54        assert_eq!(
55            eccentricity.kind(),
56            &orbital_element::OrbitalElementKind::Eccentricity
57        );
58        assert_eq!(
59            coordinate.frame(),
60            &astronomical_coordinate::CoordinateFrame::Equatorial
61        );
62        assert!((visual_magnitude.value() - -26.74).abs() < f64::EPSILON);
63        assert_eq!(astronomical_epoch.label(), "J2000");
64        assert_eq!(constellation_abbreviation.as_str(), "Lyr");
65        assert_eq!(observation_band.to_string(), "visible");
66        assert_eq!(designation.as_str(), "Messier 31");
67    }
68}