use_earth_constants/
lib.rs1#![forbid(unsafe_code)]
2#![doc = include_str!("../README.md")]
3
4pub const EARTH_RADIUS_MEAN: f64 = 6_371_000.0;
6
7pub const EARTH_RADIUS_EQUATORIAL: f64 = 6_378_137.0;
9
10pub const EARTH_RADIUS_POLAR: f64 = 6_356_752.314_245;
12
13pub const EARTH_MASS: f64 = 5.972_2e24;
15
16pub const STANDARD_GRAVITY: f64 = 9.806_65;
18
19pub const SEA_LEVEL_STANDARD_PRESSURE: f64 = 101_325.0;
21
22pub const WGS84_A: f64 = 6_378_137.0;
24
25pub const WGS84_B: f64 = 6_356_752.314_245;
27
28pub const WGS84_FLATTENING: f64 = 1.0 / 298.257_223_563;
30
31#[cfg(test)]
32mod tests {
33 use super::{
34 EARTH_MASS, EARTH_RADIUS_EQUATORIAL, EARTH_RADIUS_MEAN, EARTH_RADIUS_POLAR,
35 SEA_LEVEL_STANDARD_PRESSURE, STANDARD_GRAVITY, WGS84_A, WGS84_B, WGS84_FLATTENING,
36 };
37
38 fn runtime(value: f64) -> f64 {
39 value
40 }
41
42 #[test]
43 fn earth_radii_follow_expected_ordering() {
44 assert!(runtime(EARTH_RADIUS_EQUATORIAL) > runtime(EARTH_RADIUS_MEAN));
45 assert!(runtime(EARTH_RADIUS_MEAN) > runtime(EARTH_RADIUS_POLAR));
46 }
47
48 #[test]
49 fn wgs84_axes_match_radius_aliases() {
50 assert_eq!(EARTH_RADIUS_EQUATORIAL, WGS84_A);
51 assert_eq!(EARTH_RADIUS_POLAR, WGS84_B);
52 }
53
54 #[test]
55 fn representative_environment_constants_are_reasonable() {
56 assert!(runtime(WGS84_FLATTENING) > 0.0);
57 assert!(runtime(STANDARD_GRAVITY) > 9.8 && runtime(STANDARD_GRAVITY) < 9.9);
58 assert_eq!(SEA_LEVEL_STANDARD_PRESSURE, 101_325.0);
59 assert!(runtime(EARTH_MASS) > 0.0);
60 }
61}