import unittest import Census import Configuration.Defaults import GPS import SummaryFile1 import Tests.Fixtures class DatabaseTest(unittest.TestCase): def setUp(self): self.cdb = Census.Database(Configuration.Defaults.DATABASE_HOST, Configuration.Defaults.DATABASE_NAME, Configuration.Defaults.DATABASE_USERNAME, Configuration.Defaults.SRID) def testEachBlockContainsItsOwnPopulation(self): # These calculations are slightly off due to a discrepancy # between the WKB/WKT format calculations. It would appear # that converting from WKB to WKT and then back loses some # information. # # The error is 1/100th of a person. Should be pretty safe. error_threshold = 0.01 grp = SummaryFile1.GeoRecordParser() fixtures_path = Tests.Fixtures.Path() + '/SummaryFile1/one_hundred_records.txt' fixtures = grp.parse_blocks(fixtures_path) for b in fixtures: block_boundary = self.cdb.get_block_geometry_as_wkt(b.tiger_blkidfp00()) contained_population = self.cdb.find_contained_population(block_boundary) error = abs(b.pop100 - contained_population) self.assertTrue(error <= error_threshold) def suite(): suite = unittest.TestSuite() suite.addTest(unittest.makeSuite(DatabaseTest)) return suite