qtty_core/units/
dimensionless.rs1use crate::{Quantity, Unit};
12use qtty_derive::Unit;
13
14pub use crate::dimension::Dimensionless;
16
17pub trait DimensionlessUnit: Unit<Dim = Dimensionless> {}
19impl<T: Unit<Dim = Dimensionless>> DimensionlessUnit for T {}
20
21#[derive(Clone, Copy, Debug, PartialEq, PartialOrd, Unit)]
23#[unit(symbol = "", dimension = Dimensionless, ratio = 1.0)]
24pub struct OpticalDepth;
25
26pub type OpticalDepths = Quantity<OpticalDepth>;
28
29#[derive(Clone, Copy, Debug, PartialEq, PartialOrd, Unit)]
31#[unit(symbol = "", dimension = Dimensionless, ratio = 1.0)]
32pub struct Airmass;
33
34pub type Airmasses = Quantity<Airmass>;
36
37#[derive(Clone, Copy, Debug, PartialEq, PartialOrd, Unit)]
39#[unit(symbol = "", dimension = Dimensionless, ratio = 1.0)]
40pub struct Transmittance;
41
42pub type Transmittances = Quantity<Transmittance>;
44
45#[derive(Clone, Copy, Debug, PartialEq, PartialOrd, Unit)]
47#[unit(symbol = "", dimension = Dimensionless, ratio = 1.0)]
48pub struct Albedo;
49
50pub type Albedos = Quantity<Albedo>;
52
53#[derive(Clone, Copy, Debug, PartialEq, PartialOrd, Unit)]
55#[unit(symbol = "", dimension = Dimensionless, ratio = 1.0)]
56pub struct IlluminationFraction;
57
58pub type IlluminationFractions = Quantity<IlluminationFraction>;
60
61#[derive(Clone, Copy, Debug, PartialEq, PartialOrd, Unit)]
63#[unit(symbol = "", dimension = Dimensionless, ratio = 1.0)]
64pub struct Refractivity;
65
66pub type Refractivities = Quantity<Refractivity>;
68
69#[derive(Clone, Copy, Debug, PartialEq, PartialOrd, Unit)]
73#[unit(symbol = "", dimension = Dimensionless, ratio = 1.0)]
74pub struct Ratio;
75
76pub type Ratios = Quantity<Ratio>;
78
79#[macro_export]
81#[doc(hidden)]
82macro_rules! dimensionless_units {
83 ($cb:path) => {
84 $cb!(
85 OpticalDepth,
86 Airmass,
87 Transmittance,
88 Albedo,
89 IlluminationFraction,
90 Refractivity,
91 Ratio
92 );
93 };
94}
95
96#[cfg(all(test, feature = "std"))]
97mod tests {
98 use super::*;
99
100 #[test]
101 fn named_dimensionless_values_round_trip() {
102 assert_eq!(OpticalDepths::new(0.5).value(), 0.5);
103 assert_eq!(Airmasses::new(1.2).value(), 1.2);
104 assert_eq!(Transmittances::new(0.8).value(), 0.8);
105 assert_eq!(Albedos::new(0.3).value(), 0.3);
106 assert_eq!(IlluminationFractions::new(0.75).value(), 0.75);
107 assert_eq!(Refractivities::new(2.7e-4).value(), 2.7e-4);
108 }
109}