Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 26 additions & 0 deletions .github/workflows/python-tests.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
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
run: |
python -m pip install --upgrade pip
python -m pip install pytest
- name: Test with pytest
run: |
pytest
Binary file not shown.
Binary file added __pycache__/times.cpython-310.pyc
Binary file not shown.
36 changes: 36 additions & 0 deletions test_times.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
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)
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_no_overlap():
range1 = time_range("2010-01-12 10:00:00", "2010-01-12 12:00:00")
range2 = time_range("2010-01-12 13:30:00", "2010-01-12 13:45:00",2, 60)
result = compute_overlap_time(range1,range2)
expected = [('0000-00-00 00:00:00', '0000-00-00 00:00:00')]
assert result == expected

def test_more_intervals():
range1 = time_range("2010-01-12 10:00:00", "2010-01-12 12:00:00",4)
range2 = time_range("2010-01-12 10:30:00", "2010-01-12 10:45:00",2, 60)
result = compute_overlap_time(range1, range2)
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_end_start():
range1 = time_range("2010-01-12 10:00:00", "2010-01-12 12:00:00")
range2 = time_range("2010-01-12 12:00:00", "2010-01-12 13:45:00",2, 60)
result = compute_overlap_time(range1, range2)
expected = [('0000-00-00 00:00:00', '0000-00-00 00:00:00')]
assert result == expected

def test_fails_inverted_interval():
with raises(ValueError):
range1 = time_range("2010-01-12 11:00:00", "2010-01-12 10:00:00")
range2 = time_range("2010-01-12 12:00:00", "2010-01-12 13:45:00",2, 60)
compute_overlap_time(range1, range2)
13 changes: 10 additions & 3 deletions times.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,12 +15,19 @@ def compute_overlap_time(range1, range2):
overlap_time = []
for start1, end1 in range1:
for start2, end2 in range2:
if start1 > end1 or start2 > end2:
raise ValueError("Start time should not be after the end time")
low = max(start1, start2)
high = min(end1, end2)
overlap_time.append((low, high))
if low < high:
overlap_time.append((low, high))
if overlap_time == []:
overlap_time = [('0000-00-00 00:00:00', '0000-00-00 00:00:00')]
return overlap_time

if __name__ == "__main__":
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)
large = time_range("2010-01-12 10:00:00", "2010-01-12 12:00:00",4)
short = time_range("2010-01-12 10:30:00", "2010-01-12 10:45:00",2, 60)
print('Large ', large)
print('Short', short)
print(compute_overlap_time(large, short))