1# -*- coding: utf-8 -*-
2"""
3Created on Thu Jul 30 18:27:22 2015
4
5@author: lucadelu
6"""
7from grass.gunittest.case import TestCase
8from grass.gunittest.main import test
9from numpy.random import random
10from grass.pygrass.raster import raster2numpy, numpy2raster, RasterRow
11
12
13def check_raster(name):
14    r = RasterRow(name)
15    try:
16        r.open(mode='r')
17        r.close()
18        return True
19    except:
20        return False
21
22
23class NumpyTestCase(TestCase):
24
25    name = "RasterRowTestCase_map"
26
27    @classmethod
28    def setUpClass(cls):
29        """Create test raster map and region"""
30        cls.use_temp_region()
31        cls.runModule("g.region", n=40, s=0, e=60, w=0, res=1)
32        cls.runModule("r.mapcalc",
33            expression="%s = float(row() + (10.0 * col()))" % (cls.name),
34            overwrite=True)
35        cls.numpy_obj = raster2numpy(cls.name)
36
37    @classmethod
38    def tearDownClass(cls):
39        """Remove the generated vector map, if exist"""
40        cls.runModule("g.remove", flags='f', type='raster',
41                      name=cls.name)
42        cls.del_temp_region()
43
44    def test_type(self):
45        self.assertTrue(str(self.numpy_obj.dtype), 'float32')
46
47    def test_len(self):
48        self.assertTrue(len(self.numpy_obj), 40)
49        self.assertTrue(len(self.numpy_obj[0]), 60)
50
51    def test_write(self):
52        ran = random([40, 60])
53        numpy2raster(ran, 'FCELL', self.name, True)
54        self.assertTrue(check_raster(self.name))
55
56if __name__ == '__main__':
57    test()
58