test_rrecode_ncspm.py 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. # -*- coding: utf-8 -*-
  2. from grass.gunittest.case import TestCase
  3. from grass.gunittest.main import test
  4. from grass.gunittest.gmodules import SimpleModule
  5. from grass.script.core import read_command
  6. rules1 = """
  7. 55:65:1
  8. 65:75:2
  9. 75:85:3
  10. 85:95:4
  11. 95:105:5
  12. 105:115:6
  13. 115:125:7
  14. 125:135:8
  15. 135:145:9
  16. 145:155:10
  17. 155:165:11
  18. """
  19. rules2 = """
  20. 55.6:156:-0.5:0.5
  21. """
  22. rules3 = """
  23. 0:1:0:255
  24. """
  25. rules4 = """
  26. 0:5:1
  27. 6:10:2
  28. 11:*:3
  29. """
  30. class TestNCMaps(TestCase):
  31. @classmethod
  32. def setUpClass(cls):
  33. cls.use_temp_region()
  34. cls.runModule('g.region', raster='elevation@PERMANENT')
  35. cls.runModule('r.mapcalc', expression="random01 = rand(0, 1.)", seed=1, overwrite=True)
  36. @classmethod
  37. def tearDownClass(cls):
  38. cls.del_temp_region()
  39. cls.runModule('g.remove', type='raster', name=['random01', 'recoded'], flags='f')
  40. def test_formats_elevation(self):
  41. recode = SimpleModule('r.recode', input='elevation@PERMANENT', output='recoded',
  42. rules='-', overwrite=True)
  43. recode.inputs.stdin = rules1
  44. self.assertModule(recode)
  45. info = 'min=1\nmax=11\ndatatype=CELL'
  46. self.assertRasterFitsInfo(raster='recoded', reference=info)
  47. recode.flags['d'].value = True
  48. self.assertModule(recode)
  49. info = 'min=1\nmax=11\ndatatype=DCELL'
  50. self.assertRasterFitsInfo(raster='recoded', reference=info)
  51. recode.flags['d'].value = False
  52. recode.inputs.stdin = rules2
  53. self.assertModule(recode)
  54. info = 'min=-0.5\nmax=0.5\ndatatype=FCELL'
  55. self.assertRasterFitsInfo(raster='recoded', reference=info, precision=1e-3)
  56. recode.flags['d'].value = True
  57. self.assertModule(recode)
  58. info = 'min=-0.5\nmax=0.5\ndatatype=DCELL'
  59. self.assertRasterFitsInfo(raster='recoded', reference=info, precision=1e-3)
  60. recode.flags['d'].value = False
  61. def test_formats_random(self):
  62. recode = SimpleModule('r.recode', input='random01', output='recoded',
  63. rules='-', overwrite=True)
  64. recode.inputs.stdin = rules3
  65. self.assertModule(recode)
  66. category = read_command('r.category', map='recoded')
  67. n_cats = len(category.strip().split('\n'))
  68. if n_cats <= 2:
  69. self.fail(msg="Number of categories is <= 2 "
  70. "which suggests input map values were read as integers.")
  71. def test_formats_landcover(self):
  72. recode = SimpleModule('r.recode', input='landuse@PERMANENT',
  73. output='recoded', rules='-', overwrite=True)
  74. recode.inputs.stdin = rules4
  75. self.assertModule(recode)
  76. info = 'min=1\nmax=3\ndatatype=CELL'
  77. self.assertRasterFitsInfo(raster='recoded', reference=info)
  78. if __name__ == '__main__':
  79. test()