diff --git a/.github/workflows/python-tests.yaml b/.github/workflows/python-tests.yaml new file mode 100644 index 0000000..37fe76d --- /dev/null +++ b/.github/workflows/python-tests.yaml @@ -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, but you could add other dependencies needed. + run: | + python3 -m pip install --upgrade pip + python3 -m pip install pytest + - name: Test with pytest + run: | + python3 -m pytest diff --git a/test_times.py b/test_times.py new file mode 100644 index 0000000..6dc8205 --- /dev/null +++ b/test_times.py @@ -0,0 +1,60 @@ +import times +from times import time_range +from times import compute_overlap_time +#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)) + +def test_given_input(): + intervals1 = time_range("2010-01-12 10:00:00", "2010-01-12 12:00:00") + intervals2 = time_range("2010-01-12 10:30:00", "2010-01-12 10:45:00", 2, 60) + + result = compute_overlap_time(intervals1, intervals2) + print('Result: ', result) + 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')] + print('Expected: ', expected) + assert result == expected + + +def test_no_overlap(): + + intervals1 = time_range("2010-01-12 10:00:00", "2010-01-12 12:00:00") + intervals2 = time_range("2010-01-12 16:00:00", "2010-01-12 19:00:00", 2, 60*60) + + result = compute_overlap_time(intervals1, intervals2) + print('Result: ', result) + expected = [] + print('Expected: ', expected) + assert result == expected +''' +def test_multiple_ranges(): + + intervals1 = time_range("2010-01-12 10:00:00", "2010-01-12 13:00:00", 2, 3600) + intervals2 = time_range("2010-01-12 11:00:00", "2010-01-12 14:00:00", 2, 60*60) + + result = compute_overlap_time(intervals1, intervals2) + print('Result: ', result) + expected = [('2010-01-12 11:00:00', '2010-01-12 11:00:00'), \ + ('2010-01-12 12:00:00', '2010-01-12 12:00:00')] + print('Expected: ', expected) + assert result == expected +''' +''' +def test_same_time(): + + intervals1 = time_range("2010-01-12 10:00:00", "2010-01-12 12:00:00") + intervals2 = time_range("2010-01-12 09:00:00", "2010-01-12 12:00:00", 2, 60*60) + + result = compute_overlap_time(intervals1, intervals2) + print('Result: ', result) + expected = [("2010-01-12 10:00:00", "2010-01-12 10:00:00"),\ + ("2010-01-12 11:00:00", "2010-01-12 12:00:00")] + print('Expected: ', expected) + assert result == expected + +''' +''' +def test_interval(): + wrong_interval = time_range("2010-01-12 12:00:00", "2010-01-12 10:00:00") +''' diff --git a/times.py b/times.py index d57f401..2d8aa61 100644 --- a/times.py +++ b/times.py @@ -1,9 +1,12 @@ import datetime - 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('Interval cannot start with a time later than 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)) @@ -23,4 +26,6 @@ def compute_overlap_time(range1, range2): 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) - print(compute_overlap_time(large, short)) \ No newline at end of file + print(compute_overlap_time(large, short)) + +