def test_output_is_float32(self): """Test that the plugin returns an array of float 32 type even when the input arrays are double precision.""" result = FrictionVelocity(self.u_href, self.h_ref, self.z_0, self.mask).process() self.assertEqual(result.dtype, np.float32)
def test_returns_expected_values(self): """Test that the function returns correct 2D array of floats. """ # Equation is (K=0.4): ustar = K * (u_href / ln(h_ref / z_0)) expected_out = np.array([[RMDI, RMDI, RMDI, RMDI], [RMDI, 1.08434, 1.08434, RMDI], [RMDI, 1.08434, 1.08434, RMDI], [RMDI, RMDI, RMDI, RMDI]]) result = FrictionVelocity(self.u_href, self.h_ref, self.z_0, self.mask).process() self.assertIsInstance(result, np.ndarray) self.assertArrayAlmostEqual(result, expected_out)
def test_handles_nan_values(self): """Test that the function accepts NaN values correctly. """ self.u_href[1, 1] = np.nan # Adds NaN value expected_out = np.array([[RMDI, RMDI, RMDI, RMDI], [RMDI, np.nan, 1.08434, RMDI], [RMDI, 1.08434, 1.08434, RMDI], [RMDI, RMDI, RMDI, RMDI]]) result = FrictionVelocity(self.u_href, self.h_ref, self.z_0, self.mask).process() self.assertIsInstance(result, np.ndarray) self.assertArrayAlmostEqual(result, expected_out)
def test_handles_zero_values(self): """Function calculates log(href/z_0) - test that the function accepts zero values in h_ref and z_0 and returns np.nan without crashing.""" h_ref_zeros = np.full_like(self.h_ref, 0) z_0_zeros = np.full_like(self.z_0, 0) expected_out = np.array([[RMDI, RMDI, RMDI, RMDI], [RMDI, np.nan, np.nan, RMDI], [RMDI, np.nan, np.nan, RMDI], [RMDI, RMDI, RMDI, RMDI]]) result = FrictionVelocity(self.u_href, h_ref_zeros, z_0_zeros, self.mask).process() self.assertIsInstance(result, np.ndarray) self.assertArrayAlmostEqual(result, expected_out)
def test_handles_different_sized_arrays(self): """Test when if different size arrays have been input""" u_href = np.full([3, 3], 10, dtype=float) msg = 'Different size input arrays u_href, h_ref, z_0, mask' with self.assertRaisesRegexp(ValueError, msg): FrictionVelocity(u_href, self.h_ref, self.z_0, self.mask).process()