123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311 |
- """
- 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()
|