![]() |
Mesh Oriented datABase
(version 5.4.1)
Array-based unstructured mesh datastructure
|
00001 #include "TestRunner.hpp"
00002 #include "iMesh.h"
00003 #include "iMesh_extensions.h"
00004 #include "MBiMesh.hpp"
00005 #include "moab/Core.hpp"
00006 #include
00007
00008 void test_tag_iterate();
00009 void test_step_iter();
00010
00011 int main( int argc, char* argv[] )
00012 {
00013 REGISTER_TEST( test_tag_iterate );
00014 REGISTER_TEST( test_step_iter );
00015
00016 return RUN_TESTS( argc, argv );
00017 }
00018
00019 void test_tag_iterate()
00020 {
00021 iMesh_Instance mesh;
00022 int err;
00023 iMesh_newMesh( "", &mesh, &err, 0 );
00024 CHECK_EQUAL( iBase_SUCCESS, err );
00025
00026 iBase_EntitySetHandle root_set, entset;
00027 iMesh_getRootSet( mesh, &root_set, &err );
00028 CHECK_EQUAL( iBase_SUCCESS, err );
00029
00030 iBase_EntityHandle* verts = 0;
00031 int verts_alloc = 0, verts_size = 0;
00032 double coords[] = { 0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4, 5, 5, 5 };
00033 iMesh_createVtxArr( mesh, 6, iBase_INTERLEAVED, coords, 18, &verts, &verts_alloc, &verts_size, &err );
00034 CHECK_EQUAL( iBase_SUCCESS, err );
00035
00036 /* create an entity set with two subranges */
00037 iMesh_createEntSet( mesh, 0, &entset, &err );
00038 CHECK_EQUAL( iBase_SUCCESS, err );
00039 iMesh_addEntArrToSet( mesh, verts, 2, entset, &err );
00040 CHECK_EQUAL( iBase_SUCCESS, err );
00041 iMesh_addEntArrToSet( mesh, &verts[3], 3, entset, &err );
00042 CHECK_EQUAL( iBase_SUCCESS, err );
00043
00044 /* create a dbl tag and set vertices */
00045 iBase_TagHandle tagh;
00046 iMesh_createTagWithOptions( mesh, "dum", "moab:TAG_STORAGE_TYPE=DENSE", 1, iBase_DOUBLE, &tagh, &err, 3, 27 );
00047 CHECK_EQUAL( iBase_SUCCESS, err );
00048 iMesh_setDblArrData( mesh, verts, 6, tagh, coords + 3, 6, &err );
00049 CHECK_EQUAL( iBase_SUCCESS, err );
00050
00051 /* get an iterator over the root set, and check tag iterator for that */
00052 iBase_EntityArrIterator iter;
00053 int count, atend;
00054 double* data;
00055 iMesh_initEntArrIter( mesh, root_set, iBase_ALL_TYPES, iMesh_ALL_TOPOLOGIES, 6, 0, &iter, &err );
00056 CHECK_EQUAL( iBase_SUCCESS, err );
00057 iMesh_tagIterate( mesh, tagh, iter, &data, &count, &err );
00058 CHECK_EQUAL( iBase_SUCCESS, err );
00059 if( count != 6 ) CHECK_EQUAL( iBase_SUCCESS, iBase_FAILURE );
00060
00061 for( int i = 0; i < 6; i++ )
00062 {
00063 if( data[i] != coords[i + 3] ) CHECK_EQUAL( iBase_SUCCESS, iBase_FAILURE );
00064 }
00065 iMesh_endEntArrIter( mesh, iter, &err );
00066 CHECK_EQUAL( iBase_SUCCESS, err );
00067 iter = 0; // iMesh_endEntArrIter frees iter
00068
00069 /* get an iterator over the set with two subranges, and check tag iterator for that */
00070 iMesh_initEntArrIter( mesh, entset, iBase_ALL_TYPES, iMesh_ALL_TOPOLOGIES, 6, 0, &iter, &err );
00071 CHECK_EQUAL( iBase_SUCCESS, err );
00072 iMesh_tagIterate( mesh, tagh, iter, &data, &count, &err );
00073 CHECK_EQUAL( iBase_SUCCESS, err );
00074 if( count != 2 || data[0] != coords[3] || data[1] != coords[4] ) CHECK_EQUAL( iBase_SUCCESS, iBase_FAILURE );
00075 iMesh_stepEntArrIter( mesh, iter, 2, &atend, &err );
00076 CHECK_EQUAL( iBase_SUCCESS, err );
00077 /* shouldn't be at end yet */
00078 if( atend ) CHECK_EQUAL( iBase_SUCCESS, iBase_FAILURE );
00079
00080 iMesh_tagIterate( mesh, tagh, iter, &data, &count, &err );
00081 CHECK_EQUAL( iBase_SUCCESS, err );
00082 if( count != 3 || data[0] != coords[6] || data[1] != coords[7] ) CHECK_EQUAL( iBase_SUCCESS, iBase_FAILURE );
00083 iMesh_stepEntArrIter( mesh, iter, 3, &atend, &err );
00084 CHECK_EQUAL( iBase_SUCCESS, err );
00085 /* should be at end now */
00086 if( !atend ) CHECK_EQUAL( iBase_SUCCESS, iBase_FAILURE );
00087 iMesh_endEntArrIter( mesh, iter, &err );
00088 CHECK_EQUAL( iBase_SUCCESS, err );
00089
00090 iMesh_dtor( mesh, &err );
00091 CHECK_EQUAL( iBase_SUCCESS, err );
00092
00093 free( verts );
00094 }
00095
00096 void test_step_iter()
00097 {
00098 iMesh_Instance mesh;
00099 int err;
00100 iMesh_newMesh( "", &mesh, &err, 0 );
00101 CHECK_EQUAL( iBase_SUCCESS, err );
00102
00103 iBase_EntitySetHandle root_set;
00104 iMesh_getRootSet( mesh, &root_set, &err );
00105 CHECK_EQUAL( iBase_SUCCESS, err );
00106
00107 iBase_EntityHandle* verts = 0;
00108 int verts_alloc = 0, verts_size = 0;
00109 double coords[] = { 0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4, 5, 5, 5 };
00110 iMesh_createVtxArr( mesh, 6, iBase_INTERLEAVED, coords, 18, &verts, &verts_alloc, &verts_size, &err );
00111 CHECK_EQUAL( iBase_SUCCESS, err );
00112
00113 /* make a non-array iterator and test stepping over it */
00114 iBase_EntityIterator iter;
00115 int atend;
00116 iMesh_initEntIter( mesh, root_set, iBase_ALL_TYPES, iMesh_ALL_TOPOLOGIES, 0, &iter, &err );
00117 CHECK_EQUAL( iBase_SUCCESS, err );
00118 iMesh_stepEntIter( mesh, iter, 2, &atend, &err );
00119 CHECK_EQUAL( iBase_SUCCESS, err );
00120 /* shouldn't be at end yet */
00121 if( atend ) CHECK_EQUAL( iBase_SUCCESS, iBase_FAILURE );
00122
00123 iMesh_stepEntIter( mesh, iter, 4, &atend, &err );
00124 CHECK_EQUAL( iBase_SUCCESS, err );
00125 /* should be at end now */
00126 if( !atend ) CHECK_EQUAL( iBase_SUCCESS, iBase_FAILURE );
00127 iMesh_endEntIter( mesh, iter, &err );
00128 CHECK_EQUAL( iBase_SUCCESS, err );
00129
00130 /* make an array iterator and test stepping over it */
00131 iBase_EntityArrIterator arr_iter;
00132 iMesh_initEntArrIter( mesh, root_set, iBase_ALL_TYPES, iMesh_ALL_TOPOLOGIES, 6, 0, &arr_iter, &err );
00133 CHECK_EQUAL( iBase_SUCCESS, err );
00134 iMesh_stepEntArrIter( mesh, arr_iter, 2, &atend, &err );
00135 CHECK_EQUAL( iBase_SUCCESS, err );
00136 /* shouldn't be at end yet */
00137 if( atend ) CHECK_EQUAL( iBase_SUCCESS, iBase_FAILURE );
00138
00139 iMesh_stepEntArrIter( mesh, arr_iter, 4, &atend, &err );
00140 CHECK_EQUAL( iBase_SUCCESS, err );
00141 /* should be at end now */
00142 if( !atend ) CHECK_EQUAL( iBase_SUCCESS, iBase_FAILURE );
00143 iMesh_endEntArrIter( mesh, arr_iter, &err );
00144 CHECK_EQUAL( iBase_SUCCESS, err );
00145
00146 iMesh_dtor( mesh, &err );
00147 CHECK_EQUAL( iBase_SUCCESS, err );
00148
00149 free( verts );
00150 }