Skip to content

Commit

Permalink
Repair equality comparison between DateTime instances and other types
Browse files Browse the repository at this point in the history
  • Loading branch information
perrinjerome committed Dec 3, 2023
1 parent 955f3b9 commit b19e4bb
Show file tree
Hide file tree
Showing 3 changed files with 34 additions and 5 deletions.
3 changes: 3 additions & 0 deletions CHANGES.rst
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,9 @@ Changelog
- Fix ``UnknownTimeZoneError`` when unpickling ``DateTime.DateTime().asdatetime()``.
(`#58 <https://github.com/zopefoundation/DateTime/issues/58>`_)

- Repair equality comparison between DateTime instances and other types.
(`#60 <https://github.com/zopefoundation/DateTime/issues/60>`_)


5.3 (2023-11-14)
----------------
Expand Down
20 changes: 15 additions & 5 deletions src/DateTime/DateTime.py
Original file line number Diff line number Diff line change
Expand Up @@ -1250,8 +1250,10 @@ def greaterThan(self, t):
return True
if isinstance(t, (float, int)):
return self._micros > long(t * 1000000)
else:
try:
return self._micros > t._micros
except AttributeError:
return self._micros > t

__gt__ = greaterThan

Expand All @@ -1271,8 +1273,10 @@ def greaterThanEqualTo(self, t):
return True
if isinstance(t, (float, int)):
return self._micros >= long(t * 1000000)
else:
try:
return self._micros >= t._micros
except AttributeError:
return self._micros >= t

__ge__ = greaterThanEqualTo

Expand All @@ -1291,8 +1295,10 @@ def equalTo(self, t):
return False
if isinstance(t, (float, int)):
return self._micros == long(t * 1000000)
else:
try:
return self._micros == t._micros
except AttributeError:
return self._micros == t

def notEqualTo(self, t):
"""Compare this DateTime object to another DateTime object
Expand Down Expand Up @@ -1336,8 +1342,10 @@ def lessThan(self, t):
return False
if isinstance(t, (float, int)):
return self._micros < long(t * 1000000)
else:
try:
return self._micros < t._micros
except AttributeError:
return self._micros < t

__lt__ = lessThan

Expand All @@ -1356,8 +1364,10 @@ def lessThanEqualTo(self, t):
return False
if isinstance(t, (float, int)):
return self._micros <= long(t * 1000000)
else:
try:
return self._micros <= t._micros
except AttributeError:
return self._micros <= t

__le__ = lessThanEqualTo

Expand Down
16 changes: 16 additions & 0 deletions src/DateTime/tests/test_datetime.py
Original file line number Diff line number Diff line change
Expand Up @@ -219,6 +219,8 @@ def test_compare_methods(self):
self.assertFalse(dt.equalTo(dt1))
# Compare a date to float
dt = DateTime(1.0)
self.assertTrue(dt == DateTime(1.0)) # testing __eq__
self.assertFalse(dt != DateTime(1.0)) # testing __ne__
self.assertFalse(dt.greaterThan(1.0))
self.assertTrue(dt.greaterThanEqualTo(1.0))
self.assertFalse(dt.lessThan(1.0))
Expand All @@ -228,12 +230,26 @@ def test_compare_methods(self):
# Compare a date to int
dt = DateTime(1)
self.assertEqual(dt, DateTime(1.0))
self.assertTrue(dt == DateTime(1)) # testing __eq__
self.assertFalse(dt != DateTime(1)) # testing __ne__
self.assertFalse(dt.greaterThan(1))
self.assertTrue(dt.greaterThanEqualTo(1))
self.assertFalse(dt.lessThan(1))
self.assertTrue(dt.lessThanEqualTo(1))
self.assertFalse(dt.notEqualTo(1))
self.assertTrue(dt.equalTo(1))
# Compare a date to string; there is no implicit type conversion
# but behavior if consistent as when comparing, for example, an int
# and a string.
dt = DateTime("2023")
self.assertFalse(dt == "2023") # testing __eq__
self.assertTrue(dt != "2023") # testing __ne__
self.assertRaises(TypeError, dt.greaterThan, "2023")
self.assertRaises(TypeError, dt.greaterThanEqualTo, "2023")
self.assertRaises(TypeError, dt.lessThan, "2023")
self.assertRaises(TypeError, dt.lessThanEqualTo, "2023")
self.assertTrue(dt.notEqualTo("2023"))
self.assertFalse(dt.equalTo("2023"))

def test_compare_methods_none(self):
# Compare a date to None
Expand Down

0 comments on commit b19e4bb

Please sign in to comment.