Testing Class Material

This commit is contained in:
Lisa Schwetlick 2024-08-26 13:54:13 +02:00
commit 05b1f6cdd5
85 changed files with 102796 additions and 0 deletions

View file

@ -0,0 +1,49 @@
def find_maxima(x):
"""Find local maxima of x.
Input arguments:
x -- 1D list of real numbers
Output:
idx -- list of indices of the local maxima in x
"""
maxima = []
len_x = len(x)
if len_x == 0:
return maxima
maxima = check_first_element(x, maxima)
maxima = check_last_element(x, maxima)
# Check numbers in between
i = 1
while i < len_x - 1:
if x[i] > x[i - 1]:
# We have found a potential maximum or start of a plateau
plateau_start = i
while i < len_x - 1 and x[i] == x[i + 1]:
i += 1
plateau_end = i
if x[plateau_end] > x[plateau_end + 1]:
maxima.append(plateau_start)
i += 1
return maxima
def check_first_element(x, maxima):
if x[0] > x[1]:
maxima.append(0)
return maxima
def check_last_element(x, maxima):
if x[-1] > x[-2]:
maxima.append(len(x) - 1)
return maxima
if __name__ == "__main__":
result = find_maxima([1, 2, 2, 1])
print(result)

View file

@ -0,0 +1,107 @@
import numpy as np
import pytest
from local_maxima import find_maxima
def test_find_maxima():
values = [1, 3, -2, 0, 2, 1]
expected = [1, 4]
maxima = find_maxima(values)
assert maxima == expected
def test_find_maxima_edges():
values = [4, 2, 1, 0, 1, 5]
expected = [0, 5]
maxima = find_maxima(values)
assert maxima == expected
def test_find_maxima_empty():
values = []
expected = []
maxima = find_maxima(values)
assert maxima == expected
def test_find_maxima_plateau():
values = [1, 2, 2, 1]
expected = [1]
maxima = find_maxima(values)
assert maxima == expected
def test_find_maxima_not_a_plateau():
values = [1, 2, 2, 3, 1]
expected = [3]
maxima = find_maxima(values)
assert maxima == expected
# the tests below here fail, can you get them to pass?
def test_find_maxima_correct_order():
# TASK: get this test to pass
values = [2, 1, 5, 1, 9]
expected = [0, 2, 4]
maxima = find_maxima(values)
assert maxima == expected
def test_find_maxima_one_value():
# TASK: get this test to pass
values = [1]
expected = [0]
maxima = find_maxima(values)
assert maxima == expected
def test_find_maxima_long_plateau():
# TASK: Change the implementation for when there is a plateau
# for uneven plateau length, return the middle index, e.g. [1, 2, *2*, 2, 1] --> [2]
# for even plateau length, return the index left of the middle e.g. [1, 2, *2*, 2, 2, 1] --> [2]
values = [1, 2, 2, 2, 2, 2, 1, 8, 0]
expected = [3, 7]
maxima = find_maxima(values)
assert maxima == expected
def test_find_maxima_plateau_at_end():
# TASK: make sure plateaus at the end are handled properly (see test above)
values = [1, 2, 2]
expected = [1]
maxima = find_maxima(values)
assert maxima == expected
def test_find_maxima_plateau_at_start():
# TASK: make sure plateaus at the start are handled properly (see test above)
values = [1, 1, 0, 0]
expected = [0]
maxima = find_maxima(values)
assert maxima == expected
def test_find_maxima_all_same_values():
# TASK: implement a check for lists where there is no local maximum
values = [1, 1]
expected = [0]
maxima = find_maxima(values)
assert maxima == expected
def test_find_maxima_letters():
# stings can be evaluated with > and <, who knew!
# Find an easy solution so that both "t"s are recognised as local maxima
values = ["T", "e", "s", "t", "s", "!"]
expected = [0, 3]
maxima = find_maxima(values)
assert maxima == expected
def test_find_maxima_new_inputs_to_make_current_function_fail():
# should you actually be done with all tests, then you can think of other cases where the current function fails
# and write tests for them and fix them
assert False