Files
old-krovovi-kalkulator/test/calculators/summary_values_test.py
2017-12-19 15:18:35 +01:00

130 lines
5.8 KiB
Python

import unittest
from unittest.mock import MagicMock
from nose.tools import eq_
from numpy import array
from numpy.testing import assert_almost_equal
from helix.calculators.ballast_calculator import BallastCalculator
from helix.calculators.summary_values_calculator import SummaryValuesCalculator
from helix.constants.anchor_type import AnchorType
from helix.constants.module_type_constants.dual_tilt_96_cell_constants import DualTilt96CellConstants
from helix.constants.panel_type import PanelType
from helix.constants.system_type import SystemType
from helix.models.panel import Panel
from helix.models.subarray import Subarray
class SummaryValuesTest(unittest.TestCase):
def setUp(self):
self.user_values = MagicMock()
self.user_values.anchor_type.return_value = AnchorType.OMG_PowerGrip
self.user_values.max_system_pressure.return_value = 100
self.user_values.module_system_constants.return_value = DualTilt96CellConstants()
self.user_values.system_type.return_value = SystemType.dualTilt
self.c_p_matrix = array([[0.784136, 0.697451, 0.684466, 0.546005],
[0.594876, 0.524444, 0.513894, 0.401395],
[0.368824, 0.324879, 0.318296, 0.248104],
[0.206095, 0.182617, 0.179101, 0.141601],
[0.060000, 0.050000, 0.052000, 0.039000]])
self.q_z = 37.72825742
self.subject = SummaryValuesCalculator(self.user_values)
self.ballast_calculator = BallastCalculator(self.user_values)
def test_summary_values(self):
panels = [
Panel(id=1, ballast=1, wind_anchors=2, pressure=12.89, wind_zone=0, panel_type=PanelType.Corner),
Panel(id=2, ballast=5, wind_anchors=0, pressure=11.22, wind_zone=1, panel_type=PanelType.NorthSouth),
Panel(id=3, ballast=0, wind_anchors=4, pressure=2.02, wind_zone=2, panel_type=PanelType.EastWest),
Panel(id=4, ballast=2, wind_anchors=1, pressure=3.36, wind_zone=3, panel_type=PanelType.Middle),
Panel(id=5, ballast=0, wind_anchors=0, pressure=20.83, wind_zone=4, panel_type=PanelType.Corner),
]
subarrays = [
Subarray(subarray_number=0, start_row=0, size=5, required_seismic_anchors=0)
]
seismic_interval = 10
result = self.subject.summary_values(panels, subarrays, self.c_p_matrix, self.q_z, seismic_interval, self.ballast_calculator)
expected = [
{'label': 'Total System Weight (lbs)', 'value': 1943},
{'label': 'Max PSF', 'value': 20.83},
{'label': 'Avg PSF', 'value': 10.06},
{'label': 'Total Anchors', 'value': 7},
{'label': 'Total Ballast', 'value': 8},
{'label': 'Max Possible System Weight', 'value': 1563.0},
{'label': 'Max System Weight Ballast Block', 'value': 16},
{'label': 'Seismic Anchor Max. Spacing', 'value': seismic_interval}
]
eq_(result, expected)
def test_documentation_summary_values(self):
panels = [
Panel(id=1, ballast=1, wind_anchors=2, pressure=12.89, wind_zone=0, panel_type=PanelType.Corner),
Panel(id=2, ballast=5, wind_anchors=0, pressure=11.22, wind_zone=1, panel_type=PanelType.NorthSouth),
Panel(id=3, ballast=0, wind_anchors=4, pressure=2.02, wind_zone=2, panel_type=PanelType.EastWest),
Panel(id=4, ballast=2, wind_anchors=1, pressure=3.36, wind_zone=3, panel_type=PanelType.Middle),
Panel(id=5, ballast=0, wind_anchors=0, pressure=20.83, wind_zone=4, panel_type=PanelType.Corner),
]
subarrays = [
Subarray(subarray_number=0, start_row=0, size=5, required_seismic_anchors=0)
]
seismic_interval = 10
result = self.subject.documentation_summary_values(panels, subarrays, self.c_p_matrix, self.q_z, seismic_interval, self.ballast_calculator)
expected = {
'total_system_weight': 1943,
'max_psf': 20.83,
'ave_psf': 10.06,
'total_anchors': 7,
'total_ballast': 8,
'max_possible_system_weight': 1563.0,
'max_system_weight_ballast_block': 16,
'seismic_anchor_max_spacing': 10
}
eq_(result, expected)
def test_system_weight_and_pressure(self):
panels = [
Panel(id=1, pressure=12.89),
Panel(id=2, pressure=11.22),
Panel(id=3, pressure=2.02),
Panel(id=4, pressure=3.36),
Panel(id=5, pressure=20.83),
]
assert_almost_equal(self.subject.system_weight_and_pressure(panels), (1943.1261538, 10.064), decimal=6)
def test_find_max_system_weight(self):
panels = [
Panel(id=1, wind_zone=0, panel_type=PanelType.Corner),
Panel(id=2, wind_zone=1, panel_type=PanelType.NorthSouth),
Panel(id=3, wind_zone=2, panel_type=PanelType.EastWest),
Panel(id=4, wind_zone=3, panel_type=PanelType.Middle),
Panel(id=5, wind_zone=4, panel_type=PanelType.Corner),
]
result = self.subject.find_max_system_weight(panels, self.c_p_matrix, self.q_z, self.ballast_calculator)
assert_almost_equal(result, (1563, 16), decimal=0)
def test_find_max_system_weight_does_not_modify_panels_list(self):
panels = [
Panel(id=1, wind_zone=0, panel_type=PanelType.Corner),
Panel(id=2, wind_zone=1, panel_type=PanelType.NorthSouth),
Panel(id=3, wind_zone=2, panel_type=PanelType.EastWest),
Panel(id=4, wind_zone=3, panel_type=PanelType.Middle),
Panel(id=5, wind_zone=4, panel_type=PanelType.Corner),
]
original_panels = list(panels)
self.subject.find_max_system_weight(panels, self.c_p_matrix, self.q_z, self.ballast_calculator)
eq_(panels, original_panels)