forked from MIT-Emerging-Talent/ET6-practice-code-review
-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #56 from MIT-Emerging-Talent/find_prime_numbers_up…
…_to_n find_prime_numbers_up_to_n
- Loading branch information
Showing
5 changed files
with
173 additions
and
3 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,15 @@ | ||
{ | ||
"version": "2.0.0", | ||
"tasks": [ | ||
{ | ||
"label": "Run Ruff", | ||
"type": "shell", | ||
"command": "ruff --fix . || true", | ||
"problemMatcher": [], | ||
"group": { | ||
"kind": "build", | ||
"isDefault": true | ||
} | ||
} | ||
] | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,64 @@ | ||
#!/usr/bin/env python3 | ||
# -*- coding: utf-8 -*- | ||
r""" | ||
This module defines the function `find_primes_up_to_n` to identify all prime numbers | ||
up to a given integer \( N \). A prime number is greater than 1 and divisible only by 1 and itself. | ||
@uthor: Zeinab Shadabshoar | ||
Date: 10 01 2025 | ||
""" | ||
|
||
|
||
def is_prime(n: int) -> bool: | ||
r""" | ||
Checks if a given number is prime. | ||
Parameters: | ||
n (int): The number to check. | ||
Returns: | ||
bool: True if the number is prime, False otherwise. | ||
Examples: | ||
>>> is_prime(2) | ||
True | ||
>>> is_prime(4) | ||
False | ||
""" | ||
# Ensure n is an integer | ||
if not isinstance(n, int): | ||
raise AssertionError("Input must be an integer") | ||
|
||
if n <= 1: | ||
return False | ||
for i in range(2, int(n**0.5) + 1): | ||
if n % i == 0: | ||
return False | ||
return True | ||
|
||
|
||
def find_primes_up_to_n(n: int) -> list: | ||
r""" | ||
Finds all prime numbers up to the given number \( N \). | ||
Parameters: | ||
n (int): The upper limit to find primes up to. | ||
Returns: | ||
list: A list of all prime numbers up to \( N \). | ||
Examples: | ||
>>> find_primes_up_to_n(20) | ||
[2, 3, 5, 7, 11, 13, 17, 19] | ||
""" | ||
# Ensure n is an integer and non-negative | ||
if not isinstance(n, int): | ||
raise AssertionError("Input must be an integer") | ||
if n < 0: | ||
raise AssertionError("Input must be a non-negative integer") | ||
|
||
primes = [] | ||
for num in range(2, n + 1): | ||
if is_prime(num): | ||
primes.append(num) | ||
return primes |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,88 @@ | ||
""" | ||
A module for testing the functions is_prime and find_primes_up_to_n. | ||
Tests included: | ||
- is_prime: tested the cases when the input is a prime number, a non-prime number, | ||
input is zero, input is one, input is a negative integer, and when the input is a string. | ||
- find_primes_up_to_n: tested the cases when the input is a positive integer, | ||
input is zero, and when the input is a string. | ||
Created on 10 01 2025 | ||
@author: Zeinab Shadabshoar | ||
""" | ||
|
||
import unittest | ||
|
||
from ..find_prime_numbers import find_primes_up_to_n, is_prime | ||
|
||
|
||
class TestPrimeFunctions(unittest.TestCase): | ||
""" | ||
Tests both functions in prime_checker, is_prime and find_primes_up_to_n. | ||
""" | ||
|
||
def test_is_prime_prime(self): | ||
""" | ||
It should return True if the input is a prime number | ||
""" | ||
actual = is_prime(7) | ||
expected = True | ||
self.assertEqual(actual, expected) | ||
|
||
def test_is_prime_non_prime(self): | ||
""" | ||
It should return False if the input is a non-prime number | ||
""" | ||
actual = is_prime(4) | ||
expected = False | ||
self.assertEqual(actual, expected) | ||
|
||
def test_is_prime_zero(self): | ||
""" | ||
It should return False if the input is zero | ||
""" | ||
actual = is_prime(0) | ||
expected = False | ||
self.assertEqual(actual, expected) | ||
|
||
def test_is_prime_one(self): | ||
""" | ||
It should return False if the input is one | ||
""" | ||
actual = is_prime(1) | ||
expected = False | ||
self.assertEqual(actual, expected) | ||
|
||
def test_is_prime_string(self): | ||
""" | ||
It should raise an assertion error if the input is a non-integer | ||
""" | ||
with self.assertRaises(AssertionError): | ||
is_prime(self) | ||
|
||
def test_find_primes_up_to_n_positive(self): | ||
""" | ||
It should return a list of prime numbers up to the given positive integer | ||
""" | ||
actual = find_primes_up_to_n(20) | ||
expected = [2, 3, 5, 7, 11, 13, 17, 19] | ||
self.assertEqual(actual, expected) | ||
|
||
def test_find_primes_up_to_n_zero(self): | ||
""" | ||
It should return an empty list if the input is zero | ||
""" | ||
actual = find_primes_up_to_n(0) | ||
expected = [] | ||
self.assertEqual(actual, expected) | ||
|
||
def test_find_primes_up_to_n_string(self): | ||
""" | ||
It should raise an assertion error if the input is a non-integer | ||
""" | ||
with self.assertRaises(AssertionError): | ||
find_primes_up_to_n("Twenty") | ||
|
||
|
||
if __name__ == "__main__": | ||
unittest.main() |