+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
+