brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.8 KiB · 90132ba Raw
65 lines · cpp
1//===----------------------------------------------------------------------===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8 9// <algorithm>10 11// template<RandomAccessIterator Iter>12//   requires ShuffleIterator<Iter>13//   void14//   random_shuffle(Iter first, Iter last);15 16// REQUIRES: c++03 || c++11 || c++1417// ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_DISABLE_DEPRECATION_WARNINGS18 19#include <algorithm>20#include <array>21#include <cassert>22 23#include "test_macros.h"24#include "test_iterators.h"25 26template <class Iter>27void28test_with_iterator()29{30  std::array<int, 0> empty = {};31  std::random_shuffle(Iter(empty.data()), Iter(empty.data()));32 33  const int all_elements[] = {1, 2, 3, 4};34  int shuffled[]           = {1, 2, 3, 4};35  const unsigned size      = sizeof(all_elements) / sizeof(all_elements[0]);36 37  std::random_shuffle(Iter(shuffled), Iter(shuffled + size));38  assert(std::is_permutation(shuffled, shuffled + size, all_elements));39 40  std::random_shuffle(Iter(shuffled), Iter(shuffled + size));41  assert(std::is_permutation(shuffled, shuffled + size, all_elements));42}43 44 45int main(int, char**)46{47    int ia[]  = {1, 2, 3, 4};48    int ia1[] = {1, 4, 3, 2};49    int ia2[] = {4, 1, 2, 3};50    const unsigned sa = sizeof(ia)/sizeof(ia[0]);51 52    std::random_shuffle(ia, ia+sa);53    LIBCPP_ASSERT(std::equal(ia, ia+sa, ia1));54    assert(std::is_permutation(ia, ia+sa, ia1));55 56    std::random_shuffle(ia, ia+sa);57    LIBCPP_ASSERT(std::equal(ia, ia+sa, ia2));58    assert(std::is_permutation(ia, ia+sa, ia2));59 60    test_with_iterator<random_access_iterator<int*> >();61    test_with_iterator<int*>();62 63  return 0;64}65