|
MOAB: Mesh Oriented datABase
(version 5.4.1)
|
#include "moab/Core.hpp"#include "moab/Range.hpp"#include "TestUtil.hpp"#include <cstdlib>#include <algorithm>
Include dependency graph for TagTest.cpp:Go to the source code of this file.
| enum SetMode |
Definition at line 115 of file TagTest.cpp.
| static void concat_to_list | ( | const void * | concat, |
| std::vector< const void * > & | list, | ||
| size_t | bytes | ||
| ) | [static] |
Definition at line 352 of file TagTest.cpp.
Referenced by test_get_set().
{
const unsigned char* ptr = reinterpret_cast< const unsigned char* >( concat );
std::vector< const void* >::iterator iter = list.begin();
for( ; iter != list.end(); ++iter, ptr += bytes )
*iter = ptr;
}
| static bool contains_tag | ( | Tag | tag, |
| const std::vector< Tag > & | list | ||
| ) | [static] |
Definition at line 1185 of file TagTest.cpp.
Referenced by test_get_entity_tags().
{
return std::find( list.begin(), list.end(), tag ) != list.end();
}
| int main | ( | ) |
Definition at line 49 of file TagTest.cpp.
References regression_one_entity_by_var_tag(), regression_tag_on_nonexistent_entity(), RUN_TEST, test_bit_tag_big(), test_clear_bit(), test_clear_dense(), test_clear_dense_varlen(), test_clear_sparse(), test_clear_sparse_varlen(), test_create_tag(), test_create_variable_length_tag(), test_delete_bit_data(), test_delete_dense_data(), test_delete_dense_tag(), test_delete_mesh_tag(), test_delete_sparse_data(), test_delete_sparse_tag(), test_get_by_tag(), test_get_by_tag_value(), test_get_by_tag_value_dense(), test_get_entity_tags(), test_get_ents_with_default_value(), test_get_pointers_dense(), test_get_pointers_sparse(), test_get_set_bit(), test_get_set_dense_double(), test_get_set_dense_int(), test_get_set_sparse_int(), test_get_set_variable_length_dense(), test_get_set_variable_length_mesh(), test_get_set_variable_length_sparse(), test_mesh_value(), test_set_pointers_dense(), test_set_pointers_sparse(), test_tag_iterate_dense(), test_tag_iterate_dense_default(), test_tag_iterate_invalid(), test_tag_iterate_sparse(), and test_tag_iterate_sparse_default().
{
int failures = 0;
failures += RUN_TEST( test_create_tag );
failures += RUN_TEST( test_get_set_sparse_int );
failures += RUN_TEST( test_get_set_dense_int );
failures += RUN_TEST( test_get_set_dense_double );
failures += RUN_TEST( test_get_set_bit );
failures += RUN_TEST( test_get_by_tag );
failures += RUN_TEST( test_get_by_tag_value );
failures += RUN_TEST( test_get_by_tag_value_dense );
failures += RUN_TEST( test_mesh_value );
failures += RUN_TEST( test_get_pointers_sparse );
failures += RUN_TEST( test_get_pointers_dense );
failures += RUN_TEST( test_set_pointers_sparse );
failures += RUN_TEST( test_set_pointers_dense );
failures += RUN_TEST( test_get_entity_tags );
failures += RUN_TEST( test_delete_sparse_tag );
failures += RUN_TEST( test_delete_dense_tag );
failures += RUN_TEST( test_delete_mesh_tag );
failures += RUN_TEST( test_delete_sparse_data );
failures += RUN_TEST( test_delete_dense_data );
failures += RUN_TEST( test_delete_bit_data );
failures += RUN_TEST( test_create_variable_length_tag );
failures += RUN_TEST( test_get_set_variable_length_sparse );
failures += RUN_TEST( test_get_set_variable_length_dense );
failures += RUN_TEST( test_get_set_variable_length_mesh );
failures += RUN_TEST( test_get_ents_with_default_value );
failures += RUN_TEST( test_bit_tag_big );
failures += RUN_TEST( regression_one_entity_by_var_tag );
failures += RUN_TEST( regression_tag_on_nonexistent_entity );
failures += RUN_TEST( test_clear_dense );
failures += RUN_TEST( test_clear_sparse );
failures += RUN_TEST( test_clear_bit );
failures += RUN_TEST( test_clear_dense_varlen );
failures += RUN_TEST( test_clear_sparse_varlen );
failures += RUN_TEST( test_tag_iterate_sparse );
failures += RUN_TEST( test_tag_iterate_dense );
failures += RUN_TEST( test_tag_iterate_sparse_default );
failures += RUN_TEST( test_tag_iterate_dense_default );
failures += RUN_TEST( test_tag_iterate_invalid );
if( failures ) std::cerr << "<<<< " << failures << " TESTS FAILED >>>>" << std::endl;
return failures;
}
| void regression_one_entity_by_var_tag | ( | ) |
Definition at line 1934 of file TagTest.cpp.
References CHECK_EQUAL, CHECK_ERR, moab::Core::create_vertex(), ErrorCode, moab::Range::front(), moab::Core::get_entities_by_type_and_tag(), MB_TAG_DENSE, MB_TAG_EXCL, MB_TAG_VARLEN, MB_TYPE_INTEGER, MBVERTEX, moab::Range::size(), moab::Core::tag_get_handle(), and moab::Core::tag_set_by_ptr().
Referenced by main().
{
Core moab;
ErrorCode rval;
EntityHandle vertex;
const double coords[] = { 0, 0, 0 };
rval = moab.create_vertex( coords, vertex );CHECK_ERR( rval );
Tag tag;
rval = moab.tag_get_handle( "testtag", 0, MB_TYPE_INTEGER, tag, MB_TAG_DENSE | MB_TAG_VARLEN | MB_TAG_EXCL );CHECK_ERR( rval );
int taglen = 1;
const void* ptrarr[1] = { &taglen };
rval = moab.tag_set_by_ptr( tag, &vertex, 1, ptrarr, &taglen );CHECK_ERR( rval );
Range ents;
rval = moab.get_entities_by_type_and_tag( 0, MBVERTEX, &tag, 0, 1, ents );CHECK_ERR( rval );
CHECK_EQUAL( (size_t)1, ents.size() );
CHECK_EQUAL( vertex, ents.front() );
}
| void regression_tag_on_nonexistent_entity | ( | ) |
Definition at line 1960 of file TagTest.cpp.
References CHECK_EQUAL, CHECK_ERR, moab::Range::clear(), moab::Core::create_meshset(), ErrorCode, moab::Range::insert(), MB_ENTITY_NOT_FOUND, MB_TAG_DENSE, MB_TAG_EXCL, MB_TAG_SPARSE, MB_TYPE_BIT, MB_TYPE_INTEGER, moab::Core::tag_get_handle(), moab::Core::tag_set_by_ptr(), and moab::Core::tag_set_data().
Referenced by main().
{
Core moab;
ErrorCode rval;
const int tagval = 0xdeadbeef;
const void* valarr[1] = { &tagval };
const int numval = 1;
// create all three types of tags
Tag dense, sparse, bit;
rval = moab.tag_get_handle( "test_dense", 1, MB_TYPE_INTEGER, dense, MB_TAG_DENSE | MB_TAG_EXCL );CHECK_ERR( rval );
rval = moab.tag_get_handle( "test_sparse", 1, MB_TYPE_INTEGER, sparse, MB_TAG_SPARSE | MB_TAG_EXCL );CHECK_ERR( rval );
rval = moab.tag_get_handle( "test_bit", 4, MB_TYPE_BIT, bit, MB_TAG_EXCL );CHECK_ERR( rval );
// for each tag type, check all four mechanisms for setting tag data
// (fixed and variable length given array or range).
EntityHandle handle = (EntityHandle)1;
Range handles;
handles.insert( handle );
rval = moab.tag_set_data( dense, &handle, 1, &tagval );
CHECK_EQUAL( MB_ENTITY_NOT_FOUND, rval );
rval = moab.tag_set_data( sparse, &handle, 1, &tagval );
CHECK_EQUAL( MB_ENTITY_NOT_FOUND, rval );
rval = moab.tag_set_data( bit, &handle, 1, &tagval );
CHECK_EQUAL( MB_ENTITY_NOT_FOUND, rval );
rval = moab.tag_set_data( dense, handles, &tagval );
CHECK_EQUAL( MB_ENTITY_NOT_FOUND, rval );
rval = moab.tag_set_data( sparse, handles, &tagval );
CHECK_EQUAL( MB_ENTITY_NOT_FOUND, rval );
rval = moab.tag_set_data( bit, handles, &tagval );
CHECK_EQUAL( MB_ENTITY_NOT_FOUND, rval );
rval = moab.tag_set_by_ptr( dense, &handle, 1, valarr, &numval );
CHECK_EQUAL( MB_ENTITY_NOT_FOUND, rval );
rval = moab.tag_set_by_ptr( sparse, &handle, 1, valarr, &numval );
CHECK_EQUAL( MB_ENTITY_NOT_FOUND, rval );
rval = moab.tag_set_by_ptr( dense, handles, valarr, &numval );
CHECK_EQUAL( MB_ENTITY_NOT_FOUND, rval );
rval = moab.tag_set_by_ptr( sparse, handles, valarr, &numval );
CHECK_EQUAL( MB_ENTITY_NOT_FOUND, rval );
// now add create an entity and try an adjacent handle
EntityHandle set;
rval = moab.create_meshset( 0, set );CHECK_ERR( rval );
handle = (EntityHandle)( set + 1 );
handles.clear();
handles.insert( handle );
rval = moab.tag_set_data( dense, &handle, 1, &tagval );
CHECK_EQUAL( MB_ENTITY_NOT_FOUND, rval );
rval = moab.tag_set_data( sparse, &handle, 1, &tagval );
CHECK_EQUAL( MB_ENTITY_NOT_FOUND, rval );
rval = moab.tag_set_data( bit, &handle, 1, &tagval );
CHECK_EQUAL( MB_ENTITY_NOT_FOUND, rval );
rval = moab.tag_set_data( dense, handles, &tagval );
CHECK_EQUAL( MB_ENTITY_NOT_FOUND, rval );
rval = moab.tag_set_data( sparse, handles, &tagval );
CHECK_EQUAL( MB_ENTITY_NOT_FOUND, rval );
rval = moab.tag_set_data( bit, handles, &tagval );
CHECK_EQUAL( MB_ENTITY_NOT_FOUND, rval );
rval = moab.tag_set_by_ptr( dense, &handle, 1, valarr, &numval );
CHECK_EQUAL( MB_ENTITY_NOT_FOUND, rval );
rval = moab.tag_set_by_ptr( sparse, &handle, 1, valarr, &numval );
CHECK_EQUAL( MB_ENTITY_NOT_FOUND, rval );
rval = moab.tag_set_by_ptr( dense, handles, valarr, &numval );
CHECK_EQUAL( MB_ENTITY_NOT_FOUND, rval );
rval = moab.tag_set_by_ptr( sparse, handles, valarr, &numval );
CHECK_EQUAL( MB_ENTITY_NOT_FOUND, rval );
}
| ErrorCode set_bit_data | ( | Interface & | mb, |
| Tag | tag, | ||
| const Container & | handles, | ||
| const std::vector< unsigned char > & | data | ||
| ) |
Definition at line 1173 of file TagTest.cpp.
References ErrorCode, MB_SUCCESS, and moab::Interface::tag_set_data().
{
ErrorCode rval;
data.resize( handles.size() );
std::vector< unsigned char >::const_iterator j = data.begin();
for( typename Container::const_iterator i = handles.begin(); i != handles.end(); ++i, ++j )
{
rval = mb.tag_set_data( tag, &*i, 1, &*j );
if( MB_SUCCESS != rval ) return rval;
}
}
| void setup_mesh | ( | Interface & | mesh | ) |
Definition at line 1897 of file TagTest.cpp.
References moab::Range::begin(), CHECK_EQUAL, CHECK_ERR, moab::Interface::create_element(), moab::Interface::create_vertices(), moab::Interface::delete_entities(), ErrorCode, MBHEX, moab::Range::size(), and vertex_coords().
Referenced by test_clear_bit(), test_delete_bit_data(), test_delete_tag_data(), test_delete_type_tag(), test_get_by_tag(), test_get_by_tag_value(), test_get_by_tag_value_dense(), test_get_entity_tags(), test_get_set(), test_get_set_bit(), and test_get_set_variable_length().
{
Range vertex_handles;
const double vertex_coords[] = { 0, 0, 0, 1, 0, 0, 2, 0, 0, 0, 1, 0, 1, 1, 0, 2, 1, 0, 0, 2, 0, 1, 2, 0, 2, 2, 0,
0, 0, 1, 1, 0, 1, 2, 0, 1, 0, 1, 1, 1, 1, 1, 2, 1, 1, 0, 2, 1, 1, 2, 1, 2, 2, 1,
0, 0, 2, 1, 0, 2, 2, 0, 2, 0, 1, 2, 1, 1, 2, 2, 1, 2, 0, 2, 2, 1, 2, 2, 2, 2, 2 };
const unsigned num_vtx = sizeof( vertex_coords ) / ( 3 * sizeof( double ) );
ErrorCode rval = mb.create_vertices( vertex_coords, num_vtx, vertex_handles );CHECK_ERR( rval );
CHECK_EQUAL( num_vtx, (unsigned)vertex_handles.size() );
CHECK_EQUAL( 27u, num_vtx );
EntityHandle elements[8];
EntityHandle conn[8][8] = { { 0, 1, 4, 3, 9, 10, 13, 12 }, { 1, 2, 5, 4, 10, 11, 14, 13 },
{ 3, 4, 7, 6, 12, 13, 16, 15 }, { 4, 5, 8, 7, 13, 14, 17, 16 },
{ 9, 10, 13, 12, 18, 19, 22, 21 }, { 10, 11, 14, 13, 19, 20, 23, 22 },
{ 12, 13, 16, 15, 21, 22, 25, 24 }, { 13, 14, 17, 16, 22, 23, 26, 25 } };
for( unsigned i = 0; i < 8; ++i )
{
rval = mb.create_element( MBHEX, conn[i], 8, elements[i] );CHECK_ERR( rval );
}
// delete some stuff so there are multiple sequences
rval = mb.delete_entities( elements + 2, 2 );CHECK_ERR( rval );
Range::iterator i = vertex_handles.begin();
i += 16;
rval = mb.delete_entities( &*i, 1 );CHECK_ERR( rval );
i += 2;
rval = mb.delete_entities( &*i, 1 );CHECK_ERR( rval );
}
| void test_bit_tag_big | ( | ) |
Definition at line 1827 of file TagTest.cpp.
References moab::Range::begin(), CHECK_EQUAL, CHECK_ERR, moab::Interface::create_vertices(), moab::Range::end(), ErrorCode, moab::Interface::get_entities_by_type_and_tag(), moab::Range::insert(), MB_TAG_BIT, MB_TYPE_BIT, MBVERTEX, moab::Range::rbegin(), moab::Range::rend(), moab::Range::size(), moab::Interface::tag_get_data(), moab::Interface::tag_set_data(), and test_create_tag().
Referenced by main().
{
Core moab;
Interface& mb = moab;
ErrorCode rval;
const size_t NUM_VTX = 30000;
// create a lot of vertices
std::vector< double > coords( 3 * NUM_VTX, 0.0 );
Range verts;
rval = mb.create_vertices( &coords[0], NUM_VTX, verts );CHECK_ERR( rval );
CHECK_EQUAL( NUM_VTX, (size_t)verts.size() );
// create a bit tag
Tag tag = test_create_tag( mb, "bb", 4, MB_TAG_BIT, MB_TYPE_BIT, 0 );
// for each vertex, store last four bits of handle as tag value
std::vector< unsigned char > values( NUM_VTX );
std::vector< unsigned char >::iterator it = values.begin();
for( Range::iterator j = verts.begin(); j != verts.end(); ++j, ++it )
*it = (unsigned char)( *j & 0xF );
rval = mb.tag_set_data( tag, verts, &values[0] );CHECK_ERR( rval );
// retrieve values
std::vector< unsigned char > values2( NUM_VTX, 0 );
rval = mb.tag_get_data( tag, verts, &values2[0] );
CHECK_EQUAL( values, values2 );
// retrieve individual values
it = values.begin();
for( Range::iterator j = verts.begin(); j != verts.end(); ++j, ++it )
{
char value;
rval = mb.tag_get_data( tag, &*j, 1, &value );CHECK_ERR( rval );
CHECK_EQUAL( *it, value );
}
// retrieve entities
unsigned char value = 0xC;
Range expected, results;
for( Range::reverse_iterator j = verts.rbegin(); j != verts.rend(); ++j )
if( (unsigned char)( *j & 0xF ) == value ) expected.insert( *j );
const void* vals[] = { &value };
rval = mb.get_entities_by_type_and_tag( 0, MBVERTEX, &tag, vals, 1, results );CHECK_ERR( rval );
CHECK_EQUAL( expected, results );
// test singe-bit tag
Tag tag1 = test_create_tag( mb, "bb1", 1, MB_TAG_BIT, MB_TYPE_BIT, 0 );
// set tag to 1 on all vertices
values.clear();
values.resize( NUM_VTX, '\001' );
rval = mb.tag_set_data( tag1, verts, &values[0] );CHECK_ERR( rval );
// retrieve values individually
for( Range::iterator j = verts.begin(); j != verts.end(); ++j )
{
char cvalue;
rval = mb.tag_get_data( tag1, &*j, 1, &cvalue );CHECK_ERR( rval );
CHECK_EQUAL( 1, (int)cvalue );
}
// clear values individually
for( Range::iterator j = verts.begin(); j != verts.end(); ++j )
{
char cvalue = '\0';
rval = mb.tag_set_data( tag1, &*j, 1, &cvalue );CHECK_ERR( rval );
}
// retrieve values using range
rval = mb.tag_get_data( tag1, verts, &values[0] );CHECK_ERR( rval );
size_t first_one = std::find( values.begin(), values.end(), '\001' ) - values.begin();
CHECK_EQUAL( values.size(), first_one );
}
| void test_clear_bit | ( | ) |
Definition at line 808 of file TagTest.cpp.
References moab::Range::begin(), CHECK, CHECK_EQUAL, CHECK_ERR, moab::Range::empty(), moab::Range::end(), entities, ErrorCode, moab::Interface::get_entities_by_handle(), mb, MB_TAG_BIT, MB_TYPE_BIT, setup_mesh(), moab::Interface::tag_clear_data(), moab::Interface::tag_get_data(), and test_create_tag().
Referenced by main().
{
// create mesh and tag
Core moab;
Interface& mb = moab;
setup_mesh( mb );
Tag tag = test_create_tag( mb, "clear_bit_val", 2, MB_TAG_BIT, MB_TYPE_BIT, 0 );
// get some handles to work with
Range entities;
ErrorCode rval = mb.get_entities_by_handle( 0, entities );CHECK_ERR( rval );
CHECK( !entities.empty() );
const unsigned char bits = 2;
rval = mb.tag_clear_data( tag, entities, &bits );CHECK_ERR( rval );
// set bits on every entity
for( Range::iterator i = entities.begin(); i != entities.end(); ++i )
{
unsigned char bits_out = 0;
rval = mb.tag_get_data( tag, &*i, 1, &bits_out );
CHECK_EQUAL( bits, bits_out );
}
}
| void test_clear_dense | ( | ) |
Definition at line 734 of file TagTest.cpp.
References MB_TAG_DENSE, MB_TYPE_DOUBLE, MB_TYPE_INTEGER, ONE_VALUE, and test_get_set().
Referenced by main().
{
const int int_val = 0xcab;
test_get_set( "clear_dense_int", 1, MB_TAG_DENSE, MB_TYPE_INTEGER, &int_val, 1, 0, ONE_VALUE, false );
const double dbl_val[] = { 3.14159, -3.14159 };
const double default_val[] = { -2, 5 };
test_get_set( "clear_dense_double", 2, MB_TAG_DENSE, MB_TYPE_DOUBLE, &dbl_val, 1, default_val, ONE_VALUE, false );
}
| void test_clear_dense_varlen | ( | ) |
Definition at line 1746 of file TagTest.cpp.
References MB_TAG_DENSE, and test_clear_variable_length().
Referenced by main().
| void test_clear_sparse | ( | ) |
Definition at line 744 of file TagTest.cpp.
References MB_TAG_SPARSE, MB_TYPE_DOUBLE, MB_TYPE_INTEGER, ONE_VALUE, and test_get_set().
Referenced by main().
{
const int int_val = 0xcab;
test_get_set( "clear_sparse_int", 1, MB_TAG_SPARSE, MB_TYPE_INTEGER, &int_val, 1, 0, ONE_VALUE, false );
const double dbl_val[] = { 3.14159, -3.14159 };
const double default_val[] = { -2, 5 };
test_get_set( "clear_sparse_double", 2, MB_TAG_SPARSE, MB_TYPE_DOUBLE, &dbl_val, 1, default_val, ONE_VALUE, false );
}
| void test_clear_sparse_varlen | ( | ) |
Definition at line 1741 of file TagTest.cpp.
References MB_TAG_SPARSE, and test_clear_variable_length().
Referenced by main().
| void test_clear_variable_length | ( | TagType | storage | ) |
Definition at line 1726 of file TagTest.cpp.
References ints, MB_TYPE_DOUBLE, MB_TYPE_INTEGER, and test_get_set_variable_length().
Referenced by test_clear_dense_varlen(), and test_clear_sparse_varlen().
{
const double doubles[3] = { 1e-1, 1e-2, 1e-3 };
const void* dvals[] = { doubles };
const int dlen = sizeof( doubles ) / sizeof( double );
test_get_set_variable_length( "vnodef_clear", storage, MB_TYPE_DOUBLE, dvals, &dlen, 1, 0, 0 );
const int ints[32] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
-1, -2, -3, -4, -5, -6, -7, -8, -9, -10, -11, -12, -13, -14, -15 };
const void* ivals[] = { ints };
const int ilen = sizeof( ints ) / sizeof( int );
const int defvals[] = { 42, 5, 8, 74 };
test_get_set_variable_length( "vdef_clear", storage, MB_TYPE_INTEGER, ivals, &ilen, 1, defvals, 4 );
}
| void test_create_tag | ( | ) |
Definition at line 297 of file TagTest.cpp.
References mb, MB_TAG_BIT, MB_TAG_DENSE, MB_TAG_SPARSE, MB_TYPE_BIT, MB_TYPE_DOUBLE, MB_TYPE_HANDLE, MB_TYPE_INTEGER, and MB_TYPE_OPAQUE.
Referenced by main(), test_bit_tag_big(), test_clear_bit(), test_delete_bit_data(), test_delete_tag_data(), test_delete_type_tag(), test_get_by_tag(), test_get_by_tag_value(), test_get_by_tag_value_dense(), test_get_entity_tags(), test_get_ents_with_default_value(), test_get_set(), test_get_set_bit(), and test_mesh_value().
{
Core mb;
unsigned char defval[] = { 1, 2, 3, 4, 0, 0, 0, 0 };
// opaque tags
test_create_tag( mb, "opaque_tag_sparse", 8, MB_TAG_SPARSE, MB_TYPE_OPAQUE, defval );
test_create_tag( mb, "opaque_tag_dense", 4, MB_TAG_DENSE, MB_TYPE_OPAQUE, defval );
test_create_tag( mb, "opaque_tag_dense2", 1, MB_TAG_DENSE, MB_TYPE_OPAQUE, 0 );
// integer tags
test_create_tag( mb, "int_tag_sparse", 1, MB_TAG_SPARSE, MB_TYPE_INTEGER, defval );
test_create_tag( mb, "int_tag_dense", 8, MB_TAG_DENSE, MB_TYPE_INTEGER, 0 );
// double tags
double defval2[] = { 3.14159, 2.71828 };
test_create_tag( mb, "dbl_tag_sparse", 1, MB_TAG_SPARSE, MB_TYPE_DOUBLE, 0 );
test_create_tag( mb, "dbl_tag_dense", 2, MB_TAG_DENSE, MB_TYPE_DOUBLE, defval2 );
// handle tags
test_create_tag( mb, "h_tag_dense", 1, MB_TAG_DENSE, MB_TYPE_HANDLE, defval );
// bit tags
unsigned char def_bit_val = 0xBF;
test_create_tag( mb, "bit_tag_1", 2, MB_TAG_BIT, MB_TYPE_BIT, &def_bit_val );
}
| Tag test_create_tag | ( | Interface & | mb, |
| const char * | name, | ||
| int | num_vals, | ||
| TagType | storage, | ||
| DataType | type, | ||
| const void * | defval, | ||
| ErrorCode | expect = MB_SUCCESS |
||
| ) |
Definition at line 148 of file TagTest.cpp.
References CHECK, CHECK_EQUAL, CHECK_ERR, ErrorCode, MB_ALREADY_ALLOCATED, MB_ENTITY_NOT_FOUND, MB_SUCCESS, MB_TAG_EXCL, MB_TYPE_BIT, MB_TYPE_DOUBLE, MB_TYPE_HANDLE, MB_TYPE_INTEGER, MB_TYPE_OPAQUE, t, moab::Interface::tag_get_bytes(), moab::Interface::tag_get_data_type(), moab::Interface::tag_get_default_value(), moab::Interface::tag_get_handle(), moab::Interface::tag_get_length(), moab::Interface::tag_get_name(), moab::Interface::tag_get_type(), and TagType.
{
ErrorCode rval;
Tag tag;
rval = mb.tag_get_handle( name, num_vals, type, tag, storage | MB_TAG_EXCL, defval );
if( expect != MB_SUCCESS )
{
CHECK_EQUAL( expect, rval );
return 0;
}
CHECK_ERR( rval );
std::string n;
rval = mb.tag_get_name( tag, n );CHECK_ERR( rval );
CHECK( n == name );
Tag tag2;
rval = mb.tag_get_handle( name, num_vals, type, tag2 );CHECK_ERR( rval );
CHECK_EQUAL( tag, tag2 );
int s;
rval = mb.tag_get_length( tag, s );CHECK_ERR( rval );
CHECK_EQUAL( num_vals, s );
TagType t;
rval = mb.tag_get_type( tag, t );CHECK_ERR( rval );
CHECK_EQUAL( storage, t );
DataType d;
rval = mb.tag_get_data_type( tag, d );CHECK_ERR( rval );
CHECK_EQUAL( type, d );
int bytes;
rval = mb.tag_get_bytes( tag, bytes );CHECK_ERR( rval );
int exp_bytes = 0;
switch( type )
{
case MB_TYPE_INTEGER:
exp_bytes = num_vals * sizeof( int );
break;
case MB_TYPE_DOUBLE:
exp_bytes = num_vals * sizeof( double );
break;
case MB_TYPE_HANDLE:
exp_bytes = num_vals * sizeof( EntityHandle );
break;
case MB_TYPE_BIT:
exp_bytes = 1;
break;
case MB_TYPE_OPAQUE:
exp_bytes = num_vals;
break;
}
CHECK_EQUAL( exp_bytes, bytes );
std::vector< unsigned char > defv( bytes );
rval = mb.tag_get_default_value( tag, &defv[0] );
if( defval )
{
CHECK_ERR( rval );
CHECK( !memcmp( defval, &defv[0], bytes ) );
}
else
{
CHECK_EQUAL( MB_ENTITY_NOT_FOUND, rval );
}
// make sure we can't create a second tag w/ the same name
rval = mb.tag_get_handle( name, num_vals, type, tag2, storage | MB_TAG_EXCL, defval );
CHECK_EQUAL( MB_ALREADY_ALLOCATED, rval );
// we should get back the handle of the existing tag
CHECK_EQUAL( tag, tag2 );
return tag;
}
| Tag test_create_var_len_tag | ( | Interface & | mb, |
| const char * | name, | ||
| TagType | storage, | ||
| DataType | type, | ||
| const void * | defval, | ||
| int | defval_size, | ||
| ErrorCode | expect = MB_SUCCESS |
||
| ) |
Definition at line 231 of file TagTest.cpp.
References CHECK, CHECK_EQUAL, CHECK_ERR, ErrorCode, MB_ALREADY_ALLOCATED, MB_ENTITY_NOT_FOUND, MB_SUCCESS, MB_TAG_EXCL, MB_TAG_VARLEN, MB_VARIABLE_DATA_LENGTH, size, t, moab::Interface::tag_get_bytes(), moab::Interface::tag_get_data_type(), moab::Interface::tag_get_default_value(), moab::Interface::tag_get_handle(), moab::Interface::tag_get_length(), moab::Interface::tag_get_name(), moab::Interface::tag_get_type(), and TagType.
Referenced by test_create_variable_length_tag(), test_get_set_variable_length(), and test_get_set_variable_length_mesh().
{
ErrorCode rval;
Tag tag;
rval = mb.tag_get_handle( name, defval_size, type, tag, storage | MB_TAG_VARLEN | MB_TAG_EXCL, defval );
if( expect != MB_SUCCESS )
{
CHECK_EQUAL( expect, rval );
return 0;
}
CHECK_ERR( rval );
std::string n;
rval = mb.tag_get_name( tag, n );CHECK_ERR( rval );
CHECK( n == name );
Tag tag2;
rval = mb.tag_get_handle( name, 0, type, tag2 );CHECK_ERR( rval );
CHECK_EQUAL( tag, tag2 );
int s;
rval = mb.tag_get_bytes( tag, s );
CHECK_EQUAL( MB_VARIABLE_DATA_LENGTH, rval );
rval = mb.tag_get_length( tag, s );
CHECK_EQUAL( MB_VARIABLE_DATA_LENGTH, rval );
// CHECK_ERR(rval);
// CHECK_EQUAL( MB_VARIABLE_LENGTH, s );
TagType t;
rval = mb.tag_get_type( tag, t );CHECK_ERR( rval );
CHECK_EQUAL( storage, t );
DataType d;
rval = mb.tag_get_data_type( tag, d );CHECK_ERR( rval );
CHECK_EQUAL( type, d );
int size;
const void* defv;
rval = mb.tag_get_default_value( tag, defv, size );
if( defval )
{
CHECK_ERR( rval );
CHECK_EQUAL( defval_size, size );
CHECK( !memcmp( defval, defv, size ) );
}
else
{
CHECK_EQUAL( MB_ENTITY_NOT_FOUND, rval );
}
// make sure we can't create a second tag w/ the same name
rval = mb.tag_get_handle( name, defval_size, type, tag2, storage | MB_TAG_VARLEN | MB_TAG_EXCL );
CHECK_EQUAL( MB_ALREADY_ALLOCATED, rval );
// we should get back the handle of the existing tag
CHECK_EQUAL( tag, tag2 );
return tag;
}
| void test_create_variable_length_tag | ( | ) |
Definition at line 324 of file TagTest.cpp.
References mb, MB_TAG_DENSE, MB_TAG_SPARSE, MB_TYPE_DOUBLE, MB_TYPE_HANDLE, MB_TYPE_INTEGER, MB_TYPE_OPAQUE, and test_create_var_len_tag().
Referenced by main().
{
Core mb;
unsigned char defval[] = { 1, 2, 3, 4, 0, 0, 0, 0 };
// opaque tags
const void* defptr = defval;
test_create_var_len_tag( mb, "opaque_tag_sparse", MB_TAG_SPARSE, MB_TYPE_OPAQUE, defptr, 8 );
test_create_var_len_tag( mb, "opaque_tag_dense", MB_TAG_DENSE, MB_TYPE_OPAQUE, defptr, 4 );
test_create_var_len_tag( mb, "opaque_tag_dense2", MB_TAG_DENSE, MB_TYPE_OPAQUE, 0, 0 );
// integer tags
test_create_var_len_tag( mb, "int_tag_sparse", MB_TAG_SPARSE, MB_TYPE_INTEGER, defptr, 1 );
test_create_var_len_tag( mb, "int_tag_dense", MB_TAG_DENSE, MB_TYPE_INTEGER, 0, 0 );
// double tags
double defval2[] = { 3.14159, 2.71828 };
defptr = defval2;
test_create_var_len_tag( mb, "dbl_tag_sparse", MB_TAG_SPARSE, MB_TYPE_DOUBLE, 0, 0 );
test_create_var_len_tag( mb, "dbl_tag_dense", MB_TAG_DENSE, MB_TYPE_DOUBLE, defptr, 2 );
// handle tags
test_create_var_len_tag( mb, "h_tag_dense", MB_TAG_DENSE, MB_TYPE_HANDLE, 0, 0 );
}
| void test_delete_bit_data | ( | ) |
Definition at line 1405 of file TagTest.cpp.
References CHECK, CHECK_EQUAL, CHECK_ERR, moab::Range::empty(), entities, ErrorCode, moab::Range::front(), moab::Interface::get_entities_by_handle(), MB_SUCCESS, MB_TAG_BIT, MB_TAG_NOT_FOUND, MB_TYPE_BIT, setup_mesh(), moab::Interface::tag_delete_data(), moab::Interface::tag_get_data(), moab::Interface::tag_set_data(), and test_create_tag().
Referenced by main().
{
Core moab;
Interface& mb = moab;
ErrorCode rval;
// get an entity to set data on
setup_mesh( mb );
Range entities;
rval = mb.get_entities_by_handle( 0, entities );CHECK_ERR( rval );
CHECK( !entities.empty() );
EntityHandle handle = entities.front();
// create two tags, one with a default value and one without
unsigned char defval = '\006'; // 110
Tag tag1, tag2;
tag1 = test_create_tag( mb, "tag1", 2, MB_TAG_BIT, MB_TYPE_BIT, 0 );
tag2 = test_create_tag( mb, "tag2", 3, MB_TAG_BIT, MB_TYPE_BIT, &defval );
// set value for each tag
unsigned char val = '\001';
rval = mb.tag_set_data( tag1, &handle, 1, &val );CHECK_ERR( rval );
rval = mb.tag_set_data( tag2, &handle, 1, &val );CHECK_ERR( rval );
// delete both tag values
rval = mb.tag_delete_data( tag1, &handle, 1 );CHECK_ERR( rval );
rval = mb.tag_delete_data( tag2, &handle, 1 );CHECK_ERR( rval );
// try to get value for tag w/out default.
// should get back either not found, or a zero value.
val = 0xFF;
rval = mb.tag_get_data( tag1, &handle, 1, &val );
if( MB_SUCCESS == rval )
CHECK_EQUAL( val, '\0' );
else
CHECK_EQUAL( MB_TAG_NOT_FOUND, rval );
// test that we get back default value for second tag
val = 0xFF;
rval = mb.tag_get_data( tag2, &handle, 1, &val );CHECK_ERR( rval );
CHECK_EQUAL( defval, val );
}
| void test_delete_dense_data | ( | ) |
Definition at line 1399 of file TagTest.cpp.
References MB_TAG_SPARSE, and test_delete_tag_data().
Referenced by main().
{
test_delete_tag_data( MB_TAG_SPARSE, false );
test_delete_tag_data( MB_TAG_SPARSE, true );
}
| void test_delete_dense_tag | ( | ) |
Definition at line 1286 of file TagTest.cpp.
References MB_TAG_DENSE, and test_delete_type_tag().
Referenced by main().
{
test_delete_type_tag( MB_TAG_DENSE );
}
| void test_delete_mesh_tag | ( | ) |
Definition at line 1291 of file TagTest.cpp.
References MB_TAG_MESH, and test_delete_type_tag().
Referenced by main().
{
test_delete_type_tag( MB_TAG_MESH );
}
| void test_delete_sparse_data | ( | ) |
Definition at line 1393 of file TagTest.cpp.
References MB_TAG_DENSE, and test_delete_tag_data().
Referenced by main().
{
test_delete_tag_data( MB_TAG_DENSE, false );
test_delete_tag_data( MB_TAG_DENSE, true );
}
| void test_delete_sparse_tag | ( | ) |
Definition at line 1281 of file TagTest.cpp.
References MB_TAG_SPARSE, and test_delete_type_tag().
Referenced by main().
{
test_delete_type_tag( MB_TAG_SPARSE );
}
| void test_delete_tag_data | ( | TagType | storage, |
| bool | with_default_value | ||
| ) |
Definition at line 1296 of file TagTest.cpp.
References moab::Range::begin(), CHECK, CHECK_ERR, moab::Range::end(), ErrorCode, moab::GeomUtil::first(), moab::Range::front(), moab::Interface::get_entities_by_handle(), moab::Range::insert(), MB_TAG_NOT_FOUND, MB_TAG_SPARSE, MB_TYPE_HANDLE, setup_mesh(), moab::Range::size(), moab::Interface::tag_delete_data(), moab::Interface::tag_get_data(), moab::Interface::tag_set_data(), tagname, and test_create_tag().
Referenced by test_delete_dense_data(), and test_delete_sparse_data().
{
Core moab;
Interface& mb = moab;
ErrorCode rval;
setup_mesh( mb );
// subdivide entity handles into three groups:
// 1) entities for which the tag data will be deleted using the array-based function
// 2) entities for which the tag data will be deleted using the range-based function
// 3) entities for which the tag data will not be deleted
Range all_entities, del1_range, keep_range;
std::vector< EntityHandle > del1_list, del2_list, keep_list;
rval = mb.get_entities_by_handle( 0, all_entities );CHECK_ERR( rval );
int c = 0;
for( Range::iterator i = all_entities.begin(); i != all_entities.end(); ++i, ++c )
{
switch( c % 3 )
{
case 0:
del1_range.insert( *i );
break;
case 1:
keep_range.insert( *i );
break;
case 2:
del2_list.push_back( *i );
break;
}
}
del1_list.resize( del1_range.size() );
std::copy( del1_range.begin(), del1_range.end(), del1_list.begin() );
keep_list.resize( keep_range.size() );
std::copy( keep_range.begin(), keep_range.end(), keep_list.begin() );
// create tag
EntityHandle first = all_entities.front();
EntityHandle* defval = with_default_value ? &first : 0;
const char* tagname = "dead_tag";
Tag tag = test_create_tag( mb, tagname, 1, storage, MB_TYPE_HANDLE, defval );
// set value for each entity to its handle
rval = mb.tag_set_data( tag, del1_range, &del1_list[0] );CHECK_ERR( rval );
rval = mb.tag_set_data( tag, keep_range, &keep_list[0] );CHECK_ERR( rval );
rval = mb.tag_set_data( tag, &del2_list[0], del2_list.size(), &del2_list[0] );CHECK_ERR( rval );
// delete tag data
rval = mb.tag_delete_data( tag, del1_range );CHECK_ERR( rval );
rval = mb.tag_delete_data( tag, &del2_list[0], del2_list.size() );CHECK_ERR( rval );
// test that keep list is unaffected
std::vector< EntityHandle > tag_data( keep_range.size(), 0 );
rval = mb.tag_get_data( tag, keep_range, &tag_data[0] );CHECK_ERR( rval );
CHECK( tag_data == keep_list );
// try to get data for deleted range
tag_data.clear();
tag_data.resize( del1_range.size(), (EntityHandle)-1 );
rval = mb.tag_get_data( tag, del1_range, &tag_data[0] );
// if we have a default value, should get that for deleted entities
if( with_default_value )
{
CHECK_ERR( rval );
std::vector< EntityHandle > expected( del1_range.size(), *defval );
CHECK( expected == tag_data );
}
else if( rval != MB_TAG_NOT_FOUND )
{
// dense and bit tags might return either MB_TAG_NOT_FOUND or zero bytes.
// sparse tags should always return MB_TAG_NOT_FOUND
CHECK( MB_TAG_SPARSE != storage );
std::vector< EntityHandle > expected( del1_range.size(), 0 );
CHECK( expected == tag_data );
}
// try to get data for deleted list
tag_data.clear();
tag_data.resize( del1_range.size(), (EntityHandle)-1 );
rval = mb.tag_get_data( tag, del1_range, &tag_data[0] );
// if we have a default value, should get that for deleted entities
if( with_default_value )
{
CHECK_ERR( rval );
std::vector< EntityHandle > expected( del1_range.size(), *defval );
CHECK( expected == tag_data );
}
else if( rval != MB_TAG_NOT_FOUND )
{
// dense and bit tags might return either MB_TAG_NOT_FOUND or zero bytes.
// sparse tags should always return MB_TAG_NOT_FOUND
CHECK( MB_TAG_SPARSE != storage );
std::vector< EntityHandle > expected( del1_range.size(), 0 );
CHECK( expected == tag_data );
}
}
| static void test_delete_type_tag | ( | TagType | storage | ) | [static] |
Definition at line 1101 of file TagTest.cpp.
References CHECK, CHECK_EQUAL, CHECK_ERR, moab::Range::empty(), ErrorCode, moab::Range::front(), moab::Interface::get_entities_by_type(), MB_TAG_MESH, MB_TAG_NOT_FOUND, MB_TYPE_DOUBLE, MB_TYPE_INTEGER, MBVERTEX, mesh, setup_mesh(), size, moab::Interface::tag_delete(), moab::Interface::tag_get_bytes(), moab::Interface::tag_get_data_type(), moab::Interface::tag_get_default_value(), moab::Interface::tag_get_handle(), moab::Interface::tag_get_length(), moab::Interface::tag_get_name(), moab::Interface::tag_get_tags(), moab::Interface::tag_get_tags_on_entity(), moab::Interface::tag_set_data(), tagname, and test_create_tag().
Referenced by test_delete_dense_tag(), test_delete_mesh_tag(), and test_delete_sparse_tag().
{
Core moab;
Interface& mb = moab;
ErrorCode rval;
setup_mesh( mb );
// create tag
int default_val = 42;
const char* tagname = "dead_tag";
Tag tag = test_create_tag( mb, tagname, 1, storage, MB_TYPE_INTEGER, &default_val );
// get an entity handle to work with
Range verts;
rval = mb.get_entities_by_type( 0, MBVERTEX, verts );CHECK_ERR( rval );
CHECK( !verts.empty() );
EntityHandle handle = verts.front();
// set tag value on entity
int value = -5;
if( storage != MB_TAG_MESH )
{
rval = mb.tag_set_data( tag, &handle, 1, &value );CHECK_ERR( rval );
}
// set tag value on mesh
const EntityHandle mesh = 0;
value = 2;
rval = mb.tag_set_data( tag, &mesh, 1, &value );CHECK_ERR( rval );
// delete tag
rval = mb.tag_delete( tag );CHECK_ERR( rval );
// make sure all basic queries fail with MB_TAG_NOT_FOUND
std::string name;
rval = mb.tag_get_name( tag, name );
CHECK_EQUAL( MB_TAG_NOT_FOUND, rval );
Tag tag2;
rval = mb.tag_get_handle( tagname, 1, MB_TYPE_INTEGER, tag2 );
CHECK_EQUAL( MB_TAG_NOT_FOUND, rval );
int size;
rval = mb.tag_get_bytes( tag, size );
CHECK_EQUAL( MB_TAG_NOT_FOUND, rval );
rval = mb.tag_get_length( tag, size );
CHECK_EQUAL( MB_TAG_NOT_FOUND, rval );
// get get the type from the handle, so this still succeeds
// TagType storage2;
// rval = mb.tag_get_type( tag, storage2 );
// CHECK_EQUAL( MB_TAG_NOT_FOUND, rval );
DataType type;
rval = mb.tag_get_data_type( tag, type );
CHECK_EQUAL( MB_TAG_NOT_FOUND, rval );
rval = mb.tag_get_default_value( tag, &value );
CHECK_EQUAL( MB_TAG_NOT_FOUND, rval );
// check global list of tags
std::vector< Tag > tags;
rval = mb.tag_get_tags( tags );CHECK_ERR( rval );
CHECK( std::find( tags.begin(), tags.end(), tag ) == tags.end() );
// check tags on entity
tags.clear();
rval = mb.tag_get_tags_on_entity( handle, tags );CHECK_ERR( rval );
CHECK( std::find( tags.begin(), tags.end(), tag ) == tags.end() );
// check that a new tag w/ the same name can be created
tag = test_create_tag( mb, tagname, 1, storage, MB_TYPE_DOUBLE, 0 );
rval = mb.tag_delete( tag );CHECK_ERR( rval );
}
| void test_get_by_tag | ( | ) |
Definition at line 833 of file TagTest.cpp.
References moab::Interface::add_entities(), moab::Range::begin(), CHECK, CHECK_EQUAL, CHECK_ERR, moab::Range::clear(), moab::Interface::create_meshset(), moab::Range::empty(), entities, ErrorCode, moab::Interface::get_entities_by_type(), moab::Interface::get_entities_by_type_and_tag(), moab::Interface::get_number_entities_by_type_and_tag(), mb, MB_TAG_SPARSE, MB_TYPE_INTEGER, MBVERTEX, setup_mesh(), moab::Range::size(), moab::Interface::tag_set_data(), and test_create_tag().
Referenced by main().
{
// create mesh and tag
Core moab;
Interface& mb = moab;
setup_mesh( mb );
Tag tag = test_create_tag( mb, "sparse_count", 1, MB_TAG_SPARSE, MB_TYPE_INTEGER, 0 );
// get some handles to work with
Range entities;
ErrorCode rval = mb.get_entities_by_type( 0, MBVERTEX, entities );CHECK_ERR( rval );
CHECK( !entities.empty() );
// get five handles
CHECK( entities.size() > 6 );
EntityHandle arr[5] = { *( entities.begin() += entities.size() / 6 ),
*( entities.begin() += 2 * entities.size() / 6 ),
*( entities.begin() += 3 * entities.size() / 6 ),
*( entities.begin() += 4 * entities.size() / 6 ),
*( entities.begin() += 5 * entities.size() / 6 ) };
int values[5] = { 1, 2, 3, 4, 5 };
rval = mb.tag_set_data( tag, arr, 5, values );CHECK_ERR( rval );
const void* const valarr[1] = { 0 };
// put some in a mesh set
EntityHandle set;
const int num_in_set = 3;
rval = mb.create_meshset( 0, set );CHECK_ERR( rval );
rval = mb.add_entities( set, arr, num_in_set );CHECK_ERR( rval );
// try for whole mesh will null tag value array
int count = -1;
rval = mb.get_number_entities_by_type_and_tag( 0, MBVERTEX, &tag, 0, 1, count );CHECK_ERR( rval );
CHECK_EQUAL( 5, count );
// try for whole mesh will null tag value, but non-null array
count = -1;
rval = mb.get_number_entities_by_type_and_tag( 0, MBVERTEX, &tag, valarr, 1, count );CHECK_ERR( rval );
CHECK_EQUAL( 5, count );
// try for mesh set
rval = mb.get_number_entities_by_type_and_tag( set, MBVERTEX, &tag, 0, 1, count );CHECK_ERR( rval );
CHECK_EQUAL( num_in_set, count );
// try for whole mesh will null tag value array
Range found;
rval = mb.get_entities_by_type_and_tag( 0, MBVERTEX, &tag, 0, 1, found );CHECK_ERR( rval );
CHECK_EQUAL( 5u, (unsigned)found.size() );
Range::iterator i = found.begin();
CHECK_EQUAL( arr[0], *i );
++i;
CHECK_EQUAL( arr[1], *i );
++i;
CHECK_EQUAL( arr[2], *i );
++i;
CHECK_EQUAL( arr[3], *i );
++i;
CHECK_EQUAL( arr[4], *i );
// try for whole mesh will null tag value, but non-null array
found.clear();
rval = mb.get_entities_by_type_and_tag( 0, MBVERTEX, &tag, valarr, 1, found );CHECK_ERR( rval );
CHECK_EQUAL( 5u, (unsigned)found.size() );
i = found.begin();
CHECK_EQUAL( arr[0], *i );
++i;
CHECK_EQUAL( arr[1], *i );
++i;
CHECK_EQUAL( arr[2], *i );
++i;
CHECK_EQUAL( arr[3], *i );
++i;
CHECK_EQUAL( arr[4], *i );
// try for mesh set
found.clear();
rval = mb.get_entities_by_type_and_tag( set, MBVERTEX, &tag, 0, 1, found );CHECK_ERR( rval );
CHECK_EQUAL( 3u, (unsigned)found.size() );
i = found.begin();
CHECK_EQUAL( arr[0], *i );
++i;
CHECK_EQUAL( arr[1], *i );
++i;
CHECK_EQUAL( arr[2], *i );
}
| void test_get_by_tag_value | ( | ) |
Definition at line 919 of file TagTest.cpp.
References moab::Interface::add_entities(), moab::Range::begin(), CHECK, CHECK_EQUAL, CHECK_ERR, moab::Range::clear(), moab::Interface::create_meshset(), moab::Range::empty(), entities, ErrorCode, moab::Interface::get_entities_by_type(), moab::Interface::get_entities_by_type_and_tag(), moab::Interface::get_number_entities_by_type_and_tag(), MB_TAG_SPARSE, MB_TYPE_INTEGER, MBVERTEX, setup_mesh(), moab::Range::size(), moab::Interface::tag_set_data(), and test_create_tag().
Referenced by main().
{
// create mesh and tag
Core moab;
Interface& mb = moab;
setup_mesh( mb );
Tag tag = test_create_tag( mb, "sparse_count", 1, MB_TAG_SPARSE, MB_TYPE_INTEGER, 0 );
// get some handles to work with
Range entities;
ErrorCode rval = mb.get_entities_by_type( 0, MBVERTEX, entities );CHECK_ERR( rval );
CHECK( !entities.empty() );
// get five handles
CHECK( entities.size() > 6 );
EntityHandle arr[5] = { *( entities.begin() += entities.size() / 6 ),
*( entities.begin() += 2 * entities.size() / 6 ),
*( entities.begin() += 3 * entities.size() / 6 ),
*( entities.begin() += 4 * entities.size() / 6 ),
*( entities.begin() += 5 * entities.size() / 6 ) };
int values[5] = { 0xBEEF, 0xBEEF, 0xBEEF, 0xBEEF, 0xBEEF };
rval = mb.tag_set_data( tag, arr, 5, values );CHECK_ERR( rval );
const void* const valarr[1] = { values };
// put some in a mesh set
EntityHandle set;
const int num_in_set = 3;
rval = mb.create_meshset( 0, set );CHECK_ERR( rval );
rval = mb.add_entities( set, arr, num_in_set );CHECK_ERR( rval );
// try for whole mesh
int count = -1;
rval = mb.get_number_entities_by_type_and_tag( 0, MBVERTEX, &tag, valarr, 1, count );CHECK_ERR( rval );
CHECK_EQUAL( 5, count );
// try for mesh set
rval = mb.get_number_entities_by_type_and_tag( set, MBVERTEX, &tag, valarr, 1, count );CHECK_ERR( rval );
CHECK_EQUAL( num_in_set, count );
// try for whole mesh
Range found;
rval = mb.get_entities_by_type_and_tag( 0, MBVERTEX, &tag, valarr, 1, found );CHECK_ERR( rval );
CHECK_EQUAL( 5u, (unsigned)found.size() );
Range::iterator i = found.begin();
CHECK_EQUAL( arr[0], *i );
++i;
CHECK_EQUAL( arr[1], *i );
++i;
CHECK_EQUAL( arr[2], *i );
++i;
CHECK_EQUAL( arr[3], *i );
++i;
CHECK_EQUAL( arr[4], *i ); //++i;
// try for mesh set
found.clear();
rval = mb.get_entities_by_type_and_tag( set, MBVERTEX, &tag, valarr, 1, found );CHECK_ERR( rval );
CHECK_EQUAL( 3u, (unsigned)found.size() );
i = found.begin();
CHECK_EQUAL( arr[0], *i );
++i;
CHECK_EQUAL( arr[1], *i );
++i;
CHECK_EQUAL( arr[2], *i ); //++i;
}
| void test_get_by_tag_value_dense | ( | ) |
Definition at line 985 of file TagTest.cpp.
References moab::Range::back(), moab::Range::begin(), CHECK, CHECK_EQUAL, CHECK_ERR, moab::Range::clear(), moab::Range::empty(), moab::Range::erase(), ErrorCode, moab::Range::front(), moab::Interface::get_entities_by_type(), moab::Interface::get_entities_by_type_and_tag(), moab::Interface::INTERSECT, MB_TAG_DENSE, MB_TYPE_INTEGER, MBHEX, MBVERTEX, setup_mesh(), moab::Range::size(), moab::Interface::tag_clear_data(), moab::Interface::tag_set_data(), and test_create_tag().
Referenced by main().
{
// create mesh and tag
ErrorCode rval;
Core moab;
Interface& mb = moab;
setup_mesh( mb );
const int def_val = 0xABCD;
const int fill_val = 0xBEEF;
const int find_val = 0xFEED;
Tag tag = test_create_tag( mb, "dense_gbv", 1, MB_TAG_DENSE, MB_TYPE_INTEGER, &def_val );
// get some handles to work with
Range elements, vertices, results;
rval = mb.get_entities_by_type( 0, MBHEX, elements );CHECK_ERR( rval );
rval = mb.get_entities_by_type( 0, MBVERTEX, vertices );CHECK_ERR( rval );
CHECK( !elements.empty() );
// set tag on all vertices to fill_val
rval = mb.tag_clear_data( tag, vertices, &fill_val );CHECK_ERR( rval );
// select three handles
CHECK( elements.size() > 4 );
EntityHandle arr[3] = { *( elements.begin() += elements.size() / 4 ),
*( elements.begin() += 2 * elements.size() / 4 ),
*( elements.begin() += 3 * elements.size() / 4 ) };
int values[3] = { find_val, find_val, find_val };
rval = mb.tag_set_data( tag, arr, 3, values );CHECK_ERR( rval );
// get the entities tagged with 'find_val'
const void* const findarr[1] = { &find_val };
results.clear();
rval = mb.get_entities_by_type_and_tag( 0, MBHEX, &tag, findarr, 1, results );CHECK_ERR( rval );
CHECK_EQUAL( (size_t)3, results.size() );
CHECK_EQUAL( arr[0], results.front() );
CHECK_EQUAL( arr[1], *++results.begin() );
CHECK_EQUAL( arr[2], results.back() );
// should get no vertices
results.clear();
rval = mb.get_entities_by_type_and_tag( 0, MBVERTEX, &tag, findarr, 1, results );CHECK_ERR( rval );
CHECK( results.empty() );
// try intersecting with an existing range
results = elements;
results.erase( arr[1] );
results.insert( vertices.front() );
rval = mb.get_entities_by_type_and_tag( 0, MBHEX, &tag, findarr, 1, results, Interface::INTERSECT );CHECK_ERR( rval );
CHECK_EQUAL( (size_t)2, results.size() );
CHECK_EQUAL( arr[0], results.front() );
CHECK_EQUAL( arr[2], results.back() );
// try getting entities with default value
const void* const defarr[1] = { &def_val };
results.clear();
rval = mb.get_entities_by_type_and_tag( 0, MBHEX, &tag, defarr, 1, results );CHECK_ERR( rval );
CHECK_EQUAL( elements.size() - 3, results.size() );
Range expected( elements );
expected.erase( arr[0] );
expected.erase( arr[1] );
expected.erase( arr[2] );
CHECK( expected == results );
}
| void test_get_entity_tags | ( | ) |
Definition at line 1190 of file TagTest.cpp.
References moab::Range::begin(), CHECK, CHECK_ERR, contains_tag(), entities, ErrorCode, moab::Interface::get_entities_by_handle(), MB_TAG_BIT, MB_TAG_DENSE, MB_TAG_SPARSE, MB_TYPE_BIT, MB_TYPE_INTEGER, setup_mesh(), moab::Range::size(), moab::Interface::tag_get_tags_on_entity(), moab::Interface::tag_set_data(), and test_create_tag().
Referenced by main().
{
Core moab;
Interface& mb = moab;
ErrorCode rval;
// get 8 handles to work with
setup_mesh( mb );
Range entities;
rval = mb.get_entities_by_handle( 0, entities );CHECK_ERR( rval );
CHECK( entities.size() >= 8 );
Range::iterator i = entities.begin();
EntityHandle sparse_ent = *i;
++i;
EntityHandle dense_ent = *i;
++i;
EntityHandle bit_ent = *i;
++i;
EntityHandle sparse_dense_ent = *i;
++i;
EntityHandle sparse_bit_ent = *i;
++i;
EntityHandle dense_bit_ent = *i;
++i;
EntityHandle all_tag_ent = *i;
++i;
EntityHandle no_tag_ent = *i;
++i;
// create three tags to work with
Tag sparse, dense, bit;
sparse = test_create_tag( mb, "sparse", 1, MB_TAG_SPARSE, MB_TYPE_INTEGER, 0 );
dense = test_create_tag( mb, "dense_", 1, MB_TAG_DENSE, MB_TYPE_INTEGER, 0 );
bit = test_create_tag( mb, "bit___", 1, MB_TAG_BIT, MB_TYPE_BIT, 0 );
// set tags on handles
EntityHandle sparse_ents[4] = { sparse_ent, sparse_dense_ent, sparse_bit_ent, all_tag_ent };
EntityHandle dense_ents[4] = { dense_ent, sparse_dense_ent, dense_bit_ent, all_tag_ent };
EntityHandle bit_ents[4] = { bit_ent, sparse_bit_ent, dense_bit_ent, all_tag_ent };
int values[4] = { -1, -2, -3, -4 };
rval = mb.tag_set_data( sparse, sparse_ents, 4, &values );CHECK_ERR( rval );
rval = mb.tag_set_data( dense, dense_ents, 4, &values );CHECK_ERR( rval );
for( int j = 0; j < 4; ++j )
{
unsigned char bitval = 0xF;
rval = mb.tag_set_data( bit, bit_ents + j, 1, &bitval );CHECK_ERR( rval );
}
// get tags on each entity
std::vector< Tag > sparse_ent_tags, dense_ent_tags, bit_ent_tags, sparse_dense_ent_tags, sparse_bit_ent_tags,
dense_bit_ent_tags, all_tag_ent_tags, no_tag_ent_tags;
rval = mb.tag_get_tags_on_entity( sparse_ent, sparse_ent_tags );CHECK_ERR( rval );
rval = mb.tag_get_tags_on_entity( dense_ent, dense_ent_tags );CHECK_ERR( rval );
rval = mb.tag_get_tags_on_entity( bit_ent, bit_ent_tags );CHECK_ERR( rval );
rval = mb.tag_get_tags_on_entity( sparse_dense_ent, sparse_dense_ent_tags );CHECK_ERR( rval );
rval = mb.tag_get_tags_on_entity( sparse_bit_ent, sparse_bit_ent_tags );CHECK_ERR( rval );
rval = mb.tag_get_tags_on_entity( dense_bit_ent, dense_bit_ent_tags );CHECK_ERR( rval );
rval = mb.tag_get_tags_on_entity( all_tag_ent, all_tag_ent_tags );CHECK_ERR( rval );
rval = mb.tag_get_tags_on_entity( no_tag_ent, no_tag_ent_tags );CHECK_ERR( rval );
// check expected values
// NOTE: could potentially get back bit and dense tags for any entity
// depending on the storage layout. Only sparse tags guarantee
// no false positives. False negatives should never happen for any type.
// Also, there could be other dense tags already defined.
// verify sparse tag in all expected lists
CHECK( contains_tag( sparse, sparse_ent_tags ) );
CHECK( contains_tag( sparse, sparse_dense_ent_tags ) );
CHECK( contains_tag( sparse, sparse_bit_ent_tags ) );
CHECK( contains_tag( sparse, all_tag_ent_tags ) );
// verify sparse tag not in any other lists
CHECK( !contains_tag( sparse, dense_ent_tags ) );
CHECK( !contains_tag( sparse, bit_ent_tags ) );
CHECK( !contains_tag( sparse, dense_bit_ent_tags ) );
CHECK( !contains_tag( sparse, no_tag_ent_tags ) );
// verify dense tag in all expected lists
CHECK( contains_tag( dense, dense_ent_tags ) );
CHECK( contains_tag( dense, sparse_dense_ent_tags ) );
CHECK( contains_tag( dense, dense_bit_ent_tags ) );
CHECK( contains_tag( dense, all_tag_ent_tags ) );
// verify bit tag in all expected lists
CHECK( contains_tag( bit, bit_ent_tags ) );
CHECK( contains_tag( bit, sparse_bit_ent_tags ) );
CHECK( contains_tag( bit, dense_bit_ent_tags ) );
CHECK( contains_tag( bit, all_tag_ent_tags ) );
}
| void test_get_ents_with_default_value | ( | ) |
Definition at line 1751 of file TagTest.cpp.
References moab::Range::back(), moab::Range::begin(), CHECK_EQUAL, CHECK_ERR, moab::Range::clear(), moab::Interface::create_element(), moab::Interface::create_vertices(), moab::Range::end(), ErrorCode, moab::Range::front(), moab::Interface::get_entities_by_type_and_tag(), moab::Range::insert(), moab::Interface::INTERSECT, MB_TAG_DENSE, MB_TAG_SPARSE, MB_TYPE_DOUBLE, MB_TYPE_INTEGER, MBEDGE, MBVERTEX, size, moab::Range::size(), moab::subtract(), moab::Interface::tag_set_data(), test_create_tag(), and moab::Interface::UNION.
Referenced by main().
{
Core moab;
Interface& mb = moab;
ErrorCode rval;
Range result;
// create a bunch of vertices
std::vector< double > coords( 90, 0.0 );
Range verts;
rval = mb.create_vertices( &coords[0], coords.size() / 3, verts );CHECK_ERR( rval );
CHECK_EQUAL( coords.size() / 3, (size_t)verts.size() );
// create one edge, which we should never get back from
// our queries with type == MBVERTEX
EntityHandle edge, ends[] = { verts.front(), verts.back() };
rval = mb.create_element( MBEDGE, ends, 2, edge );CHECK_ERR( rval );
// split vertices into four groups
Range sets[4];
size_t s = 0;
for( Range::iterator i = verts.begin(); i != verts.end(); ++i )
{
sets[s].insert( *i );
s = ( s + 1 ) % 4;
}
// create a sparse tag and set some verts to non-default value
int default_sparse = 5;
Tag tag_sparse = test_create_tag( mb, "int", 1, MB_TAG_SPARSE, MB_TYPE_INTEGER, &default_sparse );
std::vector< int > sparse_vals( sets[0].size(), -1 );
rval = mb.tag_set_data( tag_sparse, sets[0], &sparse_vals[0] );CHECK_ERR( rval );
// get all entities with default value for sparse tag
result.clear();
const void* ptrs[] = { &default_sparse };
rval = mb.get_entities_by_type_and_tag( 0, MBVERTEX, &tag_sparse, ptrs, 1, result );CHECK_ERR( rval );
CHECK_EQUAL( subtract( verts, sets[0] ), result );
// create a dense tag and set some verts to non-default value
double default_dense = -1.0;
Tag tag_dense = test_create_tag( mb, "double", 1, MB_TAG_DENSE, MB_TYPE_DOUBLE, &default_dense );
std::vector< double > dense_vals( sets[1].size(), 3.14159 );
rval = mb.tag_set_data( tag_dense, sets[1], &dense_vals[0] );CHECK_ERR( rval );
// get all entities with default value for dense tag
result.clear();
ptrs[0] = &default_dense;
rval = mb.get_entities_by_type_and_tag( 0, MBVERTEX, &tag_dense, ptrs, 1, result );CHECK_ERR( rval );
CHECK_EQUAL( subtract( verts, sets[1] ), result );
// create a variable-length tag and set some verts to non-default value
// SKIP THIS: NO API FOR QUERYING ENTITIES WITH VARIABLE-LENGTH VALUE
// int default_vlen[] = { 1, 2, 3 };
// Tag tag_vlen = test_create_var_len_tag( mb, "vlen", MB_TAG_SPARSE, MB_TYPE_INTEGER,
// default_vlen, sizeof(default_vlen) ); int other_vlen[] = { 4, 5, 6, 7 }; std::vector<const
// void*> vlen_ptrs( sets[2].size(), other_vlen ); std::vector<int> vlen_sizes( sets[2].size)(),
// sizeof(other_vlen) ); rval = mb.tag_set_data( tag_vlen, sets[2], &vlen_ptrs[0],
// &vlen_sizes[0]
// ); CHECK_ERR(rval);
// check that INTERSECT option works as expected
result.clear();
result.insert( sets[1].front() );
ptrs[0] = &default_sparse;
rval = mb.get_entities_by_type_and_tag( 0, MBVERTEX, &tag_sparse, ptrs, 1, result, Interface::INTERSECT );CHECK_ERR( rval );
CHECK_EQUAL( (size_t)1, result.size() );
CHECK_EQUAL( sets[1].front(), result.front() );
// check that UNITE option works as expected
result.clear();
result.insert( edge );
ptrs[0] = &default_sparse;
rval = mb.get_entities_by_type_and_tag( 0, MBVERTEX, &tag_sparse, ptrs, 1, result, Interface::UNION );CHECK_ERR( rval );
CHECK_EQUAL( edge, result.back() );
}
| void test_get_pointers_dense | ( | ) |
Definition at line 690 of file TagTest.cpp.
References MB_TAG_DENSE, MB_TYPE_OPAQUE, NORMAL, and test_get_set().
Referenced by main().
{
const unsigned char data[] = "a few aribtrary bytes entered as a string";
const int num_val = sizeof( data ) / sizeof( data[0] );
test_get_set( "dense_byte_ptr", 2, MB_TAG_DENSE, MB_TYPE_OPAQUE, data, num_val / 2, 0, NORMAL, true );
const unsigned char defaultval[] = "XY";
test_get_set( "dense_byte_ptr_def", 2, MB_TAG_DENSE, MB_TYPE_OPAQUE, data, num_val / 2, defaultval, NORMAL, true );
}
| void test_get_pointers_sparse | ( | ) |
Definition at line 679 of file TagTest.cpp.
References MB_TAG_SPARSE, MB_TYPE_DOUBLE, NORMAL, and test_get_set().
Referenced by main().
{
const double data[] = { 1, 2, 3, 4, 5, 6, 7, 9, 10, 11, 12, 13, 14, 15, 16 };
const int num_val = sizeof( data ) / sizeof( data[0] );
test_get_set( "sparse_dbl_ptr", 2, MB_TAG_SPARSE, MB_TYPE_DOUBLE, data, num_val / 2, 0, NORMAL, true );
const double defaultval[] = { -1, -2 };
test_get_set( "sparse_dbl_ptr_def", 2, MB_TAG_SPARSE, MB_TYPE_DOUBLE, data, num_val / 2, defaultval, NORMAL, true );
}
| void test_get_set | ( | const char * | name, |
| int | vals_per_ent, | ||
| TagType | storage, | ||
| DataType | type, | ||
| const void * | some_values, | ||
| int | num_values, | ||
| const void * | default_value, | ||
| SetMode | set_by_pointer = NORMAL, |
||
| bool | get_by_pointer = false |
||
| ) |
Definition at line 361 of file TagTest.cpp.
References moab::Range::begin(), CHECK, CHECK_EQUAL, CHECK_ERR, concat_to_list(), moab::Range::const_pair_begin(), moab::Range::const_pair_end(), moab::Range::empty(), entities, moab::Range::erase(), ErrorCode, moab::Interface::get_entities_by_handle(), h1, moab::Range::insert(), mb, MB_TAG_DENSE, MB_TAG_NOT_FOUND, MB_TYPE_BIT, MB_TYPE_DOUBLE, MB_TYPE_HANDLE, MB_TYPE_INTEGER, MB_TYPE_OPAQUE, NORMAL, ONE_VALUE, POINTER, setup_mesh(), moab::Range::size(), moab::subtract(), moab::Interface::tag_clear_data(), moab::Interface::tag_get_by_ptr(), moab::Interface::tag_get_data(), moab::Interface::tag_set_by_ptr(), moab::Interface::tag_set_data(), and test_create_tag().
{
std::vector< unsigned char > data;
// create mesh and tag
Core moab;
Interface& mb = moab;
setup_mesh( mb );
Tag tag = test_create_tag( mb, name, vals_per_ent, storage, type, default_value );
// get some handles to work with
Range entities;
ErrorCode rval = mb.get_entities_by_handle( 0, entities );CHECK_ERR( rval );
CHECK( !entities.empty() );
int bytes = 0;
switch( type )
{
case MB_TYPE_INTEGER:
bytes = vals_per_ent * sizeof( int );
break;
case MB_TYPE_DOUBLE:
bytes = vals_per_ent * sizeof( double );
break;
case MB_TYPE_HANDLE:
bytes = vals_per_ent * sizeof( EntityHandle );
break;
case MB_TYPE_BIT:
bytes = 1;
break;
case MB_TYPE_OPAQUE:
bytes = vals_per_ent;
break;
}
// split handles into four groups
// a) a single handle
// b) some non-consecutive handles in an array
// c) some handles in an Range
// d) remaining handles (remaining in 'entities');
EntityHandle one_handle;
Range::iterator it = entities.begin() += entities.size() / 2;
one_handle = *it;
entities.erase( it );
Range handle_range;
std::vector< EntityHandle > handle_list;
for( Range::const_pair_iterator i = entities.const_pair_begin(); i != entities.const_pair_end(); ++i )
{
if( i->first == i->second || i->second - i->first == 1 )
{
EntityHandle h1 = i->first, h2 = i->second;
++i;
handle_range.insert( h1, h2 );
}
else
{
EntityHandle mid = (EntityHandle)( i->first + ( i->second - i->first + 1 ) / 2 );
handle_list.push_back( mid );
handle_range.insert( mid + 1, i->second );
}
}
entities = subtract( entities, handle_range );
for( unsigned i = 0; i < handle_list.size(); ++i )
entities.erase( handle_list[i] );
// try getting/setting single handle value
std::vector< const void* > list( 1 );
if( set_mode == NORMAL )
{
rval = mb.tag_set_data( tag, &one_handle, 1, some_values );
}
else if( set_mode == POINTER )
{
list[0] = some_values;
rval = mb.tag_set_by_ptr( tag, &one_handle, 1, &list[0] );
}
else
{ // set_mode == ONE_VALUE
rval = mb.tag_clear_data( tag, &one_handle, 1, some_values );
}
CHECK_ERR( rval );
data.resize( bytes );
if( get_by_pointer )
{
// test that correct size is returned
int rsize;
rval = mb.tag_get_by_ptr( tag, &one_handle, 1, &list[0], &rsize );CHECK_ERR( rval );
CHECK_EQUAL( vals_per_ent, rsize );
// try again with NULL size pointer
list[0] = 0;
rval = mb.tag_get_by_ptr( tag, &one_handle, 1, &list[0] );CHECK_ERR( rval );
CHECK( !memcmp( some_values, list[0], bytes ) );
}
else
{
rval = mb.tag_get_data( tag, &one_handle, 1, &data[0] );CHECK_ERR( rval );
CHECK( !memcmp( some_values, &data[0], bytes ) );
}
// try getting/setting for arrays of handles
const int step = std::min( (int)handle_list.size(), num_values );
data.resize( step * bytes );
for( int i = 0; i < (int)handle_list.size(); i += step )
{
const int n = std::min( (int)handle_list.size() - i, step );
list.resize( n );
if( set_mode == NORMAL )
{
rval = mb.tag_set_data( tag, &handle_list[i], n, some_values );
}
else if( set_mode == POINTER )
{
concat_to_list( some_values, list, bytes );
rval = mb.tag_set_by_ptr( tag, &handle_list[i], n, &list[0] );
}
else
{
rval = mb.tag_clear_data( tag, &handle_list[i], n, some_values );
}
CHECK_ERR( rval );
if( get_by_pointer )
{
// check that valid sizes are returned if requested
std::vector< int > rsizes( n, 0 );
rval = mb.tag_get_by_ptr( tag, &handle_list[i], n, &list[0], &rsizes[0] );CHECK_ERR( rval );
for( int j = 0; j < n; ++j )
CHECK_EQUAL( vals_per_ent, rsizes[j] );
// query a second time to verify that it works w/ NULL size array
list.clear();
list.resize( n, 0 );
rval = mb.tag_get_by_ptr( tag, &handle_list[i], n, &list[0] );
}
else
{
rval = mb.tag_get_data( tag, &handle_list[i], n, &data[0] );
concat_to_list( &data[0], list, bytes );
}
CHECK_ERR( rval );
const unsigned char* ptr = reinterpret_cast< const unsigned char* >( some_values );
for( int j = 0; j < n; ++j, ptr += bytes )
CHECK( !memcmp( ptr, list[j], bytes ) );
}
// try getting/setting for Range of handles
// set data for range
if( set_mode == NORMAL )
{
std::vector< unsigned char > input_data( handle_range.size() * bytes );
for( int i = 0; i < (int)input_data.size(); i += num_values * bytes )
memcpy( &input_data[i], some_values, std::min( (int)input_data.size() - i, num_values * bytes ) );
rval = mb.tag_set_data( tag, handle_range, &input_data[0] );
}
else if( set_mode == POINTER )
{
list.resize( num_values );
concat_to_list( some_values, list, bytes );
while( list.size() < handle_range.size() )
{
size_t s = list.size();
list.resize( 2 * s );
std::copy( list.begin(), list.begin() + s, list.begin() + s );
}
rval = mb.tag_set_by_ptr( tag, handle_range, &list[0] );
}
else
{
rval = mb.tag_clear_data( tag, handle_range, some_values );
}
CHECK_ERR( rval );
// get data for range
list.clear();
list.resize( handle_range.size(), 0 );
if( get_by_pointer )
{
// check that valid sizes are returned if requested
std::vector< int > rsizes( handle_range.size(), 0 );
rval = mb.tag_get_by_ptr( tag, handle_range, &list[0], &rsizes[0] );CHECK_ERR( rval );
for( size_t j = 0; j < handle_range.size(); ++j )
CHECK_EQUAL( vals_per_ent, rsizes[j] );
// query w/ NULL size array to make sure that works also
list.clear();
list.resize( handle_range.size(), 0 );
rval = mb.tag_get_by_ptr( tag, handle_range, &list[0] );
}
else
{
data.resize( handle_range.size() * bytes );
concat_to_list( &data[0], list, bytes );
rval = mb.tag_get_data( tag, handle_range, &data[0] );
}
CHECK_ERR( rval );
// compare values
const bool dstep = ( set_mode != ONE_VALUE );
for( size_t i = 0; i < list.size(); ++i )
{
CHECK( list[i * dstep] != NULL );
const void* ptr = reinterpret_cast< const char* >( some_values ) + ( i % num_values ) * bytes;
CHECK( !memcmp( list[i * dstep], ptr, bytes ) );
}
// try getting unset values
list.resize( entities.size() );
if( get_by_pointer )
{
rval = mb.tag_get_by_ptr( tag, entities, &list[0] );
}
else
{
data.clear(), data.resize( entities.size() * bytes, '\001' );
concat_to_list( &data[0], list, bytes );
rval = mb.tag_get_data( tag, entities, &data[0] );
}
// if there was a default value, we should have gotten it for all unset entities
if( default_value )
{
CHECK_ERR( rval );
for( unsigned i = 0; i < entities.size(); ++i )
CHECK( !memcmp( default_value, list[i], bytes ) );
}
// otherwise we should get MB_TAG_NOT_FOUND, *unless* the tag
// is dense, in which case we /might/ get all zero bytes instead.
else if( MB_TAG_NOT_FOUND != rval )
{
CHECK_EQUAL( MB_TAG_DENSE, storage );
std::vector< unsigned char > zeros( bytes, 0 );
for( unsigned i = 0; i < entities.size(); ++i )
CHECK( !memcmp( &zeros[0], list[i], bytes ) );
}
// Check that handles for other entities didn't change.
// Ignore get_by_pointer/set_by_pointer flags from here on.
// We've established (hopefully) that both methods work in
// the above code. Now we just want to verify correct values,
// regardless of the API used to get them.
// one handle
data.resize( bytes );
rval = mb.tag_get_data( tag, &one_handle, 1, &data[0] );CHECK_ERR( rval );
CHECK( !memcmp( some_values, &data[0], bytes ) );
// array values
data.resize( step * bytes );
for( int i = 0; i < (int)handle_list.size(); i += step )
{
const int n = std::min( (int)handle_list.size() - i, step );
rval = mb.tag_get_data( tag, &handle_list[i], n, &data[0] );CHECK_ERR( rval );
CHECK( !memcmp( some_values, &data[0], step * bytes ) );
rval = mb.tag_set_data( tag, &handle_list[i], n, some_values );CHECK_ERR( rval );
}
// range values
list.clear();
list.resize( handle_range.size(), 0 );
rval = mb.tag_get_by_ptr( tag, handle_range, &list[0] );CHECK_ERR( rval );
for( size_t i = 0; i < handle_range.size(); ++i )
{
const void* ptr = reinterpret_cast< const char* >( some_values ) + ( i % num_values ) * bytes;
CHECK( !memcmp( ptr, list[i], bytes ) );
}
}
| void test_get_set_bit | ( | ) |
Definition at line 754 of file TagTest.cpp.
References moab::Range::begin(), CHECK, CHECK_EQUAL, CHECK_ERR, moab::Range::empty(), moab::Range::end(), entities, ErrorCode, moab::Interface::get_entities_by_handle(), h1, mb, MB_TAG_BIT, MB_TYPE_BIT, setup_mesh(), moab::Range::size(), moab::Interface::tag_get_data(), moab::Interface::tag_set_data(), and test_create_tag().
Referenced by main().
{
// create mesh and tag
Core moab;
Interface& mb = moab;
setup_mesh( mb );
Tag tag = test_create_tag( mb, "bit_val", 2, MB_TAG_BIT, MB_TYPE_BIT, 0 );
// get some handles to work with
Range entities;
ErrorCode rval = mb.get_entities_by_handle( 0, entities );CHECK_ERR( rval );
CHECK( !entities.empty() );
// set bits on every entity
unsigned counter = 0;
for( Range::iterator i = entities.begin(); i != entities.end(); ++i )
{
srand( counter++ );
unsigned char bits = (unsigned char)( rand() & 3 );
rval = mb.tag_set_data( tag, &*i, 1, &bits );CHECK_ERR( rval );
unsigned char bits_out = 0;
rval = mb.tag_get_data( tag, &*i, 1, &bits_out );CHECK_ERR( rval );
CHECK_EQUAL( bits, bits_out );
}
// test default value
unsigned char defval = '\003';
unsigned char zero = '\0';
Tag tag2 = test_create_tag( mb, "bit_val2", 3, MB_TAG_BIT, MB_TYPE_BIT, &defval );
CHECK( entities.size() >= 3 );
Range::iterator j = entities.begin();
EntityHandle h1 = *j;
++j;
EntityHandle h2 = *j;
++j;
EntityHandle h3 = *j;
++j;
rval = mb.tag_set_data( tag2, &h1, 1, &zero );CHECK_ERR( rval );
rval = mb.tag_set_data( tag2, &h3, 1, &zero );CHECK_ERR( rval );
unsigned char byte;
rval = mb.tag_get_data( tag2, &h2, 1, &byte );CHECK_ERR( rval );
CHECK_EQUAL( defval, byte );
rval = mb.tag_get_data( tag2, &h1, 1, &byte );CHECK_ERR( rval );
CHECK_EQUAL( zero, byte );
rval = mb.tag_get_data( tag2, &h3, 1, &byte );CHECK_ERR( rval );
CHECK_EQUAL( zero, byte );
// test default value for uninitialized data (tag not set for any entity)
defval = '\002';
Tag tag3 = test_create_tag( mb, "bit_val3", 2, MB_TAG_BIT, MB_TYPE_BIT, &defval );
rval = mb.tag_get_data( tag3, &h2, 1, &byte );CHECK_ERR( rval );
CHECK_EQUAL( defval, byte );
}
| void test_get_set_dense_double | ( | ) |
Definition at line 664 of file TagTest.cpp.
References MB_TAG_DENSE, MB_TYPE_DOUBLE, and test_get_set().
Referenced by main().
{
const double pi = 3.1415926535897931;
const double e = 2.7182818284590451;
const double data[] = { 1, 1., pi, e, 2, 1. / 2, 2 * pi, e / 2, 3, 1. / 3,
3 * pi, e / 3, 4, 1. / 4, 4 * pi, e / 4, 5, 1. / 5, 5 * pi, e / 5,
6, 1. / 6, 6 * pi, e / 6, 0, 100, 1000, 10000 };
const int num_val = sizeof( data ) / sizeof( data[0] );
test_get_set( "dense_dbl", 1, MB_TAG_DENSE, MB_TYPE_DOUBLE, data, num_val, 0 );
const double defaultval[] = { 0.11, 0.22 };
test_get_set( "dense_dbl_def", 2, MB_TAG_DENSE, MB_TYPE_DOUBLE, data, num_val / 2, defaultval );
}
| void test_get_set_dense_int | ( | ) |
Definition at line 652 of file TagTest.cpp.
References MB_TAG_DENSE, MB_TYPE_INTEGER, and test_get_set().
Referenced by main().
{
const int data[] = { 231, 416, 294, 504, 318, 558, 494, 006, 464, 648, 737, 045, 179, 852, 944, 336,
773, 248, 434, 615, 677, 667, 521, 748, 820, 533, 955, 300, 108, 726, 747, 597 };
const int num_val = sizeof( data ) / sizeof( data[0] );
test_get_set( "dense_int", 1, MB_TAG_DENSE, MB_TYPE_INTEGER, data, num_val, 0 );
const int defaultval[] = { 5, 8, 1974 };
test_get_set( "dense_int_def", 3, MB_TAG_DENSE, MB_TYPE_INTEGER, data, num_val / 3, defaultval );
}
| void test_get_set_sparse_int | ( | ) |
Definition at line 640 of file TagTest.cpp.
References MB_TAG_SPARSE, MB_TYPE_INTEGER, and test_get_set().
Referenced by main().
{
const int data[] = { 21, 00, 46, 30, 26, 63, 05, 49, 31, 39, 86, 77, 24, 37, 25, 98,
26, 20, 01, 54, 16, 28, 55, 49, 96, 18, 28, 18, 53, 00, 80, 48 };
const int num_val = sizeof( data ) / sizeof( data[0] );
test_get_set( "sparse_int", 2, MB_TAG_SPARSE, MB_TYPE_INTEGER, data, num_val / 2, 0 );
const int defaultval = 19740508;
test_get_set( "sparse_int_def", 1, MB_TAG_SPARSE, MB_TYPE_INTEGER, data, num_val, &defaultval );
}
| void test_get_set_variable_length | ( | const char * | name, |
| TagType | storage, | ||
| DataType | type, | ||
| const void ** | values, | ||
| const int * | lengths, | ||
| int | num_values, | ||
| const void * | default_value, | ||
| int | default_value_length | ||
| ) |
Definition at line 1448 of file TagTest.cpp.
References moab::Range::begin(), CHECK, CHECK_EQUAL, CHECK_ERR, moab::Range::const_pair_begin(), moab::Range::const_pair_end(), moab::Range::empty(), entities, moab::Range::erase(), ErrorCode, moab::Interface::get_entities_by_handle(), h1, moab::Range::insert(), MB_TAG_NOT_FOUND, MB_TYPE_BIT, MB_TYPE_DOUBLE, MB_TYPE_HANDLE, MB_TYPE_INTEGER, MB_TYPE_OPAQUE, setup_mesh(), moab::Range::size(), moab::subtract(), moab::Interface::tag_clear_data(), moab::Interface::tag_get_by_ptr(), moab::Interface::tag_set_by_ptr(), and test_create_var_len_tag().
Referenced by test_clear_variable_length(), test_get_set_variable_length_dense(), and test_get_set_variable_length_sparse().
{
std::vector< const void* > data;
std::vector< int > data_lens;
// create mesh and tag
Core moab;
Interface& mb = moab;
setup_mesh( mb );
Tag tag = test_create_var_len_tag( mb, name, storage, type, default_value, default_value_length );
// get some handles to work with
Range entities;
ErrorCode rval = mb.get_entities_by_handle( 0, entities );CHECK_ERR( rval );
CHECK( !entities.empty() );
// split handles into four groups
// a) a single handle
// b) some non-consecutive handles in an array
// c) some handles in an Range
// d) remaining handles (remaining in 'entities');
EntityHandle one_handle;
Range::iterator it = entities.begin() += entities.size() / 2;
one_handle = *it;
entities.erase( it );
Range handle_range;
std::vector< EntityHandle > handle_list;
for( Range::const_pair_iterator i = entities.const_pair_begin(); i != entities.const_pair_end(); ++i )
{
if( i->first == i->second || i->second - i->first == 1 )
{
EntityHandle h1 = i->first, h2 = i->second;
++i;
handle_range.insert( h1, h2 );
}
else
{
EntityHandle mid = (EntityHandle)( i->first + ( i->second - i->first + 1 ) / 2 );
handle_list.push_back( mid );
handle_range.insert( mid + 1, i->second );
}
}
entities = subtract( entities, handle_range );
for( unsigned i = 0; i < handle_list.size(); ++i )
entities.erase( handle_list[i] );
// try getting/setting single handle value
if( num_values == 1 )
rval = mb.tag_clear_data( tag, &one_handle, 1, values[0], lengths[0] );
else
rval = mb.tag_set_by_ptr( tag, &one_handle, 1, values, lengths );CHECK_ERR( rval );
const void* data_ptr;
int data_len;
rval = mb.tag_get_by_ptr( tag, &one_handle, 1, &data_ptr, &data_len );CHECK_ERR( rval );
CHECK_EQUAL( lengths[0], data_len );
CHECK( !memcmp( values[0], data_ptr, data_len ) );
int typesize = 0;
switch( type )
{
case MB_TYPE_INTEGER:
typesize = sizeof( int );
break;
case MB_TYPE_DOUBLE:
typesize = sizeof( double );
break;
case MB_TYPE_HANDLE:
typesize = sizeof( EntityHandle );
break;
case MB_TYPE_BIT:
typesize = 1;
break;
case MB_TYPE_OPAQUE:
typesize = 1;
break;
}
// try getting/setting for arrays of handles
int count, step;
if( num_values == 1 )
{
count = handle_list.size();
step = 0;
rval = mb.tag_clear_data( tag, &handle_list[0], count, values[0], lengths[0] );
}
else
{
count = std::min( (int)handle_list.size(), num_values );
step = 1;
rval = mb.tag_set_by_ptr( tag, &handle_list[0], count, values, lengths );
}
CHECK_ERR( rval );
data.clear();
data.resize( count, 0 );
data_lens.clear();
data_lens.resize( count, 0 );
rval = mb.tag_get_by_ptr( tag, &handle_list[0], count, &data[0], &data_lens[0] );CHECK_ERR( rval );
for( int i = 0; i < count; ++i )
{
CHECK_EQUAL( lengths[i * step], data_lens[i] );
CHECK( NULL != data[i] );
CHECK( !memcmp( values[i], data[i * step], typesize * lengths[i * step] ) );
}
// try getting/setting for Range of handles
if( num_values > 1 )
{
data.resize( num_values );
data_lens.resize( num_values );
std::copy( values, values + num_values, data.begin() );
std::copy( lengths, lengths + num_values, data_lens.begin() );
while( data.size() < handle_range.size() )
{
size_t s = data.size();
data.resize( 2 * s );
std::copy( data.begin(), data.begin() + s, data.begin() + s );
data_lens.resize( 2 * s );
std::copy( data_lens.begin(), data_lens.begin() + s, data_lens.begin() + s );
}
rval = mb.tag_set_by_ptr( tag, handle_range, &data[0], &data_lens[0] );
}
else
{
rval = mb.tag_clear_data( tag, handle_range, values[0], lengths[0] );
}
CHECK_ERR( rval );
data.clear();
data.resize( handle_range.size(), 0 );
data_lens.clear();
data_lens.resize( handle_range.size(), 0 );
rval = mb.tag_get_by_ptr( tag, handle_range, &data[0], &data_lens[0] );CHECK_ERR( rval );
for( size_t i = 0; i < data.size(); ++i )
{
const void* expect = values[( i * step ) % num_values];
int expect_len = lengths[( i * step ) % num_values];
CHECK_EQUAL( expect_len, data_lens[i] );
CHECK( NULL != data[i] );
CHECK( !memcmp( expect, data[i], expect_len * typesize ) );
}
// try getting unset values
data.resize( entities.size() );
data_lens.resize( entities.size() );
rval = mb.tag_get_by_ptr( tag, entities, &data[0], &data_lens[0] );
// if there was a default value, we should have gotten it for all unset entities
if( default_value )
{
CHECK_ERR( rval );
for( unsigned i = 0; i < entities.size(); ++i )
{
CHECK_EQUAL( default_value_length, data_lens[i] );
CHECK( NULL != data[i] );
CHECK( !memcmp( default_value, data[i], typesize * default_value_length ) );
}
}
// otherwise we should get MB_TAG_NOT_FOUND
else
{
CHECK_EQUAL( MB_TAG_NOT_FOUND, rval );
}
// Check that handles for other entities didn't change.
// one handle
rval = mb.tag_get_by_ptr( tag, &one_handle, 1, &data_ptr, &data_len );CHECK_ERR( rval );
CHECK_EQUAL( lengths[0], data_len );
CHECK( !memcmp( values[0], data_ptr, typesize * data_len ) );
// array values
count = std::min( (int)handle_list.size(), num_values );
data.clear();
data.resize( count, 0 );
data_lens.clear();
data_lens.resize( count, 0 );
rval = mb.tag_get_by_ptr( tag, &handle_list[0], count, &data[0], &data_lens[0] );CHECK_ERR( rval );
for( int i = 0; i < count; ++i )
{
CHECK_EQUAL( lengths[i], data_lens[i] );
CHECK( NULL != data[i] );
CHECK( !memcmp( values[i], data[i], typesize * lengths[i] ) );
}
// range values
data.clear();
data.resize( handle_range.size(), 0 );
data_lens.clear();
data_lens.resize( handle_range.size(), 0 );
rval = mb.tag_get_by_ptr( tag, handle_range, &data[0], &data_lens[0] );CHECK_ERR( rval );
for( size_t i = 0; i < data.size(); ++i )
{
const void* expect = values[i % num_values];
int expect_len = lengths[i % num_values];
CHECK_EQUAL( expect_len, data_lens[i] );
CHECK( NULL != data[i] );
CHECK( !memcmp( expect, data[i], typesize * expect_len ) );
}
}
| void test_get_set_variable_length_dense | ( | ) |
Definition at line 1676 of file TagTest.cpp.
References ints, MB_TAG_DENSE, MB_TYPE_DOUBLE, MB_TYPE_INTEGER, and test_get_set_variable_length().
Referenced by main().
{
const double doubles[14] = { 1, 2, 3, 4, -4, -3, -2, -1, 42, 0, 1974, -0.5, 1. / 3, -1e-10 };
const void* dvals[5] = { doubles, doubles + 3, doubles + 4, doubles + 8, doubles + 10 };
const int dlens[5] = { 3, 1, 4, 2, 4 };
test_get_set_variable_length( "vnodef", MB_TAG_DENSE, MB_TYPE_DOUBLE, dvals, dlens, 5, 0, 0 );
const int ints[32] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
-1, -2, -3, -4, -5, -6, -7, -8, -9, -10, -11, -12, -13, -14, -15 };
const void* ivals[9] = { ints, ints + 1, ints + 3, ints + 12, ints + 17,
ints + 21, ints + 28, ints + 29, ints + 31 };
const int ilens[9] = { 1, 2, 9, 5, 4, 7, 1, 2, 1 };
const int defvals[] = { 42, 5, 8, 74 };
test_get_set_variable_length( "vdef", MB_TAG_DENSE, MB_TYPE_INTEGER, ivals, ilens, 9, defvals, 4 );
}
| void test_get_set_variable_length_mesh | ( | ) |
Definition at line 1692 of file TagTest.cpp.
References CHECK_EQUAL, CHECK_ERR, ErrorCode, MB_TAG_MESH, MB_TYPE_INTEGER, mesh, moab::Interface::tag_get_by_ptr(), moab::Interface::tag_set_by_ptr(), and test_create_var_len_tag().
Referenced by main().
{
Core moab;
Interface& mb = moab;
ErrorCode rval;
Tag tag = test_create_var_len_tag( mb, "vmesh", MB_TAG_MESH, MB_TYPE_INTEGER, 0, 0 );
int values1[] = { 6 };
int values5[] = { 1, 2, 3, 4, 5 };
int one = 1;
const void* data[1];
data[0] = values1;
const EntityHandle mesh = 0;
rval = mb.tag_set_by_ptr( tag, &mesh, 1, data, &one );CHECK_ERR( rval );
int len;
rval = mb.tag_get_by_ptr( tag, &mesh, 1, data, &len );CHECK_ERR( rval );
CHECK_EQUAL( 1, len );
CHECK_EQUAL( values1[0], *reinterpret_cast< const int* >( data[0] ) );
int five = 5;
data[0] = values5;
rval = mb.tag_set_by_ptr( tag, &mesh, 1, data, &five );CHECK_ERR( rval );
rval = mb.tag_get_by_ptr( tag, &mesh, 1, data, &len );CHECK_ERR( rval );
CHECK_EQUAL( 5, len );
CHECK_EQUAL( values5[0], reinterpret_cast< const int* >( data[0] )[0] );
CHECK_EQUAL( values5[1], reinterpret_cast< const int* >( data[0] )[1] );
CHECK_EQUAL( values5[2], reinterpret_cast< const int* >( data[0] )[2] );
CHECK_EQUAL( values5[3], reinterpret_cast< const int* >( data[0] )[3] );
CHECK_EQUAL( values5[4], reinterpret_cast< const int* >( data[0] )[4] );
}
| void test_get_set_variable_length_sparse | ( | ) |
Definition at line 1660 of file TagTest.cpp.
References ints, MB_TAG_SPARSE, MB_TYPE_DOUBLE, MB_TYPE_INTEGER, and test_get_set_variable_length().
Referenced by main().
{
const double doubles[14] = { 1, 2, 3, 4, -4, -3, -2, -1, 42, 0, 1974, -0.5, 1. / 3, -1e-10 };
const void* dvals[5] = { doubles, doubles + 3, doubles + 4, doubles + 8, doubles + 10 };
const int dlens[5] = { 3, 1, 4, 2, 4 };
test_get_set_variable_length( "vnodef", MB_TAG_SPARSE, MB_TYPE_DOUBLE, dvals, dlens, 5, 0, 0 );
const int ints[32] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
-1, -2, -3, -4, -5, -6, -7, -8, -9, -10, -11, -12, -13, -14, -15 };
const void* ivals[9] = { ints, ints + 1, ints + 3, ints + 12, ints + 17,
ints + 21, ints + 28, ints + 29, ints + 31 };
const int ilens[9] = { 1, 2, 9, 5, 4, 7, 1, 2, 1 };
const int defvals[] = { 42, 5, 8, 74 };
test_get_set_variable_length( "vdef", MB_TAG_SPARSE, MB_TYPE_INTEGER, ivals, ilens, 9, defvals, 4 );
}
| void test_mesh_value | ( | ) |
Definition at line 1084 of file TagTest.cpp.
References MB_TAG_BIT, MB_TAG_DENSE, MB_TAG_MESH, MB_TAG_SPARSE, MB_TYPE_BIT, MB_TYPE_DOUBLE, MB_TYPE_HANDLE, and MB_TYPE_INTEGER.
Referenced by main().
{
Core moab;
double dval = -0.5;
test_mesh_value( moab, "mvd", 1, MB_TAG_DENSE, MB_TYPE_DOUBLE, &dval );
int sval = 42;
test_mesh_value( moab, "mvs", 1, MB_TAG_SPARSE, MB_TYPE_INTEGER, &sval );
EntityHandle mval = 0;
test_mesh_value( moab, "mvm", 1, MB_TAG_MESH, MB_TYPE_HANDLE, &mval );
unsigned char bits = '\002';
test_mesh_value( moab, "mvb", 2, MB_TAG_BIT, MB_TYPE_BIT, &bits );
}
| void test_mesh_value | ( | Interface & | mb, |
| const char * | tag_name, | ||
| unsigned | tag_size, | ||
| TagType | tag_storage, | ||
| DataType | tag_type, | ||
| const void * | value | ||
| ) |
Definition at line 1049 of file TagTest.cpp.
References CHECK, CHECK_ERR, ErrorCode, MB_TAG_BIT, MB_TYPE_BIT, MB_TYPE_DOUBLE, MB_TYPE_HANDLE, MB_TYPE_INTEGER, mesh, moab::Interface::tag_get_data(), moab::Interface::tag_set_data(), and test_create_tag().
{
// create tag
Tag tag = test_create_tag( mb, tag_name, tag_size, tag_storage, tag_type, 0 );
unsigned memcmp_size = tag_size;
if( tag_storage == MB_TAG_BIT || tag_type == MB_TYPE_BIT )
memcmp_size = 1;
else if( tag_type == MB_TYPE_DOUBLE )
memcmp_size = sizeof( double );
else if( tag_type == MB_TYPE_INTEGER )
memcmp_size = sizeof( int );
if( tag_type == MB_TYPE_HANDLE ) memcmp_size = sizeof( EntityHandle );
const EntityHandle mesh = 0;
ErrorCode rval = mb.tag_set_data( tag, &mesh, 1, value );CHECK_ERR( rval );
std::vector< unsigned char > bytes( memcmp_size, 0 );
rval = mb.tag_get_data( tag, &mesh, 1, &bytes[0] );CHECK_ERR( rval );
CHECK( !memcmp( value, &bytes[0], memcmp_size ) );
// test again, this time for default value
std::string name2( tag_name );
name2 += "_DEF";
Tag tag2 = test_create_tag( mb, name2.c_str(), tag_size, tag_storage, tag_type, value );
bytes.clear();
bytes.resize( memcmp_size, 0 );
rval = mb.tag_get_data( tag2, &mesh, 1, &bytes[0] );CHECK_ERR( rval );
CHECK( !memcmp( value, &bytes[0], memcmp_size ) );
}
| void test_set_pointers_dense | ( | ) |
Definition at line 713 of file TagTest.cpp.
References MB_TAG_DENSE, MB_TYPE_DOUBLE, MB_TYPE_OPAQUE, POINTER, and test_get_set().
Referenced by main().
{
const unsigned char data[] = "a few aribtrary bytes entered as a string";
const int num_val = sizeof( data ) / sizeof( data[0] );
test_get_set( "dense_byte_ptr", 2, MB_TAG_DENSE, MB_TYPE_OPAQUE, data, num_val / 2, 0, POINTER, false );
const unsigned char defaultval[] = "XY";
test_get_set( "dense_byte_ptr_def", 2, MB_TAG_DENSE, MB_TYPE_OPAQUE, data, num_val / 2, defaultval, POINTER,
false );
const double dbldata[3] = { 1.0, 2.0, 3.0 };
const int dbl_num_val = sizeof( dbldata ) / sizeof( double );
test_get_set( "dense_double_ptr", 3, MB_TAG_DENSE, MB_TYPE_DOUBLE, dbldata, dbl_num_val, 0, POINTER, false );
const double dbldefaultval[3] = { 0.0, 0.0, 0.0 };
test_get_set( "dense_byte_ptr_def", 3, MB_TAG_DENSE, MB_TYPE_DOUBLE, dbldata, dbl_num_val, dbldefaultval, POINTER,
false );
}
| void test_set_pointers_sparse | ( | ) |
Definition at line 701 of file TagTest.cpp.
References MB_TAG_SPARSE, MB_TYPE_DOUBLE, POINTER, and test_get_set().
Referenced by main().
{
const double data[] = { 1, 2, 3, 4, 5, 6, 7, 9, 10, 11, 12, 13, 14, 15, 16 };
const int num_val = sizeof( data ) / sizeof( data[0] );
test_get_set( "sparse_dbl_ptr", 2, MB_TAG_SPARSE, MB_TYPE_DOUBLE, data, num_val / 2, 0, POINTER, false );
const double defaultval[] = { -1, -2 };
test_get_set( "sparse_dbl_ptr_def", 2, MB_TAG_SPARSE, MB_TYPE_DOUBLE, data, num_val / 2, defaultval, POINTER,
false );
}
| void test_tag_iterate_common | ( | TagType | storage, |
| bool | with_default | ||
| ) |
Definition at line 2037 of file TagTest.cpp.
References moab::Range::begin(), CHECK, CHECK_ARRAYS_EQUAL, CHECK_EQUAL, CHECK_ERR, moab::Interface::create_vertices(), moab::Interface::delete_entities(), moab::Range::end(), moab::Range::erase(), ErrorCode, moab::Range::insert(), MB_ENTITY_NOT_FOUND, MB_TAG_CREAT, MB_TAG_NOT_FOUND, MB_TAG_SPARSE, MB_TYPE_INTEGER, moab::Range::size(), moab::Interface::tag_get_handle(), moab::Interface::tag_iterate(), and moab::Interface::tag_set_data().
Referenced by test_tag_iterate_dense(), test_tag_iterate_dense_default(), test_tag_iterate_sparse(), and test_tag_iterate_sparse_default().
{
// create 1000 vertices
const int NUM_VTX = 1000;
Core moab;
Interface& mb = moab;
std::vector< double > coords( 3 * NUM_VTX );
Range verts, dead;
ErrorCode rval = mb.create_vertices( &coords[0], NUM_VTX, verts );CHECK_ERR( rval );
// delete about 1% of vertices
const int step = 100;
int remaining = NUM_VTX;
Range::iterator i = verts.begin();
for( int j = 0; j < remaining; j += step )
{
rval = mb.delete_entities( &*i, 1 );CHECK_ERR( rval );
dead.insert( *i );
i = verts.erase( i );
i += step - 1;
}
// Remove some additional values from the range
// so that our handle blocks don't always align with
// sequences
verts.erase( verts.begin() + ( step - 5 ), verts.begin() + ( step + 5 ) );
// Create an integer tag
Tag tag;
const int defval = 0;
rval = mb.tag_get_handle( "TEST_TAG", 1, MB_TYPE_INTEGER, tag, storage | MB_TAG_CREAT, with_default ? &defval : 0 );CHECK_ERR( rval );
// Set tag values
std::vector< int > values( verts.size(), defval );
if( !with_default )
{
for( size_t j = 0; j < values.size(); ++j )
values[j] = j;
rval = mb.tag_set_data( tag, verts, &values[0] );CHECK_ERR( rval );
}
// Check that we get back expected values
i = verts.begin();
void* ptr;
int count, total = 0;
while( i != verts.end() )
{
ptr = 0;
rval = mb.tag_iterate( tag, i, verts.end(), count, ptr );CHECK_ERR( rval );
assert( total + count <= (int)verts.size() );
CHECK_ARRAYS_EQUAL( &values[total], count, reinterpret_cast< int* >( ptr ), count );
if( i == verts.begin() && with_default && storage == MB_TAG_SPARSE ) ( (int*)ptr )[0] = 1.0;
i += count;
total += count;
}
// Check that we can set values
i = verts.begin();
while( i != verts.end() )
{
ptr = 0;
rval = mb.tag_iterate( tag, i, verts.end(), count, ptr );CHECK_ERR( rval );
Range::iterator end = i + count;
int* arr = reinterpret_cast< int* >( ptr );
while( end != i )
{
*arr = static_cast< int >( ( *i ) % NUM_VTX );
++i;
++arr;
}
}
// Check that we got back the values that we set
i = verts.begin();
while( i != verts.end() )
{
ptr = 0;
rval = mb.tag_iterate( tag, i, verts.end(), count, ptr );CHECK_ERR( rval );
Range::iterator end = i + count;
int* arr = reinterpret_cast< int* >( ptr );
while( end != i )
{
CHECK_EQUAL( *arr, static_cast< int >( ( *i ) % NUM_VTX ) );
++i;
++arr;
}
}
// Check that we cannot get tag values for invalid handles
rval = mb.tag_iterate( tag, dead.begin(), dead.end(), count, ptr );
CHECK( MB_ENTITY_NOT_FOUND == rval || MB_TAG_NOT_FOUND == rval );
}
| void test_tag_iterate_dense | ( | ) |
Definition at line 2142 of file TagTest.cpp.
References MB_TAG_DENSE, and test_tag_iterate_common().
Referenced by main().
{
test_tag_iterate_common( MB_TAG_DENSE, false );
}
| void test_tag_iterate_dense_default | ( | ) |
Definition at line 2146 of file TagTest.cpp.
References MB_TAG_DENSE, and test_tag_iterate_common().
Referenced by main().
{
test_tag_iterate_common( MB_TAG_DENSE, true );
}
| void test_tag_iterate_invalid | ( | ) |
Definition at line 2151 of file TagTest.cpp.
References moab::Range::begin(), CHECK_EQUAL, CHECK_ERR, moab::Interface::create_vertices(), moab::Range::end(), ErrorCode, MB_TAG_DENSE, MB_TAG_EXCL, MB_TAG_SPARSE, MB_TAG_VARLEN, MB_TYPE_BIT, MB_TYPE_INTEGER, MB_TYPE_OUT_OF_RANGE, MB_VARIABLE_DATA_LENGTH, moab::Interface::tag_get_handle(), and moab::Interface::tag_iterate().
Referenced by main().
{
// create 1000 vertices
const int NUM_VTX = 1000;
Core moab;
Interface& mb = moab;
std::vector< double > coords( 3 * NUM_VTX );
Range verts;
ErrorCode rval = mb.create_vertices( &coords[0], NUM_VTX, verts );CHECK_ERR( rval );
Tag tag;
const int zero = 0;
void* ptr;
int count;
// Check that we cannot iterate over bit tags
// (this will never be possible because the storage for bit tags
// is compressed and therefore cannot be directly accessed.)
rval = mb.tag_get_handle( "bits", 1, MB_TYPE_BIT, tag, MB_TAG_EXCL, &zero );CHECK_ERR( rval );
rval = mb.tag_iterate( tag, verts.begin(), verts.end(), count, ptr );
CHECK_EQUAL( MB_TYPE_OUT_OF_RANGE, rval );
// Check that we cannot iterate over variable-length tags
// (this will never be possible because this API function cannot
// pass back the length of the tag values)
rval = mb.tag_get_handle( "vden", 1, MB_TYPE_INTEGER, tag, MB_TAG_VARLEN | MB_TAG_DENSE | MB_TAG_EXCL, &zero );CHECK_ERR( rval );
rval = mb.tag_iterate( tag, verts.begin(), verts.end(), count, ptr );
CHECK_EQUAL( MB_VARIABLE_DATA_LENGTH, rval );
rval = mb.tag_get_handle( "vspr", 1, MB_TYPE_INTEGER, tag, MB_TAG_VARLEN | MB_TAG_SPARSE | MB_TAG_EXCL, &zero );CHECK_ERR( rval );
rval = mb.tag_iterate( tag, verts.begin(), verts.end(), count, ptr );
CHECK_EQUAL( MB_VARIABLE_DATA_LENGTH, rval );
}
| void test_tag_iterate_sparse | ( | ) |
Definition at line 2134 of file TagTest.cpp.
References MB_TAG_SPARSE, and test_tag_iterate_common().
Referenced by main().
{
test_tag_iterate_common( MB_TAG_SPARSE, false );
}
| void test_tag_iterate_sparse_default | ( | ) |
Definition at line 2138 of file TagTest.cpp.
References MB_TAG_SPARSE, and test_tag_iterate_common().
Referenced by main().
{
test_tag_iterate_common( MB_TAG_SPARSE, true );
}