]> gitweb.michael.orlitzky.com - dead/census-tools.git/blobdiff - src/Tests/Unit/CensusTest.py
Added unit tests for the Census.Database class.
[dead/census-tools.git] / src / Tests / Unit / CensusTest.py
diff --git a/src/Tests/Unit/CensusTest.py b/src/Tests/Unit/CensusTest.py
new file mode 100644 (file)
index 0000000..3f56afb
--- /dev/null
@@ -0,0 +1,43 @@
+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
+