import json
import pickle
import pytest
import las_rs
def make_caliper():
return las_rs.HeaderItem(
mnemonic="CALI",
unit="IN",
value=8.5,
descr="Caliper log",
)
@pytest.mark.xfail(reason="not yet implemented")
def test_create_default():
item = las_rs.HeaderItem()
assert item.mnemonic == ""
assert item.unit == ""
assert item.value == ""
assert item.descr == ""
assert item.data == ""
@pytest.mark.xfail(reason="not yet implemented")
def test_create_with_values():
item = las_rs.HeaderItem(
mnemonic="CALI",
unit="IN",
value=8.5,
descr="Caliper log",
)
assert item.mnemonic == "CALI"
assert item.unit == "IN"
assert item.value == 8.5
assert item.descr == "Caliper log"
@pytest.mark.xfail(reason="not yet implemented")
def test_original_mnemonic_stored():
item = las_rs.HeaderItem(mnemonic="RHOB", unit="G/CC", value=2.65, descr="Bulk density")
assert item.original_mnemonic == "RHOB"
@pytest.mark.xfail(reason="not yet implemented")
def test_useful_mnemonic_nonempty():
item = las_rs.HeaderItem(mnemonic="GR", unit="GAPI", value=45.0, descr="Gamma ray")
assert item.useful_mnemonic == "GR"
@pytest.mark.xfail(reason="not yet implemented")
def test_useful_mnemonic_blank():
item = las_rs.HeaderItem(mnemonic="", unit="", value="", descr="")
assert item.useful_mnemonic == "UNKNOWN"
@pytest.mark.xfail(reason="not yet implemented")
def test_useful_mnemonic_readonly():
item = las_rs.HeaderItem(mnemonic="DT", unit="US/F", value=72.3, descr="Sonic")
with pytest.raises(ValueError):
item.useful_mnemonic = "SOMETHING"
@pytest.mark.xfail(reason="not yet implemented")
def test_set_mnemonic_updates_original():
item = las_rs.HeaderItem(mnemonic="NPHI", unit="V/V", value=0.22, descr="Neutron porosity")
item.mnemonic = "PHIND"
assert item.original_mnemonic == "PHIND"
assert item.mnemonic == "PHIND"
@pytest.mark.xfail(reason="not yet implemented")
def test_dict_access_mnemonic():
item = make_caliper()
assert item["mnemonic"] == "CALI"
@pytest.mark.xfail(reason="not yet implemented")
def test_dict_access_unit():
item = make_caliper()
assert item["unit"] == "IN"
@pytest.mark.xfail(reason="not yet implemented")
def test_dict_access_invalid_key():
item = make_caliper()
with pytest.raises(KeyError):
_ = item["bogus"]
@pytest.mark.xfail(reason="not yet implemented")
def test_repr_format():
item = las_rs.HeaderItem(
mnemonic="SP",
unit="MV",
value=-32.1,
descr="Spontaneous potential",
)
r = repr(item)
assert "HeaderItem" in r
assert "SP" in r
assert "MV" in r
assert "-32.1" in r or "-32" in r
assert "Spontaneous potential" in r
@pytest.mark.xfail(reason="not yet implemented")
def test_json_property():
item = las_rs.HeaderItem(
mnemonic="PEFZ",
unit="B/E",
value=3.14,
descr="Photoelectric factor",
)
raw = item.json
parsed = json.loads(raw)
assert parsed["mnemonic"] == "PEFZ"
assert parsed["unit"] == "B/E"
assert parsed["descr"] == "Photoelectric factor"
@pytest.mark.xfail(reason="not yet implemented")
def test_json_setter_blocked():
item = make_caliper()
with pytest.raises(Exception):
item.json = '{"mnemonic": "FAKE"}'
@pytest.mark.xfail(reason="not yet implemented")
def test_pickle_roundtrip():
original = las_rs.HeaderItem(
mnemonic="ILD",
unit="OHMM",
value=12.7,
descr="Deep resistivity",
)
restored = pickle.loads(pickle.dumps(original))
assert restored.mnemonic == "ILD"
assert restored.unit == "OHMM"
assert restored.value == 12.7
assert restored.descr == "Deep resistivity"
assert restored.original_mnemonic == "ILD"