feat: practice for testing. test: test case for testing tutorial
This commit is contained in:
parent
6b28a6ab1d
commit
522c4af42b
0
src/tutorial/testing/practice/__init__.py
Normal file
0
src/tutorial/testing/practice/__init__.py
Normal file
16
src/tutorial/testing/practice/bmi.py
Normal file
16
src/tutorial/testing/practice/bmi.py
Normal file
@ -0,0 +1,16 @@
|
||||
# Task: Schreibt für die folgende Aufgabe einige Unit-Test. Nutzt dazu für den Happy-Path einen parametrisierten Test für
|
||||
# einige valide Inputs und Outputs
|
||||
|
||||
|
||||
def calculate_bmi(weight_kg: float, height_m: float) -> float:
|
||||
"""
|
||||
Berechnet den Body Mass Index (BMI).
|
||||
BMI = Gewicht (kg) / Grösse (m)^2
|
||||
"""
|
||||
if weight_kg <= 0 or height_m <= 0:
|
||||
raise ValueError("Gewicht und Grösse müssen positiv sein.")
|
||||
return weight_kg / (height_m**2)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
print(calculate_bmi(weight_kg=72, height_m=1.84))
|
||||
29
src/tutorial/testing/practice/catching_exeptions.py
Normal file
29
src/tutorial/testing/practice/catching_exeptions.py
Normal file
@ -0,0 +1,29 @@
|
||||
# TASK: Schreibe sinnvolle Tests für die folgende Funktion
|
||||
# Schreibe Tests für die korrekte Struktur des Outputs der Funktion
|
||||
# Teste, ob bei Übergabe von 'falschem' Parameter data eine Exception geworfen wird
|
||||
|
||||
# https://docs.python.org/3/library/exceptions.html
|
||||
# Passing arguments of the wrong type (e.g. passing a list when an int is expected) should result in a TypeError,
|
||||
# but passing arguments with the wrong value (e.g. a number outside expected boundaries) should result in a ValueError.
|
||||
|
||||
|
||||
def double_integers(data: list[int]) -> list[int]:
|
||||
"""Doubles a list of given integers
|
||||
|
||||
:param data: list of integers
|
||||
:return: list of doubled integers
|
||||
"""
|
||||
|
||||
if not isinstance(data, list):
|
||||
raise TypeError("data must be a list")
|
||||
if not all([isinstance(i, int) for i in data]):
|
||||
raise TypeError("data may contain only integers")
|
||||
|
||||
return [i * 2 for i in data]
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
|
||||
data = [1, 2, 3]
|
||||
result = double_integers(data)
|
||||
print(result)
|
||||
14
src/tutorial/testing/practice/kata_list_filtering.py
Normal file
14
src/tutorial/testing/practice/kata_list_filtering.py
Normal file
@ -0,0 +1,14 @@
|
||||
# https://www.codewars.com/kata/53dbd5315a3c69eed20002dd
|
||||
# level: 7 kyu
|
||||
|
||||
# In this kata you will create a function that takes a list of non-negative integers and strings and returns a new
|
||||
# list with the strings filtered out.
|
||||
#
|
||||
# Example
|
||||
# filter_list([1,2,'a','b']) == [1,2]
|
||||
# filter_list([1,'a','b',0,15]) == [1,0,15]
|
||||
# filter_list([1,2,'aasf','1','123',123]) == [1,2,123]
|
||||
|
||||
|
||||
def filter_list(a_list):
|
||||
return [i for i in a_list if isinstance(i, int)]
|
||||
37
src/tutorial/testing/practice/pandas_filter_rows.py
Normal file
37
src/tutorial/testing/practice/pandas_filter_rows.py
Normal file
@ -0,0 +1,37 @@
|
||||
# https://www.codewars.com/kata/5ea2baed9345eb001e8ce394
|
||||
# 7 kyu
|
||||
|
||||
# Input parameters
|
||||
|
||||
# dataframe: pandas.DataFrame object
|
||||
# col: target column
|
||||
# func: filter function
|
||||
|
||||
# Task
|
||||
# Your function must return a new pandas.DataFrame object with the same columns as the original input. However,
|
||||
# include only the rows whose cell values in the designated column evaluate to False by func.
|
||||
#
|
||||
# Input DataFrame will never be empty. The target column will always be one of the dataframe columns. Filter function
|
||||
# will be a valid one. Index value must remain the same.
|
||||
|
||||
# REMARK: leichte Modifikation -> es wird ausgegeben, was in der Funktion definiert wurde (True) und nicht umgekehrt.
|
||||
|
||||
import pandas as pd
|
||||
|
||||
|
||||
def filter_dataframe(df, col, func):
|
||||
if col not in df.columns:
|
||||
raise ValueError(f"Column '{col}' is not present in the DataFrame.")
|
||||
mask = df[col].apply(func)
|
||||
return df[mask]
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
|
||||
df = pd.DataFrame(
|
||||
{
|
||||
"A": [1, 2, 3, 4, 5],
|
||||
}
|
||||
)
|
||||
|
||||
print(filter_dataframe(df, "A", lambda x: x >= 4))
|
||||
18
src/tutorial/testing/practice/vowel_count.py
Normal file
18
src/tutorial/testing/practice/vowel_count.py
Normal file
@ -0,0 +1,18 @@
|
||||
# https://www.codewars.com/kata/54ff3102c1bad923760001f3
|
||||
# level: 7 kyu
|
||||
|
||||
# Return the number (count) of vowels in the given string.
|
||||
# We will consider a, e, i, o, u as vowels for this Kata (but not y).
|
||||
# The input string will only consist of lower case letters and/or spaces.
|
||||
|
||||
|
||||
def get_count(inputStr):
|
||||
num_vowels = 0
|
||||
for char in inputStr:
|
||||
if char in "aeiouAEIOU":
|
||||
num_vowels = num_vowels + 1
|
||||
return num_vowels
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
print(get_count("Hello World"))
|
||||
5
tests/test_tutorial/test_kata_list_filtering.py
Normal file
5
tests/test_tutorial/test_kata_list_filtering.py
Normal file
@ -0,0 +1,5 @@
|
||||
from src.tutorial.testing.practice.kata_list_filtering import filter_list
|
||||
|
||||
|
||||
def test_filter_list():
|
||||
filter_list([3, 5])
|
||||
Loading…
x
Reference in New Issue
Block a user