From 4dde928120601e59990ec3f6017edde86aabc131 Mon Sep 17 00:00:00 2001
From: pkruzikova
Date: Sat, 29 Oct 2022 16:32:19 +0100
Subject: [PATCH 1/7] Added test file and test for overlap_time function
---
test_times.py | 8 ++++++++
1 file changed, 8 insertions(+)
create mode 100644 test_times.py
diff --git a/test_times.py b/test_times.py
new file mode 100644
index 0000000..9966318
--- /dev/null
+++ b/test_times.py
@@ -0,0 +1,8 @@
+from times import compute_overlap_time, time_range
+
+def test_given_input():
+ large = time_range("2010-01-12 10:00:00", "2010-01-12 12:00:00")
+ short = time_range("2010-01-12 10:30:00", "2010-01-12 10:45:00", 2, 60)
+ result = compute_overlap_time(large, short)
+ expected = [('2010-01-12 10:30:00', '2010-01-12 10:37:00'), ('2010-01-12 10:38:00', '2010-01-12 10:45:00')]
+ assert result == expected
\ No newline at end of file
From a2abd659c4a440b6cb0ee7fcd786ae96408efdee Mon Sep 17 00:00:00 2001
From: pkruzikova
Date: Thu, 3 Nov 2022 11:14:48 +0000
Subject: [PATCH 2/7] Automating tests
---
.github/workflows/python-tests.yml | 25 +++++++++++++++++++++++++
times.py | 2 +-
2 files changed, 26 insertions(+), 1 deletion(-)
create mode 100644 .github/workflows/python-tests.yml
diff --git a/.github/workflows/python-tests.yml b/.github/workflows/python-tests.yml
new file mode 100644
index 0000000..efb5e99
--- /dev/null
+++ b/.github/workflows/python-tests.yml
@@ -0,0 +1,25 @@
+name: Python package
+
+on: [push]
+
+jobs:
+ build:
+
+ runs-on: ubuntu-latest
+ strategy:
+ matrix:
+ python-version: ["3.8", "3.10"]
+
+ steps:
+ - uses: actions/checkout@v3
+ - name: Set up Python ${{ matrix.python-version }}
+ uses: actions/setup-python@v4
+ with:
+ python-version: ${{ matrix.python-version }}
+ - name: Install dependencies
+ # This case we are only updating pip, but you could add other dependencies needed.
+ run: |
+ python -m pip install --upgrade pip
+ - name: Test with pytest
+ run: |
+ pytest
\ No newline at end of file
diff --git a/times.py b/times.py
index d57f401..5323fd6 100644
--- a/times.py
+++ b/times.py
@@ -20,7 +20,7 @@ def compute_overlap_time(range1, range2):
overlap_time.append((low, high))
return overlap_time
-if __name__ == "__main__":
+if __name__ == "__main__": #this will only be executed when file is run directly, not imported
large = time_range("2010-01-12 10:00:00", "2010-01-12 12:00:00")
short = time_range("2010-01-12 10:30:00", "2010-01-12 10:45:00", 2, 60)
print(compute_overlap_time(large, short))
\ No newline at end of file
From b94a8efc32587e6a9c7e51a0295ade21b36cb71d Mon Sep 17 00:00:00 2001
From: pkruzikova
Date: Thu, 3 Nov 2022 16:29:54 +0000
Subject: [PATCH 3/7] Importing pytest as needed
---
.github/workflows/python-tests.yml | 2 ++
1 file changed, 2 insertions(+)
diff --git a/.github/workflows/python-tests.yml b/.github/workflows/python-tests.yml
index efb5e99..2063fec 100644
--- a/.github/workflows/python-tests.yml
+++ b/.github/workflows/python-tests.yml
@@ -20,6 +20,8 @@ jobs:
# This case we are only updating pip, but you could add other dependencies needed.
run: |
python -m pip install --upgrade pip
+ pip install pytest
+ pip install pytest-cov
- name: Test with pytest
run: |
pytest
\ No newline at end of file
From c7fc248be297159a460fbab68f9185e063a7b7c7 Mon Sep 17 00:00:00 2001
From: pkruzikova
Date: Thu, 3 Nov 2022 16:45:30 +0000
Subject: [PATCH 4/7] Added more tests for test_times.py and corrected overlap
bug in times.py
---
test_times.py | 34 ++++++++++++++++++++++++++++++----
times.py | 5 ++++-
2 files changed, 34 insertions(+), 5 deletions(-)
diff --git a/test_times.py b/test_times.py
index 9966318..63c2f58 100644
--- a/test_times.py
+++ b/test_times.py
@@ -1,8 +1,34 @@
from times import compute_overlap_time, time_range
+from pytest import raises
def test_given_input():
- large = time_range("2010-01-12 10:00:00", "2010-01-12 12:00:00")
- short = time_range("2010-01-12 10:30:00", "2010-01-12 10:45:00", 2, 60)
- result = compute_overlap_time(large, short)
+ outer = time_range("2010-01-12 10:00:00", "2010-01-12 12:00:00")
+ inner = time_range("2010-01-12 10:30:00", "2010-01-12 10:45:00", 2, 60)
+ result = compute_overlap_time(outer, inner)
expected = [('2010-01-12 10:30:00', '2010-01-12 10:37:00'), ('2010-01-12 10:38:00', '2010-01-12 10:45:00')]
- assert result == expected
\ No newline at end of file
+ assert result == expected
+
+def test_nooverlap():
+ first = time_range("2010-01-12 10:00:00", "2010-01-12 12:00:00")
+ second = time_range("2010-01-12 09:30:00", "2010-01-12 09:45:00")
+ result = compute_overlap_time(first, second)
+ expected = []
+ assert result == expected
+
+def test_multipleintervals():
+ first = time_range("2010-01-12 10:00:00", "2010-01-12 12:00:00", 3, 10)
+ second = time_range("2010-01-12 10:30:00", "2010-01-12 10:45:00", 2, 60)
+ result = compute_overlap_time(first, second)
+ expected = [('2010-01-12 10:30:00', '2010-01-12 10:37:00'), ('2010-01-12 10:38:00', '2010-01-12 10:39:53'), ('2010-01-12 10:40:03', '2010-01-12 10:45:00')]
+ assert result == expected
+
+def test_border():
+ first = time_range("2010-01-12 10:00:00", "2010-01-12 12:00:00")
+ second = time_range("2010-01-12 12:00:00", "2010-01-12 12:45:00")
+ result = compute_overlap_time(first, second)
+ expected = [('2010-01-12 12:00:00', '2010-01-12 12:00:00')]
+ assert result == expected
+
+def test_backwardsrange():
+ with raises(ValueError):
+ range = time_range("2010-01-12 14:00:00", "2010-01-12 12:00:00")
\ No newline at end of file
diff --git a/times.py b/times.py
index 5323fd6..4751e0d 100644
--- a/times.py
+++ b/times.py
@@ -4,6 +4,8 @@
def time_range(start_time, end_time, number_of_intervals=1, gap_between_intervals_s=0):
start_time_s = datetime.datetime.strptime(start_time, "%Y-%m-%d %H:%M:%S")
end_time_s = datetime.datetime.strptime(end_time, "%Y-%m-%d %H:%M:%S")
+ if start_time_s > end_time_s:
+ raise ValueError('Start time needs to be before the end time')
d = (end_time_s - start_time_s).total_seconds() / number_of_intervals + gap_between_intervals_s * (1 / number_of_intervals - 1)
sec_range = [(start_time_s + datetime.timedelta(seconds=i * d + i * gap_between_intervals_s),
start_time_s + datetime.timedelta(seconds=(i + 1) * d + i * gap_between_intervals_s))
@@ -17,7 +19,8 @@ def compute_overlap_time(range1, range2):
for start2, end2 in range2:
low = max(start1, start2)
high = min(end1, end2)
- overlap_time.append((low, high))
+ if low <= high:
+ overlap_time.append((low, high))
return overlap_time
if __name__ == "__main__": #this will only be executed when file is run directly, not imported
From ad2c3a19aac884bfa466b34ec5846e98506f6c43 Mon Sep 17 00:00:00 2001
From: pkruzikova
Date: Thu, 3 Nov 2022 16:53:05 +0000
Subject: [PATCH 5/7] Added coverage to CI
---
.github/workflows/python-tests.yml | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/.github/workflows/python-tests.yml b/.github/workflows/python-tests.yml
index 2063fec..019565a 100644
--- a/.github/workflows/python-tests.yml
+++ b/.github/workflows/python-tests.yml
@@ -24,4 +24,5 @@ jobs:
pip install pytest-cov
- name: Test with pytest
run: |
- pytest
\ No newline at end of file
+ pytest
+ pytest --cov
\ No newline at end of file
From 40ffbede610354d6cfdf0c0a471a642a3bde66b9 Mon Sep 17 00:00:00 2001
From: pkruzikova
Date: Thu, 3 Nov 2022 17:00:08 +0000
Subject: [PATCH 6/7] Renamed workflow
---
.github/workflows/python-tests.yml | 2 ++
1 file changed, 2 insertions(+)
diff --git a/.github/workflows/python-tests.yml b/.github/workflows/python-tests.yml
index 019565a..af5abac 100644
--- a/.github/workflows/python-tests.yml
+++ b/.github/workflows/python-tests.yml
@@ -25,4 +25,6 @@ jobs:
- name: Test with pytest
run: |
pytest
+ - name: Test coverage
+ run: |
pytest --cov
\ No newline at end of file
From a3f6458e69383eaefa2b878af41ba25d69e1227d Mon Sep 17 00:00:00 2001
From: pkruzikova
Date: Tue, 8 Nov 2022 13:23:49 +0000
Subject: [PATCH 7/7] parametrised some tests
---
test_times.py | 84 ++++++++++++++++++++++++++++++++++-----------------
1 file changed, 56 insertions(+), 28 deletions(-)
diff --git a/test_times.py b/test_times.py
index 63c2f58..beacb28 100644
--- a/test_times.py
+++ b/test_times.py
@@ -1,34 +1,62 @@
from times import compute_overlap_time, time_range
from pytest import raises
+import pytest
-def test_given_input():
- outer = time_range("2010-01-12 10:00:00", "2010-01-12 12:00:00")
- inner = time_range("2010-01-12 10:30:00", "2010-01-12 10:45:00", 2, 60)
- result = compute_overlap_time(outer, inner)
- expected = [('2010-01-12 10:30:00', '2010-01-12 10:37:00'), ('2010-01-12 10:38:00', '2010-01-12 10:45:00')]
- assert result == expected
-
-def test_nooverlap():
- first = time_range("2010-01-12 10:00:00", "2010-01-12 12:00:00")
- second = time_range("2010-01-12 09:30:00", "2010-01-12 09:45:00")
- result = compute_overlap_time(first, second)
- expected = []
- assert result == expected
-
-def test_multipleintervals():
- first = time_range("2010-01-12 10:00:00", "2010-01-12 12:00:00", 3, 10)
- second = time_range("2010-01-12 10:30:00", "2010-01-12 10:45:00", 2, 60)
- result = compute_overlap_time(first, second)
- expected = [('2010-01-12 10:30:00', '2010-01-12 10:37:00'), ('2010-01-12 10:38:00', '2010-01-12 10:39:53'), ('2010-01-12 10:40:03', '2010-01-12 10:45:00')]
- assert result == expected
-
-def test_border():
- first = time_range("2010-01-12 10:00:00", "2010-01-12 12:00:00")
- second = time_range("2010-01-12 12:00:00", "2010-01-12 12:45:00")
- result = compute_overlap_time(first, second)
- expected = [('2010-01-12 12:00:00', '2010-01-12 12:00:00')]
- assert result == expected
+# def test_given_input():
+# outer = time_range("2010-01-12 10:00:00", "2010-01-12 12:00:00")
+# inner = time_range("2010-01-12 10:30:00", "2010-01-12 10:45:00", 2, 60)
+# result = compute_overlap_time(outer, inner)
+# expected = [('2010-01-12 10:30:00', '2010-01-12 10:37:00'), ('2010-01-12 10:38:00', '2010-01-12 10:45:00')]
+# assert result == expected
+
+# def test_nooverlap():
+# first = time_range("2010-01-12 10:00:00", "2010-01-12 12:00:00")
+# second = time_range("2010-01-12 09:30:00", "2010-01-12 09:45:00")
+# result = compute_overlap_time(first, second)
+# expected = []
+# assert result == expected
+
+# def test_multipleintervals():
+# first = time_range("2010-01-12 10:00:00", "2010-01-12 12:00:00", 3, 10)
+# second = time_range("2010-01-12 10:30:00", "2010-01-12 10:45:00", 2, 60)
+# result = compute_overlap_time(first, second)
+# expected = [('2010-01-12 10:30:00', '2010-01-12 10:37:00'), ('2010-01-12 10:38:00', '2010-01-12 10:39:53'), ('2010-01-12 10:40:03', '2010-01-12 10:45:00')]
+# assert result == expected
+
+# def test_border():
+# first = time_range("2010-01-12 10:00:00", "2010-01-12 12:00:00")
+# second = time_range("2010-01-12 12:00:00", "2010-01-12 12:45:00")
+# result = compute_overlap_time(first, second)
+# expected = [('2010-01-12 12:00:00', '2010-01-12 12:00:00')]
+# assert result == expected
def test_backwardsrange():
with raises(ValueError):
- range = time_range("2010-01-12 14:00:00", "2010-01-12 12:00:00")
\ No newline at end of file
+ range = time_range("2010-01-12 14:00:00", "2010-01-12 12:00:00")
+
+test_cases = [
+ #given input
+ (time_range("2010-01-12 10:00:00", "2010-01-12 12:00:00"),
+ time_range("2010-01-12 10:30:00", "2010-01-12 10:45:00", 2, 60),
+ [('2010-01-12 10:30:00', '2010-01-12 10:37:00'), ('2010-01-12 10:38:00', '2010-01-12 10:45:00')]),
+
+ #no overlap
+ (time_range("2010-01-12 10:00:00", "2010-01-12 12:00:00"),
+ time_range("2010-01-12 09:30:00", "2010-01-12 09:45:00"),
+ []),
+
+ #multiple intervals each
+ (time_range("2010-01-12 10:00:00", "2010-01-12 12:00:00", 3, 10),
+ time_range("2010-01-12 10:30:00", "2010-01-12 10:45:00", 2, 60),
+ [('2010-01-12 10:30:00', '2010-01-12 10:37:00'), ('2010-01-12 10:38:00', '2010-01-12 10:39:53'), ('2010-01-12 10:40:03', '2010-01-12 10:45:00')]),
+
+ #border case
+ (time_range("2010-01-12 10:00:00", "2010-01-12 12:00:00"),
+ time_range("2010-01-12 12:00:00", "2010-01-12 12:45:00"),
+ [('2010-01-12 12:00:00', '2010-01-12 12:00:00')])
+]
+
+@pytest.mark.parametrize("time_range1, time_range2, expected", test_cases)
+def test_timeranges(time_range1, time_range2, expected):
+ result = compute_overlap_time(time_range1, time_range2)
+ assert result == expected
\ No newline at end of file