8 #ifndef VTKWRITER_UNIT_TESTS_HPP_
9 #define VTKWRITER_UNIT_TESTS_HPP_
11 #include "data_type/aggregate.hpp"
13 #include "VTKWriter.hpp"
14 #include "util/SimpleRNG.hpp"
16 BOOST_AUTO_TEST_SUITE( vtk_writer_test )
25 typedef boost::fusion::vector<float,float,float,float,size_t,double,unsigned char,long int>
type;
27 typedef typename memory_traits_inte<type>::type memory_int;
28 typedef typename memory_traits_lin<type>::type memory_lin;
36 static const std::string name[];
41 static const unsigned int x = 0;
42 static const unsigned int y = 1;
43 static const unsigned int z = 2;
44 static const unsigned int prp1 = 3;
45 static const unsigned int prp2 = 4;
46 static const unsigned int prp3 = 5;
47 static const unsigned int prp4 = 6;
48 static const unsigned int prp5 = 7;
51 static const unsigned int max_prop = 8;
69 boost::fusion::at_c<vertex::x>(data) = x;
70 boost::fusion::at_c<vertex::y>(data) = y;
71 boost::fusion::at_c<vertex::z>(data) = z;
75 const std::string vertex::attributes::name[] = {
"x",
"y",
"z",
"prp1",
"prp2",
"prp3",
"prp4",
"prp5"};
80 typedef boost::fusion::vector<float[3],size_t,double>
type;
82 typedef typename memory_traits_inte<type>::type memory_int;
83 typedef typename memory_traits_lin<type>::type memory_lin;
91 static const std::string name[];
98 static const unsigned int x = 0;
99 static const unsigned int prp1 = 1;
100 static const unsigned int prp2 = 2;
121 boost::fusion::at_c<vertex::x>(
data)[0] = x;
122 boost::fusion::at_c<vertex::x>(
data)[1] = y;
123 boost::fusion::at_c<vertex::x>(
data)[2] = z;
130 const std::string vertex2::attributes::name[] = {
"x",
"prp1",
"prp2"};
134 BOOST_AUTO_TEST_CASE( vtk_writer_use_graph3D )
140 Graph_CSR<vertex2,edge> gr;
144 gr.addVertex(
vertex2(0.0,0.0,0.0));
145 gr.addVertex(
vertex2(0.0,0.0,1.0));
146 gr.addVertex(
vertex2(0.0,1.0,0.0));
147 gr.addVertex(
vertex2(0.0,1.0,1.0));
148 gr.addVertex(
vertex2(1.0,0.0,0.0));
149 gr.addVertex(
vertex2(1.0,0.0,1.0));
150 gr.addVertex(
vertex2(1.0,1.0,0.0));
151 gr.addVertex(
vertex2(1.0,1.0,1.0));
204 vtk.write(
"vtk_graph_v2.vtk");
208 bool test = compare(
"vtk_graph_v2.vtk",
"vtk_graph_v2_test.vtk");
209 BOOST_REQUIRE_EQUAL(
true,test);
212 BOOST_AUTO_TEST_CASE( vtk_writer_use_graph3D_edge )
218 Graph_CSR<vertex2,vertex2> gr;
222 gr.addVertex(
vertex2(0.0,0.0,0.0));
223 gr.addVertex(
vertex2(0.0,0.0,1.0));
224 gr.addVertex(
vertex2(0.0,1.0,0.0));
225 gr.addVertex(
vertex2(0.0,1.0,1.0));
226 gr.addVertex(
vertex2(1.0,0.0,0.0));
227 gr.addVertex(
vertex2(1.0,0.0,1.0));
228 gr.addVertex(
vertex2(1.0,1.0,0.0));
229 gr.addVertex(
vertex2(1.0,1.0,1.0));
231 gr.addEdge(0,6,
vertex2(0.0,0.0,1.0));
232 gr.addEdge(6,4,
vertex2(0.0,0.0,1.0));
233 gr.addEdge(4,0,
vertex2(0.0,0.0,1.0));
235 gr.addEdge(0,2,
vertex2(0.0,0.0,1.0));
236 gr.addEdge(2,6,
vertex2(0.0,0.0,1.0));
237 gr.addEdge(6,0,
vertex2(0.0,0.0,1.0));
239 gr.addEdge(0,3,
vertex2(0.0,0.0,1.0));
240 gr.addEdge(3,2,
vertex2(0.0,0.0,1.0));
241 gr.addEdge(2,0,
vertex2(0.0,0.0,1.0));
243 gr.addEdge(0,1,
vertex2(0.0,0.0,1.0));
244 gr.addEdge(1,3,
vertex2(0.0,0.0,1.0));
245 gr.addEdge(3,0,
vertex2(0.0,0.0,1.0));
247 gr.addEdge(2,7,
vertex2(0.0,0.0,1.0));
248 gr.addEdge(7,6,
vertex2(0.0,0.0,1.0));
249 gr.addEdge(6,2,
vertex2(0.0,0.0,1.0));
251 gr.addEdge(2,3,
vertex2(0.0,0.0,1.0));
252 gr.addEdge(3,7,
vertex2(0.0,0.0,1.0));
253 gr.addEdge(7,2,
vertex2(0.0,0.0,1.0));
255 gr.addEdge(4,6,
vertex2(0.0,0.0,1.0));
256 gr.addEdge(6,7,
vertex2(0.0,0.0,1.0));
257 gr.addEdge(7,4,
vertex2(0.0,0.0,1.0));
259 gr.addEdge(4,7,
vertex2(0.0,0.0,1.0));
260 gr.addEdge(7,5,
vertex2(0.0,0.0,1.0));
261 gr.addEdge(5,4,
vertex2(0.0,0.0,1.0));
263 gr.addEdge(0,4,
vertex2(0.0,0.0,1.0));
264 gr.addEdge(4,5,
vertex2(0.0,0.0,1.0));
265 gr.addEdge(5,0,
vertex2(0.0,0.0,1.0));
267 gr.addEdge(0,5,
vertex2(0.0,0.0,1.0));
268 gr.addEdge(5,1,
vertex2(0.0,0.0,1.0));
269 gr.addEdge(1,0,
vertex2(0.0,0.0,1.0));
271 gr.addEdge(1,5,
vertex2(0.0,0.0,1.0));
272 gr.addEdge(5,7,
vertex2(0.0,0.0,1.0));
273 gr.addEdge(7,1,
vertex2(0.0,0.0,1.0));
275 gr.addEdge(1,7,
vertex2(0.0,0.0,1.0));
276 gr.addEdge(7,3,
vertex2(0.0,0.0,1.0));
277 gr.addEdge(3,1,
vertex2(0.0,0.0,1.0));
282 vtk.write(
"vtk_graph_v4.vtk");
286 bool test = compare(
"vtk_graph_v4.vtk",
"vtk_graph_v4_test.vtk");
287 BOOST_REQUIRE_EQUAL(
true,test);
293 typedef boost::fusion::vector<float[2],size_t,double>
type;
295 typedef typename memory_traits_inte<type>::type memory_int;
296 typedef typename memory_traits_lin<type>::type memory_lin;
304 static const std::string name[];
311 static const unsigned int x = 0;
312 static const unsigned int prp1 = 1;
313 static const unsigned int prp2 = 2;
334 boost::fusion::at_c<vertex::x>(
data)[0] = x;
335 boost::fusion::at_c<vertex::x>(
data)[1] = y;
342 const std::string vertex3::attributes::name[] = {
"x",
"prp1",
"prp2"};
344 BOOST_AUTO_TEST_CASE( vtk_writer_use_graph2D )
350 Graph_CSR<vertex3,edge> gr;
354 gr.addVertex(
vertex3(0.0,0.0));
355 gr.addVertex(
vertex3(0.0,1.0));
356 gr.addVertex(
vertex3(1.0,0.0));
357 gr.addVertex(
vertex3(1.0,1.0));
367 vtk.write(
"vtk_graph_v3.vtk");
371 bool test = compare(
"vtk_graph_v3.vtk",
"vtk_graph_v3_test.vtk");
372 BOOST_REQUIRE_EQUAL(
true,test);
375 BOOST_AUTO_TEST_CASE( vtk_writer_use_graph)
379 std::cout <<
"Graph unit test start" <<
"\n";
383 Graph_CSR<vertex,edge> gr;
387 gr.addVertex(
vertex(0.0,0.0,0.0));
388 gr.addVertex(
vertex(0.0,0.0,1.0));
389 gr.addVertex(
vertex(0.0,1.0,0.0));
390 gr.addVertex(
vertex(0.0,1.0,1.0));
391 gr.addVertex(
vertex(1.0,0.0,0.0));
392 gr.addVertex(
vertex(1.0,0.0,1.0));
393 gr.addVertex(
vertex(1.0,1.0,0.0));
394 gr.addVertex(
vertex(1.0,1.0,1.0));
447 vtk.write(
"vtk_graph.vtk");
451 bool test = compare(
"vtk_graph.vtk",
"vtk_graph_test.vtk");
452 BOOST_REQUIRE_EQUAL(
true,test);
455 BOOST_AUTO_TEST_CASE( vtk_writer_use_vector_box)
458 openfpm::vector<Box<2,float>> vb;
460 vb.add(Box<2,float>({0.2,0.2},{1.0,0.5}));
461 vb.add(Box<2,float>({0.0,0.0},{0.2,0.2}));
462 vb.add(Box<2,float>({0.2,0.0},{0.5,0.2}));
463 vb.add(Box<2,float>({0.5,0.0},{1.0,0.2}));
464 vb.add(Box<2,float>({0.0,0.2},{0.2,0.5}));
465 vb.add(Box<2,float>({0.0,0.5},{1.0,1.0}));
470 vtk_box.write(
"vtk_box.vtk");
473 bool test = compare(
"vtk_box.vtk",
"vtk_box_test.vtk");
474 BOOST_REQUIRE_EQUAL(test,
true);
477 openfpm::vector<Box<3,float>> vb2;
479 vb2.add(Box<3,float>({0.2,0.2,0.0},{1.0,0.5,0.5}));
480 vb2.add(Box<3,float>({0.0,0.0,0.0},{0.2,0.2,0.5}));
481 vb2.add(Box<3,float>({0.2,0.0,0.0},{0.5,0.2,0.5}));
482 vb2.add(Box<3,float>({0.5,0.0,0.0},{1.0,0.2,0.5}));
483 vb2.add(Box<3,float>({0.0,0.2,0.0},{0.2,0.5,0.5}));
484 vb2.add(Box<3,float>({0.0,0.5,0.0},{1.0,1.0,0.5}));
489 vtk_box2.write(
"vtk_box_3D.vtk");
492 test = compare(
"vtk_box_3D.vtk",
"vtk_box_3D_test.vtk");
493 BOOST_REQUIRE_EQUAL(test,
true);
496 openfpm::vector<Box<3,float>> vb3;
497 vb3.add(Box<3,float>({0.2,0.2,0.5},{1.0,0.5,1.0}));
498 vb3.add(Box<3,float>({0.0,0.0,0.5},{0.2,0.2,1.0}));
499 vb3.add(Box<3,float>({0.2,0.0,0.5},{0.5,0.2,1.0}));
500 vb3.add(Box<3,float>({0.5,0.0,0.5},{1.0,0.2,1.0}));
501 vb3.add(Box<3,float>({0.0,0.2,0.5},{0.2,0.5,1.0}));
502 vb3.add(Box<3,float>({0.0,0.5,0.5},{1.0,1.0,1.0}));
508 vtk_box3.write(
"vtk_box_3D_2.vtk");
511 test = compare(
"vtk_box_3D_2.vtk",
"vtk_box_3D_2_test.vtk");
512 BOOST_REQUIRE_EQUAL(test,
true);
520 void fill_grid_some_data(grid_cpu<2,Point_test<float>> & g)
522 typedef Point_test<float> p;
524 auto it = g.getIterator();
528 g.template get<p::x>(it.get()) = it.get().get(0);
529 g.template get<p::y>(it.get()) = it.get().get(1);
530 g.template get<p::z>(it.get()) = 0;
531 g.template get<p::s>(it.get()) = 1.0;
532 g.template get<p::v>(it.get())[0] = g.getGrid().LinId(it.get());
533 g.template get<p::v>(it.get())[1] = g.getGrid().LinId(it.get());
534 g.template get<p::v>(it.get())[2] = g.getGrid().LinId(it.get());
536 g.template get<p::t>(it.get())[0][0] = g.getGrid().LinId(it.get());
537 g.template get<p::t>(it.get())[0][1] = g.getGrid().LinId(it.get());
538 g.template get<p::t>(it.get())[0][2] = g.getGrid().LinId(it.get());
539 g.template get<p::t>(it.get())[1][0] = g.getGrid().LinId(it.get());
540 g.template get<p::t>(it.get())[1][1] = g.getGrid().LinId(it.get());
541 g.template get<p::t>(it.get())[1][2] = g.getGrid().LinId(it.get());
542 g.template get<p::t>(it.get())[2][0] = g.getGrid().LinId(it.get());
543 g.template get<p::t>(it.get())[2][1] = g.getGrid().LinId(it.get());
544 g.template get<p::t>(it.get())[2][2] = g.getGrid().LinId(it.get());
555 void fill_grid_some_data_prp(grid_cpu<2,Point_test_prp<float>> & g)
557 typedef Point_test<float> p;
559 auto it = g.getIterator();
563 g.template get<p::x>(it.get()) = it.get().get(0);
564 g.template get<p::y>(it.get()) = it.get().get(1);
565 g.template get<p::z>(it.get()) = 0;
566 g.template get<p::s>(it.get()) = 1.0;
567 g.template get<p::v>(it.get())[0] = g.getGrid().LinId(it.get());
568 g.template get<p::v>(it.get())[1] = g.getGrid().LinId(it.get());
569 g.template get<p::v>(it.get())[2] = g.getGrid().LinId(it.get());
571 g.template get<p::t>(it.get())[0][0] = g.getGrid().LinId(it.get());
572 g.template get<p::t>(it.get())[0][1] = g.getGrid().LinId(it.get());
573 g.template get<p::t>(it.get())[0][2] = g.getGrid().LinId(it.get());
574 g.template get<p::t>(it.get())[1][0] = g.getGrid().LinId(it.get());
575 g.template get<p::t>(it.get())[1][1] = g.getGrid().LinId(it.get());
576 g.template get<p::t>(it.get())[1][2] = g.getGrid().LinId(it.get());
577 g.template get<p::t>(it.get())[2][0] = g.getGrid().LinId(it.get());
578 g.template get<p::t>(it.get())[2][1] = g.getGrid().LinId(it.get());
579 g.template get<p::t>(it.get())[2][2] = g.getGrid().LinId(it.get());
589 void fill_grid_some_data_scal(grid_cpu<2,Point_test_scal<float>> & g)
591 typedef Point_test<float> p;
593 auto it = g.getIterator();
597 g.template get<p::x>(it.get()) = it.get().get(0);
598 g.template get<p::y>(it.get()) = it.get().get(1);
599 g.template get<p::z>(it.get()) = 0;
600 g.template get<p::s>(it.get()) = 1.0;
606 BOOST_AUTO_TEST_CASE( vtk_writer_use_grids)
610 Point<2,float> offset1({0.0,0.0});
611 Point<2,float> spacing1({0.1,0.2});
612 Box<2,size_t> d1({1,2},{14,15});
615 Point<2,float> offset2({5.0,7.0});
616 Point<2,float> spacing2({0.2,0.1});
617 Box<2,size_t> d2({2,1},{13,15});
620 Point<2,float> offset3({0.0,7.0});
621 Point<2,float> spacing3({0.05,0.07});
622 Box<2,size_t> d3({3,2},{11,10});
625 Point<2,float> offset4({5.0,0.0});
626 Point<2,float> spacing4({0.1,0.1});
627 Box<2,size_t> d4({1,1},{7,7});
629 size_t sz[] = {16,16};
630 grid_cpu<2,Point_test<float>> g1(sz);
632 fill_grid_some_data(g1);
633 grid_cpu<2,Point_test<float>> g2(sz);
635 fill_grid_some_data(g2);
636 grid_cpu<2,Point_test<float>> g3(sz);
638 fill_grid_some_data(g3);
639 grid_cpu<2,Point_test<float>> g4(sz);
641 fill_grid_some_data(g4);
645 vtk_g.add(g1,offset1,spacing1,d1);
646 vtk_g.add(g2,offset2,spacing2,d2);
647 vtk_g.add(g3,offset3,spacing3,d3);
648 vtk_g.add(g4,offset4,spacing4,d4);
650 vtk_g.write(
"vtk_grids.vtk");
653 bool test = compare(
"vtk_grids.vtk",
"vtk_grids_test.vtk");
654 BOOST_REQUIRE_EQUAL(test,
true);
659 Point<2,float> offset1({0.0,0.0});
660 Point<2,float> spacing1({0.1,0.1});
661 Box<2,size_t> d1({1,2},{14,15});
664 Point<2,float> offset2({0.0,0.0});
665 Point<2,float> spacing2({0.1,0.1});
666 Box<2,size_t> d2({2,1},{13,15});
669 Point<2,float> offset3({5.0,5.0});
670 Point<2,float> spacing3({0.1,0.1});
671 Box<2,size_t> d3({3,2},{11,10});
674 Point<2,float> offset4({5.0,5.0});
675 Point<2,float> spacing4({0.1,0.1});
676 Box<2,size_t> d4({1,1},{7,7});
678 size_t sz[] = {16,16};
679 grid_cpu<2,Point_test<float>> g1(sz);
681 fill_grid_some_data(g1);
682 grid_cpu<2,Point_test<float>> g2(sz);
684 fill_grid_some_data(g2);
685 grid_cpu<2,Point_test<float>> g3(sz);
687 fill_grid_some_data(g3);
688 grid_cpu<2,Point_test<float>> g4(sz);
690 fill_grid_some_data(g4);
700 vtk_g.add(0,g1,offset1,spacing1,d1,cmb);
701 vtk_g.add(0,g2,offset2,spacing2,d2,cmb);
702 vtk_g.add(1,g3,offset3,spacing3,d3,cmb);
703 vtk_g.add(1,g4,offset4,spacing4,d4,cmb2);
705 vtk_g.write(
"vtk_grids_st.vtk");
708 bool test = compare(
"vtk_grids_st.vtk",
"vtk_grids_st_test.vtk");
709 BOOST_REQUIRE_EQUAL(test,
true);
714 Point<2,float> offset1({0.0,0.0});
715 Point<2,float> spacing1({0.1,0.1});
716 Box<2,size_t> d1({1,2},{14,15});
719 Point<2,float> offset2({0.0,0.0});
720 Point<2,float> spacing2({0.1,0.1});
721 Box<2,size_t> d2({2,1},{13,15});
724 Point<2,float> offset3({5.0,5.0});
725 Point<2,float> spacing3({0.1,0.1});
726 Box<2,size_t> d3({3,2},{11,10});
729 Point<2,float> offset4({5.0,5.0});
730 Point<2,float> spacing4({0.1,0.1});
731 Box<2,size_t> d4({1,1},{7,7});
733 size_t sz[] = {16,16};
734 grid_cpu<2,Point_test_scal<float>> g1(sz);
736 fill_grid_some_data_scal(g1);
737 grid_cpu<2,Point_test_scal<float>> g2(sz);
739 fill_grid_some_data_scal(g2);
740 grid_cpu<2,Point_test_scal<float>> g3(sz);
742 fill_grid_some_data_scal(g3);
743 grid_cpu<2,Point_test_scal<float>> g4(sz);
745 fill_grid_some_data_scal(g4);
749 vtk_g.add(g1,offset1,spacing1,d1);
750 vtk_g.add(g2,offset2,spacing2,d2);
751 vtk_g.add(g3,offset3,spacing3,d3);
752 vtk_g.add(g4,offset4,spacing4,d4);
754 vtk_g.write(
"vtk_grids_prp.vtk");
757 bool test = compare(
"vtk_grids_prp.vtk",
"vtk_grids_prp_test.vtk");
758 BOOST_REQUIRE_EQUAL(test,
true);
762 BOOST_AUTO_TEST_CASE( vtk_writer_use_point_set )
766 openfpm::vector<Point<3,double>> v1ps;
767 openfpm::vector<Point<3,double>> v2ps;
768 openfpm::vector<Point<3,double>> v3ps;
769 openfpm::vector<aggregate<float,float[3]>> v1pp;
770 openfpm::vector<aggregate<float,float[3]>> v2pp;
771 openfpm::vector<aggregate<float,float[3]>> v3pp;
786 for (
size_t i = 0 ; i < v1ps.size(); i++)
788 v1ps.template get<0>(i)[0] = rng.GetUniform();
789 v1ps.template get<0>(i)[1] = rng.GetUniform();
790 v1ps.template get<0>(i)[2] = rng.GetUniform();
792 v2ps.template get<0>(i)[0] = rng.GetUniform()*0.5;
793 v2ps.template get<0>(i)[1] = rng.GetUniform()*0.5;
794 v2ps.template get<0>(i)[2] = rng.GetUniform()*0.5;
796 v3ps.template get<0>(i)[0] = rng.GetUniform()*0.3;
797 v3ps.template get<0>(i)[1] = rng.GetUniform()*0.3;
798 v3ps.template get<0>(i)[2] = rng.GetUniform()*0.3;
800 v1pp.template get<0>(i) = rng.GetUniform();
801 v1pp.template get<1>(i)[0] = rng.GetUniform();
802 v1pp.template get<1>(i)[1] = rng.GetUniform();
803 v1pp.template get<1>(i)[2] = rng.GetUniform();
805 v2pp.template get<0>(i) = rng.GetUniform();
806 v2pp.template get<1>(i)[0] = rng.GetUniform();
807 v2pp.template get<1>(i)[1] = rng.GetUniform();
808 v2pp.template get<1>(i)[2] = rng.GetUniform();
810 v3pp.template get<0>(i) = rng.GetUniform();
811 v3pp.template get<1>(i)[0] = rng.GetUniform();
812 v3pp.template get<1>(i)[1] = rng.GetUniform();
813 v3pp.template get<1>(i)[2] = rng.GetUniform();
818 vtk_v.add(v1ps,v1pp,75);
819 vtk_v.add(v2ps,v2pp,88);
820 vtk_v.add(v3ps,v3pp,90);
822 vtk_v.write(
"vtk_points.vtk");
825 bool test = compare(
"vtk_points.vtk",
"vtk_points_test.vtk");
826 BOOST_REQUIRE_EQUAL(test,
true);
830 BOOST_AUTO_TEST_SUITE_END()
static const unsigned int x
computation property id in boost::fusion::vector
float s_type
type of the positional field
boost::fusion::vector< float[2], size_t, double > type
The node contain 3 unsigned long integer for communication computation memory and id...
vertex3(float x, float y)
Initialize the VTKVertex.
boost::fusion::vector< float[3], size_t, double > type
The node contain 3 unsigned long integer for communication computation memory and id...
boost::fusion::vector< float, float, float, float, size_t, double, unsigned char, long int > type
The node contain 3 unsigned long integer for communication computation memory and id...
float s_type
type of the positional field
static const unsigned int x
computation property id in boost::fusion::vector
vertex2(float x, float y, float z)
Initialize the VTKVertex.
static const unsigned int max_prop
total number of properties boost::fusion::vector
static const unsigned int max_prop
total number of properties boost::fusion::vector
vertex(float x, float y, float z)
Initialize the VTKVertex.
float s_type
type of the positional field