Skip to content

Commit 2928c7a

Browse files
committed
Implement Ohm's law
1 parent 853e7ec commit 2928c7a

File tree

2 files changed

+27
-0
lines changed

2 files changed

+27
-0
lines changed

src/lib.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -160,6 +160,7 @@ impl_maths!(Power, Force, Speed);
160160
impl_maths!(Speed, time::Duration, Acceleration);
161161
impl_maths!(Volume, Length, Area);
162162
impl_maths!(Power, AngularVelocity, Torque);
163+
impl_maths!(Voltage, Resistance, Current);
163164

164165
// Force * Distance is ambiguous. Create an ambiguous struct the user can then
165166
// cast into either Torque or Energy.

src/voltage.rs

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,8 @@ implement_measurement! { Voltage }
9090
#[cfg(test)]
9191
mod test {
9292
use voltage::*;
93+
use resistance::*;
94+
use current::*;
9395
use test_utils::assert_almost_eq;
9496

9597
#[test]
@@ -168,4 +170,28 @@ mod test {
168170
assert_eq!(a >= b, false);
169171
}
170172

173+
#[test]
174+
fn mul_resistance_current() {
175+
let r = Resistance::from_ohms(470.0);
176+
let i = Current::from_amperes(2.0);
177+
let u = r * i;
178+
assert_eq!(u.as_volts(), 940.0);
179+
}
180+
181+
#[test]
182+
fn div_resistance() {
183+
let r = Resistance::from_ohms(470.0);
184+
let u = Voltage::from_kilovolts(4.7);
185+
let i = u / r;
186+
assert_eq!(i.as_amperes(), 10.0);
187+
}
188+
189+
#[test]
190+
fn div_current() {
191+
let i = Current::from_amperes(10.0);
192+
let u = Voltage::from_kilovolts(4.7);
193+
let r = u / i;
194+
assert_eq!(r.as_ohms(), 470.0);
195+
}
196+
171197
}

0 commit comments

Comments
 (0)