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()