source: inundation/coordinate_transforms/test_geo_reference.py @ 3052

Last change on this file since 3052 was 2941, checked in by duncan, 19 years ago

added more tests to geo_ref. It throws a different error as well now. Updated cornell room

File size: 11.5 KB
Line 
1#!/usr/bin/env python
2#
3
4import unittest
5import tempfile
6import os
7
8from geo_reference import *
9from Numeric import allclose,array
10
11class geo_referenceTestCase(unittest.TestCase):
12    def setUp(self):
13        pass
14       
15    def tearDown(self):
16        pass
17
18   
19   
20    def test_get_origin(self):
21        g = Geo_reference(56,1.9,1.9)
22        (z,x,y) = g.get_origin()
23
24        self.failUnless(z == g.get_zone(), ' failed')
25        self.failUnless(x == g.get_xllcorner(), ' failed')
26        self.failUnless(y == g.get_yllcorner(), ' failed') 
27       
28    def test_read_write_NetCDF(self):
29        from Scientific.IO.NetCDF import NetCDFFile
30        g = Geo_reference(56,1.9,1.9)
31        file_name = tempfile.mktemp(".geo_referenceTest")
32       
33        out_file = NetCDFFile(file_name, 'w')
34        g.write_NetCDF(out_file)
35        out_file.close()
36       
37        in_file = NetCDFFile(file_name, 'r')
38        new_g = Geo_reference(NetCDFObject=in_file)
39        in_file.close()
40        os.remove(file_name)
41
42        self.failUnless(g == new_g, 'test_read_write_NetCDF failed') 
43       
44    def test_read_write_ASCII(self):
45        from Scientific.IO.NetCDF import NetCDFFile
46        g = Geo_reference(56,1.9,1.9)
47        file_name = tempfile.mktemp(".geo_referenceTest")
48        fd = open(file_name,'w')
49        g.write_ASCII(fd)
50        fd.close()
51       
52        fd = open(file_name,'r')
53        new_g = Geo_reference(ASCIIFile=fd)
54        fd.close()
55        os.remove(file_name)
56
57        self.failUnless(g == new_g, 'test_read_write_ASCII failed') 
58   
59    def test_read_write_ASCII2(self):
60        from Scientific.IO.NetCDF import NetCDFFile
61        g = Geo_reference(56,1.9,1.9)
62        file_name = tempfile.mktemp(".geo_referenceTest")
63        fd = open(file_name,'w')
64        g.write_ASCII(fd)
65        fd.close()       
66        fd = open(file_name,'r')
67        line = fd.readline()
68        new_g = Geo_reference(ASCIIFile=fd, read_title=line)
69        fd.close()
70        os.remove(file_name)
71
72        self.failUnless(g == new_g, 'test_read_write_ASCII failed')
73       
74    def test_read_write_ASCII3(self):
75        from Scientific.IO.NetCDF import NetCDFFile
76        g = Geo_reference(56,1.9,1.9)
77        file_name = tempfile.mktemp(".geo_referenceTest")
78        fd = open(file_name,'w')
79        g.write_ASCII(fd)
80        fd.close()       
81        fd = open(file_name,'r')
82        line = fd.readline()
83        line = "fail !!"
84        try:
85            new_g = Geo_reference(ASCIIFile=fd, read_title=line)
86            fd.close()
87            os.remove(file_name)
88        except TitleError:
89            fd.close()
90            os.remove(file_name)
91        else:
92            self.failUnless(0 ==1,
93                        'bad text file did not raise error!')
94           
95    def test_change_points_geo_ref(self):
96        x = 433.0
97        y = 3.0
98        g = Geo_reference(56,x,y)
99        lofl = [[3.0,311.0], [677.0,6.0]]
100        new_lofl = g.change_points_geo_ref(lofl)
101        #print "lofl",lofl
102        #print "new_lofl",new_lofl
103
104        self.failUnless(type(new_lofl) == types.ListType, ' failed')
105        self.failUnless(type(new_lofl) == type(lofl), ' failed')
106        for point,new_point in map(None,lofl,new_lofl):
107            self.failUnless(point[0]-x==new_point[0], ' failed')
108            self.failUnless(point[1]-y==new_point[1], ' failed')
109       
110    def test_change_points_geo_ref2(self):
111        x = 3.0
112        y = 543.0
113        g = Geo_reference(56,x,y)
114        lofl = [[3.0,388.0]]
115        new_lofl = g.change_points_geo_ref(lofl)
116        #print "lofl",lofl
117        #print "new_lofl",new_lofl
118
119        self.failUnless(type(new_lofl) == types.ListType, ' failed')
120        self.failUnless(type(new_lofl) == type(lofl), ' failed')
121        for point,new_point in map(None,lofl,new_lofl):
122            self.failUnless(point[0]-x==new_point[0], ' failed')
123            self.failUnless(point[1]-y==new_point[1], ' failed')
124       
125    def test_change_points_geo_ref3(self):
126        x = 3.0
127        y = 443.0
128        g = Geo_reference(56,x,y)
129        lofl = [3.0,345.0]
130        new_lofl = g.change_points_geo_ref(lofl)
131        #print "lofl",lofl
132        #print "new_lofl",new_lofl
133
134        self.failUnless(type(new_lofl) == types.ListType, ' failed')
135        self.failUnless(type(new_lofl) == type(lofl), ' failed')
136        for point,new_point in map(None,[lofl],new_lofl):
137            self.failUnless(point[0]-x==new_point[0], ' failed')
138            self.failUnless(point[1]-y==new_point[1], ' failed')
139       
140   
141    def test_change_points_geo_ref4(self):
142        x = 3.0
143        y = 443.0
144        g = Geo_reference(56,x,y)
145        lofl = array([[3.0,323.0], [6.0,645.0]])
146        new_lofl = g.change_points_geo_ref(lofl)
147        #print "4 lofl",lofl
148        #print "4 new_lofl",new_lofl
149
150        self.failUnless(type(new_lofl) == ArrayType, ' failed')
151        self.failUnless(type(new_lofl) == type(lofl), ' failed')
152        lofl[:,0] -= x
153        lofl[:,1] -= y
154        assert allclose(lofl,new_lofl)
155       
156    def test_change_points_geo_ref5(self):
157        x = 103.0
158        y = 3.0
159        g = Geo_reference(56,x,y)
160        lofl = array([[3.0,323.0]])
161
162       
163        #print "5 lofl before",lofl         
164        new_lofl = g.change_points_geo_ref(lofl.copy())
165        #print "5 lofl",lofl
166        #print "5 new_lofl",new_lofl
167
168        self.failUnless(type(new_lofl) == ArrayType, ' failed')
169        self.failUnless(type(new_lofl) == type(lofl), ' failed')
170
171
172        for point,new_point in map(None,lofl,new_lofl):
173            self.failUnless(point[0]-x==new_point[0], ' failed')
174            self.failUnless(point[1]-y==new_point[1], ' failed')
175       
176    def test_change_points_geo_ref6(self):
177        x = 53.0
178        y = 3.0
179        g = Geo_reference(56,x,y)
180        lofl = array([355.0,3.0])
181        new_lofl = g.change_points_geo_ref(lofl.copy())       
182        #print "lofl",lofl
183        #print "new_lofl",new_lofl
184
185        self.failUnless(type(new_lofl) == ArrayType, ' failed')
186        self.failUnless(type(new_lofl) == type(lofl), ' failed')
187        for point,new_point in map(None,[lofl],new_lofl):
188            self.failUnless(point[0]-x==new_point[0], ' failed')
189            self.failUnless(point[1]-y==new_point[1], ' failed')
190     
191    def test_change_points_geo_ref7(self):
192        x = 23.0
193        y = 3.0
194        point_x = 9.0
195        point_y = -60.0
196        g = Geo_reference(56,x,y)
197        points_geo_ref = Geo_reference(56,point_x,point_y)
198        lofl = [[3.0,30.0], [67.0,6.0]]
199        new_lofl = g.change_points_geo_ref(lofl,points_geo_ref=points_geo_ref)
200        #print "lofl",lofl
201        #print "new_lofl",new_lofl
202
203        self.failUnless(type(new_lofl) == types.ListType, ' failed')
204        self.failUnless(type(new_lofl) == type(lofl), ' failed')
205        for point,new_point in map(None,lofl,new_lofl):
206            self.failUnless(point[0]+point_x-x==new_point[0], ' failed')
207            self.failUnless(point[1]+point_y-y==new_point[1], ' failed')
208     
209    def test_get_absolute(self):
210        x = 7.0
211        y = 3.0
212       
213        g = Geo_reference(56,x,y)
214        lofl = [[3.0,34.0], [64.0,6.0]]
215        new_lofl = g.get_absolute(lofl)
216        #print "lofl",lofl
217        #print "new_lofl",new_lofl
218
219        self.failUnless(type(new_lofl) == types.ListType, ' failed')
220        self.failUnless(type(new_lofl) == type(lofl), ' failed')
221        for point,new_point in map(None,lofl,new_lofl):
222            self.failUnless(point[0]+x==new_point[0], ' failed')
223            self.failUnless(point[1]+y==new_point[1], ' failed')
224                       
225    def test___cmp__(self):
226        g = Geo_reference(56,1.9,1.9,)
227        new_g = Geo_reference(56,1.9,1.9)
228     
229        self.failUnless(g == new_g, 'test___cmp__ failed')   
230
231
232    def test_reconcile(self):
233        g1 = Geo_reference(56,2,5)
234        g2 = Geo_reference(50,4,5)
235        g3 = Geo_reference(50,66,6)       
236        g_default = Geo_reference()               
237
238
239        g2.reconcile_zones(g3)
240        assert g2.get_zone() == g3.get_zone()
241
242        g_default.reconcile_zones(g3)
243        assert g_default.get_zone() == g3.get_zone()
244
245        g_default = Geo_reference()               
246        g3.reconcile_zones(g_default)
247        assert g_default.get_zone() == g3.get_zone()               
248
249        try:
250            g1.reconcile_zones(g2)
251        except:
252            pass
253        else:
254            msg = 'Should have raised an exception'
255            raise msg
256 
257    def test_bad_ASCII_title(self):     
258 # create an .xya file
259        point_file = tempfile.mktemp(".xya")
260        fd = open(point_file,'w')
261        fd.write("# hey! \n")
262        fd.close()
263       
264        fd = open(point_file,'r')
265        #
266        #new_g = Geo_reference(ASCIIFile=fd)
267        try:
268            new_g = Geo_reference(ASCIIFile=fd)
269            fd.close()
270            os.remove(point_file)
271        except TitleError:
272            fd.close()
273            os.remove(point_file)
274        else:
275            self.failUnless(0 ==1,
276                        'bad text file did not raise error!')
277            os.remove(point_file)
278
279    def test_read_write_ASCII_test_and_fail(self):
280        from Scientific.IO.NetCDF import NetCDFFile
281
282        # This is to test a fail
283        g = Geo_reference(56,1.9,1.9)
284        file_name = tempfile.mktemp(".geo_referenceTest")
285        fd = open(file_name,'w')
286        g.write_ASCII(fd)
287        fd.close()       
288        fd = open(file_name,'r')
289        line = fd.readline()
290        line = " #Geo"
291        try:
292            new_g = Geo_reference(ASCIIFile=fd, read_title=line)
293            fd.close()
294            os.remove(file_name)
295        except TitleError:
296            fd.close()
297            os.remove(file_name)
298        else:
299            self.failUnless(0 ==1,
300                        'bad text file did not raise error!')
301
302        # this tests a pass
303        g = Geo_reference(56,1.9,1.9)
304        file_name = tempfile.mktemp(".geo_referenceTest")
305        fd = open(file_name,'w')
306        g.write_ASCII(fd)
307        fd.close()
308       
309        fd = open(file_name,'r')
310        line = fd.readline()
311        line = "#geo_yeah"
312        new_g = Geo_reference(ASCIIFile=fd, read_title=line)
313        fd.close()
314        os.remove(file_name)
315
316        self.failUnless(g == new_g, 'test_read_write_ASCII failed')
317       
318        # this tests a pass
319        g = Geo_reference(56,1.9,1.9)
320        file_name = tempfile.mktemp(".geo_referenceTest")
321        fd = open(file_name,'w')
322        g.write_ASCII(fd)
323        fd.close()
324       
325        fd = open(file_name,'r')
326        line = fd.readline()
327        line = "#geo crap"
328        new_g = Geo_reference(ASCIIFile=fd, read_title=line)
329        fd.close()
330        os.remove(file_name)
331
332        self.failUnless(g == new_g, 'test_read_write_ASCII failed')
333       
334    def xxtest_good_title(self):     
335 # create an .xya file
336        point_file = tempfile.mktemp(".xya")
337        fd = open(point_file,'w')
338        fd.write("#Geo crap \n 56\n ")
339        fd.close()
340       
341        fd = open(point_file,'r')
342        #
343        #new_g = Geo_reference(ASCIIFile=fd)
344        try:
345            new_g = Geo_reference(ASCIIFile=fd)
346            fd.close()
347            os.remove(point_file)
348        except TitleError:
349            fd.close()
350            os.remove(point_file)
351        else:
352            self.failUnless(0 ==1,
353                        'bad text file did not raise error!')
354            os.remove(point_file)
355         
356#-------------------------------------------------------------
357if __name__ == "__main__":
358
359    suite = unittest.makeSuite(geo_referenceTestCase,'test')
360    runner = unittest.TextTestRunner() #verbosity=2)
361    runner.run(suite)
362   
Note: See TracBrowser for help on using the repository browser.