TEST(Permutation, IntegerSort)
{
  std::vector<int> original;
  original.push_back(8);
  original.push_back(1);
  original.push_back(3);
  original.push_back(9);
  std::vector<int> sorted(original);
  std::sort(sorted.begin(),sorted.end());
  std::vector<unsigned> order = permutation(original,sorted);

  ASSERT_EQ(static_cast<unsigned>(4),order.size());
  EXPECT_EQ(static_cast<unsigned>(2),order[0]);
  EXPECT_EQ(static_cast<unsigned>(0),order[1]);
  EXPECT_EQ(static_cast<unsigned>(1),order[2]);
  EXPECT_EQ(static_cast<unsigned>(3),order[3]);

  std::vector<int> another = permute(original,order);
  EXPECT_TRUE(sorted == another);
}