view tests/test_grid.py @ 5:7e27e874655b

test a larger grid + move distance insertion to its own function
author Jeff Hammel <k0scist@gmail.com>
date Sat, 24 Jun 2017 15:16:10 -0700
parents 49aae0c0293b
children 254195d0bac2
line wrap: on
line source

#!/usr/bin/env python

"""
test that we can grid a solution
"""

import os
import unittest
from common import datafile
from globalneighbors.grid import LatLonGrid
from globalneighbors.locations import locations
from globalneighbors.read import read_cities
from globalneighbors.read import read_city_list


class TestGrid(unittest.TestCase):
    """test gridding functionality"""

    ### test functions

    def test_dimensions(self):

        # make a 2 degree grid
        grid = LatLonGrid(90, 180)
        assert grid.n == (90, 180)
        assert grid.d == (2., 2.)
        assert len(grid.grid) == 90
        for row in grid.grid:
            assert len(row) == 180

    def test_insertion(self):

        coord = (-23., 122.)
        grid = LatLonGrid(3, 4)
        grid.add(1234, *coord)
        i, j = grid.index(*coord)
        assert i == 1
        assert j == 3
        assert grid[(i,j)] == set([1234])

    def test_sample(self):

        samplefile = datafile('sample.tsv')
        assert os.path.exists(samplefile)
        city_locations = locations(read_city_list(samplefile))
        self.grid_locations(city_locations)

    def test_10000(self):
        """test 10000 cities"""

        filename = datafile('10000cities.tsv')
        assert os.path.exists(filename)
        with open(filename) as f:
            city_locations = locations(read_cities(f))
        self.grid_locations(city_locations)


    ### generic (utility) functions

    def grid_locations(self, locations):
        """grid locations + test created grid"""

        # create a grid
        grid = LatLonGrid(8, 8)

        # add the items to it
        for geoid, (lat, lon) in locations.items():
            grid.add(geoid, lat, lon)

        # iterate over the grid
        n_locations = 0
        for i in range(grid.n[0]):
            for j in range(grid.n[1]):
                n_locations += len(grid[(i,j)])
        assert n_locations == len(locations)



if __name__ == '__main__':
    unittest.main()