source: inundation/pmesh/test_triangmodule.py @ 2027

Last change on this file since 2027 was 2027, checked in by duncan, 18 years ago

'typo'

File size: 11.2 KB
Line 
1#!/usr/bin/env python
2#
3
4import sys
5
6import unittest
7import triang
8
9
10class triangTestCase(unittest.TestCase):
11    def setUp(self):
12        pass
13       
14    def tearDown(self):
15        pass
16 
17    def testrectangle(self):
18
19        points = []
20        seglist = []
21        segattlist = []
22        holelist = []
23        regionlist = []
24
25        points = [(0.0,0.0),(0.0,10.0),(3.0,0.0),(3.0,10.0)]
26        # This will cause a seg fault
27        #points = [[0.0,0.0],[0.0,10.0],[3.0,0.0],[3.0,10.0]]
28
29        # automatically generate pointattlist
30        pointattlist = []
31        for point in points:
32            pointattlist.append([])
33        #print "pointattlist",pointattlist
34        #pointattlist = [[],[],[],[]]
35        trilist = []
36        mode = "Qzcn"
37        data = triang.genMesh(points,seglist,holelist,regionlist,
38                              pointattlist,segattlist,trilist, mode)
39        self.failUnless(data['generatedtrianglelist'] ==[(1, 0, 2), (2, 3, 1)],
40                        'generatedtrianglelist is wrong!')
41        #print "data['generatedsegmentlist']",data['generatedsegmentlist']
42        self.failUnless(data['generatedsegmentlist'] ==[(2, 0), (3, 2), (1, 3),
43                                                        (0, 1)]
44              ,          'generatedsegmentlist is wrong!')
45        self.failUnless(data['generatedpointlist'] ==[(0.0, 0.0), (0.0, 10.0),
46                                                      (3.0, 0.0), (3.0, 10.0)],
47                        ' is wrong!')
48       
49        #print "data['generatedtriangleneighborlist']",
50        #data['generatedtriangleneighborlist']
51        self.failUnless(data['generatedtriangleneighborlist'] ==[(-1, 1, -1),
52                                                                 (-1, 0, -1)],
53                        'generatedtriangleneighborlist is wrong!')
54
55       
56    def testrectangleII(self):
57
58        points = []
59        seglist = []
60        holelist = []
61        regionlist = []
62
63        points = [(0.0,0.0),(0.0,10.0),(3.0,0.0),(3.0,10.0)]
64        pointattlist = [[],[],[],[]]
65        regionlist.append( (1.2,1.2,5.0) )
66        seglist = [(0,1),(1,3),(3,2),(2,0)]
67        segattlist = [0,0,0,0]
68        trilist = []
69        mode = "Qzp"
70        data = triang.genMesh(points,seglist,holelist,regionlist,
71                              pointattlist,segattlist,trilist, mode)
72       
73        self.failUnless(data['generatedtrianglelist'] ==[(1, 0, 2), (2, 3, 1)],
74                        'trianglelist is wrong!')
75        self.failUnless(data['generatedsegmentlist'] ==[(0, 1), (1, 3),
76                                                        (3, 2), (2, 0)],
77                        'segmentlist is wrong!')
78        self.failUnless(data['generatedpointlist'] ==[(0.0, 0.0), (0.0, 10.0),
79                                                      (3.0, 0.0), (3.0, 10.0)],
80                        ' is wrong!')
81   
82    def testsegmarker(self):
83
84        points = []
85        seglist = []
86        holelist = []
87        regionlist = []
88
89        points = [(0.0,0.0),(0.0,10.0),(3.0,0.0),(3.0,10.0)]
90        pointattlist = [[],[],[],[]]
91        regionlist.append( (1.2,1.2,5.0) )
92        seglist = [(0,1),(1,3),(3,2),(2,0)]
93        segattlist = [1.0,2.0,3.0,4.0]
94        trilist = []
95        mode = "Qzp"
96        data = triang.genMesh(points,seglist,holelist,regionlist,
97                              pointattlist,segattlist,trilist, mode)
98       
99        self.failUnless(data['generatedtrianglelist'] ==[(1, 0, 2), (2, 3, 1)],
100                        'trianglelist is wrong!')
101        self.failUnless(data['generatedsegmentlist'] ==[(0, 1), (1, 3),
102                                                        (3, 2), (2, 0)],
103                        'segmentlist is wrong!')
104        self.failUnless(data['generatedpointlist'] ==[(0.0, 0.0), (0.0, 10.0),
105                                                      (3.0, 0.0), (3.0, 10.0)],
106                        ' is wrong!')
107        self.failUnless(data['generatedsegmentmarkerlist'] ==[1,2,3,4],
108                        ' is wrong!')
109             
110    def testbad_region(self):
111
112        points = []
113        seglist = []
114        holelist = []
115        regionlist = [(1.2,1.2)]
116
117        points = [(0.0,0.0),(0.0,10.0),(3.0,0.0),(3.0,10.0)]
118        pointattlist = [[],[],[],[]]
119        seglist = [(0,1),(1,3),(3,2),(2,0)]
120        segattlist = [0,0,0,0]
121        trilist = []
122        mode = "Qzpn"
123        try:
124            data = triang.genMesh(points,seglist,holelist,
125                                  regionlist,pointattlist,segattlist,
126                                  trilist, mode)
127           
128        except TypeError:
129            pass
130        else:
131            self.failUnless(0 ==1,
132                        'bad region list did not raise error!')
133     
134    def testregion_with_maxarea(self):
135
136        points = []
137        seglist = []
138        holelist = []
139        regionlist = [(3,1,1.0)]
140
141        points = [(0.0,0.0),(6.0,0.0),(6.0,6.0),(0.0,6.0)]
142        pointattlist = [[],[],[],[]]
143        seglist = [(0,1),(1,2),(3,2),(3,0),(0,2)]
144        segattlist = [0,0,0,0,0]
145        trilist = []
146        mode = "Qzpna36a"
147        data = triang.genMesh(points,seglist,holelist,regionlist,
148                              pointattlist,segattlist, trilist, mode)
149       
150        self.failUnless(len(data['generatedtrianglelist']) == 2,
151                        'testregion_with_maxarea 1: # of tris is wrong!')
152        ## Another test case   
153        regionlist = [(3,1,1.0),(1,3,1.0,8.0)]
154        mode = "Qzp21na36a"
155        data = triang.genMesh(points,seglist,holelist,regionlist,
156                              pointattlist,segattlist, trilist, mode)
157        #print "len(data['generatedtrianglelist']",len(data['generatedtrianglelist'])
158        # On unix this returns a 7 triangle result.
159        # Windows returns a 6 triangle result.
160        if sys.platform == 'win32':  #Windows
161            self.failUnless(len(data['generatedtrianglelist']) == 6,
162                        'testregion_with_maxarea 2: # of tris is wrong!')
163        else:
164            self.failUnless(len(data['generatedtrianglelist']) == 7,
165                        'testregion_with_maxarea 2: # of tris is wrong!')
166        ## Another test case   
167        regionlist = [(3,1,1.0,8.0),(1,3,1.0,8.0)]
168        mode = "Qzpna36a"
169        data = triang.genMesh(points,seglist,holelist,regionlist,
170                              pointattlist,segattlist, trilist, mode)
171        #print "len(data['generatedtrianglelist']",len(data['generatedtrianglelist'])
172        # On unix this returns a 10 triangle result.
173        # Windows returns a 8 triangle result.
174        if sys.platform == 'win32':  #Windows
175            self.failUnless(len(data['generatedtrianglelist']) == 8,
176                        'testregion_with_maxarea 3: # of tris is wrong!')
177        else:
178            self.failUnless(len(data['generatedtrianglelist']) == 10,
179                        'testregion_with_maxarea 3: # of tris is wrong!')
180                 
181        ## Another test case   
182        regionlist = [(3,1,1.0),(1,3,1.0,8.0)]
183        mode = "Qzpna8a"
184        data = triang.genMesh(points,seglist,holelist,regionlist,
185                              pointattlist,segattlist, trilist, mode)
186        #print "len(data['generatedtrianglelist']",len(data['generatedtrianglelist'])
187        # On unix this returns a 10 triangle result.
188        # Windows returns a 8 triangle result.
189       
190        if sys.platform == 'win32':  #Windows
191            self.failUnless(len(data['generatedtrianglelist']) == 8,
192                        'testregion_with_maxarea 4: # of tris is wrong!')
193        else:
194            self.failUnless(len(data['generatedtrianglelist']) == 10,
195                        'testregion_with_maxarea 4: # of tris is wrong!')
196                 
197                 
198    def testbad_point(self):
199
200        holelist = []
201        regionlist = []
202
203        points = [(0.0,0.0),(0.0,10.0),(3.0,0.0),(3.0)]
204        pointattlist = [[],[],[],[]]
205        seglist = [(0,1),(1,3),(3,2),(2,0)]
206        segattlist = [0,0,0,0]
207        trilist = []
208        mode = "Qzpn"
209        try:
210            data = triang.genMesh(points,seglist,holelist,regionlist,
211                                  pointattlist,segattlist, trilist, mode)
212           
213        except TypeError:
214            pass
215        else:
216            self.failUnless(0 ==1,
217                        'bad point list did not raise error!')
218     
219    def testbad_hole(self):
220
221        holelist = [(9.0)]
222        regionlist = []
223
224        points = [(0.0,0.0),(0.0,10.0),(3.0,0.0),(3.0,10.0)]
225        pointattlist = [[],[],[],[]]
226        seglist = [(0,1),(1,3),(3,2),(2,0)]
227        segattlist = [0,0,0,0]
228        trilist = []
229        mode = "Qzpn"
230        try:
231            data = triang.genMesh(points,seglist,holelist,regionlist,
232                                  pointattlist,segattlist, trilist, mode)
233           
234        except TypeError:
235            pass
236        else:
237            self.failUnless(0 ==1,
238                        'bad hole list did not raise error!')
239     
240    def testbad_segment(self):
241
242        holelist = []
243        regionlist = []
244
245        points = [(0.0,0.0),(0.0,10.0),(3.0,0.0),(3.0,10.0)]
246        pointattlist = [[],[],[],[]]
247        seglist = [(0,1),(1,3),(3,2),(2)]
248        segattlist = [0,0,0,0]
249        trilist = []
250        mode = "Qzpn"
251        try:
252            data = triang.genMesh(points,seglist,holelist,regionlist,
253                                  pointattlist,segattlist, trilist, mode)
254           
255        except TypeError:
256            pass
257        else:
258            self.failUnless(0 ==1,
259                        'bad segment list did not raise error!')
260     
261    def testbad_segattlist(self):
262
263        holelist = []
264        regionlist = []
265
266        points = [(0.0,0.0),(0.0,10.0),(3.0,0.0),(3.0,10.0)]
267        pointattlist = [[],[],[],[]]
268        seglist = [(0,1),(1,3),(3,2),(2,0)]
269        segattlist = [0,0]
270        trilist = []
271        mode = "Qzpn"
272        try:
273            data = triang.genMesh(points,seglist,holelist,regionlist,
274                                  pointattlist,segattlist, trilist, mode)
275           
276            self.failUnless(data['trianglelist'] ==[(1, 0, 2), (2, 3, 1)],
277                        'trianglelist is wrong!')
278        except TypeError:
279            pass
280        else:
281            self.failUnless(0 ==1,
282                        'bad segment attribute list did not raise error!')
283           
284    def testrectangle_regions(self):
285
286        points = []
287        seglist = []
288        holelist = []
289        regionlist = []
290
291        points = [(0.0,0.0),(0.0,10.0),(3.0,0.0),(3.0,10.0)]
292        pointattlist = [[],[],[],[]]
293        #it seems that
294        #triangle only associates one region with a triangle
295        regionlist.append( (1.3,1.3,88.33) )
296        regionlist.append( (1.2,1.2,77,55) )
297        seglist = [(0,1),(1,3),(3,2),(2,0)]
298        segattlist = [0,0,0,0]
299        trilist = []
300        mode = "QAzpq"
301        data = triang.genMesh(points,seglist,holelist,regionlist,
302                              pointattlist,segattlist, trilist, mode)
303           
304        self.failUnless(data['generatedtriangleattributelist'] ==[[77.0], [77.0], [77.0], [77.0]],
305                        'triangleattributelist is wrong!')
306       
307       
308if __name__ == "__main__":
309
310    suite = unittest.makeSuite(triangTestCase,'test')
311    runner = unittest.TextTestRunner()
312    runner.run(suite)
Note: See TracBrowser for help on using the repository browser.