xref: /llvm-project/clang-tools-extra/test/clang-tidy/checkers/modernize/replace-random-shuffle.cpp (revision 89a1d03e2b379e325daa5249411e414bbd995b5e)
1*89a1d03eSRichard // RUN: %check_clang_tidy %s modernize-replace-random-shuffle %t
2*89a1d03eSRichard 
3*89a1d03eSRichard //CHECK-FIXES: #include <random>
4*89a1d03eSRichard 
5*89a1d03eSRichard namespace std {
6*89a1d03eSRichard template <typename T> struct vec_iterator {
7*89a1d03eSRichard   T *ptr;
8*89a1d03eSRichard   vec_iterator operator++(int);
9*89a1d03eSRichard };
10*89a1d03eSRichard 
11*89a1d03eSRichard template <typename T> struct vector {
12*89a1d03eSRichard   typedef vec_iterator<T> iterator;
13*89a1d03eSRichard 
14*89a1d03eSRichard   iterator begin();
15*89a1d03eSRichard   iterator end();
16*89a1d03eSRichard };
17*89a1d03eSRichard 
18*89a1d03eSRichard template <typename FwIt>
19*89a1d03eSRichard void random_shuffle(FwIt begin, FwIt end);
20*89a1d03eSRichard 
21*89a1d03eSRichard template <typename FwIt, typename randomFunc>
22*89a1d03eSRichard void random_shuffle(FwIt begin, FwIt end, randomFunc& randomfunc);
23*89a1d03eSRichard 
24*89a1d03eSRichard template <typename FwIt>
25*89a1d03eSRichard void shuffle(FwIt begin, FwIt end);
26*89a1d03eSRichard } // namespace std
27*89a1d03eSRichard 
28*89a1d03eSRichard // Random Func
myrandom(int i)29*89a1d03eSRichard int myrandom (int i) { return i;}
30*89a1d03eSRichard 
31*89a1d03eSRichard using namespace std;
32*89a1d03eSRichard 
main()33*89a1d03eSRichard int main() {
34*89a1d03eSRichard   std::vector<int> vec;
35*89a1d03eSRichard 
36*89a1d03eSRichard   std::random_shuffle(vec.begin(), vec.end());
37*89a1d03eSRichard   // CHECK-MESSAGES: [[@LINE-1]]:3: warning: 'std::random_shuffle' has been removed in C++17; use 'std::shuffle' instead
38*89a1d03eSRichard   // CHECK-FIXES: std::shuffle(vec.begin(), vec.end(), std::mt19937(std::random_device()()));
39*89a1d03eSRichard 
40*89a1d03eSRichard   std::shuffle(vec.begin(), vec.end());
41*89a1d03eSRichard 
42*89a1d03eSRichard   random_shuffle(vec.begin(), vec.end());
43*89a1d03eSRichard   // CHECK-MESSAGES: [[@LINE-1]]:3: warning: 'std::random_shuffle' has been removed in C++17; use 'std::shuffle' instead
44*89a1d03eSRichard   // CHECK-FIXES: shuffle(vec.begin(), vec.end(), std::mt19937(std::random_device()()));
45*89a1d03eSRichard 
46*89a1d03eSRichard   std::random_shuffle(vec.begin(), vec.end(), myrandom);
47*89a1d03eSRichard   // CHECK-MESSAGES: [[@LINE-1]]:3: warning: 'std::random_shuffle' has been removed in C++17; use 'std::shuffle' and an alternative random mechanism instead
48*89a1d03eSRichard   // CHECK-FIXES: std::shuffle(vec.begin(), vec.end(), std::mt19937(std::random_device()()));
49*89a1d03eSRichard 
50*89a1d03eSRichard   random_shuffle(vec.begin(), vec.end(), myrandom);
51*89a1d03eSRichard   // CHECK-MESSAGES: [[@LINE-1]]:3: warning: 'std::random_shuffle' has been removed in C++17; use 'std::shuffle' and an alternative random mechanism instead
52*89a1d03eSRichard   // CHECK-FIXES: shuffle(vec.begin(), vec.end(), std::mt19937(std::random_device()()));
53*89a1d03eSRichard 
54*89a1d03eSRichard   shuffle(vec.begin(), vec.end());
55*89a1d03eSRichard 
56*89a1d03eSRichard   return 0;
57*89a1d03eSRichard }
58