| | 893 | } |
| | 894 | |
| | 895 | MBErrorCode mb_adjacencies_create_delete_test(MBInterface *mb) |
| | 896 | { |
| | 897 | MBCore moab; |
| | 898 | mb = &moab; |
| | 899 | MBErrorCode rval; |
| | 900 | |
| | 901 | double coords[] = { 0, 0, 0, 2, 0, 0, 1, 2, 0 }; |
| | 902 | MBRange verts; |
| | 903 | rval = mb->create_vertices( coords, 3, verts ); |
| | 904 | if (MB_SUCCESS != rval) |
| | 905 | return rval; |
| | 906 | if (verts.size() != 3) |
| | 907 | return MB_FAILURE; |
| | 908 | MBEntityHandle vert_arr[3]; |
| | 909 | |
| | 910 | MBEntityHandle tri; |
| | 911 | std::copy( verts.begin(), verts.end(), vert_arr ); |
| | 912 | rval = mb->create_element( MBTRI, vert_arr, 3, tri ); |
| | 913 | if (MB_SUCCESS != rval) |
| | 914 | return rval; |
| | 915 | |
| | 916 | vert_arr[2] = vert_arr[0]; |
| | 917 | MBEntityHandle forward_edge, reverse_edge; |
| | 918 | rval = mb->create_element( MBEDGE, vert_arr, 2, forward_edge ); |
| | 919 | if (MB_SUCCESS != rval) |
| | 920 | return rval; |
| | 921 | |
| | 922 | std::vector<MBEntityHandle> results; |
| | 923 | rval = mb->get_adjacencies( &forward_edge, 1, 2, false, results ); |
| | 924 | if (results.size() != 1 || results.front() != tri) { |
| | 925 | std::cerr << "Adjacency query from forward edge to tri failed at " |
| | 926 | << __FILE__ << ":" << __LINE__ << std::endl; |
| | 927 | return MB_FAILURE; |
| | 928 | } |
| | 929 | results.clear(); |
| | 930 | rval = mb->get_adjacencies( &tri, 1, 1, false, results ); |
| | 931 | if (results.size() != 1 || results.front() != forward_edge) { |
| | 932 | std::cerr << "Adjacency query from tri to forward edge failed at " |
| | 933 | << __FILE__ << ":" << __LINE__ << std::endl; |
| | 934 | return MB_FAILURE; |
| | 935 | } |
| | 936 | |
| | 937 | rval = mb->delete_entities( &forward_edge, 1 ); |
| | 938 | if (MB_SUCCESS != rval) |
| | 939 | return rval; |
| | 940 | |
| | 941 | results.clear(); |
| | 942 | rval = mb->get_adjacencies( &tri, 1, 1, false, results ); |
| | 943 | if (!results.empty()) { |
| | 944 | std::cerr << "Adjacency query from tri returned non-existent edge at " |
| | 945 | << __FILE__ << ":" << __LINE__ << std::endl; |
| | 946 | return MB_FAILURE; |
| | 947 | } |
| | 948 | |
| | 949 | rval = mb->create_element( MBEDGE, vert_arr+1, 2, reverse_edge ); |
| | 950 | if (MB_SUCCESS != rval) |
| | 951 | return rval; |
| | 952 | |
| | 953 | results.clear(); |
| | 954 | rval = mb->get_adjacencies( &reverse_edge, 1, 2, false, results ); |
| | 955 | if (results.size() != 1 || results.front() != tri) { |
| | 956 | std::cerr << "Adjacency query from reverse edge to tri failed at " |
| | 957 | << __FILE__ << ":" << __LINE__ << std::endl; |
| | 958 | return MB_FAILURE; |
| | 959 | } |
| | 960 | results.clear(); |
| | 961 | rval = mb->get_adjacencies( &tri, 1, 1, false, results ); |
| | 962 | if (results.size() != 1 || results.front() != reverse_edge) { |
| | 963 | std::cerr << "Adjacency query from tri to reverse edge failed at " |
| | 964 | << __FILE__ << ":" << __LINE__ << std::endl; |
| | 965 | return MB_FAILURE; |
| | 966 | } |
| | 967 | |
| | 968 | return MB_SUCCESS; |