Skip to content

Commit f611645

Browse files
committed
Added Force tests.
1 parent 178677b commit f611645

File tree

4 files changed

+177
-29
lines changed

4 files changed

+177
-29
lines changed

src/force.rs

Lines changed: 148 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -135,3 +135,151 @@ impl Measurement for Force {
135135
}
136136

137137
implement_measurement! { Force }
138+
139+
#[cfg(test)]
140+
mod test {
141+
use force::*;
142+
use test_utils::assert_almost_eq;
143+
144+
#[test]
145+
pub fn newtons() {
146+
let i1 = Force::from_newtons(100.0);
147+
let r1 = i1.as_newtons();
148+
149+
assert_almost_eq(r1, 100.0);
150+
}
151+
152+
#[test]
153+
pub fn micronewtons() {
154+
let i1 = Force::from_newtons(100.0);
155+
let r1 = i1.as_micronewtons();
156+
157+
let i2 = Force::from_micronewtons(100.0);
158+
let r2 = i2.as_newtons();
159+
160+
assert_almost_eq(r1, 1e8);
161+
assert_almost_eq(r2, 1e-4);
162+
}
163+
164+
#[test]
165+
pub fn millinewtons() {
166+
let i1 = Force::from_newtons(100.0);
167+
let r1 = i1.as_millinewtons();
168+
169+
let i2 = Force::from_millinewtons(100.0);
170+
let r2 = i2.as_newtons();
171+
172+
assert_almost_eq(r1, 1e5);
173+
assert_almost_eq(r2, 1e-1);
174+
}
175+
176+
#[test]
177+
pub fn pounds() {
178+
let i1 = Force::from_newtons(100.0);
179+
let r1 = i1.as_pounds();
180+
181+
let i2 = Force::from_pounds(100.0);
182+
let r2 = i2.as_newtons();
183+
184+
assert_almost_eq(r1, 22.480886300718);
185+
assert_almost_eq(r2, 444.822);
186+
}
187+
188+
#[test]
189+
pub fn poundals() {
190+
let i1 = Force::from_newtons(100.0);
191+
let r1 = i1.as_poundals();
192+
193+
let i2 = Force::from_poundals(100.0);
194+
let r2 = i2.as_newtons();
195+
196+
assert_almost_eq(r1, 723.3016238104);
197+
assert_almost_eq(r2, 13.8255);
198+
}
199+
200+
#[test]
201+
pub fn kiloponds() {
202+
let i1 = Force::from_newtons(100.0);
203+
let r1 = i1.as_kiloponds();
204+
205+
let i2 = Force::from_kiloponds(100.0);
206+
let r2 = i2.as_newtons();
207+
208+
assert_almost_eq(r1, 10.1972);
209+
assert_almost_eq(r2, 980.665);
210+
}
211+
212+
#[test]
213+
pub fn dynes() {
214+
let i1 = Force::from_newtons(100.0);
215+
let r1 = i1.as_dynes();
216+
217+
let i2 = Force::from_dynes(100.0);
218+
let r2 = i2.as_newtons();
219+
220+
assert_almost_eq(r1, 1e7);
221+
assert_almost_eq(r2, 0.001);
222+
}
223+
224+
#[test]
225+
fn add() {
226+
let a = Force::from_newtons(2.0);
227+
let b = Force::from_newtons(4.0);
228+
let c = a + b;
229+
let d = b + a;
230+
assert_almost_eq(c.as_newtons(), 6.0);
231+
assert_eq!(c, d);
232+
}
233+
234+
#[test]
235+
fn sub() {
236+
let a = Force::from_newtons(2.0);
237+
let b = Force::from_newtons(4.0);
238+
let c = a - b;
239+
assert_almost_eq(c.as_newtons(), -2.0);
240+
}
241+
242+
#[test]
243+
fn mul() {
244+
let a = Force::from_newtons(3.0);
245+
let b = a * 2.0;
246+
let c = 2.0 * a;
247+
assert_almost_eq(b.as_newtons(), 6.0);
248+
assert_eq!(b, c);
249+
}
250+
251+
#[test]
252+
fn div() {
253+
let a = Force::from_newtons(2.0);
254+
let b = Force::from_newtons(4.0);
255+
let c = a / b;
256+
let d = a / 2.0;
257+
assert_almost_eq(c, 0.5);
258+
assert_almost_eq(d.as_newtons(), 1.0);
259+
}
260+
261+
#[test]
262+
fn eq() {
263+
let a = Force::from_newtons(2.0);
264+
let b = Force::from_newtons(2.0);
265+
assert_eq!(a == b, true);
266+
}
267+
268+
#[test]
269+
fn neq() {
270+
let a = Force::from_newtons(2.0);
271+
let b = Force::from_newtons(4.0);
272+
assert_eq!(a == b, false);
273+
}
274+
275+
#[test]
276+
fn cmp() {
277+
let a = Force::from_newtons(2.0);
278+
let b = Force::from_newtons(4.0);
279+
assert_eq!(a < b, true);
280+
assert_eq!(a <= b, true);
281+
assert_eq!(a > b, false);
282+
assert_eq!(a >= b, false);
283+
}
284+
285+
}

src/prelude.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
//! Traits that it is useful to have in scope.
2-
//! You should wildcard import this file.
3-
4-
pub use super::Measurement;
1+
//! Traits that it is useful to have in scope.
2+
//! You should wildcard import this file.
3+
4+
pub use super::Measurement;

src/test_utils.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
//! Utility code for test_utils
22
3-
const DEFAULT_DELTA: f64 = 0.00001;
3+
const DEFAULT_DELTA: f64 = 1e-4;
44

55
/// Check two floating point values are approximately equal
66
pub fn almost_eq(a: f64, b: f64) -> bool {

tests/pressure.rs

Lines changed: 24 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,24 @@
1-
extern crate measurements;
2-
use measurements::prelude::*;
3-
4-
#[test]
5-
fn psi() -> () {
6-
let p1 = measurements::Pressure::from_psi(200.0);
7-
let f = measurements::Force::from_pounds(200.0);
8-
let d = measurements::Length::from_inches(1.0);
9-
let a = d * d;
10-
let p2 = f / a;
11-
measurements::test_utils::assert_almost_eq(p1.as_base_units(), p2.as_base_units());
12-
}
13-
14-
#[test]
15-
fn metric() -> () {
16-
let p1 = measurements::Pressure::from_pascals(980.665);
17-
let m = measurements::Mass::from_kilograms(1.0);
18-
let g = measurements::Acceleration::from_meters_per_second_per_second(9.80665);
19-
let f = m * g;
20-
let d = measurements::Length::from_centimeters(10.0);
21-
let a = d * d;
22-
let p2 = f / a;
23-
measurements::test_utils::assert_almost_eq(p1.as_base_units(), p2.as_base_units());
24-
}
1+
extern crate measurements;
2+
use measurements::prelude::*;
3+
4+
#[test]
5+
fn psi() -> () {
6+
let p1 = measurements::Pressure::from_psi(200.0);
7+
let f = measurements::Force::from_pounds(200.0);
8+
let d = measurements::Length::from_inches(1.0);
9+
let a = d * d;
10+
let p2 = f / a;
11+
measurements::test_utils::assert_almost_eq(p1.as_base_units(), p2.as_base_units());
12+
}
13+
14+
#[test]
15+
fn metric() -> () {
16+
let p1 = measurements::Pressure::from_pascals(980.665);
17+
let m = measurements::Mass::from_kilograms(1.0);
18+
let g = measurements::Acceleration::from_meters_per_second_per_second(9.80665);
19+
let f = m * g;
20+
let d = measurements::Length::from_centimeters(10.0);
21+
let a = d * d;
22+
let p2 = f / a;
23+
measurements::test_utils::assert_almost_eq(p1.as_base_units(), p2.as_base_units());
24+
}

0 commit comments

Comments
 (0)