From a789aa9941a5de78197017f271e52e7b8f181ba6 Mon Sep 17 00:00:00 2001 From: kseni-sch <468150@niuitmo.ru> Date: Wed, 25 Sep 2024 11:23:08 +0300 Subject: [PATCH 1/7] Added file rectangle.py --- rectangle.py | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 rectangle.py diff --git a/rectangle.py b/rectangle.py new file mode 100644 index 0000000000..a3ddba3403 --- /dev/null +++ b/rectangle.py @@ -0,0 +1,5 @@ +def area(a, b): + return a * b + +def perimeter(a, b): + return a + b \ No newline at end of file From d09b839b6f1d79bdf6c7b3325e9a93b894737ed5 Mon Sep 17 00:00:00 2001 From: kseni-sch <468150@niuitmo.ru> Date: Wed, 25 Sep 2024 11:45:11 +0300 Subject: [PATCH 2/7] Fixed file rectangle.py and added file triangle.py --- rectangle.py | 2 +- triangle.py | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) create mode 100644 triangle.py diff --git a/rectangle.py b/rectangle.py index a3ddba3403..4545ca628d 100644 --- a/rectangle.py +++ b/rectangle.py @@ -2,4 +2,4 @@ def area(a, b): return a * b def perimeter(a, b): - return a + b \ No newline at end of file + return 2 * (a + b) \ No newline at end of file diff --git a/triangle.py b/triangle.py new file mode 100644 index 0000000000..c5caeb93ca --- /dev/null +++ b/triangle.py @@ -0,0 +1,4 @@ +def area(a, h): + return a * h / 2 +def perimeter(a, b, c): + return a + b + c \ No newline at end of file From 4af0b03990413dd29450fb68c499242abe532bc7 Mon Sep 17 00:00:00 2001 From: kseni-sch <468150@niuitmo.ru> Date: Tue, 22 Oct 2024 15:31:06 +0300 Subject: [PATCH 3/7] Wrote documentation --- circle.py | 14 +++++ docs/README.md | 140 ++++++++++++++++++++++++++++++++++++++++++++++++- rectangle.py | 17 +++++- square.py | 14 +++++ triangle.py | 18 ++++++- 5 files changed, 200 insertions(+), 3 deletions(-) diff --git a/circle.py b/circle.py index c3eb8647c9..c9ee9ad323 100644 --- a/circle.py +++ b/circle.py @@ -2,9 +2,23 @@ def area(r): + ''' + Takes circle radius value, returns circle area value + + Example: + area(3) + 28.274333882308138 + ''' return math.pi * r * r def perimeter(r): + ''' + Takes circle radius value, returns circuit value + + Example: + perimeter(3) + 18.84955592153876 + ''' return 2 * math.pi * r diff --git a/docs/README.md b/docs/README.md index 63f8727939..8576a9a892 100644 --- a/docs/README.md +++ b/docs/README.md @@ -1,10 +1,148 @@ # Math formulas +**Geometric_lib allows to use following math formulas in Python:** ## Area + - Circle: S = πR² + - Rectangle: S = ab + - Square: S = a² +- Triangle: S = ah² + + + ## 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 + + + +# Functions of math formulas + +## Circle +### Area +Takes circle radius value, returns circle area value. +``` +def area(r): + return math.pi * r * r +``` +***Example of function call:*** +``` +area(3) +28.274333882308138 +``` + +### Perimeter +Takes circle radius value, returns circuit value. +``` +def perimeter(r): + return 2 * math.pi * r +``` +***Example of function call:*** +``` +perimeter(3) +18.84955592153876 +``` + +## Rectangle +### Area +Takes rectangle sides length, returns value of rectangle area. +``` +def area(a, b): + return a * b +``` +***Example of function call:*** +``` +area(2, 3) +6 +``` + +### Perimeter +Takes rectangle sides length, returns value of rectangle perimeter. +``` +def perimeter(a, b): + return 2 * (a + b) +``` +***Example of function call:*** +``` +perimeter(2, 5) +14 +``` + + +## Square +### Area +Takes square side length, returns value of square area. +``` +def area(a): + return a * a +``` +***Example of function call:*** +``` +area(4) +16 +``` + +### Perimeter +Takes square side length, returns value of square perimeter. +``` +def perimeter(a): + return 4 * a +``` +***Example of function call:*** +``` +perimeter(3) +12 +``` + + +## Triangle +### Area +Takes lengths of the triangle side and triangle height, returns area of the triangle. +``` +def area(a, h): + return a * h / 2 +``` +***Example of function call:*** +``` +area(3, 4) +6 +``` + +### Perimeter +Takes lengths of the triangle sides, returns perimeter of the triangle. +``` +def perimeter(a, b, c): + return a + b + c +``` +***Example of function call:*** +``` +perimeter(3, 2, 5) +10 +``` + + +# History of project changes + +**Commit** ***a789aa9941a5de78197017f271e52e7b8f181ba6:*** +``` +Author: kseni-sch <468150@niuitmo.ru> +Date: Wed Sep 25 11:23:08 2024 +0300 + + Added file rectangle.py +``` + +**Commit** ***d09b839b6f1d79bdf6c7b3325e9a93b894737ed5:*** +``` +Author: kseni-sch <468150@niuitmo.ru> +Date: Wed Sep 25 11:45:11 2024 +0300 + + Fixed file rectangle.py and added file triangle.py +``` diff --git a/rectangle.py b/rectangle.py index 4545ca628d..97666f1b1a 100644 --- a/rectangle.py +++ b/rectangle.py @@ -1,5 +1,20 @@ + def area(a, b): + ''' + Takes rectangle sides length, returns value of rectangle area + + Example: + area(2, 3) + 6 + ''' return a * b def perimeter(a, b): - return 2 * (a + b) \ No newline at end of file + ''' + Takes rectangle sides length, returns value of rectangle perimeter + + Example: + perimeter(2, 5) + 14 + ''' + return 2 * (a + b) diff --git a/square.py b/square.py index 0f98724205..ad04682cfc 100644 --- a/square.py +++ b/square.py @@ -1,7 +1,21 @@ def area(a): + ''' + Takes square side length, returns value of square area + + Example: + area(4) + 16 + ''' return a * a def perimeter(a): + ''' + Takes square side length, returns value of square perimeter + + Example: + perimeter(3) + 12 + ''' return 4 * a diff --git a/triangle.py b/triangle.py index c5caeb93ca..a5cc37691c 100644 --- a/triangle.py +++ b/triangle.py @@ -1,4 +1,20 @@ + def area(a, h): + ''' + Takes lengths of the triangle side and triangle height, returns area of the triangle + + Example: + area(3, 4) + 6 + ''' return a * h / 2 + def perimeter(a, b, c): - return a + b + c \ No newline at end of file + ''' + Takes lengths of the triangle sides, returns perimeter of the triangle + + Example: + perimeter(3, 2, 5) + 10 + ''' + return a + b + c From 1730d753ece0d299e72f5bf49d0c144c6840c4a7 Mon Sep 17 00:00:00 2001 From: kseni-sch <468150@niuitmo.ru> Date: Wed, 23 Oct 2024 10:25:24 +0300 Subject: [PATCH 4/7] Added links to commits --- docs/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/README.md b/docs/README.md index 8576a9a892..17ff2179b4 100644 --- a/docs/README.md +++ b/docs/README.md @@ -131,7 +131,7 @@ perimeter(3, 2, 5) # History of project changes -**Commit** ***a789aa9941a5de78197017f271e52e7b8f181ba6:*** +**Commit** ***[a789aa9941a5de78197017f271e52e7b8f181ba6](https://github.com/kseni-sch/geometric_lib/commit/a789aa9941a5de78197017f271e52e7b8f181ba6):*** ``` Author: kseni-sch <468150@niuitmo.ru> Date: Wed Sep 25 11:23:08 2024 +0300 @@ -139,7 +139,7 @@ Date: Wed Sep 25 11:23:08 2024 +0300 Added file rectangle.py ``` -**Commit** ***d09b839b6f1d79bdf6c7b3325e9a93b894737ed5:*** +**Commit** ***[d09b839b6f1d79bdf6c7b3325e9a93b894737ed5](https://github.com/kseni-sch/geometric_lib/commit/d09b839b6f1d79bdf6c7b3325e9a93b894737ed5):*** ``` Author: kseni-sch <468150@niuitmo.ru> Date: Wed Sep 25 11:45:11 2024 +0300 From 1a5ecc8be2ec4ad5edb9bb5a76af61415e2e42e5 Mon Sep 17 00:00:00 2001 From: kseni-sch <468150@niuitmo.ru> Date: Tue, 5 Nov 2024 02:10:03 +0300 Subject: [PATCH 5/7] Created tests for all functions --- circle.py | 51 +++++++++++++++++++++++++++++++++++++++++--- rectangle.py | 60 ++++++++++++++++++++++++++++++++++++++++++++++------ square.py | 51 ++++++++++++++++++++++++++++++++++++++++++-- triangle.py | 47 ++++++++++++++++++++++++++++++++++++++++ 4 files changed, 198 insertions(+), 11 deletions(-) diff --git a/circle.py b/circle.py index c9ee9ad323..796d6d4ad8 100644 --- a/circle.py +++ b/circle.py @@ -1,24 +1,69 @@ import math - +import unittest def area(r): ''' Takes circle radius value, returns circle area value - + Example: area(3) 28.274333882308138 ''' + if not isinstance(r, int): + print("Not integer") + return 0 + if r < 0: + print("Negative number") + return 0 return math.pi * r * r def perimeter(r): ''' Takes circle radius value, returns circuit value - + Example: perimeter(3) 18.84955592153876 ''' + if not isinstance(r, int): + print("Not integer") + return 0 + if r < 0: + print("Negative number") + return 0 return 2 * math.pi * r + +class CircleTestCase(unittest.TestCase): + def test_zero_area(self): + res = area(0) + self.assertEqual(res, 0) + + def test_regular_area(self): + res = area(10) + self.assertEqual(res, 314.1592653589793) + + def test_str_area(self): + res = area("a") + self.assertEqual(res, 0) + + def test_negative_area(self): + res = area(-2) + self.assertEqual(res, 0) + + def test_zero_perimeter(self): + res = perimeter(0) + self.assertEqual(res, 0) + + def test_regular_perimeter(self): + res = perimeter(3) + self.assertEqual(res, 18.84955592153876) + + def test_str_perimeter(self): + res = perimeter("a") + self.assertEqual(res, 0) + + def test_negative_perimeter(self): + res = perimeter(-2) + self.assertEqual(res, 0) diff --git a/rectangle.py b/rectangle.py index 97666f1b1a..5a77ab06bd 100644 --- a/rectangle.py +++ b/rectangle.py @@ -1,20 +1,68 @@ +import unittest def area(a, b): - ''' + ''' Takes rectangle sides length, returns value of rectangle area - + Example: area(2, 3) 6 ''' - return a * b + if not isinstance(a, int) or not isinstance(b, int): + print("Not integer") + return 0 + if a < 0 or b < 0: + print("Negative number") + return 0 + return a * b + def perimeter(a, b): - ''' + ''' Takes rectangle sides length, returns value of rectangle perimeter - + Example: perimeter(2, 5) 14 ''' - return 2 * (a + b) + if not isinstance(a, int) or not isinstance(b, int): + print("Not integer") + return 0 + if a < 0 or b < 0: + print("Negative number") + return 0 + return 2 * (a + b) + + +class RectangleTestCase(unittest.TestCase): + def test_zero_area(self): + res = area(10, 0) + self.assertEqual(res, 0) + + def test_regular_area(self): + res = area(10, 5) + self.assertEqual(res, 50) + + def test_str_area(self): + res = area(10, "a") + self.assertEqual(res, 0) + + def test_negative_area(self): + res = area(10, -2) + self.assertEqual(res, 0) + + def test_zero_perimeter(self): + res = perimeter(10, 0) + self.assertEqual(res, 20) + + def test_regular_perimeter(self): + res = perimeter(10, 5) + self.assertEqual(res, 30) + + def test_str_perimeter(self): + res = perimeter(10, "a") + self.assertEqual(res, 0) + + def test_negative_perimeter(self): + res = perimeter(10, -2) + self.assertEqual(res, 0) diff --git a/square.py b/square.py index ad04682cfc..c9be0de293 100644 --- a/square.py +++ b/square.py @@ -1,21 +1,68 @@ +import unittest def area(a): ''' Takes square side length, returns value of square area - + Example: area(4) 16 ''' + if not isinstance(a, int): + print("Not integer") + return 0 + if a < 0: + print("Negative number") + return 0 return a * a def perimeter(a): ''' Takes square side length, returns value of square perimeter - + Example: perimeter(3) 12 ''' + if not isinstance(a, int): + print("Not integer") + return 0 + if a < 0: + print("Negative number") + return 0 return 4 * a + + +class SquareTestCase(unittest.TestCase): + def test_zero_area(self): + res = area(0) + self.assertEqual(res, 0) + + def test_regular_area(self): + res = area(10) + self.assertEqual(res, 100) + + def test_str_area(self): + res = area("a") + self.assertEqual(res, 0) + + def test_negative_area(self): + res = area(-2) + self.assertEqual(res, 0) + + def test_zero_perimeter(self): + res = perimeter(0) + self.assertEqual(res, 0) + + def test_regular_perimeter(self): + res = perimeter(3) + self.assertEqual(res, 12) + + def test_str_perimeter(self): + res = perimeter("a") + self.assertEqual(res, 0) + + def test_negative_perimeter(self): + res = perimeter(-2) + self.assertEqual(res, 0) diff --git a/triangle.py b/triangle.py index a5cc37691c..b10e36fcc5 100644 --- a/triangle.py +++ b/triangle.py @@ -1,3 +1,4 @@ +import unittest def area(a, h): ''' @@ -7,6 +8,12 @@ def area(a, h): area(3, 4) 6 ''' + if not isinstance(a, int) or not isinstance(h, int): + print("Not integer") + return 0 + if a < 0 or h < 0: + print("Negative number") + return 0 return a * h / 2 def perimeter(a, b, c): @@ -17,4 +24,44 @@ def perimeter(a, b, c): perimeter(3, 2, 5) 10 ''' + if not isinstance(a, int) or not isinstance(b, int) or not isinstance(c, int): + print("Not integer") + return 0 + if a < 0 or b < 0 or c < 0: + print("Negative number") + return 0 return a + b + c + + +class TriangleTestCase(unittest.TestCase): + def test_zero_area(self): + res = area(10, 0) + self.assertEqual(res, 0) + + def test_regular_area(self): + res = area(5, 3) + self.assertEqual(res, 7.5) + + def test_str_area(self): + res = area(10, "a") + self.assertEqual(res, 0) + + def test_negative_area(self): + res = area(10, -2) + self.assertEqual(res, 0) + + def test_zero_perimeter(self): + res = perimeter(10, 0, 4) + self.assertEqual(res, 14) + + def test_regular_perimeter(self): + res = perimeter(10, 5, 7) + self.assertEqual(res, 22) + + def test_str_perimeter(self): + res = perimeter(10, "a", 3) + self.assertEqual(res, 0) + + def test_negative_perimeter(self): + res = perimeter(10, -2, 5) + self.assertEqual(res, 0) From 77f3de01483359fbcb43e6161bcefcf5d17293cd Mon Sep 17 00:00:00 2001 From: kseni-sch <468150@niuitmo.ru> Date: Tue, 5 Nov 2024 02:13:17 +0300 Subject: [PATCH 6/7] Added tests to history --- docs/README.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/docs/README.md b/docs/README.md index 17ff2179b4..7776867eba 100644 --- a/docs/README.md +++ b/docs/README.md @@ -146,3 +146,11 @@ Date: Wed Sep 25 11:45:11 2024 +0300 Fixed file rectangle.py and added file triangle.py ``` + +**Commit** ***[1a5ecc8be2ec4ad5edb9bb5a76af61415e2e42e5](https://github.com/kseni-sch/geometric_lib/commit/1a5ecc8be2ec4ad5edb9bb5a76af61415e2e42e5):*** +``` +Author: kseni-sch <468150@niuitmo.ru> +Date: Tue Nov 5 02:10:03 2024 +0300 + + Created tests for all functions +``` \ No newline at end of file From 6a77e698e276be930523ae03122d76b90af1c3ec Mon Sep 17 00:00:00 2001 From: Kseniia Schigreva <468150@niuitmo.ru> Date: Tue, 3 Dec 2024 23:59:11 +0300 Subject: [PATCH 7/7] Created main.yml --- .github/workflows/main.yml | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 .github/workflows/main.yml diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml new file mode 100644 index 0000000000..9412b7842d --- /dev/null +++ b/.github/workflows/main.yml @@ -0,0 +1,36 @@ + +name: Testing + +on: + push: + +jobs: + ubuntu_test: + runs-on: ubuntu-latest + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Set up Python + uses: actions/setup-python@v4 + with: + python-version: '3.11' + + - name: Run tests + run: python -m unittest discover -s . -p "*.py" + + windows_test: + runs-on: windows-latest + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Set up Python + uses: actions/setup-python@v4 + with: + python-version: '3.11' + + - name: Run tests + run: python -m unittest discover -s . -p "*.py"