123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235 |
- # -*- coding: utf-8 -*-
- """
- Tests assertion methods for vectors.
- """
- from grass.exceptions import CalledModuleError
- from grass.gunittest.case import TestCase
- from grass.gunittest.main import test
- V_UNIVAR_SCHOOLS_WIDTH_SUBSET = """n=144
- nmissing=0
- nnull=23
- min=0
- max=2294
- range=2294
- sum=109978
- mean=763.736
- mean_abs=763.736
- """
- RANDOM_KEYVALUES = """abc=2025000
- aaa=55.5787925720215
- bbb=156.329864501953
- """
- # v.info schools -t
- V_UNIVAR_SCHOOLS_TOPO = dict(
- nodes=0,
- points=167,
- lines=0,
- boundaries=0,
- centroids=0,
- areas=0,
- islands=0,
- primitives=167,
- map3d=0,
- )
- # v.info schools -g and rounded
- V_UNIVAR_SCHOOLS_REGION = dict(
- north=248160,
- south=203560,
- east=671715,
- west=619215,
- top=0,
- bottom=0,
- )
- # v.info schools -g and reduced to minimum
- V_UNIVAR_SCHOOLS_EXTENDED = dict(
- name='schools',
- level=2,
- num_dblinks=1,
- )
- class TestVectorInfoAssertions(TestCase):
- """Test assertions of map meta and statistics"""
- # pylint: disable=R0904
- def test_assertVectorFitsUnivar(self):
- self.assertVectorFitsUnivar(map='schools', column='CORECAPACI',
- reference=V_UNIVAR_SCHOOLS_WIDTH_SUBSET,
- precision=0.01)
- self.assertRaises(self.failureException,
- self.assertVectorFitsUnivar,
- map='schools', column='MOBILECAPA',
- reference=V_UNIVAR_SCHOOLS_WIDTH_SUBSET,
- precision=0.01)
- self.assertRaises(ValueError,
- self.assertVectorFitsUnivar,
- map='schools', column='CORECAPACI',
- reference=RANDOM_KEYVALUES)
- def test_assertVectorFitsTopoInfo(self):
- self.assertVectorFitsTopoInfo('schools', V_UNIVAR_SCHOOLS_TOPO)
- self.assertRaises(self.failureException,
- self.assertVectorFitsTopoInfo,
- 'hospitals',
- V_UNIVAR_SCHOOLS_TOPO)
- self.assertRaises(ValueError,
- self.assertVectorFitsTopoInfo,
- 'schools', RANDOM_KEYVALUES)
- self.assertRaises(ValueError,
- self.assertVectorFitsTopoInfo,
- 'schools', V_UNIVAR_SCHOOLS_REGION)
- def test_assertVectorFitsRegionInfo(self):
- self.assertVectorFitsRegionInfo('schools', V_UNIVAR_SCHOOLS_REGION, precision=1.0)
- self.assertRaises(self.failureException,
- self.assertVectorFitsRegionInfo,
- 'hospitals', V_UNIVAR_SCHOOLS_REGION, precision=1.0)
- self.assertRaises(ValueError,
- self.assertVectorFitsRegionInfo,
- 'schools', RANDOM_KEYVALUES, precision=1.0)
- self.assertRaises(ValueError,
- self.assertVectorFitsRegionInfo,
- 'schools', V_UNIVAR_SCHOOLS_TOPO, precision=1.0)
- def test_assertVectorFitsExtendedInfo(self):
- self.assertVectorFitsExtendedInfo('schools', V_UNIVAR_SCHOOLS_EXTENDED)
- self.assertRaises(self.failureException,
- self.assertVectorFitsExtendedInfo,
- 'hospitals',
- V_UNIVAR_SCHOOLS_EXTENDED)
- self.assertRaises(ValueError,
- self.assertVectorFitsExtendedInfo,
- 'schools',
- RANDOM_KEYVALUES)
- self.assertRaises(ValueError,
- self.assertVectorFitsExtendedInfo,
- 'schools',
- V_UNIVAR_SCHOOLS_TOPO)
- def test_assertVectorInfoEqualsVectorInfo(self):
- self.assertVectorInfoEqualsVectorInfo('schools', 'schools', precision=0.00000001)
- self.assertRaises(self.failureException,
- self.assertVectorInfoEqualsVectorInfo,
- 'hospitals', 'schools', precision=0.00000001)
- self.assertRaises(CalledModuleError,
- self.assertVectorInfoEqualsVectorInfo,
- 'schools', 'does_not_exist', precision=0.00000001)
- class TestVectorGeometryAssertions(TestCase):
- """Test assertions of map geometry"""
- # pylint: disable=R0904
- maps_to_remove = []
- simple_base_file = 'data/simple_vector_map_ascii_4p_2l_2c_3b_dp14.txt'
- simple_modified_file = 'data/simple_vector_map_ascii_4p_2l_2c_3b_dp14_modified.txt'
- simple_diff_header_file = 'data/simple_vector_map_ascii_4p_2l_2c_3b_dp14_diff_header.txt'
- precision = 0.00001
- digits = 14
- @classmethod
- def tearDownClass(cls):
- # TODO: this should be decided globaly by cleanup variable
- # perhaps cls.gremove() wheoul be the right option
- # when invoking separately, no need to delete maps since mapset
- # is deleted
- if cls.maps_to_remove:
- cls.runModule('g.remove', flags='f', type='vector',
- name=','.join(cls.maps_to_remove))
- def test_assertVectorEqualsVector_basic(self):
- """Check completely different maps."""
- self.assertVectorEqualsVector(actual='schools', reference='schools',
- precision=0.01, digits=15)
- self.assertRaises(self.failureException,
- self.assertVectorEqualsVector,
- actual='schools', reference='hospitals',
- precision=0.01, digits=7)
- self.assertRaises(CalledModuleError,
- self.assertVectorEqualsVector,
- actual='does_not_exist', reference='hospitals',
- precision=0.01, digits=7)
- def test_assertVectorEqualsVector_geometry_same_header(self):
- """Check small slighlty different maps with same header in ASCII."""
- amap = 'simple_vector_map_base_geom'
- bmap = 'simple_vector_map_modified_geom'
- self.runModule('v.in.ascii', format='standard',
- input=self.simple_base_file,
- output=amap)
- self.maps_to_remove.append(amap)
- self.runModule('v.in.ascii', format='standard',
- input=self.simple_modified_file,
- output=bmap)
- self.maps_to_remove.append(bmap)
- self.assertVectorEqualsVector(actual=amap, reference=amap,
- precision=self.precision, digits=self.digits)
- self.assertRaises(self.failureException,
- self.assertVectorEqualsVector,
- actual=amap, reference=bmap,
- precision=self.precision, digits=self.digits)
- def test_assertVectorEqualsVector_geometry(self):
- """Check small slighlty different maps with different headers in ASCII."""
- amap = 'simple_vector_map_base'
- bmap = 'simple_vector_map_different_header'
- self.runModule('v.in.ascii', format='standard',
- input=self.simple_base_file,
- output=amap)
- self.maps_to_remove.append(amap)
- self.runModule('v.in.ascii', format='standard',
- input=self.simple_diff_header_file,
- output=bmap)
- self.maps_to_remove.append(bmap)
- self.assertVectorEqualsVector(actual=amap, reference=bmap,
- precision=self.precision, digits=self.digits)
- def test_assertVectorAsciiEqualsVectorAscii_diff_header(self):
- """Test ASCII files with different header.
- Prove that files were not deleted if not requested.
- """
- self.assertVectorAsciiEqualsVectorAscii(actual=self.simple_base_file,
- reference=self.simple_diff_header_file)
- self.assertFileExists(self.simple_base_file)
- self.assertFileExists(self.simple_diff_header_file)
- def test_assertVectorAsciiEqualsVectorAscii_diff_content(self):
- """Test ASCII files with slighlty different content.
- Prove that files were not deleted if not requested.
- """
- self.assertRaises(self.failureException,
- self.assertVectorAsciiEqualsVectorAscii,
- actual=self.simple_base_file,
- reference=self.simple_modified_file)
- self.assertFileExists(self.simple_base_file)
- self.assertFileExists(self.simple_modified_file)
- def test_assertVectorEqualsAscii_by_import(self):
- amap = 'simple_vector_map_imported_base'
- self.runModule('v.in.ascii', format='standard',
- input=self.simple_base_file,
- output=amap)
- self.maps_to_remove.append(amap)
- self.assertVectorEqualsAscii(amap, self.simple_diff_header_file,
- precision=self.precision, digits=self.digits)
- self.assertRaises(self.failureException,
- self.assertVectorEqualsAscii,
- amap, self.simple_modified_file,
- precision=self.precision, digits=self.digits)
- self.assertFileExists(self.simple_base_file)
- self.assertFileExists(self.simple_modified_file)
- self.assertFileExists(self.simple_diff_header_file)
- if __name__ == '__main__':
- test()
|