diff --git a/solutions/is_even.py b/solutions/is_even.py new file mode 100644 index 000000000..3d12add1b --- /dev/null +++ b/solutions/is_even.py @@ -0,0 +1,40 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +""" +Created on XX XX XX + +A module for checking to see if an integer is even. + +@author: Luyando .E. Chitindi +""" + + +def is_even(number: int) -> bool: + """ + This checks if an integer is even. + + Parameters: + number: int, the number to check + + Returns -> bool: + True if the number is even, false otherwise. + + Raises: + AssertionError: if the input is not an integer + + Example: + >>> is_even(4) + True + >>> is_even(3) + False + >>> is_even(0) + True + >>> is_even("hello") + Traceback (most recent call last): + ... + AssertionError: Input must be an integer. + """ + assert isinstance(number, int), "Input must be an integer" + if number % 2 == 0: + return True + return False diff --git a/solutions/tests/test_is_even.py b/solutions/tests/test_is_even.py new file mode 100644 index 000000000..f8691b45f --- /dev/null +++ b/solutions/tests/test_is_even.py @@ -0,0 +1,55 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +import unittest +from solutions.is_even import is_even + + +class TestIsEven(unittest.TestCase): + """Test the is_even function""" + + def test_even_number(self): + """It should evaluate 4 to true""" + actual = is_even(4) + expected = True + self.assertEqual(actual, expected) + + def test_odd_number(self): + """It should evaluate 3 to False""" + actual = is_even(3) + expected = False + self.assertEqual(actual, expected) + + def test_zero(self): + """It should evaluate 0 to True""" + actual = is_even(0) + expected = True + self.assertEqual(actual, expected) + + def test_negative_even_number(self): + """It should evaluate -2 to True""" + actual = is_even(-2) + expected = True + self.assertEqual(actual, expected) + + def test_negative_odd_number(self): + """It should evaluate -3 to False""" + actual = is_even(-3) + expected = False + self.assertEqual(actual, expected) + + def test_non_integer_input(self): + """It should raise an assertion error if the argument is not an integer""" + with self.assertRaises(AssertionError): + is_even(3.5) + + with self.assertRaises(AssertionError): + is_even("string") + + def test_less_than_0(self): + """It should raise an assertion error if the argument is less than 0""" + with self.assertRaises(AssertionError): + is_even(-2.5) + + +if __name__ == "__main__": + unittest.main()