diff options
Diffstat (limited to 'libcxx/test/std/algorithms/alg.modifying.operations/alg.random.shuffle/random_shuffle.pass.cpp')
-rw-r--r-- | libcxx/test/std/algorithms/alg.modifying.operations/alg.random.shuffle/random_shuffle.pass.cpp | 28 |
1 files changed, 27 insertions, 1 deletions
diff --git a/libcxx/test/std/algorithms/alg.modifying.operations/alg.random.shuffle/random_shuffle.pass.cpp b/libcxx/test/std/algorithms/alg.modifying.operations/alg.random.shuffle/random_shuffle.pass.cpp index 6a85b995cb1..6ae7eb964a1 100644 --- a/libcxx/test/std/algorithms/alg.modifying.operations/alg.random.shuffle/random_shuffle.pass.cpp +++ b/libcxx/test/std/algorithms/alg.modifying.operations/alg.random.shuffle/random_shuffle.pass.cpp @@ -18,17 +18,43 @@ #include <cassert> #include "test_macros.h" +#include "test_iterators.h" + +template <class Iter> +void +test_with_iterator() +{ + int empty[] = {}; + std::random_shuffle(Iter(empty), Iter(empty)); + + const int all_elements[] = {1, 2, 3, 4}; + int shuffled[] = {1, 2, 3, 4}; + const unsigned size = sizeof(all_elements)/sizeof(all_elements[0]); + + std::random_shuffle(Iter(shuffled), Iter(shuffled+size)); + assert(std::is_permutation(shuffled, shuffled+size, all_elements)); + + std::random_shuffle(Iter(shuffled), Iter(shuffled+size)); + assert(std::is_permutation(shuffled, shuffled+size, all_elements)); +} + int main() { - int ia[] = {1, 2, 3, 4}; + int ia[] = {1, 2, 3, 4}; int ia1[] = {1, 4, 3, 2}; int ia2[] = {4, 1, 2, 3}; const unsigned sa = sizeof(ia)/sizeof(ia[0]); + std::random_shuffle(ia, ia+sa); LIBCPP_ASSERT(std::equal(ia, ia+sa, ia1)); assert(std::is_permutation(ia, ia+sa, ia1)); + std::random_shuffle(ia, ia+sa); LIBCPP_ASSERT(std::equal(ia, ia+sa, ia2)); assert(std::is_permutation(ia, ia+sa, ia2)); + + test_with_iterator<random_access_iterator<int*> >(); + test_with_iterator<int*>(); + } |