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_reliability_calc.py

65 lines
1.9 KiB
Python

import pytest
import math
from src.calculation_target_reliability.service import calculate_asset_eaf_contributions
def test_calculate_asset_eaf_contributions_basic():
# Mock plant result
plant_result = {
"total_uptime": 7000,
"total_downtime": 1000,
"eaf": 85.0
}
# total_hours = 8000
# Mock equipment results
eq_results = [
{
"aeros_node": {"node_name": "Asset1"},
"num_events": 5,
"contribution_factor": 0.5,
"contribution": 0.1, # Birnbaum
"availability": 0.9,
"total_downtime": 100
},
{
"aeros_node": {"node_name": "Asset2"},
"num_events": 2,
"contribution_factor": 0.3,
"contribution": 0.05,
"availability": 0.95,
"total_downtime": 50
}
]
standard_scope = ["Asset1", "Asset2"]
eaf_gap = 2.0 # 2% gap
scheduled_outage = 500
results = calculate_asset_eaf_contributions(
plant_result, eq_results, standard_scope, eaf_gap, scheduled_outage
)
assert len(results) == 2
# Check sorting (highest birnbaum first)
assert results[0].node["node_name"] == "Asset1"
assert results[0].birbaum > results[1].birbaum
# Check that required_improvement is positive
assert results[0].required_improvement > 0
assert results[0].improvement_impact > 0
def test_calculate_asset_eaf_contributions_skipping():
plant_result = {"total_uptime": 1000, "total_downtime": 0, "eaf": 100}
eq_results = [{
"aeros_node": {"node_name": "Asset1"},
"num_events": 0,
"contribution_factor": 0.5,
"contribution": 0.1,
"availability": 1.0,
"total_downtime": 0
}]
results = calculate_asset_eaf_contributions(
plant_result, eq_results, ["Asset1"], 1.0, 0
)
assert len(results) == 0