1#![warn(missing_docs)]
44
45pub mod conversion;
46pub mod dimension;
47pub mod quantity;
48pub mod si;
49
50pub mod amount;
52pub mod current;
53pub mod length;
54pub mod luminosity;
55pub mod mass;
56pub mod temperature;
57pub mod time;
58
59pub mod acceleration;
61pub mod electric;
62pub mod energy;
63pub mod force;
64pub mod frequency;
65pub mod power;
66pub mod pressure;
67pub mod velocity;
68
69pub use dimension::Dimension;
70pub use quantity::Quantity;
71
72pub mod prelude {
74 pub use crate::dimension::Dimension;
75 pub use crate::quantity::Quantity;
76
77 pub use crate::amount::Amount;
78 pub use crate::current::Current;
79 pub use crate::length::Length;
80 pub use crate::luminosity::Luminosity;
81 pub use crate::mass::Mass;
82 pub use crate::temperature::Temperature;
83 pub use crate::time::Time;
84
85 pub use crate::acceleration::Acceleration;
86 pub use crate::electric::{Capacitance, Charge, Resistance, Voltage};
87 pub use crate::energy::Energy;
88 pub use crate::force::Force;
89 pub use crate::frequency::Frequency;
90 pub use crate::power::Power;
91 pub use crate::pressure::Pressure;
92 pub use crate::velocity::Velocity;
93}
94
95#[cfg(test)]
96mod tests {
97 use super::prelude::*;
98
99 #[test]
100 fn test_length_conversion() {
101 let m = Length::meters(1000.0);
102 let km = m.to_kilometers();
103 assert!((km.value() - 1.0).abs() < 1e-10);
104 }
105
106 #[test]
107 fn test_temperature_conversion() {
108 let c = Temperature::celsius(0.0);
109 let k = c.to_kelvin();
110 assert!((k.value() - 273.15).abs() < 1e-10);
111 }
112
113 #[test]
114 fn test_dimensional_analysis() {
115 let l = Quantity::new(5.0, Dimension::length());
116 let t = Quantity::new(2.0, Dimension::time());
117 let v = l / t;
118 assert_eq!(v.dimension().length_power(), 1);
119 assert_eq!(v.dimension().time_power(), -1);
120 }
121}