You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
be-optimumoh/tests/unit/test_contribution_util.py

54 lines
1.8 KiB
Python

import pytest
from decimal import Decimal
from src.contribution_util import prod, system_availability, get_all_components, birnbaum_importance
def test_prod():
assert prod([1, 2, 3]) == 6.0
assert prod([0.5, 0.5]) == 0.25
assert prod([]) == 1.0
def test_system_availability_series():
structure = {"series": ["A", "B"]}
availabilities = {"A": 0.9, "B": 0.8}
# 0.9 * 0.8 = 0.72
assert system_availability(structure, availabilities) == pytest.approx(0.72)
def test_system_availability_parallel():
structure = {"parallel": ["A", "B"]}
availabilities = {"A": 0.9, "B": 0.8}
# 1 - (1-0.9)*(1-0.8) = 1 - 0.1*0.2 = 1 - 0.02 = 0.98
assert system_availability(structure, availabilities) == pytest.approx(0.98)
def test_system_availability_nested():
# (A in series with (B in parallel with C))
structure = {
"series": [
"A",
{"parallel": ["B", "C"]}
]
}
availabilities = {"A": 0.9, "B": 0.8, "C": 0.7}
# B||C = 1 - (1-0.8)*(1-0.7) = 1 - 0.2*0.3 = 0.94
# A && (B||C) = 0.9 * 0.94 = 0.846
assert system_availability(structure, availabilities) == pytest.approx(0.846)
def test_get_all_components():
structure = {
"series": [
"A",
{"parallel": ["B", "C"]}
]
}
assert get_all_components(structure) == {"A", "B", "C"}
def test_birnbaum_importance():
structure = {"series": ["A", "B"]}
availabilities = {"A": 0.9, "B": 0.8}
# I_B(A) = A_sys(A=1) - A_sys(A=0)
# A_sys(A=1, B=0.8) = 1 * 0.8 = 0.8
# A_sys(A=0, B=0.8) = 0 * 0.8 = 0
# I_B(A) = 0.8
assert birnbaum_importance(structure, availabilities, "A") == pytest.approx(0.8)
# I_B(B) = A_sys(B=1, A=0.9) - A_sys(B=0, A=0.9) = 0.9 - 0 = 0.9
assert birnbaum_importance(structure, availabilities, "B") == pytest.approx(0.9)