123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- // g++ -o main main.cpp -I. -I/usr/local/include/eigen3
- #include <Eigen/Core>
- #include <iostream>
- using namespace std;
- #include <igl/sort.h>
- using namespace igl;
- template <typename T>
- void matlab_print(const string name, const T & X)
- {
- cout<<name<<"=["<<endl<<X<<endl<<"];"<<endl;
- }
- int main(int argc, char * argv[])
- {
- Eigen::MatrixXd X(2,3);
- X << 3,5,2,1,3,8;
- matlab_print("X",X);
- // sort each row independently
- int dim = 2;
- // sort ascending order
- int ascending = true;
- // Sorted output matrix
- Eigen::MatrixXd Y;
- // sorted indices for sort dimension
- Eigen::MatrixXi IX;
- sort(X,dim,ascending,Y,IX);
- matlab_print<Eigen::MatrixXd>("Y",Y);
- matlab_print<Eigen::MatrixXi>("IX",IX);
- // Verify that IX really does sort X into Y
- int num_outer = (dim == 1 ? X.cols() : X.rows() );
- // get number of rows (or columns)
- int num_inner = (dim == 1 ? X.rows() : X.cols() );
- bool verified = true;
- for(int i = 0;i<num_outer;i++)
- {
- for(int j = 0;j<num_inner;j++)
- {
- if(dim == 1)
- {
- if( Y(j,i) != X(IX(j,i),i))
- {
- printf("Y(%d,%d) = %g != %g = X(%d,%d) = X(IX(%d,%d),%d)\n",
- j,i,Y(j,i),X(IX(j,i),i),IX(j,i),i,j,i,i);
- verified = false;
- }
- }else
- {
- if( Y(i,j) != X(i,IX(i,j)))
- {
- printf("Y(%d,%d) = %g != %g = X(%d,%d) = X(IX(%d,%d),%d)\n",
- i,j,Y(i,j),X(i,IX(i,j)),IX(i,j),i,i,j,i);
- verified = false;
- }
- }
- }
- }
- if(verified)
- {
- printf("Sorting succeeded\n");
- }else
- {
- printf("Sorting failed\n");
- }
- return (verified?0:1);
- }
|