Branch data Line data Source code
1 : : /**
2 : : * MOAB, a Mesh-Oriented datABase, is a software component for creating,
3 : : * storing and accessing finite element mesh data.
4 : : *
5 : : * Copyright 2004 Sandia Corporation. Under the terms of Contract
6 : : * DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government
7 : : * retains certain rights in this software.
8 : : *
9 : : * This library is free software; you can redistribute it and/or
10 : : * modify it under the terms of the GNU Lesser General Public
11 : : * License as published by the Free Software Foundation; either
12 : : * version 2.1 of the License, or (at your option) any later version.
13 : : *
14 : : */
15 : :
16 : : /** TSTT Mesh Interface Unit Test
17 : : *
18 : : * This program tests TSTT mesh interface functions through the SIDL interface.
19 : : * In a nutshell, the test creates (or accesses) an implementation instance,
20 : : * tells it to load a file (specified on the command line), then calls a
21 : : * number of functions evaluating that mesh. This test also tests mesh, set
22 : : * and tag creation and evaluation functions.
23 : : *
24 : : * Usage: testcxx <mesh_file_name>
25 : : *
26 : : * Compiling
27 : : * ---------
28 : : * 1. Build your server (your implementation of the TSTT mesh interface) under
29 : : * SIDL/Babel and put it in a library in the Babel-generated server directory,
30 : : * ${SERVER_DIR}/libimpl.so. Any include files needed to instantiate this
31 : : * server from applications should also be in that directory. See note a) below.
32 : : * 2. Change the definition of IMPLEMENTATION_CLASS below to be the
33 : : * namespace-qualified name of your implementation class. This definition is
34 : : * used in the main to instantiate the server using the SIDL _create function, e.g.
35 : : * . TSTTB::Mesh mesh = IMPLEMENTATION_CLASS._create();
36 : : * (we put the definition of IMPLEMENTATION_CLASS at the top of this file so that
37 : : * you don't have to understand the rest of the source code to use this test). See
38 : : * note b) below.
39 : : * 3. Include the file(s) needed which declare the implementation's namespace and
40 : : * class
41 : : * 4. Compile this test file to an object file:
42 : : * g++ -fpic -I. -I${BABEL}/include -I${SERVER_DIR} -c testcxx.cpp
43 : : * 5. Link the application:
44 : : * g++ -o testcxx testcxx.o -ltest -L${BABEL_LIBS} -lsidl
45 : : *
46 : : * Notes
47 : : * -----
48 : : * a) The files don't absolutely need to be arranged as described above. For
49 : : * example, some projects put their custom implementation files somewhere besides
50 : : * ${SERVER_DIR}, to keep them separate from Babel-generated files.
51 : : * b) This test assumes interface instances are created using a direct call to the
52 : : * SIDL _create() function for that class. Another way to do this would be to
53 : : * call a factory linked into the test. To change the method used to construct
54 : : * the interface instance for this test, see the use of IMPLEMENTATION_CLASS towards
55 : : * the end of this file.
56 : : */
57 : :
58 : : #include <stdio.h>
59 : : #include <string.h>
60 : : #include <stdlib.h>
61 : : #include "iMesh.h"
62 : : #include "iMesh_extensions.h"
63 : : #include "moab/Types.hpp"
64 : : #include "TestUtil.hpp"
65 : : using namespace moab;
66 : : extern enum iBase_ErrorType iBase_ERROR_MAP[MB_FAILURE + 1];
67 : :
68 : : #define FALSE 0
69 : : #define TRUE 1
70 : :
71 : : #define DEFAULT_TEST_FILE brick.vtk
72 : :
73 : : // clang-format off
74 : :
75 : : #ifdef SRCDIR
76 : : #define DEFAULT_INPUT_FILE STRINGIFY( SRCDIR/DEFAULT_TEST_FILE )
77 : : #else
78 : : #define DEFAULT_INPUT_FILE STRINGIFY( DEFAULT_TEST_FILE )
79 : : #endif
80 : :
81 : : static bool assert_pass;
82 : : #define ASSERT( COND ) \
83 : : assert_pass = true; \
84 : : if( !( COND ) ) \
85 : : { \
86 : : PRINT_ASSERT_FAILURE( #COND, __FILE__, __LINE__ ); \
87 : : assert_pass = false; \
88 : : }
89 : :
90 : 0 : void PRINT_ASSERT_FAILURE( const char* cond, const char* file, int line )
91 : : {
92 : 0 : printf( "Condition: %s\n", cond );
93 : 0 : printf( " failed at %s line %d\n", file, line );
94 : 0 : }
95 : :
96 : : #define CHK( err ) \
97 : : if( err != iBase_SUCCESS ) do \
98 : : { \
99 : : printf( "%s:%d ITAPS error %d\n", __FILE__, __LINE__, err ); \
100 : : return 0; \
101 : : } while( 0 )
102 : :
103 : : // clang-format on
104 : :
105 : : static iBase_EntitySetHandle root_set;
106 : :
107 : : /*!
108 : : prints out a result string based on the value of error_code
109 : : */
110 : 15 : void handle_error_code( const int result, int* number_failed, int* /*number_not_implemented*/, int* number_successful )
111 : : {
112 [ + - ]: 15 : if( result )
113 : : {
114 : 15 : printf( "Success\n" );
115 : 15 : ( *number_successful )++;
116 : : }
117 : : else
118 : : {
119 : 0 : printf( "Failure\n" );
120 : 0 : ( *number_failed )++;
121 : : }
122 : 15 : }
123 : :
124 : : /*!
125 : : @test
126 : : Load Mesh
127 : : @li Load a mesh file
128 : : */
129 : 1 : int load_mesh_test( const char* filename, iMesh_Instance mesh )
130 : : {
131 : : /* load a mesh */
132 : : int result;
133 [ + - ]: 1 : iMesh_load( mesh, root_set, filename, NULL, &result, strlen( filename ), 0 );
134 [ - + ]: 1 : if( iBase_SUCCESS != result )
135 : : {
136 [ # # ]: 0 : printf( "ERROR : can not load a mesh from file %s\n", filename );
137 : 0 : return FALSE;
138 : : }
139 : :
140 : 1 : return TRUE;
141 : : }
142 : :
143 : : #define TEST_ERROR_CODE( A, B ) \
144 : : if( iBase_ERROR_MAP[( A )] != ( B ) ) \
145 : : { \
146 : : printf( "ERROR: Invalid mapping for MOAB error code %s\n", #A ); \
147 : : printf( " Expected %d, actual is %d\n", (int)iBase_ERROR_MAP[( A )], (int)( B ) ); \
148 : : return FALSE; \
149 : : }
150 : :
151 : 1 : int error_code_test( iMesh_Instance /*mesh*/ )
152 : : {
153 [ - + ]: 1 : TEST_ERROR_CODE( MB_SUCCESS, iBase_SUCCESS )
154 [ - + ]: 1 : TEST_ERROR_CODE( MB_TYPE_OUT_OF_RANGE, iBase_INVALID_ENTITY_TYPE )
155 [ - + ]: 1 : TEST_ERROR_CODE( MB_MEMORY_ALLOCATION_FAILED, iBase_MEMORY_ALLOCATION_FAILED )
156 [ - + ]: 1 : TEST_ERROR_CODE( MB_ENTITY_NOT_FOUND, iBase_INVALID_ENTITY_HANDLE )
157 [ - + ]: 1 : TEST_ERROR_CODE( MB_TAG_NOT_FOUND, iBase_TAG_NOT_FOUND )
158 [ - + ]: 1 : TEST_ERROR_CODE( MB_FILE_DOES_NOT_EXIST, iBase_FILE_NOT_FOUND )
159 [ - + ]: 1 : TEST_ERROR_CODE( MB_UNSUPPORTED_OPERATION, iBase_NOT_SUPPORTED )
160 [ - + ]: 1 : TEST_ERROR_CODE( MB_UNHANDLED_OPTION, iBase_INVALID_ARGUMENT )
161 [ - + ]: 1 : TEST_ERROR_CODE( MB_FAILURE, iBase_FAILURE )
162 : 1 : return TRUE;
163 : : }
164 : :
165 : : /*!
166 : : @test
167 : : TSTT topology dimension Test
168 : : @li Check 2d topology dimensions
169 : : */
170 : 1 : int topology_dimension_test( iMesh_Instance mesh )
171 : : {
172 : 1 : iBase_EntityHandle* faces = NULL;
173 : 1 : int faces_alloc = 0, faces_size;
174 : : int result, i;
175 : 1 : int* dimensions = NULL;
176 : 1 : int dimensions_alloc = 0, dimensions_size;
177 : :
178 : : /* first get 2D entities */
179 [ + - ]: 1 : iMesh_getEntities( mesh, root_set, iBase_FACE, iMesh_ALL_TOPOLOGIES, &faces, &faces_alloc, &faces_size, &result );
180 [ - + ]: 1 : if( iBase_SUCCESS != result )
181 : : {
182 [ # # ]: 0 : printf( "Failed to get faces in entity_sets_test.\n" );
183 : 0 : return FALSE;
184 : : }
185 : :
186 : : /* get dimensions of faces */
187 [ + - ]: 1 : iMesh_getEntArrType( mesh, faces, faces_size, &dimensions, &dimensions_alloc, &dimensions_size, &result );
188 [ - + ]: 1 : if( iBase_SUCCESS != result )
189 : : {
190 [ # # ]: 0 : printf( "Failed to get dimensions of faces in topology_test.\n" );
191 : 0 : free( faces );
192 : 0 : return FALSE;
193 : : }
194 : :
195 [ - + ]: 1 : if( dimensions_size != faces_size )
196 : : {
197 [ # # ]: 0 : printf( "Didn't get the right number of types in topology_test.\n" );
198 : 0 : free( faces );
199 : 0 : free( dimensions );
200 : 0 : return FALSE;
201 : : }
202 : :
203 : : /* make sure all elements are 2D */
204 [ + + ]: 601 : for( i = 0; i < faces_size; i++ )
205 : : {
206 [ - + ]: 600 : if( dimensions[i] != iBase_FACE )
207 : : {
208 : 0 : free( faces );
209 : 0 : free( dimensions );
210 : 0 : return FALSE;
211 : : }
212 : : }
213 : :
214 : 1 : free( faces );
215 : 1 : free( dimensions );
216 : :
217 : 1 : return TRUE;
218 : : }
219 : :
220 : : /*!
221 : : @test
222 : : TSTT topology adjacency Test
223 : : @li Check topology information
224 : : @li Check adjacency
225 : : @li Get interior and exterior elements
226 : : */
227 : : /* make each topological entity vectors, check their topology */
228 : : /* types, get interior and exterior faces of hexes */
229 : 1 : int topology_adjacency_test( iMesh_Instance mesh )
230 : : {
231 : : int result, i, j, entities_alloc, entities_size, *topologies;
232 : : int topologies_alloc, topologies_size;
233 : 1 : iBase_EntityHandle *entities, *entity_vectors[iMesh_ALL_TOPOLOGIES] = { NULL };
234 : 1 : int entity_vectors_sizes[iMesh_ALL_TOPOLOGIES] = { 0 };
235 : : int top_j, num_tops, region_type, num_region;
236 : 1 : iBase_EntityHandle* adj_faces = NULL;
237 : 1 : int adj_faces_alloc = 0, adj_faces_size;
238 : 1 : int* face_offsets = NULL;
239 : 1 : int face_offsets_alloc = 0, face_offsets_size, face_loaded;
240 : 1 : iBase_EntityHandle* adj_regions = NULL;
241 : 1 : int adj_regions_alloc = 0, adj_regions_size;
242 : 1 : int* region_offsets = NULL;
243 : 1 : int region_offsets_alloc = 0, region_offsets_size;
244 : : iBase_EntityHandle *interior, *exterior;
245 : 1 : int num_int = 0, num_ext = 0, found, next_offset, iter;
246 : : int num_faces_per_region;
247 : : ;
248 : :
249 : : /* fill the vectors of each topology entities */
250 : : /* like lines vector, polygon vector, triangle vector, */
251 : : /* quadrilateral, polyhedrron, tet, hex, prism, pyramid, */
252 : : /* septahedron vectors */
253 [ + + ]: 12 : for( i = 0; i < iMesh_ALL_TOPOLOGIES; i++ )
254 : : {
255 : 11 : entities = NULL;
256 : 11 : entities_alloc = 0;
257 [ + - ]: 11 : iMesh_getEntities( mesh, root_set, iBase_ALL_TYPES, i, &entities, &entities_alloc, &entities_size, &result );
258 [ - + ]: 11 : if( iBase_SUCCESS != result )
259 : : {
260 [ # # ]: 0 : printf( "Failed to get entities in adjacencies_test.\n" );
261 : 0 : return FALSE;
262 : : }
263 : :
264 [ + + ]: 11 : if( entities_alloc > 0 )
265 : : {
266 : 4 : topologies = NULL;
267 : 4 : topologies_alloc = 0;
268 : : iMesh_getEntArrTopo( mesh, entities, entities_alloc, &topologies, &topologies_alloc, &topologies_size,
269 [ + - ]: 4 : &result );
270 [ - + ]: 4 : if( iBase_SUCCESS != result )
271 : : {
272 [ # # ]: 0 : printf( "Failed to get topologies in adjacencies_test.\n" );
273 : 0 : return FALSE;
274 : : }
275 : :
276 [ - + ]: 4 : if( topologies_size != entities_size )
277 : : {
278 : : printf( "Didn't get the right number of topologies "
279 [ # # ]: 0 : "in topology_adjacency_test.\n" );
280 : 0 : free( topologies );
281 : 0 : free( entities );
282 : 0 : return FALSE;
283 : : }
284 : :
285 : : /* put entities into vectors of each topology */
286 : 4 : entity_vectors[i] = (iBase_EntityHandle*)malloc( entities_size * sizeof( iBase_EntityHandle ) );
287 : :
288 [ + + ]: 4135 : for( j = 0; j < entities_size; j++ )
289 : : {
290 [ + - ][ - + ]: 4131 : if( topologies[j] < iMesh_POINT || topologies[j] >= iMesh_ALL_TOPOLOGIES )
291 [ # # ]: 0 : printf( "Didn't find entity type for this topology." );
292 : : else
293 : : {
294 : 4131 : entity_vectors[i][entity_vectors_sizes[i]] = entities[j];
295 : 4131 : entity_vectors_sizes[i]++;
296 : : }
297 : : }
298 : :
299 : 4 : free( topologies );
300 : : }
301 : :
302 : 11 : free( entities );
303 : : }
304 : :
305 : : /* check number of entities for each topology */
306 [ + + ]: 12 : for( top_j = 0; top_j < iMesh_ALL_TOPOLOGIES; top_j++ )
307 : : {
308 : 11 : num_tops = 0;
309 [ + - ]: 11 : iMesh_getNumOfTopo( mesh, root_set, top_j, &num_tops, &result );
310 [ - + ]: 11 : if( iBase_SUCCESS != result )
311 : : {
312 [ # # ]: 0 : printf( "Failed to get number of topologies in adjacencies_test.\n" );
313 [ # # ]: 0 : for( i = 0; i < iMesh_ALL_TOPOLOGIES; i++ )
314 : 0 : free( entity_vectors[i] );
315 : 0 : return FALSE;
316 : : }
317 : :
318 [ - + ]: 11 : if( entity_vectors_sizes[top_j] != num_tops )
319 : : {
320 [ # # ]: 0 : printf( "Topology count mismatch.\n" );
321 [ # # ]: 0 : for( i = 0; i < iMesh_ALL_TOPOLOGIES; i++ )
322 : 0 : free( entity_vectors[i] );
323 : 0 : return FALSE;
324 : : }
325 : : }
326 : :
327 : : /* change if 3d topology entities are added or removed */
328 [ + + ]: 6 : for( region_type = iMesh_TETRAHEDRON; region_type < iMesh_ALL_TOPOLOGIES; region_type++ )
329 : : {
330 : : /* get all adjacent faces of regions */
331 : 5 : iBase_EntityHandle* region_vector = entity_vectors[region_type];
332 : :
333 : 5 : num_region = entity_vectors_sizes[region_type];
334 : :
335 [ + + ]: 5 : if( num_region > 0 )
336 : : {
337 : 1 : adj_faces = NULL;
338 : 1 : adj_faces_alloc = 0;
339 : 1 : face_offsets = NULL;
340 : 1 : face_offsets_alloc = 0;
341 : :
342 : : iMesh_getEntArrAdj( mesh, region_vector, num_region, iBase_FACE, &adj_faces, &adj_faces_alloc,
343 [ + - ]: 1 : &adj_faces_size, &face_offsets, &face_offsets_alloc, &face_offsets_size, &result );
344 [ - + ]: 1 : if( iBase_SUCCESS != result )
345 : : {
346 [ # # ]: 0 : printf( "Failed to get adjacent faces of regions in adjacencies_test.\n" );
347 [ # # ]: 0 : for( i = 0; i < iMesh_ALL_TOPOLOGIES; i++ )
348 : 0 : free( entity_vectors[i] );
349 : 0 : return FALSE;
350 : : }
351 : :
352 [ - + ]: 1 : if( num_region + 1 != face_offsets_size )
353 : : {
354 : : printf( "Number of offsets didn't agree with number of "
355 [ # # ]: 0 : "regions in topology_adjacency_test.\n" );
356 : 0 : free( face_offsets );
357 : 0 : free( adj_faces );
358 [ # # ]: 0 : for( i = 0; i < iMesh_ALL_TOPOLOGIES; i++ )
359 : 0 : free( entity_vectors[i] );
360 : 0 : return FALSE;
361 : : }
362 : :
363 : 1 : face_loaded = FALSE;
364 : :
365 : : /* check # of faces really loaded */
366 [ - + ]: 1 : if( region_type == iMesh_TETRAHEDRON )
367 : : {
368 [ # # ]: 0 : if( adj_faces_size == 4 * num_region ) face_loaded = TRUE;
369 : : }
370 [ + - ]: 1 : else if( region_type == iMesh_HEXAHEDRON )
371 : : {
372 [ - + ]: 1 : if( adj_faces_size == 6 * num_region ) face_loaded = TRUE;
373 : : }
374 [ # # ]: 0 : else if( region_type == iMesh_PRISM )
375 : : {
376 [ # # ]: 0 : if( adj_faces_size == 5 * num_region ) face_loaded = TRUE;
377 : : }
378 [ # # ]: 0 : else if( region_type == iMesh_PYRAMID )
379 : : {
380 [ # # ]: 0 : if( adj_faces_size == 5 * num_region ) face_loaded = TRUE;
381 : : }
382 [ # # ]: 0 : else if( region_type == iMesh_SEPTAHEDRON )
383 : : {
384 [ # # ]: 0 : if( adj_faces_size == 7 * num_region ) face_loaded = TRUE;
385 : : }
386 : : else
387 : 0 : face_loaded = FALSE;
388 : :
389 : : /* get all adjacent regions of adjacent faces */
390 : 1 : adj_regions = NULL;
391 : 1 : adj_regions_alloc = 0;
392 : 1 : region_offsets = NULL;
393 : 1 : region_offsets_alloc = 0;
394 : : iMesh_getEntArrAdj( mesh, adj_faces, adj_faces_size, iBase_REGION, &adj_regions, &adj_regions_alloc,
395 : : &adj_regions_size, ®ion_offsets, ®ion_offsets_alloc, ®ion_offsets_size,
396 [ + - ]: 1 : &result );
397 [ - + ]: 1 : if( iBase_SUCCESS != result )
398 : : {
399 [ # # ]: 0 : printf( "Failed to get regions from faces in adjacencies_test.\n" );
400 : 0 : free( face_offsets );
401 : 0 : free( adj_faces );
402 [ # # ]: 0 : for( i = 0; i < iMesh_ALL_TOPOLOGIES; i++ )
403 : 0 : free( entity_vectors[i] );
404 : 0 : return FALSE;
405 : : }
406 : :
407 [ - + ]: 1 : if( adj_faces_size + 1 != region_offsets_size )
408 : : {
409 : : printf( "Number of offsets didn't agree with number of faces in "
410 [ # # ]: 0 : "topology_adjacency_test.\n" );
411 : 0 : free( face_offsets );
412 : 0 : free( region_offsets );
413 : 0 : free( adj_faces );
414 : 0 : free( adj_regions );
415 [ # # ]: 0 : for( i = 0; i < iMesh_ALL_TOPOLOGIES; i++ )
416 : 0 : free( entity_vectors[i] );
417 : 0 : return FALSE;
418 : : }
419 : :
420 : 1 : interior = (iBase_EntityHandle*)malloc( adj_faces_size * sizeof( iBase_EntityHandle ) ),
421 : 1 : exterior = (iBase_EntityHandle*)malloc( adj_faces_size * sizeof( iBase_EntityHandle ) );
422 : 1 : num_int = 0;
423 : 1 : num_ext = 0;
424 : :
425 : : /* find the interior faces having two adjacent regions */
426 [ + + ]: 601 : for( i = 0; i < adj_faces_size; i++ )
427 : : {
428 : 600 : next_offset = 0;
429 [ + + ]: 600 : if( i == adj_faces_size - 1 )
430 : 1 : next_offset = adj_regions_size;
431 : : else
432 : 599 : next_offset = region_offsets[i + 1];
433 : :
434 [ - + ]: 600 : if( next_offset - region_offsets[i] == 2 )
435 : : {
436 : 0 : found = FALSE;
437 [ # # ]: 0 : for( iter = 0; iter < num_int; iter++ )
438 : : {
439 [ # # ]: 0 : if( interior[iter] == adj_faces[i] )
440 : : {
441 : 0 : found = TRUE;
442 : 0 : break;
443 : : }
444 : : }
445 [ # # ]: 0 : if( !found ) interior[num_int++] = adj_faces[i];
446 : : }
447 : : }
448 : :
449 : : /* now remove any interior faces from the previous adjacent faces list */
450 : : /* and we should be left with exterior faces */
451 [ + + ]: 601 : for( i = 0; i < adj_faces_size; i++ )
452 : : {
453 : 600 : found = FALSE;
454 [ - + ]: 600 : for( iter = 0; iter < num_int; iter++ )
455 : : {
456 [ # # ]: 0 : if( interior[iter] == adj_faces[i] )
457 : : {
458 : 0 : found = TRUE;
459 : 0 : break;
460 : : }
461 : : }
462 [ + - ]: 600 : if( !found ) exterior[num_ext++] = adj_faces[i];
463 : : }
464 : :
465 : 1 : num_faces_per_region = face_offsets[1] - face_offsets[0];
466 : :
467 : : /* check # of exterior and interior faces */
468 : : /* should be #exterior_faces + 2 * #interior_faces = #faces_per_region */
469 : : /* * #regions */
470 [ - + ]: 1 : if( face_loaded )
471 : : {
472 [ # # ]: 0 : if( num_ext + 2 * num_int != num_faces_per_region * num_region )
473 : : {
474 : : printf( "exterior/interior failure: %d ext, %d int, %d regions, %d faces per\n", num_ext, num_int,
475 [ # # ]: 0 : num_region, num_faces_per_region );
476 : 0 : free( face_offsets );
477 : 0 : free( region_offsets );
478 : 0 : free( adj_faces );
479 : 0 : free( adj_regions );
480 : 0 : free( interior );
481 : 0 : free( exterior );
482 [ # # ]: 0 : for( i = 0; i < iMesh_ALL_TOPOLOGIES; i++ )
483 : 0 : free( entity_vectors[i] );
484 : 0 : return FALSE;
485 : : }
486 : : }
487 : :
488 : 1 : free( face_offsets );
489 : 1 : free( region_offsets );
490 : 1 : free( adj_faces );
491 : 1 : free( adj_regions );
492 : 1 : free( interior );
493 : 1 : free( exterior );
494 : : }
495 : : }
496 : :
497 [ + + ]: 12 : for( i = 0; i < iMesh_ALL_TOPOLOGIES; i++ )
498 : 11 : free( entity_vectors[i] );
499 : :
500 : 1 : return TRUE;
501 : : }
502 : :
503 : 27024 : int qsort_comp_handles( const void* h1, const void* h2 )
504 : : {
505 : 27024 : return *(char**)h1 - *(char**)h2;
506 : : }
507 : :
508 : : /*!
509 : : @test
510 : : TSTT EntityType Connectivity Test
511 : : @li Get coordinates for all type enities
512 : : */
513 : :
514 : 1 : int entity_connectivity_test( iMesh_Instance mesh )
515 : : {
516 : : int type, result;
517 : : int *offsets, offsets_alloc, offsets_size;
518 : : int *indices, indices_alloc, indices_size;
519 : : iBase_EntityHandle *entities, *adj_ents, *entities2, *sorted;
520 : : int entities_alloc, entities_size, adj_ents_alloc, adj_ents_size;
521 : : int entities2_alloc, entities2_size;
522 : 1 : iBase_EntityHandle adj_ents2[27], *adj_ents2_ptr = adj_ents2;
523 : 1 : int adj_ents2_alloc = 27, adj_ents2_size, i, size;
524 : :
525 [ + + ]: 4 : for( type = iBase_EDGE; type < iBase_ALL_TYPES; type++ )
526 : : {
527 : 3 : entities = NULL;
528 : 3 : entities_alloc = 0;
529 : 3 : adj_ents = NULL;
530 : 3 : adj_ents_alloc = 0;
531 : 3 : indices = NULL;
532 : 3 : indices_alloc = 0;
533 : 3 : offsets = NULL;
534 : 3 : offsets_alloc = 0;
535 : : iMesh_getAdjEntIndices( mesh, root_set, type, iMesh_ALL_TOPOLOGIES, iBase_VERTEX, &entities, &entities_alloc,
536 : : &entities_size, &adj_ents, &adj_ents_alloc, &adj_ents_size, &indices, &indices_alloc,
537 [ + - ]: 3 : &indices_size, &offsets, &offsets_alloc, &offsets_size, &result );
538 [ - + ]: 3 : if( iBase_SUCCESS != result )
539 : : {
540 [ # # ]: 0 : printf( "Failed to get indices of vertices in connectivity_test, type=%d.\n", type );
541 : 0 : return FALSE;
542 : : }
543 : :
544 [ - + ]: 3 : if( entities_alloc != entities_size )
545 : : {
546 [ # # ]: 0 : printf( "Number of entities didn't agree with array size in connectivity_test.\n" );
547 : 0 : free( entities );
548 : 0 : free( adj_ents );
549 : 0 : free( indices );
550 : 0 : free( offsets );
551 : 0 : return FALSE;
552 : : }
553 : :
554 [ - + ]: 3 : if( offsets_alloc != offsets_size )
555 : : {
556 [ # # ]: 0 : printf( "Number of offsets didn't agree with array size in connectivity_test.\n" );
557 : 0 : free( entities );
558 : 0 : free( adj_ents );
559 : 0 : free( indices );
560 : 0 : free( offsets );
561 : 0 : return FALSE;
562 : : }
563 : :
564 [ - + ]: 3 : if( indices_alloc != indices_size )
565 : : {
566 [ # # ]: 0 : printf( "Number of indices didn't agree with array size in connectivity_test.\n" );
567 : 0 : free( entities );
568 : 0 : free( adj_ents );
569 : 0 : free( indices );
570 : 0 : free( offsets );
571 : 0 : return FALSE;
572 : : }
573 : :
574 [ - + ]: 3 : if( adj_ents_alloc != adj_ents_size )
575 : : {
576 : : printf( "Number of adjacent entities didn't agree with array size in "
577 [ # # ]: 0 : "connectivity_test.\n" );
578 : 0 : free( entities );
579 : 0 : free( adj_ents );
580 : 0 : free( indices );
581 : 0 : free( offsets );
582 : 0 : return FALSE;
583 : : }
584 : :
585 [ - + ]: 3 : if( offsets_size != entities_size + 1 )
586 : : {
587 [ # # ]: 0 : printf( "Invalid/inconsistent offset size from iMesh_getAdjEntIndices.\n" );
588 : 0 : free( entities );
589 : 0 : free( adj_ents );
590 : 0 : free( indices );
591 : 0 : free( offsets );
592 : 0 : return FALSE;
593 : : }
594 : :
595 : : /* check that results are valid */
596 [ + + ]: 2803 : for( i = 0; i < entities_size; ++i )
597 : : {
598 [ + - ][ - + ]: 2800 : ASSERT( offsets[i] < offsets[i + 1] && offsets[i] < indices_size );
[ # # ]
599 [ - + ]: 2800 : if( !assert_pass )
600 : : {
601 : 0 : free( entities );
602 : 0 : free( adj_ents );
603 : 0 : free( indices );
604 : 0 : free( offsets );
605 : 0 : return FALSE;
606 : : }
607 : : }
608 : :
609 [ + + ]: 12803 : for( i = 0; i < indices_size; ++i )
610 : : {
611 [ + - ][ - + ]: 12800 : ASSERT( indices[i] >= 0 && indices[i] < adj_ents_size );
[ # # ]
612 [ - + ]: 12800 : if( !assert_pass )
613 : : {
614 : 0 : free( entities );
615 : 0 : free( adj_ents );
616 : 0 : free( indices );
617 : 0 : free( offsets );
618 : 0 : return FALSE;
619 : : }
620 : : }
621 : :
622 : : /* compare initial entity list against result of iMesh_getEntities */
623 : 3 : entities2 = NULL;
624 : 3 : entities2_alloc = 0;
625 : : iMesh_getEntities( mesh, root_set, type, iMesh_ALL_TOPOLOGIES, &entities2, &entities2_alloc, &entities2_size,
626 [ + - ]: 3 : &result );
627 [ - + ][ # # ]: 3 : ASSERT( iBase_SUCCESS == result );
628 [ - + ]: 3 : if( !assert_pass )
629 : : {
630 : 0 : free( entities );
631 : 0 : free( adj_ents );
632 : 0 : free( indices );
633 : 0 : free( offsets );
634 : 0 : return FALSE;
635 : : }
636 : :
637 : 3 : size = sizeof( iBase_EntityHandle ) * entities_size;
638 : 3 : sorted = (iBase_EntityHandle*)malloc( size );
639 : 3 : memcpy( sorted, entities, size );
640 [ + - ]: 3 : qsort( sorted, entities_size, sizeof( iBase_EntityHandle ), &qsort_comp_handles );
641 [ + - ]: 3 : qsort( entities2, entities2_size, sizeof( iBase_EntityHandle ), &qsort_comp_handles );
642 : :
643 [ + - ][ - + ]: 3 : ASSERT( entities_size == entities2_size && !memcmp( sorted, entities2, size ) );
[ # # ]
644 [ - + ]: 3 : if( !assert_pass )
645 : : {
646 : 0 : free( entities );
647 : 0 : free( adj_ents );
648 : 0 : free( indices );
649 : 0 : free( offsets );
650 : 0 : free( entities2 );
651 : 0 : free( sorted );
652 : 0 : return FALSE;
653 : : }
654 : :
655 : 3 : free( entities2 );
656 : 3 : free( sorted );
657 : :
658 : : /* compare results against output of iMesh_getEntAdj */
659 [ + + ]: 2803 : for( i = 0; i < entities_size; ++i )
660 : : {
661 : 2800 : iMesh_getEntAdj( mesh, entities[i], iBase_VERTEX, &adj_ents2_ptr, &adj_ents2_alloc, &adj_ents2_size,
662 [ + - ]: 2800 : &result );
663 [ - + ][ # # ]: 2800 : ASSERT( iBase_SUCCESS == result );
664 [ - + ]: 2800 : if( !assert_pass )
665 : : {
666 : 0 : free( entities );
667 : 0 : free( adj_ents );
668 : 0 : free( indices );
669 : 0 : free( offsets );
670 : 0 : return FALSE;
671 : : }
672 : :
673 [ - + ][ # # ]: 2800 : ASSERT( adj_ents2_ptr == adj_ents2 ); /* shouldn't change */
674 [ - + ]: 2800 : if( !assert_pass )
675 : : {
676 : 0 : free( entities );
677 : 0 : free( adj_ents );
678 : 0 : free( indices );
679 : 0 : free( offsets );
680 : 0 : return FALSE;
681 : : }
682 : :
683 [ - + ][ # # ]: 2800 : ASSERT( adj_ents2_alloc == 27 ); /* shouldn't change */
684 [ - + ]: 2800 : if( !assert_pass )
685 : : {
686 : 0 : free( entities );
687 : 0 : free( adj_ents );
688 : 0 : free( indices );
689 : 0 : free( offsets );
690 : 0 : return FALSE;
691 : : }
692 : :
693 : : /* compare results */
694 : 2800 : size = offsets[i + 1] - offsets[i];
695 [ - + ][ # # ]: 2800 : ASSERT( size == adj_ents2_size );
696 [ + + ]: 15600 : while( --size >= 0 )
697 : : {
698 [ - + ][ # # ]: 12800 : ASSERT( adj_ents2[size] == adj_ents[indices[offsets[i] + size]] );
699 [ - + ]: 12800 : if( !assert_pass )
700 : : {
701 : 0 : free( entities );
702 : 0 : free( adj_ents );
703 : 0 : free( indices );
704 : 0 : free( offsets );
705 : 0 : return FALSE;
706 : : }
707 : : }
708 : : }
709 : :
710 : 3 : free( entities );
711 : 3 : free( adj_ents );
712 : 3 : free( indices );
713 : 3 : free( offsets );
714 : :
715 : : /*
716 : : offsets = NULL;
717 : : offsets_alloc = 0;
718 : : entities = NULL;
719 : : entities_alloc = 0;
720 : :
721 : : iMesh_getAdjEntities(mesh, root_set, type,
722 : : iMesh_ALL_TOPOLOGIES, iBase_VERTEX,
723 : : &entities, &entities_alloc, &entities_size,
724 : : &offsets, &offsets_alloc, &offsets_size,
725 : : &result);
726 : : if (iBase_SUCCESS != result) {
727 : : printf("Failed to get indices of adjacent entity vertices in connectivity_test.\n");
728 : : return FALSE;
729 : : }
730 : :
731 : : if (entities_alloc != entities_size ||
732 : : offsets_alloc != offsets_size) {
733 : : printf("Number of elements didn't agree with array size for an array in
734 : : connectivity_test.\n"); return FALSE;
735 : : }
736 : :
737 : : free(offsets);
738 : : free(entities);
739 : : */
740 : : }
741 : :
742 : 1 : return TRUE;
743 : : }
744 : :
745 : : /*!
746 : : @test
747 : : TSTT entity sets sub test
748 : : @li Check entity sets
749 : : */
750 : :
751 : : /* helper function used to report errors in # sets */
752 : : int check_esets( iMesh_Instance mesh, const int num_sets );
753 : :
754 : 2 : int entity_sets_subtest( iMesh_Instance mesh, int is_list, int /*num_iter*/ )
755 : : {
756 : 2 : int i, num_type = iBase_ALL_TYPES - iBase_VERTEX;
757 : : // int num_all_entities_super = 0;
758 : : iBase_EntitySetHandle es_array[iBase_ALL_TYPES - iBase_VERTEX];
759 : : int number_array[iBase_ALL_TYPES - iBase_VERTEX];
760 : 2 : int ent_type = iBase_VERTEX;
761 : 2 : iBase_EntityHandle* entities = NULL;
762 : 2 : int entities_alloc = 0, entities_size;
763 : 2 : iBase_EntitySetHandle parent_child, super_set = NULL;
764 : : iBase_EntitySetHandle temp_es1, temp_es2, temp_es3;
765 : 2 : iBase_EntityHandle *edges = NULL, *faces = NULL, *temp_entities1 = NULL, *temp_entities2 = NULL;
766 : 2 : int edges_alloc = 0, faces_alloc = 0, temp_entities1_alloc = 0, temp_entities2_alloc = 0;
767 : : int edges_size, faces_size, temp_entities1_size, temp_entities2_size;
768 : 2 : int* types = NULL;
769 : 2 : int types_alloc = 0, types_size;
770 : : int num_rest, num_regions;
771 : 2 : iBase_EntityHandle* regions = NULL;
772 : 2 : int regions_alloc = 0, regions_size;
773 : 2 : iBase_EntitySetHandle* parents = NULL;
774 : 2 : int parents_alloc = 0, parents_size, temp_numb, is_child;
775 : 2 : iBase_EntitySetHandle* es_array1 = NULL;
776 : 2 : int es_array1_alloc = 0, es_array1_size, num_super;
777 : 2 : iBase_EntityHandle* all_entities = NULL;
778 : 2 : int all_entities_alloc = 0, all_entities_size, k, l;
779 : 2 : iBase_EntityHandle* adj_faces = NULL;
780 : 2 : int adj_faces_alloc = 0, adj_faces_size;
781 : 2 : int* face_offsets = NULL;
782 : 2 : int face_offsets_alloc = 0, face_offsets_size;
783 : 2 : iBase_EntityHandle* hexes = NULL;
784 : 2 : int hexes_alloc = 0, hexes_size;
785 : : iBase_EntitySetHandle hex_set;
786 : :
787 : : /* get the number of whole mesh */
788 : 2 : int n_whole_mesh = 0;
789 : : int result;
790 [ + - ]: 2 : iMesh_getNumEntSets( mesh, root_set, 1, &n_whole_mesh, &result );
791 [ - + ]: 2 : if( iBase_SUCCESS != result )
792 : : {
793 [ # # ]: 0 : printf( "Problem to get the number of all entity sets in whole mesh.\n" );
794 : 0 : return FALSE;
795 : : }
796 : :
797 : : /* add entities to entitysets by type */
798 [ + + ]: 10 : for( ; ent_type < num_type; ent_type++ )
799 : : {
800 : : /* initialize the entityset */
801 [ + - ]: 8 : iMesh_createEntSet( mesh, is_list, &es_array[ent_type], &result );
802 [ - + ]: 8 : if( iBase_SUCCESS != result )
803 : : {
804 [ # # ]: 0 : printf( "Problem creating entityset.\n" );
805 : 0 : return FALSE;
806 : : }
807 : :
808 : : /* get entities by type in total "mesh" */
809 : 8 : entities = NULL;
810 : 8 : entities_alloc = 0;
811 : : iMesh_getEntities( mesh, root_set, ent_type, iMesh_ALL_TOPOLOGIES, &entities, &entities_alloc, &entities_size,
812 [ + - ]: 8 : &result );
813 [ - + ]: 8 : if( iBase_SUCCESS != result )
814 : : {
815 [ # # ]: 0 : printf( "Failed to get entities by type in entity_sets_test.\n" );
816 : 0 : return FALSE;
817 : : }
818 : :
819 [ - + ]: 8 : if( entities_alloc != entities_size )
820 : : {
821 [ # # ]: 0 : printf( "Number of entities didn't agree with array size in entity_sets_subtest.\n" );
822 : 0 : free( entities );
823 : 0 : return FALSE;
824 : : }
825 : :
826 : : /* add entities into entity set */
827 [ + - ]: 8 : if( 0 != entities_size )
828 : : {
829 [ + - ]: 8 : iMesh_addEntArrToSet( mesh, entities, entities_size, es_array[ent_type], &result );
830 [ - + ]: 8 : if( iBase_SUCCESS != result )
831 : : {
832 [ # # ]: 0 : printf( "Failed to add entities in entity_sets_test.\n" );
833 : 0 : free( entities );
834 : 0 : return FALSE;
835 : : }
836 : : }
837 : :
838 : : /* Check to make sure entity set really has correct number of entities in it */
839 [ + - ]: 8 : iMesh_getNumOfType( mesh, es_array[ent_type], ent_type, number_array + ent_type, &result );
840 : :
841 [ - + ]: 8 : if( iBase_SUCCESS != result )
842 : : {
843 [ # # ]: 0 : printf( "Failed to get number of entities by type in entity_sets_test.\n" );
844 : 0 : free( entities );
845 : 0 : return FALSE;
846 : : }
847 : :
848 : : /* compare the number of entities by type */
849 [ - + ]: 8 : if( number_array[ent_type] != entities_size )
850 : : {
851 [ # # ]: 0 : printf( "Number of entities by type is not correct\n" );
852 : 0 : free( entities );
853 : 0 : return FALSE;
854 : : }
855 : :
856 : : /* add to number of all entities in super set */
857 : : // num_all_entities_super += entities_size;
858 : :
859 : 8 : free( entities );
860 : : }
861 : :
862 [ + - ][ - + ]: 2 : if( !check_esets( mesh, n_whole_mesh + num_type ) ) return FALSE;
863 : :
864 : : /* make a super set having all entitysets */
865 : 2 : super_set = NULL;
866 [ + - ]: 2 : iMesh_createEntSet( mesh, is_list, &super_set, &result );
867 [ - + ]: 2 : if( iBase_SUCCESS != result )
868 : : {
869 [ # # ]: 0 : printf( "Failed to create a super set in entity_sets_test.\n" );
870 : 0 : return FALSE;
871 : : }
872 : :
873 [ + + ]: 10 : for( i = 0; i < num_type; i++ )
874 : : {
875 [ + - ]: 8 : iMesh_addEntSet( mesh, es_array[i], super_set, &result );
876 [ - + ]: 8 : if( iBase_SUCCESS != result )
877 : : {
878 [ # # ]: 0 : printf( "Failed to add a set to a super set in entity_sets_test.\n" );
879 : 0 : return FALSE;
880 : : }
881 : : }
882 : :
883 [ + - ][ - + ]: 2 : if( !check_esets( mesh, n_whole_mesh + num_type + 1 ) ) return FALSE;
884 : :
885 : : /*----------TEST intEAN OPERATIONS----------------*/
886 : :
887 [ + - ]: 2 : iMesh_createEntSet( mesh, is_list, &temp_es1, &result );
888 [ - + ]: 2 : if( iBase_SUCCESS != result )
889 : : {
890 [ # # ]: 0 : printf( "Failed to create a super set in entity_sets_test.\n" );
891 : 0 : return FALSE;
892 : : }
893 : :
894 [ + - ][ - + ]: 2 : if( !check_esets( mesh, n_whole_mesh + num_type + 2 ) ) { return FALSE; }
895 : :
896 : : /* Subtract */
897 : : /* add all EDGEs and FACEs to temp_es1 */
898 : : /* get all EDGE entities */
899 : 2 : edges = NULL;
900 : 2 : edges_alloc = 0;
901 : : iMesh_getEntities( mesh, es_array[iBase_EDGE], iBase_EDGE, iMesh_ALL_TOPOLOGIES, &edges, &edges_alloc, &edges_size,
902 [ + - ]: 2 : &result );
903 : :
904 [ - + ]: 2 : if( iBase_SUCCESS != result )
905 : : {
906 [ # # ]: 0 : printf( "Failed to get edge entities in entity_sets_test.\n" );
907 : 0 : return FALSE;
908 : : }
909 : :
910 : : /* add EDGEs to es1 */
911 [ + - ]: 2 : iMesh_addEntArrToSet( mesh, edges, edges_size, temp_es1, &result );
912 [ - + ]: 2 : if( iBase_SUCCESS != result )
913 : : {
914 [ # # ]: 0 : printf( "Failed to add edge entities in entity_sets_test.\n" );
915 : 0 : free( edges );
916 : 0 : return FALSE;
917 : : }
918 : :
919 : : /* get all FACE entities */
920 : 2 : faces = NULL;
921 : 2 : faces_alloc = 0;
922 : : iMesh_getEntities( mesh, es_array[iBase_FACE], iBase_FACE, iMesh_ALL_TOPOLOGIES, &faces, &faces_alloc, &faces_size,
923 [ + - ]: 2 : &result );
924 [ - + ]: 2 : if( iBase_SUCCESS != result )
925 : : {
926 [ # # ]: 0 : printf( "Failed to get face entities in entity_sets_test.\n" );
927 : 0 : free( edges );
928 : 0 : return FALSE;
929 : : }
930 : :
931 : : /* add FACEs to es1 */
932 [ + - ]: 2 : iMesh_addEntArrToSet( mesh, faces, faces_size, temp_es1, &result );
933 [ - + ]: 2 : if( iBase_SUCCESS != result )
934 : : {
935 [ # # ]: 0 : printf( "Failed to add face entities in entity_sets_test.\n" );
936 : 0 : free( edges );
937 : 0 : free( faces );
938 : 0 : return FALSE;
939 : : }
940 : :
941 : : /* subtract EDGEs */
942 : :
943 [ + - ]: 2 : iMesh_subtract( mesh, temp_es1, es_array[iBase_EDGE], &temp_es2, &result );
944 [ - + ]: 2 : if( iBase_SUCCESS != result )
945 : : {
946 [ # # ]: 0 : printf( "Failed to subtract entitysets in entity_sets_test.\n" );
947 : 0 : free( edges );
948 : 0 : free( faces );
949 : 0 : return FALSE;
950 : : }
951 : :
952 : 2 : temp_entities1 = NULL;
953 : 2 : temp_entities1_alloc = 0;
954 : : iMesh_getEntities( mesh, temp_es2, iBase_FACE, iMesh_ALL_TOPOLOGIES, &temp_entities1, &temp_entities1_alloc,
955 [ + - ]: 2 : &temp_entities1_size, &result );
956 [ - + ]: 2 : if( iBase_SUCCESS != result )
957 : : {
958 [ # # ]: 0 : printf( "Failed to get face entities in entity_sets_test.\n" );
959 : 0 : free( edges );
960 : 0 : free( faces );
961 : 0 : return FALSE;
962 : : }
963 : :
964 [ - + ]: 2 : if( faces_size != temp_entities1_size )
965 : : {
966 : : printf( "not match number of entitysets after subtraction "
967 [ # # ]: 0 : "in entity_sets_test.\n" );
968 : 0 : free( edges );
969 : 0 : free( faces );
970 : 0 : free( temp_entities1 );
971 : 0 : return FALSE;
972 : : }
973 : :
974 : : /* check there's nothing but faces in face_es */
975 : 2 : types = NULL;
976 : 2 : types_alloc = 0;
977 [ + - ]: 2 : iMesh_getEntArrType( mesh, temp_entities1, temp_entities1_size, &types, &types_alloc, &types_size, &result );
978 [ - + ]: 2 : if( iBase_SUCCESS != result )
979 : : {
980 [ # # ]: 0 : printf( "Failed to get types of entities in entity_sets_test.\n" );
981 : 0 : free( edges );
982 : 0 : free( faces );
983 : 0 : free( temp_entities1 );
984 : 0 : return FALSE;
985 : : }
986 [ + + ]: 1202 : for( i = 0; i < types_size; i++ )
987 : : {
988 [ - + ]: 1200 : if( types[i] != iBase_FACE )
989 : : {
990 [ # # ]: 0 : printf( "wrong entity type for face test in entity_sets_test.\n" );
991 : 0 : free( edges );
992 : 0 : free( faces );
993 : 0 : free( temp_entities1 );
994 : 0 : free( types );
995 : 0 : return FALSE;
996 : : }
997 : : }
998 : :
999 [ + - ]: 2 : iMesh_destroyEntSet( mesh, temp_es2, &result );
1000 [ - + ]: 2 : if( iBase_SUCCESS != result )
1001 : : {
1002 [ # # ]: 0 : printf( "Failed to destroy temp es2.\n" );
1003 : 0 : free( edges );
1004 : 0 : free( faces );
1005 : 0 : free( temp_entities1 );
1006 : 0 : free( types );
1007 : 0 : return FALSE;
1008 : : }
1009 : :
1010 [ + - ][ - + ]: 2 : if( !check_esets( mesh, n_whole_mesh + num_type + 2 ) )
1011 : : {
1012 : 0 : free( edges );
1013 : 0 : free( faces );
1014 : 0 : free( temp_entities1 );
1015 : 0 : free( types );
1016 : 0 : return FALSE;
1017 : : }
1018 : :
1019 : : /*------------Intersect------------ */
1020 : :
1021 : : /* clean out the temp_ms1 */
1022 [ + - ]: 2 : iMesh_rmvEntArrFromSet( mesh, faces, faces_size, temp_es1, &result );
1023 [ - + ]: 2 : if( iBase_SUCCESS != result )
1024 : : {
1025 [ # # ]: 0 : printf( "Failed to remove face entities in entity_sets_test.\n" );
1026 : 0 : free( edges );
1027 : 0 : free( faces );
1028 : 0 : free( temp_entities1 );
1029 : 0 : free( types );
1030 : 0 : return FALSE;
1031 : : }
1032 : :
1033 : : /* check if it is really cleaned out */
1034 [ + - ]: 2 : iMesh_getNumOfType( mesh, temp_es1, iBase_FACE, &num_rest, &result );
1035 [ - + ]: 2 : if( iBase_SUCCESS != result )
1036 : : {
1037 [ # # ]: 0 : printf( "Failed to get number of entities by type in entity_sets_test.\n" );
1038 : 0 : free( edges );
1039 : 0 : free( faces );
1040 : 0 : free( temp_entities1 );
1041 : 0 : free( types );
1042 : 0 : return FALSE;
1043 : : }
1044 : :
1045 [ - + ]: 2 : if( num_rest != 0 )
1046 : : {
1047 [ # # ]: 0 : printf( "failed to remove correctly.\n" );
1048 : 0 : free( edges );
1049 : 0 : free( faces );
1050 : 0 : free( temp_entities1 );
1051 : 0 : free( types );
1052 : 0 : return FALSE;
1053 : : }
1054 : :
1055 : : /* add EDGEs to temp es1 */
1056 [ + - ]: 2 : iMesh_addEntArrToSet( mesh, edges, edges_size, temp_es1, &result );
1057 [ - + ]: 2 : if( iBase_SUCCESS != result )
1058 : : {
1059 [ # # ]: 0 : printf( "Failed to add edge entities in entity_sets_test.\n" );
1060 : 0 : free( edges );
1061 : 0 : free( faces );
1062 : 0 : free( temp_entities1 );
1063 : 0 : free( types );
1064 : 0 : return FALSE;
1065 : : }
1066 : :
1067 : : /* add FACEs to temp es1 */
1068 [ + - ]: 2 : iMesh_addEntArrToSet( mesh, faces, faces_size, temp_es1, &result );
1069 [ - + ]: 2 : if( iBase_SUCCESS != result )
1070 : : {
1071 [ # # ]: 0 : printf( "Failed to add edge entities in entity_sets_test.\n" );
1072 : 0 : free( edges );
1073 : 0 : free( faces );
1074 : 0 : free( temp_entities1 );
1075 : 0 : free( types );
1076 : 0 : return FALSE;
1077 : : }
1078 : :
1079 : : /* intersect temp_es1 with edges meshset */
1080 : : /* temp_ms1 entityset is altered */
1081 [ + - ]: 2 : iMesh_intersect( mesh, temp_es1, es_array[iBase_EDGE], &temp_es2, &result );
1082 [ - + ]: 2 : if( iBase_SUCCESS != result )
1083 : : {
1084 [ # # ]: 0 : printf( "Failed to intersect in entity_sets_test.\n" );
1085 : 0 : free( edges );
1086 : 0 : free( faces );
1087 : 0 : free( temp_entities1 );
1088 : 0 : free( types );
1089 : 0 : return FALSE;
1090 : : }
1091 : :
1092 : 2 : temp_entities2 = NULL;
1093 : 2 : temp_entities2_alloc = 0;
1094 : : iMesh_getEntities( mesh, temp_es2, iBase_FACE, iMesh_ALL_TOPOLOGIES, &temp_entities2, &temp_entities2_alloc,
1095 [ + - ]: 2 : &temp_entities2_size, &result );
1096 [ - + ]: 2 : if( iBase_SUCCESS != result )
1097 : : {
1098 [ # # ]: 0 : printf( "Failed to get face entities in entity_sets_test.\n" );
1099 : 0 : free( edges );
1100 : 0 : free( faces );
1101 : 0 : free( temp_entities1 );
1102 : 0 : free( types );
1103 : 0 : return FALSE;
1104 : : }
1105 : :
1106 [ - + ]: 2 : if( temp_entities2_size != 0 )
1107 : : {
1108 [ # # ]: 0 : printf( "wrong number of faces.\n" );
1109 : 0 : free( edges );
1110 : 0 : free( faces );
1111 : 0 : free( temp_entities1 );
1112 : 0 : free( temp_entities2 );
1113 : 0 : free( types );
1114 : 0 : return FALSE;
1115 : : }
1116 : :
1117 [ + - ]: 2 : iMesh_destroyEntSet( mesh, temp_es2, &result );
1118 [ - + ]: 2 : if( iBase_SUCCESS != result )
1119 : : {
1120 [ # # ]: 0 : printf( "Failed to destroy temp es2.\n" );
1121 : 0 : free( edges );
1122 : 0 : free( faces );
1123 : 0 : free( temp_entities1 );
1124 : 0 : free( temp_entities2 );
1125 : 0 : free( types );
1126 : 0 : return FALSE;
1127 : : }
1128 : :
1129 [ + - ][ - + ]: 2 : if( !check_esets( mesh, n_whole_mesh + num_type + 2 ) )
1130 : : {
1131 : 0 : free( edges );
1132 : 0 : free( faces );
1133 : 0 : free( temp_entities1 );
1134 : 0 : free( temp_entities2 );
1135 : 0 : free( types );
1136 : 0 : return FALSE;
1137 : : }
1138 : :
1139 : : /*-------------Unite-------------- */
1140 : :
1141 [ + - ]: 2 : iMesh_createEntSet( mesh, is_list, &temp_es2, &result );
1142 [ - + ]: 2 : if( iBase_SUCCESS != result )
1143 : : {
1144 [ # # ]: 0 : printf( "Failed to create a temp entityset in entity_sets_test.\n" );
1145 : 0 : free( edges );
1146 : 0 : free( faces );
1147 : 0 : free( temp_entities1 );
1148 : 0 : free( temp_entities2 );
1149 : 0 : free( types );
1150 : 0 : return FALSE;
1151 : : }
1152 : :
1153 : : /* get all regions */
1154 : 2 : regions = NULL;
1155 : 2 : regions_alloc = 0;
1156 : : iMesh_getEntities( mesh, es_array[iBase_REGION], iBase_REGION, iMesh_ALL_TOPOLOGIES, ®ions, ®ions_alloc,
1157 [ + - ]: 2 : ®ions_size, &result );
1158 [ - + ]: 2 : if( iBase_SUCCESS != result )
1159 : : {
1160 [ # # ]: 0 : printf( "Failed to get region entities in entity_sets_test.\n" );
1161 : 0 : free( edges );
1162 : 0 : free( faces );
1163 : 0 : free( temp_entities1 );
1164 : 0 : free( temp_entities2 );
1165 : 0 : free( types );
1166 : 0 : return FALSE;
1167 : : }
1168 : :
1169 : : /* add REGIONs to temp es2 */
1170 [ + - ]: 2 : iMesh_addEntArrToSet( mesh, regions, regions_size, temp_es2, &result );
1171 [ - + ]: 2 : if( iBase_SUCCESS != result )
1172 : : {
1173 [ # # ]: 0 : printf( "Failed to add region entities in entity_sets_test.\n" );
1174 : 0 : free( edges );
1175 : 0 : free( faces );
1176 : 0 : free( temp_entities1 );
1177 : 0 : free( temp_entities2 );
1178 : 0 : free( types );
1179 : 0 : free( regions );
1180 : 0 : return FALSE;
1181 : : }
1182 : :
1183 : : /* unite temp_es1 and temp_es2 */
1184 [ + - ]: 2 : iMesh_unite( mesh, temp_es1, temp_es2, &temp_es3, &result );
1185 [ - + ]: 2 : if( iBase_SUCCESS != result )
1186 : : {
1187 [ # # ]: 0 : printf( "Failed to unite in entity_sets_test.\n" );
1188 : 0 : free( edges );
1189 : 0 : free( faces );
1190 : 0 : free( temp_entities1 );
1191 : 0 : free( temp_entities2 );
1192 : 0 : free( types );
1193 : 0 : free( regions );
1194 : 0 : return FALSE;
1195 : : }
1196 : :
1197 : : /* perform the check */
1198 [ + - ]: 2 : iMesh_getNumOfType( mesh, temp_es3, iBase_REGION, &num_regions, &result );
1199 [ - + ]: 2 : if( iBase_SUCCESS != result )
1200 : : {
1201 [ # # ]: 0 : printf( "Failed to get number of region entities by type in entity_sets_test.\n" );
1202 : 0 : free( edges );
1203 : 0 : free( faces );
1204 : 0 : free( temp_entities1 );
1205 : 0 : free( temp_entities2 );
1206 : 0 : free( types );
1207 : 0 : free( regions );
1208 : 0 : return FALSE;
1209 : : }
1210 : :
1211 [ - + ]: 2 : if( num_regions != number_array[iBase_REGION] )
1212 : : {
1213 [ # # ]: 0 : printf( "different number of regions in entity_sets_test.\n" );
1214 : 0 : free( edges );
1215 : 0 : free( faces );
1216 : 0 : free( temp_entities1 );
1217 : 0 : free( temp_entities2 );
1218 : 0 : free( types );
1219 : 0 : free( regions );
1220 : 0 : return FALSE;
1221 : : }
1222 : :
1223 [ + - ][ - + ]: 2 : if( !check_esets( mesh, n_whole_mesh + num_type + 4 ) )
1224 : : {
1225 : 0 : free( edges );
1226 : 0 : free( faces );
1227 : 0 : free( temp_entities1 );
1228 : 0 : free( temp_entities2 );
1229 : 0 : free( types );
1230 : 0 : free( regions );
1231 : 0 : return FALSE;
1232 : : }
1233 : :
1234 : : /*--------Test parent/child stuff in entiysets----------- */
1235 : :
1236 : : /* Add 2 meshsets as children to another */
1237 [ + - ]: 2 : iMesh_createEntSet( mesh, is_list, &parent_child, &result );
1238 [ - + ]: 2 : if( iBase_SUCCESS != result )
1239 : : {
1240 [ # # ]: 0 : printf( "Problem creating entityset in entity_sets_test.\n" );
1241 : 0 : free( edges );
1242 : 0 : free( faces );
1243 : 0 : free( temp_entities1 );
1244 : 0 : free( temp_entities2 );
1245 : 0 : free( types );
1246 : 0 : free( regions );
1247 : 0 : return FALSE;
1248 : : }
1249 : :
1250 [ + - ]: 2 : iMesh_addPrntChld( mesh, es_array[iBase_VERTEX], parent_child, &result );
1251 [ - + ]: 2 : if( iBase_SUCCESS != result )
1252 : : {
1253 [ # # ]: 0 : printf( "Problem add parent in entity_sets_test.\n" );
1254 : 0 : free( edges );
1255 : 0 : free( faces );
1256 : 0 : free( temp_entities1 );
1257 : 0 : free( temp_entities2 );
1258 : 0 : free( types );
1259 : 0 : free( regions );
1260 : 0 : return FALSE;
1261 : : }
1262 : :
1263 : : /* check if parent is really added */
1264 : 2 : parents = NULL;
1265 : 2 : parents_alloc = 0;
1266 [ + - ]: 2 : iMesh_getPrnts( mesh, parent_child, 0, &parents, &parents_alloc, &parents_size, &result );
1267 [ - + ]: 2 : if( iBase_SUCCESS != result )
1268 : : {
1269 [ # # ]: 0 : printf( "Problem getting parents in entity_sets_test.\n" );
1270 : 0 : free( edges );
1271 : 0 : free( faces );
1272 : 0 : free( temp_entities1 );
1273 : 0 : free( temp_entities2 );
1274 : 0 : free( types );
1275 : 0 : free( regions );
1276 : 0 : return FALSE;
1277 : : }
1278 : :
1279 [ - + ]: 2 : if( parents_size != 1 )
1280 : : {
1281 [ # # ]: 0 : printf( "number of parents is not correct in entity_sets_test.\n" );
1282 : 0 : free( edges );
1283 : 0 : free( faces );
1284 : 0 : free( temp_entities1 );
1285 : 0 : free( temp_entities2 );
1286 : 0 : free( types );
1287 : 0 : free( regions );
1288 : 0 : free( parents );
1289 : 0 : return FALSE;
1290 : : }
1291 : :
1292 : : /* get the number of child entitysets */
1293 [ + - ]: 2 : iMesh_getNumChld( mesh, es_array[iBase_VERTEX], 0, &temp_numb, &result );
1294 [ - + ]: 2 : if( iBase_SUCCESS != result )
1295 : : {
1296 [ # # ]: 0 : printf( "Problem getting number of children in entity_sets_test.\n" );
1297 : 0 : free( edges );
1298 : 0 : free( faces );
1299 : 0 : free( temp_entities1 );
1300 : 0 : free( temp_entities2 );
1301 : 0 : free( types );
1302 : 0 : free( regions );
1303 : 0 : free( parents );
1304 : 0 : return FALSE;
1305 : : }
1306 : :
1307 [ - + ]: 2 : if( temp_numb != 1 )
1308 : : {
1309 [ # # ]: 0 : printf( "number of children is not correct in entity_sets_test.\n" );
1310 : 0 : free( edges );
1311 : 0 : free( faces );
1312 : 0 : free( temp_entities1 );
1313 : 0 : free( temp_entities2 );
1314 : 0 : free( types );
1315 : 0 : free( regions );
1316 : 0 : free( parents );
1317 : 0 : return FALSE;
1318 : : }
1319 : :
1320 : : /* parent_child and es_array[iBase_VERTEX] should be related */
1321 : 2 : is_child = 0;
1322 [ + - ]: 2 : iMesh_isChildOf( mesh, es_array[iBase_VERTEX], parent_child, &is_child, &result );
1323 [ - + ]: 2 : if( iBase_SUCCESS != result )
1324 : : {
1325 [ # # ]: 0 : printf( "Problem checking relation in entity_sets_test.\n" );
1326 : 0 : free( edges );
1327 : 0 : free( faces );
1328 : 0 : free( temp_entities1 );
1329 : 0 : free( temp_entities2 );
1330 : 0 : free( types );
1331 : 0 : free( regions );
1332 : 0 : free( parents );
1333 : 0 : return FALSE;
1334 : : }
1335 [ - + ]: 2 : if( !is_child )
1336 : : {
1337 [ # # ]: 0 : printf( "parent_child and es_array[iBase_VERTEX] should be related\n" );
1338 : 0 : free( edges );
1339 : 0 : free( faces );
1340 : 0 : free( temp_entities1 );
1341 : 0 : free( temp_entities2 );
1342 : 0 : free( types );
1343 : 0 : free( regions );
1344 : 0 : free( parents );
1345 : 0 : return FALSE;
1346 : : }
1347 : :
1348 : : /* es_array[iBase_FACE] and es_array[iBase_REGION] are not related */
1349 : 2 : is_child = FALSE;
1350 [ + - ]: 2 : iMesh_isChildOf( mesh, es_array[iBase_FACE], es_array[iBase_REGION], &is_child, &result );
1351 [ - + ]: 2 : if( iBase_SUCCESS != result )
1352 : : {
1353 [ # # ]: 0 : printf( "Problem checking relation in entity_sets_test.\n" );
1354 : 0 : free( edges );
1355 : 0 : free( faces );
1356 : 0 : free( temp_entities1 );
1357 : 0 : free( temp_entities2 );
1358 : 0 : free( types );
1359 : 0 : free( regions );
1360 : 0 : free( parents );
1361 : 0 : return FALSE;
1362 : : }
1363 [ - + ]: 2 : if( is_child )
1364 : : {
1365 [ # # ]: 0 : printf( "es_array[iBase_REGION] and es_array[iBase_FACE] should not be related\n" );
1366 : 0 : free( edges );
1367 : 0 : free( faces );
1368 : 0 : free( temp_entities1 );
1369 : 0 : free( temp_entities2 );
1370 : 0 : free( types );
1371 : 0 : free( regions );
1372 : 0 : free( parents );
1373 : 0 : return FALSE;
1374 : : }
1375 : :
1376 [ + - ][ - + ]: 2 : if( !check_esets( mesh, n_whole_mesh + num_type + 5 ) )
1377 : : {
1378 : 0 : free( edges );
1379 : 0 : free( faces );
1380 : 0 : free( temp_entities1 );
1381 : 0 : free( temp_entities2 );
1382 : 0 : free( types );
1383 : 0 : free( regions );
1384 : 0 : free( parents );
1385 : 0 : return FALSE;
1386 : : }
1387 : :
1388 : : /*--------test modify and query functions----------------------------- */
1389 : :
1390 : : /* get all entity sets in super set */
1391 : 2 : es_array1 = NULL;
1392 : 2 : es_array1_alloc = 0;
1393 [ + - ]: 2 : iMesh_getEntSets( mesh, super_set, 0, &es_array1, &es_array1_alloc, &es_array1_size, &result );
1394 [ - + ]: 2 : if( iBase_SUCCESS != result )
1395 : : {
1396 [ # # ]: 0 : printf( "Problem to get entity sets in super set.\n" );
1397 : 0 : free( edges );
1398 : 0 : free( faces );
1399 : 0 : free( temp_entities1 );
1400 : 0 : free( temp_entities2 );
1401 : 0 : free( types );
1402 : 0 : free( regions );
1403 : 0 : free( parents );
1404 : 0 : return FALSE;
1405 : : }
1406 : :
1407 : : /* get the number of entity sets in super set */
1408 [ + - ]: 2 : iMesh_getNumEntSets( mesh, super_set, 0, &num_super, &result );
1409 [ - + ]: 2 : if( iBase_SUCCESS != result )
1410 : : {
1411 [ # # ]: 0 : printf( "Problem to get the number of all entity sets in super set.\n" );
1412 : 0 : free( edges );
1413 : 0 : free( faces );
1414 : 0 : free( temp_entities1 );
1415 : 0 : free( temp_entities2 );
1416 : 0 : free( types );
1417 : 0 : free( regions );
1418 : 0 : free( parents );
1419 : 0 : free( es_array1 );
1420 : 0 : return FALSE;
1421 : : }
1422 : :
1423 : : /* the number of entity sets in super set should be same */
1424 [ - + ]: 2 : if( num_super != es_array1_size )
1425 : : {
1426 [ # # ]: 0 : printf( "the number of entity sets in super set should be same.\n" );
1427 : 0 : return FALSE;
1428 : : }
1429 : :
1430 : : /* get all entities in super set */
1431 : 2 : all_entities = NULL;
1432 : 2 : all_entities_alloc = 0;
1433 : : iMesh_getEntities( mesh, super_set, iBase_ALL_TYPES, iMesh_ALL_TOPOLOGIES, &all_entities, &all_entities_alloc,
1434 [ + - ]: 2 : &all_entities_size, &result );
1435 [ - + ]: 2 : if( iBase_SUCCESS != result )
1436 : : {
1437 [ # # ]: 0 : printf( "Problem to get all entities in super set.\n" );
1438 : 0 : free( edges );
1439 : 0 : free( faces );
1440 : 0 : free( temp_entities1 );
1441 : 0 : free( temp_entities2 );
1442 : 0 : free( types );
1443 : 0 : free( regions );
1444 : 0 : free( parents );
1445 : 0 : free( es_array1 );
1446 : 0 : return FALSE;
1447 : : }
1448 : :
1449 : : /* compare the number of all entities in super set */
1450 : : /* NOTE: TEST COMMENTED OUT UNTIL RESOLUTION OF WHETHER GETENTITIES */
1451 : : /* SHOULD GET A NUM_HOPS ARGUMENT */
1452 : : /* if (num_all_entities_super != all_entities_size) { */
1453 : : /* printf("number of all entities in super set should be same.\n"); */
1454 : : /* return FALSE; */
1455 : : /* } */
1456 : :
1457 : : /* test add, remove and get all entity sets using super set */
1458 : : /* check GetAllEntitySets works recursively and dosen't return */
1459 : : /* multi sets */
1460 [ + + ]: 10 : for( k = 0; k < num_super; k++ )
1461 : : {
1462 : : /* add entity sets of super set to each entity set of super set */
1463 : : /* make multiple child super sets */
1464 : 8 : iBase_EntitySetHandle es_k = es_array1[k];
1465 [ + + ]: 40 : for( l = 0; l < es_array1_size; l++ )
1466 : : {
1467 [ + - ]: 32 : iMesh_addEntSet( mesh, es_array1[l], es_k, &result );
1468 [ - + ]: 32 : if( iBase_SUCCESS != result )
1469 : : {
1470 [ # # ]: 0 : printf( "Problem to add entity set to entityset.\n" );
1471 : 0 : free( edges );
1472 : 0 : free( faces );
1473 : 0 : free( temp_entities1 );
1474 : 0 : free( temp_entities2 );
1475 : 0 : free( types );
1476 : 0 : free( regions );
1477 : 0 : free( parents );
1478 : 0 : free( es_array1 );
1479 : 0 : free( all_entities );
1480 : 0 : return FALSE;
1481 : : }
1482 : : }
1483 : :
1484 : : /* add super set to each entity set */
1485 [ + - ]: 8 : iMesh_addEntSet( mesh, super_set, es_k, &result );
1486 [ - + ]: 8 : if( iBase_SUCCESS != result )
1487 : : {
1488 [ # # ]: 0 : printf( "Problem to add super set to entitysets.\n" );
1489 : 0 : free( edges );
1490 : 0 : free( faces );
1491 : 0 : free( temp_entities1 );
1492 : 0 : free( temp_entities2 );
1493 : 0 : free( types );
1494 : 0 : free( regions );
1495 : 0 : free( parents );
1496 : 0 : free( es_array1 );
1497 : 0 : free( all_entities );
1498 : 0 : return FALSE;
1499 : : }
1500 : :
1501 : : /* add one entity sets multiple times */
1502 [ + + ]: 32 : for( l = 0; l < 3; l++ )
1503 : : {
1504 [ + - ]: 24 : iMesh_addEntSet( mesh, temp_es1, es_k, &result );
1505 [ - + ]: 24 : if( iBase_SUCCESS != result )
1506 : : {
1507 [ # # ]: 0 : printf( "Problem to add temp set to entitysets.\n" );
1508 : 0 : free( edges );
1509 : 0 : free( faces );
1510 : 0 : free( temp_entities1 );
1511 : 0 : free( temp_entities2 );
1512 : 0 : free( types );
1513 : 0 : free( regions );
1514 : 0 : free( parents );
1515 : 0 : free( es_array1 );
1516 : 0 : free( all_entities );
1517 : 0 : return FALSE;
1518 : : }
1519 : : }
1520 : : }
1521 : :
1522 : : /* get all hexes and get faces of that hexes */
1523 : 2 : hexes = NULL;
1524 : 2 : hexes_alloc = 0;
1525 : :
1526 [ + - ]: 2 : iMesh_getEntities( mesh, root_set, iBase_ALL_TYPES, iMesh_HEXAHEDRON, &hexes, &hexes_alloc, &hexes_size, &result );
1527 [ - + ]: 2 : if( iBase_SUCCESS != result )
1528 : : {
1529 [ # # ]: 0 : printf( "Failed to get hexes in entity_sets_test.\n" );
1530 : 0 : free( edges );
1531 : 0 : free( faces );
1532 : 0 : free( temp_entities1 );
1533 : 0 : free( temp_entities2 );
1534 : 0 : free( types );
1535 : 0 : free( regions );
1536 : 0 : free( parents );
1537 : 0 : free( es_array1 );
1538 : 0 : free( all_entities );
1539 : 0 : return FALSE;
1540 : : }
1541 : :
1542 : : /* get adjacent face of hexes */
1543 : 2 : adj_faces = NULL;
1544 : 2 : adj_faces_alloc = 0;
1545 : 2 : face_offsets = NULL;
1546 : 2 : face_offsets_alloc = 0;
1547 : :
1548 : : iMesh_getEntArrAdj( mesh, hexes, hexes_size, iBase_FACE, &adj_faces, &adj_faces_alloc, &adj_faces_size,
1549 [ + - ]: 2 : &face_offsets, &face_offsets_alloc, &face_offsets_size, &result );
1550 [ - + ]: 2 : if( iBase_SUCCESS != result )
1551 : : {
1552 [ # # ]: 0 : printf( "Problem to get adjacent entities in entitysets_test.\n" );
1553 : 0 : free( edges );
1554 : 0 : free( faces );
1555 : 0 : free( temp_entities1 );
1556 : 0 : free( temp_entities2 );
1557 : 0 : free( types );
1558 : 0 : free( regions );
1559 : 0 : free( parents );
1560 : 0 : free( es_array1 );
1561 : 0 : free( all_entities );
1562 : 0 : free( hexes );
1563 : 0 : return FALSE;
1564 : : }
1565 : :
1566 [ + - ]: 2 : iMesh_createEntSet( mesh, FALSE, &hex_set, &result );
1567 [ - + ]: 2 : if( iBase_SUCCESS != result )
1568 : : {
1569 [ # # ]: 0 : printf( "Problem creating entityset in entity_sets_test.\n" );
1570 : 0 : free( edges );
1571 : 0 : free( faces );
1572 : 0 : free( temp_entities1 );
1573 : 0 : free( temp_entities2 );
1574 : 0 : free( types );
1575 : 0 : free( regions );
1576 : 0 : free( parents );
1577 : 0 : free( es_array1 );
1578 : 0 : free( all_entities );
1579 : 0 : free( hexes );
1580 : 0 : free( adj_faces );
1581 : 0 : free( face_offsets );
1582 : 0 : return FALSE;
1583 : : }
1584 : :
1585 [ + - ]: 2 : iMesh_addEntArrToSet( mesh, hexes, hexes_size, hex_set, &result );
1586 [ - + ]: 2 : if( iBase_SUCCESS != result )
1587 : : {
1588 [ # # ]: 0 : printf( "Failed to add hexes in entity_sets_test.\n" );
1589 : 0 : free( edges );
1590 : 0 : free( faces );
1591 : 0 : free( temp_entities1 );
1592 : 0 : free( temp_entities2 );
1593 : 0 : free( types );
1594 : 0 : free( regions );
1595 : 0 : free( parents );
1596 : 0 : free( es_array1 );
1597 : 0 : free( all_entities );
1598 : 0 : free( hexes );
1599 : 0 : free( adj_faces );
1600 : 0 : free( face_offsets );
1601 : 0 : return FALSE;
1602 : : }
1603 : :
1604 : 2 : free( edges );
1605 : 2 : free( faces );
1606 : 2 : free( temp_entities1 );
1607 : 2 : free( temp_entities2 );
1608 : 2 : free( types );
1609 : 2 : free( regions );
1610 : 2 : free( parents );
1611 : 2 : free( es_array1 );
1612 : 2 : free( all_entities );
1613 : 2 : free( hexes );
1614 : 2 : free( adj_faces );
1615 : 2 : free( face_offsets );
1616 : :
1617 : 2 : return TRUE;
1618 : : }
1619 : :
1620 : 14 : int check_esets( iMesh_Instance mesh, const int num_sets )
1621 : : {
1622 : : int entity_sets_size;
1623 : :
1624 : : int result;
1625 [ + - ]: 14 : iMesh_getNumEntSets( mesh, root_set, 1, &entity_sets_size, &result );
1626 [ - + ]: 14 : if( iBase_SUCCESS != result )
1627 : : {
1628 [ # # ]: 0 : printf( "Problem to get all entity sets in mesh.\n" );
1629 : 0 : return FALSE;
1630 : : }
1631 [ - + ]: 14 : if( entity_sets_size != num_sets )
1632 : : {
1633 : : printf( "the number of entity sets in whole mesh should be %d"
1634 : : ", actual number is %d.\n",
1635 [ # # ]: 0 : num_sets, entity_sets_size );
1636 : 0 : return FALSE;
1637 : : }
1638 : :
1639 : 14 : return TRUE;
1640 : : }
1641 : :
1642 : : /*!
1643 : : @test
1644 : : TSTT entity sets Test
1645 : : @li Check entity sets
1646 : : */
1647 : 1 : int entity_sets_test( iMesh_Instance mesh )
1648 : : {
1649 : 1 : int iter_num = 0, result;
1650 : : /* check */
1651 : : int i;
1652 [ + + ]: 3 : for( i = 0; i < 2; i++ )
1653 : : {
1654 : 2 : iter_num++;
1655 : :
1656 : 2 : result = entity_sets_subtest( mesh, i, iter_num );
1657 [ - + ]: 2 : if( !result ) return result;
1658 : : }
1659 : :
1660 : 1 : return TRUE;
1661 : : }
1662 : :
1663 : : /*!
1664 : : @test
1665 : : Vertex Coordinates
1666 : : @li Get coordinates of vertices by 2 different methods then compare them
1667 : : */
1668 : 1 : int vertex_coordinates_test( iMesh_Instance mesh )
1669 : : {
1670 : 1 : iBase_EntityHandle* verts = NULL;
1671 : 1 : int verts_alloc = 0, verts_size;
1672 : 1 : double* vert_coords = NULL;
1673 : 1 : int vert_coords_alloc = 0, vert_coords_size;
1674 : :
1675 : : /* check storage order */
1676 : : int result;
1677 : : int this_order;
1678 [ + - ]: 1 : iMesh_getDfltStorage( mesh, &this_order, &result );
1679 [ - + ]: 1 : if( iBase_SUCCESS != result )
1680 : : {
1681 [ # # ]: 0 : printf( "failed to get preferred storage order in vertex_coordinates_test.\n" );
1682 : 0 : return FALSE;
1683 : : }
1684 : :
1685 : : /* now get the vertex coordinates from a vertex array */
1686 : : /* need to get the vertices in the model */
1687 : 1 : verts = NULL;
1688 : 1 : verts_alloc = 0;
1689 [ + - ]: 1 : iMesh_getEntities( mesh, root_set, iBase_VERTEX, iMesh_POINT, &verts, &verts_alloc, &verts_size, &result );
1690 [ - + ]: 1 : if( iBase_SUCCESS != result )
1691 : : {
1692 [ # # ]: 0 : printf( "failed to get entities in vertex_coordinates_test.\n" );
1693 : 0 : return FALSE;
1694 : : }
1695 : :
1696 : : /* get the coordinates in one array */
1697 : 1 : vert_coords = NULL;
1698 : 1 : vert_coords_alloc = 0;
1699 : :
1700 : : iMesh_getVtxArrCoords( mesh, verts, verts_size, iBase_INTERLEAVED, &vert_coords, &vert_coords_alloc,
1701 [ + - ]: 1 : &vert_coords_size, &result );
1702 [ - + ]: 1 : if( iBase_SUCCESS != result )
1703 : : {
1704 [ # # ]: 0 : printf( "failed to get vertex cooridinate of entities in vertex_coordinates_test.\n" );
1705 : 0 : free( verts );
1706 : 0 : return FALSE;
1707 : : }
1708 : :
1709 : 1 : free( verts );
1710 : 1 : free( vert_coords );
1711 : :
1712 : : /* if we get here, this test was successful */
1713 : 1 : return TRUE;
1714 : : }
1715 : :
1716 : : /*!
1717 : : @test
1718 : : TSTT Tag Info test
1719 : : @li Tests tagCreate, tagDelete, tagGetName, tagGetSize, tagGetHandle
1720 : : */
1721 : 1 : int tag_info_test( iMesh_Instance mesh )
1722 : : {
1723 : : char dum_name[120];
1724 : 1 : int dum_name_size = 120;
1725 : : int dum_size;
1726 : 1 : int error = FALSE;
1727 : : iBase_TagHandle dum_handle;
1728 : : /* Create a tag */
1729 : : int result;
1730 : 1 : iBase_TagHandle tag_handle = NULL;
1731 : 1 : const char* tag_name = "int_tag";
1732 : 1 : int tag_name_size = 8;
1733 [ + - ]: 1 : iMesh_createTag( mesh, tag_name, 1, iBase_INTEGER, &tag_handle, &result, tag_name_size );
1734 [ - + ]: 1 : if( iBase_SUCCESS != result )
1735 : : {
1736 [ # # ]: 0 : printf( "Failed to create tag int_tag in vertex_tag_test." );
1737 : 0 : return FALSE;
1738 : : }
1739 : :
1740 : : /* check tag info functions */
1741 [ + - ]: 1 : iMesh_getTagName( mesh, tag_handle, dum_name, &result, dum_name_size );
1742 [ - + ]: 1 : if( iBase_SUCCESS != result )
1743 : : {
1744 [ # # ]: 0 : printf( "Couldn't get name of tag just created.\n" );
1745 : 0 : return FALSE;
1746 : : }
1747 [ - + ]: 1 : if( strcmp( dum_name, "int_tag" ) )
1748 : : {
1749 [ # # ]: 0 : printf( "Tag names didn't match.\n" );
1750 : 0 : return FALSE;
1751 : : }
1752 : :
1753 [ + - ]: 1 : iMesh_getTagSizeBytes( mesh, tag_handle, &dum_size, &result );
1754 [ - + ]: 1 : if( iBase_SUCCESS != result )
1755 : : {
1756 [ # # ]: 0 : printf( "Couldn't get size of tag just created.\n" );
1757 : 0 : return FALSE;
1758 : : }
1759 [ - + ]: 1 : if( dum_size != sizeof( int ) )
1760 : : {
1761 [ # # ]: 0 : printf( "Tag sizes didn't match.\n" );
1762 : 0 : return FALSE;
1763 : : }
1764 : :
1765 [ + - ]: 1 : iMesh_getTagHandle( mesh, tag_name, &dum_handle, &result, tag_name_size );
1766 [ - + ]: 1 : if( iBase_SUCCESS != result )
1767 : : {
1768 [ # # ]: 0 : printf( "Couldn't get handle of tag just created.\n" );
1769 : 0 : return FALSE;
1770 : : }
1771 [ - + ]: 1 : if( dum_handle != tag_handle )
1772 : : {
1773 [ # # ]: 0 : printf( "Tag handles didn't match.\n" );
1774 : 0 : return FALSE;
1775 : : }
1776 : :
1777 : : /* test non-forced version of tagDelete; forced version tested later, */
1778 : : /* when we have entities around */
1779 [ + - ]: 1 : iMesh_destroyTag( mesh, tag_handle, FALSE, &result );
1780 [ - + ]: 1 : if( iBase_SUCCESS != result )
1781 : : {
1782 [ # # ]: 0 : printf( "Couldn't delete tag just created.\n" );
1783 : 0 : return FALSE;
1784 : : }
1785 : :
1786 : : /* look for that tag, to make sure it got deleted */
1787 [ + - ]: 1 : iMesh_getTagHandle( mesh, tag_name, &tag_handle, &result, tag_name_size );
1788 [ + - ]: 1 : if( iBase_SUCCESS != result ) { error = TRUE; }
1789 [ - + ]: 1 : if( !error )
1790 : : {
1791 [ # # ]: 0 : printf( "tagGetHandle was able to find handle for deleted tag.\n" );
1792 : 0 : return FALSE;
1793 : : }
1794 : :
1795 : 1 : return TRUE;
1796 : : }
1797 : :
1798 : 1 : int vertex_int_tag_test( iMesh_Instance mesh, iBase_EntityHandle* verts, int /*verts_size*/, iBase_TagHandle* int_tag )
1799 : : {
1800 : : int result;
1801 : 1 : iBase_EntityHandle dum_vert = verts[0];
1802 : :
1803 : 1 : int dum_val = 11, dum_val2;
1804 : 1 : void* dum_val2_ptr = &dum_val2;
1805 : 1 : int dum_val2_alloc = sizeof( int ), dum_val2_size;
1806 : :
1807 : : /* create a tag */
1808 : 1 : const char* tag_name = "int_tag";
1809 : 1 : int tag_name_size = 8;
1810 [ + - ]: 1 : iMesh_createTag( mesh, tag_name, 1, iBase_INTEGER, int_tag, &result, tag_name_size );
1811 [ - + ]: 1 : if( iBase_SUCCESS != result )
1812 : : {
1813 [ # # ]: 0 : printf( "Failed to create tag int_tag in vertex_int_tag_test.\n" );
1814 : 0 : return FALSE;
1815 : : }
1816 : :
1817 : : /* put a value in the first vertex and retrieve */
1818 [ + - ]: 1 : iMesh_setArrData( mesh, &dum_vert, 1, *int_tag, (const char*)( &dum_val ), sizeof( int ), &result );
1819 [ - + ]: 1 : if( iBase_SUCCESS != result )
1820 : : {
1821 [ # # ]: 0 : printf( "Failed to set int tag (val=11) in vertex_int_tag_test.\n" );
1822 : 0 : return FALSE;
1823 : : }
1824 : :
1825 [ + - ]: 1 : iMesh_getArrData( mesh, &dum_vert, 1, *int_tag, &dum_val2_ptr, &dum_val2_alloc, &dum_val2_size, &result );
1826 [ + - ][ - + ]: 1 : if( iBase_SUCCESS != result || dum_val2 != 11 )
1827 : : {
1828 [ # # ]: 0 : printf( "Failed to get int tag (val=11) in vertex_int_tag_test.\n" );
1829 : 0 : return FALSE;
1830 : : }
1831 : :
1832 [ - + ]: 1 : if( dum_val2 != 11 )
1833 : : {
1834 : :
1835 [ # # ]: 0 : printf( "Value of vertex tag (val=11) wrong.\n" );
1836 : 0 : return FALSE;
1837 : : }
1838 : :
1839 : : /* put a value in the last vertex and retrieve */
1840 : 1 : dum_val = 12;
1841 : :
1842 [ + - ]: 1 : iMesh_setArrData( mesh, &dum_vert, 1, *int_tag, (char*)( &dum_val ), sizeof( int ), &result );
1843 [ - + ]: 1 : if( iBase_SUCCESS != result )
1844 : : {
1845 [ # # ]: 0 : printf( "Failed to set int tag (val=12) in vertex_int_tag_test.\n" );
1846 : 0 : return FALSE;
1847 : : }
1848 : :
1849 [ + - ]: 1 : iMesh_getArrData( mesh, &dum_vert, 1, *int_tag, &dum_val2_ptr, &dum_val2_alloc, &dum_val2_size, &result );
1850 [ - + ]: 1 : if( iBase_SUCCESS != result )
1851 : : {
1852 [ # # ]: 0 : printf( "Failed to get int tag (val=12) in vertex_int_tag_test.\n" );
1853 : 0 : return FALSE;
1854 : : }
1855 : :
1856 [ - + ]: 1 : if( dum_val2 != 12 )
1857 : : {
1858 : :
1859 [ # # ]: 0 : printf( "Value of vertex tag (val=12) wrong.\n" );
1860 : 0 : return FALSE;
1861 : : }
1862 : :
1863 : : /* ok, the int tag test worked */
1864 : 1 : return TRUE;
1865 : : }
1866 : :
1867 : 1 : int vertex_double_tag_test( iMesh_Instance mesh, iBase_EntityHandle* verts, int /*verts_size*/,
1868 : : iBase_TagHandle* double_tag )
1869 : : {
1870 : : int result;
1871 : :
1872 : 1 : iBase_EntityHandle dum_vert = verts[0];
1873 : 1 : double dum_val = 1.0e6, dum_val2;
1874 : 1 : void* dum_val2_ptr = &dum_val2;
1875 : 1 : int dum_val2_alloc = sizeof( double ), dum_val2_size;
1876 : :
1877 : : /* create a tag */
1878 : 1 : const char* tag_name = "double_tag";
1879 : 1 : int tag_name_size = 11;
1880 [ + - ]: 1 : iMesh_createTag( mesh, tag_name, 1, iBase_DOUBLE, double_tag, &result, tag_name_size );
1881 [ - + ]: 1 : if( iBase_SUCCESS != result )
1882 : : {
1883 [ # # ]: 0 : printf( "Failed to create tag double_tag in vertex_double_tag_test.\n" );
1884 : 0 : return FALSE;
1885 : : }
1886 : :
1887 : : /* put a value in the first vertex and retrieve */
1888 [ + - ]: 1 : iMesh_setArrData( mesh, &dum_vert, 1, *double_tag, (char*)( &dum_val ), sizeof( double ), &result );
1889 [ - + ]: 1 : if( iBase_SUCCESS != result )
1890 : : {
1891 [ # # ]: 0 : printf( "Failed to set double tag (val=1.0e6) in vertex_double_tag_test.\n" );
1892 : 0 : return FALSE;
1893 : : }
1894 : :
1895 [ + - ]: 1 : iMesh_getArrData( mesh, &dum_vert, 1, *double_tag, &dum_val2_ptr, &dum_val2_alloc, &dum_val2_size, &result );
1896 [ - + ]: 1 : if( iBase_SUCCESS != result )
1897 : : {
1898 [ # # ]: 0 : printf( "Failed to get double tag (val=1.0e6) in vertex_double_tag_test.\n" );
1899 : 0 : return FALSE;
1900 : : }
1901 : :
1902 [ - + ]: 1 : if( dum_val2 != 1.0e6 )
1903 : : {
1904 [ # # ]: 0 : printf( "Value of vertex tag (val=1.0e6) wrong.\n" );
1905 : 0 : return FALSE;
1906 : : }
1907 : :
1908 : : /* put a value in the last vertex and retrieve */
1909 : 1 : dum_val = 2.0e9;
1910 : :
1911 [ + - ]: 1 : iMesh_setArrData( mesh, &dum_vert, 1, *double_tag, (char*)( &dum_val ), sizeof( double ), &result );
1912 [ - + ]: 1 : if( iBase_SUCCESS != result )
1913 : : {
1914 [ # # ]: 0 : printf( "Failed to set double tag (val=2.0e9) in vertex_double_tag_test.\n" );
1915 : 0 : return FALSE;
1916 : : }
1917 : :
1918 [ + - ]: 1 : iMesh_getArrData( mesh, &dum_vert, 1, *double_tag, &dum_val2_ptr, &dum_val2_alloc, &dum_val2_size, &result );
1919 [ - + ]: 1 : if( iBase_SUCCESS != result )
1920 : : {
1921 [ # # ]: 0 : printf( "Failed to get double tag (val=2.0e9) in vertex_double_tag_test.\n" );
1922 : 0 : return FALSE;
1923 : : }
1924 : :
1925 [ - + ]: 1 : if( dum_val2 != 2.0e9 )
1926 : : {
1927 [ # # ]: 0 : printf( "Value of vertex tag (val=2.0e9) wrong.\n" );
1928 : 0 : return FALSE;
1929 : : }
1930 : :
1931 : : /* ok, the double tag test worked */
1932 : 1 : return TRUE;
1933 : : }
1934 : :
1935 : : /* Add a struct Vertex Tag to the database */
1936 : : struct TagStruct
1937 : : {
1938 : : double test_double;
1939 : : int test_int1, test_int2;
1940 : : };
1941 : :
1942 : 1 : int vertex_struct_tag_test( iMesh_Instance mesh, iBase_EntityHandle* verts, int /*verts_size*/,
1943 : : iBase_TagHandle* struct_tag )
1944 : : {
1945 : : int result;
1946 : 1 : iBase_EntityHandle dum_vert = verts[0];
1947 : 1 : struct TagStruct dum_struct = { 3.0e12, 2, 3 }, dum_struct2;
1948 : 1 : void* dum_struct2_ptr = &dum_struct2;
1949 : 1 : int dum_struct_alloc = sizeof( struct TagStruct ), dum_struct_size;
1950 : :
1951 : : /* create a tag */
1952 : 1 : const char* tag_name = "struct_tag";
1953 : 1 : int tag_name_size = 11;
1954 [ + - ]: 1 : iMesh_createTag( mesh, tag_name, sizeof( struct TagStruct ), iBase_BYTES, struct_tag, &result, tag_name_size );
1955 [ - + ]: 1 : if( iBase_SUCCESS != result )
1956 : : {
1957 [ # # ]: 0 : printf( "Failed to create tag struct_tag in vertex_struct_tag_test.\n" );
1958 : 0 : return FALSE;
1959 : : }
1960 : :
1961 : : /* put a value in the first vertex and retrieve */
1962 : :
1963 : : /* careful setting the value, since tags are opaque */
1964 [ + - ]: 1 : iMesh_setArrData( mesh, &dum_vert, 1, *struct_tag, (const char*)&dum_struct, sizeof( struct TagStruct ), &result );
1965 [ - + ]: 1 : if( iBase_SUCCESS != result )
1966 : : {
1967 [ # # ]: 0 : printf( "Failed to set struct tag in vertex_struct_tag_test.\n" );
1968 : 0 : return FALSE;
1969 : : }
1970 : :
1971 [ + - ]: 1 : iMesh_getArrData( mesh, &dum_vert, 1, *struct_tag, &dum_struct2_ptr, &dum_struct_alloc, &dum_struct_size, &result );
1972 [ - + ]: 1 : if( iBase_SUCCESS != result )
1973 : : {
1974 [ # # ]: 0 : printf( "Failed to get struct tag in vertex_struct_tag_test.\n" );
1975 : 0 : return FALSE;
1976 : : }
1977 : :
1978 [ - + ]: 1 : if( dum_struct_size != sizeof( struct TagStruct ) )
1979 : : {
1980 [ # # ]: 0 : printf( "Size of vertex struct tag wrong.\n" );
1981 : 0 : return FALSE;
1982 : : }
1983 [ + - ][ + - ]: 1 : if( dum_struct2.test_int1 != dum_struct.test_int1 || dum_struct2.test_int2 != dum_struct.test_int2 ||
[ - + ]
1984 : 1 : dum_struct2.test_double != dum_struct.test_double )
1985 : : {
1986 [ # # ]: 0 : printf( "Value of vertex struct tag wrong.\n" );
1987 : 0 : return FALSE;
1988 : : }
1989 : :
1990 : : /* ok, the int tag test worked */
1991 : 1 : return TRUE;
1992 : : }
1993 : :
1994 : 1 : int vertex_tag_delete_test( iMesh_Instance mesh, iBase_EntityHandle* verts, int /*verts_size*/ )
1995 : : {
1996 : : int result;
1997 : 1 : int delete_err = FALSE;
1998 : :
1999 : : /* test forced, unforced deletion of tags from entities */
2000 : :
2001 : : /* test getAlliBase_TagHandles for first entity */
2002 : 1 : iBase_TagHandle* all_tags = NULL;
2003 : 1 : iBase_EntityHandle dum_entity = verts[0];
2004 : 1 : int all_tags_alloc = 0, all_tags_size;
2005 [ + - ]: 1 : iMesh_getAllTags( mesh, verts[0], &all_tags, &all_tags_alloc, &all_tags_size, &result );
2006 [ - + ]: 1 : if( iBase_SUCCESS != result )
2007 : : {
2008 [ # # ]: 0 : printf( "Couldn't get all tag handles from vertex.\n" );
2009 : 0 : return FALSE;
2010 : : }
2011 : :
2012 [ + - ]: 1 : iMesh_rmvArrTag( mesh, &dum_entity, 1, all_tags[0], &result );
2013 [ - + ]: 1 : if( iBase_SUCCESS != result )
2014 : : {
2015 [ # # ]: 0 : printf( "Couldn't remove tag from vertex.\n" );
2016 : 0 : free( all_tags );
2017 : 0 : return FALSE;
2018 : : }
2019 : :
2020 [ + - ]: 1 : iMesh_destroyTag( mesh, all_tags[1], FALSE, &result );
2021 [ + - ]: 1 : if( iBase_SUCCESS != result ) { delete_err = TRUE; }
2022 [ - + ]: 1 : if( !delete_err )
2023 : : {
2024 [ # # ]: 0 : printf( "Error when unforced-deleting tag in use on a vertex.\n" );
2025 : 0 : free( all_tags );
2026 : 0 : return FALSE;
2027 : : }
2028 : :
2029 [ + - ]: 1 : iMesh_destroyTag( mesh, all_tags[1], TRUE, &result );
2030 [ - + ]: 1 : if( iBase_SUCCESS != result )
2031 : : {
2032 [ # # ]: 0 : printf( "Couldn't force-delete a tag in use on a vertex.\n" );
2033 : 0 : free( all_tags );
2034 : 0 : return FALSE;
2035 : : }
2036 : :
2037 : 1 : free( all_tags );
2038 : :
2039 : : /* ok, we're done */
2040 : 1 : return TRUE;
2041 : : }
2042 : :
2043 : 1 : int vertex_tag_test( iMesh_Instance mesh )
2044 : : {
2045 : : int result;
2046 : :
2047 : : iBase_TagHandle int_tag, double_tag, struct_tag;
2048 : : int int_err, double_err, struct_err, tag_delete_err;
2049 : :
2050 [ + - ]: 1 : int info_err = tag_info_test( mesh );
2051 : :
2052 : : /* get all the vertices */
2053 : 1 : iBase_EntityHandle* verts = NULL;
2054 : 1 : int verts_alloc = 0, verts_size;
2055 [ + - ]: 1 : iMesh_getEntities( mesh, root_set, iBase_ALL_TYPES, iMesh_POINT, &verts, &verts_alloc, &verts_size, &result );
2056 [ - + ]: 1 : if( iBase_SUCCESS != result )
2057 : : {
2058 [ # # ]: 0 : printf( "entitysetGetEntities failed in vertex_tag_test.\n" );
2059 : 0 : return FALSE;
2060 : : }
2061 : :
2062 : : /* vertex int tag */
2063 [ + - ]: 1 : int_err = vertex_int_tag_test( mesh, verts, verts_size, &int_tag );
2064 : :
2065 : : /* vertex double tag */
2066 [ + - ]: 1 : double_err = vertex_double_tag_test( mesh, verts, verts_size, &double_tag );
2067 : :
2068 : : /* vertex struct tag */
2069 [ + - ]: 1 : struct_err = vertex_struct_tag_test( mesh, verts, verts_size, &struct_tag );
2070 : :
2071 [ + - ]: 1 : tag_delete_err = vertex_tag_delete_test( mesh, verts, verts_size );
2072 : :
2073 : 1 : free( verts );
2074 : :
2075 [ + - ][ + - ]: 1 : return ( info_err && int_err && double_err && struct_err && tag_delete_err );
[ + - ][ + - ]
[ + - ]
2076 : : }
2077 : :
2078 : 1 : int entityset_int_tag_test( iMesh_Instance mesh, iBase_EntitySetHandle* sets, int sets_size, iBase_TagHandle* int_tag )
2079 : : {
2080 : : int result;
2081 : 1 : int dum_val = 11, dum_val2;
2082 : 1 : void* dum_val2_ptr = &dum_val2;
2083 : 1 : int dum_val2_alloc = sizeof( int ), dum_val2_size;
2084 : :
2085 : : /* create a tag */
2086 : 1 : const char* tag_name = "set_int_tag";
2087 [ + - ]: 1 : iMesh_createTag( mesh, tag_name, 1, iBase_INTEGER, int_tag, &result, 12 );
2088 [ - + ]: 1 : if( iBase_SUCCESS != result )
2089 : : {
2090 [ # # ]: 0 : printf( "Failed to create tag int_tag in entityset_int_tag_test.\n" );
2091 : 0 : return FALSE;
2092 : : }
2093 : :
2094 : : /* put a value in the first set and retrieve */
2095 : :
2096 [ + - ]: 1 : iMesh_setEntSetData( mesh, sets[0], *int_tag, (char*)( &dum_val ), sizeof( int ), &result );
2097 [ - + ]: 1 : if( iBase_SUCCESS != result )
2098 : : {
2099 [ # # ]: 0 : printf( "Failed to set int tag (val=11) in entityset_int_tag_test.\n" );
2100 : 0 : return FALSE;
2101 : : }
2102 : :
2103 : 1 : dum_val2 = 0;
2104 [ + - ]: 1 : iMesh_getEntSetData( mesh, sets[0], *int_tag, &dum_val2_ptr, &dum_val2_alloc, &dum_val2_size, &result );
2105 [ - + ]: 1 : if( iBase_SUCCESS != result )
2106 : : {
2107 [ # # ]: 0 : printf( "Failed to get int tag (val=11) in entityset_int_tag_test." );
2108 : 0 : return FALSE;
2109 : : }
2110 : :
2111 [ - + ]: 1 : if( dum_val2 != 11 )
2112 : : {
2113 [ # # ]: 0 : printf( "Value of entityset tag (val=11) wrong.\n" );
2114 : 0 : return FALSE;
2115 : : }
2116 : :
2117 : : /* put a value in the last faces and retrieve */
2118 : 1 : dum_val = 12;
2119 [ + - ]: 1 : iMesh_setEntSetData( mesh, sets[sets_size - 1], *int_tag, (char*)( &dum_val ), sizeof( int ), &result );
2120 [ - + ]: 1 : if( iBase_SUCCESS != result )
2121 : : {
2122 [ # # ]: 0 : printf( "Failed to set int tag (val=12) in entityset_int_tag_test." );
2123 : 0 : return FALSE;
2124 : : }
2125 : :
2126 [ + - ]: 1 : iMesh_getEntSetData( mesh, sets[sets_size - 1], *int_tag, &dum_val2_ptr, &dum_val2_alloc, &dum_val2_size, &result );
2127 [ - + ]: 1 : if( iBase_SUCCESS != result )
2128 : : {
2129 [ # # ]: 0 : printf( "Failed to get int tag (val=12) in entityset_int_tag_test." );
2130 : 0 : return FALSE;
2131 : : }
2132 : :
2133 [ - + ]: 1 : if( dum_val2 != 12 )
2134 : : {
2135 [ # # ]: 0 : printf( "Value of entityset tag (val=12) wrong.\n" );
2136 : 0 : return FALSE;
2137 : : }
2138 : :
2139 : : /* ok, the int tag test worked */
2140 : 1 : return TRUE;
2141 : : }
2142 : :
2143 : 1 : int entityset_double_tag_test( iMesh_Instance mesh, iBase_EntitySetHandle* sets, int sets_size,
2144 : : iBase_TagHandle* double_tag )
2145 : : {
2146 : : int result;
2147 : 1 : double dum_val = 1.0e6, dum_val2;
2148 : 1 : void* dum_val2_ptr = &dum_val2;
2149 : 1 : int dum_val2_alloc = sizeof( double ), dum_val2_size;
2150 : :
2151 : : /* create a tag */
2152 : 1 : const char* tag_name = "set_double_tag";
2153 [ + - ]: 1 : iMesh_createTag( mesh, tag_name, 1, iBase_DOUBLE, double_tag, &result, 15 );
2154 [ - + ]: 1 : if( iBase_SUCCESS != result )
2155 : : {
2156 [ # # ]: 0 : printf( "Failed to create tag double_tag in entityset_double_tag_test.\n" );
2157 : 0 : return FALSE;
2158 : : }
2159 : :
2160 : : /* put a value in the first set and retrieve */
2161 : :
2162 [ + - ]: 1 : iMesh_setEntSetData( mesh, sets[0], *double_tag, (char*)( &dum_val ), sizeof( double ), &result );
2163 [ - + ]: 1 : if( iBase_SUCCESS != result )
2164 : : {
2165 [ # # ]: 0 : printf( "Failed to set double tag (val=11) in entityset_double_tag_test.\n" );
2166 : 0 : return FALSE;
2167 : : }
2168 : :
2169 : 1 : dum_val2 = 0;
2170 [ + - ]: 1 : iMesh_getEntSetData( mesh, sets[0], *double_tag, &dum_val2_ptr, &dum_val2_alloc, &dum_val2_size, &result );
2171 [ - + ]: 1 : if( iBase_SUCCESS != result )
2172 : : {
2173 [ # # ]: 0 : printf( "Failed to get double tag (val=1.0e6) in entityset_double_tag_test." );
2174 : 0 : return FALSE;
2175 : : }
2176 : :
2177 [ - + ]: 1 : if( dum_val2 != 1.0e6 )
2178 : : {
2179 [ # # ]: 0 : printf( "Value of entityset tag (val=11) wrong.\n" );
2180 : 0 : return FALSE;
2181 : : }
2182 : :
2183 : : /* put a value in the last faces and retrieve */
2184 : 1 : dum_val = 2.0e9;
2185 [ + - ]: 1 : iMesh_setEntSetData( mesh, sets[sets_size - 1], *double_tag, (char*)( &dum_val ), sizeof( double ), &result );
2186 [ - + ]: 1 : if( iBase_SUCCESS != result )
2187 : : {
2188 [ # # ]: 0 : printf( "Failed to set double tag (val=2.0e9) in entityset_double_tag_test." );
2189 : 0 : return FALSE;
2190 : : }
2191 : :
2192 : 1 : iMesh_getEntSetData( mesh, sets[sets_size - 1], *double_tag, &dum_val2_ptr, &dum_val2_alloc, &dum_val2_size,
2193 [ + - ]: 1 : &result );
2194 [ - + ]: 1 : if( iBase_SUCCESS != result )
2195 : : {
2196 [ # # ]: 0 : printf( "Failed to get double tag (val=2.0e9) in entityset_double_tag_test." );
2197 : 0 : return FALSE;
2198 : : }
2199 : :
2200 [ - + ]: 1 : if( dum_val2 != 2.0e9 )
2201 : : {
2202 [ # # ]: 0 : printf( "Value of entityset tag (val=2.0e9) wrong.\n" );
2203 : 0 : return FALSE;
2204 : : }
2205 : :
2206 : : /* ok, the double tag test worked */
2207 : 1 : return TRUE;
2208 : : }
2209 : :
2210 : 1 : int entityset_struct_tag_test( iMesh_Instance mesh, iBase_EntitySetHandle* /*sets*/, int /*sets_size*/,
2211 : : iBase_TagHandle* struct_tag )
2212 : : {
2213 : : int result;
2214 : 1 : struct TagStruct dum_struct = { 3.0e12, 2, 3 }, dum_struct2;
2215 : 1 : void* dum_struct2_ptr = &dum_struct2;
2216 : 1 : int dum_struct_alloc = sizeof( struct TagStruct ), dum_struct_size;
2217 : :
2218 : : /* create a tag */
2219 : 1 : const char* tag_name = "set_struct_tag";
2220 [ + - ]: 1 : iMesh_createTag( mesh, tag_name, sizeof( struct TagStruct ), iBase_BYTES, struct_tag, &result, 11 );
2221 [ - + ]: 1 : if( iBase_SUCCESS != result )
2222 : : {
2223 [ # # ]: 0 : printf( "Failed to create tag struct_tag in entityset_struct_tag_test.\n" );
2224 : 0 : return FALSE;
2225 : : }
2226 : :
2227 : : /* put a value in the first vertex and retrieve */
2228 : :
2229 : : /* careful setting the value, since tags are opaque */
2230 [ + - ]: 1 : iMesh_setEntSetData( mesh, root_set, *struct_tag, (const char*)&dum_struct, sizeof( struct TagStruct ), &result );
2231 [ - + ]: 1 : if( iBase_SUCCESS != result )
2232 : : {
2233 [ # # ]: 0 : printf( "Failed to set struct tag in entityset_struct_tag_test.\n" );
2234 : 0 : return FALSE;
2235 : : }
2236 : :
2237 [ + - ]: 1 : iMesh_getEntSetData( mesh, root_set, *struct_tag, &dum_struct2_ptr, &dum_struct_alloc, &dum_struct_size, &result );
2238 [ - + ]: 1 : if( iBase_SUCCESS != result )
2239 : : {
2240 [ # # ]: 0 : printf( "Failed to get struct tag in entityset_struct_tag_test.\n" );
2241 : 0 : return FALSE;
2242 : : }
2243 : :
2244 [ - + ]: 1 : if( dum_struct_size != sizeof( struct TagStruct ) )
2245 : : {
2246 [ # # ]: 0 : printf( "Size of entityset struct tag wrong.\n" );
2247 : 0 : return FALSE;
2248 : : }
2249 [ + - ][ + - ]: 1 : if( dum_struct2.test_int1 != dum_struct.test_int1 || dum_struct2.test_int2 != dum_struct.test_int2 ||
[ - + ]
2250 : 1 : dum_struct2.test_double != dum_struct.test_double )
2251 : : {
2252 [ # # ]: 0 : printf( "Value of entityset struct tag wrong.\n" );
2253 : 0 : return FALSE;
2254 : : }
2255 : :
2256 : : /* ok, the int tag test worked */
2257 : 1 : return TRUE;
2258 : : }
2259 : :
2260 : 1 : int entityset_tag_delete_test( iMesh_Instance mesh, iBase_EntitySetHandle* sets, int sets_size )
2261 : : {
2262 : : /* test forced, unforced deletion of tags from entities */
2263 : : int result;
2264 : 1 : int delete_err = FALSE;
2265 : :
2266 : : /* test getAlliBase_TagHandles for first entity */
2267 : 1 : iBase_TagHandle* all_tags = NULL;
2268 [ - + ]: 1 : if( sets_size < 1 )
2269 : : {
2270 [ # # ]: 0 : printf( "no sets.\n" );
2271 : 0 : return FALSE;
2272 : : }
2273 : 1 : iBase_EntitySetHandle dum_entity = sets[0];
2274 : 1 : int all_tags_alloc = 0, all_tags_size;
2275 [ + - ]: 1 : iMesh_getAllEntSetTags( mesh, sets[0], &all_tags, &all_tags_alloc, &all_tags_size, &result );
2276 [ - + ]: 1 : if( iBase_SUCCESS != result )
2277 : : {
2278 [ # # ]: 0 : printf( "Couldn't get all tag handles from entityset.\n" );
2279 : 0 : free( all_tags );
2280 : 0 : return FALSE;
2281 : : }
2282 : :
2283 [ + - ]: 1 : iMesh_rmvEntSetTag( mesh, dum_entity, all_tags[0], &result );
2284 [ - + ]: 1 : if( iBase_SUCCESS != result )
2285 : : {
2286 [ # # ]: 0 : printf( "Couldn't remove tag from entityset.\n" );
2287 : 0 : free( all_tags );
2288 : 0 : return FALSE;
2289 : : }
2290 : :
2291 [ + - ]: 1 : iMesh_destroyTag( mesh, all_tags[1], FALSE, &result );
2292 [ + - ]: 1 : if( iBase_SUCCESS != result ) { delete_err = TRUE; }
2293 [ - + ]: 1 : if( !delete_err )
2294 : : {
2295 [ # # ]: 0 : printf( "Error when unforced-deleting tag in use on a entityset.\n" );
2296 : 0 : free( all_tags );
2297 : 0 : return FALSE;
2298 : : }
2299 : :
2300 [ + - ]: 1 : iMesh_destroyTag( mesh, all_tags[1], TRUE, &result );
2301 [ - + ]: 1 : if( iBase_SUCCESS != result )
2302 : : {
2303 [ # # ]: 0 : printf( "Couldn't force-delete a tag in use on a entityset.\n" );
2304 : 0 : free( all_tags );
2305 : 0 : return FALSE;
2306 : : }
2307 : :
2308 : 1 : free( all_tags );
2309 : :
2310 : : /* ok, we're done */
2311 : 1 : return TRUE;
2312 : : }
2313 : :
2314 : : /*!
2315 : : @test
2316 : : TSTT entityset tag Test
2317 : : @li Check entityset tags
2318 : : */
2319 : 1 : int entityset_tag_test( iMesh_Instance mesh )
2320 : : {
2321 : : int result;
2322 : : iBase_TagHandle int_tag, double_tag, struct_tag;
2323 : : int int_success, double_success, struct_success, tag_delete_success;
2324 : :
2325 : : /* get the sets */
2326 : 1 : iBase_EntitySetHandle* esets = NULL;
2327 : 1 : int esets_alloc = 0, esets_size;
2328 [ + - ]: 1 : iMesh_getEntSets( mesh, root_set, 1, &esets, &esets_alloc, &esets_size, &result );
2329 [ - + ]: 1 : if( iBase_SUCCESS != result )
2330 : : {
2331 [ # # ]: 0 : printf( "entitysetGetEntities failed in entityset_tag_test.\n" );
2332 : 0 : free( esets );
2333 : 0 : return FALSE;
2334 : : }
2335 : :
2336 : : /* entityset int tag */
2337 [ + - ]: 1 : int_success = entityset_int_tag_test( mesh, esets, esets_size, &int_tag );
2338 : :
2339 : : /* entityeset double tag */
2340 [ + - ]: 1 : double_success = entityset_double_tag_test( mesh, esets, esets_size, &double_tag );
2341 : :
2342 : : /* entityset struct tag */
2343 [ + - ]: 1 : struct_success = entityset_struct_tag_test( mesh, esets, esets_size, &struct_tag );
2344 : :
2345 [ + - ]: 1 : tag_delete_success = entityset_tag_delete_test( mesh, esets, esets_size );
2346 : :
2347 : 1 : free( esets );
2348 : :
2349 [ + - ][ + - ]: 1 : return ( int_success && double_success && struct_success && tag_delete_success );
[ + - ][ + - ]
2350 : : }
2351 : :
2352 : 1 : int mesh_int_tag_test( iMesh_Instance mesh, iBase_TagHandle* int_tag )
2353 : : {
2354 : : int result;
2355 : 1 : int dum_val = 11, dum_val2;
2356 : 1 : void* dum_val2_ptr = &dum_val2;
2357 : 1 : int dum_val2_alloc = sizeof( int ), dum_val2_size;
2358 : :
2359 : : /* create a tag */
2360 : 1 : const char* tag_name = "mesh_int_tag";
2361 [ + - ]: 1 : iMesh_createTag( mesh, tag_name, 1, iBase_INTEGER, int_tag, &result, 12 );
2362 [ - + ]: 1 : if( iBase_SUCCESS != result )
2363 : : {
2364 [ # # ]: 0 : printf( "Failed to create tag int_tag in mesh_int_tag_test.\n" );
2365 : 0 : return FALSE;
2366 : : }
2367 : :
2368 : : /* put a value in the first set and retrieve */
2369 : :
2370 [ + - ]: 1 : iMesh_setEntSetData( mesh, root_set, *int_tag, (char*)( &dum_val ), sizeof( int ), &result );
2371 [ - + ]: 1 : if( iBase_SUCCESS != result )
2372 : : {
2373 [ # # ]: 0 : printf( "Failed to set int tag (val=11) in mesh_int_tag_test.\n" );
2374 : 0 : return FALSE;
2375 : : }
2376 : :
2377 : 1 : dum_val2 = 0;
2378 [ + - ]: 1 : iMesh_getEntSetData( mesh, root_set, *int_tag, &dum_val2_ptr, &dum_val2_alloc, &dum_val2_size, &result );
2379 [ - + ]: 1 : if( iBase_SUCCESS != result )
2380 : : {
2381 [ # # ]: 0 : printf( "Failed to get int tag (val=11) in mesh_int_tag_test." );
2382 : 0 : return FALSE;
2383 : : }
2384 : :
2385 [ - + ]: 1 : if( dum_val2 != 11 )
2386 : : {
2387 [ # # ]: 0 : printf( "Value of entityset tag (val=11) wrong.\n" );
2388 : 0 : return FALSE;
2389 : : }
2390 : :
2391 : : /* put a value in the last faces and retrieve */
2392 : 1 : dum_val = 12;
2393 [ + - ]: 1 : iMesh_setEntSetData( mesh, root_set, *int_tag, (char*)( &dum_val ), sizeof( int ), &result );
2394 [ - + ]: 1 : if( iBase_SUCCESS != result )
2395 : : {
2396 [ # # ]: 0 : printf( "Failed to set int tag (val=12) in mesh_int_tag_test." );
2397 : 0 : return FALSE;
2398 : : }
2399 : :
2400 [ + - ]: 1 : iMesh_getEntSetData( mesh, root_set, *int_tag, &dum_val2_ptr, &dum_val2_alloc, &dum_val2_size, &result );
2401 [ - + ]: 1 : if( iBase_SUCCESS != result )
2402 : : {
2403 [ # # ]: 0 : printf( "Failed to get int tag (val=12) in mesh_int_tag_test." );
2404 : 0 : return FALSE;
2405 : : }
2406 : :
2407 [ - + ]: 1 : if( dum_val2 != 12 )
2408 : : {
2409 [ # # ]: 0 : printf( "Value of entityset tag (val=12) wrong.\n" );
2410 : 0 : return FALSE;
2411 : : }
2412 : :
2413 : : /* ok, the int tag test worked */
2414 : 1 : return TRUE;
2415 : : }
2416 : :
2417 : 1 : int mesh_double_tag_test( iMesh_Instance mesh, iBase_TagHandle* double_tag )
2418 : : {
2419 : : int result;
2420 : 1 : double dum_val = 1.0e6, dum_val2;
2421 : 1 : void* dum_val2_ptr = &dum_val2;
2422 : 1 : int dum_val2_alloc = sizeof( double ), dum_val2_size;
2423 : :
2424 : : /* create a tag */
2425 : 1 : const char* tag_name = "mesh_double_tag";
2426 [ + - ]: 1 : iMesh_createTag( mesh, tag_name, 1, iBase_DOUBLE, double_tag, &result, 15 );
2427 [ - + ]: 1 : if( iBase_SUCCESS != result )
2428 : : {
2429 [ # # ]: 0 : printf( "Failed to create tag double_tag in mesh_double_tag_test.\n" );
2430 : 0 : return FALSE;
2431 : : }
2432 : :
2433 : : /* put a value in the first set and retrieve */
2434 : :
2435 [ + - ]: 1 : iMesh_setEntSetData( mesh, root_set, *double_tag, (char*)( &dum_val ), sizeof( double ), &result );
2436 [ - + ]: 1 : if( iBase_SUCCESS != result )
2437 : : {
2438 [ # # ]: 0 : printf( "Failed to set double tag (val=11) in mesh_double_tag_test.\n" );
2439 : 0 : return FALSE;
2440 : : }
2441 : :
2442 : 1 : dum_val2 = 0;
2443 [ + - ]: 1 : iMesh_getEntSetData( mesh, root_set, *double_tag, &dum_val2_ptr, &dum_val2_alloc, &dum_val2_size, &result );
2444 [ - + ]: 1 : if( iBase_SUCCESS != result )
2445 : : {
2446 [ # # ]: 0 : printf( "Failed to get double tag (val=1.0e6) in mesh_double_tag_test." );
2447 : 0 : return FALSE;
2448 : : }
2449 : :
2450 [ - + ]: 1 : if( dum_val2 != 1.0e6 )
2451 : : {
2452 [ # # ]: 0 : printf( "Value of entityset tag (val=11) wrong.\n" );
2453 : 0 : return FALSE;
2454 : : }
2455 : :
2456 : : /* put a value in the last faces and retrieve */
2457 : 1 : dum_val = 2.0e9;
2458 [ + - ]: 1 : iMesh_setEntSetData( mesh, root_set, *double_tag, (char*)( &dum_val ), sizeof( double ), &result );
2459 [ - + ]: 1 : if( iBase_SUCCESS != result )
2460 : : {
2461 [ # # ]: 0 : printf( "Failed to set double tag (val=2.0e9) in mesh_double_tag_test." );
2462 : 0 : return FALSE;
2463 : : }
2464 : :
2465 [ + - ]: 1 : iMesh_getEntSetData( mesh, root_set, *double_tag, &dum_val2_ptr, &dum_val2_alloc, &dum_val2_size, &result );
2466 [ - + ]: 1 : if( iBase_SUCCESS != result )
2467 : : {
2468 [ # # ]: 0 : printf( "Failed to get double tag (val=2.0e9) in mesh_double_tag_test." );
2469 : 0 : return FALSE;
2470 : : }
2471 : :
2472 [ - + ]: 1 : if( dum_val2 != 2.0e9 )
2473 : : {
2474 [ # # ]: 0 : printf( "Value of entityset tag (val=2.0e9) wrong.\n" );
2475 : 0 : return FALSE;
2476 : : }
2477 : :
2478 : : /* ok, the double tag test worked */
2479 : 1 : return TRUE;
2480 : : }
2481 : :
2482 : 1 : int mesh_struct_tag_test( iMesh_Instance mesh, iBase_TagHandle* struct_tag )
2483 : : {
2484 : : int result;
2485 : 1 : struct TagStruct dum_struct = { 3.0e12, 2, 3 }, dum_struct2;
2486 : 1 : void* dum_struct2_ptr = &dum_struct2;
2487 : 1 : int dum_struct_alloc = sizeof( struct TagStruct ), dum_struct_size;
2488 : :
2489 : : /* create a tag */
2490 : 1 : const char* tag_name = "mesh_struct_tag";
2491 [ + - ]: 1 : iMesh_createTag( mesh, tag_name, sizeof( struct TagStruct ), iBase_BYTES, struct_tag, &result, 11 );
2492 [ - + ]: 1 : if( iBase_SUCCESS != result )
2493 : : {
2494 [ # # ]: 0 : printf( "Failed to create tag struct_tag in vertex_struct_tag_test.\n" );
2495 : 0 : return FALSE;
2496 : : }
2497 : :
2498 : : /* put a value in the first vertex and retrieve */
2499 : :
2500 : : /* careful setting the value, since tags are opaque */
2501 [ + - ]: 1 : iMesh_setEntSetData( mesh, root_set, *struct_tag, (const char*)&dum_struct, sizeof( struct TagStruct ), &result );
2502 [ - + ]: 1 : if( iBase_SUCCESS != result )
2503 : : {
2504 [ # # ]: 0 : printf( "Failed to set struct tag in mesh_struct_tag_test.\n" );
2505 : 0 : return FALSE;
2506 : : }
2507 : :
2508 [ + - ]: 1 : iMesh_getEntSetData( mesh, root_set, *struct_tag, &dum_struct2_ptr, &dum_struct_alloc, &dum_struct_size, &result );
2509 [ - + ]: 1 : if( iBase_SUCCESS != result )
2510 : : {
2511 [ # # ]: 0 : printf( "Failed to get struct tag in mesh_struct_tag_test.\n" );
2512 : 0 : return FALSE;
2513 : : }
2514 : :
2515 [ - + ]: 1 : if( dum_struct_size != sizeof( struct TagStruct ) )
2516 : : {
2517 [ # # ]: 0 : printf( "Size of entityset struct tag wrong.\n" );
2518 : 0 : return FALSE;
2519 : : }
2520 [ + - ][ + - ]: 1 : if( dum_struct2.test_int1 != dum_struct.test_int1 || dum_struct2.test_int2 != dum_struct.test_int2 ||
[ - + ]
2521 : 1 : dum_struct2.test_double != dum_struct.test_double )
2522 : : {
2523 [ # # ]: 0 : printf( "Value of entityset struct tag wrong.\n" );
2524 : 0 : return FALSE;
2525 : : }
2526 : :
2527 : : /* ok, the int tag test worked */
2528 : 1 : return TRUE;
2529 : : }
2530 : :
2531 : 1 : int mesh_tag_delete_test( iMesh_Instance mesh )
2532 : : {
2533 : : /* test forced, unforced deletion of tags from entities */
2534 : : int result;
2535 : 1 : int delete_err = FALSE;
2536 : :
2537 : : /* test getAlliBase_TagHandles for first entity */
2538 : 1 : iBase_TagHandle* all_tags = NULL;
2539 : 1 : int all_tags_alloc = 0, all_tags_size;
2540 [ + - ]: 1 : iMesh_getAllEntSetTags( mesh, root_set, &all_tags, &all_tags_alloc, &all_tags_size, &result );
2541 [ - + ]: 1 : if( iBase_SUCCESS != result )
2542 : : {
2543 [ # # ]: 0 : printf( "Couldn't get all tag handles from entityset.\n" );
2544 : 0 : return FALSE;
2545 : : }
2546 : :
2547 [ + - ]: 1 : iMesh_rmvEntSetTag( mesh, root_set, all_tags[0], &result );
2548 [ - + ]: 1 : if( iBase_SUCCESS != result )
2549 : : {
2550 [ # # ]: 0 : printf( "Couldn't remove tag from entityset.\n" );
2551 : 0 : free( all_tags );
2552 : 0 : return FALSE;
2553 : : }
2554 : :
2555 [ + - ]: 1 : iMesh_destroyTag( mesh, all_tags[1], FALSE, &result );
2556 [ + - ]: 1 : if( iBase_SUCCESS != result ) { delete_err = TRUE; }
2557 [ - + ]: 1 : if( !delete_err )
2558 : : {
2559 [ # # ]: 0 : printf( "Error when unforced-deleting tag in use on a entityset.\n" );
2560 : 0 : free( all_tags );
2561 : 0 : return FALSE;
2562 : : }
2563 : :
2564 [ + - ]: 1 : iMesh_destroyTag( mesh, all_tags[1], TRUE, &result );
2565 [ - + ]: 1 : if( iBase_SUCCESS != result )
2566 : : {
2567 [ # # ]: 0 : printf( "Couldn't force-delete a tag in use on a entityset.\n" );
2568 : 0 : free( all_tags );
2569 : 0 : return FALSE;
2570 : : }
2571 : :
2572 : 1 : free( all_tags );
2573 : :
2574 : : /* ok, we're done */
2575 : 1 : return TRUE;
2576 : : }
2577 : :
2578 : : /*!
2579 : : @test
2580 : : TSTT entityset tag Test
2581 : : @li Check entityset tags
2582 : : */
2583 : 1 : int mesh_tag_test( iMesh_Instance mesh )
2584 : : {
2585 : : iBase_TagHandle int_tag, double_tag, struct_tag;
2586 : :
2587 : : /* entityset int tag */
2588 [ + - ]: 1 : int int_success = mesh_int_tag_test( mesh, &int_tag );
2589 : :
2590 : : /* entityeset double tag */
2591 [ + - ]: 1 : int double_success = mesh_double_tag_test( mesh, &double_tag );
2592 : :
2593 : : /* entityset struct tag */
2594 [ + - ]: 1 : int struct_success = mesh_struct_tag_test( mesh, &struct_tag );
2595 : :
2596 [ + - ]: 1 : int tag_delete_success = mesh_tag_delete_test( mesh );
2597 : :
2598 [ + - ][ + - ]: 1 : return ( int_success && double_success && struct_success && tag_delete_success );
[ + - ][ + - ]
2599 : : }
2600 : :
2601 : 1 : int set_remove_contained_regression( iMesh_Instance mesh )
2602 : : {
2603 : : int err, contained;
2604 : : iBase_EntitySetHandle set, sub;
2605 : :
2606 [ + - ]: 1 : iMesh_createEntSet( mesh, 0, &set, &err );
2607 [ - + ]: 1 : if( iBase_SUCCESS != err ) return 0;
2608 [ + - ]: 1 : iMesh_createEntSet( mesh, 1, &sub, &err );
2609 [ - + ]: 1 : if( iBase_SUCCESS != err ) return 0;
2610 : :
2611 [ + - ]: 1 : iMesh_addEntSet( mesh, sub, set, &err );
2612 [ - + ]: 1 : if( iBase_SUCCESS != err ) return 0;
2613 : :
2614 [ + - ]: 1 : iMesh_isEntSetContained( mesh, set, sub, &contained, &err );
2615 [ - + ]: 1 : if( iBase_SUCCESS != err ) return 0;
2616 [ - + ]: 1 : if( !contained )
2617 : : {
2618 [ # # ]: 0 : fprintf( stderr, "isEntSetContained returned false for contained set\n" );
2619 : 0 : return 0;
2620 : : }
2621 : :
2622 [ + - ]: 1 : iMesh_rmvEntSet( mesh, sub, set, &err );
2623 [ - + ]: 1 : if( iBase_SUCCESS != err ) return 0;
2624 : :
2625 [ + - ]: 1 : iMesh_isEntSetContained( mesh, set, sub, &contained, &err );
2626 [ - + ]: 1 : if( iBase_SUCCESS != err ) return 0;
2627 [ - + ]: 1 : if( contained )
2628 : : {
2629 [ # # ]: 0 : fprintf( stderr, "isEntSetContained returned true for removed set\n" );
2630 : 0 : return 0;
2631 : : }
2632 : :
2633 : 1 : return 1;
2634 : : }
2635 : :
2636 : 1 : int all_adjacency_regression( iMesh_Instance mesh )
2637 : : {
2638 : : int err;
2639 : :
2640 : 1 : double coords[] = { 0, 0, 0, 1, 1, 1 };
2641 : :
2642 : 1 : iBase_EntityHandle* verts = NULL;
2643 : 1 : int verts_alloc = 0, verts_size;
2644 : :
2645 : : iBase_EntityHandle line;
2646 : : int status;
2647 : :
2648 : 1 : iBase_EntityHandle* adj = NULL;
2649 : 1 : int adj_alloc = 0, adj_size;
2650 : :
2651 [ + - ]: 1 : iMesh_newMesh( "", &mesh, &err, 0 );
2652 [ - + ]: 1 : if( iBase_SUCCESS != err ) return 0;
2653 : :
2654 [ + - ]: 1 : iMesh_createVtxArr( mesh, 2, iBase_INTERLEAVED, coords, 6, &verts, &verts_alloc, &verts_size, &err );
2655 [ - + ]: 1 : if( iBase_SUCCESS != err ) return 0;
2656 : :
2657 [ + - ]: 1 : iMesh_createEnt( mesh, iMesh_LINE_SEGMENT, verts, 2, &line, &status, &err );
2658 [ + - ][ - + ]: 1 : if( iBase_SUCCESS != err || status != iBase_NEW ) return 0;
2659 : :
2660 [ + - ]: 1 : iMesh_getEntAdj( mesh, verts[0], iBase_ALL_TYPES, &adj, &adj_alloc, &adj_size, &err );
2661 [ - + ]: 1 : if( iBase_SUCCESS != err ) return 0;
2662 [ + - ][ - + ]: 1 : if( adj_size != 1 || adj[0] != line )
2663 : : {
2664 [ # # ]: 0 : printf( "Bad: couldn't find adjacency for vertex\n" );
2665 : 0 : return 0;
2666 : : }
2667 : 1 : free( adj );
2668 : :
2669 : 1 : adj_alloc = 0;
2670 : 1 : adj = NULL;
2671 [ + - ]: 1 : iMesh_getEntAdj( mesh, line, iBase_ALL_TYPES, &adj, &adj_alloc, &adj_size, &err );
2672 [ - + ]: 1 : if( iBase_SUCCESS != err ) return 0;
2673 [ + - ][ + - ]: 1 : if( adj_size != 2 ||
2674 [ - + ][ # # ]: 1 : ( ( adj[0] != verts[0] || adj[1] != verts[1] ) && ( adj[0] != verts[1] || adj[1] != verts[0] ) ) )
[ # # ]
2675 : : {
2676 [ # # ]: 0 : printf( "Bad: couldn't find adjacencies for line\n" );
2677 : 0 : free( adj );
2678 : 0 : free( verts );
2679 : 0 : return 0;
2680 : : }
2681 : 1 : free( adj );
2682 : 1 : free( verts );
2683 [ + - ]: 1 : iMesh_dtor( mesh, &err );
2684 [ - + ]: 1 : if( iBase_SUCCESS != err ) return 0;
2685 : 1 : return 1;
2686 : : }
2687 : :
2688 : 1 : static int ordered_set_regression( iMesh_Instance mesh )
2689 : : {
2690 : 1 : double coords[] = { 0, 0, 0, 1, 1, 1 };
2691 : : iBase_EntityHandle line, *p, verts[2], ents_in[3], ents_out[3];
2692 : : iBase_EntitySetHandle set;
2693 : 1 : int i, err, status, two = 2, three = 3;
2694 : :
2695 [ + - ]: 1 : iMesh_newMesh( "", &mesh, &err, 0 );
2696 [ - + ][ # # ]: 1 : CHK( err );
2697 : 1 : p = verts;
2698 [ + - ]: 1 : iMesh_createVtxArr( mesh, 2, iBase_INTERLEAVED, coords, 6, &p, &two, &two, &err );
2699 [ - + ][ # # ]: 1 : CHK( err );
2700 [ + - ]: 1 : iMesh_createEnt( mesh, iMesh_LINE_SEGMENT, verts, 2, &line, &status, &err );
2701 [ - + ][ # # ]: 1 : CHK( err );
2702 [ - + ]: 1 : if( status != iBase_NEW ) return 0;
2703 [ + - ]: 1 : iMesh_createEntSet( mesh, 1, &set, &err );
2704 [ - + ][ # # ]: 1 : CHK( err );
2705 : 1 : ents_in[0] = verts[1];
2706 : 1 : ents_in[1] = line;
2707 : 1 : ents_in[2] = verts[0];
2708 [ + - ]: 1 : iMesh_addEntArrToSet( mesh, ents_in, three, set, &err );
2709 [ - + ][ # # ]: 1 : CHK( err );
2710 : 1 : p = ents_out;
2711 [ + - ]: 1 : iMesh_getEntities( mesh, set, iBase_ALL_TYPES, iMesh_ALL_TOPOLOGIES, &p, &three, &three, &err );
2712 [ - + ][ # # ]: 1 : CHK( err );
2713 [ + + ]: 4 : for( i = 0; i < three; i++ )
2714 : : {
2715 [ - + ]: 3 : if( ents_in[i] != ents_out[i] )
2716 : : {
2717 [ # # ]: 0 : printf( "Ordered set does not preserve order\n" );
2718 : 0 : return 0;
2719 : : }
2720 : : }
2721 [ + - ]: 1 : iMesh_dtor( mesh, &err );
2722 [ - + ][ # # ]: 1 : CHK( err );
2723 : 1 : return 1;
2724 : : }
2725 : :
2726 : 1 : int array_allocation( iMesh_Instance mesh )
2727 : : {
2728 : : int err;
2729 : :
2730 : 1 : double coords[] = { 0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3 };
2731 : :
2732 : 1 : iBase_EntityHandle* verts = NULL;
2733 : 1 : int verts_alloc = 0, verts_size;
2734 : :
2735 : : iBase_EntityHandle* ents;
2736 : : int ents_alloc, ents_size;
2737 : :
2738 [ + - ]: 1 : iMesh_newMesh( "", &mesh, &err, 0 );
2739 [ - + ]: 1 : if( iBase_SUCCESS != err ) return 0;
2740 : :
2741 [ + - ]: 1 : iMesh_getRootSet( mesh, &root_set, &err );
2742 [ - + ]: 1 : if( iBase_SUCCESS != err )
2743 : : {
2744 [ # # ]: 0 : printf( "Failed to return a root set.\n" );
2745 : 0 : return 0;
2746 : : }
2747 : :
2748 [ + - ]: 1 : iMesh_createVtxArr( mesh, 4, iBase_INTERLEAVED, coords, 12, &verts, &verts_alloc, &verts_size, &err );
2749 [ - + ]: 1 : if( iBase_SUCCESS != err ) return 0;
2750 : :
2751 : 1 : free( verts );
2752 : :
2753 : : /* test for proper allocation when array pointer passed in null but alloc'd size not */
2754 : 1 : ents_alloc = 3;
2755 : 1 : ents = NULL;
2756 [ + - ]: 1 : iMesh_getEntities( mesh, root_set, iBase_ALL_TYPES, iMesh_ALL_TOPOLOGIES, &ents, &ents_alloc, &ents_size, &err );
2757 [ - + ][ # # ]: 1 : CHK( err );
2758 : :
2759 : 1 : free( ents );
2760 : :
2761 : : /* test for proper allocation when array pointer passed in non-null but alloc'd size 0 */
2762 : 1 : ents_alloc = 0;
2763 [ + - ]: 1 : iMesh_getEntities( mesh, root_set, iBase_ALL_TYPES, iMesh_ALL_TOPOLOGIES, &ents, &ents_alloc, &ents_size, &err );
2764 [ - + ][ # # ]: 1 : CHK( err );
2765 : :
2766 : 1 : free( ents );
2767 : :
2768 : : /* test for failure when passed in alloc'd size is smaller than it should be */
2769 : 1 : ents_alloc -= 1;
2770 [ + - ]: 1 : iMesh_getEntities( mesh, root_set, iBase_ALL_TYPES, iMesh_ALL_TOPOLOGIES, &ents, &ents_alloc, &ents_size, &err );
2771 [ - + ][ # # ]: 1 : if( iBase_BAD_ARRAY_SIZE != err && iBase_BAD_ARRAY_DIMENSION != err )
2772 : : {
2773 : 0 : err = iBase_FAILURE;
2774 [ # # ][ # # ]: 0 : CHK( err );
2775 : : }
2776 : :
2777 [ + - ]: 1 : iMesh_dtor( mesh, &err );
2778 [ - + ][ # # ]: 1 : CHK( err );
2779 : :
2780 : 1 : return 1;
2781 : : }
2782 : :
2783 : 45 : int compare_single_iter( const char* info, iMesh_Instance mesh, iBase_EntitySetHandle set, iBase_EntityHandle* contents,
2784 : : int contents_size, enum iBase_EntityType type, enum iMesh_EntityTopology topo )
2785 : : {
2786 : 45 : iBase_EntityIterator iter = 0;
2787 : 45 : int i, twice, has_data, result = iBase_SUCCESS, result2;
2788 : : iBase_EntityHandle value;
2789 : :
2790 [ + - ]: 45 : iMesh_initEntIter( mesh, set, type, topo, 0, &iter, &result );
2791 [ - + ]: 45 : if( iBase_SUCCESS != result )
2792 : : {
2793 : : printf( "%s:%d: Error %d initializing %s iterator for type %d/topo %d\n", __FILE__, __LINE__, result, info,
2794 [ # # ]: 0 : (int)type, (int)topo );
2795 : 0 : return result;
2796 : : }
2797 : :
2798 [ + + ]: 135 : for( twice = 0; twice < 2; ++twice )
2799 : : {
2800 : :
2801 [ + + ]: 41402 : for( i = 0; i < contents_size; ++i )
2802 : : {
2803 [ + - ]: 41312 : iMesh_getNextEntIter( mesh, iter, &value, &has_data, &result );
2804 [ - + ]: 41312 : if( iBase_SUCCESS != result )
2805 : : {
2806 : : printf( "%s:%d: Error %d stepping %s iterator for type %d/topo %d\n", __FILE__, __LINE__, result, info,
2807 [ # # ]: 0 : (int)type, (int)topo );
2808 : 0 : goto end_single_iter;
2809 : : }
2810 : :
2811 [ - + ]: 41312 : if( !has_data )
2812 : : {
2813 : : printf( "%s:%d: %s iterator for type %d/topo %d ended prematurely at %d of %d\n", __FILE__, __LINE__,
2814 [ # # ]: 0 : info, (int)type, (int)topo, i, contents_size );
2815 : 0 : result = iBase_FAILURE;
2816 : 0 : goto end_single_iter;
2817 : : }
2818 : :
2819 [ - + ]: 41312 : if( value != contents[i] )
2820 : : {
2821 : : printf( "%s:%d: %s iterator for type %d/topo %d returned incorrect value at %d of %d\n", __FILE__,
2822 [ # # ]: 0 : __LINE__, info, (int)type, (int)topo, i, contents_size );
2823 : 0 : result = iBase_FAILURE;
2824 : 0 : goto end_single_iter;
2825 : : }
2826 : : }
2827 : :
2828 [ + - ]: 90 : iMesh_getNextEntIter( mesh, iter, &value, &has_data, &result );
2829 [ - + ]: 90 : if( iBase_SUCCESS != result )
2830 : : {
2831 : : printf( "%s:%d: Error %d stepping %s iterator for type %d/topo %d\n", __FILE__, __LINE__, result, info,
2832 [ # # ]: 0 : (int)type, (int)topo );
2833 : 0 : goto end_single_iter;
2834 : : }
2835 : :
2836 [ - + ]: 90 : if( has_data )
2837 : : {
2838 : : printf( "%s:%d: %s iterator for type %d/topo %d did not end after %d values\n", __FILE__, __LINE__, info,
2839 [ # # ]: 0 : (int)type, (int)topo, contents_size );
2840 : 0 : result = iBase_FAILURE;
2841 : 0 : goto end_single_iter;
2842 : : }
2843 : :
2844 [ + - ]: 90 : iMesh_resetEntIter( mesh, iter, &result );
2845 [ - + ]: 90 : if( iBase_SUCCESS != result )
2846 : : {
2847 : : printf( "%s:%d: Error %d resetting %s iterator for type %d/topo %d\n", __FILE__, __LINE__, result, info,
2848 [ # # ]: 0 : (int)type, (int)topo );
2849 : 0 : result = iBase_FAILURE;
2850 : 0 : goto end_single_iter;
2851 : : }
2852 : : }
2853 : :
2854 : : end_single_iter:
2855 [ + - ]: 45 : iMesh_endEntIter( mesh, iter, &result2 );
2856 [ - + ]: 45 : if( iBase_SUCCESS != result2 )
2857 : : {
2858 : : printf( "%s:%d: Error %d releasing %s iterator for type %d/topo %d\n", __FILE__, __LINE__, result, info,
2859 [ # # ]: 0 : (int)type, (int)topo );
2860 [ # # ]: 0 : if( iBase_SUCCESS == result ) result = result2;
2861 : : }
2862 : 45 : return result;
2863 : : }
2864 : :
2865 : 45 : int compare_array_iter( const char* info, iMesh_Instance mesh, iBase_EntitySetHandle set, iBase_EntityHandle* contents,
2866 : : int contents_size, int array_size, enum iBase_EntityType type, enum iMesh_EntityTopology topo )
2867 : : {
2868 : 45 : iBase_EntityArrIterator iter = 0;
2869 : 45 : int i, j, twice, has_data, result = iBase_SUCCESS, result2;
2870 : : iBase_EntityHandle* values;
2871 : 45 : int values_size, values_alloc = array_size;
2872 : 45 : values = (iBase_EntityHandle*)malloc( array_size * sizeof( iBase_EntityHandle ) );
2873 : :
2874 [ + - ]: 45 : iMesh_initEntArrIter( mesh, set, type, topo, array_size, 0, &iter, &result );
2875 [ - + ]: 45 : if( iBase_SUCCESS != result )
2876 : : {
2877 : : printf( "%s:%d: Error %d initializing %s array iterator for type %d/topo %d\n", __FILE__, __LINE__, result,
2878 [ # # ]: 0 : info, (int)type, (int)topo );
2879 : 0 : free( values );
2880 : 0 : return result;
2881 : : }
2882 : :
2883 [ + + ]: 135 : for( twice = 0; twice < 2; ++twice )
2884 : : {
2885 : 90 : i = 0;
2886 [ + + ]: 11492 : while( i < contents_size )
2887 : : {
2888 : :
2889 [ + - ]: 11402 : iMesh_getNextEntArrIter( mesh, iter, &values, &values_alloc, &values_size, &has_data, &result );
2890 [ - + ]: 11402 : if( iBase_SUCCESS != result )
2891 : : {
2892 : : printf( "%s:%d: Error %d stepping %s array iterator for type %d/topo %d\n", __FILE__, __LINE__, result,
2893 [ # # ]: 0 : info, (int)type, (int)topo );
2894 : 0 : goto end_arr_iter;
2895 : : }
2896 : :
2897 [ + - ][ - + ]: 11402 : if( !has_data || !values_size )
2898 : : {
2899 : : printf( "%s:%d: %s array iterator for type %d/topo %d ended prematurely at %d of %d\n", __FILE__,
2900 [ # # ]: 0 : __LINE__, info, (int)type, (int)topo, i, contents_size );
2901 : 0 : result = iBase_FAILURE;
2902 : 0 : goto end_arr_iter;
2903 : : }
2904 : :
2905 [ - + ]: 11402 : if( i + values_size > contents_size )
2906 : : {
2907 : : printf( "%s:%d: %s array iterator for type %d/topo %d returned more than %d handles\n", __FILE__,
2908 [ # # ]: 0 : __LINE__, info, (int)type, (int)topo, contents_size );
2909 : 0 : result = iBase_FAILURE;
2910 : 0 : goto end_arr_iter;
2911 : : }
2912 : :
2913 [ + + ][ - + ]: 11402 : if( contents_size - i >= array_size && values_size < array_size )
2914 : : {
2915 : : printf( "%s:%d: %s array iterator for type %d/topo %d returned fewer than %d handles\n", __FILE__,
2916 [ # # ]: 0 : __LINE__, info, (int)type, (int)topo, array_size );
2917 : 0 : result = iBase_FAILURE;
2918 : 0 : goto end_arr_iter;
2919 : : }
2920 : :
2921 [ + + ]: 52714 : for( j = 0; j < values_size; ++j, ++i )
2922 : : {
2923 [ - + ]: 41312 : if( values[j] != contents[i] )
2924 : : {
2925 : : printf( "%s:%d: %s array iterator for type %d/topo %d returned incorrect value "
2926 : : "at %d of %d\n",
2927 [ # # ]: 0 : __FILE__, __LINE__, info, (int)type, (int)topo, i, contents_size );
2928 : 0 : result = iBase_FAILURE;
2929 : 0 : goto end_arr_iter;
2930 : : }
2931 : : }
2932 : : }
2933 : :
2934 [ + - ]: 90 : iMesh_getNextEntArrIter( mesh, iter, &values, &values_alloc, &values_size, &has_data, &result );
2935 [ - + ]: 90 : if( iBase_SUCCESS != result )
2936 : : {
2937 : : printf( "%s:%d: Error %d stepping %s array iterator for type %d/topo %d\n", __FILE__, __LINE__, result,
2938 [ # # ]: 0 : info, (int)type, (int)topo );
2939 : 0 : goto end_arr_iter;
2940 : : }
2941 : :
2942 [ + - ][ - + ]: 90 : if( has_data || values_size )
2943 : : {
2944 : : printf( "%s:%d: %s array iterator for type %d/topo %d did not end after %d values\n", __FILE__, __LINE__,
2945 [ # # ]: 0 : info, (int)type, (int)topo, contents_size );
2946 : 0 : result = iBase_FAILURE;
2947 : 0 : goto end_arr_iter;
2948 : : }
2949 : :
2950 [ + - ]: 90 : iMesh_resetEntArrIter( mesh, iter, &result );
2951 [ - + ]: 90 : if( iBase_SUCCESS != result )
2952 : : {
2953 : : printf( "%s:%d: Error %d resetting %s array iterator for type %d/topo %d\n", __FILE__, __LINE__, result,
2954 [ # # ]: 0 : info, (int)type, (int)topo );
2955 : 0 : result = iBase_FAILURE;
2956 : 0 : goto end_arr_iter;
2957 : : }
2958 : : }
2959 : :
2960 : : end_arr_iter:
2961 : 45 : free( values );
2962 [ + - ]: 45 : iMesh_endEntArrIter( mesh, iter, &result2 );
2963 [ - + ]: 45 : if( iBase_SUCCESS != result2 )
2964 : : {
2965 : : printf( "%s:%d: Error %d releasing %s array iterator for type %d/topo %d\n", __FILE__, __LINE__, result, info,
2966 [ # # ]: 0 : (int)type, (int)topo );
2967 [ # # ]: 0 : if( iBase_SUCCESS == result ) result = result2;
2968 : : }
2969 : 45 : return result;
2970 : : }
2971 : :
2972 : 90 : int test_iterator_common( const char* info, iMesh_Instance mesh, iBase_EntitySetHandle set, int array_size,
2973 : : enum iBase_EntityType type, enum iMesh_EntityTopology topo )
2974 : : {
2975 : 90 : iBase_EntityHandle* contents = NULL;
2976 : 90 : int content_size = 0, content_alloc = 0;
2977 : : int result;
2978 : :
2979 [ + - ]: 90 : iMesh_getEntities( mesh, set, type, topo, &contents, &content_alloc, &content_size, &result );
2980 [ - + ][ # # ]: 90 : CHK( result );
2981 [ + + ]: 90 : if( array_size == 1 )
2982 [ + - ]: 45 : result = compare_single_iter( info, mesh, set, contents, content_size, type, topo );
2983 : : else
2984 [ + - ]: 45 : result = compare_array_iter( info, mesh, set, contents, content_size, array_size, type, topo );
2985 : 90 : free( contents );
2986 : 90 : return result;
2987 : : }
2988 : :
2989 : 1 : int test_iterator( iMesh_Instance mesh )
2990 : : {
2991 : : int result, i;
2992 : : iBase_EntitySetHandle root, list, set, *setptr;
2993 : 1 : iBase_EntityHandle* array = NULL;
2994 : 1 : int array_len = 0, array_size = 0;
2995 : :
2996 [ + - ]: 1 : iMesh_getRootSet( mesh, &root, &result );
2997 [ - + ][ # # ]: 1 : CHK( result );
2998 : :
2999 : : /* create some sets containing every other handle */
3000 [ + - ]: 1 : iMesh_getEntities( mesh, root, iBase_ALL_TYPES, iMesh_ALL_TOPOLOGIES, &array, &array_size, &array_len, &result );
3001 [ - + ][ # # ]: 1 : CHK( result );
3002 [ + + ]: 2066 : for( i = 1; i < array_size; i += 2 )
3003 : 2065 : array[i] = array[i - 1];
3004 [ + + ]: 3 : for( i = 0; i < 2; ++i )
3005 : : {
3006 [ + + ]: 2 : setptr = i ? &list : &set;
3007 [ + - ]: 2 : iMesh_createEntSet( mesh, i, setptr, &result );
3008 [ - + ]: 2 : if( iBase_SUCCESS != result ) free( array );
3009 [ - + ][ # # ]: 2 : CHK( result );
3010 [ + - ]: 2 : iMesh_addEntArrToSet( mesh, array, array_size, *setptr, &result );
3011 [ - + ]: 2 : if( iBase_SUCCESS != result ) free( array );
3012 [ - + ][ # # ]: 2 : CHK( result );
3013 : : }
3014 : 1 : free( array );
3015 : :
3016 : : /* test single iterator and array iterator for all types */
3017 [ + + ]: 5 : for( i = 0; i < iBase_ALL_TYPES; ++i )
3018 : : {
3019 : 4 : array_size = 2 * i + 2;
3020 [ + - ]: 4 : result = test_iterator_common( "root", mesh, root, 1, (enum iBase_EntityType)i, iMesh_ALL_TOPOLOGIES );
3021 [ - + ][ # # ]: 4 : CHK( result );
3022 [ + - ]: 4 : result = test_iterator_common( "root", mesh, root, array_size, (enum iBase_EntityType)i, iMesh_ALL_TOPOLOGIES );
3023 [ - + ][ # # ]: 4 : CHK( result );
3024 [ + - ]: 4 : result = test_iterator_common( "list", mesh, list, 1, (enum iBase_EntityType)i, iMesh_ALL_TOPOLOGIES );
3025 [ - + ][ # # ]: 4 : CHK( result );
3026 [ + - ]: 4 : result = test_iterator_common( "list", mesh, list, array_size, (enum iBase_EntityType)i, iMesh_ALL_TOPOLOGIES );
3027 [ - + ][ # # ]: 4 : CHK( result );
3028 [ + - ]: 4 : result = test_iterator_common( "set", mesh, set, 1, (enum iBase_EntityType)i, iMesh_ALL_TOPOLOGIES );
3029 [ - + ][ # # ]: 4 : CHK( result );
3030 [ + - ]: 4 : result = test_iterator_common( "set", mesh, set, array_size, (enum iBase_EntityType)i, iMesh_ALL_TOPOLOGIES );
3031 [ - + ][ # # ]: 4 : CHK( result );
3032 : : }
3033 : :
3034 : : /* test single iterator and array iterator for all types */
3035 [ + + ]: 12 : for( i = 0; i < iMesh_ALL_TOPOLOGIES; ++i )
3036 : : {
3037 : 11 : array_size = 2 * i + 2;
3038 [ + - ]: 11 : result = test_iterator_common( "root", mesh, root, 1, iBase_ALL_TYPES, (enum iMesh_EntityTopology)i );
3039 [ - + ][ # # ]: 11 : CHK( result );
3040 [ + - ]: 11 : result = test_iterator_common( "root", mesh, root, array_size, iBase_ALL_TYPES, (enum iMesh_EntityTopology)i );
3041 [ - + ][ # # ]: 11 : CHK( result );
3042 [ + - ]: 11 : result = test_iterator_common( "list", mesh, list, 1, iBase_ALL_TYPES, (enum iMesh_EntityTopology)i );
3043 [ - + ][ # # ]: 11 : CHK( result );
3044 [ + - ]: 11 : result = test_iterator_common( "list", mesh, list, array_size, iBase_ALL_TYPES, (enum iMesh_EntityTopology)i );
3045 [ - + ][ # # ]: 11 : CHK( result );
3046 [ + - ]: 11 : result = test_iterator_common( "set", mesh, set, 1, iBase_ALL_TYPES, (enum iMesh_EntityTopology)i );
3047 [ - + ][ # # ]: 11 : CHK( result );
3048 [ + - ]: 11 : result = test_iterator_common( "set", mesh, set, array_size, iBase_ALL_TYPES, (enum iMesh_EntityTopology)i );
3049 [ - + ][ # # ]: 11 : CHK( result );
3050 : : }
3051 : :
3052 : 1 : return 1;
3053 : : }
3054 : :
3055 : 1 : int main( int argc, char* argv[] )
3056 : : {
3057 : : /* Check command line arg */
3058 : : const char* filename;
3059 : 1 : int number_tests = 0;
3060 : 1 : int number_tests_successful = 0;
3061 : 1 : int number_tests_not_implemented = 0;
3062 : 1 : int number_tests_failed = 0;
3063 : : int result;
3064 : 1 : iMesh_Instance mesh = NULL;
3065 : :
3066 [ - + ]: 1 : if( argc == 2 ) { filename = argv[1]; }
3067 : : else
3068 : : {
3069 [ + - ]: 1 : printf( "Usage: %s <mesh_filename>\n", argv[0] );
3070 [ - + ]: 1 : if( argc != 1 ) return 1;
3071 [ + - ]: 1 : printf( " No file specified. Defaulting to: %s\n", DEFAULT_INPUT_FILE );
3072 : 1 : filename = DEFAULT_INPUT_FILE;
3073 : : }
3074 : :
3075 : : /* initialize the Mesh */
3076 [ + - ]: 1 : iMesh_newMesh( NULL, &mesh, &result, 0 );
3077 [ - + ]: 1 : if( iBase_SUCCESS != result )
3078 : : {
3079 [ # # ]: 0 : printf( "Failed to create a mesh instance.\n" );
3080 : 0 : return 1;
3081 : : }
3082 [ + - ]: 1 : iMesh_getRootSet( mesh, &root_set, &result );
3083 [ - + ]: 1 : if( iBase_SUCCESS != result )
3084 : : {
3085 [ # # ]: 0 : printf( "Failed to return a root set.\n" );
3086 : 0 : return 1;
3087 : : }
3088 : :
3089 : : /* Print out Header information */
3090 [ + - ]: 1 : printf( "\n\nTSTT TEST PROGRAM:\n\n" );
3091 : :
3092 : : /* load_mesh test */
3093 [ + - ]: 1 : printf( " load_mesh: " );
3094 [ + - ]: 1 : result = load_mesh_test( filename, mesh );
3095 [ + - ]: 1 : handle_error_code( result, &number_tests_failed, &number_tests_not_implemented, &number_tests_successful );
3096 : 1 : number_tests++;
3097 [ + - ]: 1 : printf( "\n" );
3098 : :
3099 : : /* topology_adjacency_test */
3100 [ + - ]: 1 : printf( " topology_adjacency_test: " );
3101 [ + - ]: 1 : result = topology_adjacency_test( mesh );
3102 [ + - ]: 1 : handle_error_code( result, &number_tests_failed, &number_tests_not_implemented, &number_tests_successful );
3103 : 1 : number_tests++;
3104 [ + - ]: 1 : printf( "\n" );
3105 : :
3106 : : /* entity connectivity test */
3107 [ + - ]: 1 : printf( " entity_connectivity_test: " );
3108 [ + - ]: 1 : result = entity_connectivity_test( mesh );
3109 [ + - ]: 1 : handle_error_code( result, &number_tests_failed, &number_tests_not_implemented, &number_tests_successful );
3110 : 1 : number_tests++;
3111 [ + - ]: 1 : printf( "\n" );
3112 : :
3113 : : /* vertex_coordinates_test */
3114 [ + - ]: 1 : printf( " vertex_coordinates_test: " );
3115 [ + - ]: 1 : result = vertex_coordinates_test( mesh );
3116 [ + - ]: 1 : handle_error_code( result, &number_tests_failed, &number_tests_not_implemented, &number_tests_successful );
3117 : 1 : number_tests++;
3118 [ + - ]: 1 : printf( "\n" );
3119 : :
3120 : : /* topology dimension test */
3121 [ + - ]: 1 : printf( " topology_dimension_test: " );
3122 [ + - ]: 1 : result = topology_dimension_test( mesh );
3123 [ + - ]: 1 : handle_error_code( result, &number_tests_failed, &number_tests_not_implemented, &number_tests_successful );
3124 : 1 : number_tests++;
3125 [ + - ]: 1 : printf( "\n" );
3126 : :
3127 : : /* entity sets test */
3128 [ + - ]: 1 : printf( " entity_sets_test: " );
3129 [ + - ]: 1 : result = entity_sets_test( mesh );
3130 [ + - ]: 1 : handle_error_code( result, &number_tests_failed, &number_tests_not_implemented, &number_tests_successful );
3131 : 1 : number_tests++;
3132 [ + - ]: 1 : printf( "\n" );
3133 : :
3134 : : /* vertex tag test */
3135 [ + - ]: 1 : printf( " vertex_tag_test: " );
3136 [ + - ]: 1 : result = vertex_tag_test( mesh );
3137 [ + - ]: 1 : handle_error_code( result, &number_tests_failed, &number_tests_not_implemented, &number_tests_successful );
3138 : 1 : number_tests++;
3139 [ + - ]: 1 : printf( "\n" );
3140 : :
3141 : : /* entityset tag test */
3142 [ + - ]: 1 : printf( " entityset_tag_test: " );
3143 [ + - ]: 1 : result = entityset_tag_test( mesh );
3144 [ + - ]: 1 : handle_error_code( result, &number_tests_failed, &number_tests_not_implemented, &number_tests_successful );
3145 : 1 : number_tests++;
3146 [ + - ]: 1 : printf( "\n" );
3147 : :
3148 : : /* mesh tag test */
3149 [ + - ]: 1 : printf( " mesh_tag_test: " );
3150 [ + - ]: 1 : result = mesh_tag_test( mesh );
3151 [ + - ]: 1 : handle_error_code( result, &number_tests_failed, &number_tests_not_implemented, &number_tests_successful );
3152 : 1 : number_tests++;
3153 [ + - ]: 1 : printf( "\n" );
3154 : :
3155 : : /* iterator test */
3156 [ + - ]: 1 : printf( " test_iterator: " );
3157 [ + - ]: 1 : result = test_iterator( mesh );
3158 [ + - ]: 1 : handle_error_code( result, &number_tests_failed, &number_tests_not_implemented, &number_tests_successful );
3159 : 1 : number_tests++;
3160 [ + - ]: 1 : printf( "\n" );
3161 : :
3162 : : /* regression test for remove/contained bug */
3163 [ + - ]: 1 : printf( " set_remove_contained_regression: " );
3164 [ + - ]: 1 : result = set_remove_contained_regression( mesh );
3165 [ + - ]: 1 : handle_error_code( result, &number_tests_failed, &number_tests_not_implemented, &number_tests_successful );
3166 : 1 : number_tests++;
3167 [ + - ]: 1 : printf( "\n" );
3168 : :
3169 : : /* regression test for adjacencies with iBase_ALL_TYPES bug */
3170 [ + - ]: 1 : printf( " all_adjacency_regression: " );
3171 [ + - ]: 1 : result = all_adjacency_regression( mesh );
3172 [ + - ]: 1 : handle_error_code( result, &number_tests_failed, &number_tests_not_implemented, &number_tests_successful );
3173 : 1 : number_tests++;
3174 [ + - ]: 1 : printf( "\n" );
3175 : :
3176 : : /* test for error codes */
3177 [ + - ]: 1 : printf( " error_code_test: " );
3178 [ + - ]: 1 : result = error_code_test( mesh );
3179 [ + - ]: 1 : handle_error_code( result, &number_tests_failed, &number_tests_not_implemented, &number_tests_successful );
3180 : 1 : number_tests++;
3181 [ + - ]: 1 : printf( "\n" );
3182 : :
3183 : : /* regression test for ordered sets not preserving order */
3184 [ + - ]: 1 : printf( " ordered_set_regression: " );
3185 [ + - ]: 1 : result = ordered_set_regression( mesh );
3186 [ + - ]: 1 : handle_error_code( result, &number_tests_failed, &number_tests_not_implemented, &number_tests_successful );
3187 : 1 : number_tests++;
3188 [ + - ]: 1 : printf( "\n" );
3189 : :
3190 : : /* test for array allocation behavior */
3191 [ + - ]: 1 : printf( " array_allocation_regression: " );
3192 [ + - ]: 1 : result = array_allocation( mesh );
3193 [ + - ]: 1 : handle_error_code( result, &number_tests_failed, &number_tests_not_implemented, &number_tests_successful );
3194 : 1 : number_tests++;
3195 [ + - ]: 1 : printf( "\n" );
3196 : :
3197 : : /* summary */
3198 : :
3199 [ + - ]: 1 : printf( "\nTSTT TEST SUMMARY: \n" );
3200 : :
3201 [ + - ]: 1 : printf( " Number Tests: %d\n", number_tests );
3202 [ + - ]: 1 : printf( " Number Successful: %d\n", number_tests_successful );
3203 [ + - ]: 1 : printf( " Number Not Implemented: %d\n", number_tests_not_implemented );
3204 [ + - ]: 1 : printf( " Number Failed: %d\n", number_tests_failed );
3205 [ + - ]: 1 : printf( "\n\n\n" );
3206 : :
3207 : : /* delete the mesh */
3208 [ + - ]: 1 : iMesh_dtor( mesh, &result );
3209 [ - + ]: 1 : if( iBase_SUCCESS != result )
3210 : : {
3211 [ # # ]: 0 : printf( "Failed to destruct the mesh instance.\n" );
3212 : 0 : return 1;
3213 : : }
3214 : :
3215 : 1 : return number_tests_failed;
3216 [ + - ][ + - ]: 4 : }
|