Skip to content

Commit 1684854

Browse files
author
James O'Cull
committed
Added tests for weight measurement.
1 parent 697d1aa commit 1684854

File tree

4 files changed

+234
-5
lines changed

4 files changed

+234
-5
lines changed

src/lib.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,4 +69,5 @@ pub mod weight;
6969

7070
// Include when running tests, but don't export them
7171
#[cfg(test)]
72+
#[allow(dead_code)]
7273
mod tests;

src/tests/mod.rs

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
11
mod length_tests;
22
mod temperature_tests;
3+
mod weight_tests;
34

4-
const DEFAULT_DELTA: f64 = 0.000001;
5+
const DEFAULT_DELTA: f64 = 1.000000001;
56

6-
// fn almost_eq(a: f64, b: f64) -> bool {
7-
// almost_eq_delta(a, b, DEFAULT_DELTA)
8-
// }
7+
fn almost_eq(a: f64, b: f64) -> bool {
8+
almost_eq_delta(a, b, DEFAULT_DELTA)
9+
}
910

1011
fn almost_eq_delta(a: f64, b: f64, d: f64) -> bool {
1112
(a - b).abs() < d

src/tests/weight_tests.rs

Lines changed: 227 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,227 @@
1+
use weight::*;
2+
use super::{assert_almost_eq};
3+
4+
// Weight Units
5+
// Metric
6+
#[test]
7+
fn kilograms() {
8+
let t = Weight::from_kilograms(100.0);
9+
let o = t.as_kilograms();
10+
assert_almost_eq(o, 100.0);
11+
}
12+
13+
#[test]
14+
fn micrograms() {
15+
let t = Weight::from_kilograms(100.0);
16+
let o = t.as_micrograms();
17+
assert_almost_eq(o, 1e+11);
18+
19+
let t = Weight::from_micrograms(100.0);
20+
let o = t.as_kilograms();
21+
assert_almost_eq(o, 1e-7);
22+
}
23+
24+
#[test]
25+
fn milligrams() {
26+
let t = Weight::from_kilograms(100.0);
27+
let o = t.as_milligrams();
28+
assert_almost_eq(o, 1e+8);
29+
30+
let t = Weight::from_milligrams(100.0);
31+
let o = t.as_kilograms();
32+
assert_almost_eq(o, 0.0001);
33+
}
34+
35+
#[test]
36+
fn carats() {
37+
let t = Weight::from_kilograms(100.0);
38+
let o = t.as_carats();
39+
assert_almost_eq(o, 500000.0);
40+
41+
let t = Weight::from_carats(100.0);
42+
let o = t.as_kilograms();
43+
assert_almost_eq(o, 0.02);
44+
}
45+
46+
#[test]
47+
fn grams() {
48+
let t = Weight::from_kilograms(100.0);
49+
let o = t.as_grams();
50+
assert_almost_eq(o, 100000.0);
51+
52+
let t = Weight::from_grams(100.0);
53+
let o = t.as_kilograms();
54+
assert_almost_eq(o, 0.1);
55+
}
56+
57+
#[test]
58+
fn metric_tons() {
59+
let t = Weight::from_kilograms(100.0);
60+
let o = t.as_metric_tons();
61+
assert_almost_eq(o, 0.1);
62+
63+
let t = Weight::from_metric_tons(100.0);
64+
let o = t.as_kilograms();
65+
assert_almost_eq(o, 100000.0);
66+
}
67+
68+
// Imperial
69+
#[test]
70+
fn grains() {
71+
let t = Weight::from_kilograms(1.0);
72+
let o = t.as_grains();
73+
assert_almost_eq(o, 15432.358);
74+
75+
let t = Weight::from_grains(100.0);
76+
let o = t.as_kilograms();
77+
assert_almost_eq(o, 0.0064798911);
78+
}
79+
80+
#[test]
81+
fn pennyweights() {
82+
let t = Weight::from_kilograms(1.0);
83+
let o = t.as_pennyweights();
84+
assert_almost_eq(o, 643.01493);
85+
86+
let t = Weight::from_pennyweights(100.0);
87+
let o = t.as_kilograms();
88+
assert_almost_eq(o, 0.15551738);
89+
}
90+
91+
#[test]
92+
fn ounces() {
93+
let t = Weight::from_kilograms(1.0);
94+
let o = t.as_ounces();
95+
assert_almost_eq(o, 35.273962);
96+
97+
let t = Weight::from_ounces(100.0);
98+
let o = t.as_kilograms();
99+
assert_almost_eq(o, 2.8349523);
100+
}
101+
102+
#[test]
103+
fn troy_ounces() {
104+
let t = Weight::from_kilograms(1.0);
105+
let o = t.as_troy_ounces();
106+
assert_almost_eq(o, 32.150747);
107+
108+
let t = Weight::from_troy_ounces(100.0);
109+
let o = t.as_kilograms();
110+
assert_almost_eq(o, 3.1103476);
111+
}
112+
113+
#[test]
114+
fn pounds() {
115+
let t = Weight::from_kilograms(1.0);
116+
let o = t.as_pounds();
117+
assert_almost_eq(o, 2.2046228);
118+
119+
let t = Weight::from_pounds(100.0);
120+
let o = t.as_kilograms();
121+
assert_almost_eq(o, 45.359233);
122+
}
123+
124+
#[test]
125+
fn troy_pounds() {
126+
let t = Weight::from_kilograms(1.0);
127+
let o = t.as_troy_pounds();
128+
assert_almost_eq(o, 2.6792289);
129+
130+
let t = Weight::from_troy_pounds(100.0);
131+
let o = t.as_kilograms();
132+
assert_almost_eq(o, 37.324172);
133+
}
134+
135+
#[test]
136+
fn stones() {
137+
let t = Weight::from_kilograms(100.0);
138+
let o = t.as_stones();
139+
assert_almost_eq(o, 15.74730);
140+
141+
let t = Weight::from_stones(100.0);
142+
let o = t.as_kilograms();
143+
assert_almost_eq(o, 635.02934);
144+
}
145+
146+
#[test]
147+
fn short_tons() {
148+
let t = Weight::from_kilograms(100.0);
149+
let o = t.as_short_tons();
150+
assert_almost_eq(o, 0.11023113);
151+
152+
let t = Weight::from_short_tons(1.0);
153+
let o = t.as_kilograms();
154+
assert_almost_eq(o, 907.18475);
155+
}
156+
157+
#[test]
158+
fn long_tons() {
159+
let t = Weight::from_kilograms(100.0);
160+
let o = t.as_long_tons();
161+
assert_almost_eq(o, 0.098420653);
162+
163+
let t = Weight::from_long_tons(1.0);
164+
let o = t.as_kilograms();
165+
assert_almost_eq(o, 1016.0469);
166+
}
167+
168+
// Traits
169+
#[test]
170+
fn add() {
171+
let a = Weight::from_kilograms(2.0);
172+
let b = Weight::from_kilograms(4.0);
173+
let c = a + b;
174+
assert_almost_eq(c.as_kilograms(), 6.0);
175+
}
176+
177+
#[test]
178+
fn sub() {
179+
let a = Weight::from_kilograms(2.0);
180+
let b = Weight::from_kilograms(4.0);
181+
let c = a - b;
182+
assert_almost_eq(c.as_kilograms(), -2.0);
183+
}
184+
185+
#[test]
186+
fn mul() {
187+
let a = Weight::from_kilograms(2.0);
188+
let b = Weight::from_kilograms(4.0);
189+
let c = a * b;
190+
let d = a * 2.0;
191+
assert_almost_eq(c.as_kilograms(), 8.0);
192+
assert_almost_eq(d.as_kilograms(), 4.0);
193+
}
194+
195+
#[test]
196+
fn div() {
197+
let a = Weight::from_kilograms(2.0);
198+
let b = Weight::from_kilograms(4.0);
199+
let c = a / b;
200+
let d = a / 2.0;
201+
assert_almost_eq(c, 0.5);
202+
assert_almost_eq(d.as_kilograms(), 1.0);
203+
}
204+
205+
#[test]
206+
fn eq() {
207+
let a = Weight::from_kilograms(2.0);
208+
let b = Weight::from_kilograms(2.0);
209+
assert_eq!(a == b, true);
210+
}
211+
212+
#[test]
213+
fn neq() {
214+
let a = Weight::from_kilograms(2.0);
215+
let b = Weight::from_kilograms(4.0);
216+
assert_eq!(a == b, false);
217+
}
218+
219+
#[test]
220+
fn cmp() {
221+
let a = Weight::from_kilograms(2.0);
222+
let b = Weight::from_kilograms(4.0);
223+
assert_eq!(a < b, true);
224+
assert_eq!(a <= b, true);
225+
assert_eq!(a > b, false);
226+
assert_eq!(a >= b, false);
227+
}

src/weight.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ impl Weight {
6262
}
6363

6464
pub fn from_short_tons(short_tons: f64) -> Self {
65-
Self::from_short_tons(short_tons * 907.18475)
65+
Self::from_kilograms(short_tons * 907.18475)
6666
}
6767

6868
pub fn from_long_tons(long_tons: f64) -> Self {

0 commit comments

Comments
 (0)