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.
65 lines
1.9 KiB
Python
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
|