Skip to content

Commit 9ac22a7

Browse files
Merge pull request #14 from codonlibrary/nhsNumberGenerator-tests
nhsNumberGenerator tests and ValueErrors
2 parents 623108c + ccd165e commit 9ac22a7

3 files changed

Lines changed: 36 additions & 9 deletions

File tree

codonPython/__init__.py

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +0,0 @@
1-
from .age_bands import *
2-
from .dateValidator import *
3-
from .nhsNumberGenerator import *
4-
from .tableFromSql import *

codonPython/nhsNumberGenerator.py

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,18 @@
11
import random
22

33

4-
def nhsNumberGenerator(to_generate: int)->list:
4+
def nhsNumberGenerator(to_generate: int, random_state: int = None)->list:
55
"""
6-
Generates random NHS number(s) compliant with modulus 11 checks recorded
6+
Generates up to 1M random NHS number(s) compliant with modulus 11 checks recorded
77
in the data dictonary.
88
https://www.datadictionary.nhs.uk/data_dictionary/attributes/n/nhs/nhs_number_de.asp?shownav=1
99
1010
Parameters
1111
----------
1212
to_generate : int
1313
number of NHS numbers to generate
14+
random_state : int, default : None
15+
Optional seed for random number generation, for testing and reproducibility.
1416
1517
Returns
1618
----------
@@ -19,11 +21,19 @@ def nhsNumberGenerator(to_generate: int)->list:
1921
2022
Examples
2123
---------
22-
>>> random.seed(42)
23-
>>> nhsNumberGenerator(2)
24+
>>> nhsNumberGenerator(2, random_state=42)
2425
[7865793030, 1933498560]
2526
"""
2627

28+
if random_state:
29+
random.seed(random_state)
30+
if not isinstance(to_generate, int):
31+
raise ValueError("Please input a positive integer to generate numbers.")
32+
if to_generate > 1000000:
33+
raise ValueError("More than one million values requested")
34+
if to_generate < 0:
35+
raise ValueError("Please input a postitive integer to generate numbers.")
36+
2737
generated = []
2838
while len(generated) < to_generate:
2939
# Random 9 digit number starting with non-zero digit
@@ -36,4 +46,4 @@ def nhsNumberGenerator(to_generate: int)->list:
3646
# Add check digit to valid number
3747
number = int(str(number) + "0")
3848
generated.append(number)
39-
return generated
49+
return generated
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
from codonPython.nhsNumberGenerator import nhsNumberGenerator
2+
import numpy as np
3+
import pytest
4+
import random
5+
6+
7+
@pytest.mark.parametrize("to_generate, random_state, expected", [
8+
(3, 42, [7865793030, 1933498560, 7340365060]),
9+
(2, 1, [1677604360, 9170772010])
10+
])
11+
def test_nhsNumberGenerator_BAU(to_generate, random_state, expected):
12+
assert expected == nhsNumberGenerator(to_generate, random_state=random_state)
13+
14+
@pytest.mark.parametrize("to_generate", [
15+
4.2,
16+
1000001,
17+
-1
18+
])
19+
def test_nhsNumberGenerator_valueErrors(to_generate):
20+
with pytest.raises(ValueError):
21+
nhsNumberGenerator(to_generate)

0 commit comments

Comments
 (0)