Skip to content

Commit

Permalink
add operator support: !=, +, +=, -, -=
Browse files Browse the repository at this point in the history
  • Loading branch information
thombashi committed Feb 25, 2016
1 parent 4b3862f commit 5e6c26b
Show file tree
Hide file tree
Showing 3 changed files with 204 additions and 6 deletions.
26 changes: 26 additions & 0 deletions datetimerange/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,32 @@ def __eq__(self, other):
self.end_datetime == other.end_datetime,
])

def __ne__(self, other):
return any([
self.start_datetime != other.start_datetime,
self.end_datetime != other.end_datetime,
])

def __add__(self, other):
return DateTimeRange(
self.start_datetime + other, self.end_datetime + other)

def __iadd__(self, other):
self.set_start_datetime(self.start_datetime + other)
self.set_end_datetime(self.end_datetime + other)

return self

def __sub__(self, other):
return DateTimeRange(
self.start_datetime - other, self.end_datetime - other)

def __isub__(self, other):
self.set_start_datetime(self.start_datetime - other)
self.set_end_datetime(self.end_datetime - other)

return self

def __contains__(self, x):
"""
:param datetime.datetime/str x:
Expand Down
2 changes: 1 addition & 1 deletion setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@

setuptools.setup(
name="DateTimeRange",
version="0.1.1",
version="0.1.2",
author="Tsuyoshi Hombashi",
author_email="gogogo.vm@gmail.com",
url="https://github.com/thombashi/DateTimeRange",
Expand Down
182 changes: 177 additions & 5 deletions test/test_datetimerange.py
Original file line number Diff line number Diff line change
Expand Up @@ -170,14 +170,186 @@ def test_exception(

class Test_DateTimeRange_eq:

def test_normal(self, datetimerange_normal):
assert datetimerange_normal == datetimerange_normal
@pytest.mark.parametrize(["lhs", "rhs", "expected"], [
[
DateTimeRange(None, None),
DateTimeRange(None, None),
True,
],
[
DateTimeRange(
"2015-03-22T10:00:00+0900", "2015-03-22T10:10:00+0900"),
DateTimeRange(
"2015-03-22T10:00:00+0900", "2015-03-22T10:10:00+0900"),
True,
],
[
DateTimeRange(
"2015-03-22T10:00:00+0900", "2015-03-22T10:10:00+0900"),
DateTimeRange(
"2015-03-22T10:00:00+0900", "2015-03-22T10:20:00+0900"),
False,
],
[
DateTimeRange(
"2015-03-22T10:00:00+0900", "2015-03-22T10:10:00+0900"),
DateTimeRange(
"2015-03-22T10:02:00+0900", "2015-03-22T10:10:00+0900"),
False,
],
[
DateTimeRange(
"2015-03-22T10:00:00+0900", "2015-03-22T10:10:00+0900"),
DateTimeRange(
"2015-03-22T11:00:00+0900", "2015-03-22T12:10:00+0900"),
False,
],
])
def test_normal(self, lhs, rhs, expected):
assert (lhs == rhs) == expected


class Test_DateTimeRange_neq:

@pytest.mark.parametrize(["lhs", "rhs", "expected"], [
[
DateTimeRange(None, None),
DateTimeRange(None, None),
False,
],
[
DateTimeRange(
"2015-03-22T10:00:00+0900", "2015-03-22T10:10:00+0900"),
DateTimeRange(
"2015-03-22T10:00:00+0900", "2015-03-22T10:10:00+0900"),
False,
],
[
DateTimeRange(
"2015-03-22T10:00:00+0900", "2015-03-22T10:10:00+0900"),
DateTimeRange(
"2015-03-22T10:00:00+0900", "2015-03-22T10:20:00+0900"),
True,
],
[
DateTimeRange(
"2015-03-22T10:00:00+0900", "2015-03-22T10:10:00+0900"),
DateTimeRange(
"2015-03-22T10:02:00+0900", "2015-03-22T10:10:00+0900"),
True,
],
[
DateTimeRange(
"2015-03-22T10:00:00+0900", "2015-03-22T10:10:00+0900"),
DateTimeRange(
"2015-03-22T11:00:00+0900", "2015-03-22T12:10:00+0900"),
True,
],
])
def test_normal(self, lhs, rhs, expected):
assert (lhs != rhs) == expected


class Test_DateTimeRange_add:

def test_normal(self):
value = DateTimeRange(
"2015-03-22T10:00:00+0900", "2015-03-22T10:10:00+0900")
expected = DateTimeRange(
"2015-03-22T10:10:00+0900", "2015-03-22T10:20:00+0900")

new_datetimerange = value + datetime.timedelta(
seconds=10 * 60)
assert new_datetimerange == expected

@pytest.mark.parametrize(["value", "expected"], [
["2015-03-22T10:10:00+0900", TypeError],
[1, TypeError],
[None, TypeError],
])
def test_exception(self, datetimerange_normal, value, expected):
with pytest.raises(TypeError):
datetimerange_normal + value

def test_null(self, datetimerange_null):
assert datetimerange_null == datetimerange_null
with pytest.raises(TypeError):
datetimerange_null + datetime.timedelta(seconds=10 * 60)


class Test_DateTimeRange_iadd:

def test_normal(self):
value = DateTimeRange(
"2015-03-22T10:00:00+0900", "2015-03-22T10:10:00+0900")
expected = DateTimeRange(
"2015-03-22T10:10:00+0900", "2015-03-22T10:20:00+0900")

value += datetime.timedelta(seconds=10 * 60)
assert value == expected

@pytest.mark.parametrize(["value", "expected"], [
["2015-03-22T10:10:00+0900", TypeError],
[1, TypeError],
[None, TypeError],
])
def test_exception(self, datetimerange_normal, value, expected):
with pytest.raises(TypeError):
datetimerange_normal += value

def test_neq(self, datetimerange_normal, datetimerange_null):
assert datetimerange_normal != datetimerange_null
def test_null(self, datetimerange_null):
with pytest.raises(TypeError):
datetimerange_null += datetime.timedelta(seconds=10 * 60)


class Test_DateTimeRange_sub:

def test_normal(self):
value = DateTimeRange(
"2015-03-22T10:10:00+0900", "2015-03-22T10:20:00+0900")
expected = DateTimeRange(
"2015-03-22T10:00:00+0900", "2015-03-22T10:10:00+0900")

new_datetimerange = value - datetime.timedelta(
seconds=10 * 60)
assert new_datetimerange == expected

@pytest.mark.parametrize(["value", "expected"], [
["2015-03-22T10:10:00+0900", TypeError],
[1, TypeError],
[None, TypeError],
])
def test_exception(self, datetimerange_normal, value, expected):
with pytest.raises(TypeError):
datetimerange_normal - value

def test_null(self, datetimerange_null):
with pytest.raises(TypeError):
datetimerange_null - datetime.timedelta(seconds=10 * 60)


class Test_DateTimeRange_isub:

def test_normal(self):
value = DateTimeRange(
"2015-03-22T10:10:00+0900", "2015-03-22T10:20:00+0900")
expected = DateTimeRange(
"2015-03-22T10:00:00+0900", "2015-03-22T10:10:00+0900")

value -= datetime.timedelta(seconds=10 * 60)
assert value == expected

@pytest.mark.parametrize(["value", "expected"], [
["2015-03-22T10:10:00+0900", TypeError],
[1, TypeError],
[None, TypeError],
])
def test_exception(self, datetimerange_normal, value, expected):
with pytest.raises(TypeError):
datetimerange_normal -= value

def test_null(self, datetimerange_null):
with pytest.raises(TypeError):
datetimerange_null -= datetime.timedelta(seconds=10 * 60)


class Test_DateTimeRange_contains:
Expand Down

0 comments on commit 5e6c26b

Please sign in to comment.