|
| 1 | +import pytest |
| 2 | +from windpowerlib import WindFarm, WindTurbine |
| 3 | + |
| 4 | + |
| 5 | +class TestWindFarm: |
| 6 | + |
| 7 | + @classmethod |
| 8 | + def setup_class(self): |
| 9 | + """Setup default values""" |
| 10 | + self.test_turbine = {'hub_height': 100, |
| 11 | + 'turbine_type': 'E-126/4200'} |
| 12 | + self.test_turbine_2 = {'hub_height': 90, |
| 13 | + 'turbine_type': 'V90/2000', |
| 14 | + 'nominal_power': 2e6} |
| 15 | + |
| 16 | + def test_initialization(self): |
| 17 | + """simple initialization""" |
| 18 | + test_farm = {'wind_turbine_fleet': [ |
| 19 | + {'wind_turbine': WindTurbine(**self.test_turbine), |
| 20 | + 'number_of_turbines': 3}, |
| 21 | + {'wind_turbine': WindTurbine(**self.test_turbine_2), |
| 22 | + 'number_of_turbines': 2}]} |
| 23 | + windfarm = WindFarm(**test_farm) |
| 24 | + assert windfarm.nominal_power == 3 * 4.2e6 + 2 * 2e6 |
| 25 | + |
| 26 | + def test_initialization_2(self): |
| 27 | + """WindTurbine in wind_turbine_fleet not initialized""" |
| 28 | + test_farm = {'wind_turbine_fleet': [ |
| 29 | + {'wind_turbine': None, |
| 30 | + 'number_of_turbines': 3}]} |
| 31 | + msg = 'Wind turbine must be provided as WindTurbine object' |
| 32 | + with pytest.raises(ValueError, match=msg): |
| 33 | + WindFarm(**test_farm) |
| 34 | + |
| 35 | + def test_initialization_3(self): |
| 36 | + """wind_turbine not specified in wind_turbine_fleet""" |
| 37 | + test_farm = {'wind_turbine_fleet': [ |
| 38 | + {'wind_turbines': None, |
| 39 | + 'number_of_turbines': 3}]} |
| 40 | + msg = 'Missing wind_turbine key in wind turbine' |
| 41 | + with pytest.raises(ValueError, match=msg): |
| 42 | + WindFarm(**test_farm) |
| 43 | + |
| 44 | + def test_initialization_4(self): |
| 45 | + """deduce number_of_turbines from total_capacity""" |
| 46 | + total_capacity = 3e6 |
| 47 | + test_farm = {'wind_turbine_fleet': [ |
| 48 | + {'wind_turbine': WindTurbine(**self.test_turbine_2), |
| 49 | + 'total_capacity': total_capacity}]} |
| 50 | + windfarm = WindFarm(**test_farm) |
| 51 | + number_of_turbines = total_capacity / \ |
| 52 | + self.test_turbine_2['nominal_power'] |
| 53 | + assert number_of_turbines == windfarm.wind_turbine_fleet[0][ |
| 54 | + 'number_of_turbines'] |
| 55 | + |
| 56 | + def test_initialization_5(self): |
| 57 | + """deducing number_of_turbines from total_capacity fails""" |
| 58 | + wt = WindTurbine(**self.test_turbine) |
| 59 | + wt.nominal_power = None |
| 60 | + test_farm = {'wind_turbine_fleet': [ |
| 61 | + {'wind_turbine': wt, |
| 62 | + 'total_capacity': 3e6}]} |
| 63 | + msg = 'Number of turbines of type' |
| 64 | + with pytest.raises(ValueError, match=msg): |
| 65 | + WindFarm(**test_farm) |
| 66 | + |
| 67 | + def test_initialization_6(self): |
| 68 | + """number_of_turbines and total_capacity not given""" |
| 69 | + test_farm = {'wind_turbine_fleet': [ |
| 70 | + {'wind_turbine': WindTurbine(**self.test_turbine), |
| 71 | + 'number_of_turbine': 3e6}]} |
| 72 | + msg = 'Please provide `number_of_turbines` or `total_capacity`' |
| 73 | + with pytest.raises(ValueError, match=msg): |
| 74 | + WindFarm(**test_farm) |
| 75 | + |
| 76 | + def test_mean_hub_height(self): |
| 77 | + """tests mean_hub_height method""" |
| 78 | + test_farm = {'wind_turbine_fleet': [ |
| 79 | + {'wind_turbine': WindTurbine(**self.test_turbine), |
| 80 | + 'number_of_turbines': 2}, |
| 81 | + {'wind_turbine': WindTurbine(**self.test_turbine_2), |
| 82 | + 'total_capacity': 3e6}]} |
| 83 | + windfarm = WindFarm(**test_farm) |
| 84 | + assert 97.265 == pytest.approx( |
| 85 | + windfarm.mean_hub_height().hub_height, 1e-3) |
| 86 | + |
0 commit comments