diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml new file mode 100644 index 0000000000..42589429b1 --- /dev/null +++ b/.github/workflows/main.yml @@ -0,0 +1,24 @@ +name: Tests +on: + push: + branches: + - 'labwork_5' + +jobs: + build: + runs-on: ${{ matrix.os }} + strategy: + matrix: + os: [ ubuntu-latest, windows-latest ] + fail-fast: false + steps: + - name: check-out repository + uses: actions/checkout@v3 + - name: Set up Python + uses: actions/setup-python@v3 + with: + python-version: "3.10" + - name: Upgrade libs + run: python -m pip install --upgrade pip requests + - name: to do tests + run: python -m unittest tests.py \ No newline at end of file diff --git a/circle.py b/circle.py index c3eb8647c9..518aa9310e 100644 --- a/circle.py +++ b/circle.py @@ -1,10 +1,25 @@ import math - def area(r): + ''' + Функция принимает число r и возвращает площадь круга с радиусом r + + Пример: + input: 10 output: 314 + + ''' + + return math.pi * r * r -def perimeter(r): +def perimetr(r): + ''' + Функция принимает число r и возвращает длину окружности с радиусом r + + Пример: + input: 100 output: 628 + ''' + return 2 * math.pi * r diff --git a/docs/README.md b/docs/README.md index 63f8727939..01b8fc0a74 100644 --- a/docs/README.md +++ b/docs/README.md @@ -1,10 +1,101 @@ -# Math formulas -## Area +# **Figures** +Функции данной программы помогут найти площадь и периметр таких фигур, как *квадрат*, *прямоугольник* +*круг* и *треугольник*. +Каждая функция принимает данные о фигуре и по этим данным высчитывает периметр или площадь фигуры. +Для вычислений в функциях были использованы следующие формулы: + +## Math formulas +### Area - Circle: S = πR² - Rectangle: S = ab - Square: S = a² +- Triangle: S = a*h/2 -## Perimeter +### Perimeter - Circle: P = 2πR - Rectangle: P = 2a + 2b -- Square: P = 4a \ No newline at end of file +- Square: P = 4a +- Triangle: P = a + b + c + + + +## Описаниее функций +### [circle.py](https://github.com/salt-caramel/geometric_lib/edit/labwork_2/circle.py): +- *area* получает на вход радиус окружности, возвращает площадь окружности с принимаем адресом + - Пример:\ + input: 10 output: 314 +- *preimetr* получает на вход радиус окружности и возвращает длину окружности + - Пример:\ + input: 100 output: 628 + +### [rectangle.py](https://github.com/salt-caramel/geometric_lib/edit/labwork_2/rectangle.py): +- *area* получает на вход длину и ширину прямоугольника, возвращает площадь площадь прямоугольника + - Пример:\ + input: 5, 2 output: 10 +- *preimetr* получает на вход длину и ширину прямоугольника, возвращает периметр прямоугольника + - Пример:\ + input: 5, 2 output: 14 + +### [square.py](https://github.com/salt-caramel/geometric_lib/edit/labwork_2/square.py): +- *area* получает на вход сторону квадрата, возвращает площадь квадрата + - Пример:\ + input: 3 output: 9 +- *preimetr* получает на вход сторону квадрата и возвращает периметр квадрата + - Пример:\ + input: 3 output: 12 + +### [triangle.py](https://github.com/salt-caramel/geometric_lib/edit/labwork_2/triangle.py): +- *area* получает на вход основание и высоту треугольника, возвращает площадь треугольника + - Пример:\ + input: 3, 6 output: 9 +- *preimetr* получает на вход значение трёх сторон треугольника, возвращает периметр треугольника + - Пример:\ + input: 2, 7, 3 output: 12 + + +# История изменениий + +1. Клонирование репозитория, который включал в себя файлы *square.py* и *circle.py* +2. Создание и добавление файла *rectangle.py* с функциями **area** и **perimetr** (1c7a987) +3. Создание и добавление файла *triangle.py* с функциями **area** и **perimetr** (47a9cd2) +4. Изменение ошибки в функции **perimetr** в *rectangle.py* и добавление файла с изменениями(efad489) +5. Дополнение функций комментариями (1fdcb86) + + +# Тестирование + +## План тестирования + +1. **Цель:** проверить корректность выполнения расчётов, а также поведения программы при вводе некорректных данных (корректные данные: неотрицательные числа)\ +**Задачи**: + - проверить корректность выполнения расчётов проограммы *circle.py*; + - проверить поведение программы *circle.py* при вводе некорретных данных; + - проверить корректность выполнения расчётов проограммы *rectangle.py*; + - проверить поведение программы *rectangle.py* при вводе некорретных данных; + - проверить корректность выполнения расчётов проограммы *square.py*; + - проверить поведение программы *square.py* при вводе некорретных данных; + - проверить корректность выполнения расчётов проограммы *triangle.py*; + - проверить поведение программы *triangle.py* при вводе некорретных данных; +2. Каждая программа должна выполнять расчёты согласно математическим формулам. При вводе некорректных данных должен быть вывод соответственных ошибок; +3. **Область тестирования:** программы *circle.py* (функции `area()` и `perimetr()`), *rectangle.py* (функции `area()` и `perimetr()`), *square.py* (функции `area()` и `perimetr()`), *triangle.py* (функции `area()` и `perimetr()`); +4. **Стратегия тестирования**: тестирование функциональности с помощью unittest; +5. **Критерии приемки и ожидаемые результаты:** + + | Название программы и функции | Описание теста | Входные данные | Ожидаемый вывод | Вывод программы |Вердикт | дата проведения тестов | + | ---------------------------- | -------------------------------------------------- | -------------- | --------------- | -----------------------|------- | ---------------------- | + | сircle.py (`area()`) | проверка корректности выполнения вычислений | 10 | ~314 | 314.159 | OK | 14.11.2024 | + | сircle.py (`area()`) | проверка поведения при введении отрицательных чисел| -5 |"Incorrect input"| 78.5398 |Warning | 14.11.2024 | + | сircle.py (`perimetr()`) | проверка корректности выполнения вычислений | 100 | ~628 | 628.3185 | OK | 14.11.2024 | + | сircle.py (`perimetr()`) | проверка поведения при введении строки | "арбуз" |"Incorrect input"| TypeError |Warning | 14.11.2024 | + | rectangle.py (`area()`) | проверка корректности выполнения вычислений | 5, 2 | 10 | 10 | OK | 14.11.2024 | + | rectangle.py (`area()`) | проверка поведения при введении строки | "lol", 8 |"Incorrect input"|lollollollollollollollol|Warning | 14.11.2024 | + | rectangle.py (`perimetr()`) | проверка корректности выполнения вычислений | 5, 2 | 14 | 14 | OK | 14.11.2024 | + | rectangle.py (`perimetr()`) | проверка поведения при введении отрицательных чисел| -3, 5 |"Incorrect input"| 4 |Warning | 14.11.2024 | + | square.py (`area()`) | проверка корректности выполнения вычислений | 3 | 9 | 9 | OK | 14.11.2024 | + | square.py (`area()`) | проверка поведения при введении отрицательных чисел| -7 |"Incorrect input"| 49 |Warning | 14.11.2024 | + | square.py (`perimetr()`) | проверка корректности выполнения вычислений | 3 | 12 | 12 | OK | 14.11.2024 | + | square.py (`perimetr()`) | проверка поведения при введении строки | "vibe" |"Incorrect input"| vibevibevibevibe |Warning | 14.11.2024 | + | triangle.py (`area()`) | проверка корректности выполнения вычислений | 3, 6 | 9 | 9 | OK | 14.11.2024 | + | triangle.py (`area()`) | проверка поведения при введении строки | "a", "b" |"Incorrect input"| TypeError |Warning | 14.11.2024 | + | triangle.py (`perimetr()`) | проверка корректности выполнения вычислений | 2, 7, 3 | 12 | 12 | OK | 14.11.2024 | + | triangle.py (`perimetr()`) | проверка поведения при введении отрицательных чисел| -4, -1, -6 |"Incorrect input"| -11 |Warning | 14.11.2024 | \ No newline at end of file diff --git a/rectangle.py b/rectangle.py new file mode 100644 index 0000000000..8516d16f89 --- /dev/null +++ b/rectangle.py @@ -0,0 +1,36 @@ +def area(a, b): + ''' + Функция возвращает значение площади прямоугольника + + Входные данные: + + a: длина прямоугольника + b: ширина прямоугольника + + Возвращаемое значение: + + a*b: значение площади прямоугольника со сторонами a и b + + Пример: + + input: 5, 2 output: 10 + ''' + return a * b + +def perimetr(a, b): + ''' + Функция возвращает значение периметра прямоугольника + + Входные данные: + + a: длина прямоугольника + b: ширина прямоугольника + + Возвращаемое значение: + + (a+b)*2: значение периметра прямоугольника со сторонами a и b + Пример: + + input: 5, 2 output: 14 + ''' + return (a + b)*2 diff --git a/square.py b/square.py index 0f98724205..217bb53048 100644 --- a/square.py +++ b/square.py @@ -1,7 +1,22 @@ def area(a): + ''' + Функция принимает число a и возвращает площадь квадрата со стороной a + + Пример: + input: 3 output: 9 + + ''' + return a * a -def perimeter(a): +def perimetr(a): + ''' + Функция принимает число a и возвращает gthbvtnh квадрата со стороной a + + Пример: + input: 3 output: 12 + + ''' return 4 * a diff --git a/tests.py b/tests.py new file mode 100644 index 0000000000..cf45bd3c53 --- /dev/null +++ b/tests.py @@ -0,0 +1,77 @@ +import unittest +import circle, rectangle, square, triangle + + +class CircleTestCase(unittest.TestCase): + def test_circle_area_res(self): + res = circle.area(10) + self.assertEqual(res, 314) + + def test_circle_area_minus(self): + res = circle.area(-5) + self.assertEqual(res, "Incorrect input") + + def test_circle_perimetr_res(self): + res = circle.perimetr(100) + self.assertEqual(res, 628) + + def test_circle_perimetr_str(self): + res = circle.perimetr("арбуз") + self.assertEqual(res, "Incorrect input") + +class RectangleTestCase(unittest.TestCase): + + def test_rectangle_area_res(self): + res = rectangle.area(5, 2) + self.assertEqual(res, 10) + + def test_rectangle_area_str(self): + res = rectangle.area("lol", 8) + self.assertEqual(res, "Incorrect input") + + def test_rectangle_perimetr_res(self): + res = rectangle.perimetr(5, 2) + self.assertEqual(res, 14) + + def test_rectangle_perimetr_minus(self): + res = rectangle.perimetr(-3, 5) + self.assertEqual(res, "Incorrect input") + +class SquareTestCase(unittest.TestCase): + def test_square_area_res(self): + res = square.area(3) + self.assertEqual(res, 9) + + def test_square_area_minus(self): + res = square.area(-7) + self.assertEqual(res, "Incorrect input") + + def test_square_perimetr_res(self): + res = square.perimetr(3) + self.assertEqual(res, 12) + + def test_square_perimetr_str(self): + res = square.perimetr("vibe") + self.assertEqual(res, "Incorrect input") + +class TriangleTestCase(unittest.TestCase): + def test_triangle_area_res(self): + res = triangle.area(3, 6) + self.assertEqual(res, 9) + + def test_triangle_area_str(self): + res = triangle.area("a", "b") + self.assertEqual(res, "Incorrect input") + + def test_triangle_perimetr_res(self): + res = triangle.perimetr(2, 7, 3) + self.assertEqual(res, 12) + + def test_triangle_perimetr_minus(self): + res = triangle.perimetr(-4, -1, -6) + self.assertEqual(res, "Incorrect input") + + + + + \ No newline at end of file diff --git a/triangle.py b/triangle.py new file mode 100644 index 0000000000..57cfdfee31 --- /dev/null +++ b/triangle.py @@ -0,0 +1,36 @@ +def area(a, h): + ''' + Функция возвращает значение площади треугольника + + Входные данные: + + a: основание треугольника + b: высота треугольника + + Возвращаемое значение: + + a*h/2: значение площади треугольника с ооснованием a и высотой h + Пример: + + input: 3, 6 output: 9 + ''' + return a * h / 2 + +def perimetr(a, b, c): + ''' + Функция возвращает значение периметра треугольника + + Входные данные: + + a: сторона треугольника + b: сторона треугольника + с: сторона треугольника + + Возвращаемое значение: + + a+b+c: значение периметра треугольника со сторонами a, b и c + Пример: + + input: 2, 7, 3 output: 12 + ''' + return a + b + c