1// Copyright (C) 2013-2015 Free Software Foundation, Inc. 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 6// Free Software Foundation; either version 3, or (at your option) 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 15// with this library; see the file COPYING3. If not see 16// <http://www.gnu.org/licenses/>. 17 18// { dg-options "-std=gnu++11" } 19// { dg-options "-std=gnu++11 -DSIMULATOR_TEST" { target simulator } } 20// { dg-require-cstdint "" } 21 22// 25.4.1.4 [lib.alg.partial.sort.copy] 23 24#include <algorithm> 25#include <random> 26#include <vector> 27#include <testsuite_hooks.h> 28#include <testsuite_iterators.h> 29#include <testsuite_containergen.h> 30 31using __gnu_test::test_container; 32using __gnu_test::random_access_iterator_wrapper; 33 34typedef test_container<int, random_access_iterator_wrapper> Container; 35 36struct testPartialSortCopy 37{ 38 template<typename Container, typename RandomGen> 39 void operator()(Container con, RandomGen& rg) 40 { 41 bool test __attribute__((unused)) = true; 42 43 const int size = con.end() - con.begin(); 44 auto dist = std::uniform_int_distribution<>(0, size); 45 const int element = dist(rg); 46 47 std::vector<int> outvec(element + 1); // add +1 to avoid empty issues 48 49 Container out(outvec.data(), outvec.data() + element); 50 51 std::partial_sort_copy(con.begin(), con.end(), 52 out.begin(), out.begin() + element); 53 54 VERIFY( std::is_sorted(out.begin(), out.begin() + element) ); 55 56 std::sort(con.begin(), con.end()); 57 58 for (int i = 0; i < element; ++i) 59 VERIFY( con.val(i) == out.val(i) ); 60 } 61}; 62 63int 64main() 65{ 66 __gnu_test::test_containers<Container>(testPartialSortCopy()); 67} 68