From 41b767d8b58b1d72a10f8054fa5abfed14918e8d Mon Sep 17 00:00:00 2001 From: Zachary Sunforge Date: Wed, 15 Jan 2025 15:49:41 -0800 Subject: [PATCH] Added PSI unit --- Cargo.toml | 2 +- src/quantity/pressure.rs | 31 +++++++++++++++++++++++++++++-- 2 files changed, 30 insertions(+), 3 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index efa8a50..510bfdd 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -16,7 +16,7 @@ members = [ ] [workspace.package] -version = "0.4.4" +version = "0.4.5" edition = "2021" repository = "https://git.bfpower.io/BFPOWER/physical" readme = "README.md" diff --git a/src/quantity/pressure.rs b/src/quantity/pressure.rs index fdda364..e641aac 100644 --- a/src/quantity/pressure.rs +++ b/src/quantity/pressure.rs @@ -2,6 +2,7 @@ use crate::quantity::{KILO, Quantity, Value}; use generate_quantity::quantity_type; const PASCALS_PER_TORR: f64 = 101325.0 / 760.0; +const KILO_PASCALS_PER_PSI: f64 = 6.894757293168364; //----- Pascals ---------------------------------- quantity_type! {Pascals, "Pa"} @@ -30,6 +31,12 @@ impl KiloPascals { let multiplier = V::from_u16(KILO).unwrap(); Pascals(self.0 * multiplier) } + + #[inline] + pub fn to_psi(self) -> Psi { + let divisor = V::from_f64(KILO_PASCALS_PER_PSI).unwrap(); + Psi(self.0 / divisor) + } } //----- Torr ---------------------------------- @@ -44,6 +51,17 @@ impl Torr { } } +//----- PSI ---------------------------------- +quantity_type! {Psi, "PSI"} + +impl Psi { + #[inline] + pub fn to_kilo_pascals(self) -> KiloPascals { + let multiplier = V::from_f64(KILO_PASCALS_PER_PSI).unwrap(); + KiloPascals(self.0 * multiplier) + } +} + // --------------------------------------------------------------------------------------------------------------------- // ----- Tests ------------------------ // --------------------------------------------------------------------------------------------------------------------- @@ -53,7 +71,7 @@ mod tests { use float_cmp::assert_approx_eq; #[test] - fn convert_u32() { + fn pascals_kilo_pascals() { let pascals: Pascals = 1_000.pascals(); let kilo_pascals: KiloPascals = 1.kilo_pascals(); @@ -62,11 +80,20 @@ mod tests { } #[test] - fn torr_pascal() { + fn torr_pascals() { let torr: Torr = 7.5.torr(); let pascals: Pascals = 999.9177631578947.pascals(); assert_approx_eq!(f32, pascals.to_torr().0, torr.0); assert_approx_eq!(f32, torr.to_pascals().0, pascals.0); } + + #[test] + fn psi_kilo_pascals() { + let psi: Psi = 2.5.psi(); + let kilo_pascals: KiloPascals = 17.23689323292091.kilo_pascals(); + + assert_approx_eq!(f32, psi.to_kilo_pascals().0, kilo_pascals.0); + assert_approx_eq!(f32, kilo_pascals.to_psi().0, psi.0); + } }