Skip to content
Open

Fdfg #311

Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file added __pycache__/circle.cpython-311.pyc
Binary file not shown.
Binary file added __pycache__/rectangle.cpython-311.pyc
Binary file not shown.
Binary file added __pycache__/square.cpython-311.pyc
Binary file not shown.
Binary file added __pycache__/triangle.cpython-311.pyc
Binary file not shown.
120 changes: 119 additions & 1 deletion circle.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,128 @@
import math

import unittest

def area(r):
'''
Возвращает площадь круга по длине его радиуса (r)

Параметры:
r (float или int): длина радиуса круга

Возвращаемое значение:
(float): площадь круга

Примеры вызова:
area(3) 28.274333882308138
area(1) 3.141592653589793
area(2.5) 19.634954084936208
'''
if not isinstance(r, (int, float)):
raise TypeError("Радиус круга должен быть числом")
if r <= 0:
raise ValueError("Радиус круга должен быть больше 0")
return math.pi * r * r


def perimeter(r):
'''
Возвращает длину окружности по длине его радиуса (r)

Параметры:
r (float или int): радиус круга

Возвращаемое значение:
(float): длина окружности

Примеры вызова:
perimeter(3) 18.84955592153876
perimeter(1) 6.283185307179586
perimeter(2.5) 15.707963267948966
'''
if not isinstance(r, (int, float)):
raise TypeError("Радиус круга должен быть числом")
if r <= 0:
raise ValueError("Радиус круга должен быть больше 0")
return 2 * math.pi * r


class CircleTests(unittest.TestCase):
# Tests for area function
def test_area_valid_integer_small(self):
self.assertAlmostEqual(area(2), 12.566, places=3)

def test_area_valid_integer_large(self):
self.assertAlmostEqual(area(999222), 3.141592653589793 * 999222 ** 2, places=2)

def test_area_valid_float_small(self):
self.assertAlmostEqual(area(2.5), 19.634954084936208, places=5)

def test_area_valid_float_large(self):
self.assertAlmostEqual(area(1e6), math.pi * 1e12, places=2)

def test_area_zero_radius(self):
with self.assertRaises(ValueError):
area(0)

def test_area_negative_radius(self):
with self.assertRaises(ValueError):
area(-3214234)

def test_area_non_numeric_string(self):
with self.assertRaises(TypeError):
area('1')

def test_area_non_numeric_string_complex(self):
with self.assertRaises(TypeError):
area("321abc")

def test_area_non_numeric_none(self):
with self.assertRaises(TypeError):
area(None)

def test_area_non_numeric_list(self):
with self.assertRaises(TypeError):
area([5])

# Tests for perimeter function
def test_perimeter_valid_integer_small(self):
self.assertAlmostEqual(perimeter(4), 25.133, places=3)

def test_perimeter_valid_integer_large(self):
self.assertAlmostEqual(perimeter(345346), 2 * math.pi * 345346, places=2)

def test_perimeter_valid_float_small(self):
self.assertAlmostEqual(perimeter(2.5), 15.707963267948966, places=5)

def test_perimeter_valid_float_large(self):
self.assertAlmostEqual(perimeter(1e6), 2 * math.pi * 1e6, places=2)

def test_perimeter_zero_radius(self):
with self.assertRaises(ValueError):
perimeter(0)

def test_perimeter_negative_radius(self):
with self.assertRaises(ValueError):
perimeter(-4234234)

def test_perimeter_non_numeric_string(self):
with self.assertRaises(TypeError):
perimeter('5')

def test_perimeter_non_numeric_string_complex(self):
with self.assertRaises(TypeError):
perimeter("2343xyz")

def test_perimeter_non_numeric_none(self):
with self.assertRaises(TypeError):
perimeter(None)

def test_perimeter_non_numeric_list(self):
with self.assertRaises(TypeError):
perimeter([10])

def test_perimeter_float_input(self):
self.assertAlmostEqual(perimeter(3.1415), 2 * math.pi * 3.1415, places=4)


if __name__ == '__main__':
unittest.main()
147 changes: 147 additions & 0 deletions rectangle.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,147 @@
import unittest

def area(a, b):
'''
Возвращает площадь прямоугольника.

Входные данные:
a (int): длина прямоугольника
b (int): ширина прямоугольника

Выходные данные:
area (int): площадь прямоугольника

Пример вызова:
area(5, 10) - вернёт 50
'''
if not isinstance(a, int) or not isinstance(b, int):
raise TypeError("Стороны прямоугольника должны быть целыми числами")
if a <= 0 or b <= 0:
raise ValueError("Стороны прямоугольника должны быть больше 0")
return a * b

def perimeter(a, b):
'''
Возвращает периметр прямоугольника.

Входные данные:
a (int): длина прямоугольника
b (int): ширина прямоугольника

Выходные данные:
perimeter (int): периметр прямоугольника

Пример вызова:
perimeter(5, 10) - вернёт 30
'''
if not isinstance(a, int) or not isinstance(b, int):
raise TypeError("Стороны прямоугольника должны быть целыми числами")
if a <= 0 or b <= 0:
raise ValueError("Стороны прямоугольника должны быть больше 0")
return 2 * (a + b)

class RectangleTests(unittest.TestCase):
# Tests for area function
def test_area_valid_small(self):
self.assertEqual(area(2, 4), 8)

def test_area_valid_large(self):
self.assertEqual(area(999221, 214531), 999221 * 214531)

def test_area_zero_side_a(self):
with self.assertRaises(ValueError):
area(0, 134)

def test_area_zero_side_b(self):
with self.assertRaises(ValueError):
area(61, -634764)

def test_area_negative_side_a(self):
with self.assertRaises(ValueError):
area(-5, 10)

def test_area_negative_side_b(self):
with self.assertRaises(ValueError):
area(5, -10)

def test_area_non_integer_a(self):
with self.assertRaises(TypeError):
area('4', 8395142)

def test_area_non_integer_b(self):
with self.assertRaises(TypeError):
area(897653, "982662945645")

def test_area_both_non_integer(self):
with self.assertRaises(TypeError):
area("5", "10")

def test_area_float_inputs_a(self):
with self.assertRaises(TypeError):
area(5.5, 10)

def test_area_float_inputs_b(self):
with self.assertRaises(TypeError):
area(5, 10.5)

def test_area_non_numeric_none(self):
with self.assertRaises(TypeError):
area(None, 10)

def test_area_non_numeric_list(self):
with self.assertRaises(TypeError):
area([5], 10)

# Tests for perimeter function
def test_perimeter_valid_small(self):
self.assertEqual(perimeter(34, 23), 2 * (34 + 23)) # 114

def test_perimeter_valid_large(self):
self.assertEqual(perimeter(23, 4325235), 2 * (23 + 4325235)) # 8650516

def test_perimeter_zero_side_a(self):
with self.assertRaises(ValueError):
perimeter(4357, 0)

def test_perimeter_zero_side_b(self):
with self.assertRaises(ValueError):
perimeter(432, -4234234)

def test_perimeter_negative_side_a(self):
with self.assertRaises(ValueError):
perimeter(-10, 20)

def test_perimeter_negative_side_b(self):
with self.assertRaises(ValueError):
perimeter(10, -20)

def test_perimeter_non_integer_a(self):
with self.assertRaises(TypeError):
perimeter(234, '36')

def test_perimeter_non_integer_b(self):
with self.assertRaises(TypeError):
perimeter("235743", 164)

def test_perimeter_both_non_integer(self):
with self.assertRaises(TypeError):
perimeter("235743", "164")

def test_perimeter_float_inputs_a(self):
with self.assertRaises(TypeError):
perimeter(34.5, 23)

def test_perimeter_float_inputs_b(self):
with self.assertRaises(TypeError):
perimeter(34, 23.5)

def test_perimeter_non_numeric_none(self):
with self.assertRaises(TypeError):
perimeter(None, 23)

def test_perimeter_non_numeric_list(self):
with self.assertRaises(TypeError):
perimeter([34], 23)

if __name__ == '__main__':
unittest.main()
95 changes: 95 additions & 0 deletions square.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,102 @@
import unittest

def area(a):
'''
Возвращает площадь квадрата по длине его стороны (a)

Параметры:
a (int): длина стороны квадрата

Возвращаемое значение:
(int): площадь квадрата

Примеры вызова:
area(4) 16
area(2) 4
'''
if not isinstance(a, int):
raise TypeError("Сторона квадрата должна быть целым числом")
if a <= 0:
raise ValueError("Сторона квадрата должна быть больше 0")
return a * a


def perimeter(a):
'''
Возвращает периметр квадрата по длине его стороны (a)

Параметры:
a (int): длина стороны квадрата

Возвращаемое значение:
(int): периметр квадрата

Примеры вызова:
perimeter(4) 16
perimeter(2) 8
'''
if not isinstance(a, int):
raise TypeError("Сторона квадрата должна быть целым числом")
if a <= 0:
raise ValueError("Сторона квадрата должна быть больше 0")
return 4 * a


class SquareTests(unittest.TestCase):
# Tests for area function
def test_area_valid_small(self):
self.assertEqual(area(4), 16)

def test_area_valid_large(self):
self.assertEqual(area(6342645421), 40229150936532267241)

def test_area_zero_side(self):
with self.assertRaises(ValueError):
area(0)

def test_area_negative_side(self):
with self.assertRaises(ValueError):
area(-56235552)

def test_area_non_integer_input(self):
with self.assertRaises(TypeError):
area('4')

def test_area_non_integer_input_2(self):
with self.assertRaises(TypeError):
area("5423529")

def test_area_float_input(self):
with self.assertRaises(TypeError):
area(2.5)

# Tests for perimeter function
def test_perimeter_valid_small(self):
self.assertEqual(perimeter(72), 288)

def test_perimeter_valid_large(self):
self.assertEqual(perimeter(6346723), 25386892)

def test_perimeter_zero_side(self):
with self.assertRaises(ValueError):
perimeter(0)

def test_perimeter_negative_side(self):
with self.assertRaises(ValueError):
perimeter(-7542546)

def test_perimeter_non_integer_input(self):
with self.assertRaises(TypeError):
perimeter('52384')

def test_perimeter_non_integer_input_2(self):
with self.assertRaises(TypeError):
perimeter("72313==3?sg33473")

def test_perimeter_float_input(self):
with self.assertRaises(TypeError):
perimeter(2.5)


if __name__ == '__main__':
unittest.main()
Loading