Added more unit tests for normalize_lat_lon_values() helper
Project: http://git-wip-us.apache.org/repos/asf/climate/repo Commit: http://git-wip-us.apache.org/repos/asf/climate/commit/9de222e1 Tree: http://git-wip-us.apache.org/repos/asf/climate/tree/9de222e1 Diff: http://git-wip-us.apache.org/repos/asf/climate/diff/9de222e1 Branch: refs/heads/master Commit: 9de222e18bdfc0679f4ddec9edee5ea1c2059fff Parents: a663e15 Author: bassdx <[email protected]> Authored: Sat Apr 5 02:32:14 2014 -0600 Committer: bassdx <[email protected]> Committed: Sat Apr 5 02:32:14 2014 -0600 ---------------------------------------------------------------------- ocw/tests/test_dataset.py | 12 ++++++--- ocw/tests/test_utils.py | 55 ++++++++++++++++++++++++++++++++++++++---- 2 files changed, 58 insertions(+), 9 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/climate/blob/9de222e1/ocw/tests/test_dataset.py ---------------------------------------------------------------------- diff --git a/ocw/tests/test_dataset.py b/ocw/tests/test_dataset.py index 4dd57f6..1694b20 100644 --- a/ocw/tests/test_dataset.py +++ b/ocw/tests/test_dataset.py @@ -90,13 +90,17 @@ class TestInvalidDatasetInit(unittest.TestCase): def test_lons_values_incorrectly_gridded(self): times = np.array([dt.datetime(2000, x, 1) for x in range(1, 13)]) - lats = np.array(range(-30, 30)) - bad_lons = np.array(range(360)) - flat_array = np.array(range(len(times) * len(lats) * len(bad_lons))) + lats = np.arange(-30, 30) + bad_lons = np.arange(360) + flat_array = np.arange(len(times) * len(lats) * len(bad_lons)) values = flat_array.reshape(len(times), len(lats), len(bad_lons)) ds = Dataset(lats, bad_lons, times, values) - self.assertTrue(np.array_equal(ds.lons, range(-180, 180))) + self.assertTrue(np.array_equal(ds.lons, np.arange(-180, 180))) + + def test_reversed_lats(self): + ds = Dataset(self.lat[::-1], self.lon, self.time, self.value) + self.assertTrue(np.array_equal(ds.lats, self.lat)) class TestDatasetFunctions(unittest.TestCase): def setUp(self): http://git-wip-us.apache.org/repos/asf/climate/blob/9de222e1/ocw/tests/test_utils.py ---------------------------------------------------------------------- diff --git a/ocw/tests/test_utils.py b/ocw/tests/test_utils.py index 4ca63c0..98387e6 100644 --- a/ocw/tests/test_utils.py +++ b/ocw/tests/test_utils.py @@ -87,16 +87,61 @@ class TestBaseTimeStringParse(unittest.TestCase): class TestNormalizeLatLonValues(unittest.TestCase): def setUp(self): times = np.array([datetime.datetime(2000, x, 1) for x in range(1, 13)]) - self.lats = np.array(range(-30, 30)) - self.lons = np.array(range(360)) - flat_array = np.array(range(len(times) * len(self.lats) * len(self.lons))) + self.lats = np.arange(-30, 30) + self.lons = np.arange(360) + flat_array = np.arange(len(times) * len(self.lats) * len(self.lons)) self.values = flat_array.reshape(len(times), len(self.lats), len(self.lons)) + self.lats2 = np.array([-30, 0, 30]) + self.lons2 = np.array([0, 100, 200, 300]) + self.values2 = np.arange(12).reshape(3, 4) + self.lats_unsorted = np.array([-30, 20, -50]) + self.lons_unsorted = np.array([-30, 20, -50, 40]) def test_full_lons_shift(self): lats, lons, values = utils.normalize_lat_lon_values(self.lats, self.lons, self.values) - self.assertTrue(np.array_equal(lons, range(-180, 180))) - + self.assertTrue(np.array_equal(lons, np.arange(-180, 180))) + + def test_lats_reversed(self): + lons2 = np.arange(-180, 180) + lats, lons, values = utils.normalize_lat_lon_values(self.lats[::-1], + lons2, + self.values[:, ::-1, :]) + self.assertTrue(np.array_equal(lats, self.lats)) + self.assertTrue(np.array_equal(values, self.values)) + + def test_lons_shift_values(self): + expected_vals = np.array([[2, 3, 0, 1], + [6, 7, 4, 5], + [10, 11, 8, 9]]) + lats, lons, values = utils.normalize_lat_lon_values(self.lats2, + self.lons2, + self.values2) + self.assertTrue(np.array_equal(values, expected_vals)) + + def test_shift_and_reversed(self): + expected_vals = np.array([[10, 11, 8, 9], + [6, 7, 4, 5], + [2, 3, 0, 1]]) + lats, lons, values = utils.normalize_lat_lon_values(self.lats2[::-1], + self.lons2, + self.values2) + self.assertTrue(np.array_equal(values, expected_vals)) + + def test_lats_not_sorted(self): + self.assertRaises(ValueError, + utils.normalize_lat_lon_values, + self.lats_unsorted, + self.lons2, + self.values2) + + def test_lons_not_sorted(self): + self.assertRaises(ValueError, + utils.normalize_lat_lon_values, + self.lats2, + self.lons_unsorted, + self.values2) + if __name__ == '__main__': unittest.main()
