// RUN: %check_clang_tidy %s modernize-replace-random-shuffle %t -- -- -std=c++11

//CHECK-FIXES: #include <random>

namespace std {
template <typename T> struct vec_iterator {
  T *ptr;
  vec_iterator operator++(int);
};

template <typename T> struct vector {
  typedef vec_iterator<T> iterator;

  iterator begin();
  iterator end();
};

template <typename FwIt>
void random_shuffle(FwIt begin, FwIt end);

template <typename FwIt, typename randomFunc>
void random_shuffle(FwIt begin, FwIt end, randomFunc& randomfunc);

template <typename FwIt>
void shuffle(FwIt begin, FwIt end);
} // namespace std

// Random Func
int myrandom (int i) { return i;}

using namespace std;

int main() {
  std::vector<int> vec;

  std::random_shuffle(vec.begin(), vec.end());
  // CHECK-MESSAGES: [[@LINE-1]]:3: warning: 'std::random_shuffle' has been removed in C++17; use 'std::shuffle' instead
  // CHECK-FIXES: std::shuffle(vec.begin(), vec.end(), std::mt19937(std::random_device()()));

  std::shuffle(vec.begin(), vec.end());

  random_shuffle(vec.begin(), vec.end());
  // CHECK-MESSAGES: [[@LINE-1]]:3: warning: 'std::random_shuffle' has been removed in C++17; use 'std::shuffle' instead
  // CHECK-FIXES: shuffle(vec.begin(), vec.end(), std::mt19937(std::random_device()()));
  
  std::random_shuffle(vec.begin(), vec.end(), myrandom);
  // CHECK-MESSAGES: [[@LINE-1]]:3: warning: 'std::random_shuffle' has been removed in C++17; use 'std::shuffle' and an alternative random mechanism instead
  // CHECK-FIXES: std::shuffle(vec.begin(), vec.end(), std::mt19937(std::random_device()()));

  random_shuffle(vec.begin(), vec.end(), myrandom);
  // CHECK-MESSAGES: [[@LINE-1]]:3: warning: 'std::random_shuffle' has been removed in C++17; use 'std::shuffle' and an alternative random mechanism instead
  // CHECK-FIXES: shuffle(vec.begin(), vec.end(), std::mt19937(std::random_device()()));

  shuffle(vec.begin(), vec.end());

  return 0;
}
