test_assertions_vect.py 9.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232
  1. # -*- coding: utf-8 -*-
  2. """
  3. Tests assertion methods for vectors.
  4. """
  5. from grass.exceptions import CalledModuleError
  6. import grass.gunittest as gunittest
  7. V_UNIVAR_BRIDGES_WIDTH_SUBSET = """n=10938
  8. nmissing=0
  9. nnull=0
  10. min=0
  11. max=1451
  12. range=1451
  13. sum=2.6299e+06
  14. mean=240.437
  15. """
  16. RANDOM_KEYVALUES = """abc=2025000
  17. aaa=55.5787925720215
  18. bbb=156.329864501953
  19. """
  20. # v.info bridges -t
  21. V_UNIVAR_BRIDGES_TOPO = dict(
  22. nodes=0,
  23. points=10938,
  24. lines=0,
  25. boundaries=0,
  26. centroids=0,
  27. areas=0,
  28. islands=0,
  29. primitives=10938,
  30. map3d=0,
  31. )
  32. # v.info bridges -g and rounded
  33. V_UNIVAR_BRIDGES_REGION = dict(
  34. north=317757,
  35. south=14691,
  36. east=915045,
  37. west=125794,
  38. top=0,
  39. bottom=0,
  40. )
  41. # v.info bridges -g and reduced to minumum
  42. V_UNIVAR_BRIDGES_EXTENDED = dict(
  43. name='bridges',
  44. level=2,
  45. num_dblinks=1,
  46. )
  47. class TestVectorInfoAssertions(gunittest.TestCase):
  48. """Test assertions of map meta and statistics"""
  49. # pylint: disable=R0904
  50. def test_assertVectorFitsUnivar(self):
  51. self.assertVectorFitsUnivar(map='bridges', column='WIDTH',
  52. reference=V_UNIVAR_BRIDGES_WIDTH_SUBSET,
  53. precision=0.01)
  54. self.assertRaises(self.failureException,
  55. self.assertVectorFitsUnivar,
  56. map='bridges', column='YEAR_BUILT',
  57. reference=V_UNIVAR_BRIDGES_WIDTH_SUBSET,
  58. precision=0.01)
  59. self.assertRaises(ValueError,
  60. self.assertVectorFitsUnivar,
  61. map='bridges', column='WIDTH',
  62. reference=RANDOM_KEYVALUES)
  63. def test_assertVectorFitsTopoInfo(self):
  64. self.assertVectorFitsTopoInfo('bridges', V_UNIVAR_BRIDGES_TOPO)
  65. self.assertRaises(self.failureException,
  66. self.assertVectorFitsTopoInfo,
  67. 'lakes',
  68. V_UNIVAR_BRIDGES_TOPO)
  69. self.assertRaises(ValueError,
  70. self.assertVectorFitsTopoInfo,
  71. 'bridges', RANDOM_KEYVALUES)
  72. self.assertRaises(ValueError,
  73. self.assertVectorFitsTopoInfo,
  74. 'bridges', V_UNIVAR_BRIDGES_REGION)
  75. def test_assertVectorFitsRegionInfo(self):
  76. self.assertVectorFitsRegionInfo('bridges', V_UNIVAR_BRIDGES_REGION, precision=1.0)
  77. self.assertRaises(self.failureException,
  78. self.assertVectorFitsRegionInfo,
  79. 'lakes', V_UNIVAR_BRIDGES_REGION, precision=1.0)
  80. self.assertRaises(ValueError,
  81. self.assertVectorFitsRegionInfo,
  82. 'bridges', RANDOM_KEYVALUES, precision=1.0)
  83. self.assertRaises(ValueError,
  84. self.assertVectorFitsRegionInfo,
  85. 'bridges', V_UNIVAR_BRIDGES_TOPO, precision=1.0)
  86. def test_assertVectorFitsExtendedInfo(self):
  87. self.assertVectorFitsExtendedInfo('bridges', V_UNIVAR_BRIDGES_EXTENDED)
  88. self.assertRaises(self.failureException,
  89. self.assertVectorFitsExtendedInfo,
  90. 'lakes',
  91. V_UNIVAR_BRIDGES_EXTENDED)
  92. self.assertRaises(ValueError,
  93. self.assertVectorFitsExtendedInfo,
  94. 'bridges',
  95. RANDOM_KEYVALUES)
  96. self.assertRaises(ValueError,
  97. self.assertVectorFitsExtendedInfo,
  98. 'bridges',
  99. V_UNIVAR_BRIDGES_TOPO)
  100. def test_assertVectorInfoEqualsVectorInfo(self):
  101. self.assertVectorInfoEqualsVectorInfo('bridges', 'bridges', precision=0.00000001)
  102. self.assertRaises(self.failureException,
  103. self.assertVectorInfoEqualsVectorInfo,
  104. 'lakes', 'bridges', precision=0.00000001)
  105. self.assertRaises(CalledModuleError,
  106. self.assertVectorInfoEqualsVectorInfo,
  107. 'bridges', 'does_not_exist', precision=0.00000001)
  108. class TestVectorGeometryAssertions(gunittest.TestCase):
  109. """Test assertions of map geometry"""
  110. # pylint: disable=R0904
  111. maps_to_remove = []
  112. simple_base_file = 'data/simple_vector_map_ascii_4p_2l_2c_3b_dp14.txt'
  113. simple_modified_file = 'data/simple_vector_map_ascii_4p_2l_2c_3b_dp14_modified.txt'
  114. simple_diff_header_file = 'data/simple_vector_map_ascii_4p_2l_2c_3b_dp14_diff_header.txt'
  115. precision = 0.00001
  116. digits = 14
  117. @classmethod
  118. def tearDownClass(cls):
  119. # TODO: this should be decided globaly by cleanup variable
  120. # perhaps cls.gremove() wheoul be the right option
  121. # when invoking separately, no need to delete maps since mapset
  122. # is deleted
  123. if cls.maps_to_remove:
  124. cls.runModule('g.remove', flags='f', type='vect',
  125. pattern=','.join(cls.maps_to_remove))
  126. def test_assertVectorEqualsVector_basic(self):
  127. """Check completely different maps."""
  128. self.assertVectorEqualsVector(actual='bridges', reference='bridges',
  129. precision=0.01, digits=15)
  130. self.assertRaises(self.failureException,
  131. self.assertVectorEqualsVector,
  132. actual='bridges', reference='lakes',
  133. precision=0.01, digits=7)
  134. self.assertRaises(CalledModuleError,
  135. self.assertVectorEqualsVector,
  136. actual='does_not_exist', reference='lakes',
  137. precision=0.01, digits=7)
  138. def test_assertVectorEqualsVector_geometry_same_header(self):
  139. """Check small slighlty different maps with same header in ASCII."""
  140. amap = 'simple_vector_map_base_geom'
  141. bmap = 'simple_vector_map_modified_geom'
  142. self.runModule('v.in.ascii', format='standard',
  143. input=self.simple_base_file,
  144. output=amap)
  145. self.maps_to_remove.append(amap)
  146. self.runModule('v.in.ascii', format='standard',
  147. input=self.simple_modified_file,
  148. output=bmap)
  149. self.maps_to_remove.append(bmap)
  150. self.assertVectorEqualsVector(actual=amap, reference=amap,
  151. precision=self.precision, digits=self.digits)
  152. self.assertRaises(self.failureException,
  153. self.assertVectorEqualsVector,
  154. actual=amap, reference=bmap,
  155. precision=self.precision, digits=self.digits)
  156. def test_assertVectorEqualsVector_geometry(self):
  157. """Check small slighlty different maps with different headers in ASCII."""
  158. amap = 'simple_vector_map_base'
  159. bmap = 'simple_vector_map_different_header'
  160. self.runModule('v.in.ascii', format='standard',
  161. input=self.simple_base_file,
  162. output=amap)
  163. self.maps_to_remove.append(amap)
  164. self.runModule('v.in.ascii', format='standard',
  165. input=self.simple_diff_header_file,
  166. output=bmap)
  167. self.maps_to_remove.append(bmap)
  168. self.assertVectorEqualsVector(actual=amap, reference=bmap,
  169. precision=self.precision, digits=self.digits)
  170. def test_assertVectorAsciiEqualsVectorAscii_diff_header(self):
  171. """Test ASCII files with different header.
  172. Prove that files were not deleted if not requested.
  173. """
  174. self.assertVectorAsciiEqualsVectorAscii(actual=self.simple_base_file,
  175. reference=self.simple_diff_header_file)
  176. self.assertFileExists(self.simple_base_file)
  177. self.assertFileExists(self.simple_diff_header_file)
  178. def test_assertVectorAsciiEqualsVectorAscii_diff_content(self):
  179. """Test ASCII files with slighlty different content.
  180. Prove that files were not deleted if not requested.
  181. """
  182. self.assertRaises(self.failureException,
  183. self.assertVectorAsciiEqualsVectorAscii,
  184. actual=self.simple_base_file,
  185. reference=self.simple_modified_file)
  186. self.assertFileExists(self.simple_base_file)
  187. self.assertFileExists(self.simple_modified_file)
  188. def test_assertVectorEqualsAscii_by_import(self):
  189. amap = 'simple_vector_map_imported_base'
  190. self.runModule('v.in.ascii', format='standard',
  191. input=self.simple_base_file,
  192. output=amap)
  193. self.maps_to_remove.append(amap)
  194. self.assertVectorEqualsAscii(amap, self.simple_diff_header_file,
  195. precision=self.precision, digits=self.digits)
  196. self.assertRaises(self.failureException,
  197. self.assertVectorEqualsAscii,
  198. amap, self.simple_modified_file,
  199. precision=self.precision, digits=self.digits)
  200. self.assertFileExists(self.simple_base_file)
  201. self.assertFileExists(self.simple_modified_file)
  202. self.assertFileExists(self.simple_diff_header_file)
  203. if __name__ == '__main__':
  204. gunittest.test()