@@ -50,8 +50,8 @@ public void GivenTwoTimeSpanValues_WhenCompareToOperationExecuted_VerifyAccurate
5050 [ TestMethod ]
5151 public void GivenTwoTimeSpanValues_WhenDivideOperationExecuted_VerifyAccurateResult ( )
5252 {
53- var firstTimeSpan = new TimeSpan ( 2 , 60 , 3600 ) ;
54- var secondTimeSpan = new TimeSpan ( 1 , 30 , 1800 ) ;
53+ var firstTimeSpan = new TimeSpan ( 4 , 0 , 0 ) ;
54+ var secondTimeSpan = new TimeSpan ( 2 , 0 , 0 ) ;
5555
5656 var expected = firstTimeSpan . Divide ( secondTimeSpan ) ;
5757 var actual = firstTimeSpan / secondTimeSpan ;
@@ -64,8 +64,8 @@ public void GivenTwoTimeSpanValues_WhenDivideOperationExecuted_VerifyAccurateRes
6464 [ TestMethod ]
6565 public void GivenATimeSpan_WhenDividedByDivisor_VerifyAccurateResult ( )
6666 {
67- var firstTimeSpan = new TimeSpan ( 2 , 60 , 3600 ) ;
68- var secondTimeSpan = new TimeSpan ( 1 , 30 , 1800 ) ;
67+ var firstTimeSpan = new TimeSpan ( 4 , 0 , 0 ) ;
68+ var secondTimeSpan = new TimeSpan ( 2 , 0 , 0 ) ;
6969
7070 var divisionByMethod = firstTimeSpan . Divide ( 2 ) ;
7171 var divisionByOperator = firstTimeSpan / 2 ;
@@ -95,8 +95,8 @@ public void GivenTwoTimeSpanValues_WhenEqualityOperationApplied_VerifyAccurateRe
9595 [ TestMethod ]
9696 public void GivenATimeSpanAndFactor_WhenMultiplied_VerifyAccurateResult ( )
9797 {
98- var expected = new TimeSpan ( 2 , 60 , 3600 ) ;
99- var firstTimeSpan = new TimeSpan ( 1 , 30 , 1800 ) ;
98+ var expected = new TimeSpan ( 4 , 0 , 0 ) ;
99+ var firstTimeSpan = new TimeSpan ( 2 , 0 , 0 ) ;
100100 var factor = 2 ;
101101
102102 var multiplyMethod = firstTimeSpan . Multiply ( factor ) ;
@@ -112,9 +112,9 @@ public void GivenATimeSpanAndFactor_WhenMultiplied_VerifyAccurateResult()
112112 [ TestMethod ]
113113 public void GivenTwoTimeSpans_WhenSubtractOperationApplied_VerifyAccurateResult ( )
114114 {
115- var firstTimeSpan = new TimeSpan ( 2 , 60 , 3600 ) ;
116- var secondTimeSpan = new TimeSpan ( 1 , 30 , 1800 ) ;
117- var expected = new TimeSpan ( 1 , 30 , 1800 ) ;
115+ var firstTimeSpan = new TimeSpan ( 4 , 0 , 0 ) ;
116+ var secondTimeSpan = new TimeSpan ( 2 , 0 , 0 ) ;
117+ var expected = new TimeSpan ( 2 , 0 , 0 ) ;
118118
119119 var subtractMethod = firstTimeSpan . Subtract ( secondTimeSpan ) ;
120120 var subtractOperator = firstTimeSpan - secondTimeSpan ;
@@ -141,12 +141,12 @@ public void GivenATimeSpan_WhenConvertedToString_VerifyAccurateResult()
141141 [ TestMethod ]
142142 public void GivenATimeSpan_WhenConvertedToDuration_VerifyAccurateResult ( )
143143 {
144- var firstTimeSpan = new TimeSpan ( 2 , 60 , 3600 ) ;
144+ var firstTimeSpan = new TimeSpan ( 4 , 0 , 0 ) ;
145145
146146 var actual = firstTimeSpan . Duration ( ) ;
147- var expected = new TimeSpan ( 04 , 00 , 00 ) ;
147+ var expected = new TimeSpan ( 4 , 0 , 0 ) ;
148148
149- Assert . AreEqual ( actual , expected ) ;
149+ Assert . AreEqual ( expected , actual ) ;
150150 Assert . IsInstanceOfType ( actual , typeof ( TimeSpan ) ) ;
151151 }
152152
@@ -159,7 +159,7 @@ public void GivenATimeSpan_WhenNegated_VerifyAccurateResult()
159159 var negateMethod = firstTimeSpan . Negate ( ) ;
160160 var negateOperator = - ( firstTimeSpan ) ;
161161
162- Assert . AreEqual ( negateMethod , expected ) ;
162+ Assert . AreEqual ( expected , negateMethod ) ;
163163 Assert . AreEqual ( negateMethod , negateOperator ) ;
164164 Assert . IsInstanceOfType ( negateMethod , typeof ( TimeSpan ) ) ;
165165 }
@@ -189,5 +189,51 @@ public void GivenNumberOfHours_WhenFromHoursInvoked_VerifyAccurateResult()
189189 Assert . AreEqual ( expected , actual ) ;
190190 Assert . AreEqual ( hours , totalHours ) ;
191191 }
192+
193+ [ TestMethod ]
194+ public void GivenATimeSpan_WhenFormattedWithSpecifiers_VerifyAccurateResult ( )
195+ {
196+ var interval = new TimeSpan ( 1 , 2 , 3 , 4 , 5 ) ;
197+
198+ Assert . AreEqual ( "1.02:03:04.0050000" , interval . ToString ( "c" , CultureInfo . InvariantCulture ) ) ;
199+ Assert . AreEqual ( "1:2:03:04.005" , interval . ToString ( "g" , CultureInfo . InvariantCulture ) ) ;
200+ Assert . AreEqual ( "02:03" , interval . ToString ( @"hh\:mm" , CultureInfo . InvariantCulture ) ) ;
201+ Assert . ThrowsExactly < FormatException > ( ( ) => interval . ToString ( "hh:mm" , CultureInfo . InvariantCulture ) ) ;
202+ }
203+
204+ [ TestMethod ]
205+ public void GivenStrings_WhenTryParseInvoked_VerifyAccurateResult ( )
206+ {
207+ Assert . IsFalse ( TimeSpan . TryParse ( "24:00" , out var failed ) ) ;
208+ Assert . AreEqual ( TimeSpan . Zero , failed ) ;
209+
210+ Assert . IsTrue ( TimeSpan . TryParse ( "23:00" , out var parsed ) ) ;
211+ Assert . AreEqual ( new TimeSpan ( 23 , 0 , 0 ) , parsed ) ;
212+
213+ Assert . IsTrue ( TimeSpan . TryParse ( "6" , out var days ) ) ;
214+ Assert . AreEqual ( TimeSpan . FromDays ( 6 ) , days ) ;
215+ }
216+
217+ [ TestMethod ]
218+ public void GivenTheNamedValues_WhenInspected_VerifyRangeBehavior ( )
219+ {
220+ Assert . AreEqual ( "10675199.02:48:05.4775807" , TimeSpan . MaxValue . ToString ( ) ) ;
221+ Assert . AreEqual ( long . MaxValue , TimeSpan . MaxValue . Ticks ) ;
222+ Assert . AreEqual ( long . MinValue , TimeSpan . MinValue . Ticks ) ;
223+
224+ Assert . ThrowsExactly < OverflowException > ( ( ) => TimeSpan . MinValue . Negate ( ) ) ;
225+ Assert . AreEqual ( TimeSpan . FromMilliseconds ( - 1 ) , Timeout . InfiniteTimeSpan ) ;
226+ }
227+
228+ [ TestMethod ]
229+ public void GivenSecondsAndMilliseconds_WhenIntegerOverloadUsed_VerifyNoPrecisionLoss ( )
230+ {
231+ var fromDouble = TimeSpan . FromSeconds ( 101.832 ) ;
232+ var fromIntegers = TimeSpan . FromSeconds ( seconds : 101 , milliseconds : 832 ) ;
233+
234+ Assert . AreEqual ( 1018319999L , fromDouble . Ticks ) ;
235+ Assert . AreEqual ( 1018320000L , fromIntegers . Ticks ) ;
236+ Assert . AreNotEqual ( fromDouble , fromIntegers ) ;
237+ }
192238 }
193- }
239+ }
0 commit comments