123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173 |
- #!/usr/bin/env python3
- ############################################################################
- #
- # MODULE: test_integer_rounding
- # AUTHOR: Vaclav Petras
- # PURPOSE: Fast test of rounding integers based on a small example
- # COPYRIGHT: (C) 2016 by Vaclav Petras and 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
- from grass.script import list_strings
- # generated by
- # g.region n=12 s=9 e=21 w=18 t=8 b=4 res=1 res3=1 -p3
- # r3.mapcalc "x = rand(0,5.)" seed=100 && r3.out.ascii x prec=2
- INPUT = """\
- version: grass7
- order: nsbt
- north: 12.000000
- south: 9.000000
- east: 21.000000
- west: 18.000000
- top: 8.000000
- bottom: 4.000000
- rows: 3
- cols: 3
- levels: 4
- 1.26 1.04 4.70
- 2.11 1.98 1.91
- 1.16 2.68 2.67
- 4.31 4.81 1.58
- 3.68 3.27 0.25
- 2.27 4.03 3.28
- 4.06 4.15 0.40
- 1.02 3.40 3.26
- 4.88 0.43 1.02
- 1.16 0.07 0.78
- 0.07 3.52 0.45
- 2.86 4.79 1.43
- """
- # created from the above and template from
- # r.mapcalc "x = rand(0,10)" seed=100 && r.out.ascii x prec=0
- OUTPUTS = [
- """\
- north: 12
- south: 9
- east: 21
- west: 18
- rows: 3
- cols: 3
- 1 1 5
- 2 2 2
- 1 3 3
- """,
- """\
- north: 12
- south: 9
- east: 21
- west: 18
- rows: 3
- cols: 3
- 4 5 2
- 4 3 0
- 2 4 3
- """,
- """\
- north: 12
- south: 9
- east: 21
- west: 18
- rows: 3
- cols: 3
- 4 4 0
- 1 3 3
- 5 0 1
- """,
- """\
- north: 12
- south: 9
- east: 21
- west: 18
- rows: 3
- cols: 3
- 1 0 1
- 0 4 0
- 3 5 1
- """,
- ]
- class TestR3ToRastIntegerRounding(TestCase):
- # TODO: replace by unified handing of maps
- # mixing class and object attributes
- to_remove_3d = []
- to_remove_2d = []
- rast3d = "r3_to_rast_test_int_round"
- rast2d = "r3_to_rast_test_int_round"
- rast2d_ref = "r3_to_rast_test_int_round_ref"
- rast2d_refs = []
- def setUp(self):
- self.use_temp_region()
- self.runModule("r3.in.ascii", input="-", stdin_=INPUT, output=self.rast3d)
- self.to_remove_3d.append(self.rast3d)
- self.runModule("g.region", raster_3d=self.rast3d)
- for i, data in enumerate(OUTPUTS):
- rast = "%s_%d" % (self.rast2d_ref, i)
- self.runModule(
- "r.in.ascii", input="-", stdin_=data, output=rast, type="CELL"
- )
- self.to_remove_2d.append(rast)
- self.rast2d_refs.append(rast)
- def tearDown(self):
- if self.to_remove_3d:
- self.runModule(
- "g.remove",
- flags="f",
- type="raster_3d",
- name=",".join(self.to_remove_3d),
- verbose=True,
- )
- if self.to_remove_2d:
- self.runModule(
- "g.remove",
- flags="f",
- type="raster",
- name=",".join(self.to_remove_2d),
- verbose=True,
- )
- self.del_temp_region()
- def test_rounding(self):
- self.assertModule(
- "r3.to.rast", input=self.rast3d, output=self.rast2d, type="CELL", add=0.5
- )
- rasts = list_strings(
- "raster",
- mapset=".",
- pattern="%s_*" % self.rast2d,
- exclude="%s_*" % self.rast2d_ref,
- )
- self.assertEquals(
- len(rasts), 4, msg="Wrong number of 2D rasters present" " in the mapset"
- )
- ref_info = dict(cells=9)
- ref_univar = dict(cells=9, null_cells=0)
- for rast in rasts:
- self.assertRasterExists(rast)
- # the following doesn't make much sense because we just listed them
- self.to_remove_2d.append(rast)
- self.assertRasterFitsInfo(raster=rast, reference=ref_info, precision=0)
- self.assertRasterFitsUnivar(raster=rast, reference=ref_univar, precision=0)
- # check the actual values
- for rast_ref, rast in zip(self.rast2d_refs, rasts):
- self.assertRastersNoDifference(
- actual=rast, reference=rast_ref, precision=0.1
- )
- if __name__ == "__main__":
- test()
|