- Fixed support for negative byyearday in rrule.
- New tests for negative byyearday.
- Fixed some email references.
- Updating version to 1.2.
diff --git a/test.py b/test.py
index b007a67..9ff1088 100644
--- a/test.py
+++ b/test.py
@@ -278,22 +278,45 @@
def testYearlyByYearDay(self):
self.assertEqual(list(rrule(YEARLY,
- count=3,
- byyearday=(1,100,200),
+ count=4,
+ byyearday=(1,100,200,365),
dtstart=parse("19970902T090000"))),
- [datetime(1998, 1, 1, 9, 0),
+ [datetime(1997, 12, 31, 9, 0),
+ datetime(1998, 1, 1, 9, 0),
+ datetime(1998, 4, 10, 9, 0),
+ datetime(1998, 7, 19, 9, 0)])
+
+ def testYearlyByYearDayNeg(self):
+ self.assertEqual(list(rrule(YEARLY,
+ count=4,
+ byyearday=(-365,-266,-166,-1),
+ dtstart=parse("19970902T090000"))),
+ [datetime(1997, 12, 31, 9, 0),
+ datetime(1998, 1, 1, 9, 0),
datetime(1998, 4, 10, 9, 0),
datetime(1998, 7, 19, 9, 0)])
def testYearlyByMonthAndYearDay(self):
self.assertEqual(list(rrule(YEARLY,
- count=3,
+ count=4,
bymonth=(4,7),
- byyearday=(1,100,200),
+ byyearday=(1,100,200,365),
dtstart=parse("19970902T090000"))),
[datetime(1998, 4, 10, 9, 0),
datetime(1998, 7, 19, 9, 0),
- datetime(1999, 4, 10, 9, 0)])
+ datetime(1999, 4, 10, 9, 0),
+ datetime(1999, 7, 19, 9, 0)])
+
+ def testYearlyByMonthAndYearDayNeg(self):
+ self.assertEqual(list(rrule(YEARLY,
+ count=4,
+ bymonth=(4,7),
+ byyearday=(-365,-266,-166,-1),
+ dtstart=parse("19970902T090000"))),
+ [datetime(1998, 4, 10, 9, 0),
+ datetime(1998, 7, 19, 9, 0),
+ datetime(1999, 4, 10, 9, 0),
+ datetime(1999, 7, 19, 9, 0)])
def testYearlyByWeekNo(self):
self.assertEqual(list(rrule(YEARLY,
@@ -599,22 +622,46 @@
def testMonthlyByYearDay(self):
self.assertEqual(list(rrule(MONTHLY,
- count=3,
- byyearday=(1,100,200),
+ count=4,
+ byyearday=(1,100,200,365),
dtstart=parse("19970902T090000"))),
- [datetime(1998, 1, 1, 9, 0),
+ [datetime(1997, 12, 31, 9, 0),
+ datetime(1998, 1, 1, 9, 0),
+ datetime(1998, 4, 10, 9, 0),
+ datetime(1998, 7, 19, 9, 0)])
+
+ def testMonthlyByYearDayNeg(self):
+ self.assertEqual(list(rrule(MONTHLY,
+ count=4,
+ byyearday=(-365,-266,-166,-1),
+ dtstart=parse("19970902T090000"))),
+ [datetime(1997, 12, 31, 9, 0),
+ datetime(1998, 1, 1, 9, 0),
datetime(1998, 4, 10, 9, 0),
datetime(1998, 7, 19, 9, 0)])
def testMonthlyByMonthAndYearDay(self):
self.assertEqual(list(rrule(MONTHLY,
- count=3,
+ count=4,
bymonth=(4,7),
- byyearday=(1,100,200),
+ byyearday=(1,100,200,365),
dtstart=parse("19970902T090000"))),
[datetime(1998, 4, 10, 9, 0),
datetime(1998, 7, 19, 9, 0),
- datetime(1999, 4, 10, 9, 0)])
+ datetime(1999, 4, 10, 9, 0),
+ datetime(1999, 7, 19, 9, 0)])
+
+ def testMonthlyByMonthAndYearDayNeg(self):
+ self.assertEqual(list(rrule(MONTHLY,
+ count=4,
+ bymonth=(4,7),
+ byyearday=(-365,-266,-166,-1),
+ dtstart=parse("19970902T090000"))),
+ [datetime(1998, 4, 10, 9, 0),
+ datetime(1998, 7, 19, 9, 0),
+ datetime(1999, 4, 10, 9, 0),
+ datetime(1999, 7, 19, 9, 0)])
+
def testMonthlyByWeekNo(self):
self.assertEqual(list(rrule(MONTHLY,
@@ -893,22 +940,45 @@
def testWeeklyByYearDay(self):
self.assertEqual(list(rrule(WEEKLY,
- count=3,
- byyearday=(1,100,200),
+ count=4,
+ byyearday=(1,100,200,365),
dtstart=parse("19970902T090000"))),
- [datetime(1998, 1, 1, 9, 0),
+ [datetime(1997, 12, 31, 9, 0),
+ datetime(1998, 1, 1, 9, 0),
+ datetime(1998, 4, 10, 9, 0),
+ datetime(1998, 7, 19, 9, 0)])
+
+ def testWeeklyByYearDayNeg(self):
+ self.assertEqual(list(rrule(WEEKLY,
+ count=4,
+ byyearday=(-365,-266,-166,-1),
+ dtstart=parse("19970902T090000"))),
+ [datetime(1997, 12, 31, 9, 0),
+ datetime(1998, 1, 1, 9, 0),
datetime(1998, 4, 10, 9, 0),
datetime(1998, 7, 19, 9, 0)])
def testWeeklyByMonthAndYearDay(self):
self.assertEqual(list(rrule(WEEKLY,
- count=3,
+ count=4,
bymonth=(1,7),
- byyearday=(1,100,200),
+ byyearday=(1,100,200,365),
dtstart=parse("19970902T090000"))),
[datetime(1998, 1, 1, 9, 0),
datetime(1998, 7, 19, 9, 0),
- datetime(1999, 1, 1, 9, 0)])
+ datetime(1999, 1, 1, 9, 0),
+ datetime(1999, 7, 19, 9, 0)])
+
+ def testWeeklyByMonthAndYearDayNeg(self):
+ self.assertEqual(list(rrule(WEEKLY,
+ count=4,
+ bymonth=(1,7),
+ byyearday=(-365,-266,-166,-1),
+ dtstart=parse("19970902T090000"))),
+ [datetime(1998, 1, 1, 9, 0),
+ datetime(1998, 7, 19, 9, 0),
+ datetime(1999, 1, 1, 9, 0),
+ datetime(1999, 7, 19, 9, 0)])
def testWeeklyByWeekNo(self):
self.assertEqual(list(rrule(WEEKLY,
@@ -1184,22 +1254,45 @@
def testDailyByYearDay(self):
self.assertEqual(list(rrule(DAILY,
- count=3,
- byyearday=(1,100,200),
+ count=4,
+ byyearday=(1,100,200,365),
dtstart=parse("19970902T090000"))),
- [datetime(1998, 1, 1, 9, 0),
+ [datetime(1997, 12, 31, 9, 0),
+ datetime(1998, 1, 1, 9, 0),
+ datetime(1998, 4, 10, 9, 0),
+ datetime(1998, 7, 19, 9, 0)])
+
+ def testDailyByYearDayNeg(self):
+ self.assertEqual(list(rrule(DAILY,
+ count=4,
+ byyearday=(-365,-266,-166,-1),
+ dtstart=parse("19970902T090000"))),
+ [datetime(1997, 12, 31, 9, 0),
+ datetime(1998, 1, 1, 9, 0),
datetime(1998, 4, 10, 9, 0),
datetime(1998, 7, 19, 9, 0)])
def testDailyByMonthAndYearDay(self):
self.assertEqual(list(rrule(DAILY,
- count=3,
+ count=4,
bymonth=(1,7),
- byyearday=(1,100,200),
+ byyearday=(1,100,200,365),
dtstart=parse("19970902T090000"))),
[datetime(1998, 1, 1, 9, 0),
datetime(1998, 7, 19, 9, 0),
- datetime(1999, 1, 1, 9, 0)])
+ datetime(1999, 1, 1, 9, 0),
+ datetime(1999, 7, 19, 9, 0)])
+
+ def testDailyByMonthAndYearDayNeg(self):
+ self.assertEqual(list(rrule(DAILY,
+ count=4,
+ bymonth=(1,7),
+ byyearday=(-365,-266,-166,-1),
+ dtstart=parse("19970902T090000"))),
+ [datetime(1998, 1, 1, 9, 0),
+ datetime(1998, 7, 19, 9, 0),
+ datetime(1999, 1, 1, 9, 0),
+ datetime(1999, 7, 19, 9, 0)])
def testDailyByWeekNo(self):
self.assertEqual(list(rrule(DAILY,
@@ -1475,22 +1568,45 @@
def testHourlyByYearDay(self):
self.assertEqual(list(rrule(HOURLY,
- count=3,
- byyearday=(1,100,200),
+ count=4,
+ byyearday=(1,100,200,365),
dtstart=parse("19970902T090000"))),
- [datetime(1998, 1, 1, 0, 0),
- datetime(1998, 1, 1, 1, 0),
- datetime(1998, 1, 1, 2, 0)])
+ [datetime(1997, 12, 31, 0, 0),
+ datetime(1997, 12, 31, 1, 0),
+ datetime(1997, 12, 31, 2, 0),
+ datetime(1997, 12, 31, 3, 0)])
+
+ def testHourlyByYearDayNeg(self):
+ self.assertEqual(list(rrule(HOURLY,
+ count=4,
+ byyearday=(-365,-266,-166,-1),
+ dtstart=parse("19970902T090000"))),
+ [datetime(1997, 12, 31, 0, 0),
+ datetime(1997, 12, 31, 1, 0),
+ datetime(1997, 12, 31, 2, 0),
+ datetime(1997, 12, 31, 3, 0)])
def testHourlyByMonthAndYearDay(self):
self.assertEqual(list(rrule(HOURLY,
- count=3,
+ count=4,
bymonth=(4,7),
- byyearday=(1,100,200),
+ byyearday=(1,100,200,365),
dtstart=parse("19970902T090000"))),
[datetime(1998, 4, 10, 0, 0),
datetime(1998, 4, 10, 1, 0),
- datetime(1998, 4, 10, 2, 0)])
+ datetime(1998, 4, 10, 2, 0),
+ datetime(1998, 4, 10, 3, 0)])
+
+ def testHourlyByMonthAndYearDayNeg(self):
+ self.assertEqual(list(rrule(HOURLY,
+ count=4,
+ bymonth=(4,7),
+ byyearday=(-365,-266,-166,-1),
+ dtstart=parse("19970902T090000"))),
+ [datetime(1998, 4, 10, 0, 0),
+ datetime(1998, 4, 10, 1, 0),
+ datetime(1998, 4, 10, 2, 0),
+ datetime(1998, 4, 10, 3, 0)])
def testHourlyByWeekNo(self):
self.assertEqual(list(rrule(HOURLY,
@@ -1762,22 +1878,45 @@
def testMinutelyByYearDay(self):
self.assertEqual(list(rrule(MINUTELY,
- count=3,
- byyearday=(1,100,200),
+ count=4,
+ byyearday=(1,100,200,365),
dtstart=parse("19970902T090000"))),
- [datetime(1998, 1, 1, 0, 0),
- datetime(1998, 1, 1, 0, 1),
- datetime(1998, 1, 1, 0, 2)])
+ [datetime(1997, 12, 31, 0, 0),
+ datetime(1997, 12, 31, 0, 1),
+ datetime(1997, 12, 31, 0, 2),
+ datetime(1997, 12, 31, 0, 3)])
+
+ def testMinutelyByYearDayNeg(self):
+ self.assertEqual(list(rrule(MINUTELY,
+ count=4,
+ byyearday=(-365,-266,-166,-1),
+ dtstart=parse("19970902T090000"))),
+ [datetime(1997, 12, 31, 0, 0),
+ datetime(1997, 12, 31, 0, 1),
+ datetime(1997, 12, 31, 0, 2),
+ datetime(1997, 12, 31, 0, 3)])
def testMinutelyByMonthAndYearDay(self):
self.assertEqual(list(rrule(MINUTELY,
- count=3,
+ count=4,
bymonth=(4,7),
- byyearday=(1,100,200),
+ byyearday=(1,100,200,365),
dtstart=parse("19970902T090000"))),
[datetime(1998, 4, 10, 0, 0),
datetime(1998, 4, 10, 0, 1),
- datetime(1998, 4, 10, 0, 2)])
+ datetime(1998, 4, 10, 0, 2),
+ datetime(1998, 4, 10, 0, 3)])
+
+ def testMinutelyByMonthAndYearDayNeg(self):
+ self.assertEqual(list(rrule(MINUTELY,
+ count=4,
+ bymonth=(4,7),
+ byyearday=(-365,-266,-166,-1),
+ dtstart=parse("19970902T090000"))),
+ [datetime(1998, 4, 10, 0, 0),
+ datetime(1998, 4, 10, 0, 1),
+ datetime(1998, 4, 10, 0, 2),
+ datetime(1998, 4, 10, 0, 3)])
def testMinutelyByWeekNo(self):
self.assertEqual(list(rrule(MINUTELY,
@@ -2048,22 +2187,45 @@
def testSecondlyByYearDay(self):
self.assertEqual(list(rrule(SECONDLY,
- count=3,
- byyearday=(1,100,200),
+ count=4,
+ byyearday=(1,100,200,365),
dtstart=parse("19970902T090000"))),
- [datetime(1998, 1, 1, 0, 0, 0),
- datetime(1998, 1, 1, 0, 0, 1),
- datetime(1998, 1, 1, 0, 0, 2)])
+ [datetime(1997, 12, 31, 0, 0, 0),
+ datetime(1997, 12, 31, 0, 0, 1),
+ datetime(1997, 12, 31, 0, 0, 2),
+ datetime(1997, 12, 31, 0, 0, 3)])
+
+ def testSecondlyByYearDayNeg(self):
+ self.assertEqual(list(rrule(SECONDLY,
+ count=4,
+ byyearday=(-365,-266,-166,-1),
+ dtstart=parse("19970902T090000"))),
+ [datetime(1997, 12, 31, 0, 0, 0),
+ datetime(1997, 12, 31, 0, 0, 1),
+ datetime(1997, 12, 31, 0, 0, 2),
+ datetime(1997, 12, 31, 0, 0, 3)])
def testSecondlyByMonthAndYearDay(self):
self.assertEqual(list(rrule(SECONDLY,
- count=3,
+ count=4,
bymonth=(4,7),
- byyearday=(1,100,200),
+ byyearday=(1,100,200,365),
dtstart=parse("19970902T090000"))),
[datetime(1998, 4, 10, 0, 0, 0),
datetime(1998, 4, 10, 0, 0, 1),
- datetime(1998, 4, 10, 0, 0, 2)])
+ datetime(1998, 4, 10, 0, 0, 2),
+ datetime(1998, 4, 10, 0, 0, 3)])
+
+ def testSecondlyByMonthAndYearDayNeg(self):
+ self.assertEqual(list(rrule(SECONDLY,
+ count=4,
+ bymonth=(4,7),
+ byyearday=(-365,-266,-166,-1),
+ dtstart=parse("19970902T090000"))),
+ [datetime(1998, 4, 10, 0, 0, 0),
+ datetime(1998, 4, 10, 0, 0, 1),
+ datetime(1998, 4, 10, 0, 0, 2),
+ datetime(1998, 4, 10, 0, 0, 3)])
def testSecondlyByWeekNo(self):
self.assertEqual(list(rrule(SECONDLY,