]> git.ipfire.org Git - thirdparty/gcc.git/blame - libstdc++-v3/testsuite/25_algorithms/random_shuffle/1.cc
Update copyright years.
[thirdparty/gcc.git] / libstdc++-v3 / testsuite / 25_algorithms / random_shuffle / 1.cc
CommitLineData
83ffe9cd 1// Copyright (C) 2001-2023 Free Software Foundation, Inc.
361eefe7
JS
2//
3// This file is part of the GNU ISO C++ Library. This library is free
4// software; you can redistribute it and/or modify it under the
5// terms of the GNU General Public License as published by the
748086b7 6// Free Software Foundation; either version 3, or (at your option)
361eefe7
JS
7// any later version.
8
9// This library is distributed in the hope that it will be useful,
10// but WITHOUT ANY WARRANTY; without even the implied warranty of
11// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12// GNU General Public License for more details.
13
14// You should have received a copy of the GNU General Public License along
748086b7
JJ
15// with this library; see the file COPYING3. If not see
16// <http://www.gnu.org/licenses/>.
361eefe7 17
7f2f4b87 18// { dg-add-options using-deprecated }
7cc9022f 19// { dg-require-effective-target hosted }
7f2f4b87 20
361eefe7
JS
21// 25.2.11 random_shuffle()
22
23#include <algorithm>
24#include <testsuite_hooks.h>
25
361eefe7
JS
26const int N = 200000;
27int A[N], s1[N];
28
29#if _GLIBCXX_PARALLEL
30#define TAG , __gnu_parallel::sequential_tag()
31#else
32#define TAG
33#endif
34
35void fill_ascending()
36{
37 for (int i = 0; i < N; ++i)
38 A[i] = i;
39}
40
41void
42test01()
43{
44 fill_ascending();
45#if _GLIBCXX_PARALLEL
46 for (int num_threads = 1; num_threads <= 2; ++num_threads)
47 {
48 omp_set_num_threads(num_threads);
49#endif
50 std::copy(A, A + N, s1);
51 VERIFY(std::equal(s1, s1 + N, A TAG));
52
53 std::random_shuffle(s1, s1 + N);
54 // the chance that random_shuffle leaves the order as is by coincidence
55 // is negligible, so we expect it to be permuted
56 VERIFY(!std::equal(s1, s1 + N, A TAG));
57
58 std::sort(s1, s1 + N TAG);
59 VERIFY(std::equal(s1, s1 + N, A TAG));
60#if _GLIBCXX_PARALLEL
61 }
62#endif
63}
64
65int
66main()
67{
68#if _GLIBCXX_PARALLEL
69 __gnu_parallel::_Settings gpms = __gnu_parallel::_Settings::get();
70 gpms.algorithm_strategy = __gnu_parallel::force_parallel;
71 __gnu_parallel::_Settings::set(gpms);
72#endif
73 test01();
74 return 0;
75}