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 {
106106 }
107107 }
108108
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-
119109 // Multiplying a `$t` by a factor increases (or decreases) that
120110 // measurement a number of times.
121111 impl :: std:: ops:: Mul <f64 > for $t {
@@ -126,6 +116,15 @@ macro_rules! implement_measurement {
126116 }
127117 }
128118
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+
129128 impl :: std:: cmp:: Eq for $t { }
130129 impl :: std:: cmp:: PartialEq for $t {
131130 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 {
138138 }
139139}
140140
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+
141149impl :: std:: ops:: Sub < TemperatureDelta > for Temperature {
142150 type Output = Temperature ;
143151
@@ -167,18 +175,5 @@ impl ::std::cmp::PartialOrd for Temperature {
167175 }
168176}
169177
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-
183178implement_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() {
153153 let a = Length :: from_meters ( 2.0 ) ;
154154 let b = Length :: from_meters ( 4.0 ) ;
155155 let c = a + b;
156+ let d = b + a;
156157 assert_almost_eq ( c. as_meters ( ) , 6.0 ) ;
158+ assert_eq ! ( c, d) ;
157159}
158160
159161#[ test]
@@ -166,22 +168,21 @@ fn sub() {
166168
167169#[ test]
168170fn 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) ;
175176}
176177
177178#[ test]
178179fn div ( ) {
179180 let a = Length :: from_meters ( 2.0 ) ;
180181 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) ;
185186}
186187
187188#[ test]
Original file line number Diff line number Diff line change @@ -40,7 +40,19 @@ fn add() {
4040 let a = Temperature :: from_kelvin ( 2.0 ) ;
4141 let b = TemperatureDelta :: from_kelvin ( 4.0 ) ;
4242 let c = a + b;
43+ let d = b + a;
4344 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) ;
4456}
4557
4658#[ test]
@@ -59,6 +71,23 @@ fn sub2() {
5971 assert_almost_eq ( c. as_kelvin ( ) , 25.0 ) ;
6072}
6173
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+
6291#[ test]
6392fn eq ( ) {
6493 let a = Temperature :: from_kelvin ( 2.0 ) ;
Original file line number Diff line number Diff line change @@ -215,7 +215,9 @@ fn add() {
215215 let a = Volume :: from_litres ( 2.0 ) ;
216216 let b = Volume :: from_litres ( 4.0 ) ;
217217 let c = a + b;
218+ let d = b + a;
218219 assert_almost_eq ( c. as_litres ( ) , 6.0 ) ;
220+ assert_eq ! ( c, d) ;
219221}
220222
221223#[ test]
@@ -228,12 +230,11 @@ fn sub() {
228230
229231#[ test]
230232fn 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) ;
237238}
238239
239240#[ test]
Original file line number Diff line number Diff line change @@ -171,7 +171,9 @@ fn add() {
171171 let a = Weight :: from_kilograms ( 2.0 ) ;
172172 let b = Weight :: from_kilograms ( 4.0 ) ;
173173 let c = a + b;
174+ let d = b + a;
174175 assert_almost_eq ( c. as_kilograms ( ) , 6.0 ) ;
176+ assert_eq ! ( c, d) ;
175177}
176178
177179#[ test]
@@ -184,12 +186,11 @@ fn sub() {
184186
185187#[ test]
186188fn 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) ;
193194}
194195
195196#[ test]
You can’t perform that action at this time.
0 commit comments