sort.cpp 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. #include <test_common.h>
  2. #include <igl/sort.h>
  3. #include <igl/STR.h>
  4. #include <tuple>
  5. namespace sort
  6. {
  7. typedef std::tuple<int/*n*/,int/*m*/,int/*dim*/,bool/*ascending*/> NMDimAscending;
  8. // inline std::string NMDimAscending_test_name(
  9. // const ::testing::TestParamInfo<NMDimAscending>& info)
  10. // {
  11. // return STR(
  12. // std::get<0>(info.param)<<"x"<<
  13. // std::get<1>(info.param)<<"_"<<
  14. // "dim_"<<std::get<2>(info.param)<<"_"<<
  15. // "ascending_"<<(std::get<3>(info.param)?"true":"false"));
  16. // };
  17. }
  18. TEST_CASE("SortTest: random", "[igl]")
  19. {
  20. const auto test_case = [](const sort::NMDimAscending &param)
  21. {
  22. const int n = std::get<0>(param);
  23. const int m = std::get<1>(param);
  24. const int dim = std::get<2>(param);
  25. const bool ascending = std::get<3>(param);
  26. Eigen::MatrixXd X = Eigen::MatrixXd::Random(n,m);
  27. // sort ascending
  28. Eigen::MatrixXd Y;
  29. Eigen::MatrixXi IX;
  30. igl::sort(X,dim,ascending,Y,IX);
  31. REQUIRE (Y.rows() == X.rows());
  32. REQUIRE (Y.cols() == X.cols());
  33. REQUIRE (IX.rows() == X.rows());
  34. REQUIRE (IX.cols() == X.cols());
  35. for(int i = 0;i<n;i++)
  36. {
  37. for(int j = 0;j<m;j++)
  38. {
  39. REQUIRE (X(dim==1?IX(i,j):i,dim==2?IX(i,j):j) == Y(i,j));
  40. }
  41. }
  42. for(int i = (dim==1?1:0);i<n;i++)
  43. {
  44. for(int j = (dim==2?1:0);j<m;j++)
  45. {
  46. if(ascending)
  47. {
  48. REQUIRE (Y(i,j) >= Y(i-(dim==1?1:0),j-(dim==2?1:0)));
  49. }else
  50. {
  51. REQUIRE (Y(i,j) <= Y(i-(dim==1?1:0),j-(dim==2?1:0)));
  52. }
  53. }
  54. }
  55. };
  56. std::vector<sort::NMDimAscending> params = {
  57. sort::NMDimAscending{100,3,1,true},
  58. sort::NMDimAscending{100,3,2,true},
  59. sort::NMDimAscending{100,3,1,false},
  60. sort::NMDimAscending{100,3,2,false},
  61. sort::NMDimAscending{3,100,1,true},
  62. sort::NMDimAscending{3,100,2,true},
  63. sort::NMDimAscending{3,100,1,false},
  64. sort::NMDimAscending{3,100,2,false},
  65. sort::NMDimAscending{100,2,1,true},
  66. sort::NMDimAscending{100,2,2,true},
  67. sort::NMDimAscending{100,2,1,false},
  68. sort::NMDimAscending{100,2,2,false},
  69. sort::NMDimAscending{2,100,1,true},
  70. sort::NMDimAscending{2,100,2,true},
  71. sort::NMDimAscending{2,100,1,false},
  72. sort::NMDimAscending{2,100,2,false},
  73. sort::NMDimAscending{100,4,1,true},
  74. sort::NMDimAscending{100,4,2,true},
  75. sort::NMDimAscending{100,4,1,false},
  76. sort::NMDimAscending{100,4,2,false},
  77. sort::NMDimAscending{4,100,1,true},
  78. sort::NMDimAscending{4,100,2,true},
  79. sort::NMDimAscending{4,100,1,false},
  80. sort::NMDimAscending{4,100,2,false},
  81. };
  82. test_common::run_test_cases(params, test_case);
  83. }