source: anuga_core/source/anuga/mesh_engine/me_test.py @ 3737

Last change on this file since 3737 was 3551, checked in by duncan, 19 years ago

adding spike test code

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