You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
122 lines
3.6 KiB
122 lines
3.6 KiB
#include <test_common.h>
|
|
#include <catch2/catch.hpp>
|
|
|
|
#include <igl/readMSH.h>
|
|
#include <igl/writeMSH.h>
|
|
|
|
#include <set>
|
|
|
|
TEST_CASE("writeMSH","[igl]")
|
|
{
|
|
Eigen::MatrixXd X;
|
|
Eigen::MatrixXi Tri;
|
|
Eigen::MatrixXi Tet;
|
|
Eigen::VectorXi TriTag;
|
|
Eigen::VectorXi TetTag;
|
|
|
|
std::vector<std::string> XFields;
|
|
std::vector<std::string> EFields;
|
|
|
|
std::vector<Eigen::MatrixXd> XF;
|
|
std::vector<Eigen::MatrixXd> TriF;
|
|
std::vector<Eigen::MatrixXd> TetF;
|
|
|
|
// load source data
|
|
REQUIRE(igl::readMSH(test_common::data_path("sphere_lowres_TMS_1-0001_Magstim_70mm_Fig8_nii_scalar.msh"),
|
|
X, Tri, Tet, TriTag, TetTag, XFields, XF, EFields, TriF, TetF));
|
|
|
|
// save check data
|
|
REQUIRE(igl::writeMSH("test_binary_sphere_2.msh",
|
|
X, Tri, Tet, TriTag, TetTag, XFields, XF, EFields, TriF, TetF));
|
|
|
|
// load again
|
|
Eigen::MatrixXd _X;
|
|
Eigen::MatrixXi _Tri;
|
|
Eigen::MatrixXi _Tet;
|
|
Eigen::VectorXi _TriTag;
|
|
Eigen::VectorXi _TetTag;
|
|
|
|
std::vector<std::string> _XFields;
|
|
std::vector<std::string> _EFields;
|
|
|
|
std::vector<Eigen::MatrixXd> _XF;
|
|
std::vector<Eigen::MatrixXd> _TriF;
|
|
std::vector<Eigen::MatrixXd> _TetF;
|
|
|
|
REQUIRE(igl::readMSH("test_binary_sphere_2.msh",
|
|
_X, _Tri, _Tet, _TriTag, _TetTag, _XFields, _XF, _EFields, _TriF, _TetF));
|
|
|
|
REQUIRE(_X.size() == X.size());
|
|
REQUIRE(_Tri.size() == Tri.size());
|
|
REQUIRE(_Tet.size() == Tet.size());
|
|
REQUIRE(_TriTag.size() == TriTag.size());
|
|
REQUIRE(_TetTag.size() == TetTag.size());
|
|
REQUIRE(_XFields.size() == XFields.size());
|
|
REQUIRE(_XF.size() == XF.size());
|
|
REQUIRE(_EFields.size() == EFields.size());
|
|
REQUIRE(_TriF.size() == TriF.size());
|
|
REQUIRE(_TetF.size() == TetF.size());
|
|
|
|
REQUIRE(_X.cols() == 3);
|
|
REQUIRE(_X.rows() == (398+4506));
|
|
|
|
REQUIRE(_Tri.cols() == 3);
|
|
REQUIRE(_Tri.rows() == 8988);
|
|
REQUIRE(_TriTag.rows() == 8988);
|
|
|
|
REQUIRE(_Tet.cols() == 4);
|
|
REQUIRE(_Tet.rows() == 25937);
|
|
REQUIRE(_TetTag.rows() == 25937);
|
|
|
|
//make sure field sizes are correct
|
|
REQUIRE(_XF.size()==0);
|
|
REQUIRE(_TriF.size()==1);
|
|
REQUIRE(_TetF.size()==1);
|
|
|
|
// normE , scalar field
|
|
REQUIRE(_TriF[0].cols()==1);
|
|
REQUIRE(_TriF[0].rows()==8988);
|
|
|
|
REQUIRE(_TetF[0].cols()==1);
|
|
REQUIRE(_TetF[0].rows()==25937);
|
|
|
|
// check the contents too
|
|
for(size_t i=0;i<X.rows();++i)
|
|
for(size_t j=0;j<X.cols();++j)
|
|
REQUIRE(_X(i,j) == X(i,j));
|
|
|
|
for(size_t i=0;i<Tri.rows();++i)
|
|
for(size_t j=0;j<Tri.cols();++j)
|
|
REQUIRE(_Tri(i,j) == Tri(i,j));
|
|
|
|
for(size_t i=0;i<Tet.rows();++i)
|
|
for(size_t j=0;j<Tet.cols();++j)
|
|
REQUIRE(_Tet(i,j) == Tet(i,j));
|
|
|
|
for(size_t i=0;i<XFields.size();++i)
|
|
{
|
|
REQUIRE(XFields[i]==_XFields[i]);
|
|
REQUIRE(XF[i].rows()==_XF[i].rows());
|
|
REQUIRE(XF[i].cols()==_XF[i].cols());
|
|
for(size_t j=0;j<XF[i].rows();++j)
|
|
for(size_t k=0;k<XF[i].cols();++k)
|
|
REQUIRE(XF[i](j,k)==_XF[i](j,k));
|
|
}
|
|
|
|
for(size_t i=0;i<EFields.size();++i)
|
|
{
|
|
REQUIRE(EFields[i]==_EFields[i]);
|
|
REQUIRE(TriF[i].rows()==_TriF[i].rows());
|
|
REQUIRE(TriF[i].cols()==_TriF[i].cols());
|
|
|
|
for(size_t j=0;j<TriF[i].rows();++j)
|
|
for(size_t k=0;k<TriF[i].cols();++k)
|
|
REQUIRE(TriF[i](j,k)==_TriF[i](j,k));
|
|
|
|
REQUIRE(TetF[i].rows()==_TetF[i].rows());
|
|
REQUIRE(TetF[i].cols()==_TetF[i].cols());
|
|
for(size_t j=0;j<TetF[i].rows();++j)
|
|
for(size_t k=0;k<TetF[i].cols();++k)
|
|
REQUIRE(TetF[i](j,k)==_TetF[i](j,k));
|
|
}
|
|
}
|
|
|