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.
54 lines
1.8 KiB
Python
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)
|