Skip to content

Commit

Permalink
Nth prime: sync expected test results and input data with problem-spe…
Browse files Browse the repository at this point in the history
…cifications (#1812)
  • Loading branch information
BethanyG authored and cmccandless committed Jun 11, 2019
1 parent a675dbc commit e619b39
Show file tree
Hide file tree
Showing 3 changed files with 24 additions and 24 deletions.
32 changes: 16 additions & 16 deletions exercises/nth-prime/example.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,33 +2,33 @@
from math import sqrt


def nth_prime(n):
if n < 1:
raise ValueError('The parameter `n` has to be a positive number.')
def prime(number):
if number < 1:
raise ValueError('The parameter `number` has to be a positive number.')

known = []
candidates = prime_candidates()

def is_prime(m):
sqrt_m = sqrt(m)
for k in known:
if k > sqrt_m:
def is_prime(candidate):
sqrt_candidate = sqrt(candidate)
for item in known:
if item > sqrt_candidate:
return True
elif m % k == 0:
elif candidate % item == 0:
return False
return True

while len(known) < n:
x = next(candidates)
if is_prime(x):
known.append(x)
while len(known) < number:
next_one = next(candidates)
if is_prime(next_one):
known.append(next_one)

return known[n - 1]
return known[number - 1]


def prime_candidates():
yield 2
yield 3
for n in count(6, 6):
yield n - 1
yield n + 1
for number in count(6, 6):
yield number - 1
yield number + 1
2 changes: 1 addition & 1 deletion exercises/nth-prime/nth_prime.py
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
def nth_prime(positive_number):
def nth_prime(number):
pass
14 changes: 7 additions & 7 deletions exercises/nth-prime/nth_prime_test.py
Original file line number Diff line number Diff line change
@@ -1,32 +1,32 @@
import unittest

from nth_prime import nth_prime
from nth_prime import prime


# Tests adapted from `problem-specifications//canonical-data.json` @ v2.1.0

class NthPrimeTest(unittest.TestCase):
def test_first_prime(self):
self.assertEqual(nth_prime(1), 2)
self.assertEqual(prime(1), 2)

def test_second_prime(self):
self.assertEqual(nth_prime(2), 3)
self.assertEqual(prime(2), 3)

def test_sixth_prime(self):
self.assertEqual(nth_prime(6), 13)
self.assertEqual(prime(6), 13)

def test_big_prime(self):
self.assertEqual(nth_prime(10001), 104743)
self.assertEqual(prime(10001), 104743)

def test_there_is_no_zeroth_prime(self):
with self.assertRaisesWithMessage(ValueError):
nth_prime(0)
prime(0)

# additional track specific test
def test_first_twenty_primes(self):
self.assertEqual([2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31,
37, 41, 43, 47, 53, 59, 61, 67, 71],
[nth_prime(n) for n in range(1, 21)])
[prime(n) for n in range(1, 21)])

# Utility functions
def setUp(self):
Expand Down

0 comments on commit e619b39

Please sign in to comment.