From c80c985b29f2ff1dfde24c88f2f6d39b95746a21 Mon Sep 17 00:00:00 2001 From: Rouaa93 Date: Mon, 6 Jan 2025 16:42:36 +0300 Subject: [PATCH 01/25] Add files via upload --- solutions/even_odd.py | 53 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 solutions/even_odd.py diff --git a/solutions/even_odd.py b/solutions/even_odd.py new file mode 100644 index 000000000..2d269ef0f --- /dev/null +++ b/solutions/even_odd.py @@ -0,0 +1,53 @@ +""" +This module contains a function that takes a range of numbers and returns +two lists: one for even numbers and one for odd numbers within the specified range. + +Function: + even_odd_range(start: int, end: int) -> tuple[list[int], list[int]] + +Arguments: + start (int): The starting number of the range (inclusive). + end (int): The ending number of the range (inclusive). + +Returns: + tuple[list[int], list[int]]: A tuple containing two lists: + - A list of even numbers in the range. + - A list of odd numbers in the range. + +Raises: + ValueError: If start or end are not integers. + ValueError: If start is greater than end. +""" + +from typing import List, Tuple + + +def even_odd_range(start: int, end: int) -> Tuple[List[int], List[int]]: + """ + Returns two lists: one with the even numbers and one with the odd numbers + within the specified range. + + Arguments: + start -- The starting number (inclusive) + end -- The ending number (inclusive) + + Returns: + A tuple of two lists: the first list contains even numbers, the second contains odd numbers. + """ + + # Defensive assertions + if not isinstance(start, int) or not isinstance(end, int): + raise ValueError("Both start and end must be integers.") + if start > end: + raise ValueError("The start value must not be greater than the end value.") + + even_numbers = [] + odd_numbers = [] + + for num in range(start, end + 1): + if num % 2 == 0: + even_numbers.append(num) + else: + odd_numbers.append(num) + + return even_numbers, odd_numbers From 187b635ed59f45afca1a259090c2309a9a12ee84 Mon Sep 17 00:00:00 2001 From: Rouaa93 Date: Mon, 6 Jan 2025 16:43:50 +0300 Subject: [PATCH 02/25] Add files via upload --- solutions/tests/test_even_odd_range.py | 44 ++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 solutions/tests/test_even_odd_range.py diff --git a/solutions/tests/test_even_odd_range.py b/solutions/tests/test_even_odd_range.py new file mode 100644 index 000000000..fb76ffd76 --- /dev/null +++ b/solutions/tests/test_even_odd_range.py @@ -0,0 +1,44 @@ +import unittest + +from ..even_odd import even_odd_range + + +class TestEvenOddRange(unittest.TestCase): + """ + Test case for the even_odd_range function. + """ + + def test_even_odd_range_valid(self): + """ + Tests that the function correctly splits a range into even and odd numbers. + """ + result = even_odd_range(1, 5) + self.assertEqual(result, ([2, 4], [1, 3, 5])) + + def test_even_odd_range_empty(self): + """ + Tests that an empty range returns two empty lists. + """ + result = even_odd_range(5, 4) + self.assertEqual(result, ([], [])) + + def test_even_odd_range_single(self): + """ + Tests that a single number in the range is classified correctly. + """ + result = even_odd_range(4, 4) + self.assertEqual(result, ([4], [])) + + def test_even_odd_range_invalid_type(self): + """ + Tests that ValueError is raised if start or end are not integers. + """ + with self.assertRaises(ValueError): + even_odd_range(1, "5") + + def test_even_odd_range_invalid_order(self): + """ + Tests that ValueError is raised if start is greater than end. + """ + with self.assertRaises(ValueError): + even_odd_range(5, 3) From 9f85f1a05f1871ec848dff1aca985ecfd4f92beb Mon Sep 17 00:00:00 2001 From: Rouaa93 Date: Mon, 6 Jan 2025 16:52:33 +0300 Subject: [PATCH 03/25] Add files via upload --- solutions/tests/test_even_odd_range.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/solutions/tests/test_even_odd_range.py b/solutions/tests/test_even_odd_range.py index fb76ffd76..0ddc189c1 100644 --- a/solutions/tests/test_even_odd_range.py +++ b/solutions/tests/test_even_odd_range.py @@ -17,10 +17,11 @@ def test_even_odd_range_valid(self): def test_even_odd_range_empty(self): """ - Tests that an empty range returns two empty lists. + Tests that the function raises an error for an empty range where start > end. """ - result = even_odd_range(5, 4) - self.assertEqual(result, ([], [])) + with self.assertRaises(ValueError): + even_odd_range(5, 4) + def test_even_odd_range_single(self): """ From 17ab504415083fbd0daa775f503313f6fb4bb542 Mon Sep 17 00:00:00 2001 From: Rouaa93 Date: Mon, 6 Jan 2025 16:55:49 +0300 Subject: [PATCH 04/25] Add files via upload --- solutions/tests/test_even_odd_range.py | 1 - 1 file changed, 1 deletion(-) diff --git a/solutions/tests/test_even_odd_range.py b/solutions/tests/test_even_odd_range.py index 0ddc189c1..8569f3520 100644 --- a/solutions/tests/test_even_odd_range.py +++ b/solutions/tests/test_even_odd_range.py @@ -22,7 +22,6 @@ def test_even_odd_range_empty(self): with self.assertRaises(ValueError): even_odd_range(5, 4) - def test_even_odd_range_single(self): """ Tests that a single number in the range is classified correctly. From a10324943183fe3950c13b8477c154c2d1d8780f Mon Sep 17 00:00:00 2001 From: rouaa hamzah Date: Wed, 8 Jan 2025 21:59:07 +0200 Subject: [PATCH 05/25] file update --- solutions/even_odd.py | 60 +++++++++++++++++++++++++++++++ solutions/test_even_odd_range.py | 61 ++++++++++++++++++++++++++++++++ 2 files changed, 121 insertions(+) create mode 100644 solutions/even_odd.py create mode 100644 solutions/test_even_odd_range.py diff --git a/solutions/even_odd.py b/solutions/even_odd.py new file mode 100644 index 000000000..807b66719 --- /dev/null +++ b/solutions/even_odd.py @@ -0,0 +1,60 @@ +""" +Returns two lists: even and odd numbers from the specified range. + +The strategy is to iterate through the range (start to end, inclusive) +and check each number. If it's divisible by 2, it's even; otherwise, it's odd. + +Arguments: + start (int): The starting value of the range. + end (int): The ending value of the range. + +Returns: + tuple: A tuple of two lists (even numbers, odd numbers). + +Raises: + ValueError: If start is greater than end. + ValueError: If either start or end is not an integer. + +Examples: + >>> even_odd_range(1, 5) + ([2, 4], [1, 3, 5]) + >>> even_odd_range(0, 0) + ([0], []) + >>> even_odd_range(5, 3) + Traceback (most recent call last): + ... + ValueError: The start value must not be greater than the end value. +""" + +from typing import List, Tuple + + +def even_odd_range(start: int, end: int) -> Tuple[List[int], List[int]]: + """ + Returns two lists: one with the even numbers and one with the odd numbers + within the specified range. + + Arguments: + start -- The starting number (inclusive) + end -- The ending number (inclusive) + + Returns: + A tuple of two lists: the first list contains even numbers, the second contains odd numbers. + """ + + # Defensive assertions + if not isinstance(start, int) or not isinstance(end, int): + raise ValueError("Both start and end must be integers.") + if start > end: + raise ValueError("The start value must not be greater than the end value.") + + even_numbers = [] + odd_numbers = [] + + for num in range(start, end + 1): + if num % 2 == 0: + even_numbers.append(num) + else: + odd_numbers.append(num) + + return even_numbers, odd_numbers diff --git a/solutions/test_even_odd_range.py b/solutions/test_even_odd_range.py new file mode 100644 index 000000000..0ae69abb8 --- /dev/null +++ b/solutions/test_even_odd_range.py @@ -0,0 +1,61 @@ +""" +Unit tests for the even_odd_range function. + +This test file includes: +- Basic functionality tests. +- Tests for edge cases (e.g., empty ranges, single numbers). +- Tests for defensive assertions (e.g., invalid inputs). +- Tests for large ranges and negative numbers. +""" + +import unittest + +from ..even_odd import even_odd_range + + +class TestEvenOddRange(unittest.TestCase): + """ + Test case for the even_odd_range function. + """ + + def test_even_odd_range_valid(self): + """ + Tests that the function correctly splits a range into even and odd numbers. + """ + result = even_odd_range(1, 5) + self.assertEqual(result, ([2, 4], [1, 3, 5])) + + def test_even_odd_range_single(self): + """ + Tests that a single number in the range is classified correctly. + """ + result = even_odd_range(4, 4) + self.assertEqual(result, ([4], [])) + + def test_even_odd_range_invalid_type(self): + """ + Tests that ValueError is raised if start or end are not integers. + """ + with self.assertRaises(ValueError): + even_odd_range(1, "5") + + def test_even_odd_range_invalid_order(self): + """ + Tests that ValueError is raised if start is greater than end. + """ + with self.assertRaises(ValueError): + even_odd_range(5, 3) +def test_even_odd_range_negative_numbers(self): + """ + Tests the function with a range that includes negative numbers. + """ + result = even_odd_range(-5, 0) + self.assertEqual(result, ([0, -4], [-5, -3, -1])) + +def test_even_odd_range_large_range(self): + """ + Tests the function with a large range. + """ + result = even_odd_range(1, 100) + self.assertEqual(result[0], list(range(2, 101, 2))) # Even numbers + self.assertEqual(result[1], list(range(1, 101, 2))) # Odd numbers From 3663ff54381e942547be3bc75b6018bd590f4b88 Mon Sep 17 00:00:00 2001 From: rouaa hamzah Date: Fri, 10 Jan 2025 07:30:25 +0200 Subject: [PATCH 06/25] Merge branch 'challenge/1-even_odd_range-Rouaa' of https://github.com/MIT-Emerging-Talent/ET6-foundations-group-17 into challenge/1-even_odd_range-Rouaa --- ET6-foundations-group-17 | 1 + solutions/Group 17.code-workspace | 11 ++++++++++ solutions/rectangle_area.py | 30 ++++++++++++++++++++++++++ solutions/tests/test_rectangle_area.py | 27 +++++++++++++++++++++++ 4 files changed, 69 insertions(+) create mode 160000 ET6-foundations-group-17 create mode 100644 solutions/Group 17.code-workspace create mode 100644 solutions/rectangle_area.py create mode 100644 solutions/tests/test_rectangle_area.py diff --git a/ET6-foundations-group-17 b/ET6-foundations-group-17 new file mode 160000 index 000000000..d44145f73 --- /dev/null +++ b/ET6-foundations-group-17 @@ -0,0 +1 @@ +Subproject commit d44145f731d4ef2b850da3739715540e70717b12 diff --git a/solutions/Group 17.code-workspace b/solutions/Group 17.code-workspace new file mode 100644 index 000000000..00a1bb53d --- /dev/null +++ b/solutions/Group 17.code-workspace @@ -0,0 +1,11 @@ +{ + "folders": [ + { + "path": "../../Group 17" + }, + { + "path": ".." + } + ], + "settings": {} +} \ No newline at end of file diff --git a/solutions/rectangle_area.py b/solutions/rectangle_area.py new file mode 100644 index 000000000..813d92d3e --- /dev/null +++ b/solutions/rectangle_area.py @@ -0,0 +1,30 @@ +""" +Calculates the area of a rectangle. + +Args: + length (float): The length of the rectangle. Must be positive. + width (float): The width of the rectangle. Must be positive. + +Returns: + float: The area of the rectangle (length * width). + +Raises: + ValueError: If either length or width is non-positive. +""" + + +def calculate_area(length: float, width: float) -> float: + """ + Calculates the area of a rectangle using the formula: area = length * width. + + >>> calculate_area(5.0, 3.0) # Doctest: +NORMALIZE_WHITESPACE + 15.0 + >>> calculate_area(10.0, 2.5) # Doctest: +NORMALIZE_WHITESPACE + 25.0 + """ + + if length <= 0 or width <= 0: + raise ValueError("Length and width must be positive numbers.") + + area = length * width + return area diff --git a/solutions/tests/test_rectangle_area.py b/solutions/tests/test_rectangle_area.py new file mode 100644 index 000000000..379c93b14 --- /dev/null +++ b/solutions/tests/test_rectangle_area.py @@ -0,0 +1,27 @@ +import unittest +from rectangle_area import calculate_area # Import the function you're testing + + +class TestRectangleArea(unittest.TestCase): + def test_zero_values(self): + # Test with zero values + length = 0.0 + width = 5.0 + expected_area = 0.0 + actual_area = calculate_area(length, width) + self.assertEqual( + actual_area, expected_area, "Incorrect calculation for zero values." + ) + + def test_negative_values(self): + # Test with negative values + try: + calculate_area(-2.0, 3.0) + except ValueError as e: + self.assertEqual( + str(e), + "Length and width must be positive numbers.", + "Incorrect error message for negative values.", + ) + else: + self.fail("ValueError not raised for negative input.") From d7924fb014edce4dcc0b92132985c12bffc72e66 Mon Sep 17 00:00:00 2001 From: rouaa hamzah Date: Sat, 11 Jan 2025 07:59:30 +0200 Subject: [PATCH 07/25] update chenges --- solutions/even_odd.py | 18 +++---- solutions/tests/test_even_odd_range.py | 45 +++++++++------- solutions/tests/test_rectangle_area.py | 75 +++++++++++++++++--------- 3 files changed, 82 insertions(+), 56 deletions(-) diff --git a/solutions/even_odd.py b/solutions/even_odd.py index 5b143bc7d..1b45d6534 100644 --- a/solutions/even_odd.py +++ b/solutions/even_odd.py @@ -23,6 +23,8 @@ ([2, 4], [1, 3, 5]) >>> even_odd_range(0, 0) ([0], []) + >>> even_odd_range(-3, 3) + ([0, -2, 2], [-3, -1, 1, 3]) >>> even_odd_range(5, 3) Traceback (most recent call last): ... @@ -43,21 +45,17 @@ def even_odd_range(start: int, end: int) -> Tuple[List[int], List[int]]: Returns: A tuple of two lists: the first list contains even numbers, the second contains odd numbers. - """ - # Defensive assertions + Examples: + >>> even_odd_range(-2, 2) + ([0, -2, 2], [-1, 1]) + """ if not isinstance(start, int) or not isinstance(end, int): raise ValueError("Both start and end must be integers.") if start > end: raise ValueError("The start value must not be greater than the end value.") - even_numbers = [] - odd_numbers = [] - - for num in range(start, end + 1): - if num % 2 == 0: - even_numbers.append(num) - else: - odd_numbers.append(num) + even_numbers = [num for num in range(start, end + 1) if num % 2 == 0] + odd_numbers = [num for num in range(start, end + 1) if num % 2 != 0] return even_numbers, odd_numbers diff --git a/solutions/tests/test_even_odd_range.py b/solutions/tests/test_even_odd_range.py index 8569f3520..5de73432a 100644 --- a/solutions/tests/test_even_odd_range.py +++ b/solutions/tests/test_even_odd_range.py @@ -1,5 +1,14 @@ -import unittest +""" +Unit tests for the even_odd_range function. + +This test file includes: +- Tests for valid ranges (including single numbers). +- Tests for edge cases like negative numbers. +- Tests for invalid inputs like non-integer types. +- Tests for large ranges. +""" +import unittest from ..even_odd import even_odd_range @@ -9,36 +18,32 @@ class TestEvenOddRange(unittest.TestCase): """ def test_even_odd_range_valid(self): - """ - Tests that the function correctly splits a range into even and odd numbers. - """ + """Tests valid ranges with both even and odd numbers.""" result = even_odd_range(1, 5) self.assertEqual(result, ([2, 4], [1, 3, 5])) - def test_even_odd_range_empty(self): - """ - Tests that the function raises an error for an empty range where start > end. - """ - with self.assertRaises(ValueError): - even_odd_range(5, 4) - def test_even_odd_range_single(self): - """ - Tests that a single number in the range is classified correctly. - """ + """Tests single number in the range (even).""" result = even_odd_range(4, 4) self.assertEqual(result, ([4], [])) + def test_even_odd_range_negative_numbers(self): + """Tests ranges that include negative numbers.""" + result = even_odd_range(-5, 0) + self.assertEqual(result, ([0, -4], [-5, -3, -1])) + + def test_even_odd_range_large_range(self): + """Tests large ranges.""" + result = even_odd_range(1, 100) + self.assertEqual(result[0], list(range(2, 101, 2))) + self.assertEqual(result[1], list(range(1, 101, 2))) + def test_even_odd_range_invalid_type(self): - """ - Tests that ValueError is raised if start or end are not integers. - """ + """Tests ValueError for non-integer inputs.""" with self.assertRaises(ValueError): even_odd_range(1, "5") def test_even_odd_range_invalid_order(self): - """ - Tests that ValueError is raised if start is greater than end. - """ + """Tests ValueError when start > end.""" with self.assertRaises(ValueError): even_odd_range(5, 3) diff --git a/solutions/tests/test_rectangle_area.py b/solutions/tests/test_rectangle_area.py index 379c93b14..f495fa804 100644 --- a/solutions/tests/test_rectangle_area.py +++ b/solutions/tests/test_rectangle_area.py @@ -1,27 +1,50 @@ +""" +Unit tests for the even_odd_range function. + +This test file includes: +- Tests for valid ranges (including single numbers). +- Tests for edge cases like negative numbers. +- Tests for invalid inputs like non-integer types. +- Tests for large ranges. +""" + import unittest -from rectangle_area import calculate_area # Import the function you're testing - - -class TestRectangleArea(unittest.TestCase): - def test_zero_values(self): - # Test with zero values - length = 0.0 - width = 5.0 - expected_area = 0.0 - actual_area = calculate_area(length, width) - self.assertEqual( - actual_area, expected_area, "Incorrect calculation for zero values." - ) - - def test_negative_values(self): - # Test with negative values - try: - calculate_area(-2.0, 3.0) - except ValueError as e: - self.assertEqual( - str(e), - "Length and width must be positive numbers.", - "Incorrect error message for negative values.", - ) - else: - self.fail("ValueError not raised for negative input.") + +from solutions/even_odd_range import even_odd_range + + +class TestEvenOddRange(unittest.TestCase): + """ + Test case for the even_odd_range function. + """ + + def test_even_odd_range_valid(self): + """Tests valid ranges with both even and odd numbers.""" + result = even_odd_range(1, 5) + self.assertEqual(result, ([2, 4], [1, 3, 5])) + + def test_even_odd_range_single(self): + """Tests single number in the range (even).""" + result = even_odd_range(4, 4) + self.assertEqual(result, ([4], [])) + + def test_even_odd_range_negative_numbers(self): + """Tests ranges that include negative numbers.""" + result = even_odd_range(-5, 0) + self.assertEqual(result, ([0, -4], [-5, -3, -1])) + + def test_even_odd_range_large_range(self): + """Tests large ranges.""" + result = even_odd_range(1, 100) + self.assertEqual(result[0], list(range(2, 101, 2))) + self.assertEqual(result[1], list(range(1, 101, 2))) + + def test_even_odd_range_invalid_type(self): + """Tests ValueError for non-integer inputs.""" + with self.assertRaises(ValueError): + even_odd_range(1, "5") + + def test_even_odd_range_invalid_order(self): + """Tests ValueError when start > end.""" + with self.assertRaises(ValueError): + even_odd_range(5, 3) From 3cfec3aeb1eef707771a8ab766d79a5c50ef96d2 Mon Sep 17 00:00:00 2001 From: Aseel AbuKmail Date: Sat, 11 Jan 2025 16:05:20 +0200 Subject: [PATCH 08/25] Delete solutions/Group 17.code-workspace --- solutions/Group 17.code-workspace | 11 ----------- 1 file changed, 11 deletions(-) delete mode 100644 solutions/Group 17.code-workspace diff --git a/solutions/Group 17.code-workspace b/solutions/Group 17.code-workspace deleted file mode 100644 index 00a1bb53d..000000000 --- a/solutions/Group 17.code-workspace +++ /dev/null @@ -1,11 +0,0 @@ -{ - "folders": [ - { - "path": "../../Group 17" - }, - { - "path": ".." - } - ], - "settings": {} -} \ No newline at end of file From 63eebd39eb470ea25c082285fd7652bb047a294a Mon Sep 17 00:00:00 2001 From: Aseel AbuKmail Date: Sat, 11 Jan 2025 16:08:13 +0200 Subject: [PATCH 09/25] Delete solutions/tests/test_rectangle_area.py --- solutions/tests/test_rectangle_area.py | 50 -------------------------- 1 file changed, 50 deletions(-) delete mode 100644 solutions/tests/test_rectangle_area.py diff --git a/solutions/tests/test_rectangle_area.py b/solutions/tests/test_rectangle_area.py deleted file mode 100644 index f495fa804..000000000 --- a/solutions/tests/test_rectangle_area.py +++ /dev/null @@ -1,50 +0,0 @@ -""" -Unit tests for the even_odd_range function. - -This test file includes: -- Tests for valid ranges (including single numbers). -- Tests for edge cases like negative numbers. -- Tests for invalid inputs like non-integer types. -- Tests for large ranges. -""" - -import unittest - -from solutions/even_odd_range import even_odd_range - - -class TestEvenOddRange(unittest.TestCase): - """ - Test case for the even_odd_range function. - """ - - def test_even_odd_range_valid(self): - """Tests valid ranges with both even and odd numbers.""" - result = even_odd_range(1, 5) - self.assertEqual(result, ([2, 4], [1, 3, 5])) - - def test_even_odd_range_single(self): - """Tests single number in the range (even).""" - result = even_odd_range(4, 4) - self.assertEqual(result, ([4], [])) - - def test_even_odd_range_negative_numbers(self): - """Tests ranges that include negative numbers.""" - result = even_odd_range(-5, 0) - self.assertEqual(result, ([0, -4], [-5, -3, -1])) - - def test_even_odd_range_large_range(self): - """Tests large ranges.""" - result = even_odd_range(1, 100) - self.assertEqual(result[0], list(range(2, 101, 2))) - self.assertEqual(result[1], list(range(1, 101, 2))) - - def test_even_odd_range_invalid_type(self): - """Tests ValueError for non-integer inputs.""" - with self.assertRaises(ValueError): - even_odd_range(1, "5") - - def test_even_odd_range_invalid_order(self): - """Tests ValueError when start > end.""" - with self.assertRaises(ValueError): - even_odd_range(5, 3) From 0a2a47cf11bb52508289a55df4d796088443137a Mon Sep 17 00:00:00 2001 From: Aseel AbuKmail Date: Sat, 11 Jan 2025 16:08:31 +0200 Subject: [PATCH 10/25] Delete solutions/test_even_odd_range.py --- solutions/test_even_odd_range.py | 61 -------------------------------- 1 file changed, 61 deletions(-) delete mode 100644 solutions/test_even_odd_range.py diff --git a/solutions/test_even_odd_range.py b/solutions/test_even_odd_range.py deleted file mode 100644 index 0ae69abb8..000000000 --- a/solutions/test_even_odd_range.py +++ /dev/null @@ -1,61 +0,0 @@ -""" -Unit tests for the even_odd_range function. - -This test file includes: -- Basic functionality tests. -- Tests for edge cases (e.g., empty ranges, single numbers). -- Tests for defensive assertions (e.g., invalid inputs). -- Tests for large ranges and negative numbers. -""" - -import unittest - -from ..even_odd import even_odd_range - - -class TestEvenOddRange(unittest.TestCase): - """ - Test case for the even_odd_range function. - """ - - def test_even_odd_range_valid(self): - """ - Tests that the function correctly splits a range into even and odd numbers. - """ - result = even_odd_range(1, 5) - self.assertEqual(result, ([2, 4], [1, 3, 5])) - - def test_even_odd_range_single(self): - """ - Tests that a single number in the range is classified correctly. - """ - result = even_odd_range(4, 4) - self.assertEqual(result, ([4], [])) - - def test_even_odd_range_invalid_type(self): - """ - Tests that ValueError is raised if start or end are not integers. - """ - with self.assertRaises(ValueError): - even_odd_range(1, "5") - - def test_even_odd_range_invalid_order(self): - """ - Tests that ValueError is raised if start is greater than end. - """ - with self.assertRaises(ValueError): - even_odd_range(5, 3) -def test_even_odd_range_negative_numbers(self): - """ - Tests the function with a range that includes negative numbers. - """ - result = even_odd_range(-5, 0) - self.assertEqual(result, ([0, -4], [-5, -3, -1])) - -def test_even_odd_range_large_range(self): - """ - Tests the function with a large range. - """ - result = even_odd_range(1, 100) - self.assertEqual(result[0], list(range(2, 101, 2))) # Even numbers - self.assertEqual(result[1], list(range(1, 101, 2))) # Odd numbers From b5553156de7b3a47064aea127385b3523c5b7e42 Mon Sep 17 00:00:00 2001 From: Aseel AbuKmail Date: Sat, 11 Jan 2025 16:08:46 +0200 Subject: [PATCH 11/25] Delete solutions/rectangle_area.py --- solutions/rectangle_area.py | 30 ------------------------------ 1 file changed, 30 deletions(-) delete mode 100644 solutions/rectangle_area.py diff --git a/solutions/rectangle_area.py b/solutions/rectangle_area.py deleted file mode 100644 index 813d92d3e..000000000 --- a/solutions/rectangle_area.py +++ /dev/null @@ -1,30 +0,0 @@ -""" -Calculates the area of a rectangle. - -Args: - length (float): The length of the rectangle. Must be positive. - width (float): The width of the rectangle. Must be positive. - -Returns: - float: The area of the rectangle (length * width). - -Raises: - ValueError: If either length or width is non-positive. -""" - - -def calculate_area(length: float, width: float) -> float: - """ - Calculates the area of a rectangle using the formula: area = length * width. - - >>> calculate_area(5.0, 3.0) # Doctest: +NORMALIZE_WHITESPACE - 15.0 - >>> calculate_area(10.0, 2.5) # Doctest: +NORMALIZE_WHITESPACE - 25.0 - """ - - if length <= 0 or width <= 0: - raise ValueError("Length and width must be positive numbers.") - - area = length * width - return area From 2870933be1fcf950b3e3459d4897f6f3d33d6c01 Mon Sep 17 00:00:00 2001 From: Aseel AbuKmail Date: Sat, 11 Jan 2025 16:28:19 +0200 Subject: [PATCH 12/25] Update and rename test_even_odd_range.py to test_even_odd.py --- solutions/tests/{test_even_odd_range.py => test_even_odd.py} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename solutions/tests/{test_even_odd_range.py => test_even_odd.py} (100%) diff --git a/solutions/tests/test_even_odd_range.py b/solutions/tests/test_even_odd.py similarity index 100% rename from solutions/tests/test_even_odd_range.py rename to solutions/tests/test_even_odd.py From c7871677760a0605a74de97bb8aa0d88a333d68f Mon Sep 17 00:00:00 2001 From: Aseel AbuKmail Date: Sat, 11 Jan 2025 16:58:32 +0200 Subject: [PATCH 13/25] Update def even_odd_range(start: int, end: int) -> Tuple[List[int], List[int]]: From 861d1ea7ca9d5ed1ff953b60650e0b0baca59bf4 Mon Sep 17 00:00:00 2001 From: Aseel AbuKmail Date: Sat, 11 Jan 2025 16:59:14 +0200 Subject: [PATCH 14/25] Update def test_even_odd_range_negative_numbers(self): --- solutions/tests/test_even_odd.py | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/solutions/tests/test_even_odd.py b/solutions/tests/test_even_odd.py index 5de73432a..40985ca33 100644 --- a/solutions/tests/test_even_odd.py +++ b/solutions/tests/test_even_odd.py @@ -9,7 +9,13 @@ """ import unittest -from ..even_odd import even_odd_range + +try: + # For package execution + from ..even_odd import even_odd_range +except ImportError: + # For standalone execution + from even_odd import even_odd_range class TestEvenOddRange(unittest.TestCase): @@ -30,7 +36,7 @@ def test_even_odd_range_single(self): def test_even_odd_range_negative_numbers(self): """Tests ranges that include negative numbers.""" result = even_odd_range(-5, 0) - self.assertEqual(result, ([0, -4], [-5, -3, -1])) + self.assertEqual(result, ([-4, -2, 0], [-5, -3, -1])) def test_even_odd_range_large_range(self): """Tests large ranges.""" @@ -47,3 +53,7 @@ def test_even_odd_range_invalid_order(self): """Tests ValueError when start > end.""" with self.assertRaises(ValueError): even_odd_range(5, 3) + + +if __name__ == "__main__": + unittest.main() From c1be394dc3ef91b21f95d0311c73f78ae5eb6001 Mon Sep 17 00:00:00 2001 From: Aseel AbuKmail Date: Sun, 12 Jan 2025 09:20:53 +0200 Subject: [PATCH 15/25] Rename even_odd.py to even_odd_range.py --- solutions/{even_odd.py => even_odd_range.py} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename solutions/{even_odd.py => even_odd_range.py} (100%) diff --git a/solutions/even_odd.py b/solutions/even_odd_range.py similarity index 100% rename from solutions/even_odd.py rename to solutions/even_odd_range.py From 43b797a1a7113eb4c1dacc13b99ffe5d71fb5e02 Mon Sep 17 00:00:00 2001 From: Aseel AbuKmail Date: Sun, 12 Jan 2025 09:21:18 +0200 Subject: [PATCH 16/25] Update and rename test_even_odd.py to test_even_odd_range.py --- solutions/tests/{test_even_odd.py => test_even_odd_range.py} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename solutions/tests/{test_even_odd.py => test_even_odd_range.py} (100%) diff --git a/solutions/tests/test_even_odd.py b/solutions/tests/test_even_odd_range.py similarity index 100% rename from solutions/tests/test_even_odd.py rename to solutions/tests/test_even_odd_range.py From 1dd14d131ea8ac2286a1619d7ca6604d0ea41a25 Mon Sep 17 00:00:00 2001 From: Aseel AbuKmail Date: Sun, 12 Jan 2025 09:25:39 +0200 Subject: [PATCH 17/25] Update from ..even_odd import even_odd_range to from ..even_odd_range import even_odd_range --- solutions/tests/test_even_odd_range.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/solutions/tests/test_even_odd_range.py b/solutions/tests/test_even_odd_range.py index 40985ca33..68e599093 100644 --- a/solutions/tests/test_even_odd_range.py +++ b/solutions/tests/test_even_odd_range.py @@ -12,10 +12,10 @@ try: # For package execution - from ..even_odd import even_odd_range + from ..even_odd_range import even_odd_range except ImportError: # For standalone execution - from even_odd import even_odd_range + from even_odd_range import even_odd_range class TestEvenOddRange(unittest.TestCase): From b523768e0b6fafecc077f546221f5e09e7af094e Mon Sep 17 00:00:00 2001 From: Rouaa93 Date: Mon, 13 Jan 2025 00:13:12 +0200 Subject: [PATCH 18/25] Update test_even_odd_range.py --- solutions/tests/test_even_odd_range.py | 18 ++++++------------ 1 file changed, 6 insertions(+), 12 deletions(-) diff --git a/solutions/tests/test_even_odd_range.py b/solutions/tests/test_even_odd_range.py index 68e599093..fe5832fb0 100644 --- a/solutions/tests/test_even_odd_range.py +++ b/solutions/tests/test_even_odd_range.py @@ -1,13 +1,3 @@ -""" -Unit tests for the even_odd_range function. - -This test file includes: -- Tests for valid ranges (including single numbers). -- Tests for edge cases like negative numbers. -- Tests for invalid inputs like non-integer types. -- Tests for large ranges. -""" - import unittest try: @@ -38,10 +28,14 @@ def test_even_odd_range_negative_numbers(self): result = even_odd_range(-5, 0) self.assertEqual(result, ([-4, -2, 0], [-5, -3, -1])) - def test_even_odd_range_large_range(self): - """Tests large ranges.""" + def test_even_odd_range_large_range_even(self): + """Tests large range for even numbers.""" result = even_odd_range(1, 100) self.assertEqual(result[0], list(range(2, 101, 2))) + + def test_even_odd_range_large_range_odd(self): + """Tests large range for odd numbers.""" + result = even_odd_range(1, 100) self.assertEqual(result[1], list(range(1, 101, 2))) def test_even_odd_range_invalid_type(self): From 2953217cfb997c092008569c56f0a4ed4b601510 Mon Sep 17 00:00:00 2001 From: Rouaa93 Date: Mon, 13 Jan 2025 00:27:23 +0200 Subject: [PATCH 19/25] Update test_even_odd_range.py From 9ba9be7fd97541ebba3bf04ec1c74978e9f5eb9d Mon Sep 17 00:00:00 2001 From: Rouaa93 Date: Mon, 13 Jan 2025 00:48:41 +0200 Subject: [PATCH 20/25] Update test_even_odd_range.py --- solutions/tests/test_even_odd_range.py | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/solutions/tests/test_even_odd_range.py b/solutions/tests/test_even_odd_range.py index fe5832fb0..6ffba72a8 100644 --- a/solutions/tests/test_even_odd_range.py +++ b/solutions/tests/test_even_odd_range.py @@ -1,12 +1,9 @@ import unittest -try: - # For package execution - from ..even_odd_range import even_odd_range -except ImportError: - # For standalone execution - from even_odd_range import even_odd_range - +import sys +from pathlib import Path +sys.path.append(str(Path(file).parent.parent)) +from even_odd_range import even_odd_range class TestEvenOddRange(unittest.TestCase): """ From 8fa4c1ee1340d7fa1204c6c974f408b5b4736459 Mon Sep 17 00:00:00 2001 From: Rouaa93 Date: Mon, 13 Jan 2025 00:53:39 +0200 Subject: [PATCH 21/25] Update test_even_odd_range.py --- solutions/tests/test_even_odd_range.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/solutions/tests/test_even_odd_range.py b/solutions/tests/test_even_odd_range.py index 6ffba72a8..41eea0dbe 100644 --- a/solutions/tests/test_even_odd_range.py +++ b/solutions/tests/test_even_odd_range.py @@ -4,6 +4,9 @@ from pathlib import Path sys.path.append(str(Path(file).parent.parent)) from even_odd_range import even_odd_range +import unittest + + class TestEvenOddRange(unittest.TestCase): """ From a13cab357f088cc8d0e1152277e5dc19be8b3b77 Mon Sep 17 00:00:00 2001 From: Rouaa93 Date: Mon, 13 Jan 2025 00:57:02 +0200 Subject: [PATCH 22/25] Update test_even_odd_range.py --- solutions/tests/test_even_odd_range.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/solutions/tests/test_even_odd_range.py b/solutions/tests/test_even_odd_range.py index 41eea0dbe..fe5832fb0 100644 --- a/solutions/tests/test_even_odd_range.py +++ b/solutions/tests/test_even_odd_range.py @@ -1,11 +1,11 @@ import unittest -import sys -from pathlib import Path -sys.path.append(str(Path(file).parent.parent)) -from even_odd_range import even_odd_range -import unittest - +try: + # For package execution + from ..even_odd_range import even_odd_range +except ImportError: + # For standalone execution + from even_odd_range import even_odd_range class TestEvenOddRange(unittest.TestCase): From 6e1833e504d0b9115576b61b1aacefac0e983c63 Mon Sep 17 00:00:00 2001 From: Rouaa93 Date: Mon, 13 Jan 2025 01:18:03 +0200 Subject: [PATCH 23/25] Update even_odd_range.py --- solutions/even_odd_range.py | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/solutions/even_odd_range.py b/solutions/even_odd_range.py index 1b45d6534..7dd698be3 100644 --- a/solutions/even_odd_range.py +++ b/solutions/even_odd_range.py @@ -34,6 +34,24 @@ from typing import List, Tuple +def even_odd_range(start: int, end: int) -> Tuple[List[int], List[int]]: + """ + Returns two lists: one with the even numbers and one with the odd numbers + within the specified range. + + Arguments: + start -- The starting number (inclusive) + end -- The ending number (inclusive) + + Returns: + A tuple of two lists: the first list contains even numbers, the second contains odd numbers. + + Examples: + >>> even_odd_range(-2, 2) + ([0, -2, 2], [-1, 1]) + """ +from typing import List, Tuple + def even_odd_range(start: int, end: int) -> Tuple[List[int], List[int]]: """ Returns two lists: one with the even numbers and one with the odd numbers From 3e326fd3d8dc58210770bd503c5c065cc970f4ce Mon Sep 17 00:00:00 2001 From: Rouaa93 Date: Mon, 13 Jan 2025 01:21:07 +0200 Subject: [PATCH 24/25] Update test_even_odd_range.py --- solutions/tests/test_even_odd_range.py | 28 +++++++++++++++++--------- 1 file changed, 18 insertions(+), 10 deletions(-) diff --git a/solutions/tests/test_even_odd_range.py b/solutions/tests/test_even_odd_range.py index fe5832fb0..212ba88e7 100644 --- a/solutions/tests/test_even_odd_range.py +++ b/solutions/tests/test_even_odd_range.py @@ -1,11 +1,8 @@ import unittest - -try: - # For package execution - from ..even_odd_range import even_odd_range -except ImportError: - # For standalone execution - from even_odd_range import even_odd_range +import sys +from pathlib import Path +sys.path.append(str(Path(file).parent.parent)) +from even_odd_range import even_odd_range class TestEvenOddRange(unittest.TestCase): @@ -40,14 +37,25 @@ def test_even_odd_range_large_range_odd(self): def test_even_odd_range_invalid_type(self): """Tests ValueError for non-integer inputs.""" - with self.assertRaises(ValueError): + with self.assertRaises(ValueError) as context: even_odd_range(1, "5") + self.assertEqual(str(context.exception), "Both start and end must be integers.") def test_even_odd_range_invalid_order(self): """Tests ValueError when start > end.""" - with self.assertRaises(ValueError): + with self.assertRaises(ValueError) as context: even_odd_range(5, 3) + self.assertEqual(str(context.exception), "The start value must not be greater than the end value.") + + def test_even_odd_range_empty_range(self): + """Tests empty range with the same start and end.""" + result = even_odd_range(5, 5) + self.assertEqual(result, ([], [5])) + def test_even_odd_range_all_negative(self): + """Tests range with only negative numbers.""" + result = even_odd_range(-10, -1) + self.assertEqual(result, ([-10, -8, -6, -4, -2], [-9, -7, -5, -3, -1])) -if __name__ == "__main__": +if _name_ == "_main_": unittest.main() From 1f900433e5077c00da42af692ca5871af4cd45a7 Mon Sep 17 00:00:00 2001 From: Rouaa93 Date: Mon, 13 Jan 2025 02:44:06 +0200 Subject: [PATCH 25/25] Update test_even_odd_range.py