8 #ifndef OPENFPM_VCLUSTER_SRC_VCLUSTER_SEMANTIC_UNIT_TESTS_HPP_ 
    9 #define OPENFPM_VCLUSTER_SRC_VCLUSTER_SEMANTIC_UNIT_TESTS_HPP_ 
   11 #include "Grid/grid_util_test.hpp" 
   12 #include "data_type/aggregate.hpp" 
   28 BOOST_AUTO_TEST_SUITE( VCluster_semantic_test )
 
   30 BOOST_AUTO_TEST_CASE (Vcluster_semantic_gather)
 
   32     for (
size_t i = 0 ; i < 100 ; i++)
 
   37             std::cout << 
"Semantic gather test start" << std::endl;
 
   59             BOOST_REQUIRE_EQUAL(v2.
size(),n*(n-1)/2);
 
   62             for (
size_t i = 0 ; i < v2.
size() ; i++)
 
   63                 is_five &= (v2.get(i) == 5);
 
   65             BOOST_REQUIRE_EQUAL(is_five,
true);
 
   70 BOOST_AUTO_TEST_CASE (Vcluster_semantic_gather_2)
 
   72     for (
size_t i = 0 ; i < 100 ; i++)
 
   96             BOOST_REQUIRE_EQUAL(v2.
size(),n);
 
   99             for (
size_t i = 0 ; i < v2.
size() ; i++)
 
  101                 for (
size_t j = 0 ; j < v2.get(i).
size() ; j++)
 
  102                     is_five &= (v2.get(i).get(j) == 5);
 
  104             BOOST_REQUIRE_EQUAL(is_five,
true);
 
  115             BOOST_REQUIRE_EQUAL(v3.
size(),n-1);
 
  118             for (
size_t i = 0 ; i < v3.
size() ; i++)
 
  120                 for (
size_t j = 0 ; j < v3.get(i).
size() ; j++)
 
  121                     is_five &= (v3.get(i).get(j) == 5);
 
  123             BOOST_REQUIRE_EQUAL(is_five,
true);
 
  129 BOOST_AUTO_TEST_CASE (Vcluster_semantic_gather_3)
 
  131     for (
size_t i = 0 ; i < 100 ; i++)
 
  144         v1_int2.add((
size_t)7);
 
  145         v1_int2.add((
size_t)7);
 
  147         aggr.template get<0>() = 7;
 
  148         aggr.template get<1>() = v1_int2;
 
  151         aggr.template get<2>() = p;
 
  170             BOOST_REQUIRE_EQUAL(v2.
size(),v1.
size()*n);
 
  172             bool is_seven = 
true;
 
  173             for (
size_t i = 0 ; i < v2.
size() ; i++)
 
  175                 for (
size_t j = 0 ; j < v2.get(i).
size() ; j++)
 
  177                     is_seven &= (v2.get(i).template get<0>(j) == 7);
 
  179                     for (
size_t k = 0; k < v2.get(i).template get<1>(j).size(); k++)
 
  180                         is_seven &= (v2.get(i).template get<1>(j).
get(k) == 7);
 
  184                     BOOST_REQUIRE(p.template get<0>() == 1);
 
  185                     BOOST_REQUIRE(p.template get<1>() == 2);
 
  186                     BOOST_REQUIRE(p.template get<2>() == 3);
 
  187                     BOOST_REQUIRE(p.template get<3>() == 4);
 
  189                     for (
size_t l = 0 ; l < 3 ; l++)
 
  190                         p.template get<4>()[l] = 5;
 
  192                     for (
size_t m = 0 ; m < 3 ; m++)
 
  194                         for (
size_t n = 0 ; n < 3 ; n++)
 
  196                             p.template get<5>()[m][n] = 6;
 
  201             BOOST_REQUIRE_EQUAL(is_seven,
true);
 
  206 BOOST_AUTO_TEST_CASE (Vcluster_semantic_gather_4)
 
  208     for (
size_t i = 0 ; i < 100 ; i++)
 
  215         size_t sz[] = {16,16};
 
  230             BOOST_REQUIRE_EQUAL(v2.size(),n);
 
  233             for (
size_t i = 0 ; i < v2.size() ; i++)
 
  235                 auto it = v2.get(i).getIterator();
 
  241                     match &= (v2.get(i).template get<p::x>(key) == g1.template get<p::x>(key));
 
  242                     match &= (v2.get(i).template get<p::y>(key) == g1.template get<p::y>(key));
 
  243                     match &= (v2.get(i).template get<p::z>(key) == g1.template get<p::z>(key));
 
  244                     match &= (v2.get(i).template get<p::s>(key) == g1.template get<p::s>(key));
 
  246                     match &= (v2.get(i).template get<p::v>(key)[0] == g1.template get<p::v>(key)[0]);
 
  247                     match &= (v2.get(i).template get<p::v>(key)[1] == g1.template get<p::v>(key)[1]);
 
  248                     match &= (v2.get(i).template get<p::v>(key)[2] == g1.template get<p::v>(key)[2]);
 
  250                     match &= (v2.get(i).template get<p::t>(key)[0][0] == g1.template get<p::t>(key)[0][0]);
 
  251                     match &= (v2.get(i).template get<p::t>(key)[0][1] == g1.template get<p::t>(key)[0][1]);
 
  252                     match &= (v2.get(i).template get<p::t>(key)[0][2] == g1.template get<p::t>(key)[0][2]);
 
  253                     match &= (v2.get(i).template get<p::t>(key)[1][0] == g1.template get<p::t>(key)[1][0]);
 
  254                     match &= (v2.get(i).template get<p::t>(key)[1][1] == g1.template get<p::t>(key)[1][1]);
 
  255                     match &= (v2.get(i).template get<p::t>(key)[1][2] == g1.template get<p::t>(key)[1][2]);
 
  256                     match &= (v2.get(i).template get<p::t>(key)[2][0] == g1.template get<p::t>(key)[2][0]);
 
  257                     match &= (v2.get(i).template get<p::t>(key)[2][1] == g1.template get<p::t>(key)[2][1]);
 
  258                     match &= (v2.get(i).template get<p::t>(key)[2][2] == g1.template get<p::t>(key)[2][2]);
 
  264             BOOST_REQUIRE_EQUAL(match,
true);
 
  269 BOOST_AUTO_TEST_CASE (Vcluster_semantic_gather_5)
 
  271     for (
size_t i = 0 ; i < 100 ; i++)
 
  278         size_t sz[] = {16,16};
 
  297             BOOST_REQUIRE_EQUAL(v2.
size(),v1.size()*n);
 
  300             for (
size_t i = 0 ; i < v2.
size() ; i++)
 
  302                 auto it = v2.get(i).getIterator();
 
  308                     match &= (v2.get(i).template get<p::x>(key) == g1.template get<p::x>(key));
 
  309                     match &= (v2.get(i).template get<p::y>(key) == g1.template get<p::y>(key));
 
  310                     match &= (v2.get(i).template get<p::z>(key) == g1.template get<p::z>(key));
 
  311                     match &= (v2.get(i).template get<p::s>(key) == g1.template get<p::s>(key));
 
  313                     match &= (v2.get(i).template get<p::v>(key)[0] == g1.template get<p::v>(key)[0]);
 
  314                     match &= (v2.get(i).template get<p::v>(key)[1] == g1.template get<p::v>(key)[1]);
 
  315                     match &= (v2.get(i).template get<p::v>(key)[2] == g1.template get<p::v>(key)[2]);
 
  317                     match &= (v2.get(i).template get<p::t>(key)[0][0] == g1.template get<p::t>(key)[0][0]);
 
  318                     match &= (v2.get(i).template get<p::t>(key)[0][1] == g1.template get<p::t>(key)[0][1]);
 
  319                     match &= (v2.get(i).template get<p::t>(key)[0][2] == g1.template get<p::t>(key)[0][2]);
 
  320                     match &= (v2.get(i).template get<p::t>(key)[1][0] == g1.template get<p::t>(key)[1][0]);
 
  321                     match &= (v2.get(i).template get<p::t>(key)[1][1] == g1.template get<p::t>(key)[1][1]);
 
  322                     match &= (v2.get(i).template get<p::t>(key)[1][2] == g1.template get<p::t>(key)[1][2]);
 
  323                     match &= (v2.get(i).template get<p::t>(key)[2][0] == g1.template get<p::t>(key)[2][0]);
 
  324                     match &= (v2.get(i).template get<p::t>(key)[2][1] == g1.template get<p::t>(key)[2][1]);
 
  325                     match &= (v2.get(i).template get<p::t>(key)[2][2] == g1.template get<p::t>(key)[2][2]);
 
  331             BOOST_REQUIRE_EQUAL(match,
true);
 
  336 BOOST_AUTO_TEST_CASE (Vcluster_semantic_gather_6)
 
  338     for (
size_t i = 0 ; i < 100 ; i++)
 
  349         v1_int2.add((
size_t)7);
 
  350         v1_int2.add((
size_t)7);
 
  369             BOOST_REQUIRE_EQUAL(v2.
size(),v1.
size()*n);
 
  371             bool is_seven = 
true;
 
  372             for (
size_t i = 0 ; i < v2.
size() ; i++)
 
  374                 for (
size_t j = 0 ; j < v2.get(i).
size() ; j++)
 
  376                     for (
size_t k = 0 ; k < v2.get(i).get(j).
size() ; k++)
 
  377                         is_seven &= (v2.get(i).get(j).get(k) == 7);
 
  380             BOOST_REQUIRE_EQUAL(is_seven,
true);
 
  385 BOOST_AUTO_TEST_CASE (Vcluster_semantic_gather_7)
 
  387     for (
size_t i = 0 ; i < 100 ; i++)
 
  413             BOOST_REQUIRE_EQUAL(v2.
size(),n);
 
  417             for (
size_t i = 0 ; i < v2.
size() ; i++)
 
  419                 for (
size_t j = 0 ; j < v2.get(i).
size() ; j++)
 
  424                     match &= (p2.template get<p::x>() == p1.template get<p::x>());
 
  425                     match &= (p2.template get<p::y>() == p1.template get<p::y>());
 
  426                     match &= (p2.template get<p::z>() == p1.template get<p::z>());
 
  427                     match &= (p2.template get<p::s>() == p1.template get<p::s>());
 
  429                     match &= (p2.template get<p::v>()[0] == p1.template get<p::v>()[0]);
 
  430                     match &= (p2.template get<p::v>()[1] == p1.template get<p::v>()[1]);
 
  431                     match &= (p2.template get<p::v>()[2] == p1.template get<p::v>()[2]);
 
  433                     match &= (p2.template get<p::t>()[0][0] == p1.template get<p::t>()[0][0]);
 
  434                     match &= (p2.template get<p::t>()[0][1] == p1.template get<p::t>()[0][1]);
 
  435                     match &= (p2.template get<p::t>()[0][2] == p1.template get<p::t>()[0][2]);
 
  436                     match &= (p2.template get<p::t>()[1][0] == p1.template get<p::t>()[1][0]);
 
  437                     match &= (p2.template get<p::t>()[1][1] == p1.template get<p::t>()[1][1]);
 
  438                     match &= (p2.template get<p::t>()[1][2] == p1.template get<p::t>()[1][2]);
 
  439                     match &= (p2.template get<p::t>()[2][0] == p1.template get<p::t>()[2][0]);
 
  440                     match &= (p2.template get<p::t>()[2][1] == p1.template get<p::t>()[2][1]);
 
  441                     match &= (p2.template get<p::t>()[2][2] == p1.template get<p::t>()[2][2]);
 
  444             BOOST_REQUIRE_EQUAL(match,
true);
 
  449 BOOST_AUTO_TEST_CASE (Vcluster_semantic_gather_8)
 
  451     for (
size_t i = 0 ; i < 100 ; i++)
 
  481             BOOST_REQUIRE_EQUAL(v2.
size(),n);
 
  483             for (
size_t i = 0 ; i < v2.
size() ; i++)
 
  485                 for (
size_t j = 0 ; j < v2.get(i).
size() ; j++)
 
  488                     BOOST_REQUIRE(bx == b2);
 
  495 BOOST_AUTO_TEST_CASE (Vcluster_semantic_struct_gather)
 
  497     for (
size_t i = 0 ; i < 100 ; i++)
 
  521             BOOST_REQUIRE_EQUAL(v2.
size(),n*(n-1)/2);
 
  523             bool is_correct = 
true;
 
  524             for (
size_t i = 0 ; i < v2.
size() ; i++)
 
  526                 is_correct &= (v2.get(i).a == 5);
 
  527                 is_correct &= (v2.get(i).b == 10.0);
 
  528                 is_correct &= (v2.get(i).c == 11.0);
 
  531             BOOST_REQUIRE_EQUAL(is_correct,
true);
 
  534             std::cout << 
"Semantic gather test stop" << std::endl;
 
  538 #define SSCATTER_MAX 7 
  540 BOOST_AUTO_TEST_CASE (Vcluster_semantic_scatter)
 
  542     for (
size_t i = 0 ; i < 100 ; i++)
 
  551         nr = ((nr-1) * nr) / 2;
 
  553         size_t n_elements = nc * SSCATTER_MAX * (SSCATTER_MAX - 1) / 2 + nr;
 
  556         v1.resize(n_elements);
 
  558         for(
size_t i = 0 ; i < n_elements ; i++)
 
  571             sz.add(i % SSCATTER_MAX);
 
  582         for (
size_t i = 0 ; i < v2.
size() ; i++)
 
  583             is_five &= (v2.get(i) == 5);
 
  585         BOOST_REQUIRE_EQUAL(is_five,
true);
 
  590 BOOST_AUTO_TEST_CASE (Vcluster_semantic_struct_scatter)
 
  592     for (
size_t i = 0 ; i < 100 ; i++)
 
  601         nr = ((nr-1) * nr) / 2;
 
  603         size_t n_elements = nc * SSCATTER_MAX * (SSCATTER_MAX - 1) / 2 + nr;
 
  606         v1.resize(n_elements);
 
  608         for(
size_t i = 0 ; i < n_elements ; i++)
 
  619             sz.add(i % SSCATTER_MAX);
 
  630             for (
size_t i = 0 ; i < v2.
size() ; i++)
 
  631                 is_five &= (v2.get(i) == 5);
 
  633             BOOST_REQUIRE_EQUAL(is_five,
true);
 
  640 BOOST_AUTO_TEST_CASE (Vcluster_semantic_sendrecv_all_unknown)
 
  648     for (
size_t i = 0 ; i < 100 ; i++)
 
  653             std::cout << 
"Semantic sendrecv test start" << std::endl;
 
  681         for(
size_t i = 0 ; i < v1.
size() ; i++)
 
  684             for (
size_t j = 0 ; j < i % SSCATTER_MAX ; j++)
 
  696         vcl.
SSendRecv(v1,v2,prc_send,prc_recv2,sz_recv2);
 
  703         vcl.
SSendRecv(v1,v3,prc_send,prc_recv3,sz_recv3);
 
  709         nr = ((nr-1) * nr) / 2;
 
  711         size_t n_ele = nc * SSCATTER_MAX * (SSCATTER_MAX - 1) / 2 + nr;
 
  713         BOOST_REQUIRE_EQUAL(v2.
size(),n_ele);
 
  720         for (
size_t i = 0 ; i < sz_recv2.
size() ; i++)
 
  722             for (
size_t j = 0 ; j < sz_recv2.get(i); j++)
 
  724                 match &= v2.get(s+j) == j;
 
  726             s += sz_recv2.get(i);
 
  729         BOOST_REQUIRE_EQUAL(match,
true);
 
  731         for (
size_t i = 0 ; i < v3.
size() ; i++)
 
  733             for (
size_t j = 0 ; j < v3.get(i).
size() ; j++)
 
  735                 match &= v3.get(i).get(j) == j;
 
  739         BOOST_REQUIRE_EQUAL(match,
true);
 
  744 BOOST_AUTO_TEST_CASE (Vcluster_semantic_sendrecv_receive_size_known)
 
  752     for (
size_t i = 0 ; i < 100 ; i++)
 
  757         {std::cout << 
"Semantic sendrecv test start" << std::endl;}
 
  773         nr = ((nr-1) * nr) / 2;
 
  775         size_t n_ele = nc * SSCATTER_MAX * (SSCATTER_MAX - 1) / 2 + nr;
 
  777         for(
size_t i = 0 ; i < v1.
size() ; i++)
 
  779             for (
size_t j = 0 ; j < i % SSCATTER_MAX ; j++)
 
  786         vcl.
SSendRecv(v1,v2,prc_send,prc_recv2,sz_recv2);
 
  790         vcl.
SSendRecv(v1,v2,prc_send,prc_recv2,sz_recv2,RECEIVE_KNOWN | KNOWN_ELEMENT_OR_BYTE);
 
  791         vcl.
SSendRecv(v1,v3,prc_send,prc_recv3,sz_recv3);
 
  793         BOOST_REQUIRE_EQUAL(v2.
size(),n_ele);
 
  800         for (
size_t i = 0 ; i < sz_recv2.
size() ; i++)
 
  802             for (
size_t j = 0 ; j < sz_recv2.get(i); j++)
 
  804                 match &= v2.get(s+j) == j;
 
  806             s += sz_recv2.get(i);
 
  809         BOOST_REQUIRE_EQUAL(match,
true);
 
  811         for (
size_t i = 0 ; i < v3.
size() ; i++)
 
  813             for (
size_t j = 0 ; j < v3.get(i).
size() ; j++)
 
  815                 match &= v3.get(i).get(j) == j;
 
  819         BOOST_REQUIRE_EQUAL(match,
true);
 
  825 BOOST_AUTO_TEST_CASE (Vcluster_semantic_sendrecv_receive_known)
 
  833     for (
size_t i = 0 ; i < 100 ; i++)
 
  838         {std::cout << 
"Semantic sendrecv test start" << std::endl;}
 
  854         nr = ((nr-1) * nr) / 2;
 
  856         size_t n_ele = nc * SSCATTER_MAX * (SSCATTER_MAX - 1) / 2 + nr;
 
  858         for(
size_t i = 0 ; i < v1.
size() ; i++)
 
  860             for (
size_t j = 0 ; j < i % SSCATTER_MAX ; j++)
 
  867         vcl.
SSendRecv(v1,v2,prc_send,prc_recv2,sz_recv2);
 
  874         vcl.
SSendRecv(v1,v2,prc_send,prc_recv2,sz_recv2,RECEIVE_KNOWN);
 
  875         vcl.
SSendRecv(v1,v3,prc_send,prc_recv3,sz_recv3);
 
  877         BOOST_REQUIRE_EQUAL(v2.
size(),n_ele);
 
  884         for (
size_t i = 0 ; i < sz_recv2.
size() ; i++)
 
  886             for (
size_t j = 0 ; j < sz_recv2.get(i); j++)
 
  888                 match &= v2.get(s+j) == j;
 
  890             s += sz_recv2.get(i);
 
  893         BOOST_REQUIRE_EQUAL(match,
true);
 
  895         for (
size_t i = 0 ; i < v3.
size() ; i++)
 
  897             for (
size_t j = 0 ; j < v3.get(i).
size() ; j++)
 
  899                 match &= v3.get(i).get(j) == j;
 
  903         BOOST_REQUIRE_EQUAL(match,
true);
 
  907 BOOST_AUTO_TEST_CASE (Vcluster_semantic_struct_sendrecv)
 
  909     for (
size_t i = 0 ; i < 100 ; i++)
 
  929         nr = ((nr-1) * nr) / 2;
 
  931         size_t n_ele = nc * SSCATTER_MAX * (SSCATTER_MAX - 1) / 2 + nr;
 
  933         for(
size_t i = 0 ; i < v1.
size() ; i++)
 
  935             for (
size_t j = 0 ; j < i % SSCATTER_MAX ; j++)
 
  944         vcl.
SSendRecv(v1,v2,prc_send,prc_recv2,sz_recv2);
 
  945         vcl.
SSendRecv(v1,v3,prc_send,prc_recv3,sz_recv3);
 
  947         BOOST_REQUIRE_EQUAL(v2.
size(),n_ele);
 
  954         for (
size_t i = 0 ; i < sz_recv2.
size() ; i++)
 
  956             for (
size_t j = 0 ; j < sz_recv2.get(i); j++)
 
  962             s += sz_recv2.get(i);
 
  965         BOOST_REQUIRE_EQUAL(match,
true);
 
  967         for (
size_t i = 0 ; i < v3.
size() ; i++)
 
  969             for (
size_t j = 0 ; j < v3.get(i).
size() ; j++)
 
  977         BOOST_REQUIRE_EQUAL(match,
true);
 
  994         for(
size_t i = 0 ; i < v1.
size() ; i++)
 
  999         vcl.
SSendRecv(v1,v2,prc_send,prc_recv2,sz_recv2);
 
 1001         BOOST_REQUIRE_EQUAL(v2.
size(),0ul);
 
 1002         BOOST_REQUIRE_EQUAL(prc_recv2.
size(),0ul);
 
 1003         BOOST_REQUIRE_EQUAL(sz_recv2.
size(),0ul);
 
 1007 BOOST_AUTO_TEST_CASE (Vcluster_semantic_sendrecv_2)
 
 1009     for (
size_t i = 0 ; i < 100 ; i++)
 
 1011         Vcluster & vcl = create_vcluster();
 
 1034         aggr.template get<0>() = v1_int2;
 
 1042         for(
size_t i = 0 ; i < v1.
size() ; i++)
 
 1044             for (
size_t j = 0 ; j < i % SSCATTER_MAX ; j++)
 
 1046                 v1.get(i).add(aggr);
 
 1054         nr = ((nr-1) * nr) / 2;
 
 1056         size_t n_ele = nc * SSCATTER_MAX * (SSCATTER_MAX - 1) / 2 + nr;
 
 1058         vcl.
SSendRecv(v1,v2,prc_send,prc_recv2,sz_recv2);
 
 1060         vcl.
SSendRecv(v1,v3,prc_send,prc_recv3,sz_recv3);
 
 1062         BOOST_REQUIRE_EQUAL(v2.
size(),n_ele);
 
 1067         bool is_seven = 
true;
 
 1070         for (
size_t i = 0 ; i < sz_recv2.
size() ; i++)
 
 1072             for (
size_t j = 0 ; j < sz_recv2.get(i); j++)
 
 1074                 for (
size_t k = 0; k < v2.get(s+j).template get<0>().size(); k++)
 
 1075                     is_seven &= (v2.get(s+j).template get<0>().
get(k) == 7);
 
 1077             s += sz_recv2.get(i);
 
 1080         BOOST_REQUIRE_EQUAL(is_seven,
true);
 
 1081         BOOST_REQUIRE_EQUAL(match,
true);
 
 1083         for (
size_t i = 0 ; i < v3.
size() ; i++)
 
 1085             for (
size_t j = 0 ; j < v3.get(i).
size(); j++)
 
 1087                 for (
size_t k = 0; k < v3.get(i).template get<0>(j).size(); k++)
 
 1088                     is_seven &= (v3.get(i).template get<0>(j).
get(k) == 7);
 
 1092         BOOST_REQUIRE_EQUAL(is_seven,
true);
 
 1093         BOOST_REQUIRE_EQUAL(match,
true);
 
 1097 BOOST_AUTO_TEST_CASE (Vcluster_semantic_sendrecv_3)
 
 1099     for (
size_t i = 0 ; i < 100 ; i++)
 
 1101         Vcluster & vcl = create_vcluster();
 
 1120         v1_int2.add((
size_t)7);
 
 1121         v1_int2.add((
size_t)7);
 
 1123         aggr.template get<0>() = 7;
 
 1124         aggr.template get<1>() = v1_int2;
 
 1129         aggr.template get<2>() = p1;
 
 1137         for(
size_t i = 0 ; i < v1.
size() ; i++)
 
 1139             for (
size_t j = 0 ; j < i % SSCATTER_MAX ; j++)
 
 1141                 v1.get(i).add(aggr);
 
 1149         nr = ((nr-1) * nr) / 2;
 
 1151         size_t n_ele = nc * SSCATTER_MAX * (SSCATTER_MAX - 1) / 2 + nr;
 
 1153         vcl.
SSendRecv(v1,v2,prc_send,prc_recv2,sz_recv2);
 
 1155         vcl.
SSendRecv(v1,v3,prc_send,prc_recv3,sz_recv3);
 
 1157         BOOST_REQUIRE_EQUAL(v2.
size(),n_ele);
 
 1162         bool is_seven = 
true;
 
 1165         for (
size_t i = 0 ; i < sz_recv2.
size() ; i++)
 
 1167             for (
size_t j = 0 ; j < sz_recv2.get(i); j++)
 
 1169                 is_seven &= (v2.get(s+j).template get<0>() == 7);
 
 1171                 for (
size_t k = 0; k < v2.get(s+j).template get<1>().size(); k++)
 
 1172                     is_seven &= (v2.get(s+j).template get<1>().
get(k) == 7);
 
 1176                 match &= (p2.template get<p::x>() == p1.template get<p::x>());
 
 1177                 match &= (p2.template get<p::y>() == p1.template get<p::y>());
 
 1178                 match &= (p2.template get<p::z>() == p1.template get<p::z>());
 
 1179                 match &= (p2.template get<p::s>() == p1.template get<p::s>());
 
 1181                 match &= (p2.template get<p::v>()[0] == p1.template get<p::v>()[0]);
 
 1182                 match &= (p2.template get<p::v>()[1] == p1.template get<p::v>()[1]);
 
 1183                 match &= (p2.template get<p::v>()[2] == p1.template get<p::v>()[2]);
 
 1185                 match &= (p2.template get<p::t>()[0][0] == p1.template get<p::t>()[0][0]);
 
 1186                 match &= (p2.template get<p::t>()[0][1] == p1.template get<p::t>()[0][1]);
 
 1187                 match &= (p2.template get<p::t>()[0][2] == p1.template get<p::t>()[0][2]);
 
 1188                 match &= (p2.template get<p::t>()[1][0] == p1.template get<p::t>()[1][0]);
 
 1189                 match &= (p2.template get<p::t>()[1][1] == p1.template get<p::t>()[1][1]);
 
 1190                 match &= (p2.template get<p::t>()[1][2] == p1.template get<p::t>()[1][2]);
 
 1191                 match &= (p2.template get<p::t>()[2][0] == p1.template get<p::t>()[2][0]);
 
 1192                 match &= (p2.template get<p::t>()[2][1] == p1.template get<p::t>()[2][1]);
 
 1193                 match &= (p2.template get<p::t>()[2][2] == p1.template get<p::t>()[2][2]);
 
 1195             s += sz_recv2.get(i);
 
 1198         BOOST_REQUIRE_EQUAL(is_seven,
true);
 
 1199         BOOST_REQUIRE_EQUAL(match,
true);
 
 1201         for (
size_t i = 0 ; i < v3.
size() ; i++)
 
 1203             for (
size_t j = 0 ; j < v3.get(i).
size(); j++)
 
 1205                 is_seven &= (v3.get(i).get(j).template get<0>() == 7);
 
 1207                 for (
size_t k = 0; k < v3.get(i).get(j).template get<1>().size(); k++)
 
 1208                     is_seven &= (v3.get(i).get(j).template get<1>().
get(k) == 7);
 
 1212                 match &= (p2.template get<p::x>() == p1.template get<p::x>());
 
 1213                 match &= (p2.template get<p::y>() == p1.template get<p::y>());
 
 1214                 match &= (p2.template get<p::z>() == p1.template get<p::z>());
 
 1215                 match &= (p2.template get<p::s>() == p1.template get<p::s>());
 
 1217                 match &= (p2.template get<p::v>()[0] == p1.template get<p::v>()[0]);
 
 1218                 match &= (p2.template get<p::v>()[1] == p1.template get<p::v>()[1]);
 
 1219                 match &= (p2.template get<p::v>()[2] == p1.template get<p::v>()[2]);
 
 1221                 match &= (p2.template get<p::t>()[0][0] == p1.template get<p::t>()[0][0]);
 
 1222                 match &= (p2.template get<p::t>()[0][1] == p1.template get<p::t>()[0][1]);
 
 1223                 match &= (p2.template get<p::t>()[0][2] == p1.template get<p::t>()[0][2]);
 
 1224                 match &= (p2.template get<p::t>()[1][0] == p1.template get<p::t>()[1][0]);
 
 1225                 match &= (p2.template get<p::t>()[1][1] == p1.template get<p::t>()[1][1]);
 
 1226                 match &= (p2.template get<p::t>()[1][2] == p1.template get<p::t>()[1][2]);
 
 1227                 match &= (p2.template get<p::t>()[2][0] == p1.template get<p::t>()[2][0]);
 
 1228                 match &= (p2.template get<p::t>()[2][1] == p1.template get<p::t>()[2][1]);
 
 1229                 match &= (p2.template get<p::t>()[2][2] == p1.template get<p::t>()[2][2]);
 
 1233         BOOST_REQUIRE_EQUAL(is_seven,
true);
 
 1234         BOOST_REQUIRE_EQUAL(match,
true);
 
 1238 BOOST_AUTO_TEST_CASE (Vcluster_semantic_sendrecv_4)
 
 1240     for (
size_t i = 0 ; i < 100 ; i++)
 
 1242         Vcluster & vcl = create_vcluster();
 
 1260         nr = ((nr-1) * nr) / 2;
 
 1262         size_t n_ele = nc * SSCATTER_MAX * (SSCATTER_MAX - 1) / 2 + nr;
 
 1272         aggr.template get<0>() = 7;
 
 1273         aggr.template get<1>() = p1;
 
 1276         for(
size_t i = 0 ; i < v1.
size() ; i++)
 
 1278             for (
size_t j = 0 ; j < i % SSCATTER_MAX ; j++)
 
 1280                 v1.get(i).add(aggr);
 
 1286         vcl.
SSendRecv(v1,v2,prc_send,prc_recv2,sz_recv2);
 
 1287         vcl.
SSendRecv(v1,v3,prc_send,prc_recv3,sz_recv3);
 
 1289         BOOST_REQUIRE_EQUAL(v2.
size(),n_ele);
 
 1293         bool is_seven = 
true;
 
 1296         for (
size_t i = 0 ; i < sz_recv2.
size() ; i++)
 
 1298             for (
size_t j = 0 ; j < sz_recv2.get(i); j++)
 
 1300                 is_seven &= (v2.get(s+j).template get<0>() == 7);
 
 1304                 match &= (p2.template get<p::x>() == p1.template get<p::x>());
 
 1305                 match &= (p2.template get<p::y>() == p1.template get<p::y>());
 
 1306                 match &= (p2.template get<p::z>() == p1.template get<p::z>());
 
 1307                 match &= (p2.template get<p::s>() == p1.template get<p::s>());
 
 1309                 match &= (p2.template get<p::v>()[0] == p1.template get<p::v>()[0]);
 
 1310                 match &= (p2.template get<p::v>()[1] == p1.template get<p::v>()[1]);
 
 1311                 match &= (p2.template get<p::v>()[2] == p1.template get<p::v>()[2]);
 
 1313                 match &= (p2.template get<p::t>()[0][0] == p1.template get<p::t>()[0][0]);
 
 1314                 match &= (p2.template get<p::t>()[0][1] == p1.template get<p::t>()[0][1]);
 
 1315                 match &= (p2.template get<p::t>()[0][2] == p1.template get<p::t>()[0][2]);
 
 1316                 match &= (p2.template get<p::t>()[1][0] == p1.template get<p::t>()[1][0]);
 
 1317                 match &= (p2.template get<p::t>()[1][1] == p1.template get<p::t>()[1][1]);
 
 1318                 match &= (p2.template get<p::t>()[1][2] == p1.template get<p::t>()[1][2]);
 
 1319                 match &= (p2.template get<p::t>()[2][0] == p1.template get<p::t>()[2][0]);
 
 1320                 match &= (p2.template get<p::t>()[2][1] == p1.template get<p::t>()[2][1]);
 
 1321                 match &= (p2.template get<p::t>()[2][2] == p1.template get<p::t>()[2][2]);
 
 1323             s += sz_recv2.get(i);
 
 1326         BOOST_REQUIRE_EQUAL(is_seven,
true);
 
 1327         BOOST_REQUIRE_EQUAL(match,
true);
 
 1329         for (
size_t i = 0 ; i < v3.
size() ; i++)
 
 1331             for (
size_t j = 0 ; j < v3.get(i).
size() ; j++)
 
 1333                 is_seven &= (v3.get(i).get(j).template get<0>() == 7);
 
 1337                 match &= (p2.template get<p::x>() == p1.template get<p::x>());
 
 1338                 match &= (p2.template get<p::y>() == p1.template get<p::y>());
 
 1339                 match &= (p2.template get<p::z>() == p1.template get<p::z>());
 
 1340                 match &= (p2.template get<p::s>() == p1.template get<p::s>());
 
 1342                 match &= (p2.template get<p::v>()[0] == p1.template get<p::v>()[0]);
 
 1343                 match &= (p2.template get<p::v>()[1] == p1.template get<p::v>()[1]);
 
 1344                 match &= (p2.template get<p::v>()[2] == p1.template get<p::v>()[2]);
 
 1346                 match &= (p2.template get<p::t>()[0][0] == p1.template get<p::t>()[0][0]);
 
 1347                 match &= (p2.template get<p::t>()[0][1] == p1.template get<p::t>()[0][1]);
 
 1348                 match &= (p2.template get<p::t>()[0][2] == p1.template get<p::t>()[0][2]);
 
 1349                 match &= (p2.template get<p::t>()[1][0] == p1.template get<p::t>()[1][0]);
 
 1350                 match &= (p2.template get<p::t>()[1][1] == p1.template get<p::t>()[1][1]);
 
 1351                 match &= (p2.template get<p::t>()[1][2] == p1.template get<p::t>()[1][2]);
 
 1352                 match &= (p2.template get<p::t>()[2][0] == p1.template get<p::t>()[2][0]);
 
 1353                 match &= (p2.template get<p::t>()[2][1] == p1.template get<p::t>()[2][1]);
 
 1354                 match &= (p2.template get<p::t>()[2][2] == p1.template get<p::t>()[2][2]);
 
 1358         BOOST_REQUIRE_EQUAL(is_seven,
true);
 
 1359         BOOST_REQUIRE_EQUAL(match,
true);
 
 1363 BOOST_AUTO_TEST_CASE (Vcluster_semantic_sendrecv_5)
 
 1365     for (
size_t i = 0 ; i < 100 ; i++)
 
 1367         Vcluster & vcl = create_vcluster();
 
 1378         size_t sz[] = {16,16};
 
 1385         aggr.template get<0>() = g1;
 
 1394         for(
size_t i = 0 ; i < v1.size() ; i++)
 
 1396             for (
size_t j = 0 ; j < i % SSCATTER_MAX ; j++)
 
 1398                 v1.get(i).add(aggr);
 
 1406         nr = ((nr-1) * nr) / 2;
 
 1408         size_t n_ele = nc * SSCATTER_MAX * (SSCATTER_MAX - 1) / 2 + nr;
 
 1410         vcl.
SSendRecv(v1,v2,prc_send,prc_recv2,sz_recv2);
 
 1412         vcl.
SSendRecv(v1,v3,prc_send,prc_recv3,sz_recv3);
 
 1414         BOOST_REQUIRE_EQUAL(v2.
size(),n_ele);
 
 1422         for (
size_t i = 0 ; i < sz_recv2.
size() ; i++)
 
 1424             for (
size_t j = 0 ; j < sz_recv2.get(i); j++)
 
 1428                 auto it = g2.getIterator();
 
 1434                     match &= (g2.template get<p::x>(key) == g1.template get<p::x>(key));
 
 1435                     match &= (g2.template get<p::y>(key) == g1.template get<p::y>(key));
 
 1436                     match &= (g2.template get<p::z>(key) == g1.template get<p::z>(key));
 
 1437                     match &= (g2.template get<p::s>(key) == g1.template get<p::s>(key));
 
 1439                     match &= (g2.template get<p::v>(key)[0] == g1.template get<p::v>(key)[0]);
 
 1440                     match &= (g2.template get<p::v>(key)[1] == g1.template get<p::v>(key)[1]);
 
 1441                     match &= (g2.template get<p::v>(key)[2] == g1.template get<p::v>(key)[2]);
 
 1443                     match &= (g2.template get<p::t>(key)[0][0] == g1.template get<p::t>(key)[0][0]);
 
 1444                     match &= (g2.template get<p::t>(key)[0][1] == g1.template get<p::t>(key)[0][1]);
 
 1445                     match &= (g2.template get<p::t>(key)[0][2] == g1.template get<p::t>(key)[0][2]);
 
 1446                     match &= (g2.template get<p::t>(key)[1][0] == g1.template get<p::t>(key)[1][0]);
 
 1447                     match &= (g2.template get<p::t>(key)[1][1] == g1.template get<p::t>(key)[1][1]);
 
 1448                     match &= (g2.template get<p::t>(key)[1][2] == g1.template get<p::t>(key)[1][2]);
 
 1449                     match &= (g2.template get<p::t>(key)[2][0] == g1.template get<p::t>(key)[2][0]);
 
 1450                     match &= (g2.template get<p::t>(key)[2][1] == g1.template get<p::t>(key)[2][1]);
 
 1451                     match &= (g2.template get<p::t>(key)[2][2] == g1.template get<p::t>(key)[2][2]);
 
 1456             s += sz_recv2.get(i);
 
 1458         BOOST_REQUIRE_EQUAL(match,
true);
 
 1460         for (
size_t i = 0 ; i < v3.
size() ; i++)
 
 1462             for (
size_t j = 0 ; j < v3.get(i).
size(); j++)
 
 1466                 auto it = g2.getIterator();
 
 1472                     match &= (g2.template get<p::x>(key) == g1.template get<p::x>(key));
 
 1473                     match &= (g2.template get<p::y>(key) == g1.template get<p::y>(key));
 
 1474                     match &= (g2.template get<p::z>(key) == g1.template get<p::z>(key));
 
 1475                     match &= (g2.template get<p::s>(key) == g1.template get<p::s>(key));
 
 1477                     match &= (g2.template get<p::v>(key)[0] == g1.template get<p::v>(key)[0]);
 
 1478                     match &= (g2.template get<p::v>(key)[1] == g1.template get<p::v>(key)[1]);
 
 1479                     match &= (g2.template get<p::v>(key)[2] == g1.template get<p::v>(key)[2]);
 
 1481                     match &= (g2.template get<p::t>(key)[0][0] == g1.template get<p::t>(key)[0][0]);
 
 1482                     match &= (g2.template get<p::t>(key)[0][1] == g1.template get<p::t>(key)[0][1]);
 
 1483                     match &= (g2.template get<p::t>(key)[0][2] == g1.template get<p::t>(key)[0][2]);
 
 1484                     match &= (g2.template get<p::t>(key)[1][0] == g1.template get<p::t>(key)[1][0]);
 
 1485                     match &= (g2.template get<p::t>(key)[1][1] == g1.template get<p::t>(key)[1][1]);
 
 1486                     match &= (g2.template get<p::t>(key)[1][2] == g1.template get<p::t>(key)[1][2]);
 
 1487                     match &= (g2.template get<p::t>(key)[2][0] == g1.template get<p::t>(key)[2][0]);
 
 1488                     match &= (g2.template get<p::t>(key)[2][1] == g1.template get<p::t>(key)[2][1]);
 
 1489                     match &= (g2.template get<p::t>(key)[2][2] == g1.template get<p::t>(key)[2][2]);
 
 1495         BOOST_REQUIRE_EQUAL(match,
true);
 
 1499 BOOST_AUTO_TEST_CASE (Vcluster_semantic_sendrecv_6)
 
 1501     for (
size_t i = 0 ; i < 100 ; i++)
 
 1503         Vcluster & vcl = create_vcluster();
 
 1514         size_t sz[] = {8,10};
 
 1525         for(
size_t i = 0 ; i < v1.size() ; i++)
 
 1532         vcl.
SSendRecv(v1,v3,prc_send,prc_recv3,sz_recv3);
 
 1539         for (
size_t i = 0 ; i < v3.
size() ; i++)
 
 1541             for (
size_t j = 0 ; j < v3.get(i).
size(); j++)
 
 1545                 auto it = g2.getIterator();
 
 1551                     match &= (g2.template get<p::x>(key) == g1.template get<p::x>(key));
 
 1552                     match &= (g2.template get<p::y>(key) == g1.template get<p::y>(key));
 
 1553                     match &= (g2.template get<p::z>(key) == g1.template get<p::z>(key));
 
 1554                     match &= (g2.template get<p::s>(key) == g1.template get<p::s>(key));
 
 1556                     match &= (g2.template get<p::v>(key)[0] == g1.template get<p::v>(key)[0]);
 
 1557                     match &= (g2.template get<p::v>(key)[1] == g1.template get<p::v>(key)[1]);
 
 1558                     match &= (g2.template get<p::v>(key)[2] == g1.template get<p::v>(key)[2]);
 
 1560                     match &= (g2.template get<p::t>(key)[0][0] == g1.template get<p::t>(key)[0][0]);
 
 1561                     match &= (g2.template get<p::t>(key)[0][1] == g1.template get<p::t>(key)[0][1]);
 
 1562                     match &= (g2.template get<p::t>(key)[0][2] == g1.template get<p::t>(key)[0][2]);
 
 1563                     match &= (g2.template get<p::t>(key)[1][0] == g1.template get<p::t>(key)[1][0]);
 
 1564                     match &= (g2.template get<p::t>(key)[1][1] == g1.template get<p::t>(key)[1][1]);
 
 1565                     match &= (g2.template get<p::t>(key)[1][2] == g1.template get<p::t>(key)[1][2]);
 
 1566                     match &= (g2.template get<p::t>(key)[2][0] == g1.template get<p::t>(key)[2][0]);
 
 1567                     match &= (g2.template get<p::t>(key)[2][1] == g1.template get<p::t>(key)[2][1]);
 
 1568                     match &= (g2.template get<p::t>(key)[2][2] == g1.template get<p::t>(key)[2][2]);
 
 1574         BOOST_REQUIRE_EQUAL(match,
true);
 
 1577             std::cout << 
"Semantic sendrecv test start" << std::endl;
 
 1624 BOOST_AUTO_TEST_SUITE_END()
 
grid_key_dx is the key to access any element in the grid 
 
size_t getProcessUnitID()
Get the process unit id. 
 
void setHigh(int i, T val)
set the high interval of the box 
 
mem_id get(size_t i) const 
Get the i index. 
 
Implementation of VCluster class. 
 
bool SSendRecv(openfpm::vector< T > &send, S &recv, openfpm::vector< size_t > &prc_send, openfpm::vector< size_t > &prc_recv, openfpm::vector< size_t > &sz_recv, size_t opt=NONE)
Semantic Send and receive, send the data to processors and receive from the other processors...
 
bool SGather(T &send, S &recv, size_t root)
Semantic Gather, gather the data from all processors into one node. 
 
void setLow(int i, T val)
set the low interval of the box 
 
This class represent an N-dimensional box. 
 
This class is a trick to indicate the compiler a specific specialization pattern. ...
 
aggregate of properties, from a list of object if create a struct that follow the OPENFPM native stru...
 
bool SScatter(T &send, S &recv, openfpm::vector< size_t > &prc, openfpm::vector< size_t > &sz, size_t root)
Semantic Scatter, scatter the data from one processor to the other node. 
 
Test structure used for several test. 
 
size_t getProcessingUnits()
Get the total number of processors.