From 681864cf21fff2aaaf6a301c4e9884540f933b51 Mon Sep 17 00:00:00 2001 From: SimonTannert Date: Mon, 20 Jan 2020 17:05:46 +0100 Subject: [PATCH 1/3] made the code a bit better --- maxima.py | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/maxima.py b/maxima.py index ed03ef6..b0fed6e 100644 --- a/maxima.py +++ b/maxima.py @@ -1,4 +1,7 @@ -def find_maxima(x): +from typing import Sequence + + +def find_maxima(x: Sequence[float]): """Find local maxima of x. Example: @@ -16,6 +19,11 @@ def find_maxima(x): idx = [] for i in range(len(x)): # `i` is a local maximum if the signal decreases before and after it - if x[i-1] < x[i] and x[i+1] < x[i]: + if ( + (i == 0 and x[i + 1] < x[i]) + or (i == len(x)-1 and x[i - 1] < x[i]) + or (0 < i < len(x)-1 and x[i - 1] < x[i] and x[i + 1] < x[i]) + ): idx.append(i) + return idx From 9b39f905d381cf3f320837e8e57ba749bae7c3a6 Mon Sep 17 00:00:00 2001 From: SimonTannert Date: Mon, 20 Jan 2020 17:08:28 +0100 Subject: [PATCH 2/3] added test cases --- test_maxima.py | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 test_maxima.py diff --git a/test_maxima.py b/test_maxima.py new file mode 100644 index 0000000..0823146 --- /dev/null +++ b/test_maxima.py @@ -0,0 +1,26 @@ +import maxima + + +def test_left_boundary(): + inp = [1, 0] + assert maxima.find_maxima(inp) == [0] + + +def test_right_boundary(): + inp = [0, 1] + assert maxima.find_maxima(inp) == [1] + + +def test_both_boundaries(): + inp = [2, 0, 1] + assert maxima.find_maxima(inp) == [0, 2] + + +def test_both_boundaries_oob(): + inp = [1, 0, 2] + assert maxima.find_maxima(inp) == [0, 2] + + +def test_non_numeric(): + inp = "bca" + assert maxima.find_maxima(inp) == [] From 64f4f8eaf3b219e6dc569dc93ddd493708bb3e5a Mon Sep 17 00:00:00 2001 From: SimonTannert Date: Mon, 20 Jan 2020 17:19:14 +0100 Subject: [PATCH 3/3] added more test cases --- maxima.py | 11 +++++++---- test_maxima.py | 19 +++++++++++++++++-- 2 files changed, 24 insertions(+), 6 deletions(-) diff --git a/maxima.py b/maxima.py index b0fed6e..563d4cb 100644 --- a/maxima.py +++ b/maxima.py @@ -1,7 +1,4 @@ -from typing import Sequence - - -def find_maxima(x: Sequence[float]): +def find_maxima(x): """Find local maxima of x. Example: @@ -16,6 +13,12 @@ def find_maxima(x: Sequence[float]): idx -- list of indices of the local maxima in x """ + if not isinstance(x, list): + raise ValueError + + if not all(isinstance(_x, (int, float)) for _x in x): + raise ValueError + idx = [] for i in range(len(x)): # `i` is a local maximum if the signal decreases before and after it diff --git a/test_maxima.py b/test_maxima.py index 0823146..c1c2914 100644 --- a/test_maxima.py +++ b/test_maxima.py @@ -1,5 +1,7 @@ import maxima +import pytest + def test_left_boundary(): inp = [1, 0] @@ -21,6 +23,19 @@ def test_both_boundaries_oob(): assert maxima.find_maxima(inp) == [0, 2] -def test_non_numeric(): +def test_characters(): inp = "bca" - assert maxima.find_maxima(inp) == [] + with pytest.raises(ValueError): + maxima.find_maxima(inp) + + +def test_characters2(): + inp = ["b", "c", "a"] + with pytest.raises(ValueError): + maxima.find_maxima(inp) + + +def test_non_numeric(): + inp = [None, [], "a", 5] + with pytest.raises(ValueError): + maxima.find_maxima(inp)