dijkstra.cpp 1.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. #include <test_common.h>
  2. #include <igl/dijkstra.h>
  3. #include <igl/adjacency_list.h>
  4. #include <iostream>
  5. TEST_CASE("dijkstra: cube", "[igl]")
  6. {
  7. Eigen::MatrixXd V;
  8. Eigen::MatrixXi F;
  9. //This is a cube of dimensions 1.0x1.0x1.0
  10. igl::read_triangle_mesh(test_common::data_path("cube.off"), V, F);
  11. std::vector<std::vector<int>> VV;
  12. igl::adjacency_list(F, VV);
  13. Eigen::VectorXd min_distance;
  14. Eigen::VectorXi previous;
  15. igl::dijkstra(V, VV, 0, {7}, min_distance, previous);
  16. REQUIRE(min_distance(0) == 0);
  17. REQUIRE(min_distance(7) == Approx(sqrt(2)).margin(1e-10));
  18. }
  19. TEST_CASE("dijkstra: discrete distances", "[igl]")
  20. {
  21. Eigen::MatrixXd V;
  22. Eigen::MatrixXi F;
  23. igl::read_triangle_mesh(test_common::data_path("cube.off"), V, F);
  24. std::vector<std::vector<int>> VV;
  25. igl::adjacency_list(F, VV);
  26. Eigen::VectorXi min_distance, previous;
  27. int out = igl::dijkstra(0, {3}, VV, min_distance, previous);
  28. REQUIRE(out != -1);
  29. REQUIRE(out == 3);
  30. REQUIRE(min_distance[3] == 1);
  31. REQUIRE(min_distance[0] == 0);
  32. }