import pytest
import ferro_hgvs
OFFSET_UNKNOWN_NEGATIVE = -(2**63)
OFFSET_UNKNOWN_POSITIVE = 2**63 - 1
SENTINELS = [OFFSET_UNKNOWN_NEGATIVE, OFFSET_UNKNOWN_POSITIVE]
SENTINEL_NEIGHBOURS = [OFFSET_UNKNOWN_NEGATIVE + 1, OFFSET_UNKNOWN_POSITIVE - 1]
@pytest.fixture
def predictor() -> ferro_hgvs.EffectPredictor:
return ferro_hgvs.EffectPredictor()
@pytest.mark.parametrize("offset", SENTINELS)
def test_an_unknown_offset_returns_none(predictor: ferro_hgvs.EffectPredictor, offset: int) -> None:
assert predictor.classify_splice_variant(offset) is None
@pytest.mark.parametrize("offset", SENTINEL_NEIGHBOURS)
def test_a_sentinel_neighbour_still_classifies(
predictor: ferro_hgvs.EffectPredictor, offset: int
) -> None:
effect = predictor.classify_splice_variant(offset)
assert effect is not None
assert effect.consequences == [ferro_hgvs.Consequence.IntronVariant]
assert effect.impact == ferro_hgvs.Impact.Modifier
@pytest.mark.parametrize(
("offset", "consequence", "impact"),
[
(1, ferro_hgvs.Consequence.SpliceDonorVariant, ferro_hgvs.Impact.High),
(-2, ferro_hgvs.Consequence.SpliceAcceptorVariant, ferro_hgvs.Impact.High),
(5, ferro_hgvs.Consequence.SpliceRegionVariant, ferro_hgvs.Impact.Low),
(50, ferro_hgvs.Consequence.IntronVariant, ferro_hgvs.Impact.Modifier),
],
)
def test_a_measured_offset_still_classifies(
predictor: ferro_hgvs.EffectPredictor,
offset: int,
consequence: "ferro_hgvs.Consequence",
impact: "ferro_hgvs.Impact",
) -> None:
effect = predictor.classify_splice_variant(offset)
assert effect is not None
assert effect.consequences == [consequence]
assert effect.impact == impact