use crate::{Quantity, Unit};
use qtty_derive::Unit;
pub use crate::dimension::Dimensionless;
pub trait DimensionlessUnit: Unit<Dim = Dimensionless> {}
impl<T: Unit<Dim = Dimensionless>> DimensionlessUnit for T {}
#[derive(Clone, Copy, Debug, PartialEq, PartialOrd, Unit)]
#[unit(symbol = "", dimension = Dimensionless, ratio = 1.0)]
pub struct OpticalDepth;
pub type OpticalDepths = Quantity<OpticalDepth>;
#[derive(Clone, Copy, Debug, PartialEq, PartialOrd, Unit)]
#[unit(symbol = "", dimension = Dimensionless, ratio = 1.0)]
pub struct Airmass;
pub type Airmasses = Quantity<Airmass>;
#[derive(Clone, Copy, Debug, PartialEq, PartialOrd, Unit)]
#[unit(symbol = "", dimension = Dimensionless, ratio = 1.0)]
pub struct Transmittance;
pub type Transmittances = Quantity<Transmittance>;
#[derive(Clone, Copy, Debug, PartialEq, PartialOrd, Unit)]
#[unit(symbol = "", dimension = Dimensionless, ratio = 1.0)]
pub struct Albedo;
pub type Albedos = Quantity<Albedo>;
#[derive(Clone, Copy, Debug, PartialEq, PartialOrd, Unit)]
#[unit(symbol = "", dimension = Dimensionless, ratio = 1.0)]
pub struct IlluminationFraction;
pub type IlluminationFractions = Quantity<IlluminationFraction>;
#[derive(Clone, Copy, Debug, PartialEq, PartialOrd, Unit)]
#[unit(symbol = "", dimension = Dimensionless, ratio = 1.0)]
pub struct Refractivity;
pub type Refractivities = Quantity<Refractivity>;
#[derive(Clone, Copy, Debug, PartialEq, PartialOrd, Unit)]
#[unit(symbol = "", dimension = Dimensionless, ratio = 1.0)]
pub struct Ratio;
pub type Ratios = Quantity<Ratio>;
#[macro_export]
#[doc(hidden)]
macro_rules! dimensionless_units {
($cb:path) => {
$cb!(
OpticalDepth,
Airmass,
Transmittance,
Albedo,
IlluminationFraction,
Refractivity,
Ratio
);
};
}
#[cfg(all(test, feature = "std"))]
mod tests {
use super::*;
#[test]
fn named_dimensionless_values_round_trip() {
assert_eq!(OpticalDepths::new(0.5).value(), 0.5);
assert_eq!(Airmasses::new(1.2).value(), 1.2);
assert_eq!(Transmittances::new(0.8).value(), 0.8);
assert_eq!(Albedos::new(0.3).value(), 0.3);
assert_eq!(IlluminationFractions::new(0.75).value(), 0.75);
assert_eq!(Refractivities::new(2.7e-4).value(), 2.7e-4);
}
}