Skip to content

Commit

Permalink
Merge pull request #164 from mobinghoveoud/fix-datetime-ne
Browse files Browse the repository at this point in the history
Fix __ne__ for different datetime types
  • Loading branch information
slashmili authored Jan 26, 2025
2 parents 9e07706 + 8e32f6a commit 24c160a
Show file tree
Hide file tree
Showing 3 changed files with 69 additions and 11 deletions.
4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
# Changelog

### Fixed

* Fix __ne__ for different datetime types #164

## [5.1.0] - 2025-01-13

### Fixed
Expand Down
11 changes: 0 additions & 11 deletions jdatetime/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -481,17 +481,6 @@ def __lt__(self, other_date):

return not self.__ge__(other_date)

def __ne__(self, other_date):
"""x.__ne__(y) <==> x!=y"""
if other_date is None:
return True
if isinstance(other_date, py_datetime.date):
return self.__ne__(date.fromgregorian(date=other_date))
if not isinstance(other_date, date):
return NotImplemented

return not self.__eq__(other_date)

def __hash__(self):
"""x.__hash__() <==> hash(x)"""
gd = self.togregorian()
Expand Down
65 changes: 65 additions & 0 deletions tests/test_jdatetime.py
Original file line number Diff line number Diff line change
Expand Up @@ -763,6 +763,71 @@ def test_eq_with_not_implemented(self):
dt2 = "not a datetime object"
self.assertFalse(dt1 == dt2)

# __ne__
def test_ne_different_dates(self):
dt1 = jdatetime.datetime(1403, 1, 1, 0, 0, 0)
dt2 = jdatetime.datetime(1403, 1, 2, 0, 0, 0)
self.assertTrue(dt1 != dt2)

def test_neq_different_times(self):
dt1 = jdatetime.datetime(1403, 1, 1, 12, 0, 0)
dt2 = jdatetime.datetime(1403, 1, 1, 13, 0, 0)
self.assertTrue(dt1 != dt2)

def test_neq_different_timezones(self):
gmt = GMTTime()
teh = TehranTime()

dt1 = jdatetime.datetime(1403, 1, 1, 12, 0, 0, tzinfo=teh)
dt2 = jdatetime.datetime(1403, 1, 1, 12, 0, 0, tzinfo=gmt)
self.assertTrue(dt1 != dt2)

def test_neq_same_datetime(self):
dt1 = jdatetime.datetime(1403, 1, 1, 12, 0, 0)
dt2 = jdatetime.datetime(1403, 1, 1, 12, 0, 0)
self.assertFalse(dt1 != dt2)

def test_neq_different_types(self):
dt1 = jdatetime.datetime(1403, 1, 1, 12, 0, 0)
self.assertTrue(dt1 != "1403-01-01 12:00:00")

def test_neq_with_none(self):
dt1 = jdatetime.datetime(1403, 1, 1, 12, 0, 0)
self.assertTrue(dt1.__ne__(None))

def test_neq_different_datetime_types(self):
dt1 = jdatetime.datetime(1403, 1, 1, 12, 0, 0)
dt2 = dt1.togregorian()
self.assertFalse(dt1 != dt2)

# different hour
dt2 = dt1.togregorian() + datetime.timedelta(hours=1)
self.assertTrue(dt1 != dt2)
dt2 = dt1.togregorian() - datetime.timedelta(hours=1)
self.assertTrue(dt1 != dt2)

# different day
dt2 = dt1.togregorian() + datetime.timedelta(days=1)
self.assertTrue(dt1 != dt2)
dt2 = dt1.togregorian() - datetime.timedelta(days=1)
self.assertTrue(dt1 != dt2)

# different month
dt2 = dt1.togregorian() + datetime.timedelta(days=31)
self.assertTrue(dt1 != dt2)
dt2 = dt1.togregorian() - datetime.timedelta(days=31)
self.assertTrue(dt1 != dt2)

# different year
dt2 = dt1.togregorian() + datetime.timedelta(days=370)
self.assertTrue(dt1 != dt2)
dt2 = dt1.togregorian() - datetime.timedelta(days=370)
self.assertTrue(dt1 != dt2)

def test_neq_not_implemented(self):
dt1 = jdatetime.datetime(1403, 1, 1, 12, 0, 0)
self.assertEqual(dt1.__ne__("not datetime object"), NotImplemented)

# __ge__
def test_ge_with_same_datetime(self):
dt1 = jdatetime.datetime(1402, 7, 8, 12, 0, 0)
Expand Down

0 comments on commit 24c160a

Please sign in to comment.