diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000..dab6aa32b3 Binary files /dev/null and b/.DS_Store differ diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml new file mode 100644 index 0000000000..af9face92a --- /dev/null +++ b/.github/workflows/main.yml @@ -0,0 +1,28 @@ +name: RunUnitTests + +on: + push: + branches: + - new_features_465483 + workflow_dispatch: + +jobs: + test: + runs-on: ${{ matrix.os }} + strategy: + matrix: + os: [ubuntu-latest, windows-latest] + python-version: [3.8] + + steps: + - name: Checkout repo + uses: actions/checkout@v2 + + - name: Setup Python + uses: actions/setup-python@v2 + with: + python-version: ${{ matrix.python-version }} + + - name: Run Unit Tests + run: | + python unit_tests.py diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000000..26d33521af --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,3 @@ +# Default ignored files +/shelf/ +/workspace.xml diff --git a/.idea/geometric_lib.iml b/.idea/geometric_lib.iml new file mode 100644 index 0000000000..d0876a78d0 --- /dev/null +++ b/.idea/geometric_lib.iml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/inspectionProfiles/profiles_settings.xml b/.idea/inspectionProfiles/profiles_settings.xml new file mode 100644 index 0000000000..105ce2da2d --- /dev/null +++ b/.idea/inspectionProfiles/profiles_settings.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000000..dc9ea4906e --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000000..5c0675083d --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000000..94a25f7f4c --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/__pycache__/circle.cpython-310.pyc b/__pycache__/circle.cpython-310.pyc new file mode 100644 index 0000000000..8ddd9b6b29 Binary files /dev/null and b/__pycache__/circle.cpython-310.pyc differ diff --git a/__pycache__/rectangle.cpython-310.pyc b/__pycache__/rectangle.cpython-310.pyc new file mode 100644 index 0000000000..c0c2c3d33c Binary files /dev/null and b/__pycache__/rectangle.cpython-310.pyc differ diff --git a/__pycache__/square.cpython-310.pyc b/__pycache__/square.cpython-310.pyc new file mode 100644 index 0000000000..89075bce69 Binary files /dev/null and b/__pycache__/square.cpython-310.pyc differ diff --git a/__pycache__/triangle.cpython-310.pyc b/__pycache__/triangle.cpython-310.pyc new file mode 100644 index 0000000000..e76b67e066 Binary files /dev/null and b/__pycache__/triangle.cpython-310.pyc differ diff --git a/__pycache__/unit_tests.cpython-310.pyc b/__pycache__/unit_tests.cpython-310.pyc new file mode 100644 index 0000000000..35c0cd6ad4 Binary files /dev/null and b/__pycache__/unit_tests.cpython-310.pyc differ diff --git a/circle.py b/circle.py index c3eb8647c9..ac1cca3f1a 100644 --- a/circle.py +++ b/circle.py @@ -1,10 +1,31 @@ import math + + def area(r): + ''' +Returns the area of circle with given radius + +Parameters: + int r: radius of the circle + +Return value: + (int): area of the circle with given radius +''' return math.pi * r * r def perimeter(r): + ''' +Returns the perimeter of circle with given radius + +Parameters: + int r: radius of the circle + +Return value: + (int): perimeter of the circle with given radius +''' + return 2 * math.pi * r diff --git a/docs/README.md b/docs/README.md index 63f8727939..436a220718 100644 --- a/docs/README.md +++ b/docs/README.md @@ -1,10 +1,139 @@ +# Library description +Geomitric_lib is a library for calculating the area and perimeter of different geometric figures (circles, triangles, rectangles). + +--- + +# Figures + +## [Circle](../circle.py) + + +### Parameters +- **int r**: size of circle radius + +### Functions +- `area(r)`: return area of the circle with given radius + **Example:** + ```python + from circle import area + print(area(5)) # Output: 78.5398 (assuming π=3.14159) + ``` +- `perimeter(r)`: return perimeter of the circle with given radius + **Example:** + ```python + from circle import perimeter + print(perimeter(5)) # Output: 31.4159 (assuming π=3.14159) + ``` + +--- + +## [Rectangle](../rectangle.py) + +### Parameters +- **int a, b**: size of rectangle sides + +### Functions +- `area(a, b)`: return area of the rectangle with given sides + **Example:** + ```python + from rectangle import area + print(area(5, 3)) # Output: 15 + ``` +- `perimeter(a, b)`: return perimeter of the rectangle with given sides + **Example:** + ```python + from rectangle import perimeter + print(perimeter(5, 3)) # Output: 16 + ``` + +--- + +## [Square](../square.py) + + +### Parameters +- **int a**: size of square side + +### Functions +- `area(a)`: return area of the square with given side + **Example:** + ```python + from square import area + print(area(4)) # Output: 16 + ``` +- `perimeter(a)`: return perimeter of the square with given side + **Example:** + ```python + from square import perimeter + print(perimeter(4)) # Output: 16 + ``` + +--- + +## [Triangle](../triangle.py) + +### Parameters +- **int a, b**: size of triangle sides + +### Functions +- `area(a, b)`: return area of the triangle with given sides + **Example:** + ```python + from triangle import area + print(area(5, 4)) # Output: 10 + ``` +- `perimeter(a, b)`: return perimeter of the triangle with given sides + **Example:** + ```python + from triangle import perimeter + print(perimeter(3, 4)) # Output: 7 + ``` + +--- + # Math formulas + ## Area -- Circle: S = πR² -- Rectangle: S = ab -- Square: S = a² +- Circle: **S = πR²** +- Rectangle: **S = ab** +- Square: **S = a²** +- Triangle: **S = 0.5ab** ## Perimeter -- Circle: P = 2πR -- Rectangle: P = 2a + 2b -- Square: P = 4a \ No newline at end of file +- Circle: **P = 2πR** +- Rectangle: **P = 2a + 2b** +- Square: **P = 4a** +- Triangle: **P = a + b** + +--- + +# History of commits +- [commit 097241088df9202640ce046d79a2bcfcc85983ee](https://github.com/HuntedDuck/geometric_lib/commit/097241088df9202640ce046d79a2bcfcc85983ee) +Author: HuntedDuck +Date: Wed Sep 25 11:57:28 2024 +0300 + + Изменена функция поиска периметра в файле rectangle.py + +- [commit fee75fd0e73cd67d01c80659350d3d5855825d42](https://github.com/HuntedDuck/geometric_lib/commit/fee75fd0e73cd67d01c80659350d3d5855825d42) +Author: HuntedDuck +Date: Wed Sep 25 11:52:25 2024 +0300 + + Добавлен файл: rectangle.py + +- [commit 4bfbe8f29963e637f7aaabcfb2895cfe7362fa24](https://github.com/HuntedDuck/geometric_lib/commit/4bfbe8f29963e637f7aaabcfb2895cfe7362fa24) +Author: HuntedDuck +Date: Wed Sep 25 11:34:21 2024 +0300 + + Добавлен файл: rectangle.py + +- [commit d078c8d9ee6155f3cb0e577d28d337b791de28e2](https://github.com/HuntedDuck/geometric_lib/commit/d078c8d9ee6155f3cb0e577d28d337b791de28e2) +Author: smartiqa +Date: Thu Mar 4 14:55:29 2021 +0300 + + L-03: Docs added + +- [commit 8ba9aeb3cea847b63a91ac378a2a6db758682460](https://github.com/HuntedDuck/geometric_lib/commit/8ba9aeb3cea847b63a91ac378a2a6db758682460) +Author: smartiqa +Date: Thu Mar 4 14:54:08 2021 +0300 + + L-03: Circle and square added diff --git a/h b/h new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/h @@ -0,0 +1 @@ + diff --git a/rectangle.py b/rectangle.py new file mode 100644 index 0000000000..e6a6e95e36 --- /dev/null +++ b/rectangle.py @@ -0,0 +1,25 @@ +def area(a, b): + ''' +Area of rectangle with given sides + +Parameters: + int a,b: sides of the rectangle + +Return value: + (int): area of the rectangle with given sides +''' + + return a * b + +def perimeter(a, b): + ''' +Returns the perimeter of rectangle with given sides + +Parameters: + int a,b: sides of the rectangle + +Return value: + (int): perimeter of rectangle with given sides +''' + + return (a + b)*2 diff --git a/square.py b/square.py index 0f98724205..31a2b44e97 100644 --- a/square.py +++ b/square.py @@ -1,7 +1,25 @@ def area(a): + ''' +Returns the area of square with given side + +Parameters: + int a: side of the square + +Return value: + (int): area of the square with given side +''' return a * a def perimeter(a): + ''' +Returns the perimeter of square with given side + +Parameters: + int a: side of the square + +Return value: + (int): perimeter of square with given side +''' return 4 * a diff --git a/triangle.py b/triangle.py new file mode 100644 index 0000000000..bfd6068ba4 --- /dev/null +++ b/triangle.py @@ -0,0 +1,17 @@ +def area(a, b): + return (a * b)/2 + +def perimeter(a, b): + return (a + b)+(a**2+b**2)**0.5 + +''' +Area of triangle with given sides + +Parameters: + int a,b: sides of the triangle + +Return value: + (int): area of the triangle with given sides +''' + + diff --git a/unit_tests.py b/unit_tests.py new file mode 100644 index 0000000000..5b1007ecc0 --- /dev/null +++ b/unit_tests.py @@ -0,0 +1,80 @@ +import unittest +from rectangle import area as rect_area, perimeter as rect_perimeter +from square import area as square_area, perimeter as square_perimeter +from triangle import area as triangle_area, perimeter as triangle_perimeter +from circle import area as circle_area, perimeter as circle_perimeter + + +class TestRectangle(unittest.TestCase): + def test_area_normal_val(self): + self.assertEqual(rect_area(5, 10), 50) + + def test_area_zero_val(self): + self.assertEqual(rect_area(0, 10), 10) + + def test_area_neg_val(self): + self.assertEqual(rect_area(5, -10), 10) + + def test_perimeter_normal_val(self): + self.assertEqual(rect_perimeter(5, 10), 30) + + def test_perimeter_zero_val(self): + self.assertEqual(rect_perimeter(0, 10), 20) + + +class TestSquare(unittest.TestCase): + def test_area_normal_val(self): + self.assertEqual(square_area(5), 25) + + def test_area_zero_val(self): + self.assertEqual(square_area(0), 0) + + def test_perimeter_normal_val(self): + self.assertEqual(square_perimeter(5), 20) + + def test_perimeter_zero_val(self): + self.assertEqual(square_perimeter(0), 0) + + +class TestTriangle(unittest.TestCase): + def test_area_normal_val(self): + self.assertEqual(triangle_area(3, 4), 6) + + def test_area_zero_val(self): + self.assertEqual(triangle_area(0, 4), 0) + + def test_area_neg_val(self): + self.assertEqual(triangle_area(-3, 4), 0) + + def test_perimeter_normal_val(self): + self.assertEqual(triangle_perimeter(3, 4), 12) + + def test_perimeter_zero_val(self): + self.assertEqual(triangle_perimeter(0, 4), 0) + + def test_perimeter_neg_val(self): + self.assertEqual(triangle_perimeter(-3, 4), 0) + + +class TestCircle(unittest.TestCase): + def test_area_normal_val(self): + self.assertAlmostEqual(circle_area(5), 78.54, places=2) + + def test_area_zero_val(self): + self.assertEqual(circle_area(0), 0) + + def test_area_neg_val(self): + self.assertEqual(circle_area(-5), 0) + + def test_perimeter_normal_val(self): + self.assertAlmostEqual(circle_perimeter(5), 31.42, places=2) + + def test_perimeter_zero_val(self): + self.assertEqual(circle_perimeter(0), 0) + + def test_perimeter_neg_val(self): + self.assertEqual(circle_perimeter(-5), 0) + + +if __name__ == "__main__": + unittest.main()