2 // TimeSpanTest.cs - NUnit Test Cases for the System.TimeSpan struct
5 // Duco Fijma (duco@lorentz.xs4all.nl)
6 // Sebastien Pouliot <sebastien@ximian.com>
9 // Copyright (C) 2004 Novell (http://www.novell.com)
12 using NUnit.Framework;
15 namespace MonoTests.System
19 public class TimeSpanTest : Assertion {
21 private void Debug (TimeSpan ts)
23 Console.Out.WriteLine ("Days {0}", ts.Days);
24 Console.Out.WriteLine ("Hours {0}", ts.Hours);
25 Console.Out.WriteLine ("Minutes {0}", ts.Minutes);
26 Console.Out.WriteLine ("Seconds {0}", ts.Seconds);
27 Console.Out.WriteLine ("Milliseconds {0}", ts.Milliseconds);
28 Console.Out.WriteLine ("Ticks {0}", ts.Ticks);
31 public void TestCtors ()
33 TimeSpan t1 = new TimeSpan (1234567890);
35 AssertEquals ("A1", "00:02:03.4567890", t1.ToString ());
36 t1 = new TimeSpan (1,2,3);
37 AssertEquals ("A2", "01:02:03", t1.ToString ());
38 t1 = new TimeSpan (1,2,3,4);
39 AssertEquals ("A3", "1.02:03:04", t1.ToString ());
40 t1 = new TimeSpan (1,2,3,4,5);
41 AssertEquals ("A4", "1.02:03:04.0050000", t1.ToString ());
42 t1 = new TimeSpan (-1,2,-3,4,-5);
43 AssertEquals ("A5", "-22:02:56.0050000", t1.ToString ());
44 t1 = new TimeSpan (0,25,0,0,0);
45 AssertEquals ("A6", "1.01:00:00", t1.ToString ());
49 [ExpectedException (typeof (ArgumentOutOfRangeException))]
50 public void DaysOverflow ()
52 int days = (int) (Int64.MaxValue / TimeSpan.TicksPerDay) + 1;
53 TimeSpan ts = new TimeSpan (days, 0, 0, 0, 0);
58 [ExpectedException (typeof (ArgumentOutOfRangeException))]
59 [Category ("NotWorking")]
61 public void TemporaryOverflow ()
63 // calculating part of this results in overflow (days)
64 // but the negative hours, minutes, seconds & ms correct this
65 int days = (int) (Int64.MaxValue / TimeSpan.TicksPerDay) + 1;
66 TimeSpan ts = new TimeSpan (days, Int32.MinValue, Int32.MinValue, Int32.MinValue, Int32.MinValue);
67 AssertEquals ("Days", 10650320, ts.Days);
68 AssertEquals ("Hours", 0, ts.Hours);
69 AssertEquals ("Minutes", 14, ts.Minutes);
70 AssertEquals ("Seconds", 28, ts.Seconds);
71 AssertEquals ("Milliseconds", 352, ts.Milliseconds);
72 AssertEquals ("Ticks", 9201876488683520000, ts.Ticks);
77 [ExpectedException (typeof (ArgumentOutOfRangeException))]
78 [Category ("NotWorking")]
80 public void NoOverflowInHoursMinsSecondsMS ()
82 TimeSpan ts = new TimeSpan (0, Int32.MaxValue, Int32.MaxValue, Int32.MaxValue, Int32.MaxValue);
83 AssertEquals ("Days", 24879, ts.Days);
84 AssertEquals ("Hours", 22, ts.Hours);
85 AssertEquals ("Minutes", 44, ts.Minutes);
86 AssertEquals ("Seconds", 30, ts.Seconds);
87 AssertEquals ("Milliseconds", 647, ts.Milliseconds);
88 AssertEquals ("Ticks", 21496274706470000, ts.Ticks);
92 [ExpectedException (typeof (ArgumentOutOfRangeException))]
93 public void MaxDays ()
95 new TimeSpan (Int32.MaxValue, 0, 0, 0, 0);
99 [ExpectedException (typeof (ArgumentOutOfRangeException))]
100 public void MinDays ()
102 new TimeSpan (Int32.MinValue, 0, 0, 0, 0);
106 [Ignore ("too long")]
107 public void MaxHours_TooLong ()
109 // LAMESPEC: the highest hours are "special"
110 for (int i=0; i < 596523; i++) {
111 TimeSpan ts = new TimeSpan (0, Int32.MaxValue - i, 0, 0, 0);
113 string prefix = i.ToString () + '-';
114 AssertEquals (prefix + "Days", -(h / 24), ts.Days);
115 AssertEquals (prefix + "Hours", -(h % 24), ts.Hours);
116 AssertEquals (prefix + "Minutes", 0, ts.Minutes);
117 AssertEquals (prefix + "Seconds", 0, ts.Seconds);
118 AssertEquals (prefix + "Milliseconds", 0, ts.Milliseconds);
119 AssertEquals (prefix + "Ticks", -36000000000 * h, ts.Ticks);
125 [ExpectedException (typeof (ArgumentOutOfRangeException))]
126 [Category ("NotWorking")]
128 public void MaxHours ()
130 // LAMESPEC: the highest hours are "special"
131 TimeSpan ts = new TimeSpan (0, Int32.MaxValue, 0, 0, 0);
132 AssertEquals ("Max-Days", 0, ts.Days);
133 AssertEquals ("Max-Hours", -1, ts.Hours);
134 AssertEquals ("Max-Minutes", 0, ts.Minutes);
135 AssertEquals ("Max-Seconds", 0, ts.Seconds);
136 AssertEquals ("Max-Milliseconds", 0, ts.Milliseconds);
137 AssertEquals ("Max-Ticks", -36000000000, ts.Ticks);
139 ts = new TimeSpan (0, Int32.MaxValue - 596522, 0, 0, 0);
140 AssertEquals ("Days", -24855, ts.Days);
141 AssertEquals ("Hours", -3, ts.Hours);
142 AssertEquals ("Minutes", 0, ts.Minutes);
143 AssertEquals ("Seconds", 0, ts.Seconds);
144 AssertEquals ("Milliseconds", 0, ts.Milliseconds);
145 AssertEquals ("Ticks", -21474828000000000, ts.Ticks);
150 [ExpectedException (typeof (ArgumentOutOfRangeException))]
151 [Category ("NotWorking")]
153 public void MaxHours_BreakPoint ()
155 TimeSpan ts = new TimeSpan (0, Int32.MaxValue - 596523, 0, 0, 0);
156 AssertEquals ("Days", 24855, ts.Days);
157 AssertEquals ("Hours", 2, ts.Hours);
158 AssertEquals ("Minutes", 28, ts.Minutes);
159 AssertEquals ("Seconds", 16, ts.Seconds);
160 AssertEquals ("Milliseconds", 0, ts.Milliseconds);
161 AssertEquals ("Ticks", 21474808960000000, ts.Ticks);
165 [Ignore ("too long")]
166 public void MinHours_TooLong ()
168 // LAMESPEC: the lowest hours are "special"
169 for (int i=Int32.MinValue; i < -2146887124; i++) {
170 TimeSpan ts = new TimeSpan (0, i, 0, 0, 0);
171 int h = i + Int32.MaxValue + 1;
172 string prefix = i.ToString () + '-';
173 AssertEquals (prefix + "Days", (h / 24), ts.Days);
174 AssertEquals (prefix + "Hours", (h % 24), ts.Hours);
175 AssertEquals (prefix + "Minutes", 0, ts.Minutes);
176 AssertEquals (prefix + "Seconds", 0, ts.Seconds);
177 AssertEquals (prefix + "Milliseconds", 0, ts.Milliseconds);
178 AssertEquals (prefix + "Ticks", 36000000000 * h, ts.Ticks);
184 [Category ("NotWorking")]
186 public void MinHours ()
189 TimeSpan ts = new TimeSpan (0, -256204778, 0, 0, 0);
190 AssertEquals ("Days", -10675199, ts.Days);
191 AssertEquals ("Hours", -2, ts.Hours);
192 AssertEquals ("Minutes", 0, ts.Minutes);
193 AssertEquals ("Seconds", 0, ts.Seconds);
194 AssertEquals ("Milliseconds", 0, ts.Milliseconds);
195 AssertEquals ("Ticks", -9223372008000000000, ts.Ticks);
197 // LAMESPEC: the lowest hours are "special"
198 TimeSpan ts = new TimeSpan (0, Int32.MinValue, 0, 0, 0);
199 AssertEquals ("Min-Days", 0, ts.Days);
200 AssertEquals ("Min-Hours", 0, ts.Hours);
201 AssertEquals ("Min-Minutes", 0, ts.Minutes);
202 AssertEquals ("Min-Seconds", 0, ts.Seconds);
203 AssertEquals ("Min-Milliseconds", 0, ts.Milliseconds);
204 AssertEquals ("Min-Ticks", 0, ts.Ticks);
206 ts = new TimeSpan (0, -2146887125, 0, 0, 0);
207 AssertEquals ("Days", 24855, ts.Days);
208 AssertEquals ("Hours", 3, ts.Hours);
209 AssertEquals ("Minutes", 0, ts.Minutes);
210 AssertEquals ("Seconds", 0, ts.Seconds);
211 AssertEquals ("Milliseconds", 0, ts.Milliseconds);
212 AssertEquals ("Ticks", 21474828000000000, ts.Ticks);
218 [ExpectedException (typeof (ArgumentOutOfRangeException))]
219 [Category ("NotWorking")]
221 public void MinHours_BreakPoint ()
223 TimeSpan ts = new TimeSpan (0, -2146887124, 0, 0, 0);
224 AssertEquals ("Days", -24855, ts.Days);
225 AssertEquals ("Hours", -2, ts.Hours);
226 AssertEquals ("Minutes", -28, ts.Minutes);
227 AssertEquals ("Seconds", -16, ts.Seconds);
228 AssertEquals ("Milliseconds", 0, ts.Milliseconds);
229 AssertEquals ("Ticks", -21474808960000000, ts.Ticks);
233 [Ignore ("too long")]
234 public void MaxMinutes_TooLong ()
236 // LAMESPEC: the highest minutes are "special"
237 for (int i=0; i < 35791394; i++) {
238 TimeSpan ts = new TimeSpan (0, 0, Int32.MaxValue - i, 0, 0);
240 string prefix = i.ToString () + '-';
241 AssertEquals (prefix + "Days", (h / 1440), ts.Days);
242 AssertEquals (prefix + "Hours", ((h / 60) % 24), ts.Hours);
243 AssertEquals (prefix + "Minutes", (h % 60), ts.Minutes);
244 AssertEquals (prefix + "Seconds", 0, ts.Seconds);
245 AssertEquals (prefix + "Milliseconds", 0, ts.Milliseconds);
246 AssertEquals (prefix + "Ticks", (600000000L * h), ts.Ticks);
252 [Category ("NotWorking")]
254 public void MaxMinutes ()
258 ts = new TimeSpan (0, 0, 256204778, 0, 0);
259 AssertEquals ("Max-Days", 177919, ts.Days);
260 AssertEquals ("Max-Hours", 23, ts.Hours);
261 AssertEquals ("Max-Minutes", 38, ts.Minutes);
262 AssertEquals ("Max-Seconds", 0, ts.Seconds);
263 AssertEquals ("Max-Milliseconds", 0, ts.Milliseconds);
264 AssertEquals ("Max-Ticks", 153722866800000000, ts.Ticks);
266 // LAMESPEC: the highest minutes are "special"
267 ts = new TimeSpan (0, 0, Int32.MaxValue, 0, 0);
268 AssertEquals ("Max-Days", 0, ts.Days);
269 AssertEquals ("Max-Hours", 0, ts.Hours);
270 AssertEquals ("Max-Minutes", -1, ts.Minutes);
271 AssertEquals ("Max-Seconds", 0, ts.Seconds);
272 AssertEquals ("Max-Milliseconds", 0, ts.Milliseconds);
273 AssertEquals ("Max-Ticks", -600000000, ts.Ticks);
275 ts = new TimeSpan (0, 0, Int32.MaxValue - 35791393, 0, 0);
276 AssertEquals ("Days", -24855, ts.Days);
277 AssertEquals ("Hours", -3, ts.Hours);
278 AssertEquals ("Minutes", -14, ts.Minutes);
279 AssertEquals ("Seconds", 0, ts.Seconds);
280 AssertEquals ("Milliseconds", 0, ts.Milliseconds);
281 AssertEquals ("Ticks", -21474836400000000, ts.Ticks);
287 [ExpectedException (typeof (ArgumentOutOfRangeException))]
288 [Category ("NotWorking")]
290 public void MaxMinutes_BreakPoint ()
292 TimeSpan ts = new TimeSpan (0, Int32.MaxValue - 35791394, 0, 0, 0);
293 AssertEquals ("Days", 0, ts.Days);
294 AssertEquals ("Hours", 0, ts.Hours);
295 AssertEquals ("Minutes", -52, ts.Minutes);
296 AssertEquals ("Seconds", 0, ts.Seconds);
297 AssertEquals ("Milliseconds", 0, ts.Milliseconds);
298 AssertEquals ("Ticks", -31200000000, ts.Ticks);
302 [Ignore ("too long")]
303 public void MinMinutes_TooLong ()
305 // LAMESPEC: the highest minutes are "special"
306 for (int i=Int32.MinValue; i < -2111692253; i++) {
307 TimeSpan ts = new TimeSpan (0, 0, i, 0, 0);
308 long h = i + Int32.MaxValue + 1;
309 string prefix = i.ToString () + '-';
310 AssertEquals (prefix + "Days", (h / 1440), ts.Days);
311 AssertEquals (prefix + "Hours", ((h / 60) % 24), ts.Hours);
312 AssertEquals (prefix + "Minutes", (h % 60), ts.Minutes);
313 AssertEquals (prefix + "Seconds", 0, ts.Seconds);
314 AssertEquals (prefix + "Milliseconds", 0, ts.Milliseconds);
315 AssertEquals (prefix + "Ticks", (600000000L * h), ts.Ticks);
321 [Category ("NotWorking")]
323 public void MinMinutes ()
327 ts = new TimeSpan (0, 0, Int32.MinValue, 0, 0);
328 AssertEquals ("Days", -1491308, ts.Days);
329 AssertEquals ("Hours", -2, ts.Hours);
330 AssertEquals ("Minutes", -8, ts.Minutes);
331 AssertEquals ("Seconds", 0, ts.Seconds);
332 AssertEquals ("Milliseconds", 0, ts.Milliseconds);
333 AssertEquals ("Ticks", -1288490188800000000, ts.Ticks);
335 // LAMESPEC: the highest minutes are "special"
336 ts = new TimeSpan (0, 0, Int32.MinValue, 0, 0);
337 AssertEquals ("Min-Days", 0, ts.Days);
338 AssertEquals ("Min-Hours", 0, ts.Hours);
339 AssertEquals ("Min-Minutes", 0, ts.Minutes);
340 AssertEquals ("Min-Seconds", 0, ts.Seconds);
341 AssertEquals ("Min-Milliseconds", 0, ts.Milliseconds);
342 AssertEquals ("Min-Ticks", 0, ts.Ticks);
344 ts = new TimeSpan (0, 0, -2111692254, 0, 0);
345 AssertEquals ("Days", 24855, ts.Days);
346 AssertEquals ("Hours", 3, ts.Hours);
347 AssertEquals ("Minutes", 14, ts.Minutes);
348 AssertEquals ("Seconds", 0, ts.Seconds);
349 AssertEquals ("Milliseconds", 0, ts.Milliseconds);
350 AssertEquals ("Ticks", 21474836400000000, ts.Ticks);
356 [Category ("NotWorking")]
358 public void MinMinutes_BreakPoint ()
361 TimeSpan ts = new TimeSpan (0, 0, -2111692253, 0, 0);
362 AssertEquals ("Days", -1466452, ts.Days);
363 AssertEquals ("Hours", -22, ts.Hours);
364 AssertEquals ("Minutes", -53, ts.Minutes);
365 AssertEquals ("Seconds", -0, ts.Seconds);
366 AssertEquals ("Milliseconds", 0, ts.Milliseconds);
367 AssertEquals ("Ticks", -1267015351800000000, ts.Ticks);
369 TimeSpan ts = new TimeSpan (0, 0, -2111692253, 0, 0);
370 AssertEquals ("Days", -24855, ts.Days);
371 AssertEquals ("Hours", -3, ts.Hours);
372 AssertEquals ("Minutes", -13, ts.Minutes);
373 AssertEquals ("Seconds", -16, ts.Seconds);
374 AssertEquals ("Milliseconds", 0, ts.Milliseconds);
375 AssertEquals ("Ticks", -21474835960000000, ts.Ticks);
380 public void MaxSeconds ()
382 TimeSpan ts = new TimeSpan (0, 0, 0, Int32.MaxValue, 0);
383 AssertEquals ("Days", 24855, ts.Days);
384 AssertEquals ("Hours", 3, ts.Hours);
385 AssertEquals ("Minutes", 14, ts.Minutes);
386 AssertEquals ("Seconds", 7, ts.Seconds);
387 AssertEquals ("Milliseconds", 0, ts.Milliseconds);
388 AssertEquals ("Ticks", 21474836470000000, ts.Ticks);
392 public void MinSeconds ()
394 TimeSpan ts = new TimeSpan (0, 0, 0, Int32.MinValue, 0);
395 AssertEquals ("Days", -24855, ts.Days);
396 AssertEquals ("Hours", -3, ts.Hours);
397 AssertEquals ("Minutes", -14, ts.Minutes);
398 AssertEquals ("Seconds", -8, ts.Seconds);
399 AssertEquals ("Milliseconds", 0, ts.Milliseconds);
400 AssertEquals ("Ticks", -21474836480000000, ts.Ticks);
404 public void MaxMilliseconds ()
406 TimeSpan ts = new TimeSpan (0, 0, 0, 0, Int32.MaxValue);
407 AssertEquals ("Days", 24, ts.Days);
408 AssertEquals ("Hours", 20, ts.Hours);
409 AssertEquals ("Minutes", 31, ts.Minutes);
410 AssertEquals ("Seconds", 23, ts.Seconds);
411 AssertEquals ("Milliseconds", 647, ts.Milliseconds);
412 AssertEquals ("Ticks", 21474836470000, ts.Ticks);
416 public void MinMilliseconds ()
418 TimeSpan ts = new TimeSpan (0, 0, 0, 0, Int32.MinValue);
419 AssertEquals ("Days", -24, ts.Days);
420 AssertEquals ("Hours", -20, ts.Hours);
421 AssertEquals ("Minutes", -31, ts.Minutes);
422 AssertEquals ("Seconds", -23, ts.Seconds);
423 AssertEquals ("Milliseconds", -648, ts.Milliseconds);
424 AssertEquals ("Ticks", -21474836480000, ts.Ticks);
428 public void NegativeTimeSpan ()
430 TimeSpan ts = new TimeSpan (-23, -59, -59);
431 AssertEquals ("Days", 0, ts.Days);
432 AssertEquals ("Hours", -23, ts.Hours);
433 AssertEquals ("Minutes", -59, ts.Minutes);
434 AssertEquals ("Seconds", -59, ts.Seconds);
435 AssertEquals ("Milliseconds", 0, ts.Milliseconds);
436 AssertEquals ("Ticks", -863990000000, ts.Ticks);
439 public void TestProperties ()
441 TimeSpan t1 = new TimeSpan (1,2,3,4,5);
444 AssertEquals ("A1", 1, t1.Days);
445 AssertEquals ("A2", 2, t1.Hours);
446 AssertEquals ("A3", 3, t1.Minutes);
447 AssertEquals ("A4", 4, t1.Seconds);
448 AssertEquals ("A5", 5, t1.Milliseconds);
449 AssertEquals ("A6", -1, t2.Days);
450 AssertEquals ("A7", -2, t2.Hours);
451 AssertEquals ("A8", -3, t2.Minutes);
452 AssertEquals ("A9", -4, t2.Seconds);
453 AssertEquals ("A10", -5, t2.Milliseconds);
456 public void TestAdd ()
458 TimeSpan t1 = new TimeSpan (2,3,4,5,6);
459 TimeSpan t2 = new TimeSpan (1,2,3,4,5);
460 TimeSpan t3 = t1 + t2;
461 TimeSpan t4 = t1.Add (t2);
465 AssertEquals ("A1", 3, t3.Days);
466 AssertEquals ("A2", 5, t3.Hours);
467 AssertEquals ("A3", 7, t3.Minutes);
468 AssertEquals ("A4", 9, t3.Seconds);
469 AssertEquals ("A5", 11, t3.Milliseconds);
470 AssertEquals ("A6", "3.05:07:09.0110000", t4.ToString ());
473 t5 = TimeSpan.MaxValue + new TimeSpan (1);
476 catch (OverflowException)
480 Assert ("A7", exception);
483 public void TestCompare ()
485 TimeSpan t1 = new TimeSpan (-1);
486 TimeSpan t2 = new TimeSpan (1);
490 AssertEquals ("A1", -1, TimeSpan.Compare (t1, t2));
491 AssertEquals ("A2", 1, TimeSpan.Compare (t2, t1));
492 AssertEquals ("A3", 0, TimeSpan.Compare (t2, t2));
493 AssertEquals ("A4", -1, TimeSpan.Compare (TimeSpan.MinValue, TimeSpan.MaxValue));
494 AssertEquals ("A5", -1, t1.CompareTo (t2));
495 AssertEquals ("A6", 1, t2.CompareTo (t1));
496 AssertEquals ("A7", 0, t2.CompareTo (t2));
497 AssertEquals ("A8", -1, TimeSpan.Compare (TimeSpan.MinValue, TimeSpan.MaxValue));
499 AssertEquals ("A9", 1, TimeSpan.Zero.CompareTo (null));
503 res = TimeSpan.Zero.CompareTo("");
506 catch (ArgumentException)
510 Assert ("A10", exception);
512 AssertEquals ("A11", false, t1 == t2);
513 AssertEquals ("A12", false, t1 > t2);
514 AssertEquals ("A13", false, t1 >= t2);
515 AssertEquals ("A14", true, t1 != t2);
516 AssertEquals ("A15", true, t1 < t2);
517 AssertEquals ("A16", true, t1 <= t2);
521 [ExpectedException (typeof (OverflowException))]
522 public void NoNegateMinValue() {
523 TimeSpan t1 = TimeSpan.MinValue.Negate ();
526 public void TestNegateAndDuration ()
531 AssertEquals ("A1", "-00:00:00.0012345", new TimeSpan (12345).Negate ().ToString ());
532 AssertEquals ("A2", "00:00:00.0012345", new TimeSpan (-12345).Duration ().ToString ());
536 t1 = TimeSpan.MinValue.Duration ();
539 catch (OverflowException) {
542 Assert ("A4", exception);
544 AssertEquals ("A5", "-00:00:00.0000077", (-(new TimeSpan (77))).ToString ());
545 AssertEquals("A6", "00:00:00.0000077", (+(new TimeSpan(77))).ToString());
548 public void TestEquals ()
550 TimeSpan t1 = new TimeSpan (1);
551 TimeSpan t2 = new TimeSpan (2);
552 string s = "justastring";
554 AssertEquals ("A1", true, t1.Equals (t1));
555 AssertEquals ("A2", false, t1.Equals (t2));
556 AssertEquals ("A3", false, t1.Equals (s));
557 AssertEquals ("A4", false, t1.Equals (null));
558 AssertEquals ("A5", true, TimeSpan.Equals (t1, t1));
559 AssertEquals ("A6", false, TimeSpan.Equals (t1, t2));
560 AssertEquals ("A7", false, TimeSpan.Equals (t1, null));
561 AssertEquals ("A8", false, TimeSpan.Equals (t1, s));
562 AssertEquals ("A9", false, TimeSpan.Equals (s, t2));
563 AssertEquals ("A10", true, TimeSpan.Equals (null,null));
566 public void TestFromXXXX ()
568 AssertEquals ("A1", "12.08:16:48", TimeSpan.FromDays (12.345).ToString ());
569 AssertEquals ("A2", "12:20:42", TimeSpan.FromHours (12.345).ToString ());
570 AssertEquals ("A3", "00:12:20.7000000", TimeSpan.FromMinutes (12.345).ToString ());
571 AssertEquals ("A4", "00:00:12.3450000", TimeSpan.FromSeconds (12.345).ToString ());
572 AssertEquals ("A5", "00:00:00.0120000", TimeSpan.FromMilliseconds (12.345).ToString ());
573 AssertEquals ("A6", "00:00:00.0012345", TimeSpan.FromTicks (12345).ToString ());
577 [ExpectedException (typeof (OverflowException))]
578 public void FromDays_MinValue ()
580 TimeSpan.FromDays (Double.MinValue);
584 [ExpectedException (typeof (OverflowException))]
585 public void FromDays_MaxValue ()
587 TimeSpan.FromDays (Double.MaxValue);
591 [ExpectedException (typeof (ArgumentException))]
592 public void FromDays_NaN ()
594 TimeSpan.FromDays (Double.NaN);
598 [ExpectedException (typeof (OverflowException))]
599 public void FromDays_PositiveInfinity ()
601 // LAMESPEC: Document to return TimeSpan.MaxValue
602 AssertEquals (TimeSpan.MaxValue, TimeSpan.FromDays (Double.PositiveInfinity));
606 [ExpectedException (typeof (OverflowException))]
607 public void FromDays_NegativeInfinity ()
609 // LAMESPEC: Document to return TimeSpan.MinValue
610 AssertEquals (TimeSpan.MinValue, TimeSpan.FromDays (Double.NegativeInfinity));
614 [ExpectedException (typeof (OverflowException))]
615 public void FromHours_MinValue ()
617 TimeSpan.FromHours (Double.MinValue);
621 [ExpectedException (typeof (OverflowException))]
622 public void FromHours_MaxValue ()
624 TimeSpan.FromHours (Double.MaxValue);
628 [ExpectedException (typeof (ArgumentException))]
629 public void FromHours_NaN ()
631 TimeSpan.FromHours (Double.NaN);
635 [ExpectedException (typeof (OverflowException))]
636 public void FromHours_PositiveInfinity ()
638 // LAMESPEC: Document to return TimeSpan.MaxValue
639 AssertEquals (TimeSpan.MaxValue, TimeSpan.FromHours (Double.PositiveInfinity));
643 [ExpectedException (typeof (OverflowException))]
644 public void FromHours_NegativeInfinity ()
646 // LAMESPEC: Document to return TimeSpan.MinValue
647 AssertEquals (TimeSpan.MinValue, TimeSpan.FromHours (Double.NegativeInfinity));
651 [ExpectedException (typeof (OverflowException))]
652 public void FromMilliseconds_MinValue ()
654 TimeSpan.FromMilliseconds (Double.MinValue);
658 [ExpectedException (typeof (OverflowException))]
659 public void FromMilliseconds_MaxValue ()
661 TimeSpan.FromMilliseconds (Double.MaxValue);
665 [ExpectedException (typeof (ArgumentException))]
666 public void FromMilliseconds_NaN ()
668 TimeSpan.FromMilliseconds (Double.NaN);
672 [ExpectedException (typeof (OverflowException))]
673 public void FromMilliseconds_PositiveInfinity ()
675 // LAMESPEC: Document to return TimeSpan.MaxValue
676 AssertEquals (TimeSpan.MaxValue, TimeSpan.FromMilliseconds (Double.PositiveInfinity));
680 [ExpectedException (typeof (OverflowException))]
681 public void FromMilliseconds_NegativeInfinity ()
683 // LAMESPEC: Document to return TimeSpan.MinValue
684 AssertEquals (TimeSpan.MinValue, TimeSpan.FromMilliseconds (Double.NegativeInfinity));
688 [ExpectedException (typeof (OverflowException))]
689 public void FromMinutes_MinValue ()
691 TimeSpan.FromMinutes (Double.MinValue);
695 [ExpectedException (typeof (OverflowException))]
696 public void FromMinutes_MaxValue ()
698 TimeSpan.FromMinutes (Double.MaxValue);
702 [ExpectedException (typeof (ArgumentException))]
703 public void FromMinutes_NaN ()
705 TimeSpan.FromMinutes (Double.NaN);
709 [ExpectedException (typeof (OverflowException))]
710 public void FromMinutes_PositiveInfinity ()
712 // LAMESPEC: Document to return TimeSpan.MaxValue
713 AssertEquals (TimeSpan.MaxValue, TimeSpan.FromMinutes (Double.PositiveInfinity));
717 [ExpectedException (typeof (OverflowException))]
718 public void FromMinutes_NegativeInfinity ()
720 // LAMESPEC: Document to return TimeSpan.MinValue
721 AssertEquals (TimeSpan.MinValue, TimeSpan.FromMinutes (Double.NegativeInfinity));
725 [ExpectedException (typeof (OverflowException))]
726 public void FromSeconds_MinValue ()
728 TimeSpan.FromSeconds (Double.MinValue);
732 [ExpectedException (typeof (OverflowException))]
733 public void FromSeconds_MaxValue ()
735 TimeSpan.FromSeconds (Double.MaxValue);
739 [ExpectedException (typeof (ArgumentException))]
740 public void FromSeconds_NaN ()
742 TimeSpan.FromSeconds (Double.NaN);
746 [ExpectedException (typeof (OverflowException))]
747 public void FromSeconds_PositiveInfinity ()
749 // LAMESPEC: Document to return TimeSpan.MaxValue
750 AssertEquals (TimeSpan.MaxValue, TimeSpan.FromSeconds (Double.PositiveInfinity));
754 [ExpectedException (typeof (OverflowException))]
755 public void FromSeconds_NegativeInfinity ()
757 // LAMESPEC: Document to return TimeSpan.MinValue
758 AssertEquals (TimeSpan.MinValue, TimeSpan.FromSeconds (Double.NegativeInfinity));
761 public void TestGetHashCode ()
763 AssertEquals ("A1", 77, new TimeSpan (77).GetHashCode ());
766 private void ParseHelper (string s, bool expectFormat, bool expectOverflow, string expect)
768 bool formatException = false;
769 bool overflowException = false;
770 string result = "junk ";
773 result = TimeSpan.Parse (s).ToString ();
775 catch (OverflowException) {
776 overflowException = true;
778 catch (FormatException) {
779 formatException = true;
781 AssertEquals ("A1", expectFormat, formatException);
782 AssertEquals ("A2", expectOverflow, overflowException);
784 if (!expectOverflow && !expectFormat) {
785 AssertEquals ("A3", expect, result);
789 public void TestParse ()
791 ParseHelper (" 13:45:15 ",false, false, "13:45:15");
792 ParseHelper (" -1:2:3 ", false, false, "-01:02:03");
794 ParseHelper (" 25:0:0 ",false, true, "dontcare");
795 ParseHelper ("aaa", true, false, "dontcare");
797 ParseHelper ("-21.23:59:59.9999999", false, false, "-21.23:59:59.9999999");
799 ParseHelper ("100000000000000.1:1:1", false, true, "dontcare");
800 ParseHelper ("24:60:60", false, true, "dontcare");
801 ParseHelper ("0001:0002:0003.12 ", false, false, "01:02:03.1200000");
803 ParseHelper (" 1:2:3:12345678 ", true, false, "dontcare");
806 // LAMESPEC: timespan in documentation is wrong - hh:mm:ss isn't mandatory
808 public void Parse_Days_WithoutColon ()
810 TimeSpan ts = TimeSpan.Parse ("1");
811 AssertEquals ("Days", 1, ts.Days);
814 public void TestSubstract ()
816 TimeSpan t1 = new TimeSpan (2,3,4,5,6);
817 TimeSpan t2 = new TimeSpan (1,2,3,4,5);
818 TimeSpan t3 = t1 - t2;
819 TimeSpan t4 = t1.Subtract (t2);
823 AssertEquals ("A1", "1.01:01:01.0010000", t3.ToString ());
824 AssertEquals ("A2", "1.01:01:01.0010000", t4.ToString ());
826 t5 = TimeSpan.MinValue - new TimeSpan (1);
829 catch (OverflowException) {
832 Assert ("A3", exception);
835 public void TestToString ()
837 TimeSpan t1 = new TimeSpan (1,2,3,4,5);
840 AssertEquals ("A1", "1.02:03:04.0050000", t1.ToString ());
841 AssertEquals ("A2", "-1.02:03:04.0050000", t2.ToString ());
842 AssertEquals ("A3", "10675199.02:48:05.4775807", TimeSpan.MaxValue.ToString ());
843 AssertEquals ("A4", "-10675199.02:48:05.4775808", TimeSpan.MinValue.ToString ());
847 public void ToString_Constants ()
849 AssertEquals ("Zero", "00:00:00", TimeSpan.Zero.ToString ());
850 AssertEquals ("MaxValue", "10675199.02:48:05.4775807", TimeSpan.MaxValue.ToString ());
851 AssertEquals ("MinValue", "-10675199.02:48:05.4775808", TimeSpan.MinValue.ToString ());
855 [ExpectedException (typeof (OverflowException))]
856 public void Parse_InvalidValuesAndFormat_ExceptionOrder ()
858 // hours should be between 0 and 23 but format is also invalid (too many dots)
859 TimeSpan.Parse ("0.99.99.0");
863 public void Parse_MinMaxValues ()
865 AssertEquals ("MaxValue", TimeSpan.MaxValue, TimeSpan.Parse ("10675199.02:48:05.4775807"));
866 AssertEquals ("MinValue", TimeSpan.MinValue, TimeSpan.Parse ("-10675199.02:48:05.4775808"));
870 [ExpectedException (typeof (OverflowException))]
871 public void Parse_OverMaxValue()
873 TimeSpan.Parse ("10675199.02:48:05.4775808");
877 [ExpectedException (typeof (OverflowException))]
878 public void Parse_UnderMinValue()
880 TimeSpan.Parse ("-10675199.02:48:05.4775809");