sort.cpp 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  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*/>
  8. NMDimAscending;
  9. inline std::string NMDimAscending_test_name(
  10. const ::testing::TestParamInfo<NMDimAscending>& info)
  11. {
  12. return STR(
  13. std::get<0>(info.param)<<"x"<<
  14. std::get<1>(info.param)<<"_"<<
  15. "dim_"<<std::get<2>(info.param)<<"_"<<
  16. "ascending_"<<(std::get<3>(info.param)?"true":"false"));
  17. };
  18. }
  19. class SortTest : public ::testing::TestWithParam<sort::NMDimAscending> {};
  20. TEST_P(SortTest,random)
  21. {
  22. const int n = std::get<0>(GetParam());
  23. const int m = std::get<1>(GetParam());
  24. const int dim = std::get<2>(GetParam());
  25. const bool ascending = std::get<3>(GetParam());
  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. ASSERT_EQ(X.rows(),Y.rows());
  32. ASSERT_EQ(X.cols(),Y.cols());
  33. ASSERT_EQ(X.rows(),IX.rows());
  34. ASSERT_EQ(X.cols(),IX.cols());
  35. for(int i = 0;i<n;i++)
  36. {
  37. for(int j = 0;j<m;j++)
  38. {
  39. ASSERT_EQ(Y(i,j),X(dim==1?IX(i,j):i,dim==2?IX(i,j):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. ASSERT_LE(Y(i-(dim==1?1:0),j-(dim==2?1:0)),Y(i,j));
  49. }else
  50. {
  51. ASSERT_GE(Y(i-(dim==1?1:0),j-(dim==2?1:0)),Y(i,j));
  52. }
  53. }
  54. }
  55. }
  56. INSTANTIATE_TEST_CASE_P
  57. (
  58. suite,
  59. SortTest,
  60. ::testing::ValuesIn<std::vector<sort::NMDimAscending> >(
  61. std::vector<sort::NMDimAscending> {
  62. sort::NMDimAscending{100,3,1,true},
  63. sort::NMDimAscending{100,3,2,true},
  64. sort::NMDimAscending{100,3,1,false},
  65. sort::NMDimAscending{100,3,2,false},
  66. sort::NMDimAscending{3,100,1,true},
  67. sort::NMDimAscending{3,100,2,true},
  68. sort::NMDimAscending{3,100,1,false},
  69. sort::NMDimAscending{3,100,2,false},
  70. sort::NMDimAscending{100,2,1,true},
  71. sort::NMDimAscending{100,2,2,true},
  72. sort::NMDimAscending{100,2,1,false},
  73. sort::NMDimAscending{100,2,2,false},
  74. sort::NMDimAscending{2,100,1,true},
  75. sort::NMDimAscending{2,100,2,true},
  76. sort::NMDimAscending{2,100,1,false},
  77. sort::NMDimAscending{2,100,2,false},
  78. sort::NMDimAscending{100,4,1,true},
  79. sort::NMDimAscending{100,4,2,true},
  80. sort::NMDimAscending{100,4,1,false},
  81. sort::NMDimAscending{100,4,2,false},
  82. sort::NMDimAscending{4,100,1,true},
  83. sort::NMDimAscending{4,100,2,true},
  84. sort::NMDimAscending{4,100,1,false},
  85. sort::NMDimAscending{4,100,2,false},
  86. }),
  87. sort::NMDimAscending_test_name
  88. );