=== modified file 'dateutil/relativedelta.py' --- dateutil/relativedelta.py 2012-02-18 22:16:26 +0000 +++ dateutil/relativedelta.py 2012-03-22 20:39:55 +0000 @@ -403,6 +403,7 @@ self.hours == other.hours and self.minutes == other.minutes and self.seconds == other.seconds and + self.microseconds == other.microseconds and self.leapdays == other.leapdays and self.year == other.year and self.month == other.month and @@ -415,6 +416,16 @@ def __ne__(self, other): return not self.__eq__(other) + def __cmp__(self, other): + for attr in ["years", "months", "days", "leapdays", + "hours", "minutes", "seconds", "microseconds"]: + value = getattr(self, attr) + other_value = getattr(other, attr) + if value != other_value: + return value - other_value + + return 0 + def __div__(self, other): return self.__mul__(1/float(other)) === modified file 'test.py' --- test.py 2012-02-18 23:18:56 +0000 +++ test.py 2012-03-22 20:39:36 +0000 @@ -166,6 +166,50 @@ self.assertEqual(datetime(2000, 1, 1) + relativedelta(days=28) / 28, datetime(2000, 1, 2)) + def testEqual(self): + self.assertEqual(relativedelta(years=1), relativedelta(years=1)) + self.assertEqual(relativedelta(months=1), relativedelta(months=1)) + self.assertEqual(relativedelta(days=1), relativedelta(days=1)) + self.assertEqual(relativedelta(hours=1), relativedelta(hours=1)) + self.assertEqual(relativedelta(minutes=1), relativedelta(minutes=1)) + self.assertEqual(relativedelta(seconds=1), relativedelta(seconds=1)) + self.assertEqual(relativedelta(microseconds=1), relativedelta(microseconds=1)) + + def testNotEqual(self): + self.assertNotEqual(relativedelta(years=2), relativedelta(years=1)) + self.assertNotEqual(relativedelta(months=2), relativedelta(months=1)) + self.assertNotEqual(relativedelta(days=2), relativedelta(days=1)) + self.assertNotEqual(relativedelta(hours=2), relativedelta(hours=1)) + self.assertNotEqual(relativedelta(minutes=2), relativedelta(minutes=1)) + self.assertNotEqual(relativedelta(seconds=2), relativedelta(seconds=1)) + self.assertNotEqual(relativedelta(microseconds=2), relativedelta(microseconds=1)) + + + def testCompare(self): + self.assertTrue(relativedelta(days=1) > relativedelta(days=0)) + self.assertTrue(relativedelta(days=2) > relativedelta(days=1)) + self.assertTrue(relativedelta(days=1) > relativedelta(days=-1)) + self.assertTrue(relativedelta(days=0) > relativedelta(days=-1)) + + self.assertTrue(relativedelta(days=0) < relativedelta(days=1)) + self.assertTrue(relativedelta(days=1) < relativedelta(days=2)) + self.assertTrue(relativedelta(days=-1) < relativedelta(days=1)) + self.assertTrue(relativedelta(days=-1) < relativedelta(days=0)) + + self.assertTrue(relativedelta(days=1) >= relativedelta(days=0)) + self.assertTrue(relativedelta(days=2) >= relativedelta(days=1)) + self.assertTrue(relativedelta(days=1) >= relativedelta(days=-1)) + self.assertTrue(relativedelta(days=0) >= relativedelta(days=-1)) + self.assertTrue(relativedelta(days=0) >= relativedelta(days=0)) + + self.assertTrue(relativedelta(days=0) <= relativedelta(days=0)) + self.assertTrue(relativedelta(days=1) <= relativedelta(days=2)) + self.assertTrue(relativedelta(days=-1) <= relativedelta(days=1)) + self.assertTrue(relativedelta(days=-1) <= relativedelta(days=0)) + self.assertTrue(relativedelta(days=0) <= relativedelta(days=0)) + self.assertTrue(relativedelta(days=0) <= relativedelta(days=0)) + self.assertTrue(relativedelta(days=-1) <= relativedelta(days=-1)) + class RRuleTest(unittest.TestCase): def testYearly(self):