|
@@ -0,0 +1,223 @@
|
|
|
+"""
|
|
|
+TEST: r.patch
|
|
|
+
|
|
|
+AUTHOR(S): Vaclav Petras
|
|
|
+
|
|
|
+PURPOSE: Test r.patch using artificial and small data
|
|
|
+
|
|
|
+COPYRIGHT: (C) 2015 Vaclav Petras, and by the GRASS Development Team
|
|
|
+
|
|
|
+ This program is free software under the GNU General Public
|
|
|
+ License (>=v2). Read the file COPYING that comes with GRASS
|
|
|
+ for details.
|
|
|
+"""
|
|
|
+
|
|
|
+from grass.gunittest.case import TestCase
|
|
|
+from grass.gunittest.main import test
|
|
|
+
|
|
|
+cell_1 = """\
|
|
|
+north: 20
|
|
|
+south: 10
|
|
|
+east: 25
|
|
|
+west: 15
|
|
|
+rows: 4
|
|
|
+cols: 4
|
|
|
+505 501 500 520
|
|
|
+506 501 550 520
|
|
|
+504 401 400 520
|
|
|
+502 520 540 520
|
|
|
+"""
|
|
|
+
|
|
|
+cell_2 = """\
|
|
|
+north: 30
|
|
|
+south: 20
|
|
|
+east: 25
|
|
|
+west: 15
|
|
|
+rows: 4
|
|
|
+cols: 4
|
|
|
+505 505 500 520
|
|
|
+406 409 550 520
|
|
|
+304 405 400 560
|
|
|
+302 520 540 520
|
|
|
+"""
|
|
|
+
|
|
|
+cell_patched_ref = """\
|
|
|
+north: 30
|
|
|
+south: 10
|
|
|
+east: 25
|
|
|
+west: 15
|
|
|
+rows: 8
|
|
|
+cols: 4
|
|
|
+505 505 500 520
|
|
|
+406 409 550 520
|
|
|
+304 405 400 560
|
|
|
+302 520 540 520
|
|
|
+505 501 500 520
|
|
|
+506 501 550 520
|
|
|
+504 401 400 520
|
|
|
+502 520 540 520
|
|
|
+"""
|
|
|
+
|
|
|
+# the following comes from the manual
|
|
|
+
|
|
|
+cell_overlap_a = """\
|
|
|
+north: 35
|
|
|
+south: 20
|
|
|
+east: 25
|
|
|
+west: 15
|
|
|
+rows: 6
|
|
|
+cols: 8
|
|
|
+1 1 1 0 2 2 0 0
|
|
|
+1 1 0 2 2 2 0 0
|
|
|
+3 3 3 3 2 2 0 0
|
|
|
+3 3 3 3 0 0 0 0
|
|
|
+3 3 3 0 0 0 0 0
|
|
|
+0 0 0 0 0 0 0 0
|
|
|
+"""
|
|
|
+
|
|
|
+cell_overlap_b = """\
|
|
|
+north: 35
|
|
|
+south: 20
|
|
|
+east: 25
|
|
|
+west: 15
|
|
|
+rows: 6
|
|
|
+cols: 8
|
|
|
+0 0 1 1 0 0 0 0
|
|
|
+0 0 1 1 0 0 0 0
|
|
|
+0 0 0 0 0 0 0 0
|
|
|
+4 4 4 4 4 4 4 4
|
|
|
+4 4 4 4 4 4 4 4
|
|
|
+4 4 4 4 4 4 4 4
|
|
|
+"""
|
|
|
+
|
|
|
+cell_overlap_ab = """\
|
|
|
+north: 35
|
|
|
+south: 20
|
|
|
+east: 25
|
|
|
+west: 15
|
|
|
+rows: 6
|
|
|
+cols: 8
|
|
|
+1 1 1 1 2 2 0 0
|
|
|
+1 1 1 2 2 2 0 0
|
|
|
+3 3 3 3 2 2 0 0
|
|
|
+3 3 3 3 4 4 4 4
|
|
|
+3 3 3 4 4 4 4 4
|
|
|
+4 4 4 4 4 4 4 4
|
|
|
+"""
|
|
|
+
|
|
|
+cell_overlap_ba = """\
|
|
|
+north: 35
|
|
|
+south: 20
|
|
|
+east: 25
|
|
|
+west: 15
|
|
|
+rows: 6
|
|
|
+cols: 8
|
|
|
+1 1 1 1 2 2 0 0
|
|
|
+1 1 1 1 2 2 0 0
|
|
|
+3 3 3 3 2 2 0 0
|
|
|
+4 4 4 4 4 4 4 4
|
|
|
+4 4 4 4 4 4 4 4
|
|
|
+4 4 4 4 4 4 4 4
|
|
|
+"""
|
|
|
+
|
|
|
+
|
|
|
+class TestSmallDataNoOverlap(TestCase):
|
|
|
+
|
|
|
+ # TODO: replace by unified handing of maps
|
|
|
+ to_remove = []
|
|
|
+ cell_1 = 'rpatch_small_test_cell_1'
|
|
|
+ cell_2 = 'rpatch_small_test_cell_2'
|
|
|
+ cell_patched = 'rpatch_small_test_cell_patched'
|
|
|
+ cell_patched_ref = 'rpatch_small_test_cell_patched_ref'
|
|
|
+
|
|
|
+ @classmethod
|
|
|
+ def setUpClass(cls):
|
|
|
+ cls.use_temp_region()
|
|
|
+ # 10 / 4 == 2.5 (size of raster / number of cells)
|
|
|
+ cls.runModule('g.region', n=30, s=10, e=25, w=15, res=2.5)
|
|
|
+
|
|
|
+ @classmethod
|
|
|
+ def tearDownClass(cls):
|
|
|
+ cls.del_temp_region()
|
|
|
+ if cls.to_remove:
|
|
|
+ cls.runModule('g.remove', flags='f', type='raster',
|
|
|
+ name=','.join(cls.to_remove), verbose=True)
|
|
|
+
|
|
|
+ def test_patching_cell(self):
|
|
|
+ """Test patching two neighboring CELL raster maps"""
|
|
|
+ self.runModule('r.in.ascii', input='-', stdin=cell_1,
|
|
|
+ output=self.cell_1)
|
|
|
+ self.to_remove.append(self.cell_1)
|
|
|
+ self.runModule('r.in.ascii', input='-', stdin=cell_2,
|
|
|
+ output=self.cell_2)
|
|
|
+ self.to_remove.append(self.cell_2)
|
|
|
+
|
|
|
+ self.assertModule('r.patch', input=(self.cell_1, self.cell_2),
|
|
|
+ output=self.cell_patched)
|
|
|
+ self.to_remove.append(self.cell_patched)
|
|
|
+ self.runModule('r.in.ascii', input='-', stdin=cell_patched_ref,
|
|
|
+ output=self.cell_patched_ref)
|
|
|
+ self.to_remove.append(self.cell_patched_ref)
|
|
|
+ self.assertRastersNoDifference(self.cell_patched,
|
|
|
+ self.cell_patched_ref, precision=0)
|
|
|
+
|
|
|
+
|
|
|
+class TestSmallDataOverlap(TestCase):
|
|
|
+
|
|
|
+ # TODO: replace by unified handing of maps
|
|
|
+ to_remove = []
|
|
|
+ cell_a = 'rpatch_small_test_cell_a'
|
|
|
+ cell_b = 'rpatch_small_test_cell_b'
|
|
|
+ cell_ab = 'rpatch_small_test_cell_ab_reference'
|
|
|
+ cell_ba = 'rpatch_small_test_cell_ba_reference'
|
|
|
+ cell_ab_result = 'rpatch_small_test_cell_ab_result'
|
|
|
+ cell_ba_result = 'rpatch_small_test_cell_ba_result'
|
|
|
+
|
|
|
+ @classmethod
|
|
|
+ def setUpClass(cls):
|
|
|
+ cls.use_temp_region()
|
|
|
+ # 15 / 6 == 2.5 ((n-s) / number of cells)
|
|
|
+ # 10 / 8 == 1.25 ((e-w) / number of cells)
|
|
|
+ cls.runModule('g.region', n=35, s=20, e=25, w=15,
|
|
|
+ nsres=2.5, ewres=1.25)
|
|
|
+ cls.runModule('r.in.ascii', input='-', stdin=cell_overlap_a,
|
|
|
+ output=cls.cell_a)
|
|
|
+ cls.to_remove.append(cls.cell_a)
|
|
|
+ cls.runModule('r.in.ascii', input='-', stdin=cell_overlap_b,
|
|
|
+ output=cls.cell_b)
|
|
|
+ cls.to_remove.append(cls.cell_b)
|
|
|
+ cls.runModule('r.in.ascii', input='-', stdin=cell_overlap_ab,
|
|
|
+ output=cls.cell_ab)
|
|
|
+ cls.to_remove.append(cls.cell_ab)
|
|
|
+ cls.runModule('r.in.ascii', input='-', stdin=cell_overlap_ba,
|
|
|
+ output=cls.cell_ba)
|
|
|
+ cls.to_remove.append(cls.cell_ba)
|
|
|
+
|
|
|
+ @classmethod
|
|
|
+ def tearDownClass(cls):
|
|
|
+ cls.del_temp_region()
|
|
|
+ if cls.to_remove:
|
|
|
+ cls.runModule('g.remove', flags='f', type='raster',
|
|
|
+ name=','.join(cls.to_remove), verbose=True)
|
|
|
+
|
|
|
+ def test_patch_oder_ab_cell(self):
|
|
|
+ """Test patching two overlapping CELL raster maps (watching order)"""
|
|
|
+ self.assertModule('r.patch', input=(self.cell_a, self.cell_b),
|
|
|
+ output=self.cell_ab_result, flags='z')
|
|
|
+ self.assertRasterExists(self.cell_ab_result)
|
|
|
+ self.to_remove.append(self.cell_ab_result)
|
|
|
+ self.assertRastersNoDifference(self.cell_ab_result,
|
|
|
+ self.cell_ab, precision=0)
|
|
|
+
|
|
|
+ def test_patch_oder_ba_cell(self):
|
|
|
+ """Test patching two overlapping CELL raster maps (watching order)"""
|
|
|
+ self.assertModule('r.patch', input=(self.cell_b, self.cell_a),
|
|
|
+ output=self.cell_ba_result, flags='z')
|
|
|
+ self.assertRasterExists(self.cell_ba_result)
|
|
|
+ self.to_remove.append(self.cell_ba_result)
|
|
|
+ self.assertRastersNoDifference(self.cell_ba_result,
|
|
|
+ self.cell_ba, precision=0)
|
|
|
+
|
|
|
+
|
|
|
+if __name__ == '__main__':
|
|
|
+ test()
|