| @system unittest | |
| { | |
| import std.datetime.interval; | |
| import std.datetime.date : Date, DayOfWeek; | |
| auto interval = Interval!Date(Date(2010, 9, 2), Date(2010, 9, 27)); | |
| auto func = everyDayOfWeek!Date(DayOfWeek.mon); | |
| auto range = interval.fwdRange(func); | |
| // A Thursday. Using PopFirst.yes would have made this Date(2010, 9, 6). | |
| assert(range.front == Date(2010, 9, 2)); | |
| range.popFront(); | |
| assert(range.front == Date(2010, 9, 6)); | |
| range.popFront(); | |
| assert(range.front == Date(2010, 9, 13)); | |
| range.popFront(); | |
| assert(range.front == Date(2010, 9, 20)); | |
| range.popFront(); | |
| assert(range.empty); | |
| } | |
| @system unittest | |
| { | |
| import std.datetime.interval; | |
| import std.datetime.date : Date, Month; | |
| auto interval = Interval!Date(Date(2000, 1, 30), Date(2004, 8, 5)); | |
| auto func = everyMonth!Date(Month.feb); | |
| auto range = interval.fwdRange(func); | |
| // Using PopFirst.yes would have made this Date(2010, 2, 29). | |
| assert(range.front == Date(2000, 1, 30)); | |
| range.popFront(); | |
| assert(range.front == Date(2000, 2, 29)); | |
| range.popFront(); | |
| assert(range.front == Date(2001, 2, 28)); | |
| range.popFront(); | |
| assert(range.front == Date(2002, 2, 28)); | |
| range.popFront(); | |
| assert(range.front == Date(2003, 2, 28)); | |
| range.popFront(); | |
| assert(range.front == Date(2004, 2, 28)); | |
| range.popFront(); | |
| assert(range.empty); | |
| } | |
| @system unittest | |
| { | |
| import std.datetime.interval; | |
| import core.time : dur; | |
| import std.datetime.date : Date; | |
| auto interval = Interval!Date(Date(2010, 9, 2), Date(2010, 9, 27)); | |
| auto func = everyDuration!Date(dur!"days"(8)); | |
| auto range = interval.fwdRange(func); | |
| // Using PopFirst.yes would have made this Date(2010, 9, 10). | |
| assert(range.front == Date(2010, 9, 2)); | |
| range.popFront(); | |
| assert(range.front == Date(2010, 9, 10)); | |
| range.popFront(); | |
| assert(range.front == Date(2010, 9, 18)); | |
| range.popFront(); | |
| assert(range.front == Date(2010, 9, 26)); | |
| range.popFront(); | |
| assert(range.empty); | |
| } | |
| @system unittest | |
| { | |
| import std.datetime.interval; | |
| import core.time : dur; | |
| import std.datetime.date : AllowDayOverflow, Date; | |
| auto interval = Interval!Date(Date(2010, 9, 2), Date(2025, 9, 27)); | |
| auto func = everyDuration!Date(4, 1, AllowDayOverflow.yes, dur!"days"(2)); | |
| auto range = interval.fwdRange(func); | |
| // Using PopFirst.yes would have made this Date(2014, 10, 12). | |
| assert(range.front == Date(2010, 9, 2)); | |
| range.popFront(); | |
| assert(range.front == Date(2014, 10, 4)); | |
| range.popFront(); | |
| assert(range.front == Date(2018, 11, 6)); | |
| range.popFront(); | |
| assert(range.front == Date(2022, 12, 8)); | |
| range.popFront(); | |
| assert(range.empty); | |
| } | |