Lines Matching refs:Date

108         Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1));
132 assert(Interval!Date(Date(1996, 1, 2), dur!"days"(3)) ==
133 Interval!Date(Date(1996, 1, 2), Date(1996, 1, 5)));
175 assert(Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).begin ==
176 Date(1996, 1, 2));
208 assert(Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).end ==
209 Date(2012, 3, 1));
241 assert(Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).length ==
256 assert(Interval!Date(Date(1996, 1, 2), Date(1996, 1, 2)).empty);
257 assert(!Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).empty);
278 assert(!Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).contains(
279 Date(1994, 12, 24)));
281 assert(Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).contains(
282 Date(2000, 1, 5)));
283 assert(!Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).contains(
284 Date(2012, 3, 1)));
306 assert(!Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).contains(
307 Interval!Date(Date(1990, 7, 6), Date(2000, 8, 2))));
309 assert(Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).contains(
310 Interval!Date(Date(1999, 1, 12), Date(2011, 9, 17))));
312 assert(!Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).contains(
313 Interval!Date(Date(1998, 2, 28), Date(2013, 5, 1))));
342 assert(!Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).contains(
343 PosInfInterval!Date(Date(1999, 5, 4))));
369 assert(!Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).contains(
370 NegInfInterval!Date(Date(1996, 5, 4))));
393 assert(!Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).isBefore(
394 Date(1994, 12, 24)));
396 assert(!Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).isBefore(
397 Date(2000, 1, 5)));
399 assert(Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).isBefore(
400 Date(2012, 3, 1)));
423 assert(!Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).isBefore(
424 Interval!Date(Date(1990, 7, 6), Date(2000, 8, 2))));
426 assert(!Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).isBefore(
427 Interval!Date(Date(1999, 1, 12), Date(2011, 9, 17))));
429 assert(Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).isBefore(
430 Interval!Date(Date(2012, 3, 1), Date(2013, 5, 1))));
454 assert(!Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).isBefore(
455 PosInfInterval!Date(Date(1999, 5, 4))));
457 assert(Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).isBefore(
458 PosInfInterval!Date(Date(2013, 3, 7))));
484 assert(!Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).isBefore(
485 NegInfInterval!Date(Date(1996, 5, 4))));
508 assert(Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).isAfter(
509 Date(1994, 12, 24)));
511 assert(!Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).isAfter(
512 Date(2000, 1, 5)));
514 assert(!Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).isAfter(
515 Date(2012, 3, 1)));
538 assert(!Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).isAfter(
539 Interval!Date(Date(1990, 7, 6), Date(2000, 8, 2))));
541 assert(!Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).isAfter(
542 Interval!Date(Date(1999, 1, 12), Date(2011, 9, 17))));
544 assert(Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).isAfter(
545 Interval!Date(Date(1989, 3, 1), Date(1996, 1, 2))));
572 assert(!Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).isAfter(
573 PosInfInterval!Date(Date(1999, 5, 4))));
596 assert(Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).isAfter(
597 NegInfInterval!Date(Date(1996, 1, 2))));
619 assert(Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).intersects(
620 Interval!Date(Date(1990, 7, 6), Date(2000, 8, 2))));
622 assert(Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).intersects(
623 Interval!Date(Date(1999, 1, 12), Date(2011, 9, 17))));
625 assert(!Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).intersects(
626 Interval!Date(Date(1989, 3, 1), Date(1996, 1, 2))));
649 assert(Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).intersects(
650 PosInfInterval!Date(Date(1999, 5, 4))));
652 assert(!Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).intersects(
653 PosInfInterval!Date(Date(2012, 3, 1))));
675 assert(!Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).intersects(
676 NegInfInterval!Date(Date(1996, 1, 2))));
678 assert(Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).intersects(
679 NegInfInterval!Date(Date(2000, 1, 2))));
701 assert(Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).intersection(
702 Interval!Date(Date(1990, 7, 6), Date(2000, 8, 2))) ==
703 Interval!Date(Date(1996, 1 , 2), Date(2000, 8, 2)));
705 assert(Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).intersection(
706 Interval!Date(Date(1999, 1, 12), Date(2011, 9, 17))) ==
707 Interval!Date(Date(1999, 1 , 12), Date(2011, 9, 17)));
736 assert(Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).intersection(
737 PosInfInterval!Date(Date(1990, 7, 6))) ==
738 Interval!Date(Date(1996, 1 , 2), Date(2012, 3, 1)));
740 assert(Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).intersection(
741 PosInfInterval!Date(Date(1999, 1, 12))) ==
742 Interval!Date(Date(1999, 1 , 12), Date(2012, 3, 1)));
768 assert(Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).intersection(
769 NegInfInterval!Date(Date(1999, 7, 6))) ==
770 Interval!Date(Date(1996, 1 , 2), Date(1999, 7, 6)));
772 assert(Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).intersection(
773 NegInfInterval!Date(Date(2013, 1, 12))) ==
774 Interval!Date(Date(1996, 1 , 2), Date(2012, 3, 1)));
801 assert(Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).isAdjacent(
802 Interval!Date(Date(1990, 7, 6), Date(1996, 1, 2))));
804 assert(Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).isAdjacent(
805 Interval!Date(Date(2012, 3, 1), Date(2013, 9, 17))));
807 assert(!Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).isAdjacent(
808 Interval!Date(Date(1989, 3, 1), Date(2012, 3, 1))));
832 assert(!Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).isAdjacent(
833 PosInfInterval!Date(Date(1999, 5, 4))));
835 assert(Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).isAdjacent(
836 PosInfInterval!Date(Date(2012, 3, 1))));
859 assert(Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).isAdjacent(
860 NegInfInterval!Date(Date(1996, 1, 2))));
862 assert(!Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).isAdjacent(
863 NegInfInterval!Date(Date(2000, 1, 2))));
885 assert(Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).merge(
886 Interval!Date(Date(1990, 7, 6), Date(2000, 8, 2))) ==
887 Interval!Date(Date(1990, 7 , 6), Date(2012, 3, 1)));
889 assert(Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).merge(
890 Interval!Date(Date(2012, 3, 1), Date(2013, 5, 7))) ==
891 Interval!Date(Date(1996, 1 , 2), Date(2013, 5, 7)));
920 assert(Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).merge(
921 PosInfInterval!Date(Date(1990, 7, 6))) ==
922 PosInfInterval!Date(Date(1990, 7 , 6)));
924 assert(Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).merge(
925 PosInfInterval!Date(Date(2012, 3, 1))) ==
926 PosInfInterval!Date(Date(1996, 1 , 2)));
952 assert(Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).merge(
953 NegInfInterval!Date(Date(1996, 1, 2))) ==
954 NegInfInterval!Date(Date(2012, 3 , 1)));
956 assert(Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).merge(
957 NegInfInterval!Date(Date(2013, 1, 12))) ==
958 NegInfInterval!Date(Date(2013, 1 , 12)));
986 assert(Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).span(
987 Interval!Date(Date(1990, 7, 6), Date(1991, 1, 8))) ==
988 Interval!Date(Date(1990, 7 , 6), Date(2012, 3, 1)));
990 assert(Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).span(
991 Interval!Date(Date(2012, 3, 1), Date(2013, 5, 7))) ==
992 Interval!Date(Date(1996, 1 , 2), Date(2013, 5, 7)));
1021 assert(Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).span(
1022 PosInfInterval!Date(Date(1990, 7, 6))) ==
1023 PosInfInterval!Date(Date(1990, 7 , 6)));
1025 assert(Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).span(
1026 PosInfInterval!Date(Date(2050, 1, 1))) ==
1027 PosInfInterval!Date(Date(1996, 1 , 2)));
1051 assert(Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).span(
1052 NegInfInterval!Date(Date(1602, 5, 21))) ==
1053 NegInfInterval!Date(Date(2012, 3 , 1)));
1055 assert(Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).span(
1056 NegInfInterval!Date(Date(2013, 1, 12))) ==
1057 NegInfInterval!Date(Date(2013, 1 , 12)));
1082 auto interval1 = Interval!Date(Date(1996, 1, 2), Date(2012, 4, 5));
1083 auto interval2 = Interval!Date(Date(1996, 1, 2), Date(2012, 4, 5));
1086 assert(interval1 == Interval!Date(Date(1996, 2, 21), Date(2012, 5, 25)));
1089 assert(interval2 == Interval!Date(Date(1995, 11, 13), Date(2012, 2, 15)));
1132 auto interval1 = Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1));
1133 auto interval2 = Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1));
1136 assert(interval1 == Interval!Date(Date(1998, 1, 2), Date(2014, 3, 1)));
1139 assert(interval2 == Interval!Date(Date(1994, 1, 2), Date(2010, 3, 1)));
1179 auto interval1 = Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1));
1180 auto interval2 = Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1));
1183 assert(interval1 == Interval!Date(Date(1994, 1, 2), Date(2014, 3, 1)));
1186 assert(interval2 == Interval!Date(Date(1998, 1, 2), Date(2010, 3, 1)));
1257 auto interval1 = Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1));
1258 auto interval2 = Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1));
1261 assert(interval1 == Interval!Date(Date(1994, 1, 2), Date(2014, 3, 1)));
1264 assert(interval2 == Interval!Date(Date(1998, 1, 2), Date(2010, 3, 1)));
1378 auto interval = Interval!Date(Date(2010, 9, 1), Date(2010, 9, 9));
1379 auto func = delegate (in Date date) // For iterating over even-numbered days.
1388 // An odd day. Using PopFirst.yes would have made this Date(2010, 9, 2).
1389 assert(range.front == Date(2010, 9, 1));
1392 assert(range.front == Date(2010, 9, 2));
1395 assert(range.front == Date(2010, 9, 4));
1398 assert(range.front == Date(2010, 9, 6));
1401 assert(range.front == Date(2010, 9, 8));
1472 auto interval = Interval!Date(Date(2010, 9, 1), Date(2010, 9, 9));
1473 auto func = delegate (in Date date) // For iterating over even-numbered days.
1482 // An odd day. Using PopFirst.yes would have made this Date(2010, 9, 8).
1483 assert(range.front == Date(2010, 9, 9));
1486 assert(range.front == Date(2010, 9, 8));
1489 assert(range.front == Date(2010, 9, 6));
1492 assert(range.front == Date(2010, 9, 4));
1495 assert(range.front == Date(2010, 9, 2));
1595 assertThrown!DateTimeException(Interval!Date(Date(2010, 1, 1), Date(1, 1, 1)));
1597 Interval!Date(Date.init, Date.init);
1605 Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1));
1606 assert(Interval!Date(Date(1996, 1, 2), dur!"weeks"(3)) == Interval!Date(Date(1996, 1, 2), Date(1996, 1, 23)));
1607 assert(Interval!Date(Date(1996, 1, 2), dur!"days"(3)) == Interval!Date(Date(1996, 1, 2), Date(1996, 1, 5)));
1623 assert(Interval!Date(Date(1, 1, 1), Date(2010, 1, 1)).begin == Date(1, 1, 1));
1624 assert(Interval!Date(Date(2010, 1, 1), Date(2010, 1, 1)).begin == Date(2010, 1, 1));
1625 assert(Interval!Date(Date(1997, 12, 31), Date(1998, 1, 1)).begin == Date(1997, 12, 31));
1627 const cInterval = Interval!Date(Date(2010, 7, 4), Date(2012, 1, 7));
1628 immutable iInterval = Interval!Date(Date(2010, 7, 4), Date(2012, 1, 7));
1629 assert(cInterval.begin == Date(2010, 7, 4));
1630 assert(iInterval.begin == Date(2010, 7, 4));
1633 assert(Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).begin == Date(1996, 1, 2));
1641 assert(Interval!Date(Date(1, 1, 1), Date(2010, 1, 1)).end == Date(2010, 1, 1));
1642 assert(Interval!Date(Date(2010, 1, 1), Date(2010, 1, 1)).end == Date(2010, 1, 1));
1643 assert(Interval!Date(Date(1997, 12, 31), Date(1998, 1, 1)).end == Date(1998, 1, 1));
1645 const cInterval = Interval!Date(Date(2010, 7, 4), Date(2012, 1, 7));
1646 immutable iInterval = Interval!Date(Date(2010, 7, 4), Date(2012, 1, 7));
1647 assert(cInterval.end == Date(2012, 1, 7));
1648 assert(iInterval.end == Date(2012, 1, 7));
1651 assert(Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).end == Date(2012, 3, 1));
1660 assert(Interval!Date(Date(2010, 1, 1), Date(2010, 1, 1)).length == dur!"days"(0));
1661 assert(Interval!Date(Date(2010, 1, 1), Date(2010, 4, 1)).length == dur!"days"(90));
1668 const cInterval = Interval!Date(Date(2010, 7, 4), Date(2012, 1, 7));
1669 immutable iInterval = Interval!Date(Date(2010, 7, 4), Date(2012, 1, 7));
1674 assert(Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).length == dur!"days"(5903));
1683 assert(Interval!Date(Date(2010, 1, 1), Date(2010, 1, 1)).empty);
1684 assert(!Interval!Date(Date(2010, 1, 1), Date(2010, 4, 1)).empty);
1689 const cInterval = Interval!Date(Date(2010, 7, 4), Date(2012, 1, 7));
1690 immutable iInterval = Interval!Date(Date(2010, 7, 4), Date(2012, 1, 7));
1695 assert(Interval!Date(Date(1996, 1, 2), Date(1996, 1, 2)).empty);
1696 assert(!Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).empty);
1704 auto interval = Interval!Date(Date(2010, 7, 4), Date(2012, 1, 7));
1706 assertThrown!DateTimeException(Interval!Date(Date(2010, 7, 4), dur!"days"(0)).contains(Date(2010, 7, 4)));
1708 assert(!interval.contains(Date(2009, 7, 4)));
1709 assert(!interval.contains(Date(2010, 7, 3)));
1710 assert(interval.contains(Date(2010, 7, 4)));
1711 assert(interval.contains(Date(2010, 7, 5)));
1712 assert(interval.contains(Date(2011, 7, 1)));
1713 assert(interval.contains(Date(2012, 1, 6)));
1714 assert(!interval.contains(Date(2012, 1, 7)));
1715 assert(!interval.contains(Date(2012, 1, 8)));
1716 assert(!interval.contains(Date(2013, 1, 7)));
1718 const cdate = Date(2010, 7, 6);
1719 const cInterval = Interval!Date(Date(2010, 7, 4), Date(2012, 1, 7));
1720 immutable iInterval = Interval!Date(Date(2010, 7, 4), Date(2012, 1, 7));
1726 assert(!Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).contains(Date(1994, 12, 24)));
1727 assert(Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).contains(Date(2000, 1, 5)));
1728 assert(!Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).contains(Date(2012, 3, 1)));
1736 auto interval = Interval!Date(Date(2010, 7, 4), Date(2012, 1, 7));
1738 assertThrown!DateTimeException(interval.contains(Interval!Date(Date(2010, 7, 4), dur!"days"(0))));
1739 assertThrown!DateTimeException(Interval!Date(Date(2010, 7, 4), dur!"days"(0)).contains(interval));
1740 assertThrown!DateTimeException(Interval!Date(Date(2010, 7, 4),dur!"days"(0)).contains(
1741 Interval!Date(Date(2010, 7, 4), dur!"days"(0))));
1744 assert(!interval.contains(Interval!Date(Date(2010, 7, 1), Date(2010, 7, 3))));
1745 assert(!interval.contains(Interval!Date(Date(2010, 7, 1), Date(2013, 7, 3))));
1746 assert(!interval.contains(Interval!Date(Date(2010, 7, 3), Date(2010, 7, 4))));
1747 assert(!interval.contains(Interval!Date(Date(2010, 7, 3), Date(2010, 7, 5))));
1748 assert(!interval.contains(Interval!Date(Date(2010, 7, 3), Date(2012, 1, 7))));
1749 assert(!interval.contains(Interval!Date(Date(2010, 7, 3), Date(2012, 1, 8))));
1750 assert(interval.contains(Interval!Date(Date(2010, 7, 5), Date(2012, 1, 6))));
1751 assert(interval.contains(Interval!Date(Date(2010, 7, 5), Date(2012, 1, 7))));
1752 assert(interval.contains(Interval!Date(Date(2012, 1, 6), Date(2012, 1, 7))));
1753 assert(!interval.contains(Interval!Date(Date(2012, 1, 6), Date(2012, 1, 8))));
1754 assert(!interval.contains(Interval!Date(Date(2012, 1, 7), Date(2012, 1, 8))));
1755 assert(!interval.contains(Interval!Date(Date(2012, 1, 8), Date(2012, 1, 9))));
1757 assert(!Interval!Date(Date(2010, 7, 1), Date(2010, 7, 3)).contains(interval));
1758 assert(Interval!Date(Date(2010, 7, 1), Date(2013, 7, 3)).contains(interval));
1759 assert(!Interval!Date(Date(2010, 7, 3), Date(2010, 7, 4)).contains(interval));
1760 assert(!Interval!Date(Date(2010, 7, 3), Date(2010, 7, 5)).contains(interval));
1761 assert(Interval!Date(Date(2010, 7, 3), Date(2012, 1, 7)).contains(interval));
1762 assert(Interval!Date(Date(2010, 7, 3), Date(2012, 1, 8)).contains(interval));
1763 assert(!Interval!Date(Date(2010, 7, 5), Date(2012, 1, 6)).contains(interval));
1764 assert(!Interval!Date(Date(2010, 7, 5), Date(2012, 1, 7)).contains(interval));
1765 assert(!Interval!Date(Date(2012, 1, 6), Date(2012, 1, 7)).contains(interval));
1766 assert(!Interval!Date(Date(2012, 1, 6), Date(2012, 1, 8)).contains(interval));
1767 assert(!Interval!Date(Date(2012, 1, 7), Date(2012, 1, 8)).contains(interval));
1768 assert(!Interval!Date(Date(2012, 1, 8), Date(2012, 1, 9)).contains(interval));
1770 assert(!interval.contains(PosInfInterval!Date(Date(2010, 7, 3))));
1771 assert(!interval.contains(PosInfInterval!Date(Date(2010, 7, 4))));
1772 assert(!interval.contains(PosInfInterval!Date(Date(2010, 7, 5))));
1773 assert(!interval.contains(PosInfInterval!Date(Date(2012, 1, 6))));
1774 assert(!interval.contains(PosInfInterval!Date(Date(2012, 1, 7))));
1775 assert(!interval.contains(PosInfInterval!Date(Date(2012, 1, 8))));
1777 assert(!interval.contains(NegInfInterval!Date(Date(2010, 7, 3))));
1778 assert(!interval.contains(NegInfInterval!Date(Date(2010, 7, 4))));
1779 assert(!interval.contains(NegInfInterval!Date(Date(2010, 7, 5))));
1780 assert(!interval.contains(NegInfInterval!Date(Date(2012, 1, 6))));
1781 assert(!interval.contains(NegInfInterval!Date(Date(2012, 1, 7))));
1782 assert(!interval.contains(NegInfInterval!Date(Date(2012, 1, 8))));
1784 const cInterval = Interval!Date(Date(2010, 7, 4), Date(2012, 1, 7));
1785 immutable iInterval = Interval!Date(Date(2010, 7, 4), Date(2012, 1, 7));
1786 auto posInfInterval = PosInfInterval!Date(Date(2010, 7, 4));
1787 const cPosInfInterval = PosInfInterval!Date(Date(2010, 7, 4));
1788 immutable iPosInfInterval = PosInfInterval!Date(Date(2010, 7, 4));
1789 auto negInfInterval = NegInfInterval!Date(Date(2012, 1, 7));
1790 const cNegInfInterval = NegInfInterval!Date(Date(2012, 1, 7));
1791 immutable iNegInfInterval = NegInfInterval!Date(Date(2012, 1, 7));
1821 assert(!Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).contains(
1822 Interval!Date(Date(1990, 7, 6), Date(2000, 8, 2))));
1823 assert(Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).contains(
1824 Interval!Date(Date(1999, 1, 12), Date(2011, 9, 17))));
1825 assert(!Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).contains(
1826 Interval!Date(Date(1998, 2, 28), Date(2013, 5, 1))));
1828 assert(!Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).contains(PosInfInterval!Date(Date(1999, 5, 4))));
1830 assert(!Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).contains(NegInfInterval!Date(Date(1996, 5, 4))));
1838 auto interval = Interval!Date(Date(2010, 7, 4), Date(2012, 1, 7));
1840 assertThrown!DateTimeException(Interval!Date(Date(2010, 7, 4), dur!"days"(0)).isBefore(Date(2010, 7, 4)));
1842 assert(!interval.isBefore(Date(2009, 7, 3)));
1843 assert(!interval.isBefore(Date(2010, 7, 3)));
1844 assert(!interval.isBefore(Date(2010, 7, 4)));
1845 assert(!interval.isBefore(Date(2010, 7, 5)));
1846 assert(!interval.isBefore(Date(2011, 7, 1)));
1847 assert(!interval.isBefore(Date(2012, 1, 6)));
1848 assert(interval.isBefore(Date(2012, 1, 7)));
1849 assert(interval.isBefore(Date(2012, 1, 8)));
1850 assert(interval.isBefore(Date(2013, 1, 7)));
1852 const cdate = Date(2010, 7, 6);
1853 const cInterval = Interval!Date(Date(2010, 7, 4), Date(2012, 1, 7));
1854 immutable iInterval = Interval!Date(Date(2010, 7, 4), Date(2012, 1, 7));
1860 assert(!Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).isBefore(Date(1994, 12, 24)));
1861 assert(!Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).isBefore(Date(2000, 1, 5)));
1862 assert(Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).isBefore(Date(2012, 3, 1)));
1870 auto interval = Interval!Date(Date(2010, 7, 4), Date(2012, 1, 7));
1872 assertThrown!DateTimeException(interval.isBefore(Interval!Date(Date(2010, 7, 4), dur!"days"(0))));
1873 assertThrown!DateTimeException(Interval!Date(Date(2010, 7, 4), dur!"days"(0)).isBefore(interval));
1874 assertThrown!DateTimeException(Interval!Date(Date(2010, 7, 4), dur!"days"(0)).isBefore(
1875 Interval!Date(Date(2010, 7, 4), dur!"days"(0))));
1878 assert(!interval.isBefore(Interval!Date(Date(2010, 7, 1), Date(2010, 7, 3))));
1879 assert(!interval.isBefore(Interval!Date(Date(2010, 7, 1), Date(2013, 7, 3))));
1880 assert(!interval.isBefore(Interval!Date(Date(2010, 7, 3), Date(2010, 7, 4))));
1881 assert(!interval.isBefore(Interval!Date(Date(2010, 7, 3), Date(2010, 7, 5))));
1882 assert(!interval.isBefore(Interval!Date(Date(2010, 7, 3), Date(2012, 1, 7))));
1883 assert(!interval.isBefore(Interval!Date(Date(2010, 7, 3), Date(2012, 1, 8))));
1884 assert(!interval.isBefore(Interval!Date(Date(2010, 7, 5), Date(2012, 1, 6))));
1885 assert(!interval.isBefore(Interval!Date(Date(2010, 7, 5), Date(2012, 1, 7))));
1886 assert(!interval.isBefore(Interval!Date(Date(2012, 1, 6), Date(2012, 1, 7))));
1887 assert(!interval.isBefore(Interval!Date(Date(2012, 1, 6), Date(2012, 1, 8))));
1888 assert(interval.isBefore(Interval!Date(Date(2012, 1, 7), Date(2012, 1, 8))));
1889 assert(interval.isBefore(Interval!Date(Date(2012, 1, 8), Date(2012, 1, 9))));
1891 assert(Interval!Date(Date(2010, 7, 1), Date(2010, 7, 3)).isBefore(interval));
1892 assert(!Interval!Date(Date(2010, 7, 1), Date(2013, 7, 3)).isBefore(interval));
1893 assert(Interval!Date(Date(2010, 7, 3), Date(2010, 7, 4)).isBefore(interval));
1894 assert(!Interval!Date(Date(2010, 7, 3), Date(2010, 7, 5)).isBefore(interval));
1895 assert(!Interval!Date(Date(2010, 7, 3), Date(2012, 1, 7)).isBefore(interval));
1896 assert(!Interval!Date(Date(2010, 7, 3), Date(2012, 1, 8)).isBefore(interval));
1897 assert(!Interval!Date(Date(2010, 7, 5), Date(2012, 1, 6)).isBefore(interval));
1898 assert(!Interval!Date(Date(2010, 7, 5), Date(2012, 1, 7)).isBefore(interval));
1899 assert(!Interval!Date(Date(2012, 1, 6), Date(2012, 1, 7)).isBefore(interval));
1900 assert(!Interval!Date(Date(2012, 1, 6), Date(2012, 1, 8)).isBefore(interval));
1901 assert(!Interval!Date(Date(2012, 1, 7), Date(2012, 1, 8)).isBefore(interval));
1902 assert(!Interval!Date(Date(2012, 1, 8), Date(2012, 1, 9)).isBefore(interval));
1904 assert(!interval.isBefore(PosInfInterval!Date(Date(2010, 7, 3))));
1905 assert(!interval.isBefore(PosInfInterval!Date(Date(2010, 7, 4))));
1906 assert(!interval.isBefore(PosInfInterval!Date(Date(2010, 7, 5))));
1907 assert(!interval.isBefore(PosInfInterval!Date(Date(2012, 1, 6))));
1908 assert(interval.isBefore(PosInfInterval!Date(Date(2012, 1, 7))));
1909 assert(interval.isBefore(PosInfInterval!Date(Date(2012, 1, 8))));
1911 assert(!interval.isBefore(NegInfInterval!Date(Date(2010, 7, 3))));
1912 assert(!interval.isBefore(NegInfInterval!Date(Date(2010, 7, 4))));
1913 assert(!interval.isBefore(NegInfInterval!Date(Date(2010, 7, 5))));
1914 assert(!interval.isBefore(NegInfInterval!Date(Date(2012, 1, 6))));
1915 assert(!interval.isBefore(NegInfInterval!Date(Date(2012, 1, 7))));
1916 assert(!interval.isBefore(NegInfInterval!Date(Date(2012, 1, 8))));
1918 const cInterval = Interval!Date(Date(2010, 7, 4), Date(2012, 1, 7));
1919 immutable iInterval = Interval!Date(Date(2010, 7, 4), Date(2012, 1, 7));
1920 auto posInfInterval = PosInfInterval!Date(Date(2010, 7, 4));
1921 const cPosInfInterval = PosInfInterval!Date(Date(2010, 7, 4));
1922 immutable iPosInfInterval = PosInfInterval!Date(Date(2010, 7, 4));
1923 auto negInfInterval = NegInfInterval!Date(Date(2012, 1, 7));
1924 const cNegInfInterval = NegInfInterval!Date(Date(2012, 1, 7));
1925 immutable iNegInfInterval = NegInfInterval!Date(Date(2012, 1, 7));
1955 assert(!Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).isBefore(
1956 Interval!Date(Date(1990, 7, 6), Date(2000, 8, 2))));
1957 assert(!Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).isBefore(
1958 Interval!Date(Date(1999, 1, 12), Date(2011, 9, 17))));
1959 assert(Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).isBefore(
1960 Interval!Date(Date(2012, 3, 1), Date(2013, 5, 1))));
1962 assert(!Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).isBefore(PosInfInterval!Date(Date(1999, 5, 4))));
1963 assert(Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).isBefore(PosInfInterval!Date(Date(2013, 3, 7))));
1965 assert(!Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).isBefore(NegInfInterval!Date(Date(1996, 5, 4))));
1973 auto interval = Interval!Date(Date(2010, 7, 4), Date(2012, 1, 7));
1975 assertThrown!DateTimeException(Interval!Date(Date(2010, 7, 4), dur!"days"(0)).isAfter(Date(2010, 7, 4)));
1977 assert(interval.isAfter(Date(2009, 7, 4)));
1978 assert(interval.isAfter(Date(2010, 7, 3)));
1979 assert(!interval.isAfter(Date(2010, 7, 4)));
1980 assert(!interval.isAfter(Date(2010, 7, 5)));
1981 assert(!interval.isAfter(Date(2011, 7, 1)));
1982 assert(!interval.isAfter(Date(2012, 1, 6)));
1983 assert(!interval.isAfter(Date(2012, 1, 7)));
1984 assert(!interval.isAfter(Date(2012, 1, 8)));
1985 assert(!interval.isAfter(Date(2013, 1, 7)));
1987 const cdate = Date(2010, 7, 6);
1988 const cInterval = Interval!Date(Date(2010, 7, 4), Date(2012, 1, 7));
1989 immutable iInterval = Interval!Date(Date(2010, 7, 4), Date(2012, 1, 7));
1995 assert(Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).isAfter(Date(1994, 12, 24)));
1996 assert(!Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).isAfter(Date(2000, 1, 5)));
1997 assert(!Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).isAfter(Date(2012, 3, 1)));
2005 auto interval = Interval!Date(Date(2010, 7, 4), Date(2012, 1, 7));
2007 assertThrown!DateTimeException(interval.isAfter(Interval!Date(Date(2010, 7, 4), dur!"days"(0))));
2008 assertThrown!DateTimeException(Interval!Date(Date(2010, 7, 4), dur!"days"(0)).isAfter(interval));
2009 assertThrown!DateTimeException(Interval!Date(Date(2010, 7, 4), dur!"days"(0)).isAfter(
2010 Interval!Date(Date(2010, 7, 4), dur!"days"(0))));
2013 assert(interval.isAfter(Interval!Date(Date(2010, 7, 1), Date(2010, 7, 3))));
2014 assert(!interval.isAfter(Interval!Date(Date(2010, 7, 1), Date(2013, 7, 3))));
2015 assert(interval.isAfter(Interval!Date(Date(2010, 7, 3), Date(2010, 7, 4))));
2016 assert(!interval.isAfter(Interval!Date(Date(2010, 7, 3), Date(2010, 7, 5))));
2017 assert(!interval.isAfter(Interval!Date(Date(2010, 7, 3), Date(2012, 1, 7))));
2018 assert(!interval.isAfter(Interval!Date(Date(2010, 7, 3), Date(2012, 1, 8))));
2019 assert(!interval.isAfter(Interval!Date(Date(2010, 7, 5), Date(2012, 1, 6))));
2020 assert(!interval.isAfter(Interval!Date(Date(2010, 7, 5), Date(2012, 1, 7))));
2021 assert(!interval.isAfter(Interval!Date(Date(2012, 1, 6), Date(2012, 1, 7))));
2022 assert(!interval.isAfter(Interval!Date(Date(2012, 1, 6), Date(2012, 1, 8))));
2023 assert(!interval.isAfter(Interval!Date(Date(2012, 1, 7), Date(2012, 1, 8))));
2024 assert(!interval.isAfter(Interval!Date(Date(2012, 1, 8), Date(2012, 1, 9))));
2026 assert(!Interval!Date(Date(2010, 7, 1), Date(2010, 7, 3)).isAfter(interval));
2027 assert(!Interval!Date(Date(2010, 7, 1), Date(2013, 7, 3)).isAfter(interval));
2028 assert(!Interval!Date(Date(2010, 7, 3), Date(2010, 7, 4)).isAfter(interval));
2029 assert(!Interval!Date(Date(2010, 7, 3), Date(2010, 7, 5)).isAfter(interval));
2030 assert(!Interval!Date(Date(2010, 7, 3), Date(2012, 1, 7)).isAfter(interval));
2031 assert(!Interval!Date(Date(2010, 7, 3), Date(2012, 1, 8)).isAfter(interval));
2032 assert(!Interval!Date(Date(2010, 7, 5), Date(2012, 1, 6)).isAfter(interval));
2033 assert(!Interval!Date(Date(2010, 7, 5), Date(2012, 1, 7)).isAfter(interval));
2034 assert(!Interval!Date(Date(2012, 1, 6), Date(2012, 1, 7)).isAfter(interval));
2035 assert(!Interval!Date(Date(2012, 1, 6), Date(2012, 1, 8)).isAfter(interval));
2036 assert(Interval!Date(Date(2012, 1, 7), Date(2012, 1, 8)).isAfter(interval));
2037 assert(Interval!Date(Date(2012, 1, 8), Date(2012, 1, 9)).isAfter(interval));
2039 assert(!interval.isAfter(PosInfInterval!Date(Date(2010, 7, 3))));
2040 assert(!interval.isAfter(PosInfInterval!Date(Date(2010, 7, 4))));
2041 assert(!interval.isAfter(PosInfInterval!Date(Date(2010, 7, 5))));
2042 assert(!interval.isAfter(PosInfInterval!Date(Date(2012, 1, 6))));
2043 assert(!interval.isAfter(PosInfInterval!Date(Date(2012, 1, 7))));
2044 assert(!interval.isAfter(PosInfInterval!Date(Date(2012, 1, 8))));
2046 assert(interval.isAfter(NegInfInterval!Date(Date(2010, 7, 3))));
2047 assert(interval.isAfter(NegInfInterval!Date(Date(2010, 7, 4))));
2048 assert(!interval.isAfter(NegInfInterval!Date(Date(2010, 7, 5))));
2049 assert(!interval.isAfter(NegInfInterval!Date(Date(2012, 1, 6))));
2050 assert(!interval.isAfter(NegInfInterval!Date(Date(2012, 1, 7))));
2051 assert(!interval.isAfter(NegInfInterval!Date(Date(2012, 1, 8))));
2053 const cInterval = Interval!Date(Date(2010, 7, 4), Date(2012, 1, 7));
2054 immutable iInterval = Interval!Date(Date(2010, 7, 4), Date(2012, 1, 7));
2055 auto posInfInterval = PosInfInterval!Date(Date(2010, 7, 4));
2056 const cPosInfInterval = PosInfInterval!Date(Date(2010, 7, 4));
2057 immutable iPosInfInterval = PosInfInterval!Date(Date(2010, 7, 4));
2058 auto negInfInterval = NegInfInterval!Date(Date(2012, 1, 7));
2059 const cNegInfInterval = NegInfInterval!Date(Date(2012, 1, 7));
2060 immutable iNegInfInterval = NegInfInterval!Date(Date(2012, 1, 7));
2090 assert(!Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).isAfter(
2091 Interval!Date(Date(1990, 7, 6), Date(2000, 8, 2))));
2092 assert(!Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).isAfter(
2093 Interval!Date(Date(1999, 1, 12), Date(2011, 9, 17))));
2094 assert(Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).isAfter(
2095 Interval!Date(Date(1989, 3, 1), Date(1996, 1, 2))));
2097 assert(!Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).isAfter(PosInfInterval!Date(Date(1999, 5, 4))));
2099 assert(Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).isAfter(NegInfInterval!Date(Date(1996, 1, 2))));
2107 auto interval = Interval!Date(Date(2010, 7, 4), Date(2012, 1, 7));
2109 assertThrown!DateTimeException(interval.intersects(Interval!Date(Date(2010, 7, 4), dur!"days"(0))));
2110 assertThrown!DateTimeException(Interval!Date(Date(2010, 7, 4), dur!"days"(0)).intersects(interval));
2111 assertThrown!DateTimeException(Interval!Date(Date(2010, 7, 4), dur!"days"(0)).intersects(
2112 Interval!Date(Date(2010, 7, 4), dur!"days"(0))));
2115 assert(!interval.intersects(Interval!Date(Date(2010, 7, 1), Date(2010, 7, 3))));
2116 assert(interval.intersects(Interval!Date(Date(2010, 7, 1), Date(2013, 7, 3))));
2117 assert(!interval.intersects(Interval!Date(Date(2010, 7, 3), Date(2010, 7, 4))));
2118 assert(interval.intersects(Interval!Date(Date(2010, 7, 3), Date(2010, 7, 5))));
2119 assert(interval.intersects(Interval!Date(Date(2010, 7, 3), Date(2012, 1, 7))));
2120 assert(interval.intersects(Interval!Date(Date(2010, 7, 3), Date(2012, 1, 8))));
2121 assert(interval.intersects(Interval!Date(Date(2010, 7, 5), Date(2012, 1, 6))));
2122 assert(interval.intersects(Interval!Date(Date(2010, 7, 5), Date(2012, 1, 7))));
2123 assert(interval.intersects(Interval!Date(Date(2012, 1, 6), Date(2012, 1, 7))));
2124 assert(interval.intersects(Interval!Date(Date(2012, 1, 6), Date(2012, 1, 8))));
2125 assert(!interval.intersects(Interval!Date(Date(2012, 1, 7), Date(2012, 1, 8))));
2126 assert(!interval.intersects(Interval!Date(Date(2012, 1, 8), Date(2012, 1, 9))));
2128 assert(!Interval!Date(Date(2010, 7, 1), Date(2010, 7, 3)).intersects(interval));
2129 assert(Interval!Date(Date(2010, 7, 1), Date(2013, 7, 3)).intersects(interval));
2130 assert(!Interval!Date(Date(2010, 7, 3), Date(2010, 7, 4)).intersects(interval));
2131 assert(Interval!Date(Date(2010, 7, 3), Date(2010, 7, 5)).intersects(interval));
2132 assert(Interval!Date(Date(2010, 7, 3), Date(2012, 1, 7)).intersects(interval));
2133 assert(Interval!Date(Date(2010, 7, 3), Date(2012, 1, 8)).intersects(interval));
2134 assert(Interval!Date(Date(2010, 7, 5), Date(2012, 1, 6)).intersects(interval));
2135 assert(Interval!Date(Date(2010, 7, 5), Date(2012, 1, 7)).intersects(interval));
2136 assert(Interval!Date(Date(2012, 1, 6), Date(2012, 1, 7)).intersects(interval));
2137 assert(Interval!Date(Date(2012, 1, 6), Date(2012, 1, 8)).intersects(interval));
2138 assert(!Interval!Date(Date(2012, 1, 7), Date(2012, 1, 8)).intersects(interval));
2139 assert(!Interval!Date(Date(2012, 1, 8), Date(2012, 1, 9)).intersects(interval));
2141 assert(interval.intersects(PosInfInterval!Date(Date(2010, 7, 3))));
2142 assert(interval.intersects(PosInfInterval!Date(Date(2010, 7, 4))));
2143 assert(interval.intersects(PosInfInterval!Date(Date(2010, 7, 5))));
2144 assert(interval.intersects(PosInfInterval!Date(Date(2012, 1, 6))));
2145 assert(!interval.intersects(PosInfInterval!Date(Date(2012, 1, 7))));
2146 assert(!interval.intersects(PosInfInterval!Date(Date(2012, 1, 8))));
2148 assert(!interval.intersects(NegInfInterval!Date(Date(2010, 7, 3))));
2149 assert(!interval.intersects(NegInfInterval!Date(Date(2010, 7, 4))));
2150 assert(interval.intersects(NegInfInterval!Date(Date(2010, 7, 5))));
2151 assert(interval.intersects(NegInfInterval!Date(Date(2012, 1, 6))));
2152 assert(interval.intersects(NegInfInterval!Date(Date(2012, 1, 7))));
2153 assert(interval.intersects(NegInfInterval!Date(Date(2012, 1, 8))));
2155 const cInterval = Interval!Date(Date(2010, 7, 4), Date(2012, 1, 7));
2156 immutable iInterval = Interval!Date(Date(2010, 7, 4), Date(2012, 1, 7));
2157 auto posInfInterval = PosInfInterval!Date(Date(2010, 7, 4));
2158 const cPosInfInterval = PosInfInterval!Date(Date(2010, 7, 4));
2159 immutable iPosInfInterval = PosInfInterval!Date(Date(2010, 7, 4));
2160 auto negInfInterval = NegInfInterval!Date(Date(2012, 1, 7));
2161 const cNegInfInterval = NegInfInterval!Date(Date(2012, 1, 7));
2162 immutable iNegInfInterval = NegInfInterval!Date(Date(2012, 1, 7));
2192 assert(Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).intersects(
2193 Interval!Date(Date(1990, 7, 6), Date(2000, 8, 2))));
2194 assert(Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).intersects(
2195 Interval!Date(Date(1999, 1, 12), Date(2011, 9, 17))));
2196 assert(!Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).intersects(
2197 Interval!Date(Date(1989, 3, 1), Date(1996, 1, 2))));
2199 assert(Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).intersects(PosInfInterval!Date(Date(1999, 5, 4))));
2200 assert(!Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).intersects(PosInfInterval!Date(Date(2012, 3, 1))));
2202 assert(!Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).intersects(NegInfInterval!Date(Date(1996, 1, 2))));
2203 assert(Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).intersects(NegInfInterval!Date(Date(2000, 1, 2))));
2211 auto interval = Interval!Date(Date(2010, 7, 4), Date(2012, 1, 7));
2213 assertThrown!DateTimeException(interval.intersection(Interval!Date(Date(2010, 7, 4), dur!"days"(0))));
2214 assertThrown!DateTimeException(Interval!Date(Date(2010, 7, 4), dur!"days"(0)).intersection(interval));
2215 assertThrown!DateTimeException(Interval!Date(Date(2010, 7, 4), dur!"days"(0)).intersection(
2216 Interval!Date(Date(2010, 7, 4), dur!"days"(0))));
2218 assertThrown!DateTimeException(interval.intersection(Interval!Date(Date(2010, 7, 1), Date(2010, 7, 3))));
2219 assertThrown!DateTimeException(interval.intersection(Interval!Date(Date(2010, 7, 3), Date(2010, 7, 4))));
2220 assertThrown!DateTimeException(interval.intersection(Interval!Date(Date(2012, 1, 7), Date(2012, 1, 8))));
2221 assertThrown!DateTimeException(interval.intersection(Interval!Date(Date(2012, 1, 8), Date(2012, 1, 9))));
2223 assertThrown!DateTimeException(Interval!Date(Date(2010, 7, 1), Date(2010, 7, 3)).intersection(interval));
2224 assertThrown!DateTimeException(Interval!Date(Date(2010, 7, 3), Date(2010, 7, 4)).intersection(interval));
2225 assertThrown!DateTimeException(Interval!Date(Date(2012, 1, 7), Date(2012, 1, 8)).intersection(interval));
2226 assertThrown!DateTimeException(Interval!Date(Date(2012, 1, 8), Date(2012, 1, 9)).intersection(interval));
2228 assertThrown!DateTimeException(interval.intersection(PosInfInterval!Date(Date(2012, 1, 7))));
2229 assertThrown!DateTimeException(interval.intersection(PosInfInterval!Date(Date(2012, 1, 8))));
2231 assertThrown!DateTimeException(interval.intersection(NegInfInterval!Date(Date(2010, 7, 3))));
2232 assertThrown!DateTimeException(interval.intersection(NegInfInterval!Date(Date(2010, 7, 4))));
2235 assert(interval.intersection(Interval!Date(Date(2010, 7, 1), Date(2013, 7, 3))) ==
2236 Interval!Date(Date(2010, 7, 4), Date(2012, 1, 7)));
2237 assert(interval.intersection(Interval!Date(Date(2010, 7, 3), Date(2010, 7, 5))) ==
2238 Interval!Date(Date(2010, 7, 4), Date(2010, 7, 5)));
2239 assert(interval.intersection(Interval!Date(Date(2010, 7, 3), Date(2012, 1, 7))) ==
2240 Interval!Date(Date(2010, 7, 4), Date(2012, 1, 7)));
2241 assert(interval.intersection(Interval!Date(Date(2010, 7, 3), Date(2012, 1, 8))) ==
2242 Interval!Date(Date(2010, 7, 4), Date(2012, 1, 7)));
2243 assert(interval.intersection(Interval!Date(Date(2010, 7, 5), Date(2012, 1, 6))) ==
2244 Interval!Date(Date(2010, 7, 5), Date(2012, 1, 6)));
2245 assert(interval.intersection(Interval!Date(Date(2010, 7, 5), Date(2012, 1, 7))) ==
2246 Interval!Date(Date(2010, 7, 5), Date(2012, 1, 7)));
2247 assert(interval.intersection(Interval!Date(Date(2012, 1, 6), Date(2012, 1, 7))) ==
2248 Interval!Date(Date(2012, 1, 6), Date(2012, 1, 7)));
2249 assert(interval.intersection(Interval!Date(Date(2012, 1, 6), Date(2012, 1, 8))) ==
2250 Interval!Date(Date(2012, 1, 6), Date(2012, 1, 7)));
2252 assert(Interval!Date(Date(2010, 7, 1), Date(2013, 7, 3)).intersection(interval) ==
2253 Interval!Date(Date(2010, 7, 4), Date(2012, 1, 7)));
2254 assert(Interval!Date(Date(2010, 7, 3), Date(2010, 7, 5)).intersection(interval) ==
2255 Interval!Date(Date(2010, 7, 4), Date(2010, 7, 5)));
2256 assert(Interval!Date(Date(2010, 7, 3), Date(2012, 1, 7)).intersection(interval) ==
2257 Interval!Date(Date(2010, 7, 4), Date(2012, 1, 7)));
2258 assert(Interval!Date(Date(2010, 7, 3), Date(2012, 1, 8)).intersection(interval) ==
2259 Interval!Date(Date(2010, 7, 4), Date(2012, 1, 7)));
2260 assert(Interval!Date(Date(2010, 7, 5), Date(2012, 1, 6)).intersection(interval) ==
2261 Interval!Date(Date(2010, 7, 5), Date(2012, 1, 6)));
2262 assert(Interval!Date(Date(2010, 7, 5), Date(2012, 1, 7)).intersection(interval) ==
2263 Interval!Date(Date(2010, 7, 5), Date(2012, 1, 7)));
2264 assert(Interval!Date(Date(2012, 1, 6), Date(2012, 1, 7)).intersection(interval) ==
2265 Interval!Date(Date(2012, 1, 6), Date(2012, 1, 7)));
2266 assert(Interval!Date(Date(2012, 1, 6), Date(2012, 1, 8)).intersection(interval) ==
2267 Interval!Date(Date(2012, 1, 6), Date(2012, 1, 7)));
2269 assert(interval.intersection(PosInfInterval!Date(Date(2010, 7, 3))) ==
2270 Interval!Date(Date(2010, 7, 4), Date(2012, 1, 7)));
2271 assert(interval.intersection(PosInfInterval!Date(Date(2010, 7, 4))) ==
2272 Interval!Date(Date(2010, 7, 4), Date(2012, 1, 7)));
2273 assert(interval.intersection(PosInfInterval!Date(Date(2010, 7, 5))) ==
2274 Interval!Date(Date(2010, 7, 5), Date(2012, 1, 7)));
2275 assert(interval.intersection(PosInfInterval!Date(Date(2012, 1, 6))) ==
2276 Interval!Date(Date(2012, 1, 6), Date(2012, 1, 7)));
2278 assert(interval.intersection(NegInfInterval!Date(Date(2010, 7, 5))) ==
2279 Interval!Date(Date(2010, 7, 4), Date(2010, 7, 5)));
2280 assert(interval.intersection(NegInfInterval!Date(Date(2012, 1, 6))) ==
2281 Interval!Date(Date(2010, 7, 4), Date(2012, 1, 6)));
2282 assert(interval.intersection(NegInfInterval!Date(Date(2012, 1, 7))) ==
2283 Interval!Date(Date(2010, 7, 4), Date(2012, 1, 7)));
2284 assert(interval.intersection(NegInfInterval!Date(Date(2012, 1, 8))) ==
2285 Interval!Date(Date(2010, 7, 4), Date(2012, 1, 7)));
2287 const cInterval = Interval!Date(Date(2010, 7, 4), Date(2012, 1, 7));
2288 immutable iInterval = Interval!Date(Date(2010, 7, 4), Date(2012, 1, 7));
2289 auto posInfInterval = PosInfInterval!Date(Date(2010, 7, 4));
2290 const cPosInfInterval = PosInfInterval!Date(Date(2010, 7, 4));
2291 immutable iPosInfInterval = PosInfInterval!Date(Date(2010, 7, 4));
2292 auto negInfInterval = NegInfInterval!Date(Date(2012, 1, 7));
2293 const cNegInfInterval = NegInfInterval!Date(Date(2012, 1, 7));
2294 immutable iNegInfInterval = NegInfInterval!Date(Date(2012, 1, 7));
2324 assert(Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).intersection(
2325 Interval!Date(Date(1990, 7, 6), Date(2000, 8, 2))) ==
2326 Interval!Date(Date(1996, 1 , 2), Date(2000, 8, 2)));
2327 assert(Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).intersection(
2328 Interval!Date(Date(1999, 1, 12),Date(2011, 9, 17))) ==
2329 Interval!Date(Date(1999, 1 , 12), Date(2011, 9, 17)));
2331 assert(Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).intersection(
2332 PosInfInterval!Date(Date(1990, 7, 6))) ==
2333 Interval!Date(Date(1996, 1 , 2), Date(2012, 3, 1)));
2334 assert(Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).intersection(
2335 PosInfInterval!Date(Date(1999, 1, 12))) ==
2336 Interval!Date(Date(1999, 1 , 12), Date(2012, 3, 1)));
2338 assert(Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).intersection(
2339 NegInfInterval!Date(Date(1999, 7, 6))) ==
2340 Interval!Date(Date(1996, 1 , 2), Date(1999, 7, 6)));
2341 assert(Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).intersection(
2342 NegInfInterval!Date(Date(2013, 1, 12))) ==
2343 Interval!Date(Date(1996, 1 , 2), Date(2012, 3, 1)));
2351 auto interval = Interval!Date(Date(2010, 7, 4), Date(2012, 1, 7));
2353 static void testInterval(in Interval!Date interval1, in Interval!Date interval2)
2358 assertThrown!DateTimeException(testInterval(interval, Interval!Date(Date(2010, 7, 4), dur!"days"(0))));
2359 assertThrown!DateTimeException(testInterval(Interval!Date(Date(2010, 7, 4), dur!"days"(0)), interval));
2360 assertThrown!DateTimeException(testInterval(Interval!Date(Date(2010, 7, 4), dur!"days"(0)),
2361 Interval!Date(Date(2010, 7, 4), dur!"days"(0))));
2364 assert(!interval.isAdjacent(Interval!Date(Date(2010, 7, 1), Date(2010, 7, 3))));
2365 assert(!interval.isAdjacent(Interval!Date(Date(2010, 7, 1), Date(2013, 7, 3))));
2366 assert(interval.isAdjacent(Interval!Date(Date(2010, 7, 3), Date(2010, 7, 4))));
2367 assert(!interval.isAdjacent(Interval!Date(Date(2010, 7, 3), Date(2010, 7, 5))));
2368 assert(!interval.isAdjacent(Interval!Date(Date(2010, 7, 3), Date(2012, 1, 7))));
2369 assert(!interval.isAdjacent(Interval!Date(Date(2010, 7, 3), Date(2012, 1, 8))));
2370 assert(!interval.isAdjacent(Interval!Date(Date(2010, 7, 5), Date(2012, 1, 6))));
2371 assert(!interval.isAdjacent(Interval!Date(Date(2010, 7, 5), Date(2012, 1, 7))));
2372 assert(!interval.isAdjacent(Interval!Date(Date(2012, 1, 6), Date(2012, 1, 7))));
2373 assert(!interval.isAdjacent(Interval!Date(Date(2012, 1, 6), Date(2012, 1, 8))));
2374 assert(interval.isAdjacent(Interval!Date(Date(2012, 1, 7), Date(2012, 1, 8))));
2375 assert(!interval.isAdjacent(Interval!Date(Date(2012, 1, 8), Date(2012, 1, 9))));
2377 assert(!Interval!Date(Date(2010, 7, 1), Date(2010, 7, 3)).isAdjacent(interval));
2378 assert(!Interval!Date(Date(2010, 7, 1), Date(2013, 7, 3)).isAdjacent(interval));
2379 assert(Interval!Date(Date(2010, 7, 3), Date(2010, 7, 4)).isAdjacent(interval));
2380 assert(!Interval!Date(Date(2010, 7, 3), Date(2010, 7, 5)).isAdjacent(interval));
2381 assert(!Interval!Date(Date(2010, 7, 3), Date(2012, 1, 7)).isAdjacent(interval));
2382 assert(!Interval!Date(Date(2010, 7, 3), Date(2012, 1, 8)).isAdjacent(interval));
2383 assert(!Interval!Date(Date(2010, 7, 5), Date(2012, 1, 6)).isAdjacent(interval));
2384 assert(!Interval!Date(Date(2010, 7, 5), Date(2012, 1, 7)).isAdjacent(interval));
2385 assert(!Interval!Date(Date(2012, 1, 6), Date(2012, 1, 7)).isAdjacent(interval));
2386 assert(!Interval!Date(Date(2012, 1, 6), Date(2012, 1, 8)).isAdjacent(interval));
2387 assert(Interval!Date(Date(2012, 1, 7), Date(2012, 1, 8)).isAdjacent(interval));
2388 assert(!Interval!Date(Date(2012, 1, 8), Date(2012, 1, 9)).isAdjacent(interval));
2390 assert(!interval.isAdjacent(PosInfInterval!Date(Date(2010, 7, 3))));
2391 assert(!interval.isAdjacent(PosInfInterval!Date(Date(2010, 7, 4))));
2392 assert(!interval.isAdjacent(PosInfInterval!Date(Date(2010, 7, 5))));
2393 assert(!interval.isAdjacent(PosInfInterval!Date(Date(2012, 1, 6))));
2394 assert(interval.isAdjacent(PosInfInterval!Date(Date(2012, 1, 7))));
2395 assert(!interval.isAdjacent(PosInfInterval!Date(Date(2012, 1, 8))));
2397 assert(!interval.isAdjacent(NegInfInterval!Date(Date(2010, 7, 3))));
2398 assert(interval.isAdjacent(NegInfInterval!Date(Date(2010, 7, 4))));
2399 assert(!interval.isAdjacent(NegInfInterval!Date(Date(2010, 7, 5))));
2400 assert(!interval.isAdjacent(NegInfInterval!Date(Date(2012, 1, 6))));
2401 assert(!interval.isAdjacent(NegInfInterval!Date(Date(2012, 1, 7))));
2402 assert(!interval.isAdjacent(NegInfInterval!Date(Date(2012, 1, 8))));
2404 const cInterval = Interval!Date(Date(2010, 7, 4), Date(2012, 1, 7));
2405 immutable iInterval = Interval!Date(Date(2010, 7, 4), Date(2012, 1, 7));
2406 auto posInfInterval = PosInfInterval!Date(Date(2010, 7, 4));
2407 const cPosInfInterval = PosInfInterval!Date(Date(2010, 7, 4));
2408 immutable iPosInfInterval = PosInfInterval!Date(Date(2010, 7, 4));
2409 auto negInfInterval = NegInfInterval!Date(Date(2012, 1, 7));
2410 const cNegInfInterval = NegInfInterval!Date(Date(2012, 1, 7));
2411 immutable iNegInfInterval = NegInfInterval!Date(Date(2012, 1, 7));
2441 assert(Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).isAdjacent(
2442 Interval!Date(Date(1990, 7, 6), Date(1996, 1, 2))));
2443 assert(Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).isAdjacent(
2444 Interval!Date(Date(2012, 3, 1), Date(2013, 9, 17))));
2445 assert(!Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).isAdjacent(
2446 Interval!Date(Date(1989, 3, 1), Date(2012, 3, 1))));
2448 assert(!Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).isAdjacent(PosInfInterval!Date(Date(1999, 5, 4))));
2449 assert(Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).isAdjacent(PosInfInterval!Date(Date(2012, 3, 1))));
2451 assert(Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).isAdjacent(NegInfInterval!Date(Date(1996, 1, 2))));
2452 assert(!Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)) .isAdjacent(NegInfInterval!Date(Date(2000, 1, 2))));
2460 auto interval = Interval!Date(Date(2010, 7, 4), Date(2012, 1, 7));
2462 static void testInterval(I)(in Interval!Date interval1, in I interval2)
2467 assertThrown!DateTimeException(testInterval(interval, Interval!Date(Date(2010, 7, 4), dur!"days"(0))));
2468 assertThrown!DateTimeException(testInterval(Interval!Date(Date(2010, 7, 4), dur!"days"(0)), interval));
2469 assertThrown!DateTimeException(testInterval(Interval!Date(Date(2010, 7, 4), dur!"days"(0)),
2470 Interval!Date(Date(2010, 7, 4), dur!"days"(0))));
2472 assertThrown!DateTimeException(testInterval(interval, Interval!Date(Date(2010, 7, 1), Date(2010, 7, 3))));
2473 assertThrown!DateTimeException(testInterval(interval, Interval!Date(Date(2012, 1, 8), Date(2012, 1, 9))));
2475 assertThrown!DateTimeException(testInterval(Interval!Date(Date(2010, 7, 1), Date(2010, 7, 3)), interval));
2476 assertThrown!DateTimeException(testInterval(Interval!Date(Date(2012, 1, 8), Date(2012, 1, 9)), interval));
2478 assertThrown!DateTimeException(testInterval(interval, PosInfInterval!Date(Date(2012, 1, 8))));
2480 assertThrown!DateTimeException(testInterval(interval, NegInfInterval!Date(Date(2010, 7, 3))));
2483 assert(interval.merge(Interval!Date(Date(2010, 7, 1), Date(2013, 7, 3))) ==
2484 Interval!Date(Date(2010, 7, 1), Date(2013, 7, 3)));
2485 assert(interval.merge(Interval!Date(Date(2010, 7, 3), Date(2010, 7, 4))) ==
2486 Interval!Date(Date(2010, 7, 3), Date(2012, 1, 7)));
2487 assert(interval.merge(Interval!Date(Date(2010, 7, 3), Date(2010, 7, 5))) ==
2488 Interval!Date(Date(2010, 7, 3), Date(2012, 1, 7)));
2489 assert(interval.merge(Interval!Date(Date(2010, 7, 3), Date(2012, 1, 7))) ==
2490 Interval!Date(Date(2010, 7, 3), Date(2012, 1, 7)));
2491 assert(interval.merge(Interval!Date(Date(2010, 7, 3), Date(2012, 1, 8))) ==
2492 Interval!Date(Date(2010, 7, 3), Date(2012, 1, 8)));
2493 assert(interval.merge(Interval!Date(Date(2010, 7, 5), Date(2012, 1, 6))) ==
2494 Interval!Date(Date(2010, 7, 4), Date(2012, 1, 7)));
2495 assert(interval.merge(Interval!Date(Date(2010, 7, 5), Date(2012, 1, 7))) ==
2496 Interval!Date(Date(2010, 7, 4), Date(2012, 1, 7)));
2497 assert(interval.merge(Interval!Date(Date(2012, 1, 6), Date(2012, 1, 7))) ==
2498 Interval!Date(Date(2010, 7, 4), Date(2012, 1, 7)));
2499 assert(interval.merge(Interval!Date(Date(2012, 1, 6), Date(2012, 1, 8))) ==
2500 Interval!Date(Date(2010, 7, 4), Date(2012, 1, 8)));
2501 assert(interval.merge(Interval!Date(Date(2012, 1, 7), Date(2012, 1, 8))) ==
2502 Interval!Date(Date(2010, 7, 4), Date(2012, 1, 8)));
2504 assert(Interval!Date(Date(2010, 7, 1), Date(2013, 7, 3)).merge(interval) ==
2505 Interval!Date(Date(2010, 7, 1), Date(2013, 7, 3)));
2506 assert(Interval!Date(Date(2010, 7, 3), Date(2010, 7, 4)).merge(interval) ==
2507 Interval!Date(Date(2010, 7, 3), Date(2012, 1, 7)));
2508 assert(Interval!Date(Date(2010, 7, 3), Date(2010, 7, 5)).merge(interval) ==
2509 Interval!Date(Date(2010, 7, 3), Date(2012, 1, 7)));
2510 assert(Interval!Date(Date(2010, 7, 3), Date(2012, 1, 7)).merge(interval) ==
2511 Interval!Date(Date(2010, 7, 3), Date(2012, 1, 7)));
2512 assert(Interval!Date(Date(2010, 7, 3), Date(2012, 1, 8)).merge(interval) ==
2513 Interval!Date(Date(2010, 7, 3), Date(2012, 1, 8)));
2514 assert(Interval!Date(Date(2010, 7, 5), Date(2012, 1, 6)).merge(interval) ==
2515 Interval!Date(Date(2010, 7, 4), Date(2012, 1, 7)));
2516 assert(Interval!Date(Date(2010, 7, 5), Date(2012, 1, 7)).merge(interval) ==
2517 Interval!Date(Date(2010, 7, 4), Date(2012, 1, 7)));
2518 assert(Interval!Date(Date(2012, 1, 6), Date(2012, 1, 7)).merge(interval) ==
2519 Interval!Date(Date(2010, 7, 4), Date(2012, 1, 7)));
2520 assert(Interval!Date(Date(2012, 1, 6), Date(2012, 1, 8)).merge(interval) ==
2521 Interval!Date(Date(2010, 7, 4), Date(2012, 1, 8)));
2522 assert(Interval!Date(Date(2012, 1, 7), Date(2012, 1, 8)).merge(interval) ==
2523 Interval!Date(Date(2010, 7, 4), Date(2012, 1, 8)));
2525 assert(interval.merge(PosInfInterval!Date(Date(2010, 7, 3))) ==
2526 PosInfInterval!Date(Date(2010, 7, 3)));
2527 assert(interval.merge(PosInfInterval!Date(Date(2010, 7, 4))) ==
2528 PosInfInterval!Date(Date(2010, 7, 4)));
2529 assert(interval.merge(PosInfInterval!Date(Date(2010, 7, 5))) ==
2530 PosInfInterval!Date(Date(2010, 7, 4)));
2531 assert(interval.merge(PosInfInterval!Date(Date(2012, 1, 6))) ==
2532 PosInfInterval!Date(Date(2010, 7, 4)));
2533 assert(interval.merge(PosInfInterval!Date(Date(2012, 1, 7))) ==
2534 PosInfInterval!Date(Date(2010, 7, 4)));
2536 assert(interval.merge(NegInfInterval!Date(Date(2010, 7, 4))) ==
2537 NegInfInterval!Date(Date(2012, 1, 7)));
2538 assert(interval.merge(NegInfInterval!Date(Date(2010, 7, 5))) ==
2539 NegInfInterval!Date(Date(2012, 1, 7)));
2540 assert(interval.merge(NegInfInterval!Date(Date(2012, 1, 6))) ==
2541 NegInfInterval!Date(Date(2012, 1, 7)));
2542 assert(interval.merge(NegInfInterval!Date(Date(2012, 1, 7))) ==
2543 NegInfInterval!Date(Date(2012, 1, 7)));
2544 assert(interval.merge(NegInfInterval!Date(Date(2012, 1, 8))) ==
2545 NegInfInterval!Date(Date(2012, 1, 8)));
2547 const cInterval = Interval!Date(Date(2010, 7, 4), Date(2012, 1, 7));
2548 immutable iInterval = Interval!Date(Date(2010, 7, 4), Date(2012, 1, 7));
2549 auto posInfInterval = PosInfInterval!Date(Date(2010, 7, 4));
2550 const cPosInfInterval = PosInfInterval!Date(Date(2010, 7, 4));
2551 immutable iPosInfInterval = PosInfInterval!Date(Date(2010, 7, 4));
2552 auto negInfInterval = NegInfInterval!Date(Date(2012, 1, 7));
2553 const cNegInfInterval = NegInfInterval!Date(Date(2012, 1, 7));
2554 immutable iNegInfInterval = NegInfInterval!Date(Date(2012, 1, 7));
2584 assert(Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).merge(Interval!Date(Date(1990, 7, 6), Date(2000, 8, 2))) ==
2585 Interval!Date(Date(1990, 7 , 6), Date(2012, 3, 1)));
2586 assert(Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).merge(Interval!Date(Date(2012, 3, 1), Date(2013, 5, 7))) ==
2587 Interval!Date(Date(1996, 1 , 2), Date(2013, 5, 7)));
2589 assert(Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).merge(PosInfInterval!Date(Date(1990, 7, 6))) ==
2590 PosInfInterval!Date(Date(1990, 7 , 6)));
2591 assert(Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).merge(PosInfInterval!Date(Date(2012, 3, 1))) ==
2592 PosInfInterval!Date(Date(1996, 1 , 2)));
2594 assert(Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).merge(NegInfInterval!Date(Date(1996, 1, 2))) ==
2595 NegInfInterval!Date(Date(2012, 3 , 1)));
2596 assert(Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).merge(NegInfInterval!Date(Date(2013, 1, 12))) ==
2597 NegInfInterval!Date(Date(2013, 1 , 12)));
2605 auto interval = Interval!Date(Date(2010, 7, 4), Date(2012, 1, 7));
2607 static void testInterval(in Interval!Date interval1, in Interval!Date interval2)
2612 assertThrown!DateTimeException(testInterval(interval, Interval!Date(Date(2010, 7, 4), dur!"days"(0))));
2613 assertThrown!DateTimeException(testInterval(Interval!Date(Date(2010, 7, 4), dur!"days"(0)),interval));
2614 assertThrown!DateTimeException(testInterval(Interval!Date(Date(2010, 7, 4), dur!"days"(0)),
2615 Interval!Date(Date(2010, 7, 4), dur!"days"(0))));
2618 assert(interval.span(Interval!Date(Date(2010, 7, 1), Date(2010, 7, 3))) ==
2619 Interval!Date(Date(2010, 7, 1), Date(2012, 1, 7)));
2620 assert(interval.span(Interval!Date(Date(2010, 7, 1), Date(2013, 7, 3))) ==
2621 Interval!Date(Date(2010, 7, 1), Date(2013, 7, 3)));
2622 assert(interval.span(Interval!Date(Date(2010, 7, 3), Date(2010, 7, 4))) ==
2623 Interval!Date(Date(2010, 7, 3), Date(2012, 1, 7)));
2624 assert(interval.span(Interval!Date(Date(2010, 7, 3), Date(2010, 7, 5))) ==
2625 Interval!Date(Date(2010, 7, 3), Date(2012, 1, 7)));
2626 assert(interval.span(Interval!Date(Date(2010, 7, 3), Date(2012, 1, 7))) ==
2627 Interval!Date(Date(2010, 7, 3), Date(2012, 1, 7)));
2628 assert(interval.span(Interval!Date(Date(2010, 7, 3), Date(2012, 1, 8))) ==
2629 Interval!Date(Date(2010, 7, 3), Date(2012, 1, 8)));
2630 assert(interval.span(Interval!Date(Date(2010, 7, 5), Date(2012, 1, 6))) ==
2631 Interval!Date(Date(2010, 7, 4), Date(2012, 1, 7)));
2632 assert(interval.span(Interval!Date(Date(2010, 7, 5), Date(2012, 1, 7))) ==
2633 Interval!Date(Date(2010, 7, 4), Date(2012, 1, 7)));
2634 assert(interval.span(Interval!Date(Date(2012, 1, 6), Date(2012, 1, 7))) ==
2635 Interval!Date(Date(2010, 7, 4), Date(2012, 1, 7)));
2636 assert(interval.span(Interval!Date(Date(2012, 1, 6), Date(2012, 1, 8))) ==
2637 Interval!Date(Date(2010, 7, 4), Date(2012, 1, 8)));
2638 assert(interval.span(Interval!Date(Date(2012, 1, 7), Date(2012, 1, 8))) ==
2639 Interval!Date(Date(2010, 7, 4), Date(2012, 1, 8)));
2640 assert(interval.span(Interval!Date(Date(2012, 1, 8), Date(2012, 1, 9))) ==
2641 Interval!Date(Date(2010, 7, 4), Date(2012, 1, 9)));
2643 assert(Interval!Date(Date(2010, 7, 1), Date(2010, 7, 3)).span(interval) ==
2644 Interval!Date(Date(2010, 7, 1), Date(2012, 1, 7)));
2645 assert(Interval!Date(Date(2010, 7, 1), Date(2013, 7, 3)).span(interval) ==
2646 Interval!Date(Date(2010, 7, 1), Date(2013, 7, 3)));
2647 assert(Interval!Date(Date(2010, 7, 3), Date(2010, 7, 4)).span(interval) ==
2648 Interval!Date(Date(2010, 7, 3), Date(2012, 1, 7)));
2649 assert(Interval!Date(Date(2010, 7, 3), Date(2010, 7, 5)).span(interval) ==
2650 Interval!Date(Date(2010, 7, 3), Date(2012, 1, 7)));
2651 assert(Interval!Date(Date(2010, 7, 3), Date(2012, 1, 7)).span(interval) ==
2652 Interval!Date(Date(2010, 7, 3), Date(2012, 1, 7)));
2653 assert(Interval!Date(Date(2010, 7, 3), Date(2012, 1, 8)).span(interval) ==
2654 Interval!Date(Date(2010, 7, 3), Date(2012, 1, 8)));
2655 assert(Interval!Date(Date(2010, 7, 5), Date(2012, 1, 6)).span(interval) ==
2656 Interval!Date(Date(2010, 7, 4), Date(2012, 1, 7)));
2657 assert(Interval!Date(Date(2010, 7, 5), Date(2012, 1, 7)).span(interval) ==
2658 Interval!Date(Date(2010, 7, 4), Date(2012, 1, 7)));
2659 assert(Interval!Date(Date(2012, 1, 6), Date(2012, 1, 7)).span(interval) ==
2660 Interval!Date(Date(2010, 7, 4), Date(2012, 1, 7)));
2661 assert(Interval!Date(Date(2012, 1, 6), Date(2012, 1, 8)).span(interval) ==
2662 Interval!Date(Date(2010, 7, 4), Date(2012, 1, 8)));
2663 assert(Interval!Date(Date(2012, 1, 7), Date(2012, 1, 8)).span(interval) ==
2664 Interval!Date(Date(2010, 7, 4), Date(2012, 1, 8)));
2665 assert(Interval!Date(Date(2012, 1, 8), Date(2012, 1, 9)).span(interval) ==
2666 Interval!Date(Date(2010, 7, 4), Date(2012, 1, 9)));
2668 assert(interval.span(PosInfInterval!Date(Date(2010, 7, 3))) == PosInfInterval!Date(Date(2010, 7, 3)));
2669 assert(interval.span(PosInfInterval!Date(Date(2010, 7, 4))) == PosInfInterval!Date(Date(2010, 7, 4)));
2670 assert(interval.span(PosInfInterval!Date(Date(2010, 7, 5))) == PosInfInterval!Date(Date(2010, 7, 4)));
2671 assert(interval.span(PosInfInterval!Date(Date(2012, 1, 6))) == PosInfInterval!Date(Date(2010, 7, 4)));
2672 assert(interval.span(PosInfInterval!Date(Date(2012, 1, 7))) == PosInfInterval!Date(Date(2010, 7, 4)));
2673 assert(interval.span(PosInfInterval!Date(Date(2012, 1, 8))) == PosInfInterval!Date(Date(2010, 7, 4)));
2675 assert(interval.span(NegInfInterval!Date(Date(2010, 7, 3))) == NegInfInterval!Date(Date(2012, 1, 7)));
2676 assert(interval.span(NegInfInterval!Date(Date(2010, 7, 4))) == NegInfInterval!Date(Date(2012, 1, 7)));
2677 assert(interval.span(NegInfInterval!Date(Date(2010, 7, 5))) == NegInfInterval!Date(Date(2012, 1, 7)));
2678 assert(interval.span(NegInfInterval!Date(Date(2012, 1, 6))) == NegInfInterval!Date(Date(2012, 1, 7)));
2679 assert(interval.span(NegInfInterval!Date(Date(2012, 1, 7))) == NegInfInterval!Date(Date(2012, 1, 7)));
2680 assert(interval.span(NegInfInterval!Date(Date(2012, 1, 8))) == NegInfInterval!Date(Date(2012, 1, 8)));
2682 const cInterval = Interval!Date(Date(2010, 7, 4), Date(2012, 1, 7));
2683 immutable iInterval = Interval!Date(Date(2010, 7, 4), Date(2012, 1, 7));
2684 auto posInfInterval = PosInfInterval!Date(Date(2010, 7, 4));
2685 const cPosInfInterval = PosInfInterval!Date(Date(2010, 7, 4));
2686 immutable iPosInfInterval = PosInfInterval!Date(Date(2010, 7, 4));
2687 auto negInfInterval = NegInfInterval!Date(Date(2012, 1, 7));
2688 const cNegInfInterval = NegInfInterval!Date(Date(2012, 1, 7));
2689 immutable iNegInfInterval = NegInfInterval!Date(Date(2012, 1, 7));
2719 assert(Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).span(Interval!Date(Date(1990, 7, 6), Date(1991, 1, 8))) ==
2720 Interval!Date(Date(1990, 7 , 6), Date(2012, 3, 1)));
2721 assert(Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).span(Interval!Date(Date(2012, 3, 1), Date(2013, 5, 7))) ==
2722 Interval!Date(Date(1996, 1 , 2), Date(2013, 5, 7)));
2724 assert(Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).span(PosInfInterval!Date(Date(1990, 7, 6))) ==
2725 PosInfInterval!Date(Date(1990, 7 , 6)));
2726 assert(Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).span(PosInfInterval!Date(Date(2050, 1, 1))) ==
2727 PosInfInterval!Date(Date(1996, 1 , 2)));
2729 assert(Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).span(NegInfInterval!Date(Date(1602, 5, 21))) ==
2730 NegInfInterval!Date(Date(2012, 3 , 1)));
2731 assert(Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).span(NegInfInterval!Date(Date(2013, 1, 12))) ==
2732 NegInfInterval!Date(Date(2013, 1 , 12)));
2740 auto interval = Interval!Date(Date(2010, 7, 4), Date(2012, 1, 7));
2742 static void testIntervalFail(Interval!Date interval, in Duration duration)
2747 assertThrown!DateTimeException(testIntervalFail(Interval!Date(Date(2010, 7, 4), dur!"days"(0)), dur!"days"(1)));
2755 testInterval(interval, dur!"days"(22), Interval!Date(Date(2010, 7, 26), Date(2012, 1, 29)));
2756 testInterval(interval, dur!"days"(-22), Interval!Date(Date(2010, 6, 12), Date(2011, 12, 16)));
2758 const cInterval = Interval!Date(Date(2010, 7, 4), Date(2012, 1, 7));
2759 immutable iInterval = Interval!Date(Date(2010, 7, 4), Date(2012, 1, 7));
2764 auto interval1 = Interval!Date(Date(1996, 1, 2), Date(2012, 4, 5));
2765 auto interval2 = Interval!Date(Date(1996, 1, 2), Date(2012, 4, 5));
2768 assert(interval1 == Interval!Date(Date(1996, 2, 21), Date(2012, 5, 25)));
2771 assert(interval2 == Interval!Date(Date(1995, 11, 13), Date(2012, 2, 15)));
2780 auto interval = Interval!Date(Date(2010, 7, 4), Date(2012, 1, 7));
2782 static void testIntervalFail(Interval!Date interval, int years, int months)
2787 assertThrown!DateTimeException(testIntervalFail(Interval!Date(Date(2010, 7, 4), dur!"days"(0)), 1, 0));
2796 testInterval(interval, 5, 0, AllowDayOverflow.yes, Interval!Date(Date(2015, 7, 4), Date(2017, 1, 7)));
2797 testInterval(interval, -5, 0, AllowDayOverflow.yes, Interval!Date(Date(2005, 7, 4), Date(2007, 1, 7)));
2799 auto interval2 = Interval!Date(Date(2000, 1, 29), Date(2010, 5, 31));
2801 testInterval(interval2, 1, 1, AllowDayOverflow.yes, Interval!Date(Date(2001, 3, 1), Date(2011, 7, 1)));
2802 testInterval(interval2, 1, -1, AllowDayOverflow.yes, Interval!Date(Date(2000, 12, 29), Date(2011, 5, 1)));
2803 testInterval(interval2, -1, -1, AllowDayOverflow.yes, Interval!Date(Date(1998, 12, 29), Date(2009, 5, 1)));
2804 testInterval(interval2, -1, 1, AllowDayOverflow.yes, Interval!Date(Date(1999, 3, 1), Date(2009, 7, 1)));
2806 testInterval(interval2, 1, 1, AllowDayOverflow.no, Interval!Date(Date(2001, 2, 28), Date(2011, 6, 30)));
2807 testInterval(interval2, 1, -1, AllowDayOverflow.no, Interval!Date(Date(2000, 12, 29), Date(2011, 4, 30)));
2808 testInterval(interval2, -1, -1, AllowDayOverflow.no, Interval!Date(Date(1998, 12, 29), Date(2009, 4, 30)));
2809 testInterval(interval2, -1, 1, AllowDayOverflow.no, Interval!Date(Date(1999, 2, 28), Date(2009, 6, 30)));
2812 const cInterval = Interval!Date(Date(2010, 7, 4), Date(2012, 1, 7));
2813 immutable iInterval = Interval!Date(Date(2010, 7, 4), Date(2012, 1, 7));
2818 auto interval1 = Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1));
2819 auto interval2 = Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1));
2822 assert(interval1 == Interval!Date(Date(1998, 1, 2), Date(2014, 3, 1)));
2825 assert(interval2 == Interval!Date(Date(1994, 1, 2), Date(2010, 3, 1)));
2833 auto interval = Interval!Date(Date(2000, 7, 4), Date(2012, 1, 7));
2840 assertThrown!DateTimeException(testIntervalFail(Interval!Date(Date(2010, 7, 4), dur!"days"(0)), dur!"days"(1)));
2841 assertThrown!DateTimeException(testIntervalFail(Interval!Date(Date(2010, 7, 4), Date(2010, 7, 5)), dur!"days"(-5)));
2849 testInterval(interval, dur!"days"(22), Interval!Date(Date(2000, 6, 12), Date(2012, 1, 29)));
2850 testInterval(interval, dur!"days"(-22), Interval!Date(Date(2000, 7, 26), Date(2011, 12, 16)));
2852 const cInterval = Interval!Date(Date(2010, 7, 4), Date(2012, 1, 7));
2853 immutable iInterval = Interval!Date(Date(2010, 7, 4), Date(2012, 1, 7));
2858 auto interval1 = Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1));
2859 auto interval2 = Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1));
2862 assert(interval1 == Interval!Date(Date(1995, 12, 31), Date(2012, 3, 3)));
2865 assert(interval2 == Interval!Date(Date(1996, 1, 4), Date(2012, 2, 28)));
2874 auto interval = Interval!Date(Date(2000, 7, 4), Date(2012, 1, 7));
2876 static void testIntervalFail(Interval!Date interval, int years, int months)
2881 assertThrown!DateTimeException(testIntervalFail(Interval!Date(Date(2010, 7, 4), dur!"days"(0)), 1, 0));
2882 assertThrown!DateTimeException(testIntervalFail(Interval!Date(Date(2010, 7, 4), Date(2012, 1, 7)), -5, 0));
2892 Interval!Date(Date(1995, 7, 4), Date(2017, 1, 7)));
2894 Interval!Date(Date(2005, 7, 4), Date(2007, 1, 7)));
2897 Interval!Date(Date(2000, 7, 4), Date(2017, 1, 7)));
2899 Interval!Date(Date(2000, 7, 4), Date(2007, 1, 7)));
2902 Interval!Date(Date(1995, 7, 4), Date(2012, 1, 7)));
2904 Interval!Date(Date(2005, 7, 4), Date(2012, 1, 7)));
2906 auto interval2 = Interval!Date(Date(2000, 1, 29), Date(2010, 5, 31));
2909 Interval!Date(Date(1998, 12, 29), Date(2011, 7, 1)));
2911 Interval!Date(Date(1999, 3, 1), Date(2011, 5, 1)));
2913 Interval!Date(Date(2001, 3, 1), Date(2009, 5, 1)));
2915 Interval!Date(Date(2000, 12, 29), Date(2009, 7, 1)));
2918 Interval!Date(Date(1998, 12, 29), Date(2011, 6, 30)));
2920 Interval!Date(Date(1999, 2, 28), Date(2011, 4, 30)));
2922 Interval!Date(Date(2001, 2, 28), Date(2009, 4, 30)));
2924 Interval!Date(Date(2000, 12, 29), Date(2009, 6, 30)));
2927 Interval!Date(Date(2000, 1, 29), Date(2011, 7, 1)));
2929 Interval!Date(Date(2000, 1, 29), Date(2011, 5, 1)));
2931 Interval!Date(Date(2000, 1, 29), Date(2009, 5, 1)));
2933 Interval!Date(Date(2000, 1, 29), Date(2009, 7, 1)));
2936 Interval!Date(Date(2000, 1, 29), Date(2011, 6, 30)));
2938 Interval!Date(Date(2000, 1, 29), Date(2011, 4, 30)));
2940 Interval!Date(Date(2000, 1, 29), Date(2009, 4, 30)));
2942 Interval!Date(Date(2000, 1, 29), Date(2009, 6, 30)));
2945 Interval!Date(Date(1998, 12, 29), Date(2010, 5, 31)));
2947 Interval!Date(Date(1999, 3, 1), Date(2010, 5, 31)));
2949 Interval!Date(Date(2001, 3, 1), Date(2010, 5, 31)));
2951 Interval!Date(Date(2000, 12, 29), Date(2010, 5, 31)));
2954 Interval!Date(Date(1998, 12, 29), Date(2010, 5, 31)));
2956 Interval!Date(Date(1999, 2, 28), Date(2010, 5, 31)));
2958 Interval!Date(Date(2001, 2, 28), Date(2010, 5, 31)));
2960 Interval!Date(Date(2000, 12, 29), Date(2010, 5, 31)));
2963 const cInterval = Interval!Date(Date(2010, 7, 4), Date(2012, 1, 7));
2964 immutable iInterval = Interval!Date(Date(2010, 7, 4), Date(2012, 1, 7));
2969 auto interval1 = Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1));
2970 auto interval2 = Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1));
2973 assert(interval1 == Interval!Date(Date(1994, 1, 2), Date(2014, 3, 1)));
2976 assert(interval2 == Interval!Date(Date(1998, 1, 2), Date(2010, 3, 1)));
2985 auto interval = Interval!Date(Date(2010, 9, 19), Date(2010, 9, 21));
2987 static void testInterval1(Interval!Date interval)
2989 interval.fwdRange(everyDayOfWeek!Date(DayOfWeek.fri));
2992 assertThrown!DateTimeException(testInterval1(Interval!Date(Date(2010, 7, 4), dur!"days"(0))));
2994 static void testInterval2(Interval!Date interval)
2996 interval.fwdRange(everyDayOfWeek!(Date, Direction.bwd)(DayOfWeek.fri)).popFront();
3001 assert(!interval.fwdRange(everyDayOfWeek!Date(DayOfWeek.fri)).empty);
3002 assert(interval.fwdRange(everyDayOfWeek!Date(DayOfWeek.fri), PopFirst.yes).empty);
3004 assert(Interval!Date(Date(2010, 9, 12), Date(2010, 10, 1)).fwdRange(everyDayOfWeek!Date(DayOfWeek.fri)).front ==
3005 Date(2010, 9, 12));
3007 assert(Interval!Date(Date(2010, 9, 12), Date(2010, 10, 1)).fwdRange(
3008 everyDayOfWeek!Date(DayOfWeek.fri), PopFirst.yes).front == Date(2010, 9, 17));
3013 auto interval = Interval!Date(Date(2010, 9, 1), Date(2010, 9, 9));
3014 auto func = delegate (in Date date)
3022 // An odd day. Using PopFirst.yes would have made this Date(2010, 9, 2).
3023 assert(range.front == Date(2010, 9, 1));
3026 assert(range.front == Date(2010, 9, 2));
3029 assert(range.front == Date(2010, 9, 4));
3032 assert(range.front == Date(2010, 9, 6));
3035 assert(range.front == Date(2010, 9, 8));
3041 const cInterval = Interval!Date(Date(2010, 7, 4), Date(2012, 1, 7));
3042 immutable iInterval = Interval!Date(Date(2010, 7, 4), Date(2012, 1, 7));
3043 assert(!cInterval.fwdRange(everyDayOfWeek!Date(DayOfWeek.fri)).empty);
3044 assert(!iInterval.fwdRange(everyDayOfWeek!Date(DayOfWeek.fri)).empty);
3053 auto interval = Interval!Date(Date(2010, 9, 19), Date(2010, 9, 21));
3055 static void testInterval1(Interval!Date interval)
3057 interval.bwdRange(everyDayOfWeek!(Date, Direction.bwd)(DayOfWeek.fri));
3060 assertThrown!DateTimeException(testInterval1(Interval!Date(Date(2010, 7, 4), dur!"days"(0))));
3062 static void testInterval2(Interval!Date interval)
3064 interval.bwdRange(everyDayOfWeek!(Date, Direction.fwd)(DayOfWeek.fri)).popFront();
3069 assert(!interval.bwdRange(everyDayOfWeek!(Date, Direction.bwd)(DayOfWeek.fri)).empty);
3070 assert(interval.bwdRange(everyDayOfWeek!(Date, Direction.bwd)(DayOfWeek.fri), PopFirst.yes).empty);
3072 assert(Interval!Date(Date(2010, 9, 19), Date(2010, 10, 1)).bwdRange(
3073 everyDayOfWeek!(Date, Direction.bwd)(DayOfWeek.fri)).front == Date(2010, 10, 1));
3075 assert(Interval!Date(Date(2010, 9, 19), Date(2010, 10, 1)).bwdRange(
3076 everyDayOfWeek!(Date, Direction.bwd)(DayOfWeek.fri), PopFirst.yes).front == Date(2010, 9, 24));
3081 auto interval = Interval!Date(Date(2010, 9, 1), Date(2010, 9, 9));
3082 auto func = delegate (in Date date)
3090 // An odd day. Using PopFirst.yes would have made this Date(2010, 9, 8).
3091 assert(range.front == Date(2010, 9, 9));
3094 assert(range.front == Date(2010, 9, 8));
3097 assert(range.front == Date(2010, 9, 6));
3100 assert(range.front == Date(2010, 9, 4));
3103 assert(range.front == Date(2010, 9, 2));
3109 const cInterval = Interval!Date(Date(2010, 7, 4), Date(2012, 1, 7));
3110 immutable iInterval = Interval!Date(Date(2010, 7, 4), Date(2012, 1, 7));
3111 assert(!cInterval.bwdRange(everyDayOfWeek!Date(DayOfWeek.fri)).empty);
3112 assert(!iInterval.bwdRange(everyDayOfWeek!Date(DayOfWeek.fri)).empty);
3120 assert(Interval!Date(Date(2010, 7, 4), Date(2012, 1, 7)).toString() == "[2010-Jul-04 - 2012-Jan-07)");
3122 const cInterval = Interval!Date(Date(2010, 7, 4), Date(2012, 1, 7));
3123 immutable iInterval = Interval!Date(Date(2010, 7, 4), Date(2012, 1, 7));
3146 auto interval = PosInfInterval!Date(Date(1996, 1, 2));
3182 assert(PosInfInterval!Date(Date(1996, 1, 2)).begin == Date(1996, 1, 2));
3208 assert(!PosInfInterval!Date(Date(1996, 1, 2)).empty);
3222 assert(!PosInfInterval!Date(Date(1996, 1, 2)).contains(Date(1994, 12, 24)));
3223 assert(PosInfInterval!Date(Date(1996, 1, 2)).contains(Date(2000, 1, 5)));
3244 assert(!PosInfInterval!Date(Date(1996, 1, 2)).contains(
3245 Interval!Date(Date(1990, 7, 6), Date(2000, 8, 2))));
3247 assert(PosInfInterval!Date(Date(1996, 1, 2)).contains(
3248 Interval!Date(Date(1999, 1, 12), Date(2011, 9, 17))));
3250 assert(PosInfInterval!Date(Date(1996, 1, 2)).contains(
3251 Interval!Date(Date(1998, 2, 28), Date(2013, 5, 1))));
3269 assert(PosInfInterval!Date(Date(1996, 1, 2)).contains(
3270 PosInfInterval!Date(Date(1999, 5, 4))));
3272 assert(!PosInfInterval!Date(Date(1996, 1, 2)).contains(
3273 PosInfInterval!Date(Date(1995, 7, 2))));
3293 assert(!PosInfInterval!Date(Date(1996, 1, 2)).contains(
3294 NegInfInterval!Date(Date(1996, 5, 4))));
3315 assert(!PosInfInterval!Date(Date(1996, 1, 2)).isBefore(Date(1994, 12, 24)));
3316 assert(!PosInfInterval!Date(Date(1996, 1, 2)).isBefore(Date(2000, 1, 5)));
3342 assert(!PosInfInterval!Date(Date(1996, 1, 2)).isBefore(
3343 Interval!Date(Date(1990, 7, 6), Date(2000, 8, 2))));
3345 assert(!PosInfInterval!Date(Date(1996, 1, 2)).isBefore(
3346 Interval!Date(Date(1999, 1, 12), Date(2011, 9, 17))));
3368 assert(!PosInfInterval!Date(Date(1996, 1, 2)).isBefore(
3369 PosInfInterval!Date(Date(1992, 5, 4))));
3371 assert(!PosInfInterval!Date(Date(1996, 1, 2)).isBefore(
3372 PosInfInterval!Date(Date(2013, 3, 7))));
3393 assert(!PosInfInterval!Date(Date(1996, 1, 2)).isBefore(
3394 NegInfInterval!Date(Date(1996, 5, 4))));
3412 assert(PosInfInterval!Date(Date(1996, 1, 2)).isAfter(Date(1994, 12, 24)));
3413 assert(!PosInfInterval!Date(Date(1996, 1, 2)).isAfter(Date(2000, 1, 5)));
3435 assert(!PosInfInterval!Date(Date(1996, 1, 2)).isAfter(
3436 Interval!Date(Date(1990, 7, 6), Date(2000, 8, 2))));
3438 assert(!PosInfInterval!Date(Date(1996, 1, 2)).isAfter(
3439 Interval!Date(Date(1999, 1, 12), Date(2011, 9, 17))));
3441 assert(PosInfInterval!Date(Date(1996, 1, 2)).isAfter(
3442 Interval!Date(Date(1989, 3, 1), Date(1996, 1, 2))));
3464 assert(!PosInfInterval!Date(Date(1996, 1, 2)).isAfter(
3465 PosInfInterval!Date(Date(1990, 1, 7))));
3467 assert(!PosInfInterval!Date(Date(1996, 1, 2)).isAfter(
3468 PosInfInterval!Date(Date(1999, 5, 4))));
3486 assert(PosInfInterval!Date(Date(1996, 1, 2)).isAfter(
3487 NegInfInterval!Date(Date(1996, 1, 2))));
3489 assert(!PosInfInterval!Date(Date(1996, 1, 2)).isAfter(
3490 NegInfInterval!Date(Date(2000, 7, 1))));
3511 assert(PosInfInterval!Date(Date(1996, 1, 2)).intersects(
3512 Interval!Date(Date(1990, 7, 6), Date(2000, 8, 2))));
3514 assert(PosInfInterval!Date(Date(1996, 1, 2)).intersects(
3515 Interval!Date(Date(1999, 1, 12), Date(2011, 9, 17))));
3517 assert(!PosInfInterval!Date(Date(1996, 1, 2)).intersects(
3518 Interval!Date(Date(1989, 3, 1), Date(1996, 1, 2))));
3540 assert(PosInfInterval!Date(Date(1996, 1, 2)).intersects(
3541 PosInfInterval!Date(Date(1990, 1, 7))));
3543 assert(PosInfInterval!Date(Date(1996, 1, 2)).intersects(
3544 PosInfInterval!Date(Date(1999, 5, 4))));
3562 assert(!PosInfInterval!Date(Date(1996, 1, 2)).intersects(
3563 NegInfInterval!Date(Date(1996, 1, 2))));
3565 assert(PosInfInterval!Date(Date(1996, 1, 2)).intersects(
3566 NegInfInterval!Date(Date(2000, 7, 1))));
3587 assert(PosInfInterval!Date(Date(1996, 1, 2)).intersection(
3588 Interval!Date(Date(1990, 7, 6), Date(2000, 8, 2))) ==
3589 Interval!Date(Date(1996, 1 , 2), Date(2000, 8, 2)));
3591 assert(PosInfInterval!Date(Date(1996, 1, 2)).intersection(
3592 Interval!Date(Date(1999, 1, 12), Date(2011, 9, 17))) ==
3593 Interval!Date(Date(1999, 1 , 12), Date(2011, 9, 17)));
3617 assert(PosInfInterval!Date(Date(1996, 1, 2)).intersection(
3618 PosInfInterval!Date(Date(1990, 7, 6))) ==
3619 PosInfInterval!Date(Date(1996, 1 , 2)));
3621 assert(PosInfInterval!Date(Date(1996, 1, 2)).intersection(
3622 PosInfInterval!Date(Date(1999, 1, 12))) ==
3623 PosInfInterval!Date(Date(1999, 1 , 12)));
3644 assert(PosInfInterval!Date(Date(1996, 1, 2)).intersection(
3645 NegInfInterval!Date(Date(1999, 7, 6))) ==
3646 Interval!Date(Date(1996, 1 , 2), Date(1999, 7, 6)));
3648 assert(PosInfInterval!Date(Date(1996, 1, 2)).intersection(
3649 NegInfInterval!Date(Date(2013, 1, 12))) ==
3650 Interval!Date(Date(1996, 1 , 2), Date(2013, 1, 12)));
3677 assert(PosInfInterval!Date(Date(1996, 1, 2)).isAdjacent(
3678 Interval!Date(Date(1989, 3, 1), Date(1996, 1, 2))));
3680 assert(!PosInfInterval!Date(Date(1999, 1, 12)).isAdjacent(
3681 Interval!Date(Date(1999, 1, 12), Date(2011, 9, 17))));
3703 assert(!PosInfInterval!Date(Date(1996, 1, 2)).isAdjacent(
3704 PosInfInterval!Date(Date(1990, 1, 7))));
3706 assert(!PosInfInterval!Date(Date(1996, 1, 2)).isAdjacent(
3707 PosInfInterval!Date(Date(1996, 1, 2))));
3725 assert(PosInfInterval!Date(Date(1996, 1, 2)).isAdjacent(
3726 NegInfInterval!Date(Date(1996, 1, 2))));
3728 assert(!PosInfInterval!Date(Date(1996, 1, 2)).isAdjacent(
3729 NegInfInterval!Date(Date(2000, 7, 1))));
3757 assert(PosInfInterval!Date(Date(1996, 1, 2)).merge(
3758 Interval!Date(Date(1990, 7, 6), Date(2000, 8, 2))) ==
3759 PosInfInterval!Date(Date(1990, 7 , 6)));
3761 assert(PosInfInterval!Date(Date(1996, 1, 2)).merge(
3762 Interval!Date(Date(1999, 1, 12), Date(2011, 9, 17))) ==
3763 PosInfInterval!Date(Date(1996, 1 , 2)));
3791 assert(PosInfInterval!Date(Date(1996, 1, 2)).merge(
3792 PosInfInterval!Date(Date(1990, 7, 6))) ==
3793 PosInfInterval!Date(Date(1990, 7 , 6)));
3795 assert(PosInfInterval!Date(Date(1996, 1, 2)).merge(
3796 PosInfInterval!Date(Date(1999, 1, 12))) ==
3797 PosInfInterval!Date(Date(1996, 1 , 2)));
3827 assert(PosInfInterval!Date(Date(1996, 1, 2)).span(
3828 Interval!Date(Date(500, 8, 9), Date(1602, 1, 31))) ==
3829 PosInfInterval!Date(Date(500, 8, 9)));
3831 assert(PosInfInterval!Date(Date(1996, 1, 2)).span(
3832 Interval!Date(Date(1990, 7, 6), Date(2000, 8, 2))) ==
3833 PosInfInterval!Date(Date(1990, 7 , 6)));
3835 assert(PosInfInterval!Date(Date(1996, 1, 2)).span(
3836 Interval!Date(Date(1999, 1, 12), Date(2011, 9, 17))) ==
3837 PosInfInterval!Date(Date(1996, 1 , 2)));
3864 assert(PosInfInterval!Date(Date(1996, 1, 2)).span(
3865 PosInfInterval!Date(Date(1990, 7, 6))) ==
3866 PosInfInterval!Date(Date(1990, 7 , 6)));
3868 assert(PosInfInterval!Date(Date(1996, 1, 2)).span(
3869 PosInfInterval!Date(Date(1999, 1, 12))) ==
3870 PosInfInterval!Date(Date(1996, 1 , 2)));
3890 auto interval1 = PosInfInterval!Date(Date(1996, 1, 2));
3891 auto interval2 = PosInfInterval!Date(Date(1996, 1, 2));
3894 assert(interval1 == PosInfInterval!Date(Date(1996, 2, 21)));
3897 assert(interval2 == PosInfInterval!Date(Date(1995, 11, 13)));
3931 auto interval1 = PosInfInterval!Date(Date(1996, 1, 2));
3932 auto interval2 = PosInfInterval!Date(Date(1996, 1, 2));
3935 assert(interval1 == PosInfInterval!Date(Date(1996, 2, 21)));
3938 assert(interval2 == PosInfInterval!Date(Date(1995, 11, 13)));
3963 auto interval1 = PosInfInterval!Date(Date(1996, 1, 2));
3964 auto interval2 = PosInfInterval!Date(Date(1996, 1, 2));
3967 assert(interval1 == PosInfInterval!Date(Date(1995, 12, 31)));
3970 assert(interval2 == PosInfInterval!Date(Date(1996, 1, 4)));
3999 auto interval1 = PosInfInterval!Date(Date(1996, 1, 2));
4000 auto interval2 = PosInfInterval!Date(Date(1996, 1, 2));
4003 assert(interval1 == PosInfInterval!Date(Date(1994, 1, 2)));
4006 assert(interval2 == PosInfInterval!Date(Date(1998, 1, 2)));
4072 auto interval = PosInfInterval!Date(Date(2010, 9, 1));
4073 auto func = delegate (in Date date) //For iterating over even-numbered days.
4082 //An odd day. Using PopFirst.yes would have made this Date(2010, 9, 2).
4083 assert(range.front == Date(2010, 9, 1));
4086 assert(range.front == Date(2010, 9, 2));
4089 assert(range.front == Date(2010, 9, 4));
4092 assert(range.front == Date(2010, 9, 6));
4095 assert(range.front == Date(2010, 9, 8));
4160 PosInfInterval!Date(Date.init);
4166 auto interval = PosInfInterval!Date(Date(1996, 1, 2));
4174 assert(PosInfInterval!Date(Date(1, 1, 1)).begin == Date(1, 1, 1));
4175 assert(PosInfInterval!Date(Date(2010, 1, 1)).begin == Date(2010, 1, 1));
4176 assert(PosInfInterval!Date(Date(1997, 12, 31)).begin == Date(1997, 12, 31));
4178 const cPosInfInterval = PosInfInterval!Date(Date(2010, 7, 4));
4179 immutable iPosInfInterval = PosInfInterval!Date(Date(2010, 7, 4));
4180 assert(cPosInfInterval.begin != Date.init);
4181 assert(iPosInfInterval.begin != Date.init);
4184 assert(PosInfInterval!Date(Date(1996, 1, 2)).begin == Date(1996, 1, 2));
4193 assert(!PosInfInterval!Date(Date(2010, 1, 1)).empty);
4198 const cPosInfInterval = Interval!Date(Date(2010, 7, 4), Date(2012, 1, 7));
4199 immutable iPosInfInterval = Interval!Date(Date(2010, 7, 4), Date(2012, 1, 7));
4204 assert(!PosInfInterval!Date(Date(1996, 1, 2)).empty);
4212 auto posInfInterval = PosInfInterval!Date(Date(2010, 7, 4));
4214 assert(!posInfInterval.contains(Date(2009, 7, 4)));
4215 assert(!posInfInterval.contains(Date(2010, 7, 3)));
4216 assert(posInfInterval.contains(Date(2010, 7, 4)));
4217 assert(posInfInterval.contains(Date(2010, 7, 5)));
4218 assert(posInfInterval.contains(Date(2011, 7, 1)));
4219 assert(posInfInterval.contains(Date(2012, 1, 6)));
4220 assert(posInfInterval.contains(Date(2012, 1, 7)));
4221 assert(posInfInterval.contains(Date(2012, 1, 8)));
4222 assert(posInfInterval.contains(Date(2013, 1, 7)));
4224 const cdate = Date(2010, 7, 6);
4225 const cPosInfInterval = PosInfInterval!Date(Date(2010, 7, 4));
4226 immutable iPosInfInterval = PosInfInterval!Date(Date(2010, 7, 4));
4232 assert(!PosInfInterval!Date(Date(1996, 1, 2)).contains(Date(1994, 12, 24)));
4233 assert(PosInfInterval!Date(Date(1996, 1, 2)).contains(Date(2000, 1, 5)));
4241 auto posInfInterval = PosInfInterval!Date(Date(2010, 7, 4));
4243 static void testInterval(in PosInfInterval!Date posInfInterval, in Interval!Date interval)
4248 assertThrown!DateTimeException(testInterval(posInfInterval, Interval!Date(Date(2010, 7, 4), dur!"days"(0))));
4251 assert(!posInfInterval.contains(Interval!Date(Date(2010, 7, 1), Date(2010, 7, 3))));
4252 assert(!posInfInterval.contains(Interval!Date(Date(2010, 7, 1), Date(2013, 7, 3))));
4253 assert(!posInfInterval.contains(Interval!Date(Date(2010, 7, 3), Date(2010, 7, 4))));
4254 assert(!posInfInterval.contains(Interval!Date(Date(2010, 7, 3), Date(2010, 7, 5))));
4255 assert(!posInfInterval.contains(Interval!Date(Date(2010, 7, 3), Date(2012, 1, 7))));
4256 assert(!posInfInterval.contains(Interval!Date(Date(2010, 7, 3), Date(2012, 1, 8))));
4257 assert(posInfInterval.contains(Interval!Date(Date(2010, 7, 5), Date(2012, 1, 6))));
4258 assert(posInfInterval.contains(Interval!Date(Date(2010, 7, 5), Date(2012, 1, 7))));
4259 assert(posInfInterval.contains(Interval!Date(Date(2012, 1, 6), Date(2012, 1, 7))));
4260 assert(posInfInterval.contains(Interval!Date(Date(2012, 1, 6), Date(2012, 1, 8))));
4261 assert(posInfInterval.contains(Interval!Date(Date(2012, 1, 7), Date(2012, 1, 8))));
4262 assert(posInfInterval.contains(Interval!Date(Date(2012, 1, 8), Date(2012, 1, 9))));
4264 assert(!posInfInterval.contains(PosInfInterval!Date(Date(2010, 7, 3))));
4265 assert(posInfInterval.contains(PosInfInterval!Date(Date(2010, 7, 4))));
4266 assert(posInfInterval.contains(PosInfInterval!Date(Date(2010, 7, 5))));
4267 assert(posInfInterval.contains(PosInfInterval!Date(Date(2012, 1, 6))));
4268 assert(posInfInterval.contains(PosInfInterval!Date(Date(2012, 1, 7))));
4269 assert(posInfInterval.contains(PosInfInterval!Date(Date(2012, 1, 8))));
4271 assert(PosInfInterval!Date(Date(2010, 7, 3)).contains(posInfInterval));
4272 assert(PosInfInterval!Date(Date(2010, 7, 4)).contains(posInfInterval));
4273 assert(!PosInfInterval!Date(Date(2010, 7, 5)).contains(posInfInterval));
4274 assert(!PosInfInterval!Date(Date(2012, 1, 6)).contains(posInfInterval));
4275 assert(!PosInfInterval!Date(Date(2012, 1, 7)).contains(posInfInterval));
4276 assert(!PosInfInterval!Date(Date(2012, 1, 8)).contains(posInfInterval));
4278 assert(!posInfInterval.contains(NegInfInterval!Date(Date(2010, 7, 3))));
4279 assert(!posInfInterval.contains(NegInfInterval!Date(Date(2010, 7, 4))));
4280 assert(!posInfInterval.contains(NegInfInterval!Date(Date(2010, 7, 5))));
4281 assert(!posInfInterval.contains(NegInfInterval!Date(Date(2012, 1, 6))));
4282 assert(!posInfInterval.contains(NegInfInterval!Date(Date(2012, 1, 7))));
4283 assert(!posInfInterval.contains(NegInfInterval!Date(Date(2012, 1, 8))));
4285 auto interval = Interval!Date(Date(2010, 7, 4), Date(2012, 1, 7));
4286 const cInterval = Interval!Date(Date(2010, 7, 4), Date(2012, 1, 7));
4287 immutable iInterval = Interval!Date(Date(2010, 7, 4), Date(2012, 1, 7));
4288 const cPosInfInterval = PosInfInterval!Date(Date(2010, 7, 4));
4289 immutable iPosInfInterval = PosInfInterval!Date(Date(2010, 7, 4));
4290 auto negInfInterval = NegInfInterval!Date(Date(2012, 1, 7));
4291 const cNegInfInterval = NegInfInterval!Date(Date(2012, 1, 7));
4292 immutable iNegInfInterval = NegInfInterval!Date(Date(2012, 1, 7));
4322 assert(!PosInfInterval!Date(Date(1996, 1, 2)).contains(Interval!Date(Date(1990, 7, 6), Date(2000, 8, 2))));
4323 assert(PosInfInterval!Date(Date(1996, 1, 2)).contains(Interval!Date(Date(1999, 1, 12), Date(2011, 9, 17))));
4324 assert(PosInfInterval!Date(Date(1996, 1, 2)).contains(Interval!Date(Date(1998, 2, 28), Date(2013, 5, 1))));
4326 assert(PosInfInterval!Date(Date(1996, 1, 2)).contains(PosInfInterval!Date(Date(1999, 5, 4))));
4327 assert(!PosInfInterval!Date(Date(1996, 1, 2)).contains(PosInfInterval!Date(Date(1995, 7, 2))));
4329 assert(!PosInfInterval!Date(Date(1996, 1, 2)).contains(NegInfInterval!Date(Date(1996, 5, 4))));
4337 auto posInfInterval = PosInfInterval!Date(Date(2010, 7, 4));
4339 assert(!posInfInterval.isBefore(Date(2009, 7, 3)));
4340 assert(!posInfInterval.isBefore(Date(2010, 7, 3)));
4341 assert(!posInfInterval.isBefore(Date(2010, 7, 4)));
4342 assert(!posInfInterval.isBefore(Date(2010, 7, 5)));
4343 assert(!posInfInterval.isBefore(Date(2011, 7, 1)));
4344 assert(!posInfInterval.isBefore(Date(2012, 1, 6)));
4345 assert(!posInfInterval.isBefore(Date(2012, 1, 7)));
4346 assert(!posInfInterval.isBefore(Date(2012, 1, 8)));
4347 assert(!posInfInterval.isBefore(Date(2013, 1, 7)));
4349 const cdate = Date(2010, 7, 6);
4350 const cPosInfInterval = PosInfInterval!Date(Date(2010, 7, 4));
4351 immutable iPosInfInterval = PosInfInterval!Date(Date(2010, 7, 4));
4357 assert(!PosInfInterval!Date(Date(1996, 1, 2)).isBefore(Date(1994, 12, 24)));
4358 assert(!PosInfInterval!Date(Date(1996, 1, 2)).isBefore(Date(2000, 1, 5)));
4366 auto posInfInterval = PosInfInterval!Date(Date(2010, 7, 4));
4368 static void testInterval(in PosInfInterval!Date posInfInterval, in Interval!Date interval)
4373 assertThrown!DateTimeException(testInterval(posInfInterval, Interval!Date(Date(2010, 7, 4), dur!"days"(0))));
4376 assert(!posInfInterval.isBefore(Interval!Date(Date(2010, 7, 1), Date(2010, 7, 3))));
4377 assert(!posInfInterval.isBefore(Interval!Date(Date(2010, 7, 1), Date(2013, 7, 3))));
4378 assert(!posInfInterval.isBefore(Interval!Date(Date(2010, 7, 3), Date(2010, 7, 4))));
4379 assert(!posInfInterval.isBefore(Interval!Date(Date(2010, 7, 3), Date(2010, 7, 5))));
4380 assert(!posInfInterval.isBefore(Interval!Date(Date(2010, 7, 3), Date(2012, 1, 7))));
4381 assert(!posInfInterval.isBefore(Interval!Date(Date(2010, 7, 3), Date(2012, 1, 8))));
4382 assert(!posInfInterval.isBefore(Interval!Date(Date(2010, 7, 5), Date(2012, 1, 6))));
4383 assert(!posInfInterval.isBefore(Interval!Date(Date(2010, 7, 5), Date(2012, 1, 7))));
4384 assert(!posInfInterval.isBefore(Interval!Date(Date(2012, 1, 6), Date(2012, 1, 7))));
4385 assert(!posInfInterval.isBefore(Interval!Date(Date(2012, 1, 6), Date(2012, 1, 8))));
4386 assert(!posInfInterval.isBefore(Interval!Date(Date(2012, 1, 7), Date(2012, 1, 8))));
4387 assert(!posInfInterval.isBefore(Interval!Date(Date(2012, 1, 8), Date(2012, 1, 9))));
4389 assert(!posInfInterval.isBefore(PosInfInterval!Date(Date(2010, 7, 3))));
4390 assert(!posInfInterval.isBefore(PosInfInterval!Date(Date(2010, 7, 4))));
4391 assert(!posInfInterval.isBefore(PosInfInterval!Date(Date(2010, 7, 5))));
4392 assert(!posInfInterval.isBefore(PosInfInterval!Date(Date(2012, 1, 6))));
4393 assert(!posInfInterval.isBefore(PosInfInterval!Date(Date(2012, 1, 7))));
4394 assert(!posInfInterval.isBefore(PosInfInterval!Date(Date(2012, 1, 8))));
4396 assert(!PosInfInterval!Date(Date(2010, 7, 3)).isBefore(posInfInterval));
4397 assert(!PosInfInterval!Date(Date(2010, 7, 4)).isBefore(posInfInterval));
4398 assert(!PosInfInterval!Date(Date(2010, 7, 5)).isBefore(posInfInterval));
4399 assert(!PosInfInterval!Date(Date(2012, 1, 6)).isBefore(posInfInterval));
4400 assert(!PosInfInterval!Date(Date(2012, 1, 7)).isBefore(posInfInterval));
4401 assert(!PosInfInterval!Date(Date(2012, 1, 8)).isBefore(posInfInterval));
4403 assert(!posInfInterval.isBefore(NegInfInterval!Date(Date(2010, 7, 3))));
4404 assert(!posInfInterval.isBefore(NegInfInterval!Date(Date(2010, 7, 4))));
4405 assert(!posInfInterval.isBefore(NegInfInterval!Date(Date(2010, 7, 5))));
4406 assert(!posInfInterval.isBefore(NegInfInterval!Date(Date(2012, 1, 6))));
4407 assert(!posInfInterval.isBefore(NegInfInterval!Date(Date(2012, 1, 7))));
4408 assert(!posInfInterval.isBefore(NegInfInterval!Date(Date(2012, 1, 8))));
4410 auto interval = Interval!Date(Date(2010, 7, 4), Date(2012, 1, 7));
4411 const cInterval = Interval!Date(Date(2010, 7, 4), Date(2012, 1, 7));
4412 immutable iInterval = Interval!Date(Date(2010, 7, 4), Date(2012, 1, 7));
4413 const cPosInfInterval = PosInfInterval!Date(Date(2010, 7, 4));
4414 immutable iPosInfInterval = PosInfInterval!Date(Date(2010, 7, 4));
4415 auto negInfInterval = NegInfInterval!Date(Date(2012, 1, 7));
4416 const cNegInfInterval = NegInfInterval!Date(Date(2012, 1, 7));
4417 immutable iNegInfInterval = NegInfInterval!Date(Date(2012, 1, 7));
4447 assert(!PosInfInterval!Date(Date(1996, 1, 2)).isBefore(Interval!Date(Date(1990, 7, 6), Date(2000, 8, 2))));
4448 assert(!PosInfInterval!Date(Date(1996, 1, 2)).isBefore(Interval!Date(Date(1999, 1, 12), Date(2011, 9, 17))));
4450 assert(!PosInfInterval!Date(Date(1996, 1, 2)).isBefore(PosInfInterval!Date(Date(1992, 5, 4))));
4451 assert(!PosInfInterval!Date(Date(1996, 1, 2)).isBefore(PosInfInterval!Date(Date(2013, 3, 7))));
4453 assert(!PosInfInterval!Date(Date(1996, 1, 2)).isBefore(NegInfInterval!Date(Date(1996, 5, 4))));
4461 auto posInfInterval = PosInfInterval!Date(Date(2010, 7, 4));
4463 assert(posInfInterval.isAfter(Date(2009, 7, 3)));
4464 assert(posInfInterval.isAfter(Date(2010, 7, 3)));
4465 assert(!posInfInterval.isAfter(Date(2010, 7, 4)));
4466 assert(!posInfInterval.isAfter(Date(2010, 7, 5)));
4467 assert(!posInfInterval.isAfter(Date(2011, 7, 1)));
4468 assert(!posInfInterval.isAfter(Date(2012, 1, 6)));
4469 assert(!posInfInterval.isAfter(Date(2012, 1, 7)));
4470 assert(!posInfInterval.isAfter(Date(2012, 1, 8)));
4471 assert(!posInfInterval.isAfter(Date(2013, 1, 7)));
4473 const cdate = Date(2010, 7, 6);
4474 const cPosInfInterval = PosInfInterval!Date(Date(2010, 7, 4));
4475 immutable iPosInfInterval = PosInfInterval!Date(Date(2010, 7, 4));
4481 assert(PosInfInterval!Date(Date(1996, 1, 2)).isAfter(Date(1994, 12, 24)));
4482 assert(!PosInfInterval!Date(Date(1996, 1, 2)).isAfter(Date(2000, 1, 5)));
4490 auto posInfInterval = PosInfInterval!Date(Date(2010, 7, 4));
4492 static void testInterval(in PosInfInterval!Date posInfInterval, in Interval!Date interval)
4497 assertThrown!DateTimeException(testInterval(posInfInterval, Interval!Date(Date(2010, 7, 4), dur!"days"(0))));
4500 assert(posInfInterval.isAfter(Interval!Date(Date(2010, 7, 1), Date(2010, 7, 3))));
4501 assert(!posInfInterval.isAfter(Interval!Date(Date(2010, 7, 1), Date(2013, 7, 3))));
4502 assert(posInfInterval.isAfter(Interval!Date(Date(2010, 7, 3), Date(2010, 7, 4))));
4503 assert(!posInfInterval.isAfter(Interval!Date(Date(2010, 7, 3), Date(2010, 7, 5))));
4504 assert(!posInfInterval.isAfter(Interval!Date(Date(2010, 7, 3), Date(2012, 1, 7))));
4505 assert(!posInfInterval.isAfter(Interval!Date(Date(2010, 7, 3), Date(2012, 1, 8))));
4506 assert(!posInfInterval.isAfter(Interval!Date(Date(2010, 7, 5), Date(2012, 1, 6))));
4507 assert(!posInfInterval.isAfter(Interval!Date(Date(2010, 7, 5), Date(2012, 1, 7))));
4508 assert(!posInfInterval.isAfter(Interval!Date(Date(2012, 1, 6), Date(2012, 1, 7))));
4509 assert(!posInfInterval.isAfter(Interval!Date(Date(2012, 1, 6), Date(2012, 1, 8))));
4510 assert(!posInfInterval.isAfter(Interval!Date(Date(2012, 1, 7), Date(2012, 1, 8))));
4511 assert(!posInfInterval.isAfter(Interval!Date(Date(2012, 1, 8), Date(2012, 1, 9))));
4513 assert(!posInfInterval.isAfter(PosInfInterval!Date(Date(2010, 7, 3))));
4514 assert(!posInfInterval.isAfter(PosInfInterval!Date(Date(2010, 7, 4))));
4515 assert(!posInfInterval.isAfter(PosInfInterval!Date(Date(2010, 7, 5))));
4516 assert(!posInfInterval.isAfter(PosInfInterval!Date(Date(2012, 1, 6))));
4517 assert(!posInfInterval.isAfter(PosInfInterval!Date(Date(2012, 1, 7))));
4518 assert(!posInfInterval.isAfter(PosInfInterval!Date(Date(2012, 1, 8))));
4520 assert(!PosInfInterval!Date(Date(2010, 7, 3)).isAfter(posInfInterval));
4521 assert(!PosInfInterval!Date(Date(2010, 7, 4)).isAfter(posInfInterval));
4522 assert(!PosInfInterval!Date(Date(2010, 7, 5)).isAfter(posInfInterval));
4523 assert(!PosInfInterval!Date(Date(2012, 1, 6)).isAfter(posInfInterval));
4524 assert(!PosInfInterval!Date(Date(2012, 1, 7)).isAfter(posInfInterval));
4525 assert(!PosInfInterval!Date(Date(2012, 1, 8)).isAfter(posInfInterval));
4527 assert(posInfInterval.isAfter(NegInfInterval!Date(Date(2010, 7, 3))));
4528 assert(posInfInterval.isAfter(NegInfInterval!Date(Date(2010, 7, 4))));
4529 assert(!posInfInterval.isAfter(NegInfInterval!Date(Date(2010, 7, 5))));
4530 assert(!posInfInterval.isAfter(NegInfInterval!Date(Date(2012, 1, 6))));
4531 assert(!posInfInterval.isAfter(NegInfInterval!Date(Date(2012, 1, 7))));
4532 assert(!posInfInterval.isAfter(NegInfInterval!Date(Date(2012, 1, 8))));
4534 auto interval = Interval!Date(Date(2010, 7, 4), Date(2012, 1, 7));
4535 const cInterval = Interval!Date(Date(2010, 7, 4), Date(2012, 1, 7));
4536 immutable iInterval = Interval!Date(Date(2010, 7, 4), Date(2012, 1, 7));
4537 const cPosInfInterval = PosInfInterval!Date(Date(2010, 7, 4));
4538 immutable iPosInfInterval = PosInfInterval!Date(Date(2010, 7, 4));
4539 auto negInfInterval = NegInfInterval!Date(Date(2012, 1, 7));
4540 const cNegInfInterval = NegInfInterval!Date(Date(2012, 1, 7));
4541 immutable iNegInfInterval = NegInfInterval!Date(Date(2012, 1, 7));
4571 assert(!PosInfInterval!Date(Date(1996, 1, 2)).isAfter(Interval!Date(Date(1990, 7, 6), Date(2000, 8, 2))));
4572 assert(!PosInfInterval!Date(Date(1996, 1, 2)).isAfter(Interval!Date(Date(1999, 1, 12), Date(2011, 9, 17))));
4573 assert(PosInfInterval!Date(Date(1996, 1, 2)).isAfter(Interval!Date(Date(1989, 3, 1), Date(1996, 1, 2))));
4575 assert(!PosInfInterval!Date(Date(1996, 1, 2)).isAfter(PosInfInterval!Date(Date(1990, 1, 7))));
4576 assert(!PosInfInterval!Date(Date(1996, 1, 2)).isAfter(PosInfInterval!Date(Date(1999, 5, 4))));
4578 assert(PosInfInterval!Date(Date(1996, 1, 2)).isAfter(NegInfInterval!Date(Date(1996, 1, 2))));
4579 assert(!PosInfInterval!Date(Date(1996, 1, 2)).isAfter(NegInfInterval!Date(Date(2000, 7, 1))));
4587 auto posInfInterval = PosInfInterval!Date(Date(2010, 7, 4));
4589 static void testInterval(in PosInfInterval!Date posInfInterval, in Interval!Date interval)
4594 assertThrown!DateTimeException(testInterval(posInfInterval, Interval!Date(Date(2010, 7, 4), dur!"days"(0))));
4597 assert(!posInfInterval.intersects(Interval!Date(Date(2010, 7, 1), Date(2010, 7, 3))));
4598 assert(posInfInterval.intersects(Interval!Date(Date(2010, 7, 1), Date(2013, 7, 3))));
4599 assert(!posInfInterval.intersects(Interval!Date(Date(2010, 7, 3), Date(2010, 7, 4))));
4600 assert(posInfInterval.intersects(Interval!Date(Date(2010, 7, 3), Date(2010, 7, 5))));
4601 assert(posInfInterval.intersects(Interval!Date(Date(2010, 7, 3), Date(2012, 1, 7))));
4602 assert(posInfInterval.intersects(Interval!Date(Date(2010, 7, 3), Date(2012, 1, 8))));
4603 assert(posInfInterval.intersects(Interval!Date(Date(2010, 7, 5), Date(2012, 1, 6))));
4604 assert(posInfInterval.intersects(Interval!Date(Date(2010, 7, 5), Date(2012, 1, 7))));
4605 assert(posInfInterval.intersects(Interval!Date(Date(2012, 1, 6), Date(2012, 1, 7))));
4606 assert(posInfInterval.intersects(Interval!Date(Date(2012, 1, 6), Date(2012, 1, 8))));
4607 assert(posInfInterval.intersects(Interval!Date(Date(2012, 1, 7), Date(2012, 1, 8))));
4608 assert(posInfInterval.intersects(Interval!Date(Date(2012, 1, 8), Date(2012, 1, 9))));
4610 assert(posInfInterval.intersects(PosInfInterval!Date(Date(2010, 7, 3))));
4611 assert(posInfInterval.intersects(PosInfInterval!Date(Date(2010, 7, 4))));
4612 assert(posInfInterval.intersects(PosInfInterval!Date(Date(2010, 7, 5))));
4613 assert(posInfInterval.intersects(PosInfInterval!Date(Date(2012, 1, 6))));
4614 assert(posInfInterval.intersects(PosInfInterval!Date(Date(2012, 1, 7))));
4615 assert(posInfInterval.intersects(PosInfInterval!Date(Date(2012, 1, 8))));
4617 assert(PosInfInterval!Date(Date(2010, 7, 3)).intersects(posInfInterval));
4618 assert(PosInfInterval!Date(Date(2010, 7, 4)).intersects(posInfInterval));
4619 assert(PosInfInterval!Date(Date(2010, 7, 5)).intersects(posInfInterval));
4620 assert(PosInfInterval!Date(Date(2012, 1, 6)).intersects(posInfInterval));
4621 assert(PosInfInterval!Date(Date(2012, 1, 7)).intersects(posInfInterval));
4622 assert(PosInfInterval!Date(Date(2012, 1, 8)).intersects(posInfInterval));
4624 assert(!posInfInterval.intersects(NegInfInterval!Date(Date(2010, 7, 3))));
4625 assert(!posInfInterval.intersects(NegInfInterval!Date(Date(2010, 7, 4))));
4626 assert(posInfInterval.intersects(NegInfInterval!Date(Date(2010, 7, 5))));
4627 assert(posInfInterval.intersects(NegInfInterval!Date(Date(2012, 1, 6))));
4628 assert(posInfInterval.intersects(NegInfInterval!Date(Date(2012, 1, 7))));
4629 assert(posInfInterval.intersects(NegInfInterval!Date(Date(2012, 1, 8))));
4631 auto interval = Interval!Date(Date(2010, 7, 4), Date(2012, 1, 7));
4632 const cInterval = Interval!Date(Date(2010, 7, 4), Date(2012, 1, 7));
4633 immutable iInterval = Interval!Date(Date(2010, 7, 4), Date(2012, 1, 7));
4634 const cPosInfInterval = PosInfInterval!Date(Date(2010, 7, 4));
4635 immutable iPosInfInterval = PosInfInterval!Date(Date(2010, 7, 4));
4636 auto negInfInterval = NegInfInterval!Date(Date(2012, 1, 7));
4637 const cNegInfInterval = NegInfInterval!Date(Date(2012, 1, 7));
4638 immutable iNegInfInterval = NegInfInterval!Date(Date(2012, 1, 7));
4668 assert(PosInfInterval!Date(Date(1996, 1, 2)).intersects(Interval!Date(Date(1990, 7, 6), Date(2000, 8, 2))));
4669 assert(PosInfInterval!Date(Date(1996, 1, 2)).intersects(Interval!Date(Date(1999, 1, 12), Date(2011, 9, 17))));
4670 assert(!PosInfInterval!Date(Date(1996, 1, 2)).intersects(Interval!Date(Date(1989, 3, 1), Date(1996, 1, 2))));
4672 assert(PosInfInterval!Date(Date(1996, 1, 2)).intersects(PosInfInterval!Date(Date(1990, 1, 7))));
4673 assert(PosInfInterval!Date(Date(1996, 1, 2)).intersects(PosInfInterval!Date(Date(1999, 5, 4))));
4675 assert(!PosInfInterval!Date(Date(1996, 1, 2)).intersects(NegInfInterval!Date(Date(1996, 1, 2))));
4676 assert(PosInfInterval!Date(Date(1996, 1, 2)).intersects(NegInfInterval!Date(Date(2000, 7, 1))));
4684 auto posInfInterval = PosInfInterval!Date(Date(2010, 7, 4));
4691 assertThrown!DateTimeException(testInterval(posInfInterval, Interval!Date(Date(2010, 7, 4), dur!"days"(0))));
4693 assertThrown!DateTimeException(testInterval(posInfInterval, Interval!Date(Date(2010, 7, 1), Date(2010, 7, 3))));
4694 assertThrown!DateTimeException(testInterval(posInfInterval, Interval!Date(Date(2010, 7, 3), Date(2010, 7, 4))));
4696 assertThrown!DateTimeException(testInterval(posInfInterval, NegInfInterval!Date(Date(2010, 7, 3))));
4697 assertThrown!DateTimeException(testInterval(posInfInterval, NegInfInterval!Date(Date(2010, 7, 4))));
4700 assert(posInfInterval.intersection(Interval!Date(Date(2010, 7, 1), Date(2013, 7, 3))) ==
4701 Interval!Date(Date(2010, 7, 4), Date(2013, 7, 3)));
4702 assert(posInfInterval.intersection(Interval!Date(Date(2010, 7, 3), Date(2010, 7, 5))) ==
4703 Interval!Date(Date(2010, 7, 4), Date(2010, 7, 5)));
4704 assert(posInfInterval.intersection(Interval!Date(Date(2010, 7, 3), Date(2012, 1, 7))) ==
4705 Interval!Date(Date(2010, 7, 4), Date(2012, 1, 7)));
4706 assert(posInfInterval.intersection(Interval!Date(Date(2010, 7, 3), Date(2012, 1, 8))) ==
4707 Interval!Date(Date(2010, 7, 4), Date(2012, 1, 8)));
4708 assert(posInfInterval.intersection(Interval!Date(Date(2010, 7, 5), Date(2012, 1, 6))) ==
4709 Interval!Date(Date(2010, 7, 5), Date(2012, 1, 6)));
4710 assert(posInfInterval.intersection(Interval!Date(Date(2010, 7, 5), Date(2012, 1, 7))) ==
4711 Interval!Date(Date(2010, 7, 5), Date(2012, 1, 7)));
4712 assert(posInfInterval.intersection(Interval!Date(Date(2012, 1, 6), Date(2012, 1, 7))) ==
4713 Interval!Date(Date(2012, 1, 6), Date(2012, 1, 7)));
4714 assert(posInfInterval.intersection(Interval!Date(Date(2012, 1, 6), Date(2012, 1, 8))) ==
4715 Interval!Date(Date(2012, 1, 6), Date(2012, 1, 8)));
4716 assert(posInfInterval.intersection(Interval!Date(Date(2012, 1, 7), Date(2012, 1, 8))) ==
4717 Interval!Date(Date(2012, 1, 7), Date(2012, 1, 8)));
4718 assert(posInfInterval.intersection(Interval!Date(Date(2012, 1, 8), Date(2012, 1, 9))) ==
4719 Interval!Date(Date(2012, 1, 8), Date(2012, 1, 9)));
4721 assert(posInfInterval.intersection(PosInfInterval!Date(Date(2010, 7, 3))) == PosInfInterval!Date(Date(2010, 7, 4)));
4722 assert(posInfInterval.intersection(PosInfInterval!Date(Date(2010, 7, 4))) == PosInfInterval!Date(Date(2010, 7, 4)));
4723 assert(posInfInterval.intersection(PosInfInterval!Date(Date(2010, 7, 5))) == PosInfInterval!Date(Date(2010, 7, 5)));
4724 assert(posInfInterval.intersection(PosInfInterval!Date(Date(2012, 1, 6))) == PosInfInterval!Date(Date(2012, 1, 6)));
4725 assert(posInfInterval.intersection(PosInfInterval!Date(Date(2012, 1, 7))) == PosInfInterval!Date(Date(2012, 1, 7)));
4726 assert(posInfInterval.intersection(PosInfInterval!Date(Date(2012, 1, 8))) == PosInfInterval!Date(Date(2012, 1, 8)));
4728 assert(PosInfInterval!Date(Date(2010, 7, 3)).intersection(posInfInterval) == PosInfInterval!Date(Date(2010, 7, 4)));
4729 assert(PosInfInterval!Date(Date(2010, 7, 4)).intersection(posInfInterval) == PosInfInterval!Date(Date(2010, 7, 4)));
4730 assert(PosInfInterval!Date(Date(2010, 7, 5)).intersection(posInfInterval) == PosInfInterval!Date(Date(2010, 7, 5)));
4731 assert(PosInfInterval!Date(Date(2012, 1, 6)).intersection(posInfInterval) == PosInfInterval!Date(Date(2012, 1, 6)));
4732 assert(PosInfInterval!Date(Date(2012, 1, 7)).intersection(posInfInterval) == PosInfInterval!Date(Date(2012, 1, 7)));
4733 assert(PosInfInterval!Date(Date(2012, 1, 8)).intersection(posInfInterval) == PosInfInterval!Date(Date(2012, 1, 8)));
4735 assert(posInfInterval.intersection(NegInfInterval!Date(Date(2010, 7, 5))) ==
4736 Interval!Date(Date(2010, 7, 4), Date(2010, 7, 5)));
4737 assert(posInfInterval.intersection(NegInfInterval!Date(Date(2012, 1, 6))) ==
4738 Interval!Date(Date(2010, 7, 4), Date(2012, 1, 6)));
4739 assert(posInfInterval.intersection(NegInfInterval!Date(Date(2012, 1, 7))) ==
4740 Interval!Date(Date(2010, 7, 4), Date(2012, 1, 7)));
4741 assert(posInfInterval.intersection(NegInfInterval!Date(Date(2012, 1, 8))) ==
4742 Interval!Date(Date(2010, 7, 4), Date(2012, 1, 8)));
4744 auto interval = Interval!Date(Date(2010, 7, 4), Date(2012, 1, 7));
4745 const cInterval = Interval!Date(Date(2010, 7, 4), Date(2012, 1, 7));
4746 immutable iInterval = Interval!Date(Date(2010, 7, 4), Date(2012, 1, 7));
4747 const cPosInfInterval = PosInfInterval!Date(Date(2010, 7, 4));
4748 immutable iPosInfInterval = PosInfInterval!Date(Date(2010, 7, 4));
4749 auto negInfInterval = NegInfInterval!Date(Date(2012, 1, 7));
4750 const cNegInfInterval = NegInfInterval!Date(Date(2012, 1, 7));
4751 immutable iNegInfInterval = NegInfInterval!Date(Date(2012, 1, 7));
4781 assert(PosInfInterval!Date(Date(1996, 1, 2)).intersection(Interval!Date(Date(1990, 7, 6), Date(2000, 8, 2))) ==
4782 Interval!Date(Date(1996, 1, 2), Date(2000, 8, 2)));
4783 assert(PosInfInterval!Date(Date(1996, 1, 2)).intersection(Interval!Date(Date(1999, 1, 12), Date(2011, 9, 17))) ==
4784 Interval!Date(Date(1999, 1, 12), Date(2011, 9, 17)));
4786 assert(PosInfInterval!Date(Date(1996, 1, 2)).intersection(PosInfInterval!Date(Date(1990, 7, 6))) ==
4787 PosInfInterval!Date(Date(1996, 1, 2)));
4788 assert(PosInfInterval!Date(Date(1996, 1, 2)).intersection(PosInfInterval!Date(Date(1999, 1, 12))) ==
4789 PosInfInterval!Date(Date(1999, 1, 12)));
4791 assert(PosInfInterval!Date(Date(1996, 1, 2)).intersection(NegInfInterval!Date(Date(1999, 7, 6))) ==
4792 Interval!Date(Date(1996, 1, 2), Date(1999, 7, 6)));
4793 assert(PosInfInterval!Date(Date(1996, 1, 2)).intersection(NegInfInterval!Date(Date(2013, 1, 12))) ==
4794 Interval!Date(Date(1996, 1, 2), Date(2013, 1, 12)));
4802 auto posInfInterval = PosInfInterval!Date(Date(2010, 7, 4));
4804 static void testInterval(in PosInfInterval!Date posInfInterval, in Interval!Date interval)
4809 assertThrown!DateTimeException(testInterval(posInfInterval, Interval!Date(Date(2010, 7, 4), dur!"days"(0))));
4812 assert(!posInfInterval.isAdjacent(Interval!Date(Date(2010, 7, 1), Date(2010, 7, 3))));
4813 assert(!posInfInterval.isAdjacent(Interval!Date(Date(2010, 7, 1), Date(2013, 7, 3))));
4814 assert(posInfInterval.isAdjacent(Interval!Date(Date(2010, 7, 3), Date(2010, 7, 4))));
4815 assert(!posInfInterval.isAdjacent(Interval!Date(Date(2010, 7, 3), Date(2010, 7, 5))));
4816 assert(!posInfInterval.isAdjacent(Interval!Date(Date(2010, 7, 3), Date(2012, 1, 7))));
4817 assert(!posInfInterval.isAdjacent(Interval!Date(Date(2010, 7, 3), Date(2012, 1, 8))));
4818 assert(!posInfInterval.isAdjacent(Interval!Date(Date(2010, 7, 5), Date(2012, 1, 6))));
4819 assert(!posInfInterval.isAdjacent(Interval!Date(Date(2010, 7, 5), Date(2012, 1, 7))));
4820 assert(!posInfInterval.isAdjacent(Interval!Date(Date(2012, 1, 6), Date(2012, 1, 7))));
4821 assert(!posInfInterval.isAdjacent(Interval!Date(Date(2012, 1, 6), Date(2012, 1, 8))));
4822 assert(!posInfInterval.isAdjacent(Interval!Date(Date(2012, 1, 7), Date(2012, 1, 8))));
4823 assert(!posInfInterval.isAdjacent(Interval!Date(Date(2012, 1, 8), Date(2012, 1, 9))));
4825 assert(!posInfInterval.isAdjacent(PosInfInterval!Date(Date(2010, 7, 3))));
4826 assert(!posInfInterval.isAdjacent(PosInfInterval!Date(Date(2010, 7, 4))));
4827 assert(!posInfInterval.isAdjacent(PosInfInterval!Date(Date(2010, 7, 5))));
4828 assert(!posInfInterval.isAdjacent(PosInfInterval!Date(Date(2012, 1, 6))));
4829 assert(!posInfInterval.isAdjacent(PosInfInterval!Date(Date(2012, 1, 7))));
4830 assert(!posInfInterval.isAdjacent(PosInfInterval!Date(Date(2012, 1, 8))));
4832 assert(!PosInfInterval!Date(Date(2010, 7, 3)).isAdjacent(posInfInterval));
4833 assert(!PosInfInterval!Date(Date(2010, 7, 4)).isAdjacent(posInfInterval));
4834 assert(!PosInfInterval!Date(Date(2010, 7, 5)).isAdjacent(posInfInterval));
4835 assert(!PosInfInterval!Date(Date(2012, 1, 6)).isAdjacent(posInfInterval));
4836 assert(!PosInfInterval!Date(Date(2012, 1, 7)).isAdjacent(posInfInterval));
4837 assert(!PosInfInterval!Date(Date(2012, 1, 8)).isAdjacent(posInfInterval));
4839 assert(!posInfInterval.isAdjacent(NegInfInterval!Date(Date(2010, 7, 3))));
4840 assert(posInfInterval.isAdjacent(NegInfInterval!Date(Date(2010, 7, 4))));
4841 assert(!posInfInterval.isAdjacent(NegInfInterval!Date(Date(2010, 7, 5))));
4842 assert(!posInfInterval.isAdjacent(NegInfInterval!Date(Date(2012, 1, 6))));
4843 assert(!posInfInterval.isAdjacent(NegInfInterval!Date(Date(2012, 1, 7))));
4844 assert(!posInfInterval.isAdjacent(NegInfInterval!Date(Date(2012, 1, 8))));
4846 auto interval = Interval!Date(Date(2010, 7, 4), Date(2012, 1, 7));
4847 const cInterval = Interval!Date(Date(2010, 7, 4), Date(2012, 1, 7));
4848 immutable iInterval = Interval!Date(Date(2010, 7, 4), Date(2012, 1, 7));
4849 const cPosInfInterval = PosInfInterval!Date(Date(2010, 7, 4));
4850 immutable iPosInfInterval = PosInfInterval!Date(Date(2010, 7, 4));
4851 auto negInfInterval = NegInfInterval!Date(Date(2012, 1, 7));
4852 const cNegInfInterval = NegInfInterval!Date(Date(2012, 1, 7));
4853 immutable iNegInfInterval = NegInfInterval!Date(Date(2012, 1, 7));
4883 assert(PosInfInterval!Date(Date(1996, 1, 2)).isAdjacent(Interval!Date(Date(1989, 3, 1), Date(1996, 1, 2))));
4884 assert(!PosInfInterval!Date(Date(1999, 1, 12)).isAdjacent(Interval!Date(Date(1999, 1, 12), Date(2011, 9, 17))));
4886 assert(!PosInfInterval!Date(Date(1996, 1, 2)).isAdjacent(PosInfInterval!Date(Date(1990, 1, 7))));
4887 assert(!PosInfInterval!Date(Date(1996, 1, 2)).isAdjacent(PosInfInterval!Date(Date(1996, 1, 2))));
4889 assert(PosInfInterval!Date(Date(1996, 1, 2)).isAdjacent(NegInfInterval!Date(Date(1996, 1, 2))));
4890 assert(!PosInfInterval!Date(Date(1996, 1, 2)).isAdjacent(NegInfInterval!Date(Date(2000, 7, 1))));
4898 auto posInfInterval = PosInfInterval!Date(Date(2010, 7, 4));
4900 static void testInterval(in PosInfInterval!Date posInfInterval, in Interval!Date interval)
4905 assertThrown!DateTimeException(testInterval(posInfInterval, Interval!Date(Date(2010, 7, 4), dur!"days"(0))));
4907 assertThrown!DateTimeException(testInterval(posInfInterval, Interval!Date(Date(2010, 7, 1), Date(2010, 7, 3))));
4910 assert(posInfInterval.merge(Interval!Date(Date(2010, 7, 1), Date(2013, 7, 3))) ==
4911 PosInfInterval!Date(Date(2010, 7, 1)));
4912 assert(posInfInterval.merge(Interval!Date(Date(2010, 7, 3), Date(2010, 7, 4))) ==
4913 PosInfInterval!Date(Date(2010, 7, 3)));
4914 assert(posInfInterval.merge(Interval!Date(Date(2010, 7, 3), Date(2010, 7, 5))) ==
4915 PosInfInterval!Date(Date(2010, 7, 3)));
4916 assert(posInfInterval.merge(Interval!Date(Date(2010, 7, 3), Date(2012, 1, 7))) ==
4917 PosInfInterval!Date(Date(2010, 7, 3)));
4918 assert(posInfInterval.merge(Interval!Date(Date(2010, 7, 3), Date(2012, 1, 8))) ==
4919 PosInfInterval!Date(Date(2010, 7, 3)));
4920 assert(posInfInterval.merge(Interval!Date(Date(2010, 7, 5), Date(2012, 1, 6))) ==
4921 PosInfInterval!Date(Date(2010, 7, 4)));
4922 assert(posInfInterval.merge(Interval!Date(Date(2010, 7, 5), Date(2012, 1, 7))) ==
4923 PosInfInterval!Date(Date(2010, 7, 4)));
4924 assert(posInfInterval.merge(Interval!Date(Date(2012, 1, 6), Date(2012, 1, 7))) ==
4925 PosInfInterval!Date(Date(2010, 7, 4)));
4926 assert(posInfInterval.merge(Interval!Date(Date(2012, 1, 6), Date(2012, 1, 8))) ==
4927 PosInfInterval!Date(Date(2010, 7, 4)));
4928 assert(posInfInterval.merge(Interval!Date(Date(2012, 1, 7), Date(2012, 1, 8))) ==
4929 PosInfInterval!Date(Date(2010, 7, 4)));
4930 assert(posInfInterval.merge(Interval!Date(Date(2012, 1, 8), Date(2012, 1, 9))) ==
4931 PosInfInterval!Date(Date(2010, 7, 4)));
4933 assert(posInfInterval.merge(PosInfInterval!Date(Date(2010, 7, 3))) == PosInfInterval!Date(Date(2010, 7, 3)));
4934 assert(posInfInterval.merge(PosInfInterval!Date(Date(2010, 7, 4))) == PosInfInterval!Date(Date(2010, 7, 4)));
4935 assert(posInfInterval.merge(PosInfInterval!Date(Date(2010, 7, 5))) == PosInfInterval!Date(Date(2010, 7, 4)));
4936 assert(posInfInterval.merge(PosInfInterval!Date(Date(2012, 1, 6))) == PosInfInterval!Date(Date(2010, 7, 4)));
4937 assert(posInfInterval.merge(PosInfInterval!Date(Date(2012, 1, 7))) == PosInfInterval!Date(Date(2010, 7, 4)));
4938 assert(posInfInterval.merge(PosInfInterval!Date(Date(2012, 1, 8))) == PosInfInterval!Date(Date(2010, 7, 4)));
4940 assert(PosInfInterval!Date(Date(2010, 7, 3)).merge(posInfInterval) == PosInfInterval!Date(Date(2010, 7, 3)));
4941 assert(PosInfInterval!Date(Date(2010, 7, 4)).merge(posInfInterval) == PosInfInterval!Date(Date(2010, 7, 4)));
4942 assert(PosInfInterval!Date(Date(2010, 7, 5)).merge(posInfInterval) == PosInfInterval!Date(Date(2010, 7, 4)));
4943 assert(PosInfInterval!Date(Date(2012, 1, 6)).merge(posInfInterval) == PosInfInterval!Date(Date(2010, 7, 4)));
4944 assert(PosInfInterval!Date(Date(2012, 1, 7)).merge(posInfInterval) == PosInfInterval!Date(Date(2010, 7, 4)));
4945 assert(PosInfInterval!Date(Date(2012, 1, 8)).merge(posInfInterval) == PosInfInterval!Date(Date(2010, 7, 4)));
4947 static assert(!__traits(compiles, posInfInterval.merge(NegInfInterval!Date(Date(2010, 7, 3)))));
4948 static assert(!__traits(compiles, posInfInterval.merge(NegInfInterval!Date(Date(2010, 7, 4)))));
4949 static assert(!__traits(compiles, posInfInterval.merge(NegInfInterval!Date(Date(2010, 7, 5)))));
4950 static assert(!__traits(compiles, posInfInterval.merge(NegInfInterval!Date(Date(2012, 1, 6)))));
4951 static assert(!__traits(compiles, posInfInterval.merge(NegInfInterval!Date(Date(2012, 1, 7)))));
4952 static assert(!__traits(compiles, posInfInterval.merge(NegInfInterval!Date(Date(2012, 1, 8)))));
4954 auto interval = Interval!Date(Date(2010, 7, 4), Date(2012, 1, 7));
4955 const cInterval = Interval!Date(Date(2010, 7, 4), Date(2012, 1, 7));
4956 immutable iInterval = Interval!Date(Date(2010, 7, 4), Date(2012, 1, 7));
4957 const cPosInfInterval = PosInfInterval!Date(Date(2010, 7, 4));
4958 immutable iPosInfInterval = PosInfInterval!Date(Date(2010, 7, 4));
4959 auto negInfInterval = NegInfInterval!Date(Date(2012, 1, 7));
4960 const cNegInfInterval = NegInfInterval!Date(Date(2012, 1, 7));
4961 immutable iNegInfInterval = NegInfInterval!Date(Date(2012, 1, 7));
4991 assert(PosInfInterval!Date(Date(1996, 1, 2)).merge(Interval!Date(Date(1990, 7, 6), Date(2000, 8, 2))) ==
4992 PosInfInterval!Date(Date(1990, 7, 6)));
4993 assert(PosInfInterval!Date(Date(1996, 1, 2)).merge(Interval!Date(Date(1999, 1, 12), Date(2011, 9, 17))) ==
4994 PosInfInterval!Date(Date(1996, 1, 2)));
4996 assert(PosInfInterval!Date(Date(1996, 1, 2)).merge(PosInfInterval!Date(Date(1990, 7, 6))) ==
4997 PosInfInterval!Date(Date(1990, 7, 6)));
4998 assert(PosInfInterval!Date(Date(1996, 1, 2)).merge(PosInfInterval!Date(Date(1999, 1, 12))) ==
4999 PosInfInterval!Date(Date(1996, 1, 2)));
5007 auto posInfInterval = PosInfInterval!Date(Date(2010, 7, 4));
5009 static void testInterval(in PosInfInterval!Date posInfInterval, in Interval!Date interval)
5014 assertThrown!DateTimeException(testInterval(posInfInterval, Interval!Date(Date(2010, 7, 4), dur!"days"(0))));
5017 assert(posInfInterval.span(Interval!Date(Date(2010, 7, 1), Date(2010, 7, 3))) ==
5018 PosInfInterval!Date(Date(2010, 7, 1)));
5019 assert(posInfInterval.span(Interval!Date(Date(2010, 7, 1), Date(2013, 7, 3))) ==
5020 PosInfInterval!Date(Date(2010, 7, 1)));
5021 assert(posInfInterval.span(Interval!Date(Date(2010, 7, 3), Date(2010, 7, 4))) ==
5022 PosInfInterval!Date(Date(2010, 7, 3)));
5023 assert(posInfInterval.span(Interval!Date(Date(2010, 7, 3), Date(2010, 7, 5))) ==
5024 PosInfInterval!Date(Date(2010, 7, 3)));
5025 assert(posInfInterval.span(Interval!Date(Date(2010, 7, 3), Date(2012, 1, 7))) ==
5026 PosInfInterval!Date(Date(2010, 7, 3)));
5027 assert(posInfInterval.span(Interval!Date(Date(2010, 7, 3), Date(2012, 1, 8))) ==
5028 PosInfInterval!Date(Date(2010, 7, 3)));
5029 assert(posInfInterval.span(Interval!Date(Date(2010, 7, 5), Date(2012, 1, 6))) ==
5030 PosInfInterval!Date(Date(2010, 7, 4)));
5031 assert(posInfInterval.span(Interval!Date(Date(2010, 7, 5), Date(2012, 1, 7))) ==
5032 PosInfInterval!Date(Date(2010, 7, 4)));
5033 assert(posInfInterval.span(Interval!Date(Date(2012, 1, 6), Date(2012, 1, 7))) ==
5034 PosInfInterval!Date(Date(2010, 7, 4)));
5035 assert(posInfInterval.span(Interval!Date(Date(2012, 1, 6), Date(2012, 1, 8))) ==
5036 PosInfInterval!Date(Date(2010, 7, 4)));
5037 assert(posInfInterval.span(Interval!Date(Date(2012, 1, 7), Date(2012, 1, 8))) ==
5038 PosInfInterval!Date(Date(2010, 7, 4)));
5039 assert(posInfInterval.span(Interval!Date(Date(2012, 1, 8), Date(2012, 1, 9))) ==
5040 PosInfInterval!Date(Date(2010, 7, 4)));
5042 assert(posInfInterval.span(PosInfInterval!Date(Date(2010, 7, 3))) == PosInfInterval!Date(Date(2010, 7, 3)));
5043 assert(posInfInterval.span(PosInfInterval!Date(Date(2010, 7, 4))) == PosInfInterval!Date(Date(2010, 7, 4)));
5044 assert(posInfInterval.span(PosInfInterval!Date(Date(2010, 7, 5))) == PosInfInterval!Date(Date(2010, 7, 4)));
5045 assert(posInfInterval.span(PosInfInterval!Date(Date(2012, 1, 6))) == PosInfInterval!Date(Date(2010, 7, 4)));
5046 assert(posInfInterval.span(PosInfInterval!Date(Date(2012, 1, 7))) == PosInfInterval!Date(Date(2010, 7, 4)));
5047 assert(posInfInterval.span(PosInfInterval!Date(Date(2012, 1, 8))) == PosInfInterval!Date(Date(2010, 7, 4)));
5049 assert(PosInfInterval!Date(Date(2010, 7, 3)).span(posInfInterval) == PosInfInterval!Date(Date(2010, 7, 3)));
5050 assert(PosInfInterval!Date(Date(2010, 7, 4)).span(posInfInterval) == PosInfInterval!Date(Date(2010, 7, 4)));
5051 assert(PosInfInterval!Date(Date(2010, 7, 5)).span(posInfInterval) == PosInfInterval!Date(Date(2010, 7, 4)));
5052 assert(PosInfInterval!Date(Date(2012, 1, 6)).span(posInfInterval) == PosInfInterval!Date(Date(2010, 7, 4)));
5053 assert(PosInfInterval!Date(Date(2012, 1, 7)).span(posInfInterval) == PosInfInterval!Date(Date(2010, 7, 4)));
5054 assert(PosInfInterval!Date(Date(2012, 1, 8)).span(posInfInterval) == PosInfInterval!Date(Date(2010, 7, 4)));
5056 static assert(!__traits(compiles, posInfInterval.span(NegInfInterval!Date(Date(2010, 7, 3)))));
5057 static assert(!__traits(compiles, posInfInterval.span(NegInfInterval!Date(Date(2010, 7, 4)))));
5058 static assert(!__traits(compiles, posInfInterval.span(NegInfInterval!Date(Date(2010, 7, 5)))));
5059 static assert(!__traits(compiles, posInfInterval.span(NegInfInterval!Date(Date(2012, 1, 6)))));
5060 static assert(!__traits(compiles, posInfInterval.span(NegInfInterval!Date(Date(2012, 1, 7)))));
5061 static assert(!__traits(compiles, posInfInterval.span(NegInfInterval!Date(Date(2012, 1, 8)))));
5063 auto interval = Interval!Date(Date(2010, 7, 4), Date(2012, 1, 7));
5064 const cInterval = Interval!Date(Date(2010, 7, 4), Date(2012, 1, 7));
5065 immutable iInterval = Interval!Date(Date(2010, 7, 4), Date(2012, 1, 7));
5066 const cPosInfInterval = PosInfInterval!Date(Date(2010, 7, 4));
5067 immutable iPosInfInterval = PosInfInterval!Date(Date(2010, 7, 4));
5068 auto negInfInterval = NegInfInterval!Date(Date(2012, 1, 7));
5069 const cNegInfInterval = NegInfInterval!Date(Date(2012, 1, 7));
5070 immutable iNegInfInterval = NegInfInterval!Date(Date(2012, 1, 7));
5100 assert(PosInfInterval!Date(Date(1996, 1, 2)).span(Interval!Date(Date(500, 8, 9), Date(1602, 1, 31))) ==
5101 PosInfInterval!Date(Date(500, 8, 9)));
5102 assert(PosInfInterval!Date(Date(1996, 1, 2)).span(Interval!Date(Date(1990, 7, 6), Date(2000, 8, 2))) ==
5103 PosInfInterval!Date(Date(1990, 7, 6)));
5104 assert(PosInfInterval!Date(Date(1996, 1, 2)).span(Interval!Date(Date(1999, 1, 12), Date(2011, 9, 17))) ==
5105 PosInfInterval!Date(Date(1996, 1, 2)));
5107 assert(PosInfInterval!Date(Date(1996, 1, 2)).span(PosInfInterval!Date(Date(1990, 7, 6))) ==
5108 PosInfInterval!Date(Date(1990, 7, 6)));
5109 assert(PosInfInterval!Date(Date(1996, 1, 2)).span(PosInfInterval!Date(Date(1999, 1, 12))) ==
5110 PosInfInterval!Date(Date(1996, 1, 2)));
5118 auto interval = PosInfInterval!Date(Date(2010, 7, 4));
5126 testInterval(interval, dur!"days"(22), PosInfInterval!Date(Date(2010, 7, 26)));
5127 testInterval(interval, dur!"days"(-22), PosInfInterval!Date(Date(2010, 6, 12)));
5129 const cInterval = PosInfInterval!Date(Date(2010, 7, 4));
5130 immutable iInterval = PosInfInterval!Date(Date(2010, 7, 4));
5135 auto interval1 = PosInfInterval!Date(Date(1996, 1, 2));
5136 auto interval2 = PosInfInterval!Date(Date(1996, 1, 2));
5139 assert(interval1 == PosInfInterval!Date(Date(1996, 2, 21)));
5142 assert(interval2 == PosInfInterval!Date(Date(1995, 11, 13)));
5151 auto interval = PosInfInterval!Date(Date(2010, 7, 4));
5160 testInterval(interval, 5, 0, AllowDayOverflow.yes, PosInfInterval!Date(Date(2015, 7, 4)));
5161 testInterval(interval, -5, 0, AllowDayOverflow.yes, PosInfInterval!Date(Date(2005, 7, 4)));
5163 auto interval2 = PosInfInterval!Date(Date(2000, 1, 29));
5165 testInterval(interval2, 1, 1, AllowDayOverflow.yes, PosInfInterval!Date(Date(2001, 3, 1)));
5166 testInterval(interval2, 1, -1, AllowDayOverflow.yes, PosInfInterval!Date(Date(2000, 12, 29)));
5167 testInterval(interval2, -1, -1, AllowDayOverflow.yes, PosInfInterval!Date(Date(1998, 12, 29)));
5168 testInterval(interval2, -1, 1, AllowDayOverflow.yes, PosInfInterval!Date(Date(1999, 3, 1)));
5170 testInterval(interval2, 1, 1, AllowDayOverflow.no, PosInfInterval!Date(Date(2001, 2, 28)));
5171 testInterval(interval2, 1, -1, AllowDayOverflow.no, PosInfInterval!Date(Date(2000, 12, 29)));
5172 testInterval(interval2, -1, -1, AllowDayOverflow.no, PosInfInterval!Date(Date(1998, 12, 29)));
5173 testInterval(interval2, -1, 1, AllowDayOverflow.no, PosInfInterval!Date(Date(1999, 2, 28)));
5176 const cPosInfInterval = PosInfInterval!Date(Date(2010, 7, 4));
5177 immutable iPosInfInterval = PosInfInterval!Date(Date(2010, 7, 4));
5182 auto interval1 = PosInfInterval!Date(Date(1996, 1, 2));
5183 auto interval2 = PosInfInterval!Date(Date(1996, 1, 2));
5186 assert(interval1 == PosInfInterval!Date(Date(1998, 1, 2)));
5189 assert(interval2 == PosInfInterval!Date(Date(1994, 1, 2)));
5197 auto interval = PosInfInterval!Date(Date(2000, 7, 4));
5205 testInterval(interval, dur!"days"(22), PosInfInterval!Date(Date(2000, 6, 12)));
5206 testInterval(interval, dur!"days"(-22), PosInfInterval!Date(Date(2000, 7, 26)));
5208 const cInterval = PosInfInterval!Date(Date(2010, 7, 4));
5209 immutable iInterval = PosInfInterval!Date(Date(2010, 7, 4));
5214 auto interval1 = PosInfInterval!Date(Date(1996, 1, 2));
5215 auto interval2 = PosInfInterval!Date(Date(1996, 1, 2));
5218 assert(interval1 == PosInfInterval!Date(Date(1995, 12, 31)));
5221 assert(interval2 == PosInfInterval!Date(Date(1996, 1, 4)));
5230 auto interval = PosInfInterval!Date(Date(2000, 7, 4));
5239 testInterval(interval, 5, 0, AllowDayOverflow.yes, PosInfInterval!Date(Date(1995, 7, 4)));
5240 testInterval(interval, -5, 0, AllowDayOverflow.yes, PosInfInterval!Date(Date(2005, 7, 4)));
5242 auto interval2 = PosInfInterval!Date(Date(2000, 1, 29));
5244 testInterval(interval2, 1, 1, AllowDayOverflow.yes, PosInfInterval!Date(Date(1998, 12, 29)));
5245 testInterval(interval2, 1, -1, AllowDayOverflow.yes, PosInfInterval!Date(Date(1999, 3, 1)));
5246 testInterval(interval2, -1, -1, AllowDayOverflow.yes, PosInfInterval!Date(Date(2001, 3, 1)));
5247 testInterval(interval2, -1, 1, AllowDayOverflow.yes, PosInfInterval!Date(Date(2000, 12, 29)));
5249 testInterval(interval2, 1, 1, AllowDayOverflow.no, PosInfInterval!Date(Date(1998, 12, 29)));
5250 testInterval(interval2, 1, -1, AllowDayOverflow.no, PosInfInterval!Date(Date(1999, 2, 28)));
5251 testInterval(interval2, -1, -1, AllowDayOverflow.no, PosInfInterval!Date(Date(2001, 2, 28)));
5252 testInterval(interval2, -1, 1, AllowDayOverflow.no, PosInfInterval!Date(Date(2000, 12, 29)));
5255 const cPosInfInterval = PosInfInterval!Date(Date(2010, 7, 4));
5256 immutable iPosInfInterval = PosInfInterval!Date(Date(2010, 7, 4));
5261 auto interval1 = PosInfInterval!Date(Date(1996, 1, 2));
5262 auto interval2 = PosInfInterval!Date(Date(1996, 1, 2));
5265 assert(interval1 == PosInfInterval!Date(Date(1994, 1, 2)));
5268 assert(interval2 == PosInfInterval!Date(Date(1998, 1, 2)));
5276 auto posInfInterval = PosInfInterval!Date(Date(2010, 9, 19));
5278 static void testInterval(PosInfInterval!Date posInfInterval)
5280 posInfInterval.fwdRange(everyDayOfWeek!(Date, Direction.bwd)(DayOfWeek.fri)).popFront();
5285 assert(PosInfInterval!Date(Date(2010, 9, 12)).fwdRange(everyDayOfWeek!Date(DayOfWeek.fri)).front ==
5286 Date(2010, 9, 12));
5288 assert(PosInfInterval!Date(Date(2010, 9, 12)).fwdRange(everyDayOfWeek!Date(DayOfWeek.fri), PopFirst.yes).front ==
5289 Date(2010, 9, 17));
5292 auto interval = PosInfInterval!Date(Date(2010, 9, 1));
5293 auto func = delegate (in Date date)
5301 assert(range.front == Date(2010, 9, 1)); //An odd day. Using PopFirst.yes would have made this Date(2010, 9, 2).
5304 assert(range.front == Date(2010, 9, 2));
5307 assert(range.front == Date(2010, 9, 4));
5310 assert(range.front == Date(2010, 9, 6));
5313 assert(range.front == Date(2010, 9, 8));
5318 const cPosInfInterval = PosInfInterval!Date(Date(2010, 7, 4));
5319 immutable iPosInfInterval = PosInfInterval!Date(Date(2010, 7, 4));
5320 assert(!cPosInfInterval.fwdRange(everyDayOfWeek!Date(DayOfWeek.fri)).empty);
5321 assert(!iPosInfInterval.fwdRange(everyDayOfWeek!Date(DayOfWeek.fri)).empty);
5328 assert(PosInfInterval!Date(Date(2010, 7, 4)).toString() == "[2010-Jul-04 - ���)");
5330 const cPosInfInterval = PosInfInterval!Date(Date(2010, 7, 4));
5331 immutable iPosInfInterval = PosInfInterval!Date(Date(2010, 7, 4));
5356 auto interval = PosInfInterval!Date(Date(1996, 1, 2));
5392 assert(NegInfInterval!Date(Date(2012, 3, 1)).end == Date(2012, 3, 1));
5418 assert(!NegInfInterval!Date(Date(1996, 1, 2)).empty);
5432 assert(NegInfInterval!Date(Date(2012, 3, 1)).contains(Date(1994, 12, 24)));
5433 assert(NegInfInterval!Date(Date(2012, 3, 1)).contains(Date(2000, 1, 5)));
5434 assert(!NegInfInterval!Date(Date(2012, 3, 1)).contains(Date(2012, 3, 1)));
5455 assert(NegInfInterval!Date(Date(2012, 3, 1)).contains(
5456 Interval!Date(Date(1990, 7, 6), Date(2000, 8, 2))));
5458 assert(NegInfInterval!Date(Date(2012, 3, 1)).contains(
5459 Interval!Date(Date(1999, 1, 12), Date(2011, 9, 17))));
5461 assert(!NegInfInterval!Date(Date(2012, 3, 1)).contains(
5462 Interval!Date(Date(1998, 2, 28), Date(2013, 5, 1))));
5483 assert(!NegInfInterval!Date(Date(2012, 3, 1)).contains(
5484 PosInfInterval!Date(Date(1999, 5, 4))));
5501 assert(NegInfInterval!Date(Date(2012, 3, 1)).contains(
5502 NegInfInterval!Date(Date(1996, 5, 4))));
5504 assert(!NegInfInterval!Date(Date(2012, 3, 1)).contains(
5505 NegInfInterval!Date(Date(2013, 7, 9))));
5523 assert(!NegInfInterval!Date(Date(2012, 3, 1)).isBefore(Date(1994, 12, 24)));
5524 assert(!NegInfInterval!Date(Date(2012, 3, 1)).isBefore(Date(2000, 1, 5)));
5525 assert(NegInfInterval!Date(Date(2012, 3, 1)).isBefore(Date(2012, 3, 1)));
5547 assert(!NegInfInterval!Date(Date(2012, 3, 1)).isBefore(
5548 Interval!Date(Date(1990, 7, 6), Date(2000, 8, 2))));
5550 assert(!NegInfInterval!Date(Date(2012, 3, 1)).isBefore(
5551 Interval!Date(Date(1999, 1, 12), Date(2011, 9, 17))));
5553 assert(NegInfInterval!Date(Date(2012, 3, 1)).isBefore(
5554 Interval!Date(Date(2022, 10, 19), Date(2027, 6, 3))));
5573 assert(!NegInfInterval!Date(Date(2012, 3, 1)).isBefore(
5574 PosInfInterval!Date(Date(1999, 5, 4))));
5576 assert(NegInfInterval!Date(Date(2012, 3, 1)).isBefore(
5577 PosInfInterval!Date(Date(2012, 3, 1))));
5599 assert(!NegInfInterval!Date(Date(2012, 3, 1)).isBefore(
5600 NegInfInterval!Date(Date(1996, 5, 4))));
5602 assert(!NegInfInterval!Date(Date(2012, 3, 1)).isBefore(
5603 NegInfInterval!Date(Date(2013, 7, 9))));
5624 assert(!NegInfInterval!Date(Date(2012, 3, 1)).isAfter(Date(1994, 12, 24)));
5625 assert(!NegInfInterval!Date(Date(2012, 3, 1)).isAfter(Date(2000, 1, 5)));
5626 assert(!NegInfInterval!Date(Date(2012, 3, 1)).isAfter(Date(2012, 3, 1)));
5652 assert(!NegInfInterval!Date(Date(2012, 3, 1)).isAfter(
5653 Interval!Date(Date(1990, 7, 6), Date(2000, 8, 2))));
5655 assert(!NegInfInterval!Date(Date(2012, 3, 1)).isAfter(
5656 Interval!Date(Date(1999, 1, 12), Date(2011, 9, 17))));
5658 assert(!NegInfInterval!Date(Date(2012, 3, 1)).isAfter(
5659 Interval!Date(Date(2022, 10, 19), Date(2027, 6, 3))));
5681 assert(!NegInfInterval!Date(Date(2012, 3, 1)).isAfter(
5682 PosInfInterval!Date(Date(1999, 5, 4))));
5684 assert(!NegInfInterval!Date(Date(2012, 3, 1)).isAfter(
5685 PosInfInterval!Date(Date(2012, 3, 1))));
5706 assert(!NegInfInterval!Date(Date(2012, 3, 1)).isAfter(
5707 NegInfInterval!Date(Date(1996, 5, 4))));
5709 assert(!NegInfInterval!Date(Date(2012, 3, 1)).isAfter(
5710 NegInfInterval!Date(Date(2013, 7, 9))));
5731 assert(NegInfInterval!Date(Date(2012, 3, 1)).intersects(
5732 Interval!Date(Date(1990, 7, 6), Date(2000, 8, 2))));
5734 assert(NegInfInterval!Date(Date(2012, 3, 1)).intersects(
5735 Interval!Date(Date(1999, 1, 12), Date(2011, 9, 17))));
5737 assert(!NegInfInterval!Date(Date(2012, 3, 1)).intersects(
5738 Interval!Date(Date(2022, 10, 19), Date(2027, 6, 3))));
5757 assert(NegInfInterval!Date(Date(2012, 3, 1)).intersects(
5758 PosInfInterval!Date(Date(1999, 5, 4))));
5760 assert(!NegInfInterval!Date(Date(2012, 3, 1)).intersects(
5761 PosInfInterval!Date(Date(2012, 3, 1))));
5781 assert(NegInfInterval!Date(Date(2012, 3, 1)).intersects(
5782 NegInfInterval!Date(Date(1996, 5, 4))));
5784 assert(NegInfInterval!Date(Date(2012, 3, 1)).intersects(
5785 NegInfInterval!Date(Date(2013, 7, 9))));
5806 assert(NegInfInterval!Date(Date(2012, 3, 1)).intersection(
5807 Interval!Date(Date(1990, 7, 6), Date(2000, 8, 2))) ==
5808 Interval!Date(Date(1990, 7 , 6), Date(2000, 8, 2)));
5810 assert(NegInfInterval!Date(Date(2012, 3, 1)).intersection(
5811 Interval!Date(Date(1999, 1, 12), Date(2015, 9, 2))) ==
5812 Interval!Date(Date(1999, 1 , 12), Date(2012, 3, 1)));
5840 assert(NegInfInterval!Date(Date(2012, 3, 1)).intersection(
5841 PosInfInterval!Date(Date(1990, 7, 6))) ==
5842 Interval!Date(Date(1990, 7 , 6), Date(2012, 3, 1)));
5844 assert(NegInfInterval!Date(Date(2012, 3, 1)).intersection(
5845 PosInfInterval!Date(Date(1999, 1, 12))) ==
5846 Interval!Date(Date(1999, 1 , 12), Date(2012, 3, 1)));
5868 assert(NegInfInterval!Date(Date(2012, 3, 1)).intersection(
5869 NegInfInterval!Date(Date(1999, 7, 6))) ==
5870 NegInfInterval!Date(Date(1999, 7 , 6)));
5872 assert(NegInfInterval!Date(Date(2012, 3, 1)).intersection(
5873 NegInfInterval!Date(Date(2013, 1, 12))) ==
5874 NegInfInterval!Date(Date(2012, 3 , 1)));
5896 assert(!NegInfInterval!Date(Date(2012, 3, 1)).isAdjacent(
5897 Interval!Date(Date(1990, 7, 6), Date(2000, 8, 2))));
5899 assert(!NegInfInterval!Date(Date(2012, 3, 1)).isAdjacent(
5900 Interval!Date(Date(1999, 1, 12), Date(2012, 3, 1))));
5902 assert(NegInfInterval!Date(Date(2012, 3, 1)).isAdjacent(
5903 Interval!Date(Date(2012, 3, 1), Date(2019, 2, 2))));
5905 assert(!NegInfInterval!Date(Date(2012, 3, 1)).isAdjacent(
5906 Interval!Date(Date(2022, 10, 19), Date(2027, 6, 3))));
5925 assert(!NegInfInterval!Date(Date(2012, 3, 1)).isAdjacent(
5926 PosInfInterval!Date(Date(1999, 5, 4))));
5928 assert(NegInfInterval!Date(Date(2012, 3, 1)).isAdjacent(
5929 PosInfInterval!Date(Date(2012, 3, 1))));
5950 assert(!NegInfInterval!Date(Date(2012, 3, 1)).isAdjacent(
5951 NegInfInterval!Date(Date(1996, 5, 4))));
5953 assert(!NegInfInterval!Date(Date(2012, 3, 1)).isAdjacent(
5954 NegInfInterval!Date(Date(2012, 3, 1))));
5981 assert(NegInfInterval!Date(Date(2012, 3, 1)).merge(
5982 Interval!Date(Date(1990, 7, 6), Date(2000, 8, 2))) ==
5983 NegInfInterval!Date(Date(2012, 3 , 1)));
5985 assert(NegInfInterval!Date(Date(2012, 3, 1)).merge(
5986 Interval!Date(Date(1999, 1, 12), Date(2015, 9, 2))) ==
5987 NegInfInterval!Date(Date(2015, 9 , 2)));
6015 assert(NegInfInterval!Date(Date(2012, 3, 1)).merge(
6016 NegInfInterval!Date(Date(1999, 7, 6))) ==
6017 NegInfInterval!Date(Date(2012, 3 , 1)));
6019 assert(NegInfInterval!Date(Date(2012, 3, 1)).merge(
6020 NegInfInterval!Date(Date(2013, 1, 12))) ==
6021 NegInfInterval!Date(Date(2013, 1 , 12)));
6051 assert(NegInfInterval!Date(Date(2012, 3, 1)).span(
6052 Interval!Date(Date(1990, 7, 6), Date(2000, 8, 2))) ==
6053 NegInfInterval!Date(Date(2012, 3 , 1)));
6055 assert(NegInfInterval!Date(Date(2012, 3, 1)).span(
6056 Interval!Date(Date(1999, 1, 12), Date(2015, 9, 2))) ==
6057 NegInfInterval!Date(Date(2015, 9 , 2)));
6059 assert(NegInfInterval!Date(Date(1600, 1, 7)).span(
6060 Interval!Date(Date(2012, 3, 11), Date(2017, 7, 1))) ==
6061 NegInfInterval!Date(Date(2017, 7 , 1)));
6088 assert(NegInfInterval!Date(Date(2012, 3, 1)).span(
6089 NegInfInterval!Date(Date(1999, 7, 6))) ==
6090 NegInfInterval!Date(Date(2012, 3 , 1)));
6092 assert(NegInfInterval!Date(Date(2012, 3, 1)).span(
6093 NegInfInterval!Date(Date(2013, 1, 12))) ==
6094 NegInfInterval!Date(Date(2013, 1 , 12)));
6114 auto interval1 = NegInfInterval!Date(Date(2012, 4, 5));
6115 auto interval2 = NegInfInterval!Date(Date(2012, 4, 5));
6118 assert(interval1 == NegInfInterval!Date(Date(2012, 5, 25)));
6121 assert(interval2 == NegInfInterval!Date( Date(2012, 2, 15)));
6154 auto interval1 = NegInfInterval!Date(Date(2012, 3, 1));
6155 auto interval2 = NegInfInterval!Date(Date(2012, 3, 1));
6158 assert(interval1 == NegInfInterval!Date(Date(2014, 3, 1)));
6161 assert(interval2 == NegInfInterval!Date(Date(2010, 3, 1)));
6186 auto interval1 = NegInfInterval!Date(Date(2012, 3, 1));
6187 auto interval2 = NegInfInterval!Date(Date(2012, 3, 1));
6190 assert(interval1 == NegInfInterval!Date(Date(2012, 3, 3)));
6193 assert(interval2 == NegInfInterval!Date(Date(2012, 2, 28)));
6222 auto interval1 = NegInfInterval!Date(Date(2012, 3, 1));
6223 auto interval2 = NegInfInterval!Date(Date(2012, 3, 1));
6226 assert(interval1 == NegInfInterval!Date(Date(2014, 3, 1)));
6229 assert(interval2 == NegInfInterval!Date(Date(2010, 3, 1)));
6295 auto interval = NegInfInterval!Date(Date(2010, 9, 9));
6296 auto func = delegate (in Date date) //For iterating over even-numbered days.
6305 assert(range.front == Date(2010, 9, 9)); //An odd day. Using PopFirst.yes would have made this Date(2010, 9, 8).
6308 assert(range.front == Date(2010, 9, 8));
6311 assert(range.front == Date(2010, 9, 6));
6314 assert(range.front == Date(2010, 9, 4));
6317 assert(range.front == Date(2010, 9, 2));
6382 NegInfInterval!Date(Date.init);
6393 assert(NegInfInterval!Date(Date(2010, 1, 1)).end == Date(2010, 1, 1));
6394 assert(NegInfInterval!Date(Date(2010, 1, 1)).end == Date(2010, 1, 1));
6395 assert(NegInfInterval!Date(Date(1998, 1, 1)).end == Date(1998, 1, 1));
6397 const cNegInfInterval = NegInfInterval!Date(Date(2012, 1, 7));
6398 immutable iNegInfInterval = NegInfInterval!Date(Date(2012, 1, 7));
6399 assert(cNegInfInterval.end != Date.init);
6400 assert(iNegInfInterval.end != Date.init);
6403 assert(NegInfInterval!Date(Date(2012, 3, 1)).end == Date(2012, 3, 1));
6412 assert(!NegInfInterval!Date(Date(2010, 1, 1)).empty);
6417 const cNegInfInterval = NegInfInterval!Date(Date(2012, 1, 7));
6418 immutable iNegInfInterval = NegInfInterval!Date(Date(2012, 1, 7));
6423 assert(!NegInfInterval!Date(Date(1996, 1, 2)).empty);
6431 auto negInfInterval = NegInfInterval!Date(Date(2012, 1, 7));
6433 assert(negInfInterval.contains(Date(2009, 7, 4)));
6434 assert(negInfInterval.contains(Date(2010, 7, 3)));
6435 assert(negInfInterval.contains(Date(2010, 7, 4)));
6436 assert(negInfInterval.contains(Date(2010, 7, 5)));
6437 assert(negInfInterval.contains(Date(2011, 7, 1)));
6438 assert(negInfInterval.contains(Date(2012, 1, 6)));
6439 assert(!negInfInterval.contains(Date(2012, 1, 7)));
6440 assert(!negInfInterval.contains(Date(2012, 1, 8)));
6441 assert(!negInfInterval.contains(Date(2013, 1, 7)));
6443 const cdate = Date(2010, 7, 6);
6444 const cNegInfInterval = NegInfInterval!Date(Date(2012, 1, 7));
6445 immutable iNegInfInterval = NegInfInterval!Date(Date(2012, 1, 7));
6451 assert(NegInfInterval!Date(Date(2012, 3, 1)).contains(Date(1994, 12, 24)));
6452 assert(NegInfInterval!Date(Date(2012, 3, 1)).contains(Date(2000, 1, 5)));
6453 assert(!NegInfInterval!Date(Date(2012, 3, 1)).contains(Date(2012, 3, 1)));
6461 auto negInfInterval = NegInfInterval!Date(Date(2012, 1, 7));
6463 static void testInterval(in NegInfInterval!Date negInfInterval, in Interval!Date interval)
6468 assertThrown!DateTimeException(testInterval(negInfInterval, Interval!Date(Date(2010, 7, 4), dur!"days"(0))));
6471 assert(negInfInterval.contains(Interval!Date(Date(2010, 7, 1), Date(2010, 7, 3))));
6472 assert(!negInfInterval.contains(Interval!Date(Date(2010, 7, 1), Date(2013, 7, 3))));
6473 assert(negInfInterval.contains(Interval!Date(Date(2010, 7, 3), Date(2010, 7, 4))));
6474 assert(negInfInterval.contains(Interval!Date(Date(2010, 7, 3), Date(2010, 7, 5))));
6475 assert(negInfInterval.contains(Interval!Date(Date(2010, 7, 3), Date(2012, 1, 7))));
6476 assert(!negInfInterval.contains(Interval!Date(Date(2010, 7, 3), Date(2012, 1, 8))));
6477 assert(negInfInterval.contains(Interval!Date(Date(2010, 7, 5), Date(2012, 1, 6))));
6478 assert(negInfInterval.contains(Interval!Date(Date(2010, 7, 5), Date(2012, 1, 7))));
6479 assert(negInfInterval.contains(Interval!Date(Date(2012, 1, 6), Date(2012, 1, 7))));
6480 assert(!negInfInterval.contains(Interval!Date(Date(2012, 1, 6), Date(2012, 1, 8))));
6481 assert(!negInfInterval.contains(Interval!Date(Date(2012, 1, 7), Date(2012, 1, 8))));
6482 assert(!negInfInterval.contains(Interval!Date(Date(2012, 1, 8), Date(2012, 1, 9))));
6484 assert(negInfInterval.contains(NegInfInterval!Date(Date(2010, 7, 3))));
6485 assert(negInfInterval.contains(NegInfInterval!Date(Date(2010, 7, 4))));
6486 assert(negInfInterval.contains(NegInfInterval!Date(Date(2010, 7, 5))));
6487 assert(negInfInterval.contains(NegInfInterval!Date(Date(2012, 1, 6))));
6488 assert(negInfInterval.contains(NegInfInterval!Date(Date(2012, 1, 7))));
6489 assert(!negInfInterval.contains(NegInfInterval!Date(Date(2012, 1, 8))));
6491 assert(!NegInfInterval!Date(Date(2010, 7, 3)).contains(negInfInterval));
6492 assert(!NegInfInterval!Date(Date(2010, 7, 4)).contains(negInfInterval));
6493 assert(!NegInfInterval!Date(Date(2010, 7, 5)).contains(negInfInterval));
6494 assert(!NegInfInterval!Date(Date(2012, 1, 6)).contains(negInfInterval));
6495 assert(NegInfInterval!Date(Date(2012, 1, 7)).contains(negInfInterval));
6496 assert(NegInfInterval!Date(Date(2012, 1, 8)).contains(negInfInterval));
6498 assert(!negInfInterval.contains(PosInfInterval!Date(Date(2010, 7, 3))));
6499 assert(!negInfInterval.contains(PosInfInterval!Date(Date(2010, 7, 4))));
6500 assert(!negInfInterval.contains(PosInfInterval!Date(Date(2010, 7, 5))));
6501 assert(!negInfInterval.contains(PosInfInterval!Date(Date(2012, 1, 6))));
6502 assert(!negInfInterval.contains(PosInfInterval!Date(Date(2012, 1, 7))));
6503 assert(!negInfInterval.contains(PosInfInterval!Date(Date(2012, 1, 8))));
6505 auto interval = Interval!Date(Date(2010, 7, 4), Date(2012, 1, 7));
6506 const cInterval = Interval!Date(Date(2010, 7, 4), Date(2012, 1, 7));
6507 immutable iInterval = Interval!Date(Date(2010, 7, 4), Date(2012, 1, 7));
6508 auto posInfInterval = PosInfInterval!Date(Date(2010, 7, 4));
6509 const cPosInfInterval = PosInfInterval!Date(Date(2010, 7, 4));
6510 immutable iPosInfInterval = PosInfInterval!Date(Date(2010, 7, 4));
6511 const cNegInfInterval = NegInfInterval!Date(Date(2012, 1, 7));
6512 immutable iNegInfInterval = NegInfInterval!Date(Date(2012, 1, 7));
6542 assert(NegInfInterval!Date(Date(2012, 3, 1)).contains(Interval!Date(Date(1990, 7, 6), Date(2000, 8, 2))));
6543 assert(NegInfInterval!Date(Date(2012, 3, 1)).contains(Interval!Date(Date(1999, 1, 12), Date(2011, 9, 17))));
6544 assert(!NegInfInterval!Date(Date(2012, 3, 1)).contains(Interval!Date(Date(1998, 2, 28), Date(2013, 5, 1))));
6546 assert(!NegInfInterval!Date(Date(2012, 3, 1)).contains(PosInfInterval!Date(Date(1999, 5, 4))));
6548 assert(NegInfInterval!Date(Date(2012, 3, 1)).contains(NegInfInterval!Date(Date(1996, 5, 4))));
6549 assert(!NegInfInterval!Date(Date(2012, 3, 1)).contains(NegInfInterval!Date(Date(2013, 7, 9))));
6557 auto negInfInterval = NegInfInterval!Date(Date(2012, 1, 7));
6559 assert(!negInfInterval.isBefore(Date(2009, 7, 4)));
6560 assert(!negInfInterval.isBefore(Date(2010, 7, 3)));
6561 assert(!negInfInterval.isBefore(Date(2010, 7, 4)));
6562 assert(!negInfInterval.isBefore(Date(2010, 7, 5)));
6563 assert(!negInfInterval.isBefore(Date(2011, 7, 1)));
6564 assert(!negInfInterval.isBefore(Date(2012, 1, 6)));
6565 assert(negInfInterval.isBefore(Date(2012, 1, 7)));
6566 assert(negInfInterval.isBefore(Date(2012, 1, 8)));
6567 assert(negInfInterval.isBefore(Date(2013, 1, 7)));
6569 const cdate = Date(2010, 7, 6);
6570 const cNegInfInterval = NegInfInterval!Date(Date(2012, 1, 7));
6571 immutable iNegInfInterval = NegInfInterval!Date(Date(2012, 1, 7));
6577 assert(!NegInfInterval!Date(Date(2012, 3, 1)).isBefore(Date(1994, 12, 24)));
6578 assert(!NegInfInterval!Date(Date(2012, 3, 1)).isBefore(Date(2000, 1, 5)));
6579 assert(NegInfInterval!Date(Date(2012, 3, 1)).isBefore(Date(2012, 3, 1)));
6587 auto negInfInterval = NegInfInterval!Date(Date(2012, 1, 7));
6589 static void testInterval(in NegInfInterval!Date negInfInterval, in Interval!Date interval)
6594 assertThrown!DateTimeException(testInterval(negInfInterval, Interval!Date(Date(2010, 7, 4), dur!"days"(0))));
6597 assert(!negInfInterval.isBefore(Interval!Date(Date(2010, 7, 1), Date(2010, 7, 3))));
6598 assert(!negInfInterval.isBefore(Interval!Date(Date(2010, 7, 1), Date(2013, 7, 3))));
6599 assert(!negInfInterval.isBefore(Interval!Date(Date(2010, 7, 3), Date(2010, 7, 4))));
6600 assert(!negInfInterval.isBefore(Interval!Date(Date(2010, 7, 3), Date(2010, 7, 5))));
6601 assert(!negInfInterval.isBefore(Interval!Date(Date(2010, 7, 3), Date(2012, 1, 7))));
6602 assert(!negInfInterval.isBefore(Interval!Date(Date(2010, 7, 3), Date(2012, 1, 8))));
6603 assert(!negInfInterval.isBefore(Interval!Date(Date(2010, 7, 5), Date(2012, 1, 6))));
6604 assert(!negInfInterval.isBefore(Interval!Date(Date(2010, 7, 5), Date(2012, 1, 7))));
6605 assert(!negInfInterval.isBefore(Interval!Date(Date(2012, 1, 6), Date(2012, 1, 7))));
6606 assert(!negInfInterval.isBefore(Interval!Date(Date(2012, 1, 6), Date(2012, 1, 8))));
6607 assert(negInfInterval.isBefore(Interval!Date(Date(2012, 1, 7), Date(2012, 1, 8))));
6608 assert(negInfInterval.isBefore(Interval!Date(Date(2012, 1, 8), Date(2012, 1, 9))));
6610 assert(!negInfInterval.isBefore(NegInfInterval!Date(Date(2010, 7, 3))));
6611 assert(!negInfInterval.isBefore(NegInfInterval!Date(Date(2010, 7, 4))));
6612 assert(!negInfInterval.isBefore(NegInfInterval!Date(Date(2010, 7, 5))));
6613 assert(!negInfInterval.isBefore(NegInfInterval!Date(Date(2012, 1, 6))));
6614 assert(!negInfInterval.isBefore(NegInfInterval!Date(Date(2012, 1, 7))));
6615 assert(!negInfInterval.isBefore(NegInfInterval!Date(Date(2012, 1, 8))));
6617 assert(!NegInfInterval!Date(Date(2010, 7, 3)).isBefore(negInfInterval));
6618 assert(!NegInfInterval!Date(Date(2010, 7, 4)).isBefore(negInfInterval));
6619 assert(!NegInfInterval!Date(Date(2010, 7, 5)).isBefore(negInfInterval));
6620 assert(!NegInfInterval!Date(Date(2012, 1, 6)).isBefore(negInfInterval));
6621 assert(!NegInfInterval!Date(Date(2012, 1, 7)).isBefore(negInfInterval));
6622 assert(!NegInfInterval!Date(Date(2012, 1, 8)).isBefore(negInfInterval));
6624 assert(!negInfInterval.isBefore(PosInfInterval!Date(Date(2010, 7, 3))));
6625 assert(!negInfInterval.isBefore(PosInfInterval!Date(Date(2010, 7, 4))));
6626 assert(!negInfInterval.isBefore(PosInfInterval!Date(Date(2010, 7, 5))));
6627 assert(!negInfInterval.isBefore(PosInfInterval!Date(Date(2012, 1, 6))));
6628 assert(negInfInterval.isBefore(PosInfInterval!Date(Date(2012, 1, 7))));
6629 assert(negInfInterval.isBefore(PosInfInterval!Date(Date(2012, 1, 8))));
6631 auto interval = Interval!Date(Date(2010, 7, 4), Date(2012, 1, 7));
6632 const cInterval = Interval!Date(Date(2010, 7, 4), Date(2012, 1, 7));
6633 immutable iInterval = Interval!Date(Date(2010, 7, 4), Date(2012, 1, 7));
6634 auto posInfInterval = PosInfInterval!Date(Date(2010, 7, 4));
6635 const cPosInfInterval = PosInfInterval!Date(Date(2010, 7, 4));
6636 immutable iPosInfInterval = PosInfInterval!Date(Date(2010, 7, 4));
6637 const cNegInfInterval = NegInfInterval!Date(Date(2012, 1, 7));
6638 immutable iNegInfInterval = NegInfInterval!Date(Date(2012, 1, 7));
6668 assert(!NegInfInterval!Date(Date(2012, 3, 1)).isBefore(Interval!Date(Date(1990, 7, 6), Date(2000, 8, 2))));
6669 assert(!NegInfInterval!Date(Date(2012, 3, 1)).isBefore(Interval!Date(Date(1999, 1, 12), Date(2011, 9, 17))));
6670 assert(NegInfInterval!Date(Date(2012, 3, 1)).isBefore(Interval!Date(Date(2022, 10, 19), Date(2027, 6, 3))));
6672 assert(!NegInfInterval!Date(Date(2012, 3, 1)).isBefore(PosInfInterval!Date(Date(1999, 5, 4))));
6673 assert(NegInfInterval!Date(Date(2012, 3, 1)).isBefore(PosInfInterval!Date(Date(2012, 3, 1))));
6675 assert(!NegInfInterval!Date(Date(2012, 3, 1)).isBefore(NegInfInterval!Date(Date(1996, 5, 4))));
6676 assert(!NegInfInterval!Date(Date(2012, 3, 1)).isBefore(NegInfInterval!Date(Date(2013, 7, 9))));
6684 auto negInfInterval = NegInfInterval!Date(Date(2012, 1, 7));
6686 assert(!negInfInterval.isAfter(Date(2009, 7, 4)));
6687 assert(!negInfInterval.isAfter(Date(2010, 7, 3)));
6688 assert(!negInfInterval.isAfter(Date(2010, 7, 4)));
6689 assert(!negInfInterval.isAfter(Date(2010, 7, 5)));
6690 assert(!negInfInterval.isAfter(Date(2011, 7, 1)));
6691 assert(!negInfInterval.isAfter(Date(2012, 1, 6)));
6692 assert(!negInfInterval.isAfter(Date(2012, 1, 7)));
6693 assert(!negInfInterval.isAfter(Date(2012, 1, 8)));
6694 assert(!negInfInterval.isAfter(Date(2013, 1, 7)));
6696 const cdate = Date(2010, 7, 6);
6697 const cNegInfInterval = NegInfInterval!Date(Date(2012, 1, 7));
6698 immutable iNegInfInterval = NegInfInterval!Date(Date(2012, 1, 7));
6709 auto negInfInterval = NegInfInterval!Date(Date(2012, 1, 7));
6711 static void testInterval(in NegInfInterval!Date negInfInterval, in Interval!Date interval)
6716 assertThrown!DateTimeException(testInterval(negInfInterval, Interval!Date(Date(2010, 7, 4), dur!"days"(0))));
6719 assert(!negInfInterval.isAfter(Interval!Date(Date(2010, 7, 1), Date(2010, 7, 3))));
6720 assert(!negInfInterval.isAfter(Interval!Date(Date(2010, 7, 1), Date(2013, 7, 3))));
6721 assert(!negInfInterval.isAfter(Interval!Date(Date(2010, 7, 3), Date(2010, 7, 4))));
6722 assert(!negInfInterval.isAfter(Interval!Date(Date(2010, 7, 3), Date(2010, 7, 5))));
6723 assert(!negInfInterval.isAfter(Interval!Date(Date(2010, 7, 3), Date(2012, 1, 7))));
6724 assert(!negInfInterval.isAfter(Interval!Date(Date(2010, 7, 3), Date(2012, 1, 8))));
6725 assert(!negInfInterval.isAfter(Interval!Date(Date(2010, 7, 5), Date(2012, 1, 6))));
6726 assert(!negInfInterval.isAfter(Interval!Date(Date(2010, 7, 5), Date(2012, 1, 7))));
6727 assert(!negInfInterval.isAfter(Interval!Date(Date(2012, 1, 6), Date(2012, 1, 7))));
6728 assert(!negInfInterval.isAfter(Interval!Date(Date(2012, 1, 6), Date(2012, 1, 8))));
6729 assert(!negInfInterval.isAfter(Interval!Date(Date(2012, 1, 7), Date(2012, 1, 8))));
6730 assert(!negInfInterval.isAfter(Interval!Date(Date(2012, 1, 8), Date(2012, 1, 9))));
6732 assert(!negInfInterval.isAfter(NegInfInterval!Date(Date(2010, 7, 3))));
6733 assert(!negInfInterval.isAfter(NegInfInterval!Date(Date(2010, 7, 4))));
6734 assert(!negInfInterval.isAfter(NegInfInterval!Date(Date(2010, 7, 5))));
6735 assert(!negInfInterval.isAfter(NegInfInterval!Date(Date(2012, 1, 6))));
6736 assert(!negInfInterval.isAfter(NegInfInterval!Date(Date(2012, 1, 7))));
6737 assert(!negInfInterval.isAfter(NegInfInterval!Date(Date(2012, 1, 8))));
6739 assert(!NegInfInterval!Date(Date(2010, 7, 3)).isAfter(negInfInterval));
6740 assert(!NegInfInterval!Date(Date(2010, 7, 4)).isAfter(negInfInterval));
6741 assert(!NegInfInterval!Date(Date(2010, 7, 5)).isAfter(negInfInterval));
6742 assert(!NegInfInterval!Date(Date(2012, 1, 6)).isAfter(negInfInterval));
6743 assert(!NegInfInterval!Date(Date(2012, 1, 7)).isAfter(negInfInterval));
6744 assert(!NegInfInterval!Date(Date(2012, 1, 8)).isAfter(negInfInterval));
6746 assert(!negInfInterval.isAfter(PosInfInterval!Date(Date(2010, 7, 3))));
6747 assert(!negInfInterval.isAfter(PosInfInterval!Date(Date(2010, 7, 4))));
6748 assert(!negInfInterval.isAfter(PosInfInterval!Date(Date(2010, 7, 5))));
6749 assert(!negInfInterval.isAfter(PosInfInterval!Date(Date(2012, 1, 6))));
6750 assert(!negInfInterval.isAfter(PosInfInterval!Date(Date(2012, 1, 7))));
6751 assert(!negInfInterval.isAfter(PosInfInterval!Date(Date(2012, 1, 8))));
6753 auto interval = Interval!Date(Date(2010, 7, 4), Date(2012, 1, 7));
6754 const cInterval = Interval!Date(Date(2010, 7, 4), Date(2012, 1, 7));
6755 immutable iInterval = Interval!Date(Date(2010, 7, 4), Date(2012, 1, 7));
6756 auto posInfInterval = PosInfInterval!Date(Date(2010, 7, 4));
6757 const cPosInfInterval = PosInfInterval!Date(Date(2010, 7, 4));
6758 immutable iPosInfInterval = PosInfInterval!Date(Date(2010, 7, 4));
6759 const cNegInfInterval = NegInfInterval!Date(Date(2012, 1, 7));
6760 immutable iNegInfInterval = NegInfInterval!Date(Date(2012, 1, 7));
6790 assert(!NegInfInterval!Date(Date(2012, 3, 1)).isAfter(Date(1994, 12, 24)));
6791 assert(!NegInfInterval!Date(Date(2012, 3, 1)).isAfter(Date(2000, 1, 5)));
6792 assert(!NegInfInterval!Date(Date(2012, 3, 1)).isAfter(Date(2012, 3, 1)));
6794 assert(!NegInfInterval!Date(Date(2012, 3, 1)).isAfter(Interval!Date(Date(1990, 7, 6), Date(2000, 8, 2))));
6795 assert(!NegInfInterval!Date(Date(2012, 3, 1)).isAfter(Interval!Date(Date(1999, 1, 12), Date(2011, 9, 17))));
6796 assert(!NegInfInterval!Date(Date(2012, 3, 1)).isAfter(Interval!Date(Date(2022, 10, 19), Date(2027, 6, 3))));
6798 assert(!NegInfInterval!Date(Date(2012, 3, 1)).isAfter(PosInfInterval!Date(Date(1999, 5, 4))));
6799 assert(!NegInfInterval!Date(Date(2012, 3, 1)).isAfter(PosInfInterval!Date(Date(2012, 3, 1))));
6801 assert(!NegInfInterval!Date(Date(2012, 3, 1)).isAfter(NegInfInterval!Date(Date(1996, 5, 4))));
6802 assert(!NegInfInterval!Date(Date(2012, 3, 1)).isAfter(NegInfInterval!Date(Date(2013, 7, 9))));
6810 auto negInfInterval = NegInfInterval!Date(Date(2012, 1, 7));
6812 static void testInterval(in NegInfInterval!Date negInfInterval, in Interval!Date interval)
6817 assertThrown!DateTimeException(testInterval(negInfInterval, Interval!Date(Date(2010, 7, 4), dur!"days"(0))));
6820 assert(negInfInterval.intersects(Interval!Date(Date(2010, 7, 1), Date(2010, 7, 3))));
6821 assert(negInfInterval.intersects(Interval!Date(Date(2010, 7, 1), Date(2013, 7, 3))));
6822 assert(negInfInterval.intersects(Interval!Date(Date(2010, 7, 3), Date(2010, 7, 4))));
6823 assert(negInfInterval.intersects(Interval!Date(Date(2010, 7, 3), Date(2010, 7, 5))));
6824 assert(negInfInterval.intersects(Interval!Date(Date(2010, 7, 3), Date(2012, 1, 7))));
6825 assert(negInfInterval.intersects(Interval!Date(Date(2010, 7, 3), Date(2012, 1, 8))));
6826 assert(negInfInterval.intersects(Interval!Date(Date(2010, 7, 5), Date(2012, 1, 6))));
6827 assert(negInfInterval.intersects(Interval!Date(Date(2010, 7, 5), Date(2012, 1, 7))));
6828 assert(negInfInterval.intersects(Interval!Date(Date(2012, 1, 6), Date(2012, 1, 7))));
6829 assert(negInfInterval.intersects(Interval!Date(Date(2012, 1, 6), Date(2012, 1, 8))));
6830 assert(!negInfInterval.intersects(Interval!Date(Date(2012, 1, 7), Date(2012, 1, 8))));
6831 assert(!negInfInterval.intersects(Interval!Date(Date(2012, 1, 8), Date(2012, 1, 9))));
6833 assert(negInfInterval.intersects(NegInfInterval!Date(Date(2010, 7, 3))));
6834 assert(negInfInterval.intersects(NegInfInterval!Date(Date(2010, 7, 4))));
6835 assert(negInfInterval.intersects(NegInfInterval!Date(Date(2010, 7, 5))));
6836 assert(negInfInterval.intersects(NegInfInterval!Date(Date(2012, 1, 6))));
6837 assert(negInfInterval.intersects(NegInfInterval!Date(Date(2012, 1, 7))));
6838 assert(negInfInterval.intersects(NegInfInterval!Date(Date(2012, 1, 8))));
6840 assert(NegInfInterval!Date(Date(2010, 7, 3)).intersects(negInfInterval));
6841 assert(NegInfInterval!Date(Date(2010, 7, 4)).intersects(negInfInterval));
6842 assert(NegInfInterval!Date(Date(2010, 7, 5)).intersects(negInfInterval));
6843 assert(NegInfInterval!Date(Date(2012, 1, 6)).intersects(negInfInterval));
6844 assert(NegInfInterval!Date(Date(2012, 1, 7)).intersects(negInfInterval));
6845 assert(NegInfInterval!Date(Date(2012, 1, 8)).intersects(negInfInterval));
6847 assert(negInfInterval.intersects(PosInfInterval!Date(Date(2010, 7, 3))));
6848 assert(negInfInterval.intersects(PosInfInterval!Date(Date(2010, 7, 4))));
6849 assert(negInfInterval.intersects(PosInfInterval!Date(Date(2010, 7, 5))));
6850 assert(negInfInterval.intersects(PosInfInterval!Date(Date(2012, 1, 6))));
6851 assert(!negInfInterval.intersects(PosInfInterval!Date(Date(2012, 1, 7))));
6852 assert(!negInfInterval.intersects(PosInfInterval!Date(Date(2012, 1, 8))));
6854 auto interval = Interval!Date(Date(2010, 7, 4), Date(2012, 1, 7));
6855 const cInterval = Interval!Date(Date(2010, 7, 4), Date(2012, 1, 7));
6856 immutable iInterval = Interval!Date(Date(2010, 7, 4), Date(2012, 1, 7));
6857 auto posInfInterval = PosInfInterval!Date(Date(2010, 7, 4));
6858 const cPosInfInterval = PosInfInterval!Date(Date(2010, 7, 4));
6859 immutable iPosInfInterval = PosInfInterval!Date(Date(2010, 7, 4));
6860 const cNegInfInterval = NegInfInterval!Date(Date(2012, 1, 7));
6861 immutable iNegInfInterval = NegInfInterval!Date(Date(2012, 1, 7));
6891 assert(NegInfInterval!Date(Date(2012, 3, 1)).intersects(Interval!Date(Date(1990, 7, 6), Date(2000, 8, 2))));
6892 assert(NegInfInterval!Date(Date(2012, 3, 1)).intersects(Interval!Date(Date(1999, 1, 12), Date(2011, 9, 17))));
6893 assert(!NegInfInterval!Date(Date(2012, 3, 1)).intersects(Interval!Date(Date(2022, 10, 19), Date(2027, 6, 3))));
6895 assert(NegInfInterval!Date(Date(2012, 3, 1)).intersects(PosInfInterval!Date(Date(1999, 5, 4))));
6896 assert(!NegInfInterval!Date(Date(2012, 3, 1)).intersects(PosInfInterval!Date(Date(2012, 3, 1))));
6898 assert(NegInfInterval!Date(Date(2012, 3, 1)).intersects(NegInfInterval!Date(Date(1996, 5, 4))));
6899 assert(NegInfInterval!Date(Date(2012, 3, 1)).intersects(NegInfInterval!Date(Date(2013, 7, 9))));
6907 auto negInfInterval = NegInfInterval!Date(Date(2012, 1, 7));
6914 assertThrown!DateTimeException(testInterval(negInfInterval, Interval!Date(Date(2010, 7, 4), dur!"days"(0))));
6916 assertThrown!DateTimeException(testInterval(negInfInterval, Interval!Date(Date(2012, 1, 7), Date(2012, 1, 8))));
6917 assertThrown!DateTimeException(testInterval(negInfInterval, Interval!Date(Date(2012, 1, 8), Date(2012, 1, 9))));
6919 assertThrown!DateTimeException(testInterval(negInfInterval, PosInfInterval!Date(Date(2012, 1, 7))));
6920 assertThrown!DateTimeException(testInterval(negInfInterval, PosInfInterval!Date(Date(2012, 1, 8))));
6923 assert(negInfInterval.intersection(Interval!Date(Date(2010, 7, 1), Date(2010, 7, 3))) ==
6924 Interval!Date(Date(2010, 7, 1), Date(2010, 7, 3)));
6925 assert(negInfInterval.intersection(Interval!Date(Date(2010, 7, 1), Date(2013, 7, 3))) ==
6926 Interval!Date(Date(2010, 7, 1), Date(2012, 1, 7)));
6927 assert(negInfInterval.intersection(Interval!Date(Date(2010, 7, 3), Date(2010, 7, 4))) ==
6928 Interval!Date(Date(2010, 7, 3), Date(2010, 7, 4)));
6929 assert(negInfInterval.intersection(Interval!Date(Date(2010, 7, 3), Date(2010, 7, 5))) ==
6930 Interval!Date(Date(2010, 7, 3), Date(2010, 7, 5)));
6931 assert(negInfInterval.intersection(Interval!Date(Date(2010, 7, 3), Date(2012, 1, 7))) ==
6932 Interval!Date(Date(2010, 7, 3), Date(2012, 1, 7)));
6933 assert(negInfInterval.intersection(Interval!Date(Date(2010, 7, 3), Date(2012, 1, 8))) ==
6934 Interval!Date(Date(2010, 7, 3), Date(2012, 1, 7)));
6935 assert(negInfInterval.intersection(Interval!Date(Date(2010, 7, 5), Date(2012, 1, 6))) ==
6936 Interval!Date(Date(2010, 7, 5), Date(2012, 1, 6)));
6937 assert(negInfInterval.intersection(Interval!Date(Date(2010, 7, 5), Date(2012, 1, 7))) ==
6938 Interval!Date(Date(2010, 7, 5), Date(2012, 1, 7)));
6939 assert(negInfInterval.intersection(Interval!Date(Date(2012, 1, 6), Date(2012, 1, 7))) ==
6940 Interval!Date(Date(2012, 1, 6), Date(2012, 1, 7)));
6941 assert(negInfInterval.intersection(Interval!Date(Date(2012, 1, 6), Date(2012, 1, 8))) ==
6942 Interval!Date(Date(2012, 1, 6), Date(2012, 1, 7)));
6944 assert(negInfInterval.intersection(NegInfInterval!Date(Date(2010, 7, 3))) == NegInfInterval!Date(Date(2010, 7, 3)));
6945 assert(negInfInterval.intersection(NegInfInterval!Date(Date(2010, 7, 4))) == NegInfInterval!Date(Date(2010, 7, 4)));
6946 assert(negInfInterval.intersection(NegInfInterval!Date(Date(2010, 7, 5))) == NegInfInterval!Date(Date(2010, 7, 5)));
6947 assert(negInfInterval.intersection(NegInfInterval!Date(Date(2012, 1, 6))) == NegInfInterval!Date(Date(2012, 1, 6)));
6948 assert(negInfInterval.intersection(NegInfInterval!Date(Date(2012, 1, 7))) == NegInfInterval!Date(Date(2012, 1, 7)));
6949 assert(negInfInterval.intersection(NegInfInterval!Date(Date(2012, 1, 8))) == NegInfInterval!Date(Date(2012, 1, 7)));
6951 assert(NegInfInterval!Date(Date(2010, 7, 3)).intersection(negInfInterval) == NegInfInterval!Date(Date(2010, 7, 3)));
6952 assert(NegInfInterval!Date(Date(2010, 7, 4)).intersection(negInfInterval) == NegInfInterval!Date(Date(2010, 7, 4)));
6953 assert(NegInfInterval!Date(Date(2010, 7, 5)).intersection(negInfInterval) == NegInfInterval!Date(Date(2010, 7, 5)));
6954 assert(NegInfInterval!Date(Date(2012, 1, 6)).intersection(negInfInterval) == NegInfInterval!Date(Date(2012, 1, 6)));
6955 assert(NegInfInterval!Date(Date(2012, 1, 7)).intersection(negInfInterval) == NegInfInterval!Date(Date(2012, 1, 7)));
6956 assert(NegInfInterval!Date(Date(2012, 1, 8)).intersection(negInfInterval) == NegInfInterval!Date(Date(2012, 1, 7)));
6958 assert(negInfInterval.intersection(PosInfInterval!Date(Date(2010, 7, 3))) ==
6959 Interval!Date(Date(2010, 7, 3), Date(2012, 1 ,7)));
6960 assert(negInfInterval.intersection(PosInfInterval!Date(Date(2010, 7, 4))) ==
6961 Interval!Date(Date(2010, 7, 4), Date(2012, 1 ,7)));
6962 assert(negInfInterval.intersection(PosInfInterval!Date(Date(2010, 7, 5))) ==
6963 Interval!Date(Date(2010, 7, 5), Date(2012, 1 ,7)));
6964 assert(negInfInterval.intersection(PosInfInterval!Date(Date(2012, 1, 6))) ==
6965 Interval!Date(Date(2012, 1, 6), Date(2012, 1 ,7)));
6967 auto interval = Interval!Date(Date(2010, 7, 4), Date(2012, 1, 7));
6968 const cInterval = Interval!Date(Date(2010, 7, 4), Date(2012, 1, 7));
6969 immutable iInterval = Interval!Date(Date(2010, 7, 4), Date(2012, 1, 7));
6970 auto posInfInterval = PosInfInterval!Date(Date(2010, 7, 4));
6971 const cPosInfInterval = PosInfInterval!Date(Date(2010, 7, 4));
6972 immutable iPosInfInterval = PosInfInterval!Date(Date(2010, 7, 4));
6973 const cNegInfInterval = NegInfInterval!Date(Date(2012, 1, 7));
6974 immutable iNegInfInterval = NegInfInterval!Date(Date(2012, 1, 7));
7004 assert(NegInfInterval!Date(Date(2012, 3, 1)).intersection(Interval!Date(Date(1990, 7, 6), Date(2000, 8, 2))) ==
7005 Interval!Date(Date(1990, 7, 6), Date(2000, 8, 2)));
7006 assert(NegInfInterval!Date(Date(2012, 3, 1)).intersection(Interval!Date(Date(1999, 1, 12), Date(2015, 9, 2))) ==
7007 Interval!Date(Date(1999, 1, 12), Date(2012, 3, 1)));
7009 assert(NegInfInterval!Date(Date(2012, 3, 1)).intersection(PosInfInterval!Date(Date(1990, 7, 6))) ==
7010 Interval!Date(Date(1990, 7, 6), Date(2012, 3, 1)));
7011 assert(NegInfInterval!Date(Date(2012, 3, 1)).intersection(PosInfInterval!Date(Date(1999, 1, 12))) ==
7012 Interval!Date(Date(1999, 1, 12), Date(2012, 3, 1)));
7014 assert(NegInfInterval!Date(Date(2012, 3, 1)).intersection(NegInfInterval!Date(Date(1999, 7, 6))) ==
7015 NegInfInterval!Date(Date(1999, 7, 6)));
7016 assert(NegInfInterval!Date(Date(2012, 3, 1)).intersection(NegInfInterval!Date(Date(2013, 1, 12))) ==
7017 NegInfInterval!Date(Date(2012, 3, 1)));
7025 auto negInfInterval = NegInfInterval!Date(Date(2012, 1, 7));
7027 static void testInterval(in NegInfInterval!Date negInfInterval, in Interval!Date interval)
7032 assertThrown!DateTimeException(testInterval(negInfInterval, Interval!Date(Date(2010, 7, 4), dur!"days"(0))));
7035 assert(!negInfInterval.isAdjacent(Interval!Date(Date(2010, 7, 1), Date(2010, 7, 3))));
7036 assert(!negInfInterval.isAdjacent(Interval!Date(Date(2010, 7, 1), Date(2013, 7, 3))));
7037 assert(!negInfInterval.isAdjacent(Interval!Date(Date(2010, 7, 3), Date(2010, 7, 4))));
7038 assert(!negInfInterval.isAdjacent(Interval!Date(Date(2010, 7, 3), Date(2010, 7, 5))));
7039 assert(!negInfInterval.isAdjacent(Interval!Date(Date(2010, 7, 3), Date(2012, 1, 7))));
7040 assert(!negInfInterval.isAdjacent(Interval!Date(Date(2010, 7, 3), Date(2012, 1, 8))));
7041 assert(!negInfInterval.isAdjacent(Interval!Date(Date(2010, 7, 5), Date(2012, 1, 6))));
7042 assert(!negInfInterval.isAdjacent(Interval!Date(Date(2010, 7, 5), Date(2012, 1, 7))));
7043 assert(!negInfInterval.isAdjacent(Interval!Date(Date(2012, 1, 6), Date(2012, 1, 7))));
7044 assert(!negInfInterval.isAdjacent(Interval!Date(Date(2012, 1, 6), Date(2012, 1, 8))));
7045 assert(negInfInterval.isAdjacent(Interval!Date(Date(2012, 1, 7), Date(2012, 1, 8))));
7046 assert(!negInfInterval.isAdjacent(Interval!Date(Date(2012, 1, 8), Date(2012, 1, 9))));
7048 assert(!negInfInterval.isAdjacent(NegInfInterval!Date(Date(2010, 7, 3))));
7049 assert(!negInfInterval.isAdjacent(NegInfInterval!Date(Date(2010, 7, 4))));
7050 assert(!negInfInterval.isAdjacent(NegInfInterval!Date(Date(2010, 7, 5))));
7051 assert(!negInfInterval.isAdjacent(NegInfInterval!Date(Date(2012, 1, 6))));
7052 assert(!negInfInterval.isAdjacent(NegInfInterval!Date(Date(2012, 1, 7))));
7053 assert(!negInfInterval.isAdjacent(NegInfInterval!Date(Date(2012, 1, 8))));
7055 assert(!NegInfInterval!Date(Date(2010, 7, 3)).isAdjacent(negInfInterval));
7056 assert(!NegInfInterval!Date(Date(2010, 7, 4)).isAdjacent(negInfInterval));
7057 assert(!NegInfInterval!Date(Date(2010, 7, 5)).isAdjacent(negInfInterval));
7058 assert(!NegInfInterval!Date(Date(2012, 1, 6)).isAdjacent(negInfInterval));
7059 assert(!NegInfInterval!Date(Date(2012, 1, 7)).isAdjacent(negInfInterval));
7060 assert(!NegInfInterval!Date(Date(2012, 1, 8)).isAdjacent(negInfInterval));
7062 assert(!negInfInterval.isAdjacent(PosInfInterval!Date(Date(2010, 7, 3))));
7063 assert(!negInfInterval.isAdjacent(PosInfInterval!Date(Date(2010, 7, 4))));
7064 assert(!negInfInterval.isAdjacent(PosInfInterval!Date(Date(2010, 7, 5))));
7065 assert(!negInfInterval.isAdjacent(PosInfInterval!Date(Date(2012, 1, 6))));
7066 assert(negInfInterval.isAdjacent(PosInfInterval!Date(Date(2012, 1, 7))));
7067 assert(!negInfInterval.isAdjacent(PosInfInterval!Date(Date(2012, 1, 8))));
7069 auto interval = Interval!Date(Date(2010, 7, 4), Date(2012, 1, 7));
7070 const cInterval = Interval!Date(Date(2010, 7, 4), Date(2012, 1, 7));
7071 immutable iInterval = Interval!Date(Date(2010, 7, 4), Date(2012, 1, 7));
7072 auto posInfInterval = PosInfInterval!Date(Date(2010, 7, 4));
7073 const cPosInfInterval = PosInfInterval!Date(Date(2010, 7, 4));
7074 immutable iPosInfInterval = PosInfInterval!Date(Date(2010, 7, 4));
7075 const cNegInfInterval = NegInfInterval!Date(Date(2012, 1, 7));
7076 immutable iNegInfInterval = NegInfInterval!Date(Date(2012, 1, 7));
7106 assert(!NegInfInterval!Date(Date(2012, 3, 1)).isAdjacent(Interval!Date(Date(1990, 7, 6), Date(2000, 8, 2))));
7107 assert(!NegInfInterval!Date(Date(2012, 3, 1)).isAdjacent(Interval!Date(Date(1999, 1, 12), Date(2012, 3, 1))));
7108 assert(NegInfInterval!Date(Date(2012, 3, 1)).isAdjacent(Interval!Date(Date(2012, 3, 1), Date(2019, 2, 2))));
7109 assert(!NegInfInterval!Date(Date(2012, 3, 1)).isAdjacent(Interval!Date(Date(2022, 10, 19), Date(2027, 6, 3))));
7111 assert(!NegInfInterval!Date(Date(2012, 3, 1)).isAdjacent(PosInfInterval!Date(Date(1999, 5, 4))));
7112 assert(NegInfInterval!Date(Date(2012, 3, 1)).isAdjacent(PosInfInterval!Date(Date(2012, 3, 1))));
7114 assert(!NegInfInterval!Date(Date(2012, 3, 1)).isAdjacent(NegInfInterval!Date(Date(1996, 5, 4))));
7115 assert(!NegInfInterval!Date(Date(2012, 3, 1)).isAdjacent(NegInfInterval!Date(Date(2012, 3, 1))));
7123 auto negInfInterval = NegInfInterval!Date(Date(2012, 1, 7));
7130 assertThrown!DateTimeException(testInterval(negInfInterval, Interval!Date(Date(2010, 7, 4), dur!"days"(0))));
7132 assertThrown!DateTimeException(testInterval(negInfInterval, Interval!Date(Date(2012, 1, 8), Date(2012, 1, 9))));
7135 assert(negInfInterval.merge(Interval!Date(Date(2010, 7, 1), Date(2010, 7, 3))) ==
7136 NegInfInterval!Date(Date(2012, 1, 7)));
7137 assert(negInfInterval.merge(Interval!Date(Date(2010, 7, 1), Date(2013, 7, 3))) ==
7138 NegInfInterval!Date(Date(2013, 7, 3)));
7139 assert(negInfInterval.merge(Interval!Date(Date(2010, 7, 3), Date(2010, 7, 4))) ==
7140 NegInfInterval!Date(Date(2012, 1, 7)));
7141 assert(negInfInterval.merge(Interval!Date(Date(2010, 7, 3), Date(2010, 7, 5))) ==
7142 NegInfInterval!Date(Date(2012, 1, 7)));
7143 assert(negInfInterval.merge(Interval!Date(Date(2010, 7, 3), Date(2012, 1, 7))) ==
7144 NegInfInterval!Date(Date(2012, 1, 7)));
7145 assert(negInfInterval.merge(Interval!Date(Date(2010, 7, 3), Date(2012, 1, 8))) ==
7146 NegInfInterval!Date(Date(2012, 1, 8)));
7147 assert(negInfInterval.merge(Interval!Date(Date(2010, 7, 5), Date(2012, 1, 6))) ==
7148 NegInfInterval!Date(Date(2012, 1, 7)));
7149 assert(negInfInterval.merge(Interval!Date(Date(2010, 7, 5), Date(2012, 1, 7))) ==
7150 NegInfInterval!Date(Date(2012, 1, 7)));
7151 assert(negInfInterval.merge(Interval!Date(Date(2012, 1, 6), Date(2012, 1, 7))) ==
7152 NegInfInterval!Date(Date(2012, 1, 7)));
7153 assert(negInfInterval.merge(Interval!Date(Date(2012, 1, 6), Date(2012, 1, 8))) ==
7154 NegInfInterval!Date(Date(2012, 1, 8)));
7155 assert(negInfInterval.merge(Interval!Date(Date(2012, 1, 7), Date(2012, 1, 8))) ==
7156 NegInfInterval!Date(Date(2012, 1, 8)));
7158 assert(negInfInterval.merge(NegInfInterval!Date(Date(2010, 7, 3))) == NegInfInterval!Date(Date(2012, 1, 7)));
7159 assert(negInfInterval.merge(NegInfInterval!Date(Date(2010, 7, 4))) == NegInfInterval!Date(Date(2012, 1, 7)));
7160 assert(negInfInterval.merge(NegInfInterval!Date(Date(2010, 7, 5))) == NegInfInterval!Date(Date(2012, 1, 7)));
7161 assert(negInfInterval.merge(NegInfInterval!Date(Date(2012, 1, 6))) == NegInfInterval!Date(Date(2012, 1, 7)));
7162 assert(negInfInterval.merge(NegInfInterval!Date(Date(2012, 1, 7))) == NegInfInterval!Date(Date(2012, 1, 7)));
7163 assert(negInfInterval.merge(NegInfInterval!Date(Date(2012, 1, 8))) == NegInfInterval!Date(Date(2012, 1, 8)));
7165 assert(NegInfInterval!Date(Date(2010, 7, 3)).merge(negInfInterval) == NegInfInterval!Date(Date(2012, 1, 7)));
7166 assert(NegInfInterval!Date(Date(2010, 7, 4)).merge(negInfInterval) == NegInfInterval!Date(Date(2012, 1, 7)));
7167 assert(NegInfInterval!Date(Date(2010, 7, 5)).merge(negInfInterval) == NegInfInterval!Date(Date(2012, 1, 7)));
7168 assert(NegInfInterval!Date(Date(2012, 1, 6)).merge(negInfInterval) == NegInfInterval!Date(Date(2012, 1, 7)));
7169 assert(NegInfInterval!Date(Date(2012, 1, 7)).merge(negInfInterval) == NegInfInterval!Date(Date(2012, 1, 7)));
7170 assert(NegInfInterval!Date(Date(2012, 1, 8)).merge(negInfInterval) == NegInfInterval!Date(Date(2012, 1, 8)));
7172 static assert(!__traits(compiles, negInfInterval.merge(PosInfInterval!Date(Date(2010, 7, 3)))));
7173 static assert(!__traits(compiles, negInfInterval.merge(PosInfInterval!Date(Date(2010, 7, 4)))));
7174 static assert(!__traits(compiles, negInfInterval.merge(PosInfInterval!Date(Date(2010, 7, 5)))));
7175 static assert(!__traits(compiles, negInfInterval.merge(PosInfInterval!Date(Date(2012, 1, 6)))));
7176 static assert(!__traits(compiles, negInfInterval.merge(PosInfInterval!Date(Date(2012, 1, 7)))));
7177 static assert(!__traits(compiles, negInfInterval.merge(PosInfInterval!Date(Date(2012, 1, 8)))));
7179 auto interval = Interval!Date(Date(2010, 7, 4), Date(2012, 1, 7));
7180 const cInterval = Interval!Date(Date(2010, 7, 4), Date(2012, 1, 7));
7181 immutable iInterval = Interval!Date(Date(2010, 7, 4), Date(2012, 1, 7));
7182 auto posInfInterval = PosInfInterval!Date(Date(2010, 7, 4));
7183 const cPosInfInterval = PosInfInterval!Date(Date(2010, 7, 4));
7184 immutable iPosInfInterval = PosInfInterval!Date(Date(2010, 7, 4));
7185 const cNegInfInterval = NegInfInterval!Date(Date(2012, 1, 7));
7186 immutable iNegInfInterval = NegInfInterval!Date(Date(2012, 1, 7));
7216 assert(NegInfInterval!Date(Date(2012, 3, 1)).merge(Interval!Date(Date(1990, 7, 6), Date(2000, 8, 2))) ==
7217 NegInfInterval!Date(Date(2012, 3, 1)));
7218 assert(NegInfInterval!Date(Date(2012, 3, 1)).merge(Interval!Date(Date(1999, 1, 12), Date(2015, 9, 2))) ==
7219 NegInfInterval!Date(Date(2015, 9, 2)));
7221 assert(NegInfInterval!Date(Date(2012, 3, 1)).merge(NegInfInterval!Date(Date(1999, 7, 6))) ==
7222 NegInfInterval!Date(Date(2012, 3, 1)));
7223 assert(NegInfInterval!Date(Date(2012, 3, 1)).merge(NegInfInterval!Date(Date(2013, 1, 12))) ==
7224 NegInfInterval!Date(Date(2013, 1, 12)));
7232 auto negInfInterval = NegInfInterval!Date(Date(2012, 1, 7));
7239 assertThrown!DateTimeException(testInterval(negInfInterval, Interval!Date(Date(2010, 7, 4), dur!"days"(0))));
7242 assert(negInfInterval.span(Interval!Date(Date(2010, 7, 1), Date(2010, 7, 3))) ==
7243 NegInfInterval!Date(Date(2012, 1, 7)));
7244 assert(negInfInterval.span(Interval!Date(Date(2010, 7, 1), Date(2013, 7, 3))) ==
7245 NegInfInterval!Date(Date(2013, 7, 3)));
7246 assert(negInfInterval.span(Interval!Date(Date(2010, 7, 3), Date(2010, 7, 4))) ==
7247 NegInfInterval!Date(Date(2012, 1, 7)));
7248 assert(negInfInterval.span(Interval!Date(Date(2010, 7, 3), Date(2010, 7, 5))) ==
7249 NegInfInterval!Date(Date(2012, 1, 7)));
7250 assert(negInfInterval.span(Interval!Date(Date(2010, 7, 3), Date(2012, 1, 7))) ==
7251 NegInfInterval!Date(Date(2012, 1, 7)));
7252 assert(negInfInterval.span(Interval!Date(Date(2010, 7, 3), Date(2012, 1, 8))) ==
7253 NegInfInterval!Date(Date(2012, 1, 8)));
7254 assert(negInfInterval.span(Interval!Date(Date(2010, 7, 5), Date(2012, 1, 6))) ==
7255 NegInfInterval!Date(Date(2012, 1, 7)));
7256 assert(negInfInterval.span(Interval!Date(Date(2010, 7, 5), Date(2012, 1, 7))) ==
7257 NegInfInterval!Date(Date(2012, 1, 7)));
7258 assert(negInfInterval.span(Interval!Date(Date(2012, 1, 6), Date(2012, 1, 7))) ==
7259 NegInfInterval!Date(Date(2012, 1, 7)));
7260 assert(negInfInterval.span(Interval!Date(Date(2012, 1, 6), Date(2012, 1, 8))) ==
7261 NegInfInterval!Date(Date(2012, 1, 8)));
7262 assert(negInfInterval.span(Interval!Date(Date(2012, 1, 7), Date(2012, 1, 8))) ==
7263 NegInfInterval!Date(Date(2012, 1, 8)));
7264 assert(negInfInterval.span(Interval!Date(Date(2012, 1, 8), Date(2012, 1, 9))) ==
7265 NegInfInterval!Date(Date(2012, 1, 9)));
7267 assert(negInfInterval.span(NegInfInterval!Date(Date(2010, 7, 3))) == NegInfInterval!Date(Date(2012, 1, 7)));
7268 assert(negInfInterval.span(NegInfInterval!Date(Date(2010, 7, 4))) == NegInfInterval!Date(Date(2012, 1, 7)));
7269 assert(negInfInterval.span(NegInfInterval!Date(Date(2010, 7, 5))) == NegInfInterval!Date(Date(2012, 1, 7)));
7270 assert(negInfInterval.span(NegInfInterval!Date(Date(2012, 1, 6))) == NegInfInterval!Date(Date(2012, 1, 7)));
7271 assert(negInfInterval.span(NegInfInterval!Date(Date(2012, 1, 7))) == NegInfInterval!Date(Date(2012, 1, 7)));
7272 assert(negInfInterval.span(NegInfInterval!Date(Date(2012, 1, 8))) == NegInfInterval!Date(Date(2012, 1, 8)));
7274 assert(NegInfInterval!Date(Date(2010, 7, 3)).span(negInfInterval) == NegInfInterval!Date(Date(2012, 1, 7)));
7275 assert(NegInfInterval!Date(Date(2010, 7, 4)).span(negInfInterval) == NegInfInterval!Date(Date(2012, 1, 7)));
7276 assert(NegInfInterval!Date(Date(2010, 7, 5)).span(negInfInterval) == NegInfInterval!Date(Date(2012, 1, 7)));
7277 assert(NegInfInterval!Date(Date(2012, 1, 6)).span(negInfInterval) == NegInfInterval!Date(Date(2012, 1, 7)));
7278 assert(NegInfInterval!Date(Date(2012, 1, 7)).span(negInfInterval) == NegInfInterval!Date(Date(2012, 1, 7)));
7279 assert(NegInfInterval!Date(Date(2012, 1, 8)).span(negInfInterval) == NegInfInterval!Date(Date(2012, 1, 8)));
7281 static assert(!__traits(compiles, negInfInterval.span(PosInfInterval!Date(Date(2010, 7, 3)))));
7282 static assert(!__traits(compiles, negInfInterval.span(PosInfInterval!Date(Date(2010, 7, 4)))));
7283 static assert(!__traits(compiles, negInfInterval.span(PosInfInterval!Date(Date(2010, 7, 5)))));
7284 static assert(!__traits(compiles, negInfInterval.span(PosInfInterval!Date(Date(2012, 1, 6)))));
7285 static assert(!__traits(compiles, negInfInterval.span(PosInfInterval!Date(Date(2012, 1, 7)))));
7286 static assert(!__traits(compiles, negInfInterval.span(PosInfInterval!Date(Date(2012, 1, 8)))));
7288 auto interval = Interval!Date(Date(2010, 7, 4), Date(2012, 1, 7));
7289 const cInterval = Interval!Date(Date(2010, 7, 4), Date(2012, 1, 7));
7290 immutable iInterval = Interval!Date(Date(2010, 7, 4), Date(2012, 1, 7));
7291 auto posInfInterval = PosInfInterval!Date(Date(2010, 7, 4));
7292 const cPosInfInterval = PosInfInterval!Date(Date(2010, 7, 4));
7293 immutable iPosInfInterval = PosInfInterval!Date(Date(2010, 7, 4));
7294 const cNegInfInterval = NegInfInterval!Date(Date(2012, 1, 7));
7295 immutable iNegInfInterval = NegInfInterval!Date(Date(2012, 1, 7));
7325 assert(NegInfInterval!Date(Date(2012, 3, 1)).span(Interval!Date(Date(1990, 7, 6), Date(2000, 8, 2))) ==
7326 NegInfInterval!Date(Date(2012, 3, 1)));
7327 assert(NegInfInterval!Date(Date(2012, 3, 1)).span(Interval!Date(Date(1999, 1, 12), Date(2015, 9, 2))) ==
7328 NegInfInterval!Date(Date(2015, 9, 2)));
7329 assert(NegInfInterval!Date(Date(1600, 1, 7)).span(Interval!Date(Date(2012, 3, 11), Date(2017, 7, 1))) ==
7330 NegInfInterval!Date(Date(2017, 7, 1)));
7332 assert(NegInfInterval!Date(Date(2012, 3, 1)).span(NegInfInterval!Date(Date(1999, 7, 6))) ==
7333 NegInfInterval!Date(Date(2012, 3, 1)));
7334 assert(NegInfInterval!Date(Date(2012, 3, 1)).span(NegInfInterval!Date(Date(2013, 1, 12))) ==
7335 NegInfInterval!Date(Date(2013, 1, 12)));
7343 auto interval = NegInfInterval!Date(Date(2012, 1, 7));
7351 testInterval(interval, dur!"days"(22), NegInfInterval!Date(Date(2012, 1, 29)));
7352 testInterval(interval, dur!"days"(-22), NegInfInterval!Date(Date(2011, 12, 16)));
7354 const cInterval = NegInfInterval!Date(Date(2012, 1, 7));
7355 immutable iInterval = NegInfInterval!Date(Date(2012, 1, 7));
7360 auto interval1 = NegInfInterval!Date(Date(2012, 4, 5));
7361 auto interval2 = NegInfInterval!Date(Date(2012, 4, 5));
7364 assert(interval1 == NegInfInterval!Date(Date(2012, 5, 25)));
7367 assert(interval2 == NegInfInterval!Date( Date(2012, 2, 15)));
7376 auto interval = NegInfInterval!Date(Date(2012, 1, 7));
7390 testInterval(interval, 5, 0, AllowDayOverflow.yes, NegInfInterval!Date(Date(2017, 1, 7)));
7391 testInterval(interval, -5, 0, AllowDayOverflow.yes, NegInfInterval!Date(Date(2007, 1, 7)));
7393 auto interval2 = NegInfInterval!Date(Date(2010, 5, 31));
7395 testInterval(interval2, 1, 1, AllowDayOverflow.yes, NegInfInterval!Date(Date(2011, 7, 1)));
7396 testInterval(interval2, 1, -1, AllowDayOverflow.yes, NegInfInterval!Date(Date(2011, 5, 1)));
7397 testInterval(interval2, -1, -1, AllowDayOverflow.yes, NegInfInterval!Date(Date(2009, 5, 1)));
7398 testInterval(interval2, -1, 1, AllowDayOverflow.yes, NegInfInterval!Date(Date(2009, 7, 1)));
7400 testInterval(interval2, 1, 1, AllowDayOverflow.no, NegInfInterval!Date(Date(2011, 6, 30)));
7401 testInterval(interval2, 1, -1, AllowDayOverflow.no, NegInfInterval!Date(Date(2011, 4, 30)));
7402 testInterval(interval2, -1, -1, AllowDayOverflow.no, NegInfInterval!Date(Date(2009, 4, 30)));
7403 testInterval(interval2, -1, 1, AllowDayOverflow.no, NegInfInterval!Date(Date(2009, 6, 30)));
7406 const cNegInfInterval = NegInfInterval!Date(Date(2012, 1, 7));
7407 immutable iNegInfInterval = NegInfInterval!Date(Date(2012, 1, 7));
7412 auto interval1 = NegInfInterval!Date(Date(2012, 3, 1));
7413 auto interval2 = NegInfInterval!Date(Date(2012, 3, 1));
7416 assert(interval1 == NegInfInterval!Date(Date(2014, 3, 1)));
7419 assert(interval2 == NegInfInterval!Date(Date(2010, 3, 1)));
7427 auto interval = NegInfInterval!Date(Date(2012, 1, 7));
7435 testInterval(interval, dur!"days"(22), NegInfInterval!Date(Date(2012, 1, 29)));
7436 testInterval(interval, dur!"days"(-22), NegInfInterval!Date(Date(2011, 12, 16)));
7438 const cInterval = NegInfInterval!Date(Date(2012, 1, 7));
7439 immutable iInterval = NegInfInterval!Date(Date(2012, 1, 7));
7444 auto interval1 = NegInfInterval!Date(Date(2012, 3, 1));
7445 auto interval2 = NegInfInterval!Date(Date(2012, 3, 1));
7448 assert(interval1 == NegInfInterval!Date(Date(2012, 3, 3)));
7451 assert(interval2 == NegInfInterval!Date(Date(2012, 2, 28)));
7460 auto interval = NegInfInterval!Date(Date(2012, 1, 7));
7469 testInterval(interval, 5, 0, AllowDayOverflow.yes, NegInfInterval!Date(Date(2017, 1, 7)));
7470 testInterval(interval, -5, 0, AllowDayOverflow.yes, NegInfInterval!Date(Date(2007, 1, 7)));
7472 auto interval2 = NegInfInterval!Date(Date(2010, 5, 31));
7474 testInterval(interval2, 1, 1, AllowDayOverflow.yes, NegInfInterval!Date(Date(2011, 7, 1)));
7475 testInterval(interval2, 1, -1, AllowDayOverflow.yes, NegInfInterval!Date(Date(2011, 5, 1)));
7476 testInterval(interval2, -1, -1, AllowDayOverflow.yes, NegInfInterval!Date(Date(2009, 5, 1)));
7477 testInterval(interval2, -1, 1, AllowDayOverflow.yes, NegInfInterval!Date(Date(2009, 7, 1)));
7479 testInterval(interval2, 1, 1, AllowDayOverflow.no, NegInfInterval!Date(Date(2011, 6, 30)));
7480 testInterval(interval2, 1, -1, AllowDayOverflow.no, NegInfInterval!Date(Date(2011, 4, 30)));
7481 testInterval(interval2, -1, -1, AllowDayOverflow.no, NegInfInterval!Date(Date(2009, 4, 30)));
7482 testInterval(interval2, -1, 1, AllowDayOverflow.no, NegInfInterval!Date( Date(2009, 6, 30)));
7485 const cNegInfInterval = NegInfInterval!Date(Date(2012, 1, 7));
7486 immutable iNegInfInterval = NegInfInterval!Date(Date(2012, 1, 7));
7491 auto interval1 = NegInfInterval!Date(Date(2012, 3, 1));
7492 auto interval2 = NegInfInterval!Date(Date(2012, 3, 1));
7495 assert(interval1 == NegInfInterval!Date(Date(2014, 3, 1)));
7498 assert(interval2 == NegInfInterval!Date(Date(2010, 3, 1)));
7506 auto negInfInterval = NegInfInterval!Date(Date(2012, 1, 7));
7508 static void testInterval(NegInfInterval!Date negInfInterval)
7510 negInfInterval.bwdRange(everyDayOfWeek!(Date, Direction.fwd)(DayOfWeek.fri)).popFront();
7515 assert(NegInfInterval!Date(Date(2010, 10, 1)).bwdRange(everyDayOfWeek!(Date, Direction.bwd)(DayOfWeek.fri)).front ==
7516 Date(2010, 10, 1));
7518 assert(NegInfInterval!Date(Date(2010, 10, 1)).bwdRange(
7519 everyDayOfWeek!(Date, Direction.bwd)(DayOfWeek.fri), PopFirst.yes).front == Date(2010, 9, 24));
7522 auto interval = NegInfInterval!Date(Date(2010, 9, 9));
7523 auto func = delegate (in Date date)
7531 //An odd day. Using PopFirst.yes would have made this Date(2010, 9, 8).
7532 assert(range.front == Date(2010, 9, 9));
7535 assert(range.front == Date(2010, 9, 8));
7538 assert(range.front == Date(2010, 9, 6));
7541 assert(range.front == Date(2010, 9, 4));
7544 assert(range.front == Date(2010, 9, 2));
7549 const cNegInfInterval = NegInfInterval!Date(Date(2012, 1, 7));
7550 immutable iNegInfInterval = NegInfInterval!Date(Date(2012, 1, 7));
7551 assert(!cNegInfInterval.bwdRange(everyDayOfWeek!(Date, Direction.bwd)(DayOfWeek.fri)).empty);
7552 assert(!iNegInfInterval.bwdRange(everyDayOfWeek!(Date, Direction.bwd)(DayOfWeek.fri)).empty);
7560 assert(NegInfInterval!Date(Date(2012, 1, 7)).toString() == "[-��� - 2012-Jan-07)");
7562 const cNegInfInterval = NegInfInterval!Date(Date(2012, 1, 7));
7563 immutable iNegInfInterval = NegInfInterval!Date(Date(2012, 1, 7));
7612 import std.datetime.date : Date, DayOfWeek;
7614 auto interval = Interval!Date(Date(2010, 9, 2), Date(2010, 9, 27));
7615 auto func = everyDayOfWeek!Date(DayOfWeek.mon);
7618 // A Thursday. Using PopFirst.yes would have made this Date(2010, 9, 6).
7619 assert(range.front == Date(2010, 9, 2));
7622 assert(range.front == Date(2010, 9, 6));
7625 assert(range.front == Date(2010, 9, 13));
7628 assert(range.front == Date(2010, 9, 20));
7639 auto funcFwd = everyDayOfWeek!Date(DayOfWeek.mon);
7640 auto funcBwd = everyDayOfWeek!(Date, Direction.bwd)(DayOfWeek.mon);
7642 assert(funcFwd(Date(2010, 8, 28)) == Date(2010, 8, 30));
7643 assert(funcFwd(Date(2010, 8, 29)) == Date(2010, 8, 30));
7644 assert(funcFwd(Date(2010, 8, 30)) == Date(2010, 9, 6));
7645 assert(funcFwd(Date(2010, 8, 31)) == Date(2010, 9, 6));
7646 assert(funcFwd(Date(2010, 9, 1)) == Date(2010, 9, 6));
7647 assert(funcFwd(Date(2010, 9, 2)) == Date(2010, 9, 6));
7648 assert(funcFwd(Date(2010, 9, 3)) == Date(2010, 9, 6));
7649 assert(funcFwd(Date(2010, 9, 4)) == Date(2010, 9, 6));
7650 assert(funcFwd(Date(2010, 9, 5)) == Date(2010, 9, 6));
7651 assert(funcFwd(Date(2010, 9, 6)) == Date(2010, 9, 13));
7652 assert(funcFwd(Date(2010, 9, 7)) == Date(2010, 9, 13));
7654 assert(funcBwd(Date(2010, 8, 28)) == Date(2010, 8, 23));
7655 assert(funcBwd(Date(2010, 8, 29)) == Date(2010, 8, 23));
7656 assert(funcBwd(Date(2010, 8, 30)) == Date(2010, 8, 23));
7657 assert(funcBwd(Date(2010, 8, 31)) == Date(2010, 8, 30));
7658 assert(funcBwd(Date(2010, 9, 1)) == Date(2010, 8, 30));
7659 assert(funcBwd(Date(2010, 9, 2)) == Date(2010, 8, 30));
7660 assert(funcBwd(Date(2010, 9, 3)) == Date(2010, 8, 30));
7661 assert(funcBwd(Date(2010, 9, 4)) == Date(2010, 8, 30));
7662 assert(funcBwd(Date(2010, 9, 5)) == Date(2010, 8, 30));
7663 assert(funcBwd(Date(2010, 9, 6)) == Date(2010, 8, 30));
7664 assert(funcBwd(Date(2010, 9, 7)) == Date(2010, 9, 6));
7734 import std.datetime.date : Date, Month;
7736 auto interval = Interval!Date(Date(2000, 1, 30), Date(2004, 8, 5));
7737 auto func = everyMonth!Date(Month.feb);
7740 // Using PopFirst.yes would have made this Date(2010, 2, 29).
7741 assert(range.front == Date(2000, 1, 30));
7744 assert(range.front == Date(2000, 2, 29));
7747 assert(range.front == Date(2001, 2, 28));
7750 assert(range.front == Date(2002, 2, 28));
7753 assert(range.front == Date(2003, 2, 28));
7756 assert(range.front == Date(2004, 2, 28));
7767 auto funcFwd = everyMonth!Date(Month.jun);
7768 auto funcBwd = everyMonth!(Date, Direction.bwd)(Month.jun);
7770 assert(funcFwd(Date(2010, 5, 31)) == Date(2010, 6, 30));
7771 assert(funcFwd(Date(2010, 6, 30)) == Date(2011, 6, 30));
7772 assert(funcFwd(Date(2010, 7, 31)) == Date(2011, 6, 30));
7773 assert(funcFwd(Date(2010, 8, 31)) == Date(2011, 6, 30));
7774 assert(funcFwd(Date(2010, 9, 30)) == Date(2011, 6, 30));
7775 assert(funcFwd(Date(2010, 10, 31)) == Date(2011, 6, 30));
7776 assert(funcFwd(Date(2010, 11, 30)) == Date(2011, 6, 30));
7777 assert(funcFwd(Date(2010, 12, 31)) == Date(2011, 6, 30));
7778 assert(funcFwd(Date(2011, 1, 31)) == Date(2011, 6, 30));
7779 assert(funcFwd(Date(2011, 2, 28)) == Date(2011, 6, 28));
7780 assert(funcFwd(Date(2011, 3, 31)) == Date(2011, 6, 30));
7781 assert(funcFwd(Date(2011, 4, 30)) == Date(2011, 6, 30));
7782 assert(funcFwd(Date(2011, 5, 31)) == Date(2011, 6, 30));
7783 assert(funcFwd(Date(2011, 6, 30)) == Date(2012, 6, 30));
7784 assert(funcFwd(Date(2011, 7, 31)) == Date(2012, 6, 30));
7786 assert(funcBwd(Date(2010, 5, 31)) == Date(2009, 6, 30));
7787 assert(funcBwd(Date(2010, 6, 30)) == Date(2009, 6, 30));
7788 assert(funcBwd(Date(2010, 7, 31)) == Date(2010, 6, 30));
7789 assert(funcBwd(Date(2010, 8, 31)) == Date(2010, 6, 30));
7790 assert(funcBwd(Date(2010, 9, 30)) == Date(2010, 6, 30));
7791 assert(funcBwd(Date(2010, 10, 31)) == Date(2010, 6, 30));
7792 assert(funcBwd(Date(2010, 11, 30)) == Date(2010, 6, 30));
7793 assert(funcBwd(Date(2010, 12, 31)) == Date(2010, 6, 30));
7794 assert(funcBwd(Date(2011, 1, 31)) == Date(2010, 6, 30));
7795 assert(funcBwd(Date(2011, 2, 28)) == Date(2010, 6, 28));
7796 assert(funcBwd(Date(2011, 3, 31)) == Date(2010, 6, 30));
7797 assert(funcBwd(Date(2011, 4, 30)) == Date(2010, 6, 30));
7798 assert(funcBwd(Date(2011, 5, 31)) == Date(2010, 6, 30));
7799 assert(funcBwd(Date(2011, 6, 30)) == Date(2010, 6, 30));
7800 assert(funcBwd(Date(2011, 7, 30)) == Date(2011, 6, 30));
7846 import std.datetime.date : Date;
7848 auto interval = Interval!Date(Date(2010, 9, 2), Date(2010, 9, 27));
7849 auto func = everyDuration!Date(dur!"days"(8));
7852 // Using PopFirst.yes would have made this Date(2010, 9, 10).
7853 assert(range.front == Date(2010, 9, 2));
7856 assert(range.front == Date(2010, 9, 10));
7859 assert(range.front == Date(2010, 9, 18));
7862 assert(range.front == Date(2010, 9, 26));
7873 auto funcFwd = everyDuration!Date(dur!"days"(27));
7874 auto funcBwd = everyDuration!(Date, Direction.bwd)(dur!"days"(27));
7876 assert(funcFwd(Date(2009, 12, 25)) == Date(2010, 1, 21));
7877 assert(funcFwd(Date(2009, 12, 26)) == Date(2010, 1, 22));
7878 assert(funcFwd(Date(2009, 12, 27)) == Date(2010, 1, 23));
7879 assert(funcFwd(Date(2009, 12, 28)) == Date(2010, 1, 24));
7881 assert(funcBwd(Date(2010, 1, 21)) == Date(2009, 12, 25));
7882 assert(funcBwd(Date(2010, 1, 22)) == Date(2009, 12, 26));
7883 assert(funcBwd(Date(2010, 1, 23)) == Date(2009, 12, 27));
7884 assert(funcBwd(Date(2010, 1, 24)) == Date(2009, 12, 28));
7886 assert(everyDuration!Date(dur!"hnsecs"(1)) !is null);
7971 import std.datetime.date : AllowDayOverflow, Date;
7973 auto interval = Interval!Date(Date(2010, 9, 2), Date(2025, 9, 27));
7974 auto func = everyDuration!Date(4, 1, AllowDayOverflow.yes, dur!"days"(2));
7977 // Using PopFirst.yes would have made this Date(2014, 10, 12).
7978 assert(range.front == Date(2010, 9, 2));
7981 assert(range.front == Date(2014, 10, 4));
7984 assert(range.front == Date(2018, 11, 6));
7987 assert(range.front == Date(2022, 12, 8));
7999 auto funcFwd = everyDuration!Date(1, 2, AllowDayOverflow.yes, dur!"days"(3));
8000 auto funcBwd = everyDuration!(Date, Direction.bwd)(1, 2, AllowDayOverflow.yes, dur!"days"(3));
8002 assert(funcFwd(Date(2009, 12, 25)) == Date(2011, 2, 28));
8003 assert(funcFwd(Date(2009, 12, 26)) == Date(2011, 3, 1));
8004 assert(funcFwd(Date(2009, 12, 27)) == Date(2011, 3, 2));
8005 assert(funcFwd(Date(2009, 12, 28)) == Date(2011, 3, 3));
8006 assert(funcFwd(Date(2009, 12, 29)) == Date(2011, 3, 4));
8008 assert(funcBwd(Date(2011, 2, 28)) == Date(2009, 12, 25));
8009 assert(funcBwd(Date(2011, 3, 1)) == Date(2009, 12, 26));
8010 assert(funcBwd(Date(2011, 3, 2)) == Date(2009, 12, 27));
8011 assert(funcBwd(Date(2011, 3, 3)) == Date(2009, 12, 28));
8012 assert(funcBwd(Date(2011, 3, 4)) == Date(2010, 1, 1));
8016 auto funcFwd = everyDuration!Date(1, 2, AllowDayOverflow.no, dur!"days"(3));
8017 auto funcBwd = everyDuration!(Date, Direction.bwd)(1, 2, AllowDayOverflow.yes, dur!"days"(3));
8019 assert(funcFwd(Date(2009, 12, 25)) == Date(2011, 2, 28));
8020 assert(funcFwd(Date(2009, 12, 26)) == Date(2011, 3, 1));
8021 assert(funcFwd(Date(2009, 12, 27)) == Date(2011, 3, 2));
8022 assert(funcFwd(Date(2009, 12, 28)) == Date(2011, 3, 3));
8023 assert(funcFwd(Date(2009, 12, 29)) == Date(2011, 3, 3));
8025 assert(funcBwd(Date(2011, 2, 28)) == Date(2009, 12, 25));
8026 assert(funcBwd(Date(2011, 3, 1)) == Date(2009, 12, 26));
8027 assert(funcBwd(Date(2011, 3, 2)) == Date(2009, 12, 27));
8028 assert(funcBwd(Date(2011, 3, 3)) == Date(2009, 12, 28));
8029 assert(funcBwd(Date(2011, 3, 4)) == Date(2010, 1, 1));
8032 assert(everyDuration!Date(1, 2, AllowDayOverflow.yes, dur!"hnsecs"(1)) !is null);
8047 the interval $(D Interval!Date), pass a function to $(LREF Interval)'s
8048 $(D fwdRange) where that function took a $(REF Date,std,datetime,date) and
8049 returned a $(REF Date,std,datetime,date) which was one day later. That
8051 over the $(REF Date,std,datetime,date)s in the interval.
8282 static assert(isInputRange!(IntervalRange!(Date, Direction.fwd)));
8283 static assert(isForwardRange!(IntervalRange!(Date, Direction.fwd)));
8286 //static assert(!isOutputRange!(IntervalRange!(Date, Direction.fwd), Date));
8288 static assert(!isBidirectionalRange!(IntervalRange!(Date, Direction.fwd)));
8289 static assert(!isRandomAccessRange!(IntervalRange!(Date, Direction.fwd)));
8290 static assert(!hasSwappableElements!(IntervalRange!(Date, Direction.fwd)));
8291 static assert(!hasAssignableElements!(IntervalRange!(Date, Direction.fwd)));
8292 static assert(!hasLength!(IntervalRange!(Date, Direction.fwd)));
8293 static assert(!isInfinite!(IntervalRange!(Date, Direction.fwd)));
8294 static assert(!hasSlicing!(IntervalRange!(Date, Direction.fwd)));
8296 static assert(is(ElementType!(IntervalRange!(Date, Direction.fwd)) == Date));
8309 Date dateFunc(in Date date) { return date; }
8310 auto interval = Interval!Date(Date(2010, 7, 4), Date(2012, 1, 7));
8311 auto ir = IntervalRange!(Date, Direction.fwd)(interval, &dateFunc);
8341 auto range = Interval!Date(Date(2010, 9, 19), Date(2010, 9, 21)).fwdRange(everyDayOfWeek!Date(DayOfWeek.fri));
8347 const cRange = Interval!Date(Date(2010, 7, 4), Date(2012, 1, 7)).fwdRange(everyDayOfWeek!Date(DayOfWeek.fri));
8350 //Apparently, creating an immutable IntervalRange!Date doesn't work, so we can't test if
8356 auto range = Interval!Date(Date(2010, 9, 19), Date(2010, 9, 21)).bwdRange(
8357 everyDayOfWeek!(Date, Direction.bwd)(DayOfWeek.fri));
8363 const cRange = Interval!Date( Date(2010, 7, 4), Date(2012, 1, 7)).bwdRange(
8364 everyDayOfWeek!(Date, Direction.bwd)(DayOfWeek.fri));
8367 //Apparently, creating an immutable IntervalRange!Date doesn't work, so we can't test if
8379 auto emptyRange = Interval!Date(Date(2010, 9, 19), Date(2010, 9, 20)).fwdRange(
8380 everyDayOfWeek!Date(DayOfWeek.wed), PopFirst.yes);
8381 assertThrown!DateTimeException((in IntervalRange!(Date, Direction.fwd) range){range.front;}(emptyRange));
8383 auto range = Interval!Date(Date(2010, 7, 4), Date(2012, 1, 7)).fwdRange(everyDayOfWeek!Date(DayOfWeek.wed));
8384 assert(range.front == Date(2010, 7, 4));
8386 auto poppedRange = Interval!Date(Date(2010, 7, 4), Date(2012, 1, 7)).fwdRange(
8387 everyDayOfWeek!Date(DayOfWeek.wed), PopFirst.yes);
8388 assert(poppedRange.front == Date(2010, 7, 7));
8390 const cRange = Interval!Date(Date(2010, 7, 4), Date(2012, 1, 7)).fwdRange(everyDayOfWeek!Date(DayOfWeek.fri));
8391 assert(cRange.front != Date.init);
8396 auto emptyRange = Interval!Date(Date(2010, 9, 19), Date(2010, 9, 20)).bwdRange(
8397 everyDayOfWeek!(Date, Direction.bwd)(DayOfWeek.wed), PopFirst.yes);
8398 assertThrown!DateTimeException((in IntervalRange!(Date, Direction.bwd) range){range.front;}(emptyRange));
8400 auto range = Interval!Date(Date(2010, 7, 4), Date(2012, 1, 7)).bwdRange(
8401 everyDayOfWeek!(Date, Direction.bwd)(DayOfWeek.wed));
8402 assert(range.front == Date(2012, 1, 7));
8404 auto poppedRange = Interval!Date(Date(2010, 7, 4), Date(2012, 1, 7)).bwdRange(
8405 everyDayOfWeek!(Date, Direction.bwd)(DayOfWeek.wed), PopFirst.yes);
8406 assert(poppedRange.front == Date(2012, 1, 4));
8408 const cRange = Interval!Date(Date(2010, 7, 4), Date(2012, 1, 7)).bwdRange(
8409 everyDayOfWeek!(Date, Direction.bwd)(DayOfWeek.fri));
8410 assert(cRange.front != Date.init);
8422 auto emptyRange = Interval!Date(Date(2010, 9, 19), Date(2010, 9, 20)).fwdRange(
8423 everyDayOfWeek!Date(DayOfWeek.wed), PopFirst.yes);
8424 assertThrown!DateTimeException((IntervalRange!(Date, Direction.fwd) range){range.popFront();}(emptyRange));
8426 auto range = Interval!Date(Date(2010, 7, 4), Date(2012, 1, 7)).fwdRange(
8427 everyDayOfWeek!Date(DayOfWeek.wed), PopFirst.yes);
8438 const cRange = Interval!Date(Date(2010, 7, 4), Date(2012, 1, 7)).fwdRange(everyDayOfWeek!Date(DayOfWeek.fri));
8439 assert(cRange.front != Date.init);
8444 auto emptyRange = Interval!Date(Date(2010, 9, 19), Date(2010, 9, 20)).bwdRange(
8445 everyDayOfWeek!(Date, Direction.bwd)(DayOfWeek.wed), PopFirst.yes);
8446 assertThrown!DateTimeException((IntervalRange!(Date, Direction.bwd) range){range.popFront();}(emptyRange));
8448 auto range = Interval!Date(Date(2010, 7, 4), Date(2012, 1, 7)).bwdRange(
8449 everyDayOfWeek!(Date, Direction.bwd)(DayOfWeek.wed), PopFirst.yes);
8460 const cRange = Interval!Date(Date(2010, 7, 4), Date(2012, 1, 7)).bwdRange(
8461 everyDayOfWeek!(Date, Direction.bwd)(DayOfWeek.fri));
8473 auto interval = Interval!Date(Date(2010, 7, 4), Date(2012, 1, 7));
8474 auto func = everyDayOfWeek!Date(DayOfWeek.fri);
8482 auto interval = Interval!Date(Date(2010, 7, 4), Date(2012, 1, 7));
8483 auto func = everyDayOfWeek!(Date, Direction.bwd)(DayOfWeek.fri);
8497 auto interval = Interval!Date(Date(2010, 7, 4), Date(2012, 1, 7));
8498 auto func = everyDayOfWeek!Date(DayOfWeek.fri);
8509 auto interval = Interval!Date(Date(2010, 7, 4), Date(2012, 1, 7));
8510 auto func = everyDayOfWeek!(Date, Direction.bwd)(DayOfWeek.fri);
8527 auto interval = Interval!Date(Date(2010, 7, 4), Date(2012, 1, 7));
8528 auto func = everyDayOfWeek!Date(DayOfWeek.fri);
8536 auto interval = Interval!Date(Date(2010, 7, 4), Date(2012, 1, 7));
8537 auto func = everyDayOfWeek!(Date, Direction.bwd)(DayOfWeek.fri);
8551 auto interval = Interval!Date(Date(2010, 7, 4), Date(2012, 1, 7));
8552 auto func = everyDayOfWeek!Date(DayOfWeek.fri);
8563 auto interval = Interval!Date(Date(2010, 7, 4), Date(2012, 1, 7));
8564 auto func = everyDayOfWeek!(Date, Direction.bwd)(DayOfWeek.fri);
8583 over all of the days in the interval $(D PosInfInterval!Date), pass a
8585 $(REF Date,std,datetime,date) and returned a $(REF Date,std,datetime,date)
8588 $(REF Date,std,datetime,date)s in the interval - though obviously, since the
8726 static assert(isInputRange!(PosInfIntervalRange!Date));
8727 static assert(isForwardRange!(PosInfIntervalRange!Date));
8728 static assert(isInfinite!(PosInfIntervalRange!Date));
8731 //static assert(!isOutputRange!(PosInfIntervalRange!Date, Date));
8732 static assert(!isBidirectionalRange!(PosInfIntervalRange!Date));
8733 static assert(!isRandomAccessRange!(PosInfIntervalRange!Date));
8734 static assert(!hasSwappableElements!(PosInfIntervalRange!Date));
8735 static assert(!hasAssignableElements!(PosInfIntervalRange!Date));
8736 static assert(!hasLength!(PosInfIntervalRange!Date));
8737 static assert(!hasSlicing!(PosInfIntervalRange!Date));
8739 static assert(is(ElementType!(PosInfIntervalRange!Date) == Date));
8752 Date dateFunc(in Date date) { return date; }
8753 auto posInfInterval = PosInfInterval!Date(Date(2010, 7, 4));
8754 auto ir = PosInfIntervalRange!Date(posInfInterval, &dateFunc);
8781 auto range = PosInfInterval!Date(Date(2010, 7, 4)).fwdRange(everyDayOfWeek!Date(DayOfWeek.wed));
8782 assert(range.front == Date(2010, 7, 4));
8784 auto poppedRange = PosInfInterval!Date(Date(2010, 7, 4)).fwdRange(everyDayOfWeek!Date(DayOfWeek.wed), PopFirst.yes);
8785 assert(poppedRange.front == Date(2010, 7, 7));
8787 const cRange = PosInfInterval!Date(Date(2010, 7, 4)).fwdRange(everyDayOfWeek!Date(DayOfWeek.fri));
8788 assert(cRange.front != Date.init);
8797 auto range = PosInfInterval!Date(Date(2010, 7, 4)).fwdRange(everyDayOfWeek!Date(DayOfWeek.wed), PopFirst.yes);
8806 const cRange = PosInfInterval!Date(Date(2010, 7, 4)).fwdRange(everyDayOfWeek!Date(DayOfWeek.fri));
8815 auto interval = PosInfInterval!Date(Date(2010, 7, 4));
8816 auto func = everyDayOfWeek!Date(DayOfWeek.fri);
8827 auto interval = PosInfInterval!Date(Date(2010, 7, 4));
8828 auto func = everyDayOfWeek!Date(DayOfWeek.fri);
8842 auto interval = PosInfInterval!Date(Date(2010, 7, 4));
8843 auto func = everyDayOfWeek!Date(DayOfWeek.fri);
8858 $(D NegInfInterval!Date), pass a function to $(D NegInfInterval)'s
8859 $(D bwdRange) where that function took a $(REF Date,std,datetime,date) and
8860 returned a $(REF Date,std,datetime,date) which was one day earlier. That
8862 iterate over the $(REF Date,std,datetime,date)s in the interval - though
9009 static assert(isInputRange!(NegInfIntervalRange!Date));
9010 static assert(isForwardRange!(NegInfIntervalRange!Date));
9011 static assert(isInfinite!(NegInfIntervalRange!Date));
9014 //static assert(!isOutputRange!(NegInfIntervalRange!Date, Date));
9015 static assert(!isBidirectionalRange!(NegInfIntervalRange!Date));
9016 static assert(!isRandomAccessRange!(NegInfIntervalRange!Date));
9017 static assert(!hasSwappableElements!(NegInfIntervalRange!Date));
9018 static assert(!hasAssignableElements!(NegInfIntervalRange!Date));
9019 static assert(!hasLength!(NegInfIntervalRange!Date));
9020 static assert(!hasSlicing!(NegInfIntervalRange!Date));
9022 static assert(is(ElementType!(NegInfIntervalRange!Date) == Date));
9034 Date dateFunc(in Date date) { return date; }
9035 auto negInfInterval = NegInfInterval!Date(Date(2012, 1, 7));
9036 auto ir = NegInfIntervalRange!Date(negInfInterval, &dateFunc);
9063 auto range = NegInfInterval!Date(Date(2012, 1, 7)).bwdRange(everyDayOfWeek!(Date, Direction.bwd)(DayOfWeek.wed));
9064 assert(range.front == Date(2012, 1, 7));
9066 auto poppedRange = NegInfInterval!Date(Date(2012, 1, 7)).bwdRange(
9067 everyDayOfWeek!(Date, Direction.bwd)(DayOfWeek.wed), PopFirst.yes);
9068 assert(poppedRange.front == Date(2012, 1, 4));
9070 const cRange = NegInfInterval!Date(Date(2012, 1, 7)).bwdRange(everyDayOfWeek!(Date, Direction.bwd)(DayOfWeek.fri));
9071 assert(cRange.front != Date.init);
9080 auto range = NegInfInterval!Date(Date(2012, 1, 7)).bwdRange(
9081 everyDayOfWeek!(Date, Direction.bwd)(DayOfWeek.wed), PopFirst.yes);
9090 const cRange = NegInfInterval!Date(Date(2012, 1, 7)).bwdRange(everyDayOfWeek!(Date, Direction.bwd)(DayOfWeek.fri));
9099 auto interval = NegInfInterval!Date(Date(2012, 1, 7));
9100 auto func = everyDayOfWeek!(Date, Direction.bwd)(DayOfWeek.fri);
9111 auto interval = NegInfInterval!Date(Date(2012, 1, 7));
9112 auto func = everyDayOfWeek!(Date, Direction.bwd)(DayOfWeek.fri);
9126 auto interval = NegInfInterval!Date(Date(2012, 1, 7));
9127 auto func = everyDayOfWeek!(Date, Direction.bwd)(DayOfWeek.fri);