File indexing completed on 2026-05-15 07:41:52
0001 import re
0002
0003 import pytest
0004
0005 from optiphy.geant4_version import geant4_series, parse_geant4_version
0006
0007
0008 @pytest.mark.parametrize(
0009 ("version", "expected"),
0010 [
0011 ("11.3.2", "11.3"),
0012 ("11.3.0.beta", "11.3"),
0013 ("11.4.0", "11.4+"),
0014 ("11.4.p01", "11.4+"),
0015 ("11.4.0.beta", "11.4+"),
0016 ("11.5.1", "11.4+"),
0017 ("12.0.0", "11.4+"),
0018 ("12.0.p02", "11.4+"),
0019 ("12.0.0.beta", "11.4+"),
0020 ("12.1.3", "11.4+"),
0021 ("13.0.0", "11.4+"),
0022 ],
0023 )
0024 def test_geant4_series_supported_versions(version, expected):
0025 assert geant4_series(version) == expected
0026
0027
0028 @pytest.mark.parametrize("version", ["9.6.1", "9.6.p03", "10.7.4"])
0029 def test_geant4_series_rejects_older_major_versions(version):
0030 with pytest.raises(RuntimeError, match=re.escape(f"Unsupported Geant4 version {version!r}")):
0031 geant4_series(version)
0032
0033
0034 @pytest.mark.parametrize("version", ["11.2.0", "11.2.0.beta"])
0035 def test_geant4_series_rejects_unsupported_11_minor(version):
0036 with pytest.raises(RuntimeError, match=re.escape(f"Unsupported Geant4 version {version!r}")):
0037 geant4_series(version)
0038
0039
0040 def test_geant4_series_rejects_unparseable_version():
0041 version = "not-a-version"
0042 with pytest.raises(RuntimeError, match=re.escape(f"Unable to parse Geant4 version: {version!r}")):
0043 geant4_series(version)
0044
0045
0046 @pytest.mark.parametrize(
0047 ("version", "expected"),
0048 [
0049 ("11.4", (11, 4, 0)),
0050 ("11.4.0", (11, 4, 0)),
0051 ("11.4.0.beta", (11, 4, 0)),
0052 ("11.4.p01", (11, 4, 1)),
0053 ("11.2.0.beta", (11, 2, 0)),
0054 ("12.0.p02", (12, 0, 2)),
0055 ],
0056 )
0057 def test_parse_geant4_version_accepts_supported_patch_formats(version, expected):
0058 assert parse_geant4_version(version) == expected
0059
0060
0061 @pytest.mark.parametrize("version", ["11.4.p", "11.4-dev", "11.4foo", "11.4.p01foo", "11.4.0.betafoo"])
0062 def test_parse_geant4_version_rejects_trailing_suffixes(version):
0063 with pytest.raises(RuntimeError, match=re.escape(f"Unable to parse Geant4 version: {version!r}")):
0064 parse_geant4_version(version)