aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFrederick Muriuki Muriithi2022-11-16 04:16:01 +0300
committerFrederick Muriuki Muriithi2022-11-16 04:16:01 +0300
commitd511e44b1a2b0e70236831926d86a10d589e9235 (patch)
tree7e5ca3dbe0eb18c3dd2cb19b4fbbb1278cce9be3
parent838049cedefc5209ff9666624b2b24eccb120fb8 (diff)
downloadgn-uploader-d511e44b1a2b0e70236831926d86a10d589e9235.tar.gz
qc: Allow whole numbers or numbers where the decimals are all zeroes
-rw-r--r--quality_control/average.py4
-rw-r--r--quality_control/standard_error.py4
-rw-r--r--tests/qc/test_cells.py6
-rw-r--r--tests/qc/test_cells_average.py17
-rw-r--r--tests/qc/test_cells_standard_error.py20
5 files changed, 44 insertions, 7 deletions
diff --git a/quality_control/average.py b/quality_control/average.py
index 2b098db..ad732d0 100644
--- a/quality_control/average.py
+++ b/quality_control/average.py
@@ -9,8 +9,8 @@ def invalid_value(line_number: int, column_number: int, val: str) -> Union[
"""Return an `InvalidValue` object if `val` is not a valid "averages"
value."""
return cell_error(
- r"^[0-9]+\.[0-9]{3}$", val, line=line_number, column=column_number,
- value=val, message=(
+ r"^([0-9]+\.[0-9]{3}|[0-9]+\.?0*)$", val, line=line_number,
+ column=column_number, value=val, message=(
f"Invalid value '{val}'. "
"Expected string representing a number with exactly three "
"decimal places."))
diff --git a/quality_control/standard_error.py b/quality_control/standard_error.py
index 7e059ad..90beb8a 100644
--- a/quality_control/standard_error.py
+++ b/quality_control/standard_error.py
@@ -13,8 +13,8 @@ def invalid_value(
`None`.
"""
return cell_error(
- r"^[0-9]+\.[0-9]{6,}$", val, line=line_number, column=column_number,
- value=val, message=(
+ r"^([0-9]+\.[0-9]{6,}|[0-9]+\.?0*)$", val, line=line_number,
+ column=column_number, value=val, message=(
f"Invalid value '{val}'. "
"Expected string representing a number with at least six "
"decimal places."))
diff --git a/tests/qc/test_cells.py b/tests/qc/test_cells.py
index 5ff5813..1c6c3f6 100644
--- a/tests/qc/test_cells.py
+++ b/tests/qc/test_cells.py
@@ -10,7 +10,7 @@ from quality_control.average import invalid_value as avg_invalid_value
from quality_control.standard_error import invalid_value as se_invalid_value
@given(num_str=st.from_regex(
- r"^(?!(([0-9]+\.([0-9]{3}|[0-9]{6,}))|0+\.?0*)).*", fullmatch=True))
+ r"^(?!(([0-9]+\.([0-9]{3}|[0-9]{6,}))|[0-9]+\.?0*)).*", fullmatch=True))
def test_cell_value_errors_with_invalid_inputs2(num_str):
"""
GIVEN: `num_str` is an arbitrary string that is an invalid input,
@@ -30,7 +30,7 @@ def test_cell_value_errors_with_invalid_inputs2(num_str):
@given(num_str=st.from_regex(
r"^[0-9]+\.([0-9]{1,2}|[0-9]{4,}$)", fullmatch=True).filter(
- lambda param: not re.match(r"0\.0+", param)))
+ lambda param: not re.match(r"^[0-9]+\.0+$", param)))
def test_cell_average_value_errors_if_not_three_decimal_places2(num_str):
"""
GIVEN: `num_str` is a string representing a number with less than or more
@@ -57,7 +57,7 @@ def test_cell_average_value_pass_if_three_decimal_places(num_str):
assert avg_invalid_value(line, col, num_str) is None
@given(num_str=st.from_regex(r"^[0-9]+\.([0-9]{0,5}$)", fullmatch=True).filter(
- lambda param: not re.match(r"0\.0+", param)))
+ lambda param: not re.match(r"^[0-9]+\.?0*$", param)))
def test_cell_standard_error_value_errors_if_less_than_six_decimal_places2(num_str):
"""
GIVEN: `num_str` is a string representing a number with less than six
diff --git a/tests/qc/test_cells_average.py b/tests/qc/test_cells_average.py
new file mode 100644
index 0000000..c2b382a
--- /dev/null
+++ b/tests/qc/test_cells_average.py
@@ -0,0 +1,17 @@
+import re
+from random import randint
+from hypothesis import given
+from hypothesis import strategies as st
+
+from quality_control.average import invalid_value as avg_invalid_value
+
+@given(num_str=st.from_regex(r"^[0-9]+$", fullmatch=True))
+def test_cell_average_value_pass_if_no_decimal_places(num_str):
+ """
+ GIVEN: `num_str` is a string representing a number with no decimal places,
+ e.g. 2, 39, 8420
+ WHEN: `num_str` is provided as an argument to `avg_invalid_value` function,
+ THEN: `avg_invalid_value` returns `None`
+ """
+ line, col = randint(0, 100), randint(0, 20)
+ assert avg_invalid_value(line, col, num_str) is None
diff --git a/tests/qc/test_cells_standard_error.py b/tests/qc/test_cells_standard_error.py
new file mode 100644
index 0000000..aa25aa8
--- /dev/null
+++ b/tests/qc/test_cells_standard_error.py
@@ -0,0 +1,20 @@
+import re
+from random import randint
+
+
+from hypothesis import given
+from hypothesis import strategies as st
+
+from quality_control.standard_error import invalid_value
+
+@given(num_str=st.from_regex(r"^[0-9]+\.?0*", fullmatch=True))
+def test_cell_standard_error_value_errors_if_less_than_six_decimal_places2(num_str):
+ """
+ GIVEN: `num_str` is a string representing a whole number (e.g 5, 33, 5453
+ etc) or a number with all zeroes for the decimals (e.g 0.0, 19.00000,
+ 45842.00 etc)
+ WHEN: `num_str` is provided as an argument to `se_invalid_value` function,
+ THEN: `se_invalid_value` returns a `None`.
+ """
+ line, col = randint(0, 100), randint(0, 20)
+ assert invalid_value(line, col, num_str) is None