From 0a8a3c144f84a05da99a5838cc5de5cfefaa6fe3 Mon Sep 17 00:00:00 2001 From: Tamir Date: Thu, 9 Jan 2025 15:31:51 +0400 Subject: [PATCH 1/3] Added my learning goals, completed the min integer challenge --- collaboration/learning_goals.md | 6 +++ solutions/min_integer.py | 44 +++++++++++++++++ solutions/tests/test_min_integer.py | 75 +++++++++++++++++++++++++++++ 3 files changed, 125 insertions(+) create mode 100644 solutions/min_integer.py create mode 100644 solutions/tests/test_min_integer.py diff --git a/collaboration/learning_goals.md b/collaboration/learning_goals.md index 051b3c3b3..eff08ad7d 100644 --- a/collaboration/learning_goals.md +++ b/collaboration/learning_goals.md @@ -85,3 +85,9 @@ to write solid and detailed unit tests. - Improve my programming skills in Python, especially in writing unit test programs - Mastering Code Review, making PRs, and the other GitHub teams' tasks. - Improve my communication with the team. + +### *Tamir El-Waleed* + +- Improve my testing skills, in addition to mastering basic Git & Github behavior. +- Create a complete project from scratch, building my portfolio in the process. + \ No newline at end of file diff --git a/solutions/min_integer.py b/solutions/min_integer.py new file mode 100644 index 000000000..ca6a8f5b4 --- /dev/null +++ b/solutions/min_integer.py @@ -0,0 +1,44 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +""" +A module for obtaining min integer from a list. + +Module contents: + - min_integer: Returns minimum integer from a list of integers + +Created on 2025-01-09 +Author: Tamir Elwaleeed +""" + + +def min_integer(my_list: list) -> int: + """Returns the min integer in a list of integers + If the list is empty, the function returns None + + Parameters: + my_list: list, the list to find the min from + + Returns -> int: the min integer from the list + + Raises: + AssertionError: if input is not a list + + Examples: + >>> min_integer([1, 2, 3, 4, 5]) + 1 + >>> min_integer([-1, -4, -5]) + -5 + >>> min_integer([]) + None + """ + assert isinstance(my_list, list), "input must be a list" + + if len(my_list) == 0: + return None + result = my_list[0] + i = 1 + while i < len(my_list): + if my_list[i] < result: + result = my_list[i] + i += 1 + return result \ No newline at end of file diff --git a/solutions/tests/test_min_integer.py b/solutions/tests/test_min_integer.py new file mode 100644 index 000000000..4b1f817ad --- /dev/null +++ b/solutions/tests/test_min_integer.py @@ -0,0 +1,75 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +""" +Test module for min_integer function. + +Test categories: + - Standard cases: typical lists with different lengths + - Edge cases: empty lists, single elements, strings + - Defensive tests: wrong input types, assertions + +Created on 2025-01-09 +Author: Tamir Elwaleeed +""" + +import unittest +from ..min_integer import min_integer + + +class TestminInteger(unittest.TestCase): + """Define unittests for min_integer([..]).""" + + def test_ordered_list(self): + """Test an ordered list of integers.""" + ordered = [1, 2, 3, 4] + self.assertEqual(min_integer(ordered), 1) + + def test_unordered_list(self): + """Test an unordered list of integers.""" + unordered = [1, 2, 4, 3] + self.assertEqual(min_integer(unordered), 1) + + def test_min_at_begginning(self): + """Test a list with a beginning min value.""" + min_at_beginning = [1, 4, 3, 2] + self.assertEqual(min_integer(min_at_beginning), 1) + + def test_empty_list(self): + """Test an empty list.""" + empty = [] + self.assertEqual(min_integer(empty), None) + + def test_one_element_list(self): + """Test a list with a single element.""" + one_element = [7] + self.assertEqual(min_integer(one_element), 7) + + def test_floats(self): + """Test a list of floats.""" + floats = [1.53, 6.33, -9.123, 15.2, 6.0] + self.assertEqual(min_integer(floats), -9.123) + + def test_ints_and_floats(self): + """Test a list of ints and floats.""" + ints_and_floats = [1.53, 15.5, -9, 15, 6] + self.assertEqual(min_integer(ints_and_floats), -9) + + def test_string(self): + """Test a string.""" + string = "Brennan" + with self.assertRaises(AssertionError): + min_integer(string) + + def test_list_of_strings(self): + """Test a list of strings.""" + strings = ["Brennan", "is", "my", "name"] + self.assertEqual(min_integer(strings), "Brennan") + + def test_empty_string(self): + """Test an empty string.""" + with self.assertRaises(AssertionError): + min_integer("") + + +if __name__ == "__main__": + unittest.main() \ No newline at end of file From 55c6cbf9e864ac3879013b8a88e68e65d4838e12 Mon Sep 17 00:00:00 2001 From: Tamir Date: Thu, 9 Jan 2025 15:40:35 +0400 Subject: [PATCH 2/3] Fixed formatting --- solutions/min_integer.py | 2 +- solutions/tests/test_min_integer.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/solutions/min_integer.py b/solutions/min_integer.py index ca6a8f5b4..9c8fda491 100644 --- a/solutions/min_integer.py +++ b/solutions/min_integer.py @@ -41,4 +41,4 @@ def min_integer(my_list: list) -> int: if my_list[i] < result: result = my_list[i] i += 1 - return result \ No newline at end of file + return result diff --git a/solutions/tests/test_min_integer.py b/solutions/tests/test_min_integer.py index 4b1f817ad..2b9212707 100644 --- a/solutions/tests/test_min_integer.py +++ b/solutions/tests/test_min_integer.py @@ -72,4 +72,4 @@ def test_empty_string(self): if __name__ == "__main__": - unittest.main() \ No newline at end of file + unittest.main() From b54bbf6581fc2aec417775ac0cee4fe2799f7b6b Mon Sep 17 00:00:00 2001 From: Tamir Date: Sun, 12 Jan 2025 15:57:07 +0400 Subject: [PATCH 3/3] Fixed PascalCase & Spelling Error --- solutions/tests/test_min_integer.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/solutions/tests/test_min_integer.py b/solutions/tests/test_min_integer.py index 2b9212707..0acfc4bc0 100644 --- a/solutions/tests/test_min_integer.py +++ b/solutions/tests/test_min_integer.py @@ -16,7 +16,7 @@ from ..min_integer import min_integer -class TestminInteger(unittest.TestCase): +class TestMinInteger(unittest.TestCase): """Define unittests for min_integer([..]).""" def test_ordered_list(self): @@ -29,7 +29,7 @@ def test_unordered_list(self): unordered = [1, 2, 4, 3] self.assertEqual(min_integer(unordered), 1) - def test_min_at_begginning(self): + def test_min_at_beginning(self): """Test a list with a beginning min value.""" min_at_beginning = [1, 4, 3, 2] self.assertEqual(min_integer(min_at_beginning), 1)