doublearea.cpp 909 B

123456789101112131415161718192021222324252627282930313233343536373839
  1. #include <test_common.h>
  2. #include <igl/doublearea.h>
  3. class doublearea : public ::testing::TestWithParam<std::string> {};
  4. TEST_P(doublearea, VF_vs_ABC )
  5. {
  6. Eigen::MatrixXd V;
  7. Eigen::MatrixXi F;
  8. test_common::load_mesh(GetParam(), V, F);
  9. // Check that computing double area with (V,F) is the same as computing
  10. // double area with (V1,V2,V2)
  11. Eigen::VectorXd A1,A2;
  12. igl::doublearea(V,F,A1);
  13. Eigen::MatrixXd A(F.rows(),3);
  14. Eigen::MatrixXd B(F.rows(),3);
  15. Eigen::MatrixXd C(F.rows(),3);
  16. for(int f = 0;f<F.rows();f++)
  17. {
  18. A.row(f) = V.row(F(f,0));
  19. B.row(f) = V.row(F(f,1));
  20. C.row(f) = V.row(F(f,2));
  21. }
  22. igl::doublearea(A,B,C,A2);
  23. ASSERT_EQ(A1.size(),A2.size());
  24. for(int a = 0;a<A1.size();a++)
  25. {
  26. ASSERT_NEAR(A1(a),A2(a),1e-15);
  27. }
  28. }
  29. INSTANTIATE_TEST_CASE_P
  30. (
  31. all_meshes,
  32. doublearea,
  33. ::testing::ValuesIn(test_common::all_meshes()),
  34. test_common::string_test_name
  35. );