Skip to content

Commit 44f28bf

Browse files
committed
Document all the things.
1 parent 7b52211 commit 44f28bf

17 files changed

+840
-420
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,4 @@ target
22
Cargo.lock
33
*.bk
44
.vscode
5+
*.sublime-workspace

src/acceleration.rs

Lines changed: 93 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
//! Types and contants for handling acceleration.
2+
13
use super::measurement::*;
24
use super::length;
35

@@ -23,26 +25,34 @@ pub struct Acceleration {
2325
}
2426

2527
impl Acceleration {
28+
/// Create a new Acceleration from a floating point value in meters per second per second
2629
pub fn from_meters_per_second_per_second(meters_per_second_per_second: f64) -> Acceleration {
2730
Acceleration { meters_per_second_per_second: meters_per_second_per_second }
2831
}
2932

33+
/// Create a new Acceleration from a floating point value in metres per second per second
3034
pub fn from_metres_per_second_per_second(metres_per_second_per_second: f64) -> Acceleration {
3135
Acceleration::from_meters_per_second_per_second(metres_per_second_per_second)
3236
}
3337

38+
/// Create a new Acceleration from a floating point value in feet per second per second
3439
pub fn from_feet_per_second_per_second(feet_per_second_per_second: f64) -> Acceleration {
35-
Acceleration::from_metres_per_second_per_second(feet_per_second_per_second / length::METER_FEET_FACTOR)
40+
Acceleration::from_metres_per_second_per_second(
41+
feet_per_second_per_second / length::METER_FEET_FACTOR,
42+
)
3643
}
3744

45+
/// Convert this Acceleration to a value in meters per second per second
3846
pub fn as_meters_per_second_per_second(&self) -> f64 {
3947
self.meters_per_second_per_second
4048
}
4149

50+
/// Convert this Acceleration to a value in metres per second per second
4251
pub fn as_metres_per_second_per_second(&self) -> f64 {
4352
self.as_meters_per_second_per_second()
4453
}
4554

55+
/// Convert this Acceleration to a value in feet per second per second
4656
pub fn as_feet_per_second_per_second(&self) -> f64 {
4757
self.meters_per_second_per_second * length::METER_FEET_FACTOR
4858
}
@@ -63,3 +73,85 @@ impl Measurement for Acceleration {
6373
}
6474

6575
implement_measurement! { Acceleration }
76+
77+
#[cfg(test)]
78+
mod test {
79+
80+
use super::*;
81+
use tests::assert_almost_eq;
82+
use std::time::Duration;
83+
use speed::Speed;
84+
85+
// Metric
86+
#[test]
87+
fn speed_over_time() {
88+
let s1 = Speed::from_meters_per_second(10.0);
89+
let t1 = Duration::new(5, 0);
90+
let i1 = s1 / t1;
91+
let r1 = i1.as_meters_per_second_per_second();
92+
assert_almost_eq(r1, 2.0);
93+
}
94+
95+
// Traits
96+
#[test]
97+
fn add() {
98+
let a = Acceleration::from_meters_per_second_per_second(2.0);
99+
let b = Acceleration::from_meters_per_second_per_second(4.0);
100+
let c = a + b;
101+
let d = b + a;
102+
assert_almost_eq(c.as_meters_per_second_per_second(), 6.0);
103+
assert_eq!(c, d);
104+
}
105+
106+
#[test]
107+
fn sub() {
108+
let a = Acceleration::from_meters_per_second_per_second(2.0);
109+
let b = Acceleration::from_meters_per_second_per_second(4.0);
110+
let c = a - b;
111+
assert_almost_eq(c.as_meters_per_second_per_second(), -2.0);
112+
}
113+
114+
#[test]
115+
fn mul() {
116+
let a = Acceleration::from_meters_per_second_per_second(3.0);
117+
let b = a * 2.0;
118+
let c = 2.0 * a;
119+
assert_almost_eq(b.as_meters_per_second_per_second(), 6.0);
120+
assert_eq!(b, c);
121+
}
122+
123+
#[test]
124+
fn div() {
125+
let a = Acceleration::from_meters_per_second_per_second(2.0);
126+
let b = Acceleration::from_meters_per_second_per_second(4.0);
127+
let c = a / b;
128+
let d = a / 2.0;
129+
assert_almost_eq(c, 0.5);
130+
assert_almost_eq(d.as_meters_per_second_per_second(), 1.0);
131+
}
132+
133+
#[test]
134+
fn eq() {
135+
let a = Acceleration::from_meters_per_second_per_second(2.0);
136+
let b = Acceleration::from_meters_per_second_per_second(2.0);
137+
assert_eq!(a == b, true);
138+
}
139+
140+
#[test]
141+
fn neq() {
142+
let a = Acceleration::from_meters_per_second_per_second(2.0);
143+
let b = Acceleration::from_meters_per_second_per_second(4.0);
144+
assert_eq!(a == b, false);
145+
}
146+
147+
#[test]
148+
fn cmp() {
149+
let a = Acceleration::from_meters_per_second_per_second(2.0);
150+
let b = Acceleration::from_meters_per_second_per_second(4.0);
151+
assert_eq!(a < b, true);
152+
assert_eq!(a <= b, true);
153+
assert_eq!(a > b, false);
154+
assert_eq!(a >= b, false);
155+
}
156+
157+
}

src/area.rs

Lines changed: 47 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
1+
//! Types and contants for handling areas.
2+
13
use super::measurement::*;
24
use super::length;
35

6+
/// Number of acres in a square meter
47
const SQUARE_METER_ACRE_FACTOR: f64 = 1.0 / 4046.86;
58

69
/// The `Area` struct can be used to deal with areas in a common way.
@@ -21,205 +24,244 @@ pub struct Area {
2124
}
2225

2326
impl Area {
24-
// Inputs, metric, with both spellings of meter/metre
25-
27+
/// Create new area from floating point value in Square Meters
2628
pub fn from_square_meters(square_meters: f64) -> Self {
2729
Area { square_meters: square_meters }
2830
}
2931

32+
/// Create new area from floating point value in Square Metres
3033
pub fn from_square_metres(square_metres: f64) -> Self {
3134
Self::from_square_meters(square_metres)
3235
}
3336

37+
/// Create new area from floating point value in Square Nanometers
3438
pub fn from_square_nanometers(square_nanometers: f64) -> Self {
3539
Self::from_square_meters(
3640
square_nanometers / (length::METER_NANOMETER_FACTOR * length::METER_NANOMETER_FACTOR),
3741
)
3842
}
3943

44+
/// Create new area from floating point value in Square Nanometres
4045
pub fn from_square_nanometres(square_nanometres: f64) -> Self {
4146
Self::from_square_nanometers(square_nanometres)
4247
}
4348

49+
/// Create new area from floating point value in Square Micrometers
4450
pub fn from_square_micrometers(square_micrometers: f64) -> Self {
4551
Self::from_square_meters(
4652
square_micrometers / (length::METER_MICROMETER_FACTOR * length::METER_MICROMETER_FACTOR),
4753
)
4854
}
4955

56+
/// Create new area from floating point value in Square Micrometres
5057
pub fn from_square_micrometres(square_micrometres: f64) -> Self {
5158
Self::from_square_micrometers(square_micrometres)
5259
}
5360

61+
/// Create new area from floating point value in Square Millimeters
5462
pub fn from_square_millimeters(square_millimeters: f64) -> Self {
5563
Self::from_square_meters(
5664
square_millimeters / (length::METER_MILLIMETER_FACTOR * length::METER_MILLIMETER_FACTOR),
5765
)
5866
}
5967

68+
/// Create new area from floating point value in Square Millimetres
6069
pub fn from_square_millimetres(square_millimetres: f64) -> Self {
6170
Self::from_square_millimeters(square_millimetres)
6271
}
6372

73+
/// Create new area from floating point value in Square Centimeters
6474
pub fn from_square_centimeters(square_centimeters: f64) -> Self {
6575
Self::from_square_meters(
6676
square_centimeters / (length::METER_CENTIMETER_FACTOR * length::METER_CENTIMETER_FACTOR),
6777
)
6878
}
6979

80+
/// Create new area from floating point value in Square Centimetres
7081
pub fn from_square_centimetres(square_centimetres: f64) -> Self {
7182
Self::from_square_centimeters(square_centimetres)
7283
}
7384

85+
/// Create new area from floating point value in Square Decimeters
7486
pub fn from_square_decimeters(square_decimeters: f64) -> Self {
7587
Self::from_square_meters(
7688
square_decimeters / (length::METER_DECIMETER_FACTOR * length::METER_DECIMETER_FACTOR),
7789
)
7890
}
7991

92+
/// Create new area from floating point value in Square Decimetres
8093
pub fn from_square_decimetres(square_decimetres: f64) -> Self {
8194
Self::from_square_decimeters(square_decimetres)
8295
}
8396

97+
/// Create new area from floating point value in Square Hectometers
8498
pub fn from_square_hectometers(square_hectometers: f64) -> Self {
8599
Self::from_square_meters(
86100
square_hectometers / (length::METER_HECTOMETER_FACTOR * length::METER_HECTOMETER_FACTOR),
87101
)
88102
}
89103

104+
/// Create new area from floating point value in Square Hectometres
90105
pub fn from_square_hectometres(square_hectometres: f64) -> Self {
91106
Self::from_square_hectometers(square_hectometres)
92107
}
93108

109+
/// Create new area from floating point value in Hectares
94110
pub fn from_hectares(hectares: f64) -> Self {
95111
Self::from_square_hectometers(hectares)
96112
}
97113

114+
/// Create new area from floating point value in Square Kilometers
98115
pub fn from_square_kilometers(square_kilometers: f64) -> Self {
99116
Self::from_square_meters(
100117
square_kilometers / (length::METER_KILOMETER_FACTOR * length::METER_KILOMETER_FACTOR),
101118
)
102119
}
103120

121+
/// Create new area from floating point value in Square Kilometres
104122
pub fn from_square_kilometres(square_kilometres: f64) -> Self {
105123
Self::from_square_kilometers(square_kilometres)
106124
}
107125

108-
// Inputs, imperial
126+
/// Create new area from floating point value in Square Inches
109127
pub fn from_square_inches(square_inches: f64) -> Self {
110128
Self::from_square_meters(
111129
square_inches / (length::METER_INCH_FACTOR * length::METER_INCH_FACTOR),
112130
)
113131
}
114132

133+
/// Create new area from floating point value in Square Feet
115134
pub fn from_square_feet(square_feet: f64) -> Self {
116135
Self::from_square_meters(
117136
square_feet / (length::METER_FEET_FACTOR * length::METER_FEET_FACTOR),
118137
)
119138
}
120139

140+
/// Create new area from floating point value in Square Yards
121141
pub fn from_square_yards(square_yards: f64) -> Self {
122142
Self::from_square_meters(
123143
square_yards / (length::METER_YARD_FACTOR * length::METER_YARD_FACTOR),
124144
)
125145
}
126146

147+
/// Create new area from floating point value in Acres
127148
pub fn from_acres(acres: f64) -> Self {
128149
Self::from_square_meters(acres / SQUARE_METER_ACRE_FACTOR)
129150
}
130151

152+
/// Create new area from floating point value in Square Miles
131153
pub fn from_square_miles(square_miles: f64) -> Self {
132154
Self::from_square_meters(
133155
square_miles / (length::METER_MILE_FACTOR * length::METER_MILE_FACTOR),
134156
)
135157
}
136158

137-
// Outputs, metric
159+
/// Convert this Area to a floating point value in Square Nanometers
138160
pub fn as_square_nanometers(&self) -> f64 {
139161
self.square_meters * (length::METER_NANOMETER_FACTOR * length::METER_NANOMETER_FACTOR)
140162
}
141163

164+
/// Convert this Area to a floating point value in Square Nanometres
142165
pub fn as_square_nanometres(&self) -> f64 {
143166
self.as_square_nanometers()
144167
}
145168

169+
/// Convert this Area to a floating point value in Square Micrometers
146170
pub fn as_square_micrometers(&self) -> f64 {
147171
self.square_meters * (length::METER_MICROMETER_FACTOR * length::METER_MICROMETER_FACTOR)
148172
}
149173

174+
/// Convert this Area to a floating point value in Square Micrometres
150175
pub fn as_square_micrometres(&self) -> f64 {
151176
self.as_square_micrometers()
152177
}
153178

179+
/// Convert this Area to a floating point value in Square Millimeters
154180
pub fn as_square_millimeters(&self) -> f64 {
155181
self.square_meters * (length::METER_MILLIMETER_FACTOR * length::METER_MILLIMETER_FACTOR)
156182
}
157183

184+
/// Convert this Area to a floating point value in Square Millimetres
158185
pub fn as_square_millimetres(&self) -> f64 {
159186
self.as_square_millimeters()
160187
}
161188

189+
/// Convert this Area to a floating point value in Square Centimeters
162190
pub fn as_square_centimeters(&self) -> f64 {
163191
self.square_meters * (length::METER_CENTIMETER_FACTOR * length::METER_CENTIMETER_FACTOR)
164192
}
165193

194+
/// Convert this Area to a floating point value in Square Centimetres
166195
pub fn as_square_centimetres(&self) -> f64 {
167196
self.as_square_centimeters()
168197
}
169198

199+
/// Convert this Area to a floating point value in Square Meters
170200
pub fn as_square_meters(&self) -> f64 {
171201
self.square_meters
172202
}
173203

204+
/// Convert this Area to a floating point value in Square Metres
174205
pub fn as_square_metres(&self) -> f64 {
175206
self.as_square_meters()
176207
}
177208

209+
/// Convert this Area to a floating point value in Square Decimeters
178210
pub fn as_square_decimeters(&self) -> f64 {
179211
self.square_meters * (length::METER_DECIMETER_FACTOR * length::METER_DECIMETER_FACTOR)
180212
}
181213

214+
/// Convert this Area to a floating point value in Square Decimetres
182215
pub fn as_square_decimetres(&self) -> f64 {
183216
self.as_square_decimeters()
184217
}
185218

219+
/// Convert this Area to a floating point value in Square Hectometers
186220
pub fn as_square_hectometers(&self) -> f64 {
187221
self.square_meters * (length::METER_HECTOMETER_FACTOR * length::METER_HECTOMETER_FACTOR)
188222
}
189223

224+
/// Convert this Area to a floating point value in Square Hectometres
190225
pub fn as_square_hectometres(&self) -> f64 {
191226
self.as_square_hectometers()
192227
}
193228

229+
/// Convert this Area to a floating point value in Hectares
194230
pub fn as_hectares(&self) -> f64 {
195231
self.as_square_hectometers()
196232
}
197233

234+
/// Convert this Area to a floating point value in Square Kilometers
198235
pub fn as_square_kilometers(&self) -> f64 {
199236
self.square_meters * (length::METER_KILOMETER_FACTOR * length::METER_KILOMETER_FACTOR)
200237
}
201238

239+
/// Convert this Area to a floating point value in Square Kilometres
202240
pub fn as_square_kilometres(&self) -> f64 {
203241
self.as_square_kilometers()
204242
}
205243

206-
// Outputs, imperial
244+
/// Convert this Area to a floating point value in Square Inches
207245
pub fn as_square_inches(&self) -> f64 {
208246
self.square_meters * (length::METER_INCH_FACTOR * length::METER_INCH_FACTOR)
209247
}
210248

249+
/// Convert this Area to a floating point value in Square Feet
211250
pub fn as_square_feet(&self) -> f64 {
212251
self.square_meters * (length::METER_FEET_FACTOR * length::METER_FEET_FACTOR)
213252
}
214253

254+
/// Convert this Area to a floating point value in Square Yards
215255
pub fn as_square_yards(&self) -> f64 {
216256
self.square_meters * (length::METER_YARD_FACTOR * length::METER_YARD_FACTOR)
217257
}
218258

259+
/// Convert this Area to a floating point value in Acres
219260
pub fn as_acres(&self) -> f64 {
220261
self.square_meters * SQUARE_METER_ACRE_FACTOR
221262
}
222263

264+
/// Convert this Area to a floating point value in Square Miles
223265
pub fn as_square_miles(&self) -> f64 {
224266
self.square_meters * (length::METER_MILE_FACTOR * length::METER_MILE_FACTOR)
225267
}

0 commit comments

Comments
 (0)