File tree Expand file tree Collapse file tree 6 files changed +72
-46
lines changed Expand file tree Collapse file tree 6 files changed +72
-46
lines changed Original file line number Diff line number Diff line change @@ -106,16 +106,6 @@ macro_rules! implement_measurement {
106
106
}
107
107
}
108
108
109
- // Multiplying a `$t` by another `$t` returns the product of those
110
- // measurements.
111
- impl :: std:: ops:: Mul <$t> for $t {
112
- type Output = Self ;
113
-
114
- fn mul( self , rhs: Self ) -> Self {
115
- Self :: from_base_units( self . get_base_units( ) * rhs. get_base_units( ) )
116
- }
117
- }
118
-
119
109
// Multiplying a `$t` by a factor increases (or decreases) that
120
110
// measurement a number of times.
121
111
impl :: std:: ops:: Mul <f64 > for $t {
@@ -126,6 +116,15 @@ macro_rules! implement_measurement {
126
116
}
127
117
}
128
118
119
+ // Multiplying by a factor is commutative
120
+ impl :: std:: ops:: Mul <$t> for f64 {
121
+ type Output = $t;
122
+
123
+ fn mul( self , rhs: $t) -> $t {
124
+ rhs * self
125
+ }
126
+ }
127
+
129
128
impl :: std:: cmp:: Eq for $t { }
130
129
impl :: std:: cmp:: PartialEq for $t {
131
130
fn eq( & self , other: & Self ) -> bool {
Original file line number Diff line number Diff line change @@ -138,6 +138,14 @@ impl ::std::ops::Add<TemperatureDelta> for Temperature {
138
138
}
139
139
}
140
140
141
+ impl :: std:: ops:: Add < Temperature > for TemperatureDelta {
142
+ type Output = Temperature ;
143
+
144
+ fn add ( self , other : Temperature ) -> Temperature {
145
+ other + self
146
+ }
147
+ }
148
+
141
149
impl :: std:: ops:: Sub < TemperatureDelta > for Temperature {
142
150
type Output = Temperature ;
143
151
@@ -167,18 +175,5 @@ impl ::std::cmp::PartialOrd for Temperature {
167
175
}
168
176
}
169
177
170
- impl :: std:: cmp:: Eq for TemperatureDelta { }
171
- impl :: std:: cmp:: PartialEq for TemperatureDelta {
172
- fn eq ( & self , other : & Self ) -> bool {
173
- self . kelvin_degrees == other. kelvin_degrees
174
- }
175
- }
176
-
177
- impl :: std:: cmp:: PartialOrd for TemperatureDelta {
178
- fn partial_cmp ( & self , other : & Self ) -> Option < :: std:: cmp:: Ordering > {
179
- self . kelvin_degrees . partial_cmp ( & other. kelvin_degrees )
180
- }
181
- }
182
-
183
178
implement_display ! ( Temperature ) ;
184
- implement_display ! ( TemperatureDelta ) ;
179
+ implement_measurement ! ( TemperatureDelta ) ;
Original file line number Diff line number Diff line change @@ -153,7 +153,9 @@ fn add() {
153
153
let a = Length :: from_meters ( 2.0 ) ;
154
154
let b = Length :: from_meters ( 4.0 ) ;
155
155
let c = a + b;
156
+ let d = b + a;
156
157
assert_almost_eq ( c. as_meters ( ) , 6.0 ) ;
158
+ assert_eq ! ( c, d) ;
157
159
}
158
160
159
161
#[ test]
@@ -166,22 +168,21 @@ fn sub() {
166
168
167
169
#[ test]
168
170
fn mul ( ) {
169
- let a = Length :: from_meters ( 2.0 ) ;
170
- let b = Length :: from_meters ( 4.0 ) ;
171
- let c = a * b;
172
- let d = b * 2.0 ;
173
- assert_almost_eq ( c. as_meters ( ) , 8.0 ) ;
174
- assert_almost_eq ( d. as_meters ( ) , 8.0 ) ;
171
+ let a = Length :: from_meters ( 3.0 ) ;
172
+ let b = a * 2.0 ;
173
+ let c = 2.0 * a;
174
+ assert_almost_eq ( b. as_meters ( ) , 6.0 ) ;
175
+ assert_eq ! ( b, c) ;
175
176
}
176
177
177
178
#[ test]
178
179
fn div ( ) {
179
180
let a = Length :: from_meters ( 2.0 ) ;
180
181
let b = Length :: from_meters ( 4.0 ) ;
181
- let c = a * b;
182
- let d = a * 2.0 ;
183
- assert_almost_eq ( c. as_meters ( ) , 8.0 ) ;
184
- assert_almost_eq ( d. as_meters ( ) , 4 .0) ;
182
+ let c = a / b;
183
+ let d = a / 2.0 ;
184
+ assert_almost_eq ( c, 0.5 ) ;
185
+ assert_almost_eq ( d. as_meters ( ) , 1 .0) ;
185
186
}
186
187
187
188
#[ test]
Original file line number Diff line number Diff line change @@ -40,7 +40,19 @@ fn add() {
40
40
let a = Temperature :: from_kelvin ( 2.0 ) ;
41
41
let b = TemperatureDelta :: from_kelvin ( 4.0 ) ;
42
42
let c = a + b;
43
+ let d = b + a;
43
44
assert_almost_eq ( c. as_kelvin ( ) , 6.0 ) ;
45
+ assert_eq ! ( c, d) ;
46
+ }
47
+
48
+ #[ test]
49
+ fn add2 ( ) {
50
+ let a = TemperatureDelta :: from_kelvin ( 2.0 ) ;
51
+ let b = TemperatureDelta :: from_kelvin ( 4.0 ) ;
52
+ let c = a + b;
53
+ let d = b + a;
54
+ assert_almost_eq ( c. as_kelvin ( ) , 6.0 ) ;
55
+ assert_eq ! ( c, d) ;
44
56
}
45
57
46
58
#[ test]
@@ -59,6 +71,23 @@ fn sub2() {
59
71
assert_almost_eq ( c. as_kelvin ( ) , 25.0 ) ;
60
72
}
61
73
74
+ #[ test]
75
+ fn sub3 ( ) {
76
+ let a = TemperatureDelta :: from_fahrenheit ( 180.0 ) ;
77
+ let b = TemperatureDelta :: from_celsius ( 75.0 ) ;
78
+ let c = a - b;
79
+ assert_almost_eq ( c. as_kelvin ( ) , 25.0 ) ;
80
+ }
81
+
82
+ #[ test]
83
+ fn mul ( ) {
84
+ let a = TemperatureDelta :: from_celsius ( 5.0 ) ;
85
+ let b = a * 2.0 ;
86
+ let c = 2.0 * a;
87
+ assert_almost_eq ( b. as_celsius ( ) , 10.0 ) ;
88
+ assert_eq ! ( b, c) ;
89
+ }
90
+
62
91
#[ test]
63
92
fn eq ( ) {
64
93
let a = Temperature :: from_kelvin ( 2.0 ) ;
Original file line number Diff line number Diff line change @@ -215,7 +215,9 @@ fn add() {
215
215
let a = Volume :: from_litres ( 2.0 ) ;
216
216
let b = Volume :: from_litres ( 4.0 ) ;
217
217
let c = a + b;
218
+ let d = b + a;
218
219
assert_almost_eq ( c. as_litres ( ) , 6.0 ) ;
220
+ assert_eq ! ( c, d) ;
219
221
}
220
222
221
223
#[ test]
@@ -228,12 +230,11 @@ fn sub() {
228
230
229
231
#[ test]
230
232
fn mul ( ) {
231
- let a = Volume :: from_litres ( 2.0 ) ;
232
- let b = Volume :: from_litres ( 4.0 ) ;
233
- let c = a * b;
234
- let d = a * 2.0 ;
235
- assert_almost_eq ( c. as_litres ( ) , 8.0 ) ;
236
- assert_almost_eq ( d. as_litres ( ) , 4.0 ) ;
233
+ let a = Volume :: from_litres ( 3.0 ) ;
234
+ let b = a * 2.0 ;
235
+ let c = 2.0 * a;
236
+ assert_almost_eq ( b. as_litres ( ) , 6.0 ) ;
237
+ assert_eq ! ( b, c) ;
237
238
}
238
239
239
240
#[ test]
Original file line number Diff line number Diff line change @@ -171,7 +171,9 @@ fn add() {
171
171
let a = Weight :: from_kilograms ( 2.0 ) ;
172
172
let b = Weight :: from_kilograms ( 4.0 ) ;
173
173
let c = a + b;
174
+ let d = b + a;
174
175
assert_almost_eq ( c. as_kilograms ( ) , 6.0 ) ;
176
+ assert_eq ! ( c, d) ;
175
177
}
176
178
177
179
#[ test]
@@ -184,12 +186,11 @@ fn sub() {
184
186
185
187
#[ test]
186
188
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 ) ;
189
+ let a = Weight :: from_kilograms ( 3.0 ) ;
190
+ let b = a * 2.0 ;
191
+ let c = 2.0 * a;
192
+ assert_almost_eq ( b. as_kilograms ( ) , 6.0 ) ;
193
+ assert_eq ! ( b, c) ;
193
194
}
194
195
195
196
#[ test]
You can’t perform that action at this time.
0 commit comments