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.