diff --git a/.github/workflows/python-tests.yml b/.github/workflows/python-tests.yml new file mode 100644 index 0000000..05e6a49 --- /dev/null +++ b/.github/workflows/python-tests.yml @@ -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 \ No newline at end of file diff --git a/__pycache__/test_times.cpython-310-pytest-7.2.0.pyc b/__pycache__/test_times.cpython-310-pytest-7.2.0.pyc new file mode 100644 index 0000000..e2a9d51 Binary files /dev/null and b/__pycache__/test_times.cpython-310-pytest-7.2.0.pyc differ diff --git a/__pycache__/times.cpython-310.pyc b/__pycache__/times.cpython-310.pyc new file mode 100644 index 0000000..8548683 Binary files /dev/null and b/__pycache__/times.cpython-310.pyc differ diff --git a/test_times.py b/test_times.py new file mode 100644 index 0000000..7f349c1 --- /dev/null +++ b/test_times.py @@ -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) diff --git a/times.py b/times.py index d57f401..1930bcf 100644 --- a/times.py +++ b/times.py @@ -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)) \ No newline at end of file