test_assertions_rast3d.py 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. # -*- coding: utf-8 -*-
  2. """
  3. Tests assertion methods for 3D rasters.
  4. """
  5. from grass.exceptions import CalledModuleError
  6. from grass.gunittest.case import TestCase
  7. from grass.gunittest.main import test
  8. class TestRaster3dMapAssertions(TestCase):
  9. # pylint: disable=R0904
  10. constant_map = 'raster3d_assertions_constant'
  11. rcd_increasing_map = 'raster3d_assertions_rcd_increasing'
  12. @classmethod
  13. def setUpClass(cls):
  14. cls.use_temp_region()
  15. # TODO: here we should actually not call self.runModule but call_module
  16. cls.runModule('g.region', n=200, s=100, e=400, w=200,
  17. t=500, b=450, res3=1)
  18. cls.runModule('r3.mapcalc', expression='%s = 155' % cls.constant_map)
  19. cls.runModule('r3.mapcalc',
  20. expression='%s = row() + col() + depth()' % cls.rcd_increasing_map)
  21. @classmethod
  22. def tearDownClass(cls):
  23. cls.del_temp_region()
  24. # TODO: input as list does not work, why?
  25. cls.runModule('g.remove', flags='f', type='raster_3d',
  26. name=','.join([cls.constant_map, cls.rcd_increasing_map]))
  27. def test_assertRaster3dFitsUnivar(self):
  28. reference = dict(n=1000000,
  29. null_cells=0,
  30. cells=1000000,
  31. min=155,
  32. max=155,
  33. range=0,
  34. mean=155,
  35. mean_of_abs=155,
  36. stddev=0,
  37. variance=0,
  38. coeff_var=0,
  39. sum=155000000)
  40. self.assertRaster3dFitsUnivar(self.constant_map, reference=reference,
  41. precision=0.000001)
  42. self.assertRaises(self.failureException,
  43. self.assertRaster3dFitsUnivar,
  44. self.rcd_increasing_map,
  45. reference=reference, precision=1)
  46. self.assertRaises(ValueError,
  47. self.assertRaster3dFitsUnivar,
  48. self.constant_map, reference=dict(a=4, b=5, c=6))
  49. self.assertRaises(CalledModuleError,
  50. self.assertRaster3dFitsUnivar,
  51. 'does_not_exists', reference=dict(a=4, b=5, c=6))
  52. def test_assertRaster3dFitsInfo(self):
  53. reference = dict(north=200,
  54. south=100,
  55. east=400,
  56. west=200,
  57. bottom=450,
  58. top=500,
  59. nsres=1,
  60. ewres=1,
  61. tbres=1,
  62. rows=100,
  63. cols=200,
  64. depths=50)
  65. self.assertRaster3dFitsInfo(self.constant_map, reference=reference)
  66. reference['north'] = 500
  67. self.assertRaises(self.failureException,
  68. self.assertRaster3dFitsInfo,
  69. self.constant_map, reference=reference)
  70. self.assertRaises(ValueError,
  71. self.assertRaster3dFitsInfo,
  72. self.constant_map, reference=dict(a=5))
  73. def test_common_values_info_univar(self):
  74. minmax = dict(min=3, max=350)
  75. self.assertRaster3dFitsUnivar(self.rcd_increasing_map,
  76. minmax, precision=0.01)
  77. self.assertRaster3dFitsInfo(self.rcd_increasing_map,
  78. minmax, precision=0.01)
  79. def test_string_as_parameter(self):
  80. self.assertRaster3dFitsInfo(self.constant_map,
  81. reference="max=155", precision=1)
  82. self.assertRaster3dFitsUnivar(self.rcd_increasing_map,
  83. reference="n=1000000", precision=0)
  84. def test_assertRasters3dNoDifference(self):
  85. """Test basic usage of assertRastersNoDifference"""
  86. # precision might need to be increased
  87. self.assertRasters3dNoDifference(actual=self.rcd_increasing_map,
  88. reference=self.rcd_increasing_map,
  89. precision=0,
  90. msg="The same maps should have no difference")
  91. self.assertRaises(self.failureException,
  92. self.assertRasters3dNoDifference,
  93. actual=self.constant_map,
  94. reference=self.rcd_increasing_map,
  95. precision=1,
  96. msg="Different maps should have difference")
  97. def test_assertRasters3dNoDifference_mean(self):
  98. """Test usage of assertRastersNoDifference with mean"""
  99. self.assertRasters3dNoDifference(actual=self.rcd_increasing_map,
  100. reference=self.rcd_increasing_map,
  101. precision=0, # this might need to be increased
  102. statistics=dict(mean=0),
  103. msg="The difference of same maps should have small mean")
  104. self.assertRaises(self.failureException,
  105. self.assertRasters3dNoDifference,
  106. actual=self.constant_map,
  107. reference=self.rcd_increasing_map,
  108. precision=1,
  109. statistics=dict(mean=0),
  110. msg="The difference of different maps should have huge mean")
  111. if __name__ == '__main__':
  112. test()