|
| 1 | +import pytest |
| 2 | +from hypothesis import given |
| 3 | +from hypothesis import strategies as st |
| 4 | + |
| 5 | +from ert.config.summary_key_data import ( |
| 6 | + InvalidSummaryKeyError, |
| 7 | + SummaryKeyData, |
| 8 | + make_summary_key_data, |
| 9 | +) |
| 10 | + |
| 11 | +INTER_REGION_PATTERNS = [r"R.FT.*", r"R..FT.*", r"R.FR.*", r"R..FR.*", r"R.F"] |
| 12 | + |
| 13 | + |
| 14 | +_name = st.text(min_size=1, max_size=10).filter(lambda s: ":" not in s and "-" not in s) |
| 15 | + |
| 16 | +_other_name = _name.map(lambda s: "X" + s) |
| 17 | + |
| 18 | +_positive_int = st.integers(min_value=0, max_value=10000) |
| 19 | + |
| 20 | + |
| 21 | +@st.composite |
| 22 | +def _internal_region_name(draw): |
| 23 | + return [ |
| 24 | + draw( |
| 25 | + st.from_regex(p, fullmatch=True).map( |
| 26 | + lambda s: s.replace("-", "A").replace(":", "B") |
| 27 | + ) |
| 28 | + ) |
| 29 | + for p in INTER_REGION_PATTERNS |
| 30 | + ] |
| 31 | + |
| 32 | + |
| 33 | +def test_that_make_summary_key_data_parses_field_keys(): |
| 34 | + assert make_summary_key_data("FIELD") == SummaryKeyData(keyword="FIELD") |
| 35 | + |
| 36 | + |
| 37 | +@given(_positive_int) |
| 38 | +def test_that_make_summary_key_data_parses_region_aquifer_network_keys(number: int): |
| 39 | + assert make_summary_key_data(f"REGION:{number}") == SummaryKeyData( |
| 40 | + keyword="REGION", number=number |
| 41 | + ) |
| 42 | + assert make_summary_key_data(f"AQUIFER:{number}") == SummaryKeyData( |
| 43 | + keyword="AQUIFER", number=number |
| 44 | + ) |
| 45 | + assert make_summary_key_data(f"NETWORK:{number}") == SummaryKeyData( |
| 46 | + keyword="NETWORK", number=number |
| 47 | + ) |
| 48 | + |
| 49 | + |
| 50 | +@given(_positive_int, _positive_int, _positive_int) |
| 51 | +def test_that_make_summary_key_data_parses_block_keys(i: int, j: int, k: int): |
| 52 | + assert make_summary_key_data(f"BLOCK:{i},{j},{k}") == SummaryKeyData( |
| 53 | + keyword="BLOCK", i=i, j=j, k=k |
| 54 | + ) |
| 55 | + |
| 56 | + |
| 57 | +@given(_name) |
| 58 | +def test_that_make_summary_key_data_parses_well_keys(well: str): |
| 59 | + assert make_summary_key_data(f"WELL:{well}") == SummaryKeyData( |
| 60 | + keyword="WELL", well=well |
| 61 | + ) |
| 62 | + |
| 63 | + |
| 64 | +@given(_name) |
| 65 | +def test_that_make_summary_key_data_parses_group_keys(name: str): |
| 66 | + assert make_summary_key_data(f"GROUP:{name}") == SummaryKeyData( |
| 67 | + keyword="GROUP", name=name |
| 68 | + ) |
| 69 | + |
| 70 | + |
| 71 | +@given(_name, _positive_int) |
| 72 | +def test_that_make_summary_key_data_parses_segment_keys(name: str, number: int): |
| 73 | + assert make_summary_key_data(f"SEGMENT:{name}:{number}") == SummaryKeyData( |
| 74 | + keyword="SEGMENT", name=name, number=number |
| 75 | + ) |
| 76 | + |
| 77 | + |
| 78 | +@given(_name, _positive_int, _positive_int, _positive_int) |
| 79 | +def test_that_make_summary_key_data_parses_completion_keys( |
| 80 | + name: str, i: int, j: int, k: int |
| 81 | +): |
| 82 | + assert make_summary_key_data(f"COMPLETION:{name}:{i},{j},{k}") == SummaryKeyData( |
| 83 | + keyword="COMPLETION", name=name, i=i, j=j, k=k |
| 84 | + ) |
| 85 | + |
| 86 | + |
| 87 | +@given(_internal_region_name(), _positive_int, _positive_int) |
| 88 | +def test_that_make_summary_key_data_parses_inter_region_keys( |
| 89 | + keywords: list[str], region1: int, region2: int |
| 90 | +): |
| 91 | + for keyword in keywords: |
| 92 | + assert make_summary_key_data( |
| 93 | + f"{keyword}:{region1}-{region2}" |
| 94 | + ) == SummaryKeyData(keyword=keyword, region1=region1, region2=region2) |
| 95 | + |
| 96 | + |
| 97 | +@given(_name, _name) |
| 98 | +def test_that_make_summary_key_data_parses_local_well_keys(lgr_name: str, name: str): |
| 99 | + assert make_summary_key_data(f"LW:{lgr_name}:{name}") == SummaryKeyData( |
| 100 | + keyword="LW", lgr_name=lgr_name, name=name |
| 101 | + ) |
| 102 | + |
| 103 | + |
| 104 | +@given(_name, _positive_int, _positive_int, _positive_int) |
| 105 | +def test_that_make_summary_key_data_parses_local_block_keys( |
| 106 | + lgr_name: str, i: int, j: int, k: int |
| 107 | +): |
| 108 | + assert make_summary_key_data(f"LB:{lgr_name}:{i},{j},{k}") == SummaryKeyData( |
| 109 | + keyword="LB", lgr_name=lgr_name, i=i, j=j, k=k |
| 110 | + ) |
| 111 | + |
| 112 | + |
| 113 | +@given(_name, _name, _positive_int, _positive_int, _positive_int) |
| 114 | +def test_that_make_summary_key_data_parses_local_completion_keys( |
| 115 | + lgr_name: str, name: str, i: int, j: int, k: int |
| 116 | +): |
| 117 | + assert make_summary_key_data(f"LC:{lgr_name}:{name}:{i},{j},{k}") == SummaryKeyData( |
| 118 | + keyword="LC", lgr_name=lgr_name, name=name, i=i, j=j, k=k |
| 119 | + ) |
| 120 | + |
| 121 | + |
| 122 | +@given(_other_name, _name) |
| 123 | +def test_that_make_summary_key_data_parses_other_keys(other: str, name: str): |
| 124 | + assert make_summary_key_data(f"{other}:{name}") == SummaryKeyData(keyword=other) |
| 125 | + |
| 126 | + |
| 127 | +def test_that_make_summary_key_data_raises_for_empty_keys(): |
| 128 | + with pytest.raises(InvalidSummaryKeyError, match="Invalid summary key "): |
| 129 | + make_summary_key_data("") |
0 commit comments