diff options
Diffstat (limited to 'src/lib.rs')
-rw-r--r-- | src/lib.rs | 99 |
1 files changed, 99 insertions, 0 deletions
diff --git a/src/lib.rs b/src/lib.rs new file mode 100644 index 0000000..b3a8853 --- /dev/null +++ b/src/lib.rs @@ -0,0 +1,99 @@ +mod macros; +pub mod metric; + +#[cfg(test)] +mod tests { + use crate::metric::*; + use crate::metric::Mass; + use crate::metric::Time; + use crate::metric::Force; + use crate::metric::Length; + use crate::metric::Pressure; + use crate::metric::CelsiusTemperature; + + /* + use crate::metric::Unit; + use crate::metric::Primitive; + */ + + fn avg_force(ds: Length, dt: Time, m: Mass) -> Force { + let dv = ds / dt; + let a = dv / dt; + m * a + } + + fn main() { + let dist = Mile(100.0); + let time = Minute(12.5); + let mass = Pound(800.0); + let force = avg_force(dist, time, mass); + let area = Litre(100.0) / Foot(5.0); + + let result = match Bar(0.0).to_si_unit() { + Pressure::Base(_, from_si, symbol) => format!("{}[{}]", from_si((force / area).to_si_primitive()), symbol), + _ => panic!("not base") + }; + + println!( + "Force on body with mass {m} that moves {d} in {t}: {f}\n\ + The pressure per {a} is {p}", + d = dist, t = time, m = mass, f = force, a = area, p = result + ); + } + + #[test] + fn it_works() { + println!(); + main(); + + println!(); + let single = Kilogram(1.0); + let mut double = single; + double *= 2.0; + let mut dived = double; + dived /= 2.0; + + println!("single: {}", single); + println!("double: {}", double); + println!("single * 2.0: {}", single * 2.0); + println!("2.0 * single: {}", 2.0 * single); + println!("double / 2.0: {}", double / 2.0); + println!("dived: {}", dived); + + println!("single + double: {}", single + double); + + println!(); + let gram = Gram(1000.0); + println!("gram: {}", gram); + println!("gram * 2.0: {}", gram * 2.0); + + println!(); + println!("gram + double = {}", gram + double); + println!("double + gram = {}", double + gram); + println!("gram - double = {}", gram - double); + println!("double - gram = {}", double - gram); + + println!(); + let k = Kelvin(20.0); + let c = Celsius(0.0) + k; + println!("{}", c); + + println!(); + let cel = Celsius(20.0); + let fah = match Fahrenheit(0.0).to_si_unit() { + CelsiusTemperature::Base(_, from_si, symbol) => CelsiusTemperature::Base(cel.to_si_primitive(), from_si, symbol), + _ => panic!("non si after to_si() call") + }; + println!("{} = {}", cel, fah); + + println!(); + let d = Degree(180.0); + let rad = Radian(0.0); + println!("{}", (rad + d).to_si_primitive() - std::f64::consts::PI); + + println!(); + let e = Kilocalorie(70.0); + let j = KiloJoule(0.0) + e; + println!("{} = {}", e, j); + } +}
\ No newline at end of file |