import unittest


class MeanWindVectorTests(unittest.TestCase):

    def _fut(self, winddir, windspd=None):
        from aosstower.wind import mean_wind_vector
        windspd = windspd or [1]*len(winddir)
        return mean_wind_vector(windspd, winddir)[0]

    def test_spanning_0_degrees(self):
        winddir = self._fut([315, 45])
        self.assertAlmostEqual(winddir, 0)

    def test_spanning_cardinal_directions(self):
        self.assertAlmostEqual(self._fut([45, 135]), 90)
        self.assertAlmostEqual(self._fut([135, 225]), 180)
        self.assertAlmostEqual(self._fut([225, 315]), 270)
        self.assertAlmostEqual(self._fut([315, 45]), 0)

    def test_all_zeros(self):
        self.assertAlmostEqual(self._fut([0, 0]), 0)

    def test_zero_windspd(self):
        self.assertAlmostEqual(self._fut([0, 0], windspd=[0, 0]), 0)

    def test_45s(self):
        self.assertAlmostEqual(self._fut([0, 90]), 45)
        self.assertAlmostEqual(self._fut([90, 180]), 135)
        self.assertAlmostEqual(self._fut([180, 270]), 225)
        self.assertAlmostEqual(self._fut([270, 0]), 315)