fixed tests for sets

This commit is contained in:
2024-03-02 14:05:51 +01:00
parent cb6b6c26b4
commit cb7e677880
3 changed files with 34 additions and 17 deletions

View File

@ -1,11 +1,7 @@
!!!autogeneriert!!! !!!autogeneriert!!!
## exercise 2 - dictionary - (11.5/20) ## exercise 2 - dictionary - (20/20)
### a) calculate_price (6/10) ### a) calculate_price (10/10)
- Preis wird nicht in Euro (float) ausgegeben [`-2`]
- Preis wird nicht korrekt berechnet [`-2`]
### b) by_amount (5.5/10)
- `by_amount` hat inkorrekte Typannotationen [`-0.5`] ### b) by_amount (10/10)
- nicht überprüft ob Produkte in `articles` enthalten [`-2`]
- `by_amount` wird nicht korrekt berechnet [`-2`]

View File

@ -10,9 +10,7 @@ def calculate_price(articles: dict[str, int], cart: dict[str, int]) -> float:
def by_amount(articles: dict[str, int], cart: dict[str, int]) -> dict[int, list[str]]: def by_amount(articles: dict[str, int], cart: dict[str, int]) -> dict[int, list[str]]:
out: dict[int, list[str]] = dict() out: dict[int, list[str]] = dict()
for name, amount in cart.items(): for name, amount in filter(lambda i: i[0] in articles, cart.items()):
if name not in articles:
continue
if amount not in out: if amount not in out:
out[amount] = [name] out[amount] = [name]
else: else:
@ -29,5 +27,3 @@ if __name__ == "__main__":
assert by_amount(articles_dict, cart_dict) == { assert by_amount(articles_dict, cart_dict) == {
2: ['apples', 'oranges'], 1: ['lemons']} 2: ['apples', 'oranges'], 1: ['lemons']}

View File

@ -68,7 +68,10 @@ def test_no_typeannotation_by_amount():
def test_typeannotation_by_amount(): def test_typeannotation_by_amount():
from ex2_dictionary import by_amount from ex2_dictionary import by_amount
assert has_annotations( assert has_annotations(
by_amount, [dict[str, int], dict[str, int]], dict[int, list[str]]) by_amount, [dict[str, int], dict[str, int]], dict[int, list[str]]
) or has_annotations(
by_amount, [dict[str, int], dict[str, int]], dict[int, set[str]]
)
@pytest.mark.dependency(depends=[Task.A]) @pytest.mark.dependency(depends=[Task.A])
@ -105,6 +108,11 @@ def test_price_calc():
assert abs(calculate_price(articles_dict, cart_dict) - 6) < EPS assert abs(calculate_price(articles_dict, cart_dict) - 6) < EPS
articles_dict = {"app": 100, "ora": 100,
"lemons": 200, "avo": 500}
cart_dict = {"apples": 2, "oranges": 2, "lemons": 1, "bananas": 5}
assert abs(calculate_price(articles_dict, cart_dict) - 2) < EPS
@pytest.mark.dependency(depends=[Task.A]) @pytest.mark.dependency(depends=[Task.A])
@pytest.mark.timeout(10) @pytest.mark.timeout(10)
@ -138,7 +146,25 @@ def test_by_amount():
cart_dict = {"apples": 2, "oranges": 2, "lemons": 1, "bananas": 5} cart_dict = {"apples": 2, "oranges": 2, "lemons": 1, "bananas": 5}
assert by_amount(articles_dict, cart_dict) == { assert by_amount(articles_dict, cart_dict) == {
2: ['apples', 'oranges'], 1: ['lemons']} 2: ['apples', 'oranges'], 1: ['lemons']
} or by_amount(articles_dict, cart_dict) == {
2: {'apples', 'oranges'}, 1: {'lemons'}
}
articles_dict = {"app": 100, "ora": 100,
"lemons": 200, "avo": 500}
cart_dict = {"apples": 2, "oranges": 2, "lemons": 1, "bananas": 5}
assert by_amount(articles_dict, cart_dict) == {1: ['lemons']} or by_amount(
articles_dict, cart_dict) == {1: {'lemons'}}
articles_dict = {"apples": 100, "oranges": 100,
"lemons": 200, "avocado": 500}
cart_dict = {"apples": 42, "oranges": 99, "lemons": 1, "bananas": 1}
assert by_amount(articles_dict, cart_dict) == {
99: ['oranges'], 42: ['apples'], 1: ['lemons']
} or by_amount(articles_dict, cart_dict) == {
99: {'oranges'}, 42: {'apples'}, 1: {'lemons'}
}
@pytest.mark.dependency(depends=[Task.B]) @pytest.mark.dependency(depends=[Task.B])
@ -150,8 +176,7 @@ def test_sideeffects_by_amount():
"lemons": 200, "avocado": 500} "lemons": 200, "avocado": 500}
b = {"apples": 2, "oranges": 2, "lemons": 1, "bananas": 5} b = {"apples": 2, "oranges": 2, "lemons": 1, "bananas": 5}
r = by_amount(a2 := deepcopy(a), b2 := deepcopy(b)) == { r = by_amount(a2 := deepcopy(a), b2 := deepcopy(b))
2: ['apples', 'oranges'], 1: ['lemons']}
assert a2 == a and b2 == b and r is not a and r is not b assert a2 == a and b2 == b and r is not a and r is not b